Các bạn cho mình hỏi một chút về VHDL.
Dưới đây là đoạn code mình viết để mô tả bộ cộng 2 số 4 bit.
và đây là testbench
Ở đây lối ra gồm có sum và carry out, nếu mình muốn có lối ra là tổng của hai số thì phải làm thế nào? Chẳng hạn như cộng hai số 1100 và 0101 thì ra là 10001.
Mong các bạn giúp đỡ.
Dưới đây là đoạn code mình viết để mô tả bộ cộng 2 số 4 bit.
PHP Code:
-- file fulladd.vhd
library ieee;
use ieee.std_logic_1164.all;
entity fulladd is port (
f_a : in std_logic;
f_b : in std_logic;
f_i : in std_logic;
f_o : out std_logic;
f_s : out std_logic );
end entity;
architecture dataflow of fulladd is
begin
f_o <= (f_a and f_b) or (f_a and f_i) or (f_b and f_i);
f_s <= f_a xor f_b xor f_i;
end dataflow;
-------------------------------------------------------------------
--file fulladd_nbits_tb.vhd
library ieee;
use ieee.std_logic_1164.all;
entity fulladd_nbits is port (
a : in std_logic_vector( 3 downto 0 );
b : in std_logic_vector( 3 downto 0 );
c_i : in std_logic;
c_o : out std_logic;
s : out std_logic_vector( 3 downto 0 ) );
end entity;
architecture structural of fulladd_nbits is
component fulladd port (
f_a, f_b, f_i : in std_logic;
f_o, f_s : out std_logic );
end component;
signal carry : std_logic_vector( 4 downto 0 );
begin
carry(0) <= c_i;
fulladder : for k in 3 downto 0 generate
adder : fulladd port map(a(k), b(k), carry(k), carry(k+1), s(k));
end generate fulladder;
c_o <= carry(4);
end structural;
PHP Code:
library ieee;
use ieee.std_logic_1164.all;
entity fulladd_nbits_tb is
end entity;
architecture structural of fulladd_nbits_tb is
signal test_a : std_logic_vector( 3 downto 0 );
signal test_b : std_logic_vector( 3 downto 0 );
signal test_s : std_logic_vector( 3 downto 0 );
signal test_i : std_logic;
signal test_o : std_logic;
component fulladd_nbits port (
a : in std_logic_vector( 3 downto 0 );
b : in std_logic_vector( 3 downto 0 );
c_i : in std_logic;
c_o : out std_logic;
s : out std_logic_vector( 3 downto 0 ) );
end component;
begin
DUT : fulladd_nbits port map (
a => test_a,
b => test_b,
c_i => test_i,
c_o => test_o,
s => test_s );
testing : process
begin
test_a <= "0000";
test_b <= "0101";
test_i <= '0';
wait for 20 ns;
test_a <= "0110";
test_b <= "1111";
test_i <= '0';
wait for 20 ns;
wait;
end process;
end structural;
Mong các bạn giúp đỡ.
Comment