屏蔽输入解压缩数组
Masking input unpacked array
我想在给定特定信号的情况下“屏蔽”输入解压缩数组。如果该信号为 1,我希望输入全为零而不是给定的数组。
module thing (
input clk,
input rst,
input packedBits[`PB_SIZE]
);
// ...
endmodule
module top (
input clk,
input rst
);
logic packedBits[`PB_SIZE];
mod_i thing (
.clk(clk),
.rst(rst),
// I can manually put `PB_SIZE zeroes, but I want the compiler to do it for me
.packedBits(rst ? {0,...,0} : packedBits)
)
endmodule
当 `PB_SIZE 为 4 时仅输入 {0,0,0,0}
是可行的,但我如何才能以更通用的方式做到这一点?
您可以使用复制运算符:
.packedBits(rst ? '{`PB_SIZE{0}} : packedBits)
参考 IEEE 标准 1800-2017,第 5.11 节 数组文字。
这是 EDA playground 上的完整示例。它在 Cadence 和 Synopsys 上运行,但在 Mentor 上有错误。 Mentor 似乎还不支持这种语法。
模拟器有时难以处理连接到模块端口的复杂表达式。使用单独的信号简化连接通常是个好主意。
`define PB_SIZE 5
module thing (input packedBits [`PB_SIZE]);
initial #1 $display("%m %p", packedBits);
endmodule
module tb;
bit rst = 1;
logic packedBits [`PB_SIZE];
logic packedBitsGated [`PB_SIZE] = rst ? '{`PB_SIZE{0}} : packedBits;
thing mod_i (.packedBits(packedBitsGated));
initial begin
packedBits = '{`PB_SIZE{1}};
#1 $display("%m %p", packedBits);
end
endmodule
这适用于 EDA playground 上的所有 3 个模拟器。
您可以在分配模式中使用 default
。那就不用知道它的大小了。
.packedBits(rst ? '{default:0} : packedBits)
我想在给定特定信号的情况下“屏蔽”输入解压缩数组。如果该信号为 1,我希望输入全为零而不是给定的数组。
module thing (
input clk,
input rst,
input packedBits[`PB_SIZE]
);
// ...
endmodule
module top (
input clk,
input rst
);
logic packedBits[`PB_SIZE];
mod_i thing (
.clk(clk),
.rst(rst),
// I can manually put `PB_SIZE zeroes, but I want the compiler to do it for me
.packedBits(rst ? {0,...,0} : packedBits)
)
endmodule
当 `PB_SIZE 为 4 时仅输入 {0,0,0,0}
是可行的,但我如何才能以更通用的方式做到这一点?
您可以使用复制运算符:
.packedBits(rst ? '{`PB_SIZE{0}} : packedBits)
参考 IEEE 标准 1800-2017,第 5.11 节 数组文字。
这是 EDA playground 上的完整示例。它在 Cadence 和 Synopsys 上运行,但在 Mentor 上有错误。 Mentor 似乎还不支持这种语法。
模拟器有时难以处理连接到模块端口的复杂表达式。使用单独的信号简化连接通常是个好主意。
`define PB_SIZE 5
module thing (input packedBits [`PB_SIZE]);
initial #1 $display("%m %p", packedBits);
endmodule
module tb;
bit rst = 1;
logic packedBits [`PB_SIZE];
logic packedBitsGated [`PB_SIZE] = rst ? '{`PB_SIZE{0}} : packedBits;
thing mod_i (.packedBits(packedBitsGated));
initial begin
packedBits = '{`PB_SIZE{1}};
#1 $display("%m %p", packedBits);
end
endmodule
这适用于 EDA playground 上的所有 3 个模拟器。
您可以在分配模式中使用 default
。那就不用知道它的大小了。
.packedBits(rst ? '{default:0} : packedBits)