EDA设计说明书课程名称:EDA技术实用教程 设计题目:八位二进制全加器 院 系:电子信息与电气工程学院学生:学 号:专业班级:指导教师: 响 2011年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 ponent f_1adder PORT(ain : IN STD_LOGIC; bin : IN STD_LOGIC; cin : IN STD_LOGIC; cout : OUT STD_LOGIC; sum : OUT STD_LOGIC );end ponent;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_1adderPORT MAP(ain => a1, bin => b1, cin => SYNTHESIZED_WIRE_0, cout => SYNTHESIZED_WIRE_1, sum => s_ALTERA_SYNTHESIZED(1));b2v_inst1 : f_1adderPORT MAP(ain => a2, bin => b2, cin => SYNTHESIZED_WIRE_1, cout => SYNTHESIZED_WIRE_2, sum => s_ALTERA_SYNTHESIZED(2));b2v_inst2 : f_1adderPORT MAP(ain => a3, bin => b3, cin => SYNTHESIZED_WIRE_2, cout => SYNTHESIZED_WIRE_3, sum => s_ALTERA_SYNTHESIZED(3));b2v_inst3 : f_1adderPORT MAP(ain => a4, bin => b4, cin => SYNTHESIZED_WIRE_3, cout => SYNTHESIZED_WIRE_4, sum => s_ALTERA_SYNTHESIZED(4));b2v_inst4 : f_1adderPORT MAP(ain => a5, bin => b5, cin => SYNTHESIZED_WIRE_4, cout => SYNTHESIZED_WIRE_5, sum => s_ALTERA_SYNTHESIZED(5));b2v_inst5 : f_1adderPORT MAP(ain => a6, bin => b6, cin => SYNTHESIZED_WIRE_5, cout => SYNTHESIZED_WIRE_6, sum => s_ALTERA_SYNTHESIZED(6));b2v_inst6 : f_1adderPORT MAP(ain => a7, bin => b7, cin => SYNTHESIZED_WIRE_6, cout => SYNTHESIZED_WIRE_7, sum => s_ALTERA_SYNTHESIZED(7));b2v_inst7 : f_1adderPORT MAP(ain => a8, bin => b8, cin => SYNTHESIZED_WIRE_7, cout => cout, sum => s_ALTERA_SYNTHESIZED(8));s <= s_ALTERA_SYNTHESIZED;END;-。