2014-01-22 95 views
-1

在Verilog中實現單週期mips。 PC初始化爲地址0 ,然後更新其值爲PC + 1在時鐘的posedge,也被初始化爲0.初始塊在verilog中延遲

問題是在模擬中,地址0的指令只需要半個時鐘週期,然後PC增加4,然後第二條指令進入處理器。

simulation screenshot http://imagizer.imageshack.us/v2/800x600q90/36/0cxn.jpg

也不由1初始化時鐘也將延遲初始化PC解決了這個問題之前

這是我的時鐘模塊

`timescale 1ps/1ps 

module clk_gen(clk); 
    output reg clk ; 
    initial begin 
    clk<=0; 
    end 

    always begin 
    #1400 clk=!clk; 
    end 
endmodule 

PC模塊:

module PC(inPC, Address, clk); 
    input  [31:0] inPC; 
    input    clk; 
    output reg [31:0] Address; 

    initial begin 
    Address=32'd0; 
    end 

    always @(posedge clk) begin 
    Address <= inPC; 
    end 
endmodule 
+0

模塊PC(INPC,地址,CLK); \t input [31:0] inPC; \t input clk; \t輸出reg [31:0]地址; \t \t 初始 \t開始 \t \t \t地址= 32'd0; \t端 \t \t總是@(posedge時鐘) \t開始 \t \t \t地址<= INPC; \t end endmodule – Fawzinov

+0

在設計中是否有觸發'@(negedge clk)'的東西?使用非阻塞賦值('<=')初始化時鐘將始終在時間0時觸發邊沿事件。 – Greg

+0

您可以在截圖中發佈信號名稱嗎? PC是來自頂端的第四個信號?這是唯一的信號初始化爲0,然後增加到4,但這種情況發生在2050年左右。你有沒有延遲數據通路? – Ari

回答

0

的問題似乎並不涉及你的時鐘月但基於該代碼。

假設你不指望這是可合成的。理想情況下,您在一個過程中定義了一個reglogic值。

注意,如果你的模擬器支持它,我會用絕對定義時間,例如#1.4ns

initial begin 
    clk <= 1'b0; 
    forever begin 
    #1.4ns clk <= ~clk ; 
    end 
end 
+0

第一管理指令只需要半個時鐘週期..這不是關於時間 – Fawzinov

+0

我張貼了模擬的scrrenshot 我認爲問題是與我的時鐘發生器 – Fawzinov

+0

@Fawzinov我很困惑,你說這個問題可能與時鐘世代,然後說的答案是不是時機。我們只能根據給出的信息來回答,很確定問題出在模塊使用時鐘上。如果你的評論是關於'#1.4ns',那只是提示更可靠/便攜/可讀代碼的提示。 – Morgan