第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.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UN
2、SIGNED.ALL; ENTITY ADDER4B IS -4位二进制并行加法器 PORT(C4: IN STD_LOGIC; -低位来的进位,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 ISSIGNAL S5:STD_LOGIC_VECTOR
3、(4 DOWNTO 0);-中间结果SIGNAL A5,B5: STD_LOGIC_VECTOR(4 DOWNTO 0);-扩展加数以及被加数位,BEGIN A5=0& A4; -将4位加数矢量扩为5位,为进位提供空间B5=0& B4; -将4位被加数矢量扩为5位,为进位提供空间S5=A5+B5+C4 ;S4=S5(3 DOWNTO 0); -四位和给S4CO4=S5(4); -进位给CO4 END ARCHITECTURE ART;,2) 8位二进制加法器的源程序ADDER8B.VHD LIBRARY IEEE; USE IEEE.STE_LOGIC_1164.ALL; USE IEEE.S
4、TD_LOGIC_UNSIGNED.ALL: ENTITY ADDER8B IS -由4位二进制并行加法器级联而成的8位二进制加法器 PORT(C8:IN STD_LOGIC;A8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);,S8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8:OUT STD_LOGIC); END ENTITY ADDER8B; ARCHITECTURE ART OF ADDER8B IS COMPONENT ADDER4B IS -对要调用的元件ADDER
5、4B的界面端口进行定义 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 STD_LOGIC); END COMPONENT ADDER4B; SIGNAL SC:STD_LOGIC; -4位加法器的进位标志 BEGIN U1:ADDER4B -例化(安装)一个4位二进制加法器U1 PORT MAP(C4=C8,A4=A8(3 DOWNTO 0),B4=B8(3 DOWN
6、TO0), S4=S8(3 DOWNTO 0),CO4=SC);,U2:ADDER4B -例化(安装)一个4位二进制加法器U2 PORT MAP(C4=SC,A4=A8(7 DOWNTO 4),B4=B8(7 DOWNTO 4),S4=S8 (7 DOWNTO 4),CO4=CO8); END ARCHITECTURE ART;,6.3 序列检测器的设计,1设计思路序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。如图6.3所示,当一串待检测的串行数据进入检测器后,若此数在每一位的连续
7、检测中都与预置的密码数相同,则输出“A”,否则仍然输出“B”。,图6.3 8位序列检测器逻辑图,2VHDL源程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CHK IS PORT(DIN:IN STD_LOGIC; -串行输入数据位CLK,CLR:IN STD_LOGIC; -工作时钟/复位信号D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -8位待检测预置数AB:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-检测结果输出,END ENTITY CHK; ARCHITECTURE ART OF
8、 CHK IS SIGNAL Q :INTEGER RANGE 0 TO 8;-作为标志位 BEGIN PROCESS ( CLK,CLR) IS BEGIN IF CLR= 1 THEN Q=0; ELSIF CLKEVENT AND CLK= 1 THEN -时钟到来时,判断并处理当前输入的位,CASE Q IS WHEN 0 = IF DIN =D(7) THEN Q IF DIN =D(6) THEN Q IF 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
9、) THEN Q IF DIN =D(0) THEN Q Q=0;END CASE;END IF ; END PROCESS;,PROCESS(Q) IS -检测结果判断输出 BEGIN IF Q= 8 THEN AB= “1010“; -序列数检测正确,输出“A” ELSE AB= “1011“; -序列数检测错误,输出“B” END IF ; END PROCESS; END ARCHITECTURE ART;,6.4 正负脉宽数控调制信号发生器的设计,1设计思路图6.4 是脉宽数控调制信号发生器逻辑图,此信号发生器是由两个完全相同的可自加载加法计数器LCNT8组成的,它的输出信号的高低电
10、平脉宽可分别由两组8位预置数进行控制。,图6.4 脉宽数控调制信号发生器逻辑图,2VHDL源程序 1) 8位可自加载加法计数器的源程序LCNT8.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 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;,ARCHITECTURE ART OF LCNT8 IS SI
11、GNAL COUNT:INTEGER RANGE 0 TO 255; -8位计数器设置 BEGIN PROCESS ( CLK ) IS BEGINIF CLKEVENT AND CLK= 1 THENIF LD= 1 THEN COUNT=D; -LD为高电平时加载预置数,ELSE COUNT=COUNT+1; -否则继续计数END IF;END IF; END PROCESS;,PROCESS (CLK, COUNT) IS BEGINIF CLKEVENT AND CLK=1 THENIF COUNT=255 THEN CAO= 1;ELSE CAO= 0;END IF;END IF;
12、END PROCESS; END ARCHITECTURE ART;,2) 正负脉宽数控调制信号发生器的源程序 LIBRARY IEEE -正负脉宽数控调制信号发生器顶层文件 USE IEEE.STD_LOGIC_1164.ALL; 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 IS COMPONENT LCN
13、T8 ISPORT(CLK,LD:IN STD_LOGIC;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; BEGIN U1:LCNT8 PORT MAP(CLK=CLK,LD=LD1,D=A,CAO=CAO1); U2:LCNT8 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2); PROCE
14、SS(CAO1,CAO2) IS BEGIN IF CAO1= 1 THEN 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位十进制数字频率计逻辑图
15、,1) 测频控制信号发生器设计频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。要使计数使能信号TSTEN能产生一个1秒脉宽的周期信号,对每个计数器CNT10的ENA使能端进行同步控制。 TSTEN为高电平时,计数;低电平时,停止计数,并保持当前值。测频控制信号发生器的工作时序如图6.6所示。为了产生这个时序图,需建立一个由D触发器构成的二分频器,在每次时钟CLK(1HZ)上沿到来时, TSTEN值翻转,脉宽为1秒,作为闸门信号。,图6.6 测频控制信号发生器工作时序,2) 寄存器REG32B设计设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。3) 十进制计数器CNT
16、10的设计如图6.5所示,此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于锁定计数值。当高电平时计数允许,低电平时计数禁止。,2. VHDL源程序 1) 有时钟使能的十进制计数器的源程序CNT10.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY CNT10 ISPORT (CLK:IN STD_LOGIC; -计数时钟信号CLR:IN STD_LOGIC; -清零信号ENA:IN STD_LOGIC; -计数使能信号CQ:OUT INTEGER RANGE 0 TO 15;-4位计数结果输出CARRY_OUT:OUT STD
17、_LOGIC); -计数进位输出,END ENTITY CNT10; ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15; BEGIN PROCESS(CLK,CLR,ENA) IS BEGIN IF 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 (
18、CQI) ISBEGINIF CQI=9 THEN CARRY_OUT= 1; -进位输出ELSE CARRY_OUT= 0;END IF;END PROCESS;CQ=CQI; END ARCHITECTURE ART;,2) 32位锁存器的源程序REG32B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 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
19、ENTITY REG32B;,ARCHITECTURE ART OF REG32B IS BEGIN PROCESS ( LOAD, DIN ) IS BEGIN IF LOAD EVENT AND LOAD= 1 THEN DOUT=DIN; -锁存输入数据END IF; END PROCESS; END ARCHITECTURE ART;,3) 测频控制信号发生器的源程序TESTCTL.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL ENTITY TESTCTL IS PORT (
20、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; BEGIN PROCESS ( CLK ) ISBEGIN IF CLKEVENT AND CLK= 1 THEN DIV2CLK=NOT DIV2CLK;-1 HZ时钟二分频 END IF ;,END PROC
21、ESS; PROCESS ( CLK,DIV2CLK ) IS BEGIN 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.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY FREQ ISPORT(FSIN:IN STD_LOGIC;CL
22、K: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 REG32B IS -待调用的32位锁存器端口定义 COMPONENT T
23、ESTCTL 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); BEGIN U0: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_OUT=S1); -名字关联,U2:CNT10 P
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 设计 应用 实例 PPT
