-1

我正在尝试使用 JK 触发器创建一个 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

在三十二模块中,我实例化了许多 jkff 模块,但我似乎仅限于使用线作为我的输出。因此, OUT[31:0] 是一根电线,而不是我想要的所需寄存器。

有什么建议么?

4

1 回答 1

1

开始使用verilog 时的一个常见错误是认为wire & reg 类型必须跨层次结构匹配,但事实并非如此。模块输入始终是电线,输出可以是 regs 或电线。模块之间的连接是电线。两者的用法之间的差异完全取决于值的分配或驱动方式。

例如模块 30_2 可以使用 reg 类型来驱动它的输出:

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

实例化三十二时,输出必须驱动导线。这是有道理的,因为实例化它的级别不能直接更改子模块的输出。

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

  thirty_two thirty_two_i0 (
    .OUT( thirty_two_out )
  );
endmodule
于 2013-07-04T13:28:37.423 回答