2013-07-03 126 views
-1

我正在嘗試使用J-K觸發器創建一個32位同步計數器。我個人JK觸發器的功能模塊...同步計數器

jkff(J, K, CLK, Q) where the first three are wire inputs and the last is a reg output. 

我那麼有櫃檯的另一個功能模塊...

thirty_two(J, K, CLK, OUT[31:0]) where the first three are inputs and the last is output 

在thirty_two模塊,我實例很多JKFF模塊,但我似乎只限於使用電線作爲我的輸出。因此,OUT [31:0]是一條電線,而不是我想要的所需的reg。

有什麼建議嗎?

+0

你能指定爲什麼你希望OUT [31:0]是'reg'嗎?應該接受'驅動'reg'的'wire'。 – Greg

+0

如果你問一個關於'thirty_two'模塊內部的問題,你需要顯示相關的代碼。你爲什麼說你被限制爲'wire'? – Vasiliy

回答

1

從Verilog開始的一個常見錯誤是認爲電線& reg類型必須匹配層次結構,否則不會。 A模塊輸入始終是導線,輸出可以是regs或導線。模塊之間的連接是導線。這兩者的用法之間的差異純粹取決於價值如何分配或驅動。

例如模塊thirty_two可以使用REG類型來驅動其輸出:

module thirty_two(
    output reg [31:0] OUT 
); 
    always @* begin 
    OUT = 32'bx; 
    end 
endmodule 

當實例化thirty_two,輸出必須驅動導線。這很有意義,因爲實例化它的級別不能直接更改子模塊輸出。

module top_level(); 
    wire [31:0] thirty_two_out; 

    thirty_two thirty_two_i0 (
    .OUT(thirty_two_out) 
); 
endmodule