【问题标题】:Parameterized generate block参数化生成块
【发布时间】:2023-01-10 22:21:48
【问题描述】:

我想在我的测试台中创建一个参数化优先级逻辑块。 Truth table looks like

在这里,我想参数化输入和输出的数量。我如何在生成块中实现它?

这是我现在所做的:

模块 PL

#(

参数 N=2

)

(

输入 en,

输入 [N-1:0] 中,

输出 [N-1:0] out

);

分配 [0] = en ? (在[0]中):0;

如果(N==2)

assign out[1] = en ? (!in[0] && in[1]) :0;

.

.

.

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    添加另一个信号以屏蔽优先级较低的输入。像这样:

    module PL #(
    parameter N = 2 )(
    input          en,
    input  [N-1:0] in,
    output [N-1:0] out );
    
    wire [N:0] mask;
    assign mask[N] = 0;
    genvar i;
    generate
      for ( i=0; i<N; i=i+1 )
      begin: g1
        assign out[(N-1)-i] = ( en == 1 && mask[N-i] == 0 ) ?
                              in[(N-1)-i] : 1'b0;
        assign mask[(N-1)-i] = mask[N-i] | in[(N-1)-i];
      end
    endgenerate
    endmodule
    

    但我更喜欢在这种情况下使用简单的 for 循环:

    module PL #(
    parameter N = 2 )(
    input          en,
    input  [N-1:0] in,
    output [N-1:0] out );
    
    always @*
    begin: blk1
      integer i;
      out = 0;
      if ( en )
      begin
        for ( i=0; i<N; i=i+1 )
          if ( in[i] )
            out = 32'd1 << i;
      end
    end
    endmodule
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2013-12-18
      • 1970-01-01
      • 2014-10-29
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多