📄 adder10.vhd
字号:
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity adder10 is
port(
clk,rst: in std_logic;
a,b: in std_logic_vector(8 downto 0);
sum: out std_logic_vector(9 downto 0));--带有最高位为进位
end entity adder10;
architecture depict of adder10 is
signal reg1: std_logic_vector(17 downto 0);
signal reg2: std_logic_vector(16 downto 0);
signal reg3: std_logic_vector(15 downto 0);
signal reg4: std_logic_vector(14 downto 0);
signal reg5: std_logic_vector(13 downto 0);
signal reg6: std_logic_vector(12 downto 0);
signal reg7: std_logic_vector(11 downto 0);
signal reg8: std_logic_vector(10 downto 0);
begin
bit0:process(clk,rst)
begin
if(rst = '1')then
reg1 <= "000000000000000000";
elsif(rising_edge(clk))then
reg1(0) <= a(0) xor b(0);
reg1(1) <= a(0) and b(0);
reg1(2) <= a(1);
reg1(3) <= b(1);
reg1(4) <= a(2);
reg1(5) <= b(2);
reg1(6) <= a(3);
reg1(7) <= b(3);
reg1(8) <= a(4);
reg1(9) <= b(4);
reg1(10) <= a(5);
reg1(11) <= b(5);
reg1(12) <= a(6);
reg1(13) <= b(6);
reg1(14) <= a(7);
reg1(15) <= b(7);
reg1(16) <= a(8);
reg1(17) <= b(8);
end if;
end process bit0;
bit1:process(clk,rst)
begin
if(rst = '1') then
reg2 <= "00000000000000000";
elsif(rising_edge(clk)) then
reg2(0) <= reg1(0);--第一次的结果
reg2(1) <= reg1(1) xor reg1(2) xor reg1(3);--加法结果
reg2(2) <= (reg1(1) and reg1(2)) or (reg1(1) and reg1(3)) or (reg1(2) and reg1(3));--进位结果
reg2(16 downto 3) <= reg1(17 downto 4);
end if;
end process bit1;
bit2:process(clk,rst)
begin
if(rst = '1') then
reg3 <= "0000000000000000";
elsif(rising_edge(clk)) then
reg3(1 downto 0) <= reg2(1 downto 0);--结果
reg3(2) <= reg2(2) xor reg2(3) xor reg2(4);--加法结果
reg3(3) <= (reg2(2) and reg2(3)) or (reg2(2) and reg2(4)) or (reg2(3) and reg2(4));--进位结果
reg3(15 downto 4) <= reg2(16 downto 5);
end if;
end process bit2;
bit3:process(clk,rst)
begin
if(rst = '1') then
reg4 <= "000000000000000";
elsif(rising_edge(clk)) then
reg4(2 downto 0) <= reg3(2 downto 0);
reg4(3) <= reg3(3) xor reg3(4) xor reg3(5);
reg4(5) <= (reg3(3) and reg3(4)) or (reg3(4) and reg3(5)) or (reg3(3) and reg3(5));
reg4(14 downto 5) <= reg3(15 downto 6);
end if;
end process bit3;
bit4:process(clk,rst)
begin
if(rst = '1') then
reg5 <= "00000000000000";
elsif(rising_edge(clk)) then
reg5(3 downto 0) <= reg4(3 downto 0);
reg5(4) <= reg4(4) xor reg4(5) xor reg4(6);
reg5(5) <= (reg4(4) and reg4(5)) or (reg4(4) and reg4(6)) or (reg4(6) and reg4(5));
reg5(13 downto 6) <= reg4(14 downto 7);
end if;
end process bit4;
bit5:process(clk,rst)
begin
if(rst = '1') then
reg6 <= "0000000000000";
elsif(rising_edge(clk)) then
reg6(4 downto 0) <= reg5(4 downto 0);
reg6(5) <= reg5(5) xor reg5(6) xor reg5(7);
reg6(6) <= (reg5(5) and reg5(6)) or (reg5(5) and reg5(7)) or (reg5(6) and reg5(7));
reg6(12 downto 7) <= reg4(13 downto 8);
end if;
end process bit5;
bit6:process(clk,rst)
begin
if(rst = '1') then
reg7 <= "000000000000";
elsif(rising_edge(clk)) then
reg7(5 downto 0) <= reg6(5 downto 0);
reg7(6) <= reg6(6) xor reg6(7) xor reg6(8);
reg7(7) <= (reg6(6) and reg6(7)) or (reg6(8) and reg6(7)) or (reg6(6) and reg6(8));
reg7(11 downto 8) <= reg6(12 downto 9);
end if;
end process bit6;
bit7:process(clk,rst)
begin
if(rst = '1') then
reg8 <= "00000000000";
elsif(rising_edge(clk)) then
reg8(6 downto 0) <= reg7(6 downto 0);
reg8(7) <= reg7(7) xor reg7(9) xor reg7(8);
reg8(8) <= (reg7(7) and reg7(8)) or (reg7(8) and reg7(9)) or (reg7(7) and reg7(9));
reg8(10 downto 9) <= reg7(11 downto 10);
end if;
end process bit7;
-------------------------------------------------
sum_final:process(clk,rst)
begin
if(rst = '1') then
sum <= "0000000000";
elsif(rising_edge(clk)) then
sum(7 downto 0) <= reg8(7 downto 0);
sum(8) <= reg8(10) xor reg8(9) xor reg8(8);
sum(9) <= (reg8(8) and reg8(9)) or (reg8(10) and reg8(9)) or (reg8(8) and reg8(10));
end if;
end process sum_final;
end depict;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -