8位加法器的设计
姓名:黄志刚
班级:电科1201
学号:12401720531
1.实验目的
(1)学习Quartus II/ISE Suite/ispLEVER软件的基本使用方法。
(2)学习GW48-CK或其他EDA实验开发系统的基本使用方法。
(3)了解VHDL程序的基本结构。
2.实验内容
设计并调试好一个由两个4位二进制并行加法器级联而成的8位二进制并行加法器,并用GW48-CK或其他EDA实验开发系统进行硬件验证。
3.实验要求
(1)画出系统的原理框图,说明系统中各主要组成部分的功能。
(2)编写各个VHDL源程序。
(3)根据系统的功能,选好测试用例,画出测试输入信号波形或编好测试程序。
(4)记录系统仿真、逻辑综合及硬件验证结果。
(5)记录实验过程中出现的问题及解决办法。
4.实验设计
1)系统原理框图
图6.1八位加法器电路原理图
2)VHDL源程序
4位二进制并行加法器的源程序ADDER4B.VHD
--ADDER4B.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER4B IS
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 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’& A4;
B5<=‘0’& B4;
S5<=A5+B5+C4;
S4<=S5(3 DOWNTO 0);
CO4<=S5(4);
END ARCHITECTURE ART;
--ADDER8B.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER8B IS
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
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;
BEGIN
U1:ADDER4B
PORT MAP(C4=>C8,A4=>A8(3 DOWNTO 0),B4=>B8(3 DOWNTO 0),
S4=>S8(3 DOWNTO 0),CO4=>SC);
U2:ADDER4B
PORT MAP(C4=>SC,A4=>A8(7 DOWNTO 4),B4=>B8(7 DOWNTO 4),
S4=>S8(7 DOWNTO 4),CO4=>CO8);
END ARCHITECTURE ART;
5.实验结果及总结
1)系统仿真结果验证
在程序调试和仿真时,我们要使用自底向上的方法进行,也就是对于含有多个模块的设计,我们要先从底层模块进行调试和仿真,再进行更高层次模块的调试和仿真,最后进行顶层模块的调试与仿真。下图分别使用Quartus II 8.0对ADDER4B和ADDER8B进行时序仿真的结果。
图6.2 ADDER4B的时序仿真结果
图6.3ADDER8B的时序仿真结果
2)逻辑综合分析
下面是使用Quartus II 8.0进行逻辑综合ADDER8B的RTL视图;对ADDER8B的RTL视图中ADDER4B进行展开的视图;使用Quartus II 8.0对ADDER8B进行逻辑综合后的资源使用情况。
ADDER8B综合后的RTL视图
ADDER8B综合后的RTL视图中将ADDER4B展开后的视图
3)实验过程中出现的问题及解决方法
问题:仿真结果与书本结果不一样
答:设置的时间间隔过小,将其扩大便能得到正确结果。
问题:无法完成编译
答:通过对下面提示对文本进行修改最终完成了编译。
第二篇:实验一 四位串行进位加法器的设计实验报告
实验一 四位串行进位加法器的设计
一、实验目的
1. 理解一位全加器的工作原理
2. 掌握串行进位加法器的逻辑原理
3. 进一步熟悉Quartus软件的使用,了解设计的全过程,
二、实验内容
1. 采用VHDL语言设计四位串行进位的加法器
2. 采用画原理图的方法设计四位串行进位加法器
三、实验步骤
1、使用VHDL语言设计
1.打开File—>New Project Wizard输入文件名adder4保存在D盘内,打开File—>New—>VHDL File,从模版中选择库的说明,use语句的说明,实体的说明,结构体的说明,编写VHDL代码,然后保存、编译。打开File—>New—>Other File—>Vector Waveform File,查找引脚,从Edit中选择End Time 输入40、ns 保存。从Assignments—>Settings—>Simulator Settings—>Functional
然后Processing—>Generate Functional Simnlation Netlist —>确定。选择Start Simulation保存最后的波形图,打开File—>close关闭工程。
底层文件:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY fadder IS
PORT
(
a, b,cin : IN STD_LOGIC;
s, co : OUT STD_LOGIC
);
END fadder;
ARCHITECTURE arc1 OF fadder IS
BEGIN
s<=a xor b xor cin;
co<=((a xor b)and cin)or(a and b);
END arc1;
顶层文件:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY adder4 IS
PORT
(
c0: IN STD_LOGIC;
a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
c4 : OUT STD_LOGIC
);
END adder4;
ARCHITECTURE arc2 OF adder4 IS
COMPONENT fadder
PORT
(
a, b,cin : IN STD_LOGIC;
s, co : OUT STD_LOGIC
);
END COMPONENT;
SIGNAL carry : STD_LOGIC_VECTOR(3 DOWNTO 1);
BEGIN
u1 : fadder PORT MAP (a=>a(0), b =>b(0),cin=>c0,s=>s(0),co=>carry (1));
u2 : fadder PORT MAP (a=>a(1), b=>b(1),cin=>carry(1),s=>s(1),co=>carry (2));
u3 : fadder PORT MAP (a=>a(2), b=>b(2),cin=>carry(2),s=>s(2),co=>carry (3));
u4 : fadder PORT MAP (a=>a(3),b=>b(3),cin=>carry(3),s=>s(3),co=>c4);
END arc2;
2、使用原理图的方法设计
打开File—>New Project Wizard输入文件名adder4保存在D盘内,打开File—>New—>VHDL File,从模版中选择库的说明,use语句的说明,实体的说明,结构体的说明,编写VHDL代码,然后选择File-->Create/Update-->Create Symbol Files for Current File,选择File-->New-->Other File-->Vector Waveform File,查找引脚,从Edit中选择End Time 输入40、ns 保存。从Assignments—>Settings—>Simulator Settings—>Functional
然后Processing—>Generate Functional Simnlation Netlist —>确定。选择Start Simulation保存最后的波形图,打开File—>close关闭工程。
文件:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY fadder IS
PORT
(
Cin,a, b : IN STD_LOGIC;
s, co : OUT STD_LOGIC
);
END fadder;
ARCHITECTURE arc1 OF fadder IS
BEGIN
s<=a xor b xor cin;
co<=((a xor b)and cin)or(a and b);
END arc1;
原理图:
四、实验现象
五、 实验体会与收获
问题:Error (10500): VHDL syntax error at adder4.vhd(10) near text ")"; expecting an identifier, or "constant", or "file", or "signal", or "variable"
Error (10500): VHDL syntax error at adder4.vhd(19) near text "COMPONENT"; expecting ";", or an identifier ("component" is a reserved keyword), or "entity"
Error (10396): VHDL syntax error at adder4.vhd(27): name used in construct must match previously specified name "adder4"
Error (10523): Ignored construct adder4 at adder4.vhd(3) due to previous errors
解决办法 :
c4 : OUT STD_LOGIC;
);改为:
c4 : OUT STD_LOGIC);
OUT STD_LOGIC后面无;
收获:第二种方法中只建立熟悉理解一位全加器的工作原理,掌握串行进位加法器的逻辑原理。