使用Verilog读写文本数据的方法

Verilog读写文本数据教程

在进行代码开发时,经常需要通过灌数据的方式来测试模块功能是否正确,有时候甚至不能单单从波形中判断模块功能的正确,还需要将输出的波形数据导入 Matlab等工具进行分析。

因此,学会如何用verilog读入文本以及输出文本是十分必要的。

verilog 读入文本数据

 reg [Datawidth-1:0] mem_q_tmp[0:数据长度];
 reg [CNT_BIT-1:0] mem_cnt = {CNT_BIT{1'b0}};
 initial begin
$readmemh("文件路径",变量名);// h表示按照16进制读入
 end
// mem addr
 always  @(posedge clk)
        begin
           mem_cnt <= mem_cnt +1;
        end
 // 将mem中的数据送入信号
 always  @(posedge clk)   
        begin
        data_i <= mem_i_tmp[mem_cnt]; 
        end

一般处理如上所示,先将文本数据读进一个寄存器搭建的mem,再利用计数依次送入具体信号。

Verilog输出文本

    reg [19:0] i = 0;
    always@(posedge clk)begin
        if(i<16384)
           i <= i+1;
        else
           i<= 0;
    end
      
    integer dout_file1; //定义句柄
    initial begin    
      dout_file1=$fopen("目标文件路径");    //打开所创建的文件
          if(dout_file1 == 0)begin 
             $display ("can not open the file!");    //创建文件失败,显示can not open the file!
              $stop;
           end
    end

    always @(posedge clk) begin
          if(i<1000)      //写入1000个clk的sample点
           $fdisplay(dout_file1,"%d",$signed(o_data[Datawidth-1:0]));    //保存有符号数据  
          else if(i>=1000)
           $fclose(dout_file1); 
    end

需要注意的是,输出文本必须执行到 $fclose(dout_file1); 的条件才会真的写进目标文本中。

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值