微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一些关于verilog testbench的文件操作

请教一些关于verilog testbench的文件操作

时间:10-02 整理:3721RD 点击:
请教一些关于verilog testbench的文件操作
之前一直用的VHDL的文件的数据读出,写入操作。想用一用verilog的命令。
ISE 用的版本是12.4
Modelsim用的是6.5c
在ISE中调用modelsim仿真
在F盘文件夹data下面有两个文件分别为memoryb.txt和memoryh.txt
里面数据分别为
memoryb.txt文件内容
10101101 00011101 01101111 01100001
00000001 11111110 11111111 11101110
memoryh.txt文件内容
ef ab 3e 4f
在testbench文件中代码如下
reg [7:0] mem[7:0];
reg [2:0] i;
integer file;
initial
begin
$readmemb("F:\data\memoryb.txt",mem,4,0);// 从文本的读取数据向mem[4]开始写入,直到写到mem[0]
file = $fopen("f:\data\memory.txt","w");
for(i =0;i<7;i= i+1)
begin
$display("mem[%d] = %b",i,mem[i]);

$fdisplay(file,"mem[%d] = %b",i,mem[i]);
end
  
  $readmemh("F:\data\memoryh.txt",mem);//如果没有地址的限制,就默认从//mem[0]到mem定义的最大地址。
  for(i =0;i<7;i= i+1)
  begin
$display("mem[%d] = %h",i,mem[i]);
$fdisplay(file,"mem[%d] = %h",i,mem[i]);
  end
  $fclose(file);        
end

--------------------------------------------------------------------
modelsim的仿真结果如下:
# ** Warning: (vsim-7) Failed to open readmem file "F:datamemoryb.txt" in read mode.
# No such file or directory. (errno = ENOENT)    : Tst_iqsin.v(61)
#    Time: 0 ps  Iteration: 0  Instance: /Tst_iqsin
# mem[0] = xxxxxxxx
# mem[1] = xxxxxxxx
# mem[2] = xxxxxxxx
# mem[3] = xxxxxxxx
# mem[4] = xxxxxxxx
# mem[5] = xxxxxxxx
# mem[6] = xxxxxxxx
# ** Warning: (vsim-7) Failed to open readmem file "F:datamemoryh.txt" in read mode.
# No such file or directory. (errno = ENOENT)    : Tst_iqsin.v(69)
#    Time: 0 ps  Iteration: 0  Instance: /Tst_iqsin
# mem[0] = xx
# mem[1] = xx
# mem[2] = xx
# mem[3] = xx
# mem[4] = xx
# mem[5] = xx
# mem[6] = xx
--------------------------------------------------------------------------------------

问题:
file = $fopen("f:\data\memory.txt","w");
如果指定路劲为f:\data\memory.txt,memory.txt文档是空的
如果不指定路径就会在ISE的工程目录里面新建一个文件memory.txt里面内容为
mem[0] = xxxxxxxx
mem[1] = xxxxxxxx
mem[2] = xxxxxxxx
mem[3] = xxxxxxxx
mem[4] = xxxxxxxx
mem[5] = xxxxxxxx
mem[6] = xxxxxxxx
mem[0] = xx
mem[1] = xx
mem[2] = xx
mem[3] = xx
mem[4] = xx
mem[5] = xx
mem[6] = xx

不清楚读入文件的文档放置路径有什么联系?为什么不能读入数据。

将你需要读入的memory文件放到工程目录下直接readmemh(“memoryh.txt",mem);应该可以读入的,你的问题你应该仔细看一下log,很明显的是你的文件没有被读入,问题就在于你使用的是\来表示目录的切换,起始工具是不识别的所以它报出来的路径是F:datamemoryh.txt 发现没有,中间的目录区别符号都被删除掉了,工认为读入的文件时F:datamemoryh.txt ,你在f盘下面肯定没有这个文件所以挂了



谢谢
盘符改为f:\data\memoryb.txt
$readmemb("f:/data/memoryb.txt",mem);
还是这个警告
# ** Warning: (vsim-7) Failed to open readmem file "f:/data/memoryb.txt" in read mode.
# No such file or directory. (errno = ENOENT)    : Tst_iqsin.v(61)
是不是输入文件只能放在工程目录下面啊?



谢谢
盘符改为f:\data\memoryb.txt
$readmemb("f:/data/memoryb.txt",mem);
还是这个警告
# ** Warning: (vsim-7) Failed to open readmem file "f:/data/memoryb.txt" in read mode.
# No such file or directory. (errno = ENOENT)    : Tst_iqsin.v(61)
是不是输入文件只能放在工程目录下面啊?


在windows下面的目录符号是\你用的是/它还是不识别的,所以最好是放在工作目录下面,我们一边都是在unix下面使用的,不会存在这个问题,用路径应该也是可以的,只是在windows下面没有尝试过,就不做评论了

把后缀改为dat试试

fopen的用法
try:    file=$fopen("x://../../memory.txt","w");
注意斜杠!

读入的文件后缀名是.dat

还是小编细心。这个斜杆是关键

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top