资源描述
EDA设计说明书
课程名称: EDA技术实用教程
设计题目: 八位二进制全加器
院 系: 电子信息和电气工程学院
学生姓名:
学 号:
专业班级:
指导老师: 李 响
年 6 月 1
1. 设计目标
熟悉利用QuartusⅡ原理图输入法设计简单组合电路,掌握层次化设计方法,并经过一个八位全加器设计把握利用EDA软件进行原理图输入方法电子线路设计具体步骤。
2. 设计原理
2.1 一位全加器原理
一位全加器能够用两个半加器及一个或门连接而成,所以需要首先完成半加器设计。在本设计中,将采取原理图输入法来完成设计。
一位全加器设计步骤:
① 为本项工程设计建立文件夹;
② 输入设计项目和存盘;
③ 将设计项目设计成可调用元件;
④ 设计全加器顶层文件;
⑤ 将设计项日设置成工程和时序仿真。
2.2 八位全加器原理
一个八位全加器能够由八个一位全加器组成,加法器之间进位能够用串行方法实现,立即低位加法器进位输出cout 和相邻高位加法器最低进位输入信号cin 相接。
3. 设计方案和仿真
3.1 一位全加器设计和仿真
全加器实现是以半加器实现为基础,所以,要设计全加器应首先设计一个一位半加器。半加器实现方案为:
① 为此项工程建立文件夹;
② 在基础元件库中,选中需要元件,将元件(包含元件and2、not 、xnor 和输 入输出引脚input、output)调入原理图编辑窗口中;
③ 将己设计好原理图文件存盘;
④ 将所设计半加器设置成可调用元件。
用原理图输入法所设计半加器原理图图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 中有两个为高电平时,输出信号sum 为低电平,输出信号cout 为高电平;当输入信号ain 、bin 、cin 全是高电平时,输出信号sum 和cout 全是高电平。由此能够看出仿真结果和理论值相符合。
3.2 八位全加器实现方案和仿真
八位全加器实现是以一位全加器实现为基础,它由八个一位全加器组成,加法器之间进位能够用串行方法实现,立即低位加法器进位输出cout 和相邻高位加法器最低进位输入信号cin 相接。一位全加器实现方案如3.1所述;八位全加器原理图见图3-6。依据其电路生成可调用原件符号图3-7所表示。
图3-6 八位全加器原理图
图3-7 八位全加器元件符号
依据图3-6所表示原理图进行时序仿真波形以下图3-8所表示:
图3-8 八位全加器时序仿真波形
上图3-8中:、、、、、、、和、、、、、、、为八位全加器输入信号,、、、、、、、为八位输出信号, cout为最高位进位输出信号;依据波形图可得,当输入信号、、、、、、、输入7B, 、、、、、、、输入07时,输出为82,和原理图设计要求完全相符。
3.3 七段译码器实现方案和仿真
为了将全加器输出结果在七段数码管上显示出来,就需要用到七段译码器。其VHDL源程序代码详见附 6.1。
根据程序生成七段译码器元件符号图3-9所表示:
图3-9 七段译码器元件符号
七段译码器仿真结果以下图所表示:
图3-10 七段译码器仿真波形
3.4 输出结果数码显示实现方案和仿真
为了将八位全加器输出结果在试验箱上用数码管显示出来,需要将八位输出结果按高低位经过两个七段译码器分别对两个七段数码管生成可控高低电平信号,驱动对应数字点亮。具体电路连接以下图所表示:
图3-11 数码管显示译码电路
在此电路仿真过程中,主程序需要调用八位全加器源程序和七段译码器源程序,将两个原件.vhd文件和.bsf文件拷到现在工程文件夹中即可。七段译码器VHDL程序设计详见附 6.1,八位全加器VHDL源程序代码详见附 6.2。
根据图3-11电路图连接好电路,经过编译、仿真所得波形图图3-12所表示。
图3-12 输出结果数码管显示仿真波形
4. 八位全加器引脚锁定和下载
在本设计中,为了在试验系统上硬件验证八位全加器功效,用十六个键分别输入八个加数和被加数,分别对应、、、、、、、和、、、、、、、,数码管显示相加结果,发光二极管显示进位cout ,编译下载后进行硬件测试。改变、、、、、、、和、、、、、、、键入值,数码管会显示对应结果,同时,发光二极管显示进位信息,有进位则亮。其引脚锁定图图4-1所表示:
图4-1 八位全加器引脚锁定图
5. 设计结论和总结
依据八位全加器硬件测试结果可知:其测试结果和软件仿真时序波形是一一对应,即完全符合八位全加器原理图设计设计要求。假如、、、、、、、输入加数为FF,由、、、、、、、输入被加数为FF,数码管输出为FE,和此同时,发光二极管点亮。
经过此次设计,熟悉了利用QuartusⅡ原理图输入法设计简单组合电路,掌握了层次化设计方法,经过一个八位全加器设计了解并掌握了利用EDA软件进行原路图输入方法电子线路设计具体步骤。
6. 附录
附 6.1 七段译码器VHDL源程序代码
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DECL7S IS
PORT ( A : IN STD_LOGIC_VECTOR(4 DOWNTO 1);
LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
END ;
ARCHITECTURE one OF DECL7S IS
BEGIN
PROCESS( A )
BEGIN
CASE A IS
WHEN "0000" => LED7S <= "0111111" ;
WHEN "0001" => LED7S <= "0000110" ;
WHEN "0010" => LED7S <= "1011011" ;
WHEN "0011" => LED7S <= "1001111" ;
WHEN "0100" => LED7S <= "1100110" ;
WHEN "0101" => LED7S <= "1101101" ;
WHEN "0110" => LED7S <= "1111101" ;
WHEN "0111" => LED7S <= "0000111" ;
WHEN "1000" => LED7S <= "1111111" ;
WHEN "1001" => LED7S <= "1101111" ;
WHEN "1010" => LED7S <= "1110111" ;
WHEN "1011" => LED7S <= "1111100" ;
WHEN "1100" => LED7S <= "0111001" ;
WHEN "1101" => LED7S <= "1011110" ;
WHEN "1110" => LED7S <= "1111001" ;
WHEN "1111" => LED7S <= "1110001" ;
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
END ;
附 6.2 八位全加器VHDL源程序代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
LIBRARY work;
ENTITY f_8adder IS
port
(
a1 : IN STD_LOGIC;
b1 : IN STD_LOGIC;
a2 : IN STD_LOGIC;
b2 : IN STD_LOGIC;
a3 : IN STD_LOGIC;
b3 : IN STD_LOGIC;
a4 : IN STD_LOGIC;
b4 : IN STD_LOGIC;
a5 : IN STD_LOGIC;
b5 : IN STD_LOGIC;
a6 : IN STD_LOGIC;
b6 : IN STD_LOGIC;
a7 : IN STD_LOGIC;
b7 : IN STD_LOGIC;
a8 : IN STD_LOGIC;
b8 : IN STD_LOGIC;
cout : OUT STD_LOGIC;
s : OUT STD_LOGIC_VECTOR(8 downto 1)
);
END f_8adder;
ARCHITECTURE bdf_type OF f_8adder IS
component f_1adder
PORT(ain : IN STD_LOGIC;
bin : IN STD_LOGIC;
cin : IN STD_LOGIC;
cout : OUT STD_LOGIC;
sum : OUT STD_LOGIC
);
end component;
signal s_ALTERA_SYNTHESIZED : STD_LOGIC_VECTOR(8 downto 1);
signal SYNTHESIZED_WIRE_0 : STD_LOGIC;
signal SYNTHESIZED_WIRE_1 : STD_LOGIC;
signal SYNTHESIZED_WIRE_2 : STD_LOGIC;
signal SYNTHESIZED_WIRE_3 : STD_LOGIC;
signal SYNTHESIZED_WIRE_4 : STD_LOGIC;
signal SYNTHESIZED_WIRE_5 : STD_LOGIC;
signal SYNTHESIZED_WIRE_6 : STD_LOGIC;
signal SYNTHESIZED_WIRE_7 : STD_LOGIC;
BEGIN
SYNTHESIZED_WIRE_0 <= '0';
b2v_inst : f_1adder
PORT MAP(ain => a1,
bin => b1,
cin => SYNTHESIZED_WIRE_0,
cout => SYNTHESIZED_WIRE_1,
sum => s_ALTERA_SYNTHESIZED(1));
b2v_inst1 : f_1adder
PORT MAP(ain => a2,
bin => b2,
cin => SYNTHESIZED_WIRE_1,
cout => SYNTHESIZED_WIRE_2,
sum => s_ALTERA_SYNTHESIZED(2));
b2v_inst2 : f_1adder
PORT MAP(ain => a3,
bin => b3,
cin => SYNTHESIZED_WIRE_2,
cout => SYNTHESIZED_WIRE_3,
sum => s_ALTERA_SYNTHESIZED(3));
b2v_inst3 : f_1adder
PORT MAP(ain => a4,
bin => b4,
cin => SYNTHESIZED_WIRE_3,
cout => SYNTHESIZED_WIRE_4,
sum => s_ALTERA_SYNTHESIZED(4));
b2v_inst4 : f_1adder
PORT MAP(ain => a5,
bin => b5,
cin => SYNTHESIZED_WIRE_4,
cout => SYNTHESIZED_WIRE_5,
sum => s_ALTERA_SYNTHESIZED(5));
b2v_inst5 : f_1adder
PORT MAP(ain => a6,
bin => b6,
cin => SYNTHESIZED_WIRE_5,
cout => SYNTHESIZED_WIRE_6,
sum => s_ALTERA_SYNTHESIZED(6));
b2v_inst6 : f_1adder
PORT MAP(ain => a7,
bin => b7,
cin => SYNTHESIZED_WIRE_6,
cout => SYNTHESIZED_WIRE_7,
sum => s_ALTERA_SYNTHESIZED(7));
b2v_inst7 : f_1adder
PORT MAP(ain => a8,
bin => b8,
cin => SYNTHESIZED_WIRE_7,
cout => cout,
sum => s_ALTERA_SYNTHESIZED(8));
s <= s_ALTERA_SYNTHESIZED;
END;
展开阅读全文