【问题标题】:Verilog filename using for loop variable使用 for 循环变量的 Verilog 文件名
【发布时间】:2013-03-20 17:59:30
【问题描述】:

我的问题类似于以下问题。 Creating a new file, filename contains loop variable, python

根据NUM_PU 的值,我想将输出文件名定义为

serial_pu0.out
serial_pu1.out
... etc

以下代码不起作用,因为模拟器将引号 ("") 内的字符视为字符串。有什么建议吗?

integer file [0:NUM_PU-1];
generate
    for(i=0;i<NUM_PU;i=i+1) begin : serial_data_gen
        initial begin
            file[i] = $fopen ("serial_pu[i].out", "w");
        end
        always@(posedge i_Clk) begin
            if(serial_wr[i]) begin
                $fwrite (file[i], "%c", serial_data_2d[i]);
                $write("%c",serial_data_2d[i]);
            end
        end
    end
endgenerate

【问题讨论】:

标签: string for-loop verilog


【解决方案1】:

您可以在 Verilog (IEEE Std 1364) 中使用 $sformat 动态构造文件名字符串:

module tb;

parameter NUM_PU=2;

integer file [0:NUM_PU-1];
genvar i;
reg [999:0] filename;

generate
    for(i=0;i<NUM_PU;i=i+1) begin : serial_data_gen
        initial begin
            $sformat(filename, "serial_pu%0d.out", i);
            file[i] = $fopen(filename, "w");
        end
    end
endgenerate

endmodule

【讨论】:

    【解决方案2】:

    您可以使用$sformatf 动态组合文件名。

    initial begin
        file[i] = $fopen($sformatf("serial_pu%0d.out", i), "w");
    end
    

    这将创建文件名:

    • serial_pu0.out
    • serial_pu1.out
    • ...

    【讨论】:

    • 感谢您的回复。 $sformatf 似乎不适用于 Verilog。看起来它仅在 System Verilog 中受支持。
    • 没错,它只在 SV 标准中,尽管一些模拟器可能支持 Verilog。您可能还想尝试$psprintf,它的工作方式相同,一些模拟器可能支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2019-09-30
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多