11.8. СУММАТОР НЕИЗВЕСТНОГО РАЗМЕРА НА HDL
Описание Generic сумматора VHDL
library ieee;
use ieee.std_logic_1164.all;
entity add_N is
generic(N: positive);
port(
A: in std_logic_vector((N-1) downto 0);
B: in std_logic_vector((N-1) downto 0);
X: out std_logic_vector((N-1) downto 0);
C: out std_logic
);
end add_N;
architecture Example of add_N is
component SUM1
port(
A0, B0, P0 : in std_logic;
P1, S1 : out std_logic);
end component;
signal IC: std_logic_vector(N downto 0);
begin
IC(0) <= '0';
stages : for i in 0 to (N-1) generate
add: SUM1
port map( A0 => A(i),
B0 => B(i),
S1 => X(i),
P0 => IC(i),
P1 => IC(i+1));
end generate stages;
C <= IC(N);
end Example;
Конкретизация Generic сумматора на VHDL
library ieee;
use ieee.std_logic_1164.all;
entity add6 is
port(
A6: in std_logic_vector(5 downto 0);
B6: in std_logic_vector(5 downto 0);
X6: out std_logic_vector(5 downto 0);
C6: out std_logic
);
end add6;
architecture Example of add6 is
component add_N is
generic(N: positive);
port(
A: in std_logic_vector((N-1) downto 0);
B: in std_logic_vector((N-1) downto 0);
X: out std_logic_vector((N-1) downto 0);
C: out std_logic);
end component;
begin
U6: add_N
generic map (N => 6)
port map(
A => A6,
B => B6,
X => X6,
C => C6);
end Example;
Результат синтеза:
Имплементация в Xilinx VIRTEX-E:
Описание Generic сумматора Verilog
module adder(cout,sum,a,b,cin);
parameter Size = 8;
output cout;
output [Size-1:0] sum;
input cin;
input [Size-1:0] a,b;
assign {cout,sum} = a + b + cin;
endmodule;
Конкретизация Generic сумматора на Verilog
adder #(16) adder_16(cout_A,
sum_A,
a_A,
b_A,
cin_A);
Index Prev Next