$sformat在仿真中打印文本名的使用

在仿真中,定义队列,使用任务进行函数传递,并传递文件名,传递队列,进行打印

$sformat(filename, "./data_log/%0d_%0d_%0d_0.txt", f_num, lane_num,dt);

使用此函数可以自定义字符串,在仿真的时候进行文件命名和传递数据的场景很多。

python 复制代码
int file;
task writeQueueToFile(string filename, reg [7:0] queue[$]);
  if (filename == "") begin
    $display("Error: Invalid file name");
    return;
  end
  file = $fopen(filename, "w");
  if (file == 0) begin
    $display("Error: Unable to open file '%s'", filename);
    return;
  end
  foreach (queue[i]) begin
    $fwrite(file, "%d\n", queue[i]);
  end
  $fclose(file);
  $display("Queue contents written to file '%s'", filename);
endtask

创建一个data_log文件夹,存入文件,数据可以传入数字类型

python 复制代码
    $sformat(filename, "./data_log/%0d_%0d_%0d_0.txt", f_num, lane_num,dt);
    writeQueueToFile(filename, dl0_data);

完整的测试方案

python 复制代码
`timescale 1ns/1ns
module test_q_w (
    
);
reg [7:0]dl0_data[$];

string filename;

bit [1:0] lane_num;
bit [10:0] f_num;

reg [07:00] dt   ;
reg [31:00] data_in;


initial begin
    dl0_data.delete();
end

int file;
task writeQueueToFile(string filename, reg [7:0] queue[$]);
  if (filename == "") begin
    $display("Error: Invalid file name");
    return;
  end
  file = $fopen(filename, "w");
  if (file == 0) begin
    $display("Error: Unable to open file '%s'", filename);
    return;
  end
  foreach (queue[i]) begin
    $fwrite(file, "%d\n", queue[i]);
  end
  $fclose(file);
  $display("Queue contents written to file '%s'", filename);
endtask

bit clk;
bit wr_en;

int wc= 'd500;
initial begin
    clk = 0;
    forever begin
        #10ns; clk = ~clk;
    end
end

always @(posedge clk) begin
    if(wr_en=='d1)begin
        dl0_data.push_back(data_in);
        data_in =data_in+1'b1;
        if (data_in== wc)begin
            wr_en='d0;
        end
    end
end

always @(negedge wr_en) begin
    $sformat(filename, "./data_log/%0d_%0d_%0d_0.txt", f_num, lane_num,dt);
    writeQueueToFile(filename, dl0_data);
    dl0_data.delete();
end
initial begin
    wr_en =1;
    data_in =0;
    // #10us
    f_num='d1;
    lane_num ='d1;
    dt = 'd1;



end


initial begin
    $display("fsdbDumpfilrs is start at %d",$time);
    $fsdbDumpfile("verilog.fsdb");
    $fsdbDumpvars();
    #1e9;
    $finish;
end
endmodule

仿真结果

往文本中写入了500个数据

相关推荐
日晨难再12 天前
Formality:探针(Probe Point)的设置与使用
硬件工程·数字ic
日晨难再1 个月前
Formality:时序变换(二)(不可读寄存器移除)
硬件工程·数字ic
移知1 个月前
备战春招—数字IC、FPGA笔试题(2)
fpga开发·数字ic
日晨难再1 个月前
Formality:参考设计/实现设计以及顶层设计
硬件工程·数字ic
日晨难再1 个月前
Formality:两种等价状态consistency和equality
硬件工程·数字ic
日晨难再2 个月前
Formality:匹配(match)是如何进行的?
硬件工程·数字ic
日晨难再2 个月前
静态时序分析:线负载模型的选择机制
fpga开发·硬件工程·数字ic·sta·静态时序分析
日晨难再2 个月前
TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化
硬件工程·数字ic
日晨难再2 个月前
Formality:set_svf命令
硬件工程·数字ic
日晨难再3 个月前
Formality:等价性检查的流程与模式(Guide、Setup、Preverify、Match与Verify)
硬件工程·数字ic