二进制串行加法器-VHDL

二进制串行加法器-VHDL,vhdl,Vhdl,我正在尝试用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; 然而,它似乎不起作用。 此外,什么是流水线串行加法器的最简单方法?它似乎不起作用”是一个相当普

我正在尝试用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;
然而,它似乎不起作用。 此外,什么是流水线串行加法器的最简单方法?

它似乎不起作用”是一个相当普遍的问题,但我看到的一个问题是,您试图在一个进程内实例化组件
fa:FullAdder
。想想组件实例化在硬件中意味着什么,你会发现在clk的上升边缘实例化模块是没有意义的


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

对于串行加法器的流水线,最好的方法是将加法器和d触发器逐个连接起来。所以,你可以让第一个加法器的cout作为触发器的输入。该触发器的输出将是下一个加法器的cin,依此类推。但是要小心,因为您还必须将每个加法器的s以及输入的每个位通过管道传输,方法是将几个d触发器放在一行中,以便在各个管道阶段复制它们。

如果没有实体声明,就有点难以检查,因为您使用了信号到端口的位置映射。我建议使用命名端口映射(pinname=>signal\u name)。你做过模拟吗?如果没有,请这样做。如果你有,用它来向我们解释“它似乎不起作用”的意思——你期望看到什么?你到底看到了什么?
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;