【问题标题】:Will 'typedef logic' generate a register when using it instead of a 'wire', in SystemVerilog?在 SystemVerilog 中使用 \'typedef logic\' 而不是 \'wire\' 时会生成一个寄存器吗?
【发布时间】:2022-08-03 00:34:53
【问题描述】:

具有以下 SystemVerilog 代码:

module my_module(
  input  wire [31:0] my_net
);
  ...
endmodule
...
...
wire [31:0] my_net;

assign my_net = ...;

my_module m(my_net);

通过以下方式更改my_net 声明的后果是什么(在综合时):

typedef logic [31:0] my_net_t; // This is actually no longer a net, but a variable.

module my_module(
  input  my_net_t my_net
);
  ...
endmodule

my_module m(my_net);
...
...
wire [31:0] my_net;

assign my_net = ...;

my_module m(my_net);

我的意思是,logic 是一个变量,而不是一个网络,因此,合成器会为my_net 生成一个寄存器吗?

    标签: verilog fpga register-transfer-level type-definition


    【解决方案1】:

    不。
    使用连续分配

    assign my_net = RHS;
    

    不推断寄存器。

    【讨论】:

      【解决方案2】:

      不正确。 logic 是一种可以应用于变量的数据类型或者网。

      input  wire [31:0] my_net
      input  my_net_t my_net
      

      隐含地与

      input  wire logic [31:0] my_net
      input  wire my_net_t my_net
      

      在模块内部时

      logic v;
      wire w;
      

      隐含地

      var logic v;
      wire logic W;
      

      但无论my_net 是变量还是网络,对my_net 的连续赋值都不会创建寄存器。

      【讨论】:

        猜你喜欢
        • 2019-12-24
        • 2019-01-09
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多