【教学课件】第6章VHDL设计应用实例.ppt
《【教学课件】第6章VHDL设计应用实例.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第6章VHDL设计应用实例.ppt(245页珍藏版)》请在三一办公上搜索。
1、第6章 VHDL设计应用实例,6.1 8位加法器的设计 6.3 序列检测器的设计 6.4 正负脉宽数控调制信号发生器的设计 6.5 数字频率计的设计 6.6 数字秒表的设计,6.1 8位加法器的设计,1设计思路 多位加法器由4位二进制并行加法器级联构成是较好选择。本设计中的8位二进制并行加法器即是由两个4位二进制并行加法器级联而成的,其电路原理图如图6.1所示。,图6.1 8位加法器电路原理图,2VHDL源程序1)4位二进制并行加法器的源程序ADDER4B.VHDLIBRARY IEEE;ENTITY ADDER4B IS-4位二进制并行加法器PORT(C4:IN STD_LOGIC;-低位来
2、的进位,A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-4位加数 B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-4位被加数 S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-4位和 CO4:OUT STD_LOGIC);-进位输出 END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B IS SIGNAL S5:STD_LOGIC_VECTOR(4 DOWNTO 0);-中间结果 SIGNAL A5,B5:STD_LOGIC_VECTOR(4 DOWNTO 0);-扩展加数以及被加数
3、位,BEGIN A5=0&A4;-将4位加数矢量扩为5位,为进位提供空间 B5=0&B4;-将4位被加数矢量扩为5位,为进位提供空间 S5=A5+B5+C4;S4=S5(3 DOWNTO 0);-四位和给S4 CO4=S5(4);-进位给CO4END ARCHITECTURE ART;,2)8位二进制加法器的源程序ADDER8B.VHDLIBRARY IEEE;:ENTITY ADDER8B IS-由4位二进制并行加法器级联而成的8位二进制加法器PORT(C8:IN STD_LOGIC;A8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8:IN STD_LOGIC_VEC
4、TOR(7 DOWNTO 0);,S8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8:OUT STD_LOGIC);END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B IS-对要调用的元件ADDER4B的界面端口进行定义PORT(C4:IN STD_LOGIC;A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);,B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4:OUT
5、 STD_LOGIC);END COMPONENT ADDER4B;SIGNAL SC:STD_LOGIC;-4位加法器的进位标志BEGINU1:ADDER4B-例化(安装)一个4位二进制加法器U1PORT MAP(C4=C8,A4=A8(3 DOWNTO 0),B4=B8(3 DOWNTO0),S4=S8(3 DOWNTO 0),CO4=SC);,U2:ADDER4B-例化(安装)一个4位二进制加法器U2PORT MAP(C4=SC,A4=A8(7 DOWNTO 4),B4=B8(7 DOWNTO 4),S4=S8(7 DOWNTO 4),CO4=CO8);END ARCHITECTURE
6、ART;,6.3 序列检测器的设计,1设计思路 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。如图6.3所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续检测中都与预置的密码数相同,则输出“A”,否则仍然输出“B”。,图6.3 8位序列检测器逻辑图,2VHDL源程序LIBRARY IEEE;ENTITY CHK IS PORT(DIN:IN STD_LOGIC;-串行输入数据位 CLK,CLR:IN STD_LOGIC;-工作时钟/复位信号 D:IN STD_LOGIC
7、_VECTOR(7 DOWNTO 0);-8位待检测预置数 AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-检测结果输出,END ENTITY CHK;ARCHITECTURE ART OF CHK IS SIGNAL Q:INTEGER RANGE 0 TO 8;-作为标志位BEGINPROCESS(CLK,CLR)ISBEGINIF CLR=1 THEN Q=0;ELSIF CLKEVENT AND CLK=1 THEN-时钟到来时,判断并处理当前输入的位,CASE Q ISWHEN 0=IF DIN=D(7)THEN Q IF DIN=D(6)THEN Q IF
8、 DIN=D(5)THEN Q IF DIN=D(4)THEN Q IF DIN=D(3)THEN Q IF DIN=D(2)THEN Q IF DIN=D(1)THEN Q IF DIN=D(0)THEN Q Q=0;END CASE;END IF;END PROCESS;,PROCESS(Q)IS-检测结果判断输出BEGINIF Q=8 THEN AB=1010;-序列数检测正确,输出“A”ELSE AB=1011;-序列数检测错误,输出“B”END IF;END PROCESS;END ARCHITECTURE ART;,6.4 正负脉宽数控调制信号发生器的设计,1设计思路 图6.4 是
9、脉宽数控调制信号发生器逻辑图,此信号发生器是由两个完全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高低电平脉宽可分别由两组8位预置数进行控制。,图6.4 脉宽数控调制信号发生器逻辑图,2VHDL源程序1)8位可自加载加法计数器的源程序LCNT8.VHDLIBRARY IEEE;ENTITY LCNT8 IS-8位可自加载加法计数器 PORT(CLK,LD:IN STD_LOGIC;-工作时钟/预置值加载信号 D:IN INTEGER RANGE 0 TO 255-8位分频预置数 CAO:OUT STD_LOGIC);-计数溢出输出END ENTITY LCNT8;,ARCHITEC
10、TURE ART OF LCNT8 IS SIGNAL COUNT:INTEGER RANGE 0 TO 255;-8位计数器设置BEGINPROCESS(CLK)ISBEGIN IF CLKEVENT AND CLK=1 THEN IF LD=1 THEN COUNT=D;-LD为高电平时加载预置数,ELSE COUNT=COUNT+1;-否则继续计数 END IF;END IF;END PROCESS;,PROCESS(CLK,COUNT)ISBEGIN IF CLKEVENT AND CLK=1 THEN IF COUNT=255 THEN CAO=1;ELSE CAO=0;END IF
11、;END IF;END PROCESS;END ARCHITECTURE ART;,2)正负脉宽数控调制信号发生器的源程序LIBRARY IEEE-正负脉宽数控调制信号发生器顶层文件;ENTITY PULSE IS PORT(CLK:IN STD_LOGIC;-计数时钟 A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-8位计数预置数 PSOUT:OUT STD_LOGIC);-计数溢出并分频输出END ENTITY PULSE;,ARCHITECTURE ART OF PULSE ISCOMPONENT LCNT8 IS PORT(CLK,LD:IN STD_LOGI
12、C;D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CAO:OUT STD_LOGIC);END COMPONENT LCNT8;SIGNAL CAO1,CAO2:STD_LOGIC;SIGNAL LD1,LD2:STD_LOGIC;-计数加载信号中间量,SIGNAL PSINT:STD_LOGIC;BEGINU1:LCNT8 PORT MAP(CLK=CLK,LD=LD1,D=A,CAO=CAO1);U2:LCNT8 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2);PROCESS(CAO1,CAO2)ISBEGINIF CAO1=1 THEN
13、PSINT=0;-计数溢出信号清0,ELSIF CAO2 EVENT AND CAO2=1 THEN PSINT=1;END IF;END PROCESS;LD1=NOT PSINT;LD2=PSINT;PSOUT=PSINT;END ARCHITECTURE ART;,6.5 数字频率计的设计,1.设计思路 图6.5是8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、八个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。,图6.5 8位十进制数字频率计逻辑图,1)测频控制信号发生器设计 频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。要使计数
14、使能信号TSTEN能产生一个1秒脉宽的周期信号,对每个计数器CNT10的ENA使能端进行同步控制。TSTEN为高电平时,计数;低电平时,停止计数,并保持当前值。测频控制信号发生器的工作时序如图6.6所示。为了产生这个时序图,需建立一个由D触发器构成的二分频器,在每次时钟CLK(1HZ)上沿到来时,TSTEN值翻转,脉宽为1秒,作为闸门信号。,图6.6 测频控制信号发生器工作时序,2)寄存器REG32B设计 设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。3)十进制计数器CNT10的设计 如图6.5所示,此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于锁定计数值
15、。当高电平时计数允许,低电平时计数禁止。,2.VHDL源程序1)有时钟使能的十进制计数器的源程序CNT10.VHDLIBRARY IEEE;ENTITY CNT10 IS PORT(CLK:IN STD_LOGIC;-计数时钟信号 CLR:IN STD_LOGIC;-清零信号 ENA:IN STD_LOGIC;-计数使能信号 CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出 CARRY_OUT:OUT STD_LOGIC);-计数进位输出,END ENTITY CNT10;ARCHITECTURE ART OF CNT10 IS SIGNAL CQI:INTEGER
16、 RANGE 0 TO 15;BEGINPROCESS(CLK,CLR,ENA)ISBEGINIF CLR=1 THEN CQI=0;-计数器异步清零ELSIF CLKEVENT AND CLK=1 THEN IF ENA=1 THEN,IF CQI9 THEN CQI=CQI+1;ELSE CQI=0;END IF;-等于9,则计数器清零 END IF;END IF;END PROCESS;PROCESS(CQI)IS BEGIN IF CQI=9 THEN CARRY_OUT=1;-进位输出 ELSE CARRY_OUT=0;END IF;END PROCESS;CQ=CQI;END AR
17、CHITECTURE ART;,2)32位锁存器的源程序REG32B.VHDLIBRARY IEEE;ENTITY REG32B IS PORT(LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT:OUT STD_LOGEC_VECTOR(31 DOWNTO 0);END ENTITY REG32B;,ARCHITECTURE ART OF REG32B IS BEGINPROCESS(LOAD,DIN)ISBEGINIF LOAD EVENT AND LOAD=1 THEN DOUT=DIN;-锁存输入数据 END IF;E
18、ND PROCESS;END ARCHITECTURE ART;,3)测频控制信号发生器的源程序TESTCTL.VHD LIBRARY IEEE;ENTITY TESTCTL IS PORT(CLK:IN STD_LOGIC;-1 Hz测频控制时钟 TSTEN:OUT STD_LOGIC;-计数器时钟使能 CLR_CNT:OUT STD_LOGIC;-计数器清零 LOAD:OUT STD_LOGIC);-输出锁存信号,END ENTITY TESTCTL;ARCHITECTURE ART OF TESTCTL IS SIGNAL DIV2CLK:STD_LOGIC;BEGINPROCESS(C
19、LK)IS BEGINIF CLKEVENT AND CLK=1 THEN DIV2CLK=NOT DIV2CLK;-1 HZ时钟二分频END IF;,END PROCESS;PROCESS(CLK,DIV2CLK)ISBEGIN IF CLK=0 AND DIV2CLK=0 THEN CLR_CNT=1;-0.5S后产生计数器清零信号 ELSE CLR_CNT=0;END IF;END PROCESS;LOAD=NOT DIV2CLK;TSTEN=DIV2CLK;-根据时序图来确定END ARCHITECTURE ART;,4)数字频率计的源程序FREQ.VHDLIBRARY IEEE;EN
20、TITY FREQ IS PORT(FSIN:IN STD_LOGIC;CLK:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0);END ENTITY FREQ;ARCHITECTURE ART OF FREQ IS,COMPONENT CNT10 IS-待调用的有时钟使能的十进制计数器端口定义 PORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);END COMPONENT CNT10;COMPONENT REG
21、32B IS-待调用的32位锁存器端口定义 COMPONENT TESTCTL IS-待调用的测频控制信号发生器端口定义,SIGNAL SE,SC,SL:STD_LOGIC;SIGNAL S1,S2,S3,S4,S5,S6,S7,S7,S8:STD_LOGIC;SIGNAL SD:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINU0:TESTCTL PORT MAP(CLK=CLK,TSTEN=SE,CLR_CNT=SC,LOAD=SL);U1:CNT10 PORT MAP(CLK=FSIN,CLR=SC,ENA=SE,CQ=SD(3 DOWNTO 0),CARRY_OU
22、T=S1);-名字关联,U2:CNT10 PORT MAP(CLK=S1,CLR=SC,ENA=SE,CQ=SD(7 DOWNTO 4),CARRY_OUT=S2);U3:CNT10 PORT MAP(S2,SC,SE,SD(11 DOWNTO 8),S3);-位置关联U4:CNT10 PORT MAP(S3,SC,SE,SD(15 DOWNTO 12),S4);U5:CNT10 PORT MAP(S4,SC,SE,SD(19 DOWNTO 16),S5);U6:CNT10 PORT MAP(S5,SC,SE,SD(23 DOWNTO 20),S6);U7:CNT10 PORT MAP(S6,
23、SC,SE,SD(27 DOWNTO 24),S7);U8:CNT10 PORT MAP(S7,SC,SE,SD(31 DOWNTO 28),S8);U9:REG32B PORT MAP(LOAD=SL,DIN=SD(31 DOWNTO 0),DOUT=DOUT);END ARCHITECTURE ART;,6.6 数字秒表的设计,1设计思路 设计一个计时范围为0.01秒1小时的数字秒表,因此要有一个比较精确的计时基准信号,这里用周期为1/100 s的计时脉冲。对每一计数器需设置CLR清零信号输入外,并在六个计数器设置时钟使能信号ENA,即计时允许信号。因此数字秒表可由一个分频器、四个十进制计
24、数器(1/100秒、1/10秒、1秒、1分)以及两个六进制计数器(10秒、10分)组成,如图6.7所示。,图6.7中六个4位二进制计数输出的最小显示值分别为:DOUT3.01/100秒、DOUT7.41/10秒、DOUT11.81秒、DOUT15.1210秒、DOUT19.161分、DOUT23.2010分。,图6.7 数字秒表电路逻辑图,2.VHDL源程序1)3 MHz100 Hz分频器的源程序CLKGEN.VHDLIBRARY IEEE;ENTITY CLKGEN IS PORT(CLK:IN STD_LOGIC;-3 MHz信号输入 NEWCLK:OUT STD_LOGIC);-100
25、Hz计时时钟信号输出END ENTITY CLKGEN;,ARCHITECTURE ART OF CLKGEN IS SIGNAL CNTER:INTEGER RANGE 0 TO 10#29999#;-十进制计数预制数BEGINPROCESS(CLK)IS-分频计数器,由3 MHz时钟产生100 Hz信号BEGIN IS IF CLKEVENT AND CLK=1 THEN IF CNTER=10#29999#THEN CNTER=0;-3 MHz信号变为100 Hz,计数常数为30000,ELSE CNTER=CNTER+1;END IF;END IF;END PROCESS;PROCES
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 VHDL 设计 应用 实例

链接地址:https://www.31ppt.com/p-5659124.html