在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7321|回复: 9

[求助] 请教一些关于verilog testbench的文件操作

[复制链接]
发表于 2013-8-6 15:54:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请教一些关于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


不清楚读入文件的文档放置路径有什么联系?为什么不能读入数据。
发表于 2013-8-7 09:16:07 | 显示全部楼层
将你需要读入的memory文件放到工程目录下直接readmemh(“memoryh.txt",mem);应该可以读入的,你的问题你应该仔细看一下log,很明显的是你的文件没有被读入,问题就在于你使用的是\来表示目录的切换,起始工具是不识别的所以它报出来的路径是F:datamemoryh.txt 发现没有,中间的目录区别符号都被删除掉了,工认为读入的文件时F:datamemoryh.txt ,你在f盘下面肯定没有这个文件所以挂了
 楼主| 发表于 2013-8-7 10:55:23 | 显示全部楼层
回复 2# mballack


谢谢
盘符改为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)
是不是输入文件只能放在工程目录下面啊?
 楼主| 发表于 2013-8-7 10:55:49 | 显示全部楼层
回复 2# mballack


谢谢
盘符改为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)
是不是输入文件只能放在工程目录下面啊?
发表于 2013-8-7 11:21:06 | 显示全部楼层
回复 4# coldcoolfish
在windows下面的目录符号是\你用的是/它还是不识别的,所以最好是放在工作目录下面,我们一边都是在unix下面使用的,不会存在这个问题,用路径应该也是可以的,只是在windows下面没有尝试过,就不做评论了
发表于 2013-8-7 11:50:12 | 显示全部楼层
把后缀改为dat试试
发表于 2013-8-7 13:49:31 | 显示全部楼层
fopen的用法

try:    file=$fopen("x://../../memory.txt","w");

注意斜杠!!!
发表于 2013-8-8 12:17:11 | 显示全部楼层
读入的文件后缀名是.dat
发表于 2013-8-11 00:03:55 | 显示全部楼层
还是版主细心。。。。这个斜杆是关键
发表于 2019-3-29 09:24:45 | 显示全部楼层
我遇到了相似的问题,发现Quartus中ROM核的参数配置下,有一个HEX文件的路径选择,这个文件路径应当是反斜杠\隔开的,否则modelSIM提示打不开这个HEX文件。谢谢分享!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 13:40 , Processed in 0.026013 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表