$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个数据

相关推荐
日晨难再1 个月前
AMBA:APB的历史(从APB1到APB5)
arm开发·arm·硬件工程·fpga·数字ic
日晨难再1 个月前
Verilog基础:$display系统函数和C语言中的库函数printf的区别
c语言·硬件工程·verilog·数字ic
日晨难再1 个月前
Verilog基础:时序调度中的竞争(四)(描述时序逻辑时使用非阻塞赋值)
fpga开发·硬件工程·verilog·fpga·数字ic
上园村蜻蜓队长3 个月前
数字IC/FPGA校招宝典--笔试题(四)
fpga开发·面试·数字ic·rtl·数字前端设计
不动明王呀3 个月前
vcs+verdi搭建基础仿真的版本V1
笔记·数字ic
不吃葱的酸菜鱼4 个月前
通用图形处理器设计GPGPU基础与架构(三)
数字ic·gpgpu架构
不吃葱的酸菜鱼4 个月前
通用图形处理器设计GPGPU基础与架构(二)
架构·数字ic·硬件设计·gpgpu
不吃葱的酸菜鱼4 个月前
通用图形处理器设计GPGPU基础与架构(四)
架构·数字ic·gpgpu
日晨难再4 个月前
静态时序分析:ideal_clock、propagated_clock以及generated_clock的关系及其延迟计算规则(一)
数字ic·sta·静态时序分析
孤独的单刀6 个月前
基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)
fpga开发·信号处理·xilinx·数字ic·dsp·定点数·verilog入门