电子设计自动化大作业题目加法器与减法器学院泉城学院班级电气09Q2班姓名李文建学号 20093005034二O一一年十一月六日加法器和减法器一、设计要求:(1)构造一个四位二进制加法器和一个四位二进制减法器,完成各自的功能仿真。
(2)利用四个按键输入四位加数(或减数)和被加数(或被减数)。
(3)用七段数码管显示四位和(或差),用一只发光二极管指示进位(或借位)信号。
(4)利用个开关控制,确定是四位二进制加法器还是一个四位二进制减法器。
二、总体设计:1、总体结构图2、各模块功能(1)第一个4-16译码器实现输入四位加数(或减数)和被加数(或被减数)。
(2)开关模块:控制B0、B1、B2、B3,当M=0时,执行A+B,当M=1时,执行A-B。
(3)加法(减法)器模块:加法器:采用全加器的串行进位,本四位二进制加法器由四个一位二进制加法器组成,输入A i、B i、C i,输出S i、C i+1。
减法器:与加法器的区别仅仅在于最后的和数为两数相减。
(4)LED灯:加法器:灯亮表示有进位,灯灭表示无进位。
减法器:灯亮表示有借位,灯灭表示无进位。
(5)第二个4-16译码器:输入为四为加法器的和S0、S1、S2、S3,输出为Y0—Y6分别控制七段数码管的a1、b1、c1、d1、e1、f1、g1,输出Y9—Y15分别控制第二个七段数码管的a2、b2、c2、d2、e2、f2、g2。
(6)数码管:显示输出结果。
三、单元模块设计1、第一个4—16译码器(1)模块功能通过四个按键输入四位二进制数,由译码器得到四位加数(或减数)和被加数(或被减数)的所有组合,从而实现加法器(或减法器)的输入。
(2)端口定义输入端:X0、X1、X2、X3。
输出端:Y[0…15]。
Y[0…3]分别接到A[0…3],Y[4…6]分别接到B[0…3]。
(3)VHDL源程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity Decoder isPort (DIN : in std_logic_vector(3 downto 0);DOUT : out std_logic_vector(15 downto 0) );end Decoder;architecture rtl of Decoder isbeginprocess (DIN) begincase(DIN) iswhen "0000" => DOUT <= "0111111111111111";when "0001" => DOUT <= "1011111111111111";when "0010" => DOUT <= "1101111111111111";when "0011" => DOUT <= "1110111111111111";when "0100" => DOUT <= "1111011111111111";when "0101" => DOUT <= "1111101111111111";when "0110" => DOUT <= "1111110111111111";when "0111" => DOUT <= "1111111011111111";when "1000" => DOUT <= "1111111101111111";when "1001" => DOUT <= "1111111110111111";when "1010" => DOUT <= "1111111111011111";when "1011" => DOUT <= "1111111111101111";when "1100" => DOUT <= "1111111111110111";when "1101" => DOUT <= "1111111111111011";when "1110" => DOUT <= "1111111111111101";when "1111" => DOUT <= "1111111111111110";when others => DOUT <= "1111111111111111";end case;end process;end rtl;2、开关模块(1)模块功能实现加法器和减法器的选择功能(2) VHDL源程序If(M=0)ENTITY adder isPORT(clk : in STD_LOGIC;Din1 :in signed (3downto 0);Din2 :in signed (3 downto 0);Dout:out signed (3 downto 0));END adder;If(M=1)ENTITY suber isPORT(clk : in STD_LOGIC;Din1 :in signed (13 downto 0);Din2 :in signed (15 downto 0);Dout :out signed(15 downto 0));END suber;3、加法(减法)器模块(1)模块功能实现两个二进制数字的相加(相减)运算。
当到达时钟上升沿时,将两数输入,运算,输出结果。
(2)端口定义输入端:A[0…3]B[0…3]C0输出端:S[0…3]C3(3)VHDL源程序一位全加器:library ieee;use ieee.std_logic_1164.all;entity edder1_VHDL isport(a,b,cin:in std_logic;sum,cout:out std_logic);end edder1_VHDL;architecture full1 of edder1_VHDL is beginsum<=(a xor b)xor cin;cout<=(a and b)or (cin and a)or (cin and b);end full1;一位减法器:library ieee;use ieee.std_logic_1164.all;entity suber1_VHDL isport(a,b,cin:in std_logic;sum,cout:out std_logic);end suber1_VHDL;architecture full2 of suber1_VHDL isbeginsum<=((a and (not b))or ((not a)and b));cout<=(not a)and b;end full2;(4)仿真结果加法器:减法器4、LED灯表示进位(或借位)5、第二个4-16译码器(1)模块功能将加法器(或减法器)得到的结果经译码器由七段数码管表示。
(2)端口定义输入端:S[0…3]输出端:Y[0…15](3) VHDL源程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity Decoder isPort (DIN : in std_logic_vector(3 downto 0);DOUT : out std_logic_vector(15 downto 0) );end Decoder;architecture rtl of Decoder isbeginprocess (DIN) begincase(DIN) iswhen "0000" => DOUT <= "0111111111111111";when "0001" => DOUT <= "1011111111111111";when "0010" => DOUT <= "1101111111111111";when "0011" => DOUT <= "1110111111111111";when "0100" => DOUT <= "1111011111111111";when "0101" => DOUT <= "1111101111111111";when "0110" => DOUT <= "1111110111111111";when "0111" => DOUT <= "1111111011111111";when "1000" => DOUT <= "1111111101111111";when "1001" => DOUT <= "1111111110111111";when "1010" => DOUT <= "1111111111011111";when "1011" => DOUT <= "1111111111101111";when "1100" => DOUT <= "1111111111110111";when "1101" => DOUT <= "1111111111111011";when "1110" => DOUT <= "1111111111111101";when "1111" => DOUT <= "1111111111111110";when others => DOUT <= "1111111111111111";end case;end process;end rtl;(4) 仿真结果6、七段数码管(1)模块功能显示加法器与减法器输出的结果。