-1

我正在尝试使用结构描述在 VHDL 中设计一个 32 位二进制串行加法器。加法器应使用全加器和 d 锁存器。我的看法是:

全加器:

architecture Behavioral of FullAdder is
begin

s <= (x xor y) xor cin;
cout <= (x and y) or (y and cin) or (x and cin);
end Behavioral;

D-锁存器:

architecture Behavioral of dLatch is
begin
state: process(clk)
begin
    if(clk'event and clk = '1') then
        q <= d;
    end if;
end process;
end Behavioral;

串行加法器:

add: process ( clk )
    variable count : integer range 0 to 31;
        variable aux : STD_LOGIC;
        variable aux2 : STD_LOGIC;
    begin
        if(clk'event and clk = '1') then
        fa: FullAdder port map(x(count), y(count), aux, s(count), aux2);
                    dl: dLatch port map(clock, aux2, aux);
        count := count + 1; 
    end if;
     end process;

但是,它似乎不起作用。另外,流水线化串行加法器的最简单方法是什么?

4

2 回答 2

0

对于串行加法器的流水线操作,最好的方法是一个接一个地连接加法器和 d 触发器。因此,您将第一个加法器的 cout 作为触发器的输入。该触发器的输出将是下一个加法器的 cin,依此类推。不过要小心,因为您还必须将每个加法器的 s 以及输入的每一位流水线化,实际上是将几个 d 触发器放在一行中,以通过各个流水线阶段复制它们。

于 2013-06-15T22:37:54.197 回答
0

“它似乎不起作用”很笼统,但我看到的一个问题是您正试图fa: FullAdder在进程中实例化组件。想想硬件中的组件实例化意味着什么,你会意识到在 clk 的上升沿实例化模块是没有意义的......

将实例化移出进程,它至少应该删除您应该看到的语法错误(ModelSim 中的“非法顺序语句。”)。

于 2013-06-07T07:21:24.477 回答