实验二 8位加法器设计
一、实验目的
熟悉利用Quartus Ⅱ的图形编辑输入法设计简单组合电路,掌握层次化设计方法,并通过8位全加器的设计,进一步熟悉利用EDA 软件进行数字系统设计的流程。
二、实验仪器与器材
计算机1台,GW48-PK2S 实验箱1台,Quartus Ⅱ6.0 1套。
三、实验内容
1. 基本命题
利用图形输入法设计一个一位半加器和全加器,再利用级联方法构成8位加法器。
2. 扩展命题
利用文本输入法设计4位并行进位加法器,再利用层次设计方法构成8位加法器。通过时序仿真,比较两种加法器的性能。
四、设计思路
加法器是数字系统中的基本逻辑器件。例如,为了节省逻辑资源,减法器和硬件乘法器都可由加法器来构成。多位加法器的设计十分耗费硬件资源,因此在实际的设计和相关系统的开发中,需要注意资源的利用率和进位速度两方面的问题。对此,首先应选择较适合组合逻辑设计的器件作为最终的目标器件,如CPLD ;其次在加法器的逻辑结构设计上,在芯片资源的利用率和加法器的速度两方面权衡得失,探寻最佳选择,即选择最佳的并行进位最小的加法单元的宽度。显然这种选择与目标器件的时延特性有直接关系。
多位加法器的构成有两种方式:即并行进位和串行进位方式。串行进位方式的加法器是将全加器级联构成的,它有电路简单,但进位速度较慢的特点。并行进位加法器设有产生并行进位的逻辑电路,加法器的进位仅与输入状态有关,与各级加法器的进位无关,即第 i 位加法器的进位直接由该位的各输入状态决定,其关系式为:
C i +1=X i Y i +X i ⊕Y i ⋅C i (i = 0,1,2,3„)
当i = 3时,代入上述表达式可得:
C 4=X 3Y 3+X 3⊕Y 3⋅X 2Y 2+X 3⊕Y 3⋅X 2⊕Y 2⋅X 1Y 1+X 3⊕Y 3⋅X 2⊕Y 2⋅X 1⊕Y 1⋅X 0Y 0+X 3⊕Y 3⋅X 2⊕Y 2⋅X 1⊕Y 1⋅X 0⊕Y 0⋅C 0
4位加法器的各位和数表达式如下:
S 3=X 3⊕Y 3⊕C 3
S 2=X 2⊕Y 2⊕C 2
S 1=X 1⊕Y 1⊕C 1
S 0=X 0⊕Y 0⊕C 0C 4=X 3Y 3+X 3⊕Y 3⋅C 3C 3=X 2Y 2+X 2⊕Y 2⋅C 2C 2=X 1Y 1+X 1⊕Y 1⋅C 1C 1=X 0Y 0+X 0⊕Y 0⋅C 0
用门电路实现的4位并行加法器电路如图2-1所示。
图2-1 4位并行加法器电路
显然,随着位数的增加,并行加法进位电路将越来越复杂,相同位数的并行加法器与串行加法器的资源占用差距也将快速增大,一般情况下,并行进位加法器通常比串行级联加法器占用更多的芯片资源。由于4位二进制并行加法器和串行级联加法器占用几乎相同的芯片资源。因此,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择,图2-2所示为该电路结构的8位加法器。
图2-2 8位加法器硬件结构图
提示:设计步骤一般包括如下十个方面,具体可参考实验一的设计思路,
下面提示有助于解决实验过程中出现的问题。
(1)首先应该建立好工作库文件夹并取名adder ,以作设计工程项目的工作库。
(2)设计电路原理图。打开Quartus II ,选择菜单File →New 。在New 窗口中的Device Design Files中选择编译文件的语言类型“Block Diagram/Schematic File ”如图2-3所示,单击OK 后出现图形编辑界面如图2-4所示。然后在该图形编辑窗口中绘制设计电路图。
图2-3 选择图形编辑类型
图2-3 Quartus II的图形编辑界面
(3)将当前设计取名为hadder 并设定为工程。设定后可以看见Quartus II 主窗左上方的工程项目路径指向。这个路径指向很重要!
(4)编译和排错
注意:如果设计文件含有错误,在编译时会出现出错信息指示。有时尽管只有1、2个小错,但却会出现大量的出错信息,确定错误所在的最好办法是找到最上一排错误信息指示,用鼠标左键双击,就能发现在出现文本编译窗中闪动的光标附近找到错误所在。纠正后再次编译,直至排除所有错误。还需要注意:闪动的光标指示错误所在只是相对的,错误一般在上方。VHDL 文本编辑中还可能出现许多其它错误,如:
1)错将设计文件存入了根目录,并将其设定成工程,由于没有了工作库,报错信息如下: Error :Can't open VHDL "WORK"
2)错将设计文件的后缀写成.tdf 而非.vhd ,报错信息如下:Error :Line1,File e:\muxfile\mux21a.tdf: TDF syntax error: ...
3)未将设计文件名存为其实体名,如错写为muxa.vhd ,报错信息如下:Error :Line1,...VHDL Design File "muxa.vhd" must contain ...
(5)时序仿真。具体步骤包括:建立波形文件、输入信号节点、设置波形参量、设定仿真时间宽度、加上输入信号、波形文件存盘、运行仿真器、观察分析波形。
注意:仿真波形文件的建立,一定要十分注意仿真时间区域的设定,以及时钟信号的周期设置,否则即使设计正确也无法获得正确的仿真结果。设定比较合理的仿真时间区域和信号频率,即仿真时间区域不能太小,仿真频率不能太高,即信号周期不能小到与器件的延时相比拟。
还可以进一步了解信号的延时情况。图2-4左侧的竖线是测试参考线,它与鼠标箭头间的时间差显示在窗口上方的Interval 小窗中,使用该方法可以测量任意两点的时间差,由图可见输入与输出波形间有一个小的延时量。
图2-4 仿真波形图
(6)建立电路模块默认符号
在Quartus II 环境下,执行“File ”菜单下的“Create/Update”选项中的“Create Symbol Files for Current File ”命令,将通过编译的设计文件产生一个(Quartus II Block Symbol File)模块符号文件,并保存在工程目录中。该模块符
号可以被其他图形设计文件调用,实现多层次的系统电路设计。
(7)利用上述设计的半加器模块和必要的门电路设计全加器,重复上述过程对所设计的全加器进行仿真,确认满足设计要求以后,最后再利用全加器模块设计8位串行级联加法器。
注意:若8位串行级联加法器的文件名取adder8b ,则在新建过程时,需要把最顶层文件名取adder8b ,并将hadder 和fadder 等相关文件保存到该工程目录中。
(8)引脚锁定
为在实验系统上验证设计的正确性,完成硬件测试。如果目标器件是EP1C6Q240 C8,选择合适的实验电路模式(参考附录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 描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER4B IS
PORT ( CIN4 : 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);
COUT4 : OUT STD_LOGIC);
END ADDER4B;
ARCHITECTURE behav OF ADDER4B IS
SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL AA,BB : STD_LOGIC_VECTOR(4 DOWNTO 0); AA
SINT
S4
COUT4
END behav;
2)应用ADDER4B 设计8位二进制数加法器ADDER8B 的VHDL 描述 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER8B IS
PORT ( CIN : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
COUT : OUT STD_LOGIC );
END ADDER8B;
ARCHITECTURE struc OF ADDER8B IS
COMPONENT ADDER4B
PORT ( CIN4 : 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);
COUT4 : OUT STD_LOGIC );
END COMPONENT;
SIGNAL CARRY_OUT : STD_LOGIC;
BEGIN
U1 : ADDER4B -- 例化一个4位二进制加法器U1 PORT MAP ( CIN4 => CIN, A4 => A(3 DOWNTO 0),
B4 => B(3 DOWNTO 0), S4 => S(3 DOWNTO 0), COUT4 => CARRY_OUT );
U2 : ADDER4B --例化一个4位二进制加法器U2
PORT MAP ( CIN4 => CARRY_OUT, A4 => A(7 DOWNTO 4),
B4 => B(7 DOWNTO 4), S4 => S(7 DOWNTO 4),COUT4 => COUT );
END struc;
实验二 8位加法器设计
一、实验目的
熟悉利用Quartus Ⅱ的图形编辑输入法设计简单组合电路,掌握层次化设计方法,并通过8位全加器的设计,进一步熟悉利用EDA 软件进行数字系统设计的流程。
二、实验仪器与器材
计算机1台,GW48-PK2S 实验箱1台,Quartus Ⅱ6.0 1套。
三、实验内容
1. 基本命题
利用图形输入法设计一个一位半加器和全加器,再利用级联方法构成8位加法器。
2. 扩展命题
利用文本输入法设计4位并行进位加法器,再利用层次设计方法构成8位加法器。通过时序仿真,比较两种加法器的性能。
四、设计思路
加法器是数字系统中的基本逻辑器件。例如,为了节省逻辑资源,减法器和硬件乘法器都可由加法器来构成。多位加法器的设计十分耗费硬件资源,因此在实际的设计和相关系统的开发中,需要注意资源的利用率和进位速度两方面的问题。对此,首先应选择较适合组合逻辑设计的器件作为最终的目标器件,如CPLD ;其次在加法器的逻辑结构设计上,在芯片资源的利用率和加法器的速度两方面权衡得失,探寻最佳选择,即选择最佳的并行进位最小的加法单元的宽度。显然这种选择与目标器件的时延特性有直接关系。
多位加法器的构成有两种方式:即并行进位和串行进位方式。串行进位方式的加法器是将全加器级联构成的,它有电路简单,但进位速度较慢的特点。并行进位加法器设有产生并行进位的逻辑电路,加法器的进位仅与输入状态有关,与各级加法器的进位无关,即第 i 位加法器的进位直接由该位的各输入状态决定,其关系式为:
C i +1=X i Y i +X i ⊕Y i ⋅C i (i = 0,1,2,3„)
当i = 3时,代入上述表达式可得:
C 4=X 3Y 3+X 3⊕Y 3⋅X 2Y 2+X 3⊕Y 3⋅X 2⊕Y 2⋅X 1Y 1+X 3⊕Y 3⋅X 2⊕Y 2⋅X 1⊕Y 1⋅X 0Y 0+X 3⊕Y 3⋅X 2⊕Y 2⋅X 1⊕Y 1⋅X 0⊕Y 0⋅C 0
4位加法器的各位和数表达式如下:
S 3=X 3⊕Y 3⊕C 3
S 2=X 2⊕Y 2⊕C 2
S 1=X 1⊕Y 1⊕C 1
S 0=X 0⊕Y 0⊕C 0C 4=X 3Y 3+X 3⊕Y 3⋅C 3C 3=X 2Y 2+X 2⊕Y 2⋅C 2C 2=X 1Y 1+X 1⊕Y 1⋅C 1C 1=X 0Y 0+X 0⊕Y 0⋅C 0
用门电路实现的4位并行加法器电路如图2-1所示。
图2-1 4位并行加法器电路
显然,随着位数的增加,并行加法进位电路将越来越复杂,相同位数的并行加法器与串行加法器的资源占用差距也将快速增大,一般情况下,并行进位加法器通常比串行级联加法器占用更多的芯片资源。由于4位二进制并行加法器和串行级联加法器占用几乎相同的芯片资源。因此,多位数加法器由4位二进制并行加法器级联构成是较好的折中选择,图2-2所示为该电路结构的8位加法器。
图2-2 8位加法器硬件结构图
提示:设计步骤一般包括如下十个方面,具体可参考实验一的设计思路,
下面提示有助于解决实验过程中出现的问题。
(1)首先应该建立好工作库文件夹并取名adder ,以作设计工程项目的工作库。
(2)设计电路原理图。打开Quartus II ,选择菜单File →New 。在New 窗口中的Device Design Files中选择编译文件的语言类型“Block Diagram/Schematic File ”如图2-3所示,单击OK 后出现图形编辑界面如图2-4所示。然后在该图形编辑窗口中绘制设计电路图。
图2-3 选择图形编辑类型
图2-3 Quartus II的图形编辑界面
(3)将当前设计取名为hadder 并设定为工程。设定后可以看见Quartus II 主窗左上方的工程项目路径指向。这个路径指向很重要!
(4)编译和排错
注意:如果设计文件含有错误,在编译时会出现出错信息指示。有时尽管只有1、2个小错,但却会出现大量的出错信息,确定错误所在的最好办法是找到最上一排错误信息指示,用鼠标左键双击,就能发现在出现文本编译窗中闪动的光标附近找到错误所在。纠正后再次编译,直至排除所有错误。还需要注意:闪动的光标指示错误所在只是相对的,错误一般在上方。VHDL 文本编辑中还可能出现许多其它错误,如:
1)错将设计文件存入了根目录,并将其设定成工程,由于没有了工作库,报错信息如下: Error :Can't open VHDL "WORK"
2)错将设计文件的后缀写成.tdf 而非.vhd ,报错信息如下:Error :Line1,File e:\muxfile\mux21a.tdf: TDF syntax error: ...
3)未将设计文件名存为其实体名,如错写为muxa.vhd ,报错信息如下:Error :Line1,...VHDL Design File "muxa.vhd" must contain ...
(5)时序仿真。具体步骤包括:建立波形文件、输入信号节点、设置波形参量、设定仿真时间宽度、加上输入信号、波形文件存盘、运行仿真器、观察分析波形。
注意:仿真波形文件的建立,一定要十分注意仿真时间区域的设定,以及时钟信号的周期设置,否则即使设计正确也无法获得正确的仿真结果。设定比较合理的仿真时间区域和信号频率,即仿真时间区域不能太小,仿真频率不能太高,即信号周期不能小到与器件的延时相比拟。
还可以进一步了解信号的延时情况。图2-4左侧的竖线是测试参考线,它与鼠标箭头间的时间差显示在窗口上方的Interval 小窗中,使用该方法可以测量任意两点的时间差,由图可见输入与输出波形间有一个小的延时量。
图2-4 仿真波形图
(6)建立电路模块默认符号
在Quartus II 环境下,执行“File ”菜单下的“Create/Update”选项中的“Create Symbol Files for Current File ”命令,将通过编译的设计文件产生一个(Quartus II Block Symbol File)模块符号文件,并保存在工程目录中。该模块符
号可以被其他图形设计文件调用,实现多层次的系统电路设计。
(7)利用上述设计的半加器模块和必要的门电路设计全加器,重复上述过程对所设计的全加器进行仿真,确认满足设计要求以后,最后再利用全加器模块设计8位串行级联加法器。
注意:若8位串行级联加法器的文件名取adder8b ,则在新建过程时,需要把最顶层文件名取adder8b ,并将hadder 和fadder 等相关文件保存到该工程目录中。
(8)引脚锁定
为在实验系统上验证设计的正确性,完成硬件测试。如果目标器件是EP1C6Q240 C8,选择合适的实验电路模式(参考附录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 描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER4B IS
PORT ( CIN4 : 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);
COUT4 : OUT STD_LOGIC);
END ADDER4B;
ARCHITECTURE behav OF ADDER4B IS
SIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL AA,BB : STD_LOGIC_VECTOR(4 DOWNTO 0); AA
SINT
S4
COUT4
END behav;
2)应用ADDER4B 设计8位二进制数加法器ADDER8B 的VHDL 描述 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER8B IS
PORT ( CIN : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
COUT : OUT STD_LOGIC );
END ADDER8B;
ARCHITECTURE struc OF ADDER8B IS
COMPONENT ADDER4B
PORT ( CIN4 : 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);
COUT4 : OUT STD_LOGIC );
END COMPONENT;
SIGNAL CARRY_OUT : STD_LOGIC;
BEGIN
U1 : ADDER4B -- 例化一个4位二进制加法器U1 PORT MAP ( CIN4 => CIN, A4 => A(3 DOWNTO 0),
B4 => B(3 DOWNTO 0), S4 => S(3 DOWNTO 0), COUT4 => CARRY_OUT );
U2 : ADDER4B --例化一个4位二进制加法器U2
PORT MAP ( CIN4 => CARRY_OUT, A4 => A(7 DOWNTO 4),
B4 => B(7 DOWNTO 4), S4 => S(7 DOWNTO 4),COUT4 => COUT );
END struc;