[英]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.