2013-11-14 83 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