同步计数器

时间:2013-07-03 20:55:55

标签: counter verilog synchronous

我正在尝试使用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。

有什么建议吗?

1 个答案:

答案 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