原创 testbench中将外部数据引入输出的方法(转载)

2011-6-30 10:47 2347 10 11 分类: FPGA/CPLD

在进行HDL的仿真测试时,除了用较为直观的波形仿真图像以外,通过编写测试文件testbench进行仿真并将仿真结果保存在对应的文件,显得尤为重要。文件的操作主要用到读和写两种操作。

1. 读操作

读操作用到的语句是:$readmemb()或$readmemh()。

以$readmemb()为例,它的调用为

   $readmemb("file_name",memory)

   file_name:可以是.txt、.doc等格式的文件,但必须遵守ROM的规范,即其内容形式必须    如下:           

   @00  01010_01001010010010101010

   @01  000010100101001001_0010010

        .......

   @0f  0010101010101_010010010010

   其中:@后紧跟的ROM单元的地址,它必须用十六进制表示。在ROM单元地址与其后  的二进制比特流串之间至少要有一个空格(亦可以有回车);比特流可以用"_"隔开,以增强程序的可读性。

   memory:memory的声明格式为:

           reg[WORD_LEN-1 : 0]  my_rom [0 : WORD_NUM-1];

   其中:WORD_LEN代表的是每一个ROM向量的长度,即二进制流的长度;WORD_NUM代表的是ROM向量的个数。

   值得注意的是执行完$readmemb()指令后文件中的对应单元就一次性的存储到my_rom当中。在后续的处理中my_rom只能通过其地址访问,一次性地读取对应地址上的向量,如my_rom[k];而不能访问到具体的每一位或几位,如my_rom[k][n];如果要取其中的某一位,可通过将ROM得向量赋给以个寄存器组,再进行引用,需强调的是ROM单元存储文件中向量的时候,将文件二进制串前头的数据存于高位,将二进制串中末尾的数据存于低位。

一般情况下,可由matlab生成内存文件。如以下的一个简单的.m文件。

clear all
      clc
      fid = fopen('test.txt','wt');
      for i  = 0 : 63
            fprintf(fid,'@%x   %s\n',i,dec2bin(i,6));
     end
     fclose(fid); 

2. 写操作

写操作用用到的操作主要有$fopen(),$fdisplay()和$fclose()。

$fopen()用于打开一个待写入得文件,并返回一个整型句柄,如:

       integer fid;//定义一个整型变量

       fid = $fopen("my_file");

$fdisplay()用于向一个打开的文件写入一个向量,如:

        $fdisplay(fid,"%b",data_out);

    $display()将根据data_out的长度向fid指向的文件输入一个data_out长度的向量(每次写入后就加一个回车)。同时和$readmemb相似的,写入的向量索引高的放文件头,索引低的放文件尾。

$fclose()用于关闭文件,每次文件操作结束后一定要关闭文件。

 

写txt文件:

integer write_out_file;

write_out_file = $fopen("write_out_file.txt");

$fdisplay(write_out_file,"at time %0d clearb= %b data= %d qout= %d", $time, clearb, data, qout);

$fclose(write_out_file);

read_in_file.txt 应放置在 工程目录\simulation\modelsim 文件夹里,用modelsim altera仿真时才能正确读取。

write_out_file.txt 在 $fdisplay( )调用后会自动生成,也是放置在 工程目录\simulation\modelsim 文件夹里。

注意:readmemh只能读一行一行的16进制的数据;

read_in_file.txt 里存储数据的格式如下:(第一列表示行数)

/+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/

说明:

1.以上纯属个人观点,如有错误和遗漏还望指教,谢谢。 

文章评论1条评论)

登录后参与讨论

用户412322 2012-3-10 10:25

这是针对verilog DHL的吗?
相关推荐阅读
用户567526 2012-03-23 17:49
基于FPGA IP核的FFT实现
  基于FPGA IP核的FFT实现          0 引 言   数字信号处理领域中FFT算法有着广泛的应用。目前现有的文献大...
用户567526 2012-03-23 17:47
IBIS理解说明【转帖】
IBIS 理解说明 - --谨以此文献给初学SI 的艰苦岁月      IBIS 模型在做类似板级SI 仿真得到广泛应用。在做仿真的初级阶段,经常对于i...
用户567526 2012-03-08 09:45
【转】说说Timing这回事
Intro 问:一个FPGA设计项目需要用哪些评判标准来检验? 功能正确; 时序收敛; 资源消耗少。 ...
用户567526 2012-01-12 09:25
【转载】时序是设计出来的
时序是设计出来的    我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑 的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中 ,给...
用户567526 2011-10-17 17:06
【转帖+整理】平方根升余弦滤波器
平方根升余弦滤波器 2011-04-21 15:26 1.Rcosfir:design a raised cosine FIR filter.(rcosfir是低通滤波用的,以便后面加载频。)  ...
用户567526 2011-09-22 14:47
[转帖+整理]ISE11版本中基于的SRL16分布式RAM的调用方
【转帖】ISE11版本中基于的SRL16分布式RAM的调用方法 2010-01-07 15:26 在ISE11版本中,基于SRL16的分布式RAM不再支持V5、S6和V6等器件,但是SRL16是...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条