简体   繁体   English

参数化生成块

[英]Parameterized generate block

I want to create a parameterised priority logic block in my test bench.我想在我的测试台中创建一个参数化优先级逻辑块。 Truth table looks like真值表看起来像

Here, I want to parameterize the number of inputs and outputs.在这里,我想参数化输入和输出的数量。 How can I implement this in a generate block?我如何在生成块中实现它?

This is what I have done for now:这是我现在所做的:

module PL模块 PL

#( #(

parameter N=2参数 N=2

) )

( (

input en,输入 en,

input [N-1:0] in,输入 [N-1:0] 中,

output [N-1:0] out output [N-1:0] 输出

); );

assign out[0] = en?分配 [0] = en? (in[0]):0; (在[0]):0;

if(N==2)如果(N==2)

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

. .

. .

. .

Add another signal to mask off the lower priority inputs.添加另一个信号以屏蔽优先级较低的输入。 Like this:像这样:

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

But I prefer using a simple for-loop in this case:但我更喜欢在这种情况下使用简单的 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM