第一篇:设计一个多功能的1位加法器,有控制信号M、S2、S1、S0。
设计一个多功能的1位加法器,有控制信号M、S2、S1、S0。
当M=1,做算术运算:
在S2、S1、S0的控制下能完成两个1位二进制数A、B的以下算术运算: A加B,A加1,A加B加低位来的进位,B加1,A加,A加0,A加A,A加加1。当M=0,做逻辑运算:
在S2、S1、S0的控制下能完成两个1位二进制数A、B的以下逻辑运算:A+B,A·B,,,,等。
用VHDL编程并仿真(时序)。
library ieee;
use ieee.std_logic_1164.all;
entity adder is
port(m,s2,s1,s0,a,b,ci:in std_logic;
f,co:out std_logic);
end adder;
architecture behave of adder is
signal f_i:std_logic_vector(3 downto 0);
begin
f_i<=m&s2&s1&s0;
process(f_i)
begin
case f_i is
when “1000”=> f<=a xor b;co<=a and b;
when “1001”=> f<=a xor'1';co<=a;
when “1010”=> f<=(a xor b)xor ci;co<=(a and b)or(ci and(a xor b));
when “1011”=> f<=b xor '1';co<=b;
when “1100”=> f<=a xor(not b);co<=a and(not b);
when “1101”=> f<=a xor '0';co<='0';
when “1110”=> f<=a xor a;co<=a;
when “1111”=> f<=a xor(not b)xor '1';co<=(a and b)or(a xor b);
when “0000”=> f<=a or b;
when “0001”=> f<=a and b;
when “0010”=> f<=not a;
when “0011”=> f<=not b;
when “0100”=> f<=a xor b;
when “0101”=> f<=a or(not b);
when “0110”=> f<=not(a xor b);
when “0111”=> f<=a and(not b);
when others=> f<='0';co<='0';
end case;
end process;
end behave;