Verilog 从循环变量创建int参数
我正在尝试使用类似的代码:Verilog 从循环变量创建int参数,verilog,system-verilog,Verilog,System Verilog,我正在尝试使用类似的代码: 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
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
模块测试模块#(参数LEN=4,
参数逻辑[0:0]选项=1'b0)
(
输入时钟,
输入[LEN-1:0]数据输入,
输入[LEN-1:0]条件,
输出[LEN-1:0]数据输出_1,
输出[LEN-1:0]数据输出_2
);
//代码1
始终_ff@(posedge Clk)开始
对于(int i=0;i DataOut_1[i]您可以通过使用三元和按位运算符而不是for
循环来简化代码1:
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 reg [LEN-1:0] DataOut_1
);
always_ff @(posedge Clk) begin
if (OPTION == 1'b0) begin
DataOut_1 <= (Condition[0]) ? DataIn : '0;
end else begin
DataOut_1 <= DataIn & Condition;
end
end
endmodule
模块测试模块#(参数LEN=4,
参数逻辑[0:0]选项=1'b0)
(
输入时钟,
输入[LEN-1:0]数据输入,
输入[LEN-1:0]条件,
输出寄存器[LEN-1:0]数据输出\u 1
);
始终_ff@(posedge Clk)开始
如果(选项==1'b0)开始
数据输出1