资源预览内容
第1页 / 共262页
第2页 / 共262页
第3页 / 共262页
第4页 / 共262页
第5页 / 共262页
第6页 / 共262页
第7页 / 共262页
第8页 / 共262页
第9页 / 共262页
第10页 / 共262页
亲,该文档总共262页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第6章 VHDL设计应用实例,6.1 8位加法器的设计 6.2 8位乘法器的设计 6.3 8位除法器的设计 6.4 PWM信号发生器的设计 6.5 数字频率计的设计 6.6 数字秒表的设计 6.7 单片机总线接口电路的设计 6.8 交通灯信号控制器的设计 6.9 高速PID控制器的设计 6.10 FIR滤波器的设计 6.11 CORDIC算法的应用设计 6.12 闹钟系统的设计,6.1 8位加法器的设计,1设计思路 加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成。多位加法器的构成有两种方式:并行进位和串行进位方式。并行进位加法器设有进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。并行进位加法器通常比串行级联加法器占用更多的资源。随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。,实践证明,4位二进制并行加法器和串行级联加法器占用几乎相同的资源。这样,多位加法器由4位二进制并行加法器级联构成是较好的折中选择。本设计中的8位二进制并行加法器即是由两个4位二进制并行加法器级联而成的,其电路原理图如图6.1所示。,图6.1 8位加法器电路原理图,2VHDL源程序 1) 4位二进制并行加法器的源程序ADDER4B.VHD,-ADDER4B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.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 IS SIGNAL S5: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL A5, B5: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN A5=0,2) 8位二进制加法器的源程序ADDER8B.VHD -ADDER8B.VHD LIBRARY IEEE; USE IEEE_STD.LOGIC_1164.ALL; USE IEEE_STD.LOGIC_UNSIGNED.ALL: ENTITY ADDER8B IS -由4位二进制并行加法器级联而成的8位二进制加法器 PORT(CIN: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 ADDER8B; ARCHICTURE ART OF ADDER8B IS,COMPONENET ADDER4B -对要调用的元件ADDER4B的界面端口进行定义 PORT(CIN: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 ; SIGNAL SC:STD_LOGIC; -4位加法器的进位标志 BEGIN U1:ADDER4B -例化(安装)一个4位二进制加法器U1,PORT MAP(C4=C8, A4=A8(3 DOWNTO 0), B4=B8(3 DOWNTO 0), 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;,3仿真结果验证 在程序调试和仿真时,我们要使用自底向上的方法进行,也就是对于含有多个模块的设计,我们要先从底层模块进行调试和仿真,再进行更高层次模块的调试和仿真,最后进行顶层模块的调试与仿真。图6.2和图6.3分别是使用Quartus 8.0对ADDER4B和ADDER8B进行时序仿真的结果。从仿真结果可以看出,从输入到输出,有一个时延,时间大概在几个纳秒。同时输出要经过一个大概几个纳秒的不稳定状态或过渡过程,系统才达到一个稳定而正确的结果。并且经过对各组输入与输出数据的分析,仿真结果是正确的。,图6.2 ADDER4B的时序仿真结果,图6.3 ADDER8B的时序仿真结果,4逻辑综合分析 图6.4是使用Quartus 8.0进行逻辑综合后ADDER8B的RTL视图;图6.5是对ADDER8B的RTL视图中的ADDER4B进行展开后的视图;图6.6是使用Quartus II 8.0对 ADDER8B进行逻辑综合后的资源使用情况。,图6.4 ADDER8B综合后的RTL视图,图6.5 ADDER8B综合后的RTL视图中将ADDER4B展开后的视图,图6.6 ADDER8B逻辑综合后的资源使用情况,5硬件逻辑验证 若使用GW48-CK EDA实验开发系统进行硬件逻辑验证,可选择实验电路结构图NO.1,由5.2的实验电路结构图NO.1和图6.1确定引脚的锁定。如可取实验电路结构图的PIO3PIO0接A830,PIO7PIO4接A874, PIO11PIO8接B830,PIO15PIO12接B874,PIO49接C8。此加法器的被加数A8和加数B8分别由键2与键1、键4与键3输入,加法器的最低位进位C8由键8输入,计算结果将分别通过PIO23PIO20,PIO19PIO16输出并显示于数码管6(高4位)和数码管5(低4位),溢出进位由PIO39输出,当有进位时,结果显示于发光管D8。,6.2 8位乘法器的设计 1系统设计思路 纯组合逻辑构成的乘法器虽然工作速度比较快,但占用硬件资源多,难以实现宽位乘法器,而基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。这里介绍由8位加法器构成的以时序逻辑方式设计的8位乘法器,此乘法器具有一定的实用价值。其乘法原理是:乘法通过逐项位移相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次和相加;若为0,则左移后以全零相加,直至被乘数的最高位。从图6.7的逻辑图上可以清楚地看出此乘法器的工作原理。,图6.7中,ARICTL是乘法运算控制电路,它的START(可锁定于引脚I/O 49)信号的上跳沿与高电平有两个功能,即16位寄存器清零和被乘数A70向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。乘法时钟信号从ARICTL的CLK输入。当被乘数加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。当为1时,与门ANDARITH打开,8位乘数B70在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。而当被乘数移出位为0时,与门全零输出。如此往复,直至八个时钟脉冲后,由ARICTL控制,乘法运算过程自动中止,ARIEND输出高电平,以此可点亮一发光管,以示乘法结束。此时,REG16B的输出值即为最后乘积。,图6.7 88位乘法器电路原理图,此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。若时钟频率为100 MHz,则每一运算周期仅需80 ns。而若利用备用最高时钟,即12 MHz晶振的MCS-51单片机的乘法指令进行8位乘法运算,则仅单指令的运算周期就长达4 s。因此,可以利用此乘法器或相同原理构成的更高位乘法器完成一些数字信号处理方面的运算。,2. VHDL源程序 1) 选通与门模块的源程序ANDARITH.VHD -ANDARITH.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS -选通与门模块 PORT(ABIN: IN STD_LOGIC; -与门开关 DIN: IN STD_LOGIC_VECTOR (7 DOWNTO 0); -8位输入 DOUT: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -8位输出,END ENTITY ANDARITH; ARCHITECTURE ART OF ANDARITH IS BEGIN PROCESS (ABIN, DIN) IS BEGIN FOR I IN 0 TO 7 LOOP -循环,分别完成8位数据与一位控制位的与操作 DOUT (I)=DIN (I)AND ABIN; END LOOP; END PROCESS; END ARCHITECTURE ART;,2) 16位锁存器的源程序REG16B.VHD -REG16B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG16B IS -16位锁存器 PORT(CLK: IN STD_LOGIC; -锁存信号 CLR: IN STD_LOGIC; -清零信号 D: IN STD_LOGIC_VECTOR (8 DOWNTO 0); -8位数据输入 Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0); -16位数据输出,END ENTITY REG16B; ARCHITECTURE ART OF REG16B IS SIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0); -16位寄存器设置 BEGIN PROCESS (CLK, CLR) IS BEGIN IF CLR = 1 THEN R16S= “0000000000000000“; -异步复位信号 ELSIF CLKEVENT AND CLK = 1 THEN -时钟到来时,锁存输入值 R16S(6 DOWNTO 0)=R16S(7 DOWNTO 1); -右移低8位,R16S(15 DOWNTO 7)=D; -将输入锁到高能位 END IF; END PROCESS; Q=R16S; END ARCHITECTURE ART;,3) 8位右移寄存器的源程序SREG8B.VHD -SREG8B.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SREG8B IS -8位右移寄存器 PORT (CLK: IN STD_LOGIC; LOAD: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC); END ENTITY SREG8B; ARCHITECTURE ART OF SREG8B IS SIGNAL REG8B: STD_LOGIC_VECTOR(7 DOWNTO 0);,BEGIN PROCESS (CLK, LOAD) IS BEGI
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号