我正在尝试使用J-K触发器创建一个32位同步计数器。我有一个用于个人J-K触发器的功能模块......
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
在three_two模块中,我实例化了许多jkff模块,但我似乎只限于使用wire作为输出。因此,OUT [31:0]是一条线而不是我想要的reg。
有什么建议吗?
答案 0 :(得分:1)
开始使用verilog时常见的错误是认为电线和电线是reg类型必须跨层次结构匹配,否则它们不匹配。模块输入始终是导线,输出可以是寄存器或导线。模块之间的连接是电线。两者的使用之间的差异完全取决于如何分配或驱动值。
例如,模块thirty_two可以使用reg类型来驱动其输出:
module thirty_two(
output reg [31:0] OUT
);
always @* begin
OUT = 32'bx;
end
endmodule
当实例化three_two时,输出必须驱动电线。这有意义,因为实例化它的级别不能直接更改子模块输出。
module top_level();
wire [31:0] thirty_two_out;
thirty_two thirty_two_i0 (
.OUT( thirty_two_out )
);
endmodule