2013-11-14 48 views
0

在构建流水线处理器的过程中,似乎时序逻辑正在PC中创建一个1周期的延迟,从PCFetch中的值中更新。我的Verilog代码如下连续逻辑中的传播延迟

[email protected](posedge clk) 
begin 
    if(rst) 
    PC <= 0; 
    else 
    PC <= PCFetch; 
end 

PCFetch是另一个模块实例化的输出。所以假设时钟周期X,PCfetch被更新为0002.然而,PC的更新仅在时钟周期x + 1发生。我听说这是由于时序逻辑造成的传播延迟。有什么方法可以解决它。

回答

0

你总是会在时序逻辑中产生传播延迟。顺序逻辑是指在两个触发器之间传播的逻辑。信号传播速度最快的是两个触发器之间的1个时钟周期。

如果您不想使用时序逻辑,则可以使用组合(组合)逻辑。对于你上面的例子,它看起来像这样:

assign PC = PCFetch; 

这不会在一个always块。

+0

我用分配PC = rst? 16'b0:PCFetch; 这应该有与我的顺序块相同的逻辑right/ – kype

+0

@kype您应该重置您的PCFetch信号,因为我认为这是您的触发器。您不需要重置组合信号。 – Russell