微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 为什么仿真得不到正确的结果?

为什么仿真得不到正确的结果?

时间:10-02 整理:3721RD 点击:
initial
    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

文件读写都是指针操作,明确这一点就行了。

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

网站地图

Top