目录一、设计目的和要求 (1)1.课程设计目的 (1)2.课程设计的基本要求 (1)3.课程设计类型 (1)二、仪器和设备 (1)三、设计过程 (1)1.设计内容和要求 (1)2.设计方法和开发步骤 (2)3.设计思路 (2)4.设计难点 (4)四、设计结果与分析 (4)1.思路问题以及测试结果失败分析 (4)2.程序简要说明 (5)五、心得体会 (9)六、参考文献 (9)一、设计目的和要求1.课程设计目的设计一个带进位的八位二进制加法计数器:要求在MAX+plusⅡ10.2软件的工作平台上用VHDL语言层次设计出一个带进位的八位二进制加法器,并通过编译及时序仿真检查设计结果。
2.课程设计的基本要求全加器与带进位输入8位加法器设计要求我们通过8位全加器的设计掌握层次化设计的方法,充分理解全加器的设计过程,掌握一位全加器的程序,熟悉MAX+plusⅡ10.2软件的文本和原理图输入方法设计简单组合电路。
课程设计过程中要求能实现同步和异步的八位二进制全加器的设计。
3.课程设计类型EDA课程设计二、仪器和设备PC机、MAX+plusⅡ10.2软件三、设计过程1.设计内容和要求方法一:1.原理图输入完成半加器和1位全加器的设计,并封装入库2.层次化设计,建立顶层文件,由8个1位全加器串联构成8位全加器3.每一层次均需进行编译、综合、适配及仿真方法二:1. 原理图输入完成一个四位全加器的设计2.层次化设计,建立顶层文件,由2个4位全加器串联构成8位全加器3.每一层次均需进行编译、综合、适配及仿真2.设计方法和开发步骤加法器是数字系统中的基本逻辑器件。
例如:为了节省资源,减法器和硬件乘法器都可由加法器来构成。
但宽位加法器的设计是很耗费资源的,因此在实际的设计和相关系统的开发中需要注意资源的利用率和进位速度等两方面的问题。
多位加法器的构成有两种方式:并行进位和串行进位方式。
并行进位加法器设有并行进位产生逻辑,运算速度快;串行进位方式是将全加器级联构成多位加法器。
通常,并行加法器比串行级联加法器占用更多的资源,并且随着位数的增加,相同位数的并行加法器比串行加法器的资源占用差距也会越来越大。
实验表明,4 位二进制并行加法器和串行级联加法器占用几乎相同的资源。
这样,多位数加法器由4 位二进制并行加法器级联构成是较好的折中选择。
因此这次课程设计中的8 位加法器可采用两个4位二进制并行加法器级联而成。
此外我们还讨论了由八个一位全加器串联构成的八位二进制全加器。
设计中前者设计为同步加法器,后者设计为异步加法器。
3.设计思路方法一:异步八位全加器设计流程图如下:图1异步八位流程图设计原理图如下页所示:图2 异步八位全加器方法二:同步八位全加器 设计流程图如下:图3同步八位流程图设计原理图如下页所示:图4 同步八位全加器4.设计难点(1)半加器的设计:半加器不考虑低位向本位的进位,因此它有两个输入端和两个输出设加数(输入端)为A、B;和为S;向高位的进位为Ci+1;函数的逻辑表达式为:S=A⊕B;Ci+1=AB。
(2)四位二进制带进位加法器:两个四位二进制数进行加法运算,同时产生进位。
当两个二进制数相加时,较高高位相加时必须加入较低位的进位项(Ci),以得到输出为和(S)和进位(C0)。
(3)同步设计:同步是有时钟信号输入,根据时钟信号来判断是否执行计算。
四、设计结果与分析1.思路问题以及测试结果失败分析(1)设计程序时保存文件名要与实体名一致,设计过程中出现了几次这样的低级错误,值得注意。
(2)所设计的程序文件不能直接放在根目录下,我们在自己笔记本上做完直接拷贝到实验室计算机上放在了E盘根目录下这样会出错。
(3)生成了ADD4元件后进行绘制原理图,因为输入输出是8位,也就是说要有16个输入,8个输出,但是开始绘图的时候只绘制了2个输入,一个输出,提示输入与总线连接不符合。
(4)在8个一位全加器组成8位加法器的波形仿真时候由于把时间间隔设置的特别小到20.0ns,导致计算机还没计算完前一个数据就开始下一个数据了,如下图图5 方法一的错误仿真波形附:由于开始时没有具体要求,我们做了两种方案的异步全加器,由两个四位全加器串联而成的八位全加器仿真时出现的问题如下:(5)在两个4位全加器组成的8位加法器波形仿真时出现如下图形红色框中的现象,反复仿真多次结果一样,才明白,刚开始计算机会有延迟处理信号,后面的信号就正常了。
图62.程序简要说明方法一:异步八位全加器(1)设计一个半加器VHDL源程序代码(关键代码)ARCHITECTURE FH1 OF H_ADDER ISBEGINSO <= NOT (A XOR (NOT B));CO <= A AND B;END ARCHITECTURE FH1;具体功能:半加器电路是指对两个输入数据位进行加法,输出一个结果位和进位,不产生进位输入的加法器电路,是实现两个一位二进制数的加法运算电路。
数据输入A被加数、B加数,数据输出SO和数(半加和)、进位CO。
其真值表为:表1-1 半加器电路真值表(2)设计一个一位全加器VHDL源程序代码ARCHITECTURE FD1 OF F_ADDER ISCOMPONENT H_ADDER ISPORT (A, B : IN STD_LOGIC;CO, SO : OUT STD_LOGIC );END COMPONENT;SIGNAL D, E, F : STD_LOGIC;BEGINU1 : H_ADDER PORT MAP(A => AIN, B => BIN, CO => D, SO => E);U2 : H_ADDER PORT MAP(A => E, B => CIN, CO => F, SO => SUM);COUT <= D OR F;END ARCHITECTURE FD1;全加器是能够计算低位进位的二进制加法电路表1-2 一位全加器电路真值表由真值表写出逻辑表达式,经化简后得:S=A ⊕B ⊕C F=AB+BC+AC=AC BC AB ••其中A 为被加数,B 为加数,相邻低位来的进位数为C ,输出本位和为S 。
向相邻高位进位数为F 。
(3)设计一个八位串行二进制全加器 VHDL 源程序代码(关键代码)ARCHITECTURE ONE OF F_ADDER8 IS COMPONENT F_ADDER ISPORT (AIN, BIN, CIN : IN STD_LOGIC; COUT, SUM : OUT STD_LOGIC ); END COMPONENT;SIGNAL C1, C2, C3,C4,C5,C6,C7: STD_LOGIC; BEGINU1 : F_ADDER PORT MAP(AIN => AIN(0), BIN => BIN(0), CIN => CIN, SUM => SUM(0), COUT => C1);∶ ∶ ∶U8 : F_ADDER PORT MAP(AIN => AIN(7), BIN => BIN(7), CIN => C7, SUM => SUM(7), COUT => COUT); END ONE;经过一番编译仿真的调试后,我们得到了如下两幅正确的仿真波形。
-图7 方法一的正确仿真波形方法二:同步八位全加器(1) 设计一个四位全加器VHDL 源程序代码(关键代码)ARCHITECTURE h1 of ADD4 is beginprocess(A,B,clk)variable cq, qq, sq: STD_logic_vector(3 downto 0);beginif (clk'event and clk='1') thenqq(0):= not(A(0) XOR (NOT (B(0)))); sq(0):= not(qq(0) XOR (NOT(ci))); --低位相加并产生进位if ((A(0) xor B(0))='1') thencq(0):= ci;else cq(0):=A(0);End if;qq(1):= not(A(1) xor (NOT(B(1)))); sq(1):= not(qq(1) xor (NOT(cq(0)))); --第二位于前一进位相加,并产生进位。
if((A(1) xor B(1))='1') Thencq(1):= cq(0);ELSE cq(1):=A(1);END if;qq(2):= not(A(2) XOR (NOT(B(2))));sq(2):= not(qq(2) XOR (NOT(cq(1))));if ((A(2) xor B(2))='1') thencq(2):= cq(1);else cq(2):=A(2);end if;qq(3):=not(A(3) XOR (NOT B(3))); sq(3):=not(qq(3) XOR (NOT(cq(2)))); --前一位进位与高位相加并产生进位。
if ((A(3) xor B(3))='1') thencq(3):= cq(2);ELSE cq(3):=A(3);END if;Co<=cq(3); So<=sq;end if;End process;End architecture h1;(2)设计一个八位串行二进制全加器通过在四位全加器正确仿真的情况下,绘出由两个四位全加器串联的八位全加器的原理图,再经过仿真。
图8 方法二的正确仿真波形五、心得体会虽然两周的EDA课程设计结束了,但我们受益颇多。
让我们学了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
对EDA的工作原理和使用方法也有了更深刻的理解。
在开始实训之前,我们分工合作,在图书馆和网上查询资料,根据找到的资料来设计8位全加器。
当我们运行自己编出来的程序的时候,问题出现了,不是不能运行,就是运行的结果和要求的结果不相符合,让我们看到了实践与理论的差距。
出现问题不可怕,重要的是我们解决问题。
根据出现的错误提示,我们一个一个地解决在调试中出现的问题,从而我们对EDA 的理解得到了加强。
通过本次设计,让我很好的锻炼了理论联系实际,与具体项目、课题相结合开发、设计产品的能力。
既让我们懂得了怎样把理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决。
并让我们的合作意识得到了加强,合作能力也得到提高。
根据分工与合作的方式,让每个人互责指定的部分,同时在一定的阶段共同讨论,以解决分工中个人不能解决的问题。