【发布时间】:2021-03-12 12:22:50
【问题描述】:
我正在尝试使用类似的代码:
module testModule #( parameter LEN = 4,
parameter logic [0:0] OPTION = 1'b0 )
(
input Clk,
input [LEN-1:0] DataIn,
input [LEN-1:0] Condition,
output [LEN-1:0] DataOut_1,
output [LEN-1:0] DataOut_2
);
// CODE 1
always_ff @(posedge Clk) begin
for (int i = 0; i < LEN; i++) begin
if (OPTION == 1'b0) begin
if (Condition[0]) begin
DataOut_1[i] <= DataIn[i];
end else begin
DataOut_1[i] <= 1'b0;
end
end else begin
if (Condition[i]) begin
DataOut_1[i] <= DataIn[i];
end else begin
DataOut_1[i] <= 1'b0;
end
end
end
end
// CODE 2
always_ff @(posedge Clk) begin
for (int i = 0; i < LEN; i++) begin
int select = (OPTION == 1'b0) ? 0 : i;
if (Condition[select]) begin
DataOut_2[i] <= DataIn[i];
end else begin
DataOut_2[i] <= 1'b0;
end
end
end
endmodule
OPTION 可以是 0 或 1。
我希望 CODE 1 和 2 做同样的事情,并且我正在尝试简化 CODE 1。
DataOut_1 和 DataOut_2 返回相同的值,但在 CODE 2 中出现以下错误
int select = (OPTION == 1'b0) ? 0 : i;
带有初始化器的局部静态变量需要'static'关键字
静态变量初始化器中的自动变量非法
我不确定是否有办法做到这一点
【问题讨论】: