【问题标题】: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