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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4803|回复: 11

[讨论] Verilog testbench从文件读入数据出错的问题

[复制链接]
发表于 2016-4-25 14:53:23 | 显示全部楼层 |阅读模式

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

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

x
大家好!今天在用verilog写testbench的时候遇到了以下问题:
以下是我写的代码:




  1. initial
  2. begin
  3.    @(posedge clk);
  4.    rx_dv <= 1'b1;
  5.    rxd <= $fopen("rxd1.txt", "r");
  6.    #2000;
  7.    @(posedge clk);
  8.    rxd <= $fopen("rxd2.txt", "r");
  9.    #2000;
  10.    @(posedge clk);
  11.    rxd <= $fopen("rxd3.txt", "r");
  12.    #2000;
  13.    @(posedge clk);
  14.    rxd <= $fopen("rxd4.txt", "r");
  15. end


复制代码


rxd1.txt文件内容:
@
8'b00100100

rxd2.txt文件内容:
@
8'b10101001

rxd3.txt文件内容:
@
8'b10101110

rxd4.txt文件内容:
@
8'b01101011

但是,用questasim仿真后,监控结果如下:
#
#  **** time=             1300000 ****
# OK! txd=  4,rxd=  4
#
#  **** time=             3300000 ****
# OK! txd=  5,rxd=  5
#
#  **** time=             5300000 ****
# OK! txd=  6,rxd=  6
#
#  **** time=             7300000 ****
# OK! txd=  7,rxd=  7

为什么rxd得到的数据和文件中的不一样呢?求解。
发表于 2016-4-25 16:35:57 | 显示全部楼层
回复 1# xcxfly


   initial里面只有打开文件的操作,你在哪儿读文件或者打印信息的呢?
 楼主| 发表于 2016-4-25 16:38:42 | 显示全部楼层
回复 2# harry_hust


   额,初学fopen函数,误以为可以读入。请问可以用fread函数读入吗?
发表于 2016-4-25 17:52:51 | 显示全部楼层
你的目的是什么,要读txt文件里的数到rxd里么?如果是那要用$readmemh("rxd1.txt",rxd)。不过看起来不像,总觉得你这个怪怪的
 楼主| 发表于 2016-4-25 18:27:34 | 显示全部楼层
回复 4# 杰克淡定


   是的,读txt中的数据,赋值给rxd,因为rxd是reg型,不是存储器,所以不能用readmemh
发表于 2016-4-25 18:51:39 | 显示全部楼层
回复 5# xcxfly


   就一个数而已,那你直接把txt文件中的值赋给rxd不就行了,还读啥文件啊
 楼主| 发表于 2016-4-25 19:10:49 | 显示全部楼层
回复 6# 杰克淡定

这只是个例子,真正要跑的工程数据很多,需要从外部读入。
发表于 2016-4-25 19:23:46 | 显示全部楼层
本帖最后由 杰克淡定 于 2016-4-25 19:26 编辑

回复 7# xcxfly


   如果文件中是多个数,你要么先将txt读入mem,然后在clock沿将mem的地址i累加,顺序输出送给rxd,rxd <= #DLY mem;要么将rxd定义为数组, reg [A:0] rxd [B:0] 再来读入。我推断rxd应该只是你的某个信号而已,所以第一种方法才适合你。
发表于 2016-4-26 09:07:25 | 显示全部楼层
本帖最后由 harry_hust 于 2016-4-26 14:04 编辑

回复 1# xcxfly


   $fdisplay和$fread均可,具体你可以百度函数的使用方法。
$readmemh是load数据到ram的,看你怎么使用。
修改个错误,$fdisplay是写文件的,$fscanf是读文件的
发表于 2016-4-26 09:13:25 | 显示全部楼层
integer din;
din <= $fopen("rxd1.txt", "r");
$fscanf(din,"%h",rxd);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


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

GMT+8, 2024-11-14 11:07 , Processed in 0.022259 second(s), 7 queries , Gzip On, Redis On.

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