2013-07-03 49 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