Verilog中文件输入与输出任务实例解析
2016-07-01 17:01
330 查看
转自: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
一、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
相关文章推荐
- 在VM虚拟机上安装VMWARE TOOLS
- 转 - wireshark过滤语法总结
- Linux查看系统资源占用命令
- 大数据查询引擎 PrestoDB
- spring security4 实例(小菜完整版)
- php连接Access数据库的三种方法
- python 迭代
- log file sync 因为数据线有问题而造成高等侍的表现
- 迭代器的一般用法
- jstl表达式使用介绍
- App打包失败!Rebuild和Clean均无效
- NFS部署
- linux vim编辑器配置及使用经验
- 字符与数字的转换方式
- win8系统/win10系统连接XP系统打印机总是找不到驱动的解决方法图文教程
- 在java中 == 与 equals的区别
- jQuery插件简单学习实例教程
- JAVA 使用JDBC代码
- url参数中文乱码问题解决
- log file sync 因为数据线有问题而造成高等侍的表现