EDA技术分频器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为什么要使用UNSIGNED.ALL
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
为什么要打开 这个程序包
1
原因
VHDL是一种强数据类型语言. VHDL是一种强数据类型语言. 是一种强数据类型语言 要求设计实体中的每一个常数,信号,变量, 要求设计实体中的每一个常数,信号,变量, 函数以及设定的各种参量都必须具有确定的数据类型, 函数以及设定的各种参量都必须具有确定的数据类型, 并且相同数据类型的量才能互相传递和作用. 并且相同数据类型的量才能互相传递和作用. 对于算术运算符, 对于算术运算符,如"+","-"等,要求操作数必须是 , 等 整型.对于不是整型的数据要进行算术运算, 整型.对于不是整型的数据要进行算术运算,就必须 把非整型数据转换为整型数据. 把非整型数据转换为整型数据. 因此,就必须打开STD_LOGIC_UNSIGNED这个程序包. 因此,就必须打开STD_LOGIC_UNSIGNED这个程序包. STD_LOGIC_UNSIGNED这个程序包
19
为什么要使用分频器
因为只有一个外部时钟,而需要两个时 钟,一个是计数时钟,另一个是扫描时钟. 扫描时钟的频率远大于计数时钟.因此, 需要将扫描时钟进行分频.
如何设计分频器? 如何设计分频器?
20
仿真
因为使用了动态扫描,故仿真波形不是很 直观.可以不做波形仿真.
21
管脚分配
rst: rst: en: en: clk: clk: ledseg0 ledseg0: ledseg1 ledseg1: ledseg2 ledseg2: ledseg3 ledseg3: ledseg4 ledseg4: ledseg5 ledseg5: ledseg6: ledseg6 ledsel0 ledsel0: ledsel1 ledsel1: ledsel2 ledsel2: cout: cout: P41 P42 P55 P72 P73 P78 P79 P80 P81 P82 P68 P69 P70 P116 K1 K2 CLK1 CLK1 LED_a LED_b LED_c LED_d LED_e LED_f LED_g LED_SEL0 LED_SEL0 LED_SEL1 LED_SEL1 LED_SEL2 LED_SEL2 OUT1 OUT1
17
动态扫描
为什么要动态扫描? 因为EDA实验箱上的六个数码管的使能端 连接到3-8译码器,当3-8译码器输出有效时, 数码管点亮.在一个瞬间(时刻), 3-8译码 器的只有一个输出有效,只能点亮一个数码管. 但是现在要同时显示三个数码管,就必须要使 3-8译码器输出变换的很快,利用人眼的视觉残 余惰性,看上去好像同时点亮了三个数码管.
1, VHDL设计n进制加法计数器 2, VHDL设计BCD-7段显示译码器 3 , VHDL设计动态扫描电路 4 , VHDL设计分频器电路 5, 原理图设计n进制带3个数码管显 示的加法n进制计数电路
15
n进制加法计数译码显示电路的实体符号
16
设计分析
n进制加法计数译码显示电路由n进制 加法分频器电路,计数器电路,显示电路, 动态扫描电路组成.其中,计数器电路, 译码显示电路就是项目6做过的计数显示 译码器电路,故本项目其实只要完成分频 器电路和动态扫描电路的设计.
10
功能仿真
4分频电路(占空比位1:2)仿真波形如图7.2所示.
11
10分频电路(占空比位1:2)仿真波形如图7.3所示.
12
5分频电路(占空比位2:5)仿真波形如图7.4所示.
13
5分频电路(占空比位1:2)仿真波形如图7.5所示.
14
周四实验:n进制加法计数译码 显示电路 (n=你学号后3位) 任务与要求:
18
如何设计动态扫描电路?
经过以上分析,只要3-8译码器输出变换得很快,就能实现. 那么如何使3-8译码器输出快速变换呢? 只要在很短时间内给3-8译码器送不同的输入. 那么如何使3-8译码器的输入快速变换? 做一个3选1多路选择器,使选择信号快速变换,将3选1 的输出连到3-8译码器的输入即可. 如何使选择信号快速变换? 做一个快速的计数器,将计数输出连接到3选1的选择信号 即可. 如何做快速计数器?只要计数的时钟频率高就可以实现了.
2
转换函数表 P34
函数
STD_LOGIC_1164包 包 TO_STDLOGICVECTOR(A) TO_BITVECTOR(A) TO_LOGIC(A) TO_BIT(A) STD_LOGIC_ARITH包 包 CONV_STD_LOGIC_VECTOR(A, 位长) 位长 CONV_INTEGER(A)
8Байду номын сангаас
3. 分频比是偶数,占空比是和分频比相同. 分频比是偶数,占空比是和分频比相同.
例7.3 将输入的时钟信号进行16分频,分频信号的占空比为 1:15. 将输入的时钟信号进行16分频, 16分频 15. ARCHITECTURE RTL OF CLK_DIV IS STD_LOGIC_VECTOR(3 SIGNAL COUNT : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN (CLK'EVENT CLK='1 ) IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="1111 1111") =>'0 ) IF(COUNT= 1111 ) THEN COUNT <= (OTHERS => 0'); ELSE COUNT <= COUNT +1; PROCESS; END IF ; END IF ; END PROCESS; PROCESS(CLK) BEGIN (CLK'EVENT CLK='1 ) IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="1111 1111") CLK_DIV16 IF(COUNT= 1111 ) THEN CLK_DIV16 <= '1'; 1; ELSE CLK_DIV <= '0'; 0; PROCESS; RTL; END IF ; END IF ;END PROCESS;END RTL; 9
说明
由BIT_VECTOR转换成 转换成 STD_LOGIC_VECTOR 由STD_LOGIC_VECTOR转换成 转换成 BIT_VECTOR 转换成STD_LOGIC 由BIT转换成 转换成 转换成BIT 由STD_LOGIC转换成 转换成 由INTEGER,UNSIGNED和SIGNED转换成 和 转换成 STD_LOGIC_VECTOR 转换成INTEGER 由UNSIGNED和SIGNED转换成 和 转换成
STD_LOGIC_UNSIGNED包 包 CONV_INTEGER
STD_LOGIC_VECTOR转换成 转换成INTEGER 转换成
3
分频器
1.分频器的概念
分频器是一般是用于音箱内的一种电路装置,是指将不同频段 的信号区分开来,用以将输入的音乐信号分离成高音,中音,低 音等不同部分,然后分别送入相应的高,中,低音喇叭单元中重 放.分频器是音箱中的"大脑",对音质的好坏至关重要.功放 输出的音乐讯号必须经过分频器中的各滤波元件处理,让各单元 特定频率的讯号通过.好音箱的分频器,能有效地修饰喇叭单元 的不同特性,优化组合,使得各单元扬长避短,淋漓尽致地发挥 出各自应有的潜能,使各频段的频响变得平滑,声像相位准确, 才能使高,中,低音播放出来的音乐层次分明,合拍,明朗,舒 适,宽广,自然的音质效果. 本课程涉及的分频器是用于降低频率,如输入为12HZ的信号进 行12分频输出为1HZ的信号,就是12分频器,或者称这个分频器的 分频比是1:12.
7
2. 分频比不是2的整数次幂,但是偶数,占空比是0.5 分频比不是2的整数次幂,但是偶数,占空比是0.5
例7.2 对时钟信号CLK进行6分频. 对时钟信号CLK进行6分频. CLK进行 ARCHITECTURE RTL OF CLK_DIV IS STD_LOGIC_VECTOR(1 SIGNAL COUNT : STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL CLK_TEMP : STD_LOGIC; STD_LOGIC; BEGIN PROCESS(CLK) (CLK'EVENT CLK='1 ) BEGIN IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="10 10") =>'0 ) IF(COUNT= 10 ) THEN COUNT <= (OTHERS => 0'); CLK_TEMP; CLK_TEMP <=NOT CLK_TEMP; ELSE COUNT <= COUNT +1; PROCESS; END IF ; END IF ;END PROCESS; CLK_DIV6 CLK_TEMP; CLK_DIV6 <= CLK_TEMP; END RTL; RTL;
4
2.占空比(DUTY CYCLE) 占空比在电信领域中有如下含义: 在一串理想的脉冲序列中(如方 波),正脉冲的持续时间与脉冲总 周期的比值.例如:正脉冲宽度 1ΜS,信号周期4ΜS的脉冲序列占 空比为0.25或者为1:4.
5
使用VHDL基本语句设计分频器电路
分频器电路在VHDL中一般采用计数器 进行描述.根据要求的分频比和占空比 的不同,相应的描述方法也不同.
6
1. 分频比是2的整数次幂,占空比是0.5 分频比是2的整数次幂,占空比是0.5
例7.1 对时钟信号CLK进行2分频,4分频,8分频,16分频. 对时钟信号CLK进行2分频, 分频, 分频,16分频 CLK进行 分频. ARCHITECTURE RTL OF CLK_DIV IS STD_LOGIC_VECTOR(3 SIGNAL COUNT : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN (CLK'EVENT CLK='1 ) IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="1111 1111") =>'0 ) IF(COUNT= 1111 ) THEN COUNT <= (OTHERS => 0'); ELSE COUNT <= COUNT +1; END IF ; END IF ; PROCESS; END PROCESS; CLK_DIV2 COUNT(0 CLK_DIV4 COUNT(1 CLK_DIV2 <= COUNT(0);CLK_DIV4 <= COUNT(1); CLK_DIV8 COUNT(2 CLK_DIV16 COUNT(3 CLK_DIV8 <= COUNT(2);CLK_DIV16 <= COUNT(3); END RTL;
4. 分频比是奇数,占空比是0.5. 分频比是奇数,占空比是0.5 0.5.
例7.4将输入的时钟信号进行5分频,分频信号的占空比为 1:1. 将输入的时钟信号进行5分频,
ARCHITECTURE ONE OF CLKDIV5_1TO2 IS SIGNAL CNT:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL OUT_TEMP1,OUT_TEMP2: STD_LOGIC; BEGIN PROCESS(CLK) BEGIN IF RISING_EDGE(CLK) THEN IF CNT="100" THEN CNT<="000"; ELSE CNT<=CNT+1; END IF;END IF;END PROCESS; PROCESS(CLK,CNT) FALLING_EDGE( BEGIN IF FALLING_EDGE(CLK) THEN IF (CNT<2) THEN OUT_TEMP1<='1'; ELSE OUT_TEMP1<='0'; END IF; END IF;END PROCESS; PROCESS(CLK,CNT) RISING_EDGE(CLK) BEGIN IF RISING_EDGE(CLK) THEN IF (CNT<2) THEN OUT_TEMP2<='1'; ELSE OUT_TEMP2<='0'; END IF; END IF;END PROCESS; CLKOUT<=OUT_TEMP2 OR OUT_TEMP1; END;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
为什么要打开 这个程序包
1
原因
VHDL是一种强数据类型语言. VHDL是一种强数据类型语言. 是一种强数据类型语言 要求设计实体中的每一个常数,信号,变量, 要求设计实体中的每一个常数,信号,变量, 函数以及设定的各种参量都必须具有确定的数据类型, 函数以及设定的各种参量都必须具有确定的数据类型, 并且相同数据类型的量才能互相传递和作用. 并且相同数据类型的量才能互相传递和作用. 对于算术运算符, 对于算术运算符,如"+","-"等,要求操作数必须是 , 等 整型.对于不是整型的数据要进行算术运算, 整型.对于不是整型的数据要进行算术运算,就必须 把非整型数据转换为整型数据. 把非整型数据转换为整型数据. 因此,就必须打开STD_LOGIC_UNSIGNED这个程序包. 因此,就必须打开STD_LOGIC_UNSIGNED这个程序包. STD_LOGIC_UNSIGNED这个程序包
19
为什么要使用分频器
因为只有一个外部时钟,而需要两个时 钟,一个是计数时钟,另一个是扫描时钟. 扫描时钟的频率远大于计数时钟.因此, 需要将扫描时钟进行分频.
如何设计分频器? 如何设计分频器?
20
仿真
因为使用了动态扫描,故仿真波形不是很 直观.可以不做波形仿真.
21
管脚分配
rst: rst: en: en: clk: clk: ledseg0 ledseg0: ledseg1 ledseg1: ledseg2 ledseg2: ledseg3 ledseg3: ledseg4 ledseg4: ledseg5 ledseg5: ledseg6: ledseg6 ledsel0 ledsel0: ledsel1 ledsel1: ledsel2 ledsel2: cout: cout: P41 P42 P55 P72 P73 P78 P79 P80 P81 P82 P68 P69 P70 P116 K1 K2 CLK1 CLK1 LED_a LED_b LED_c LED_d LED_e LED_f LED_g LED_SEL0 LED_SEL0 LED_SEL1 LED_SEL1 LED_SEL2 LED_SEL2 OUT1 OUT1
17
动态扫描
为什么要动态扫描? 因为EDA实验箱上的六个数码管的使能端 连接到3-8译码器,当3-8译码器输出有效时, 数码管点亮.在一个瞬间(时刻), 3-8译码 器的只有一个输出有效,只能点亮一个数码管. 但是现在要同时显示三个数码管,就必须要使 3-8译码器输出变换的很快,利用人眼的视觉残 余惰性,看上去好像同时点亮了三个数码管.
1, VHDL设计n进制加法计数器 2, VHDL设计BCD-7段显示译码器 3 , VHDL设计动态扫描电路 4 , VHDL设计分频器电路 5, 原理图设计n进制带3个数码管显 示的加法n进制计数电路
15
n进制加法计数译码显示电路的实体符号
16
设计分析
n进制加法计数译码显示电路由n进制 加法分频器电路,计数器电路,显示电路, 动态扫描电路组成.其中,计数器电路, 译码显示电路就是项目6做过的计数显示 译码器电路,故本项目其实只要完成分频 器电路和动态扫描电路的设计.
10
功能仿真
4分频电路(占空比位1:2)仿真波形如图7.2所示.
11
10分频电路(占空比位1:2)仿真波形如图7.3所示.
12
5分频电路(占空比位2:5)仿真波形如图7.4所示.
13
5分频电路(占空比位1:2)仿真波形如图7.5所示.
14
周四实验:n进制加法计数译码 显示电路 (n=你学号后3位) 任务与要求:
18
如何设计动态扫描电路?
经过以上分析,只要3-8译码器输出变换得很快,就能实现. 那么如何使3-8译码器输出快速变换呢? 只要在很短时间内给3-8译码器送不同的输入. 那么如何使3-8译码器的输入快速变换? 做一个3选1多路选择器,使选择信号快速变换,将3选1 的输出连到3-8译码器的输入即可. 如何使选择信号快速变换? 做一个快速的计数器,将计数输出连接到3选1的选择信号 即可. 如何做快速计数器?只要计数的时钟频率高就可以实现了.
2
转换函数表 P34
函数
STD_LOGIC_1164包 包 TO_STDLOGICVECTOR(A) TO_BITVECTOR(A) TO_LOGIC(A) TO_BIT(A) STD_LOGIC_ARITH包 包 CONV_STD_LOGIC_VECTOR(A, 位长) 位长 CONV_INTEGER(A)
8Байду номын сангаас
3. 分频比是偶数,占空比是和分频比相同. 分频比是偶数,占空比是和分频比相同.
例7.3 将输入的时钟信号进行16分频,分频信号的占空比为 1:15. 将输入的时钟信号进行16分频, 16分频 15. ARCHITECTURE RTL OF CLK_DIV IS STD_LOGIC_VECTOR(3 SIGNAL COUNT : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN (CLK'EVENT CLK='1 ) IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="1111 1111") =>'0 ) IF(COUNT= 1111 ) THEN COUNT <= (OTHERS => 0'); ELSE COUNT <= COUNT +1; PROCESS; END IF ; END IF ; END PROCESS; PROCESS(CLK) BEGIN (CLK'EVENT CLK='1 ) IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="1111 1111") CLK_DIV16 IF(COUNT= 1111 ) THEN CLK_DIV16 <= '1'; 1; ELSE CLK_DIV <= '0'; 0; PROCESS; RTL; END IF ; END IF ;END PROCESS;END RTL; 9
说明
由BIT_VECTOR转换成 转换成 STD_LOGIC_VECTOR 由STD_LOGIC_VECTOR转换成 转换成 BIT_VECTOR 转换成STD_LOGIC 由BIT转换成 转换成 转换成BIT 由STD_LOGIC转换成 转换成 由INTEGER,UNSIGNED和SIGNED转换成 和 转换成 STD_LOGIC_VECTOR 转换成INTEGER 由UNSIGNED和SIGNED转换成 和 转换成
STD_LOGIC_UNSIGNED包 包 CONV_INTEGER
STD_LOGIC_VECTOR转换成 转换成INTEGER 转换成
3
分频器
1.分频器的概念
分频器是一般是用于音箱内的一种电路装置,是指将不同频段 的信号区分开来,用以将输入的音乐信号分离成高音,中音,低 音等不同部分,然后分别送入相应的高,中,低音喇叭单元中重 放.分频器是音箱中的"大脑",对音质的好坏至关重要.功放 输出的音乐讯号必须经过分频器中的各滤波元件处理,让各单元 特定频率的讯号通过.好音箱的分频器,能有效地修饰喇叭单元 的不同特性,优化组合,使得各单元扬长避短,淋漓尽致地发挥 出各自应有的潜能,使各频段的频响变得平滑,声像相位准确, 才能使高,中,低音播放出来的音乐层次分明,合拍,明朗,舒 适,宽广,自然的音质效果. 本课程涉及的分频器是用于降低频率,如输入为12HZ的信号进 行12分频输出为1HZ的信号,就是12分频器,或者称这个分频器的 分频比是1:12.
7
2. 分频比不是2的整数次幂,但是偶数,占空比是0.5 分频比不是2的整数次幂,但是偶数,占空比是0.5
例7.2 对时钟信号CLK进行6分频. 对时钟信号CLK进行6分频. CLK进行 ARCHITECTURE RTL OF CLK_DIV IS STD_LOGIC_VECTOR(1 SIGNAL COUNT : STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL CLK_TEMP : STD_LOGIC; STD_LOGIC; BEGIN PROCESS(CLK) (CLK'EVENT CLK='1 ) BEGIN IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="10 10") =>'0 ) IF(COUNT= 10 ) THEN COUNT <= (OTHERS => 0'); CLK_TEMP; CLK_TEMP <=NOT CLK_TEMP; ELSE COUNT <= COUNT +1; PROCESS; END IF ; END IF ;END PROCESS; CLK_DIV6 CLK_TEMP; CLK_DIV6 <= CLK_TEMP; END RTL; RTL;
4
2.占空比(DUTY CYCLE) 占空比在电信领域中有如下含义: 在一串理想的脉冲序列中(如方 波),正脉冲的持续时间与脉冲总 周期的比值.例如:正脉冲宽度 1ΜS,信号周期4ΜS的脉冲序列占 空比为0.25或者为1:4.
5
使用VHDL基本语句设计分频器电路
分频器电路在VHDL中一般采用计数器 进行描述.根据要求的分频比和占空比 的不同,相应的描述方法也不同.
6
1. 分频比是2的整数次幂,占空比是0.5 分频比是2的整数次幂,占空比是0.5
例7.1 对时钟信号CLK进行2分频,4分频,8分频,16分频. 对时钟信号CLK进行2分频, 分频, 分频,16分频 CLK进行 分频. ARCHITECTURE RTL OF CLK_DIV IS STD_LOGIC_VECTOR(3 SIGNAL COUNT : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN (CLK'EVENT CLK='1 ) IF (CLK EVENT AND CLK= 1') THEN IF(COUNT="1111 1111") =>'0 ) IF(COUNT= 1111 ) THEN COUNT <= (OTHERS => 0'); ELSE COUNT <= COUNT +1; END IF ; END IF ; PROCESS; END PROCESS; CLK_DIV2 COUNT(0 CLK_DIV4 COUNT(1 CLK_DIV2 <= COUNT(0);CLK_DIV4 <= COUNT(1); CLK_DIV8 COUNT(2 CLK_DIV16 COUNT(3 CLK_DIV8 <= COUNT(2);CLK_DIV16 <= COUNT(3); END RTL;
4. 分频比是奇数,占空比是0.5. 分频比是奇数,占空比是0.5 0.5.
例7.4将输入的时钟信号进行5分频,分频信号的占空比为 1:1. 将输入的时钟信号进行5分频,
ARCHITECTURE ONE OF CLKDIV5_1TO2 IS SIGNAL CNT:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL OUT_TEMP1,OUT_TEMP2: STD_LOGIC; BEGIN PROCESS(CLK) BEGIN IF RISING_EDGE(CLK) THEN IF CNT="100" THEN CNT<="000"; ELSE CNT<=CNT+1; END IF;END IF;END PROCESS; PROCESS(CLK,CNT) FALLING_EDGE( BEGIN IF FALLING_EDGE(CLK) THEN IF (CNT<2) THEN OUT_TEMP1<='1'; ELSE OUT_TEMP1<='0'; END IF; END IF;END PROCESS; PROCESS(CLK,CNT) RISING_EDGE(CLK) BEGIN IF RISING_EDGE(CLK) THEN IF (CNT<2) THEN OUT_TEMP2<='1'; ELSE OUT_TEMP2<='0'; END IF; END IF;END PROCESS; CLKOUT<=OUT_TEMP2 OR OUT_TEMP1; END;