微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog testbench从文件读入数据出错的问题

Verilog testbench从文件读入数据出错的问题

时间:10-02 整理:3721RD 点击:
大家好!今天在用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得到的数据和文件中的不一样呢?求解。



   initial里面只有打开文件的操作,你在哪儿读文件或者打印信息的呢?



   额,初学fopen函数,误以为可以读入。请问可以用fread函数读入吗?

你的目的是什么,要读txt文件里的数到rxd里么?如果是那要用$readmemh("rxd1.txt",rxd)。不过看起来不像,总觉得你这个怪怪的



   是的,读txt中的数据,赋值给rxd,因为rxd是reg型,不是存储器,所以不能用readmemh



   就一个数而已,那你直接把txt文件中的值赋给rxd不就行了,还读啥文件啊


这只是个例子,真正要跑的工程数据很多,需要从外部读入。



   如果文件中是多个数,你要么先将txt读入mem,然后在clock沿将mem的地址i累加,顺序输出送给rxd,rxd <= #DLY mem;要么将rxd定义为数组, reg [A:0] rxd [B:0] 再来读入。我推断rxd应该只是你的某个信号而已,所以第一种方法才适合你。



   $fdisplay和$fread均可,具体你可以百度函数的使用方法。
$readmemh是load数据到ram的,看你怎么使用。
修改个错误,$fdisplay是写文件的,$fscanf是读文件的

integer din;
din <= $fopen("rxd1.txt", "r");
$fscanf(din,"%h",rxd);



   好的,灰常感谢~



   好的,谢谢你啊~

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

网站地图

Top