【VHDL】VHDL设计n的全加器

1. 实验任务

  • 设计并实现一个n(n=8)的全加器

2. 如何实现

  1. 先设计出一个半加器

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    ENTITY h_adder_1 IS
        PORT (A,B:IN STD_LOGIC; SO,CO:OUT STD_LOGIC);
    END ENTITY h_adder_1;
    
    ARCHITECTURE fh1 OF h_adder_1 IS
    BEGIN 
        SO<=A XOR B;
        CO<=A AND B;--SO是数值位,CO是进位位
    END ARCHITECTURE fh1;
  2. 接着设计出一位的全加器
    f_adder_1

      运用原件例化语句,将设计好的半加器进行封装后,根据真值表,进过卡诺图化简,得到全加器的组合逻辑,进而设计出全加器的组合电路。

    --一位全加器
    library ieee;
    use ieee.std_logic_1164.all;
    entity f_adder_1 is
    
    port(ain,bin,cin:in std_logic;
    cout,sum: out std_logic);
    end entity f_adder_1;
    
    architecture behav of f_adder_1 is
    component h_adder_1
    port(A,B:in std_logic; CO,SO :out std_logic);
    end component;
    
    component or2a
    port (a,b: in std_logic; c: out std_logic);
    end component;
    
    signal net1,net2,net3:std_logic;
    begin
    u1: h_adder_1 port map(A=>ain,B=>bin,CO=>net2,SO=>net1);
    u2: h_adder_1 port map(net1,cin,net3,sum);
    u3: or2a port map(a=>net2,b=>net3,c=>cout);
    end architecture behav;

      其中的两输入或门可以调用系统元件库也可以自己设计和封装,或者通过画图的方式来实现,本人是通过编程的方式来实现的,即在相同的文件夹下,新建VHDL文件,然后编写或门。

    --两输入或门
    library ieee;
    use ieee.std_logic_1164.all;
    entity or2a  is
    port (a,b :in std_logic;
    c: out std_logic);
    end entity or2a;
    
    architecture one of or2a is
    begin
    c<=a or b;
    end architecture one;
  3. 多位全加器的设计

    library ieee;
    use ieee.std_logic_1164.all;
    entity f_adder_n is
    generic (n:integer :=8);
    
    port(q: out std_logic_vector(0 to n-1);
    a:in std_logic_vector(0 to n-1);
    b:in std_logic_vector(0 to n-1);
    in_1: in std_logic;
    cout_n:out std_logic);
    end entity f_adder_n;
    
    architecture behav of f_adder_n is
    
    component f_adder_1
    port(ain,bin,cin:in std_logic;
    cout,sum: out std_logic);
    end component;
    
    signal cc:std_logic_vector(0 to n);
    begin
    --<=in_1;
    q_1:for i in 0 to n-1 generate
    f_adder: f_adder_1 port map (a(i),b(i),cc(i),cc(i+1),q(i));
    end generate;
    cout_n<=cc(n);
    end architecture behav;

3. 实验结果

  • RTL

n位全加器

  • 仿真图
    仿真时序图
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值