EDA课程设计八位二进制全加器文档格式.docx
《EDA课程设计八位二进制全加器文档格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计八位二进制全加器文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
2.2八位全加器的原理
一个八位全加器能够由八个一位全加器组成,加法器之间的进位能够用串行方式实现,马上低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。
3.设计方案与仿真
3.1一位全加器的设计与仿真
全加器的实现是以半加器的实现为基础的,所以,要设计全加器应第一设计一个一
位的半加器。
半加器的实现方案为:
①为此项工程成立文件夹;
②在基本元件库中,选中需要的元件,将元件(包括元件and2、not、xnor和输
入输出引脚input、output)调入原理图编写窗口中;
1
③将己设计好的原理图文件存盘;
④将所设计的半加器设置成可调用的元件。
用原理图输入法所设计的半加器原理图如图3-1所示,利用QuartusⅡ软件平台,
依据图3-1所示电路,可生成一个半加器元件符号,如图3-2所示。
在半加器的基础上,
为了成立全加器的顶层文件,一定再翻开一个原理图编写窗口,方法同上。
此中,所选
择的元件包括半加器、或门和输入输出引脚,由此可获得如图3-3所示的全加器原理图;
从而可生成个全加器元件符号,如图3-4所示。
图3-1半加器原理图图3-2半加器元件符号
图3-3全加器原理图图3-4全加器元件符号
依据一位全加器原理图连结电路,经过编译、仿真所得的波形图如图3-5所示:
图3-5一位全加器时序仿真波形
依据图3-5可知,当输入信号ain、bin、cin全部是低电平常,输出信号sum和cout全部是低电平;
当输入信号ain、bin、cin中有且只有一个为高电平常,输出信号sum为高电平,输出信号cout为低电平;
当输入信号ain、bin、cin中有两个为
2
高电平常,输出信号sum为低电平,输出信号cout为高电平;
当输入信号ain、bin、cin全部是高电平常,输出信号sum和cout全部是高电平。
由此能够看出仿真结果与理论值相切合。
3.2八位全加器的实现方案与仿真
八位全加器的实现是以一位全加器的实现为基础的,它由八个一位全加器组成,加
法器之间的进位能够用串行方式实现,马上低位加法器的进位输出cout与相邻的高位
加法器的最低进位输入信号cin相接。
一位全加器的实现方案如3.1所述;
八位全加器的原理图见图3-6。
依据其电路生成的可调用原件符号如图3-7所示。
图3-6八位全加器原理图
图3-7八位全加器元件符号
3
依据图3-6所示的原理图进行时序仿真的波形以下列图3-8所示:
图3-8八位全加器时序仿真波形
上图3-8中:
a1、a2、a3、a4、a5、a6、a7、a8与b1、b2、b3、b4、b5、b6、b7、
b8为八位全加器的输入信号,s1、s2、s3、s4、s5、s6、s7、s8为八位输出信号,cout
为最高位进位输出信号;
依据波形图可得,当输入信号a1、a2、a3、a4、a5、a6、a7、
a8输入7B,b1、b2、b3、b4、b5、b6、b7、b8输入07时,输出为82,与原理图的设计要求完整符合。
3.3七段译码器的实现方案与仿真
为了将全加器的输出结果在七段数码管上显示出来,就需要用到七段译码器。
其
VHDL源程序代码详见附6.1。
依据程序生成的七段译码器元件符号如图3-9所示:
图3-9七段译码器元件符号
4
七段译码器的仿真结果以下列图所示:
图3-10七段译码器仿真波形
3.4输出结果数码显示的实现方案与仿真
为了将八位全加器的输出结果在实验箱上用数码管显示出来,需要将八位输出结果
按高低位经过两个七段译码器分别对两个七段数码管生成可控的高低电平信号,驱动相应的数字点亮。
详细电路连结以下列图所示:
图3-11数码管显示译码电路
在此电路的仿真过程中,主程序需要调用八位全加器的源程序和七段译码器的源程
序,将两个原件的.vhd文件和.bsf文件拷到当前工程文件夹中即可。
七段译码器的VHDL
程序设计详见附6.1,八位全加器VHDL源程序代码详见附6.2。
依据图3-11电路图连结好电路,经过编译、仿真所得的波形图如图3-12所示。
5
图3-12输出结果数码管显示仿真波形
4.八位全加器的引脚锁定与下载
在本设计中,为了在实验系统上硬件考证八位全加器的功能,用十六个键分别输入
八个加数和被加数,分别对应a1、a2、a3、a4、a5、a6、a7、a8和b1、b2、b3、b4、b5、
b6、b7、b8,数码管显示相加结果,发光二极管显示进位cout,编译下载后进行硬件
测试。
改变a1、a2、a3、a4、a5、a6、a7、a8和b1、b2、b3、b4、b5、b6、b7、b8键
入值,数码管会显示相应的结果,同时,发光二极管显示进位信息,有进位则亮。
其引
脚锁定图如图4-1所示:
6
图4-1八位全加器的引脚锁定图
5.设计结论与总结
依据八位全加器的硬件测试结果可知:
其测试结果与软件仿真的时序波形是一一对
应的,即完整切合八位全加器原理图设计的设计要求。
假如a1、a2、a3、a4、a5、a6、
a7、a8输入加数为FF,由b1、b2、b3、b4、b5、b6、b7、b8输入被加数为FF,数码管
输出为FE,与此同时,发光二极管点亮。
经过本次设计,熟习了利用QuartusⅡ的原理图输入法设计简单组合电路,掌握了
层次化设计的方法,经过一个八位全加器的设计理解并掌握了利用EDA软件进行原路
图输入方式电子线路设计的详尽流程。
7
6.附录
附6.1七段译码器VHDL源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECL7SIS
PORT(A:
INSTD_LOGIC_VECTOR(4DOWNTO1);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREoneOFDECL7SIS
BEGIN
PROCESS(A)
CASEAIS
WHEN"
0000"
=>
LED7S<
="
0111111"
;
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0000111"
1000"
1111111"
1001"
1101111"
1010"
1110111"
1011"
1111100"
1100"
0111001"
1101"
1011110"
1110"
1111001"
1111"
1110001"
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESS;
8
附6.2八位全加器VHDL源程序代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.all;
LIBRARYwork;
ENTITYf_8adderIS
port
(
a1:
INSTD_LOGIC;
b1:
a2:
b2:
a3:
b3:
a4:
b4:
a5:
b5:
a6:
b6:
a7:
b7:
a8:
b8:
cout:
OUTSTD_LOGIC;
s:
OUTSTD_LOGIC_VECTOR(8downto1)
);
ENDf_8adder;
ARCHITECTUREbdf_typeOFf_8adderIS
componentf_1adder
PORT(ain:
bin:
cin:
sum:
OUTSTD_LOGIC
endcomponent;
signals_ALTERA_SYNTHESIZED:
STD_LOGIC_VECTOR(8downto1);
signalSYNTHESIZED_WIRE_0:
STD_LOGIC;
signalSYNTHESIZED_WIRE_1:
signalSYNTHESIZED_WIRE_2:
signalSYNTHESIZED_WIRE_3:
signalSYNTHESIZED_WIRE_4:
signalSYNTHESIZED_WIRE_5:
9
signalSYNTHESIZED_WIRE_6:
signalSYNTHESIZED_WIRE_7:
BEGIN
SYNTHESIZED_WIRE_0<
='
0'
;
b2v_inst:
f_1adder
PORTMAP(ain=>
a1,
bin=>
b1,
cin=>
SYNTHESIZED_WIRE_0,
cout=>
SYNTHESIZED_WIRE_1,
sum=>
s_ALTERA_SYNTHESIZED
(1));
b2v_inst1:
a2,
b2,
SYNTHESIZED_WIRE_2,
s_ALTERA_SYNTHESIZED
(2));
b2v_inst2:
a3,
b3,
SYNTHESIZED_WIRE_3,
s_ALTERA_SYNTHESIZED(3));
b2v_inst3:
a4,
b4,
SYNTHESIZED_WIRE_4,
s_ALTERA_SYNTHESIZED(4));
b2v_inst4:
a5,
b5,
SYNTHESIZED_WIRE_5,
s_ALTERA_SYNTHESIZED(5));
b2v_inst5:
a6,
b6,
SYNTHESIZED_WIRE_6,
s_ALTERA_SYNTHESIZED(6));
b2v_inst6:
a7,
b7,
10
SYNTHESIZED_WIRE_7,
s_ALTERA_SYNTHESIZED(7));
b2v_inst7:
a8,
b8,
cout,
s_ALTERA_SYNTHESIZED(8));
s<
=s_ALTERA_SYNTHESIZED;
END;
11