【问题标题】:Create a int parameter from a loop variable从循环变量创建一个 int 参数
【发布时间】: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'关键字

静态变量初始化器中的自动变量非法

我不确定是否有办法做到这一点

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    您可以通过使用三元和按位运算符而不是 for 循环来简化 CODE 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2021-11-10
      • 2011-09-08
      • 2014-08-03
      相关资源
      最近更新 更多