为什么仿真得不到正确的结果?
begin
f = $fopen("rom.txt");
for (i = 0; i < 5; i = i + 1)
begin
$fwrite(f, "%0h\n", i);
end
$readmemh("rom.txt", m_testrom, 0, 4);
end
以上代码实现产生一个ROM文件然后读入到一个定义的存储器中,但是仿真结果是m_testrom中全为未知值。
试一下 m_testrom 改为top.m_testrom,top为testbench name。
试过了,还是不行。而且仿真的时候,如果步进运行没有问题,但是全部运行就会出现:
# ** Warning: (vsim-PLI-3408) Too few data words read on line 1 of file "rom.txt". Expected 4, found 0. : E:/module/tb_test/code/test.v(52)
# Time: 0 ps Iteration: 0 Instance: /tb_test/inst_test
你有没有看rom.txt 是一行一个数据吗?
rom.txt没有问题,因为把:
f = $fopen("rom.txt");
for (i = 0; i < 5; i = i + 1)
begin
$fwrite(f, "%0h\n", i);
end
去掉,仿真就没有问题。
既读又写 这都看不出吗
你写完之后,要close的吧
没有flush吗
多谢楼上同仁的集思广益,确实是需要使用$fclose再读才能实现需要的功能:
f = $fopen("rom.txt");
for (i = 0; i < 5; i = i + 1)
begin
$fwrite(f, "%0h\n", i);
end
$fclose(f);
$readmemh("rom.txt", m_testrom, 0, 4);
end
文件读写都是指针操作,明确这一点就行了。
