大跃进之FPGA--新手使用modelsim,仿真ep1c3内部M4K建立的rom失败
接触FPGA一个月了,开始学习也有3个星期看的夏宇闻老师的“Verilog的数字系统设计教程”第二版,使用的SF-EP1C的简易开发板,具体芯片是EP1C3
这几天也写了流水灯,分频器,数码管显示之类的练习代码,今天使用芯片内部的M4K配置了个单口ROM,也用mif文件写入了数据,下到板子上能读出rom数据,运行正常
然后就想试试testbench仿真一下,给了激励信号,程序里有个二分频输出,仿真波形正常
M4K配置的单口ROM仿真读出来的数据全是0
软件 quratus 11 仿真modelsim-altera
仿真M4K是否需要什么特殊设置 FPGA的关注度果然很低……
问题还没解决,努力中 信息不够详细,没法帮到你。 仿真要用hex文件 Nuker 发表于 2012-6-14 23:35 static/image/common/back.gif
信息不够详细,没法帮到你。
新手,请见谅
//-----------------------
代码很简单,如下
module pulse (clk, rst_n, addr, pulse_out ,dout);
input clk,rst_n;
input addr;
output pulse_out;
outputdout;
//=====================================
reg pulse_out;
//-------------------------------------
//对时钟二分频,输出测试波形
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
pulse_out <= 0;
else
pulse_out <= ~pulse_out;
end
//-------------------------------------
//M4K-ROM 16位宽,32字节
m4k_rom sheet(
.address(addr),
.clock(clk),
.q(dout)
);
endmodule
测试代码如下
`timescale 1 ns/ 1 ps
module pulse_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg addr;
reg clk;
reg rst_n;
// wires
wire dout;
wire pulse_out;
// assign statements (if any)
pulse i1 (
// port map - connection between master ports and signals/registers
.addr(addr),
.clk(clk),
.dout(dout),
.pulse_out(pulse_out),
.rst_n(rst_n)
);
//--------------------------------
initial
begin
//$display("Running testbench");
clk = 0;
forever
#5 clk = ~clk;
end
//--------------------------------
reg cnt;
initial
begin
rst_n = 0;
addr = 0;
cnt = 5'b11111;
#1000;
rst_n = 1;
while(cnt)
begin
#55;
cnt = cnt-1'b1;
#1;
addr = cnt;
end
$stop;
end
是不是没有编译altera的库? McuPlayer 发表于 2012-6-15 08:34 static/image/common/back.gif
是不是没有编译altera的库?
我是在quartus设置好直接调用modelsim-altera,单独使用modelsim还在看help
流程应该没有问题,问题是你的ROM有指定.mif文件初始化吗? Nuker 发表于 2012-6-15 10:23 static/image/common/back.gif
流程应该没有问题,问题是你的ROM有指定.mif文件初始化吗?
rom已经指定了mif文件,并且手动输入了数据,下载到板子上也是正确的
不知道仿真的时候是否需要特殊设置 最好将你的整个工程发上来,帮你看看。 Nuker 发表于 2012-6-15 10:28 static/image/common/back.gif
最好将你的整个工程发上来,帮你看看。
谢谢
使用的Q11.1
再给你说或一遍 仿真要用hex文件 chenguanglu 发表于 2012-6-15 10:51 static/image/common/back.gif
再给你说或一遍 仿真要用hex文件
是指对应rom数据的hex文件吗,我刚把mif文件存为hex文件,编译仿真还是老样子,这个hex文件的加载时要单独设置吗 编译后看hex文件格式还对吗把hex文件往modelsim仿真目录下拷一份
chenguanglu 发表于 2012-6-15 11:41 static/image/common/back.gif
编译后看hex文件格式还对吗把hex文件往modelsim仿真目录下拷一份
hex格式
:02000000FA0AFA
:02000100640891
:02000200C8062E
:020003003208C1
:02000400FA0AF6
:0200050064088D
:02000600C8062A
:02000700320ABB
:02000800FA0AF2
……
看了一下,数据是对的,仿真目录下是有的
在modelsim中查看是指memory list吗,这里看到的数据都是0
那我也没办法了 本帖最后由 Flyback 于 2012-6-15 15:22 编辑
chenguanglu 发表于 2012-6-15 12:05 static/image/common/back.gif
那我也没办法了
文字无法表达我的感激之情{:titter:} {:titter:} {:titter:}
感谢ls各位的帮助
按照各位的提示,确定是modelsim没有读到hex数值
之前生成的封装文件我命名是m4k_rom.v
hex文件名是rom.hex
刚刚把hex的文件名修改为m4k_rom.hex
然后就奇迹般地出现数据了……
//-------------------------分割线--------------------------
仿真成功的原因不是由于文件名修改相同,原因暂时不明,楼下等高手讲解 我认为问题出现在这里
# ** Warning: (vsim-3534) - Failed to open file "./src/rom.mif" for reading.
# No such file or directory. (errno = ENOENT) : d:/altera/11.1/modelsim_ase/win32aloem/../altera/verilog/src/altera_mf.v(187)
# Time: 0 psIteration: 0Instance: /pulse_vlg_tst/i1/sheet/altsyncram_component
# ERROR: cannot read ./src/rom.mif.
而你的两个rom.mif在以下位置(相对于modelsim运行目录而言):
../../src/rom.mif
./rom.mif
而./src/rom.mif是你在生成ROM IP的时候指定的(m4k_rom.v第120&133行)。 仿真的时候调用的参数在第84行:
altsyncram_component.init_file = "./src/rom.mif",
将这行改为
altsyncram_component.init_file = "../../src/rom.mif",
即可仿真,并不一定需要hex格式,理论上hex/bin/mif格式都应该支持的。
本帖最后由 Flyback 于 2012-6-15 15:29 编辑
Nuker 发表于 2012-6-15 14:55 static/image/common/back.gif
而./src/rom.mif是你在生成ROM IP的时候指定的(m4k_rom.v第120&133行)。
刚刚看了下,果然是这样
我在使用megawizard的时候指定mif文件选择后file name 是./src/rom.mif,这时仿真是找不到数据的
但是我瞎捣鼓一阵后,退出又指定mif文件时file name 是./rom.mif,这时仿真就正常了 对,所以,看warring和error信息很重要。
以上出错信息是在你modelsim目录下msim_transcript文件里看到的,在你modelsim的transcript窗口同时也显示出来的。 刚刚写程序的时候,无意中发现加载mif文件,路径有时是./src/rom.mif,有时是./rom.mif的原因了
quartus默认相对路径是对于工程文件的位置的,工程文件和src文件夹在一个目录下,所以加载mif文件时,路径为./src/rom.mif
当我打开src文件夹下的文件,或者做其他对src文件夹下的操作后,默认路径就跟着变了,这时候加载的话,路径就变成./rom.mif
MARK,保留一下,恐怕以后会用到。 注意MODELSIM 仿真只支持HEX文件哦
页:
[1]