Thông báo

Collapse
No announcement yet.

VHDL: modelling fulladder

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • VHDL: modelling fulladder

    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.
    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_vector3 downto 0 );
        
    b    :    in std_logic_vector3 downto 0 );
        
    c_i    :    in std_logic;
        
    c_o    :    out std_logic;
        
    s    :    out std_logic_vector3 downto 0 ) );
    end entity;

    architecture structural of fulladd_nbits is
    component fulladd port 
    (
        
    f_af_bf_i    :    in std_logic;
        
    f_of_s    :    out std_logic );
    end component;

    signal carry std_logic_vector4 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
    và đây là testbench
    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_vector3 downto 0 );
    signal test_b std_logic_vector3 downto 0 );
    signal test_s std_logic_vector3 downto 0 );
    signal test_i std_logic;
    signal test_o std_logic;

    component fulladd_nbits port (
        
    a    :    in std_logic_vector3 downto 0 );
        
    b    :    in std_logic_vector3 downto 0 );
        
    c_i    :    in std_logic;
        
    c_o    :    out std_logic;
        
    s    :    out std_logic_vector3 downto 0 ) );
    end component;
    begin
        DUT 
    fulladd_nbits port map (
            
    => test_a,
            
    => test_b,
            
    c_i => test_i,
            
    c_o => test_o,
            
    => 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
    Ở đâ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 đỡ.

  • #2
    Chào bạn Buingochuy,

    Tớ không biết bạn hỏi thật hay hỏi đùa hoặc tớ không hiểu câu hỏi của bạn chăng. Bởi vì giá trị tổng chính là bit carry out và phần tổng bạn đã có. Trong VHDL bạn có thể viết: "Sum_total <= C_out & Sum;"

    Tớ nhận thấy mạch cộng bạn làm là mạch carry ripple nên nó không có gì đặc biệt bạn không cần thiết phải viết chi tiết ra như vậy làm gì. Các phần mềm EDA đủ thông minh để lựa chọn giúp bạn mạch cộng tối ưu nhất. Vậy nên bạn chỉ cần viết dấu "+" là đủ. Tớ ví dụ trong Verilog thì viết thế này (tớ lâu không dùng VHDL nên bây giờ không dám viết ra).

    assign {Cout, Sum} = A + B + Cin;

    Bạn chỉ nên thiết kế chi tiết với những mạch có yêu cầu đặc biệt (ví dụ như bạn định dùng cho DSP). Ngay cả trường hợp này bạn cũng nên tham khảo các mạch mà người ta đã nghiên cứu từ trước. Những mạch cơ bản nên để EDA tự tạo ra vừa nhanh đơn giản lại linh động do EDA có thể lựa chọn nhiều kiểu mạch tùy theo diện tích hay tốc độ.

    Comment

    Về tác giả

    Collapse

    buingochuy Tìm hiểu thêm về buingochuy

    Bài viết mới nhất

    Collapse

    Đang tải...
    X