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;iDataOut_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