ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:21.62KB ,
资源ID:9236533      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9236533.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(verilog 中文件输入输出任务.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

verilog 中文件输入输出任务.docx

1、verilog 中文件输入输出任务系统函数fopen用于打开一个文件,并还回一个整数指针然后,fdisplay就可以使用这个文件指针在文件中写入信息,写完后,则可以使用fclose系统关闭这个文件例如:integer write_out_file;定义一个文件指针integer write_out_file=$fopen(write_out_file.txt);如果打开的文件放在某个目录下,则路径写法为integer write_out_file=$fopen(XX/YYY/ZZZ/write_out_file.txt);$fdisplay(write_out_file,%hnh,addr,d

2、ata);fclose(write_out_file);以上语法是将addr,data分别显示在%hnh中的个h的位置,并写入write_out_file文件指针所指向的write_out_file.txt中从文件中读取数据,可以用 $readmemb $readmemh 从文件中读入数据,该文件格式是一定的reg:data:;$readmemh(file_nametxt,data );就是将file_nametxt中的数据读入到data数组中,然后就可以使用这些数据了还有一种方式可以把指定的数据放入指定的存储器地址单元内,就是在存放数据的文本文件内,给相应的数据规定其内存地址,形式如下:ad

3、dress_in_hexadecimal data2f20两个系统任务可以在仿真的任何时刻被执行使用,其使用格式共有以下六种:1) $readmemb(,);2) $readmemb(,);3) $readmemb(,);4) $readmemh(,);5) $readmemh(,);6) $readmemh(,);在这两个系统任务中,被读取的数据文件的内容只能包含:空白位置(空格,换行,制表格(tab)和form-feeds),注释行(/形式的和/*.*/形式的都允许),二进制或十六进制的数字。数字中不能包含位宽说明和格式说明,对于$readmemb系统任务,每个数字必须是二进制数字,对于$

4、readmemh系统任务,每个数字必须是十六进制数字。数字中不定值x或X,高阻值z或Z,和下划线(_)的使用方法及代表的意义与一般Verilog HDL程序中的用法及意义是一样的。另外数字必须用空白位置或注释行来分隔开。在下面的讨论中,地址一词指对存贮器(memory)建模的数组的寻址指针。当数据文件被读取时,每一个被读取的数字都被存放到地址连续的存贮器单元中去。存贮器单元的存放地址范围由系统任务声明语句中的起始地址和结束地址来说明,每个数据的存放地址在数据文件中进行说明。当地址出现在数据文件中,其格式为字符“”后跟上十六进制数。如:hh.h对于这个十六进制的地址数中,允许大写和小写的数字。在

5、字符“”和数字之间不允许存在空白位置。可以在数据文件里出现多个地址。当系统任务遇到一个地址说明时,系统任务将该地址后的数据存放到存贮器中相应的地址单元中去。对于上面六种系统任务格式,需补充说明以下五点:1) 如果系统任务声明语句中和数据文件里都没有进行地址说明,则缺省的存放起始地址为该存贮器定义语句中的起始地址。数据文件里的数据被连续存放到该存贮器中,直到该存贮器单元存满为止或数据文件里的数据存完。2) 如果系统任务中说明了存放的起始地址,没有说明存放的结束地址,则数据从起始地址开始存放,存放到该存贮器定义语句中的结束地址为止。3) 如果在系统任务声明语句中,起始地址和结束地址都进行了说明,则

6、数据文件里的数据按该起始地址开始存放到存贮器单元中,直到该结束地址,而不考虑该存贮器的定义语句中的起始地址和结束地址。4) 如果地址信息在系统任务和数据文件里都进行了说明,那么数据文件里的地址必须在系统任务中地址参数声明的范围之内。否则将提示错误信息,并且装载数据到存贮器中的操作被中断。5) 如果数据文件里的数据个数和系统任务中起始地址及结束地址暗示的数据个数不同的话,也要提示错误信息。下面举例说明:先定义一个有256个地址的字节存贮器 mem:reg7:0 mem1:256;下面给出的系统任务以各自不同的方式装载数据到存贮器mem中。initial $readmemh(mem.data,me

7、m);initial $readmemh(mem.data,mem,16);initial $readmemh(mem.data,mem,128,1);第一条语句在仿真时刻为0时,将装载数据到以地址是1的存贮器单元为起始存放单元的存贮器中去。第二条语句将装载数据到以单元地址是16的存贮器单元为起始存放单元的存贮器中去,一直到地址是256的单元为止。第三条语句将从地址是128的单元开始装载数据,一直到地址为1的单元。在第三种情况中,当装载完毕,系统要检查在数据文件里是否有128个数据,如果没有,系统将提示错误信息。 引用参考1.打开文件integer file_id;file_id = fope

8、n(file_path/file_name);2.写入文件/$fmonitor只要有变化就一直记录$fmonitor(file_id, %format_char, parameter);egfmonitor(file_id, %m: %t in1=%d o1=%h, $time, in1, o1);/$fwrite需要触发条件才记录$fwrite(file_id, %format_char, parameter);/$fdisplay需要触发条件才记录$fdisplay(file_id, %format_char, parameter);$fstrobe();3.读取文件integer fil

9、e_id;file_id = $fread(file_path/file_name, r);4.关闭文件$fclose(fjile_id);5.由文件设定存储器初值$readmemh(file_name, memory_name); /初始化数据为十六进制$readmemb(file_name, memory_name); /初始化数据为二进制转: 提供了丰富的系统函数,这为Testbench的编写提供了方便。尤其是IEEE1364-2005,其系统级建模的能力更强。 以前我一般常用到的系统函数只有几个:$readmemb,$readmemh,$display,$fmonitor,$fwrit

10、e,$fopen,$fclose等。通常需要对文件作预处理,才能用于Testbench读取。今天又尝试了几个其他的文件输入输出函数,不需要对文件进行预处理,直接使用需要的文件,只对需要的部分进行读取。$fseek,文件定位,可以从任意点对文件进行操作;$fscanf,对文件一行进行读写。下面是一些常见的应用:1、读写文件timescale 1 ns/1 nsmodule FileIO_tb;integer fp_r, fp_w, cnt;reg 7:0 reg1, reg2, reg3;initial beginfp_r = $fopen(data_in.txt, r);fp_w = $fop

11、en(data_out.txt, w);while(!$feof(fp_r) begincnt = $fscanf(fp_r, %d %d %d, reg1, reg2, reg3);$display(%d %d %d, reg1, reg2, reg3);$fwrite(fp_w, %d %d %dn, reg3, reg2, reg1);end$fclose(fp_r);$fclose(fp_w);endendmodule2、integer file, char;reg eof; initial beginfile = $fopenr(myfile.txt);eof = 0;while (

12、eof = 0) beginchar = $fgetc(file);eof = $feof (file);$display (%s, char); endend3、文件处理定位define SEEK_SET 0define SEEK_CUR 1define SEEK_END 2integer file, offset, position, r;r = $fseek(file, 0, SEEK_SET); /* Beginning */r = $fseek(file, 0, SEEK_CUR); /* No effect */r = $fseek(file, 0, SEEK_END); /* E

13、nd of file */r = $fseek(file, position, SEEK_SET); /* Previous loc */4、integer r, file, start, count;reg 15:0 mem0:10, r16;r = $fread(file, mem0, start, count);r = $fread(file, r16);5、integer file, position;position = $ftell(file);6、integer file, r, a, b;reg 80*8:1 string;file = $fopenw(output.log);

14、r = $sformat(string, Formatted %d %x, a, b);r = $sprintf(string, Formatted %d %x, a, b);r = $fprintf(file, Formatted %d %x, a, b);7、integer file, r;file = $fopenw(output.log);r = $fflush(file);8、/ This is a pattern file - read_pattern.pat / time bin dec hex10: 001 1 120.0: 010 20 02050.02: 111 5 FFF

15、62.345: 100 4 DEADBEEF75.789: XXX 2 ZzZzZzZztimescale 1ns / 10 psdefine EOF 32hFFFF_FFFFdefine NULL 0define MAX_LINE_LENGTH 1000module read_pattern;integer file, c, r;reg 3:0 bin;reg 31:0 dec, hex;real real_time;reg 8*MAX_LINE_LENGTH:0 line; /* Line of text read from file */initialbegin : file_block

16、$timeformat(-9, 3, ns, 6);$display(time bin decimal hex);file = $fopenr(read_pattern.pat);if (file = NULL) / If error opening filedisable file_block; / Just quitc = $fgetc(file);while (c != EOF)begin/* Check the first character for comment */if (c = /)r = $fgets(line, MAX_LINE_LENGTH, file);elsebegi

17、n/ Push the character back to the file then read the next timer = $ungetc(c, file);r = $fscanf(file, %f:n, real_time);/ Wait until the absolute time in the file, then read stimulusif ($realtime real_time)$display(Error - absolute time in file is out of order - %t,real_time);else#(real_time - $realti

18、me)r = $fscanf(file, %b %d %hn,bin,dec,hex);end / if c elsec = $fgetc(file);end / while not EOFr = $fcloser(file);end / initial/ Display changes to the signalsalways (bin or dec or hex)$display(%t %b %d %h, $realtime, bin, dec, hex);endmodule / read_pattern9、自动比较输出结果define EOF 32hFFFF_FFFFdefine NUL

19、L 0define MAX_LINE_LENGTH 1000module compare;integer file, r;reg a, b, expect, clock;wire out;reg MAX_LINE_LENGTH*8:1;parameter cycle = 20;initialbegin : file_block$display(Time Stim Expect Output);clock = 0;file = $fopenr(compare.pat);if (file = NULL)disable file_block;r = $fgets(line, MAX_LINE_LEN

20、GTH, file); / Skip commentsr = $fgets(line, MAX_LINE_LENGTH, file);while (!$feof(file)begin/ Wait until rising clock, read stimulus(posedge clock)r = $fscanf(file, %b %b %bn, a, b, expect);/ Wait just before the end of cycle to do compare#(cycle - 1)$display(%d %b %b %b %b, $stime, a, b, expect, out

21、);$strobe_compare(expect, out);end / while not EOFr = $fcloser(file);$stop;end / initialalways #(cycle / 2) clock = !clock; / Clock generatorand #4 (out, a, b); / Circuit under testendmodule / compare10、从文件中读数据到mem(这个好像一般人用的最多了)define EOF 32HFFFF_FFFF define MEM_SIZE 200_000 module load_mem; integer file, i; reg 7:0 mem0:MEM_SIZE; reg 80*8:1 file_name; initial begin file_name = data.bin; file = $fopenr(file_name); i = $fread(file, mem0); $display(Loaded %0d entries n, i); i = $fcloser(file); $stop; end endmodule / load_mem

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1