实验二8位加法器设计一、实验目的熟悉利用QuartusⅡ的图形编辑输入法设计简单组合电路,掌握层次化设计方法,并通过8位全加器的设计,进一步熟悉利用EDA软件进行数字系统设计的流程。二、实验仪器与器材计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.01套。三、实验内容1.基本命题利用图形输入法设计一个一位半加器和全加器,再利用级联方法构成8位加法器。2.扩展命题利用文本输入法设计4位并行进位加法器,再利用层次设计方法构成8位加法器。通过时序仿真,比较两种加法器的性能。四、设计思路加法器是数字系统中的基本逻辑器件。例如,为了节省逻辑资源,减法器和硬件乘法器都可由加法器来构成。多位加法器的设计十分耗费硬件资源,因此在实际的设计和相关系统的开发中,需要注意资源的利用率和进位速度两方面的问题。对此,首先应选择较适合组合逻辑设计的器件作为最终的目标器件,如CPLD;其次在加法器的逻辑结构设计上,在芯片资源的利用率和加法器的速度两方面权衡得失,探寻最佳选择,即选择最佳的并行进位最小的加法单元的宽度。显然这种选择与目标器件的时延特性有直接关系。多位加法器的构成有两种方式:即并行进位和串行进位方式。串行进位方式的加法器是将全加器级联构成的,它有电路简单,但进位速度较慢的特点。并行进位加法器设有产生并行进位的逻辑电路,加法器的进位仅与输入状态有关,与各级加法器的进位无关,即第i位加法器的进位直接由该位的各输入状态决定,其关系式为:iiiiiiCYXYXC1(i=0,1,2,3…)当i=3时,代入上述表达式可得:000112233001122331122332233334CYXYXYXYXYXYXYXYXYXYXYXYXYXYXC4位加法器的各位和数表达式如下:0000010000111112111122222322223333343333CYXYXCCYXSCYXYXCCYXSCYXYXCCYXSCYXYXCCYXS用门电路实现的4位并行加法器电路如图2-1所示。图2-14位并行加法器电路显然,随着位数的增加,并行加法进位电路将越来越复杂,相同位数的并行加法器与串行加法器的资源占用差距也将快速增大,一般情况下,并行进位加法器通常比串行级联加法器占用更多的芯片资源。由于4位二进制并行加法器和串行级联加法器占用几乎相同的芯片资源。因此,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择,图2-2所示为该电路结构的8位加法器。图2-28位加法器硬件结构图提示:设计步骤一般包括如下十个方面,具体可参考实验一的设计思路,下面提示有助于解决实验过程中出现的问题。(1)首先应该建立好工作库文件夹并取名adder,以作设计工程项目的工作库。(2)设计电路原理图。打开QuartusII,选择菜单File→New。在New窗口中的DeviceDesignFiles中选择编译文件的语言类型“BlockDiagram/SchematicFile”如图2-3所示,单击OK后出现图形编辑界面如图2-4所示。然后在该图形编辑窗口中绘制设计电路图。图2-3选择图形编辑类型图2-3QuartusII的图形编辑界面(3)将当前设计取名为hadder并设定为工程。设定后可以看见QuartusII主窗左上方的工程项目路径指向。这个路径指向很重要!(4)编译和排错注意:如果设计文件含有错误,在编译时会出现出错信息指示。有时尽管只有1、2个小错,但却会出现大量的出错信息,确定错误所在的最好办法是找到最上一排错误信息指示,用鼠标左键双击,就能发现在出现文本编译窗中闪动的光标附近找到错误所在。纠正后再次编译,直至排除所有错误。还需要注意:闪动的光标指示错误所在只是相对的,错误一般在上方。VHDL文本编辑中还可能出现许多其它错误,如:1)错将设计文件存入了根目录,并将其设定成工程,由于没有了工作库,报错信息如下:Error:Can'topenVHDLWORK2)错将设计文件的后缀写成.tdf而非.vhd,报错信息如下:Error:Line1,Filee:\muxfile\mux21a.tdf:TDFsyntaxerror:...3)未将设计文件名存为其实体名,如错写为muxa.vhd,报错信息如下:Error:Line1,...VHDLDesignFilemuxa.vhdmustcontain...(5)时序仿真。具体步骤包括:建立波形文件、输入信号节点、设置波形参量、设定仿真时间宽度、加上输入信号、波形文件存盘、运行仿真器、观察分析波形。注意:仿真波形文件的建立,一定要十分注意仿真时间区域的设定,以及时钟信号的周期设置,否则即使设计正确也无法获得正确的仿真结果。设定比较合理的仿真时间区域和信号频率,即仿真时间区域不能太小,仿真频率不能太高,即信号周期不能小到与器件的延时相比拟。还可以进一步了解信号的延时情况。图2-4左侧的竖线是测试参考线,它与鼠标箭头间的时间差显示在窗口上方的Interval小窗中,使用该方法可以测量任意两点的时间差,由图可见输入与输出波形间有一个小的延时量。图2-4仿真波形图(6)建立电路模块默认符号在QuartusII环境下,执行“File”菜单下的“Create/Update”选项中的“CreateSymbolFilesforCurrentFile”命令,将通过编译的设计文件产生一个(QuartusIIBlockSymbolFile)模块符号文件,并保存在工程目录中。该模块符号可以被其他图形设计文件调用,实现多层次的系统电路设计。(7)利用上述设计的半加器模块和必要的门电路设计全加器,重复上述过程对所设计的全加器进行仿真,确认满足设计要求以后,最后再利用全加器模块设计8位串行级联加法器。注意:若8位串行级联加法器的文件名取adder8b,则在新建过程时,需要把最顶层文件名取adder8b,并将hadder和fadder等相关文件保存到该工程目录中。(8)引脚锁定为在实验系统上验证设计的正确性,完成硬件测试。如果目标器件是EP1C6Q240C8,选择合适的实验电路模式(参考附录2实验结构图,建议使用模式“1”),并确定输入输出信号进行引脚锁定。建议用键2和键1输入8位加数(此值显示于键对应的数码管上,高位靠左);键4和键3可输入8位被加数(此值显示于键对应的数码管上,高位靠左);加法器最低进位位由键8控制;加法器的“和”显示于数码管6和5;加法器溢出位由发光管D8显示。请参考实验一列出引脚锁定信息表。(9)编程下载时建议采用USB方式。(10)硬件测试:自拟测试方法,做好测试数据的记录。五、实验要求将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。设计过程:1、设计一位半加器:2、利用前面设计的半加器设计一位全加器:3、利用前面设计的全加器设计8位全加器:4、仿真设计5、配置引脚:6、启动实验箱,检查实验结果,验证实验正确性六、实验思考题(1)与单一设计文件比较,实现层次化设计应注意哪些问题?层次化设计应注意每个层次设计的顺序,从最小层次开始设计,且要保证每个层次设计的正确性,并要记得把上一个层次设计的结果加载到下一个层次设计中。(2)比较图形编辑和文本编辑两种8位二进制加法器的性能,分析它们的主要异同点。以下是文本编辑的参考程序。1)4位二进制数加法器ADDER4B的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER4BISPORT(CIN4:INSTD_LOGIC;A4:INSTD_LOGIC_VECTOR(3DOWNTO0);B4:INSTD_LOGIC_VECTOR(3DOWNTO0);S4:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT4:OUTSTD_LOGIC);ENDADDER4B;ARCHITECTUREbehavOFADDER4BISSIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALAA,BB:STD_LOGIC_VECTOR(4DOWNTO0);BEGINAA='0'&A4;BB='0'&B4;SINT=AA+BB+CIN4;S4=SINT(3DOWNTO0);COUT4=SINT(4);ENDbehav;2)应用ADDER4B设计8位二进制数加法器ADDER8B的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER8BISPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(7DOWNTO0);B:INSTD_LOGIC_VECTOR(7DOWNTO0);S:OUTSTD_LOGIC_VECTOR(7DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER8B;ARCHITECTUREstrucOFADDER8BISCOMPONENTADDER4BPORT(CIN4:INSTD_LOGIC;A4:INSTD_LOGIC_VECTOR(3DOWNTO0);B4:INSTD_LOGIC_VECTOR(3DOWNTO0);S4:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT4:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALCARRY_OUT:STD_LOGIC;BEGINU1:ADDER4B--例化一个4位二进制加法器U1PORTMAP(CIN4=CIN,A4=A(3DOWNTO0),B4=B(3DOWNTO0),S4=S(3DOWNTO0),COUT4=CARRY_OUT);U2:ADDER4B--例化一个4位二进制加法器U2PORTMAP(CIN4=CARRY_OUT,A4=A(7DOWNTO4),B4=B(7DOWNTO4),S4=S(7DOWNTO4),COUT4=COUT);ENDstruc;