Verilog中文件输入与输出任务实例解析

转自:http://www.eetop.cn/blog/html/17/743817-24486.html

一、Verilog中文件输入任务

    在verilog中有$reahttp://www.eetop.cn/blog/html/17/743817-24486.htmldmemh(“filename”, mem_name)命令,

在使用这个命令时,filename”中的路径要用反斜杠'/',而不是斜杠'\',切记!

    如$readmemh("F:/mydesigen/re_input.txt",re_input);上面的语句是正确的,而如果用斜杠

就有问题,如$readmemh("G:\data.txt",re_input)。

    对文件进行数据输出用OUTFILE=$fopen("dispairity.txt")

$fdisplay(OUTFILE,"The dispairity of the pixel%d is: %d",j-434,DISP);

用$readmemh或$readmemb读取的数据文件data.txt和仿真数据写入文件在没有指定的情况下一定是在工程本身的文件夹下,仅仅是在工程所在文件夹中,与工程属于并列关系是不行的,要从属进工程才可以。

对于需要的txt文件,其格式为每行一个数据,例如用matlab产生文件则可以这样写

fid0 = fopen('G:\data.txt','wt');

fprintf(fid0,'%x \n',real(info));

其中的换行符是必须的。同时,在matlab中,路径语句的斜杠’\’或是反斜杠’/’都没有问题

 

我常用的是:

a0=funcCensusOneImage('im0.pgm',3);

fid0=fopen('G:\data.txt','wt');

fprintf(fid0,'%x\n',a0);

 fclose(fid0);

向G:\data.txt文件写入经过ct变换的8位16进制数据,且每一个数据占一行,符合modelsim仿真时将data.txt数据读入存储器寄存器的规范。

具体实例:


注意:外部.txt文档中的数据之间没有逗号,要不然仿真的时候一片红

reg [15:0] Pattern = 0;
reg [0:0] stimulus[1:3200];
reg [3:0] count= 0;
always @(posedge clk)
begin
if(din_en_temp)
begin
$readmemb("C:/Users/admin/Desktop/b.txt",stimulus);
count = count + 1;
begin
Pattern=Pattern+1;
din=stimulus[Pattern];
#5;
end
end
else 
begin
din=0;
Pattern = 0;
end
end

二、Verilog中文件输出任务

系统函数$fopen用于打开一个文件,并还回一个整数指针.

然后,$fdisplay就可以使用这个文件指针在文件中写入信息。



如果要输出十进制有符号数,则程序代码如下:


貌似下面这种方法好用些,不过要写在程序中,而不是testbench。


    reg [12:0] k = 0;
    always @(posedge Clk)
    begin
      if(!Rst_n)
         k <= 0;
      else if(k<8191)
         k <= k + 1;
      else
         k <= 8191;  
    end
    
      integer a_file;
  
      initial a_file = $fopen("M1.txt");
      always @(k)
      begin
           $fdisplay(a_file,"%d",SumMagnituder);
           if(k == 13'd8191)
            $stop;
      end


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值