VHDL:如何使用2个常规4位加法器来设计8位BCD计数器?

时间:2016-07-17 13:09:54

标签: vhdl

与我在本网站上观看的大多数计数器不同,我的BCD计数器需要使用两个4位加法器才能生成1个8位BCD计数器。到目前为止我所做的是设计一个常规的全加器,用于设计一个常规的4位加法器。

到目前为止,这是我的代码:

library ieee;
use ieee.std_logic_1164.all;

entity adder8b_custom is
port(
    X: in std_logic_vector( 7 downto 0);
    Y: in std_logic_vector (7 downto 0);
    S: out std_logic_vector (7 downto 0));
end adder8b_custom;

architecture adder8b_custom of adder8b_custom is

component adder4b 
    port (    X :   in STD_LOGIC_VECTOR (3 downto 0);   
          Y :   in STD_LOGIC_vector (3 downto 0);   
          C0: in STD_LOGIC; 
          S :    out STD_LOGIC_VECTOR (3 downto 0); 
          C4: out STD_LOGIC);
end component;

signal s1:std_logic_vector ( 7 downto 0); --for addition
signal s2:std_logic_vector ( 7 downto 0); --for subtraction
signal s3, s4, s5, s6: std_logic_vector (3 downto 0);--placeholders
signal i, j, k, l: std_logic;

begin 
    u1: adder4b port map (X => X (3 downto 0), Y => "0001",c0=>'0', S => s3 (3 downto 0), c4=>i);
    s1(3 downto 0) <=s3(3 downto 0) when s3 (3 downto 0) /="1010"
    else "0000";
    s<=s1;
    --u2: adder4b port map (X => X (7 downto 4), Y => "0001" ,c0 => i, S => s4 (3 downto 0), c4=>j);
    --s1( 7 downto 4) <= s4( 3 downto 0) when s4( 3 downto 0) /= "1010"
    --else "0000";
    --s(7 downto 4)<= s1;
end;

正如你所看到的,信号之后的一切都搞砸了,我知道如何修复它。

我感谢所有的意见。

1 个答案:

答案 0 :(得分:0)

如果您的4位加法器工作正常,您只需将低半字节的执行映射到高半字节的进位。然后分别映射你的8位。

自从我使用VHDL以来已经太久了,所以我能记住你需要的代码。