如何在结构VHDL代码中更新时钟上升沿上的输出?

如何在结构VHDL代码中更新时钟上升沿上的输出?,vhdl,Vhdl,我用VHDL以结构形式编写了这个非常简单的16位与门: 文件已上载 IEEE库; 使用IEEE.STD_LOGIC_1164.ALL; 实体和_16位为 港口( A:标准逻辑向量(15到0); B:标准逻辑向量(15到0); Clk:标准逻辑中; --Rst:标准逻辑中; C:输出标准逻辑向量(15到0); 结束和_16位; 和_16位的架构是 组件和1bit是 港口( 答:标准逻辑; B:标准逻辑; C:输出标准(U逻辑); 端部元件; 信号s:std_逻辑_向量(15到0); 开始 ands

我用VHDL以结构形式编写了这个非常简单的16位与门: 文件已上载

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体和_16位为
港口(
A:标准逻辑向量(15到0);
B:标准逻辑向量(15到0);
Clk:标准逻辑中;
--Rst:标准逻辑中;
C:输出标准逻辑向量(15到0);
结束和_16位;
和_16位的架构是
组件和1bit是
港口(
答:标准逻辑;
B:标准逻辑;
C:输出标准(U逻辑);
端部元件;
信号s:std_逻辑_向量(15到0);
开始
ands:对于15到0的i生成
和_1bit_x:and_1bit port map(A=>A(i),B=>B(i),C=>s(i));
终端生成;
过程(Clk)
开始
如果上升沿(Clk),则

C最好将顺序过程放入子模块中,并在顶层(
和_16bit
)实例化它。那么你的顶层将更加结构化

每个位可以有一个实例,就像对
和1bit
所做的那样

例如,该模块是一个1位寄存器

entity dff_1bit is
    Port (
        D   : in  std_logic;
        Clk : in  std_logic;
        Q   : out std_logic );
end dff_1bit;

architecture Behavioral of dff_1bit is
begin

process(Clk)
    begin
        if rising_edge(Clk) then
             Q <= D;                     
        end if;
end process;

end Behavioral;

这应该可以很好地工作。这是一个寄存器传输级(RTL)结构,可以模拟和合成。结构表示法将C寄存器转移到由单个门组成的主从触发器中。对于由门(晶体管、电阻器、二极管等)组成的触发器没有太多的需求。HDL中合成合格结构的信息来源可能是合成供应商的文档或现在的witthdrawn IEEE Std 1076.6-2004(通常是供应商将接受的内容的子集)。“我应该如何为第一个输出替换未知输出?”。初始化
s
。即
信号s:std_逻辑_向量(15到0):=(其他=>'0')。这样,顶级文件的波形延迟太大@syzd此代码应该与您的代码具有相同的延迟(1个时钟周期)。@ahmadeus我检查过了,至少是这样doubles@syzd你的测试台有比赛条件。您可以尝试在刺激开始时设置一个小延迟(例如1ps)。那么这两种代码的行为应该相似。
entity dff_1bit is
    Port (
        D   : in  std_logic;
        Clk : in  std_logic;
        Q   : out std_logic );
end dff_1bit;

architecture Behavioral of dff_1bit is
begin

process(Clk)
    begin
        if rising_edge(Clk) then
             Q <= D;                     
        end if;
end process;

end Behavioral;
dff_1bit_x: dff_1bit port map (D => s(i), Clk => Clk, Q => C(i));