modelsim常见错误亲自踩坑篇

Modelsim常见错误:

  1. 当modelsim单独测试(并不和任何软件一起联调)带有初始化的ROM或RAM时,初始化文件可以是.hex或.mif(两者均支持,并不需要改变modelsim的任何配置)。但是需注意是:(1)初始化文件必须得放在modelsim工程的根目录下,否则会报Error: Failed to open VHDL file “.mif” in rb mode。(2)虽然xilinx的初始文件是.coe文件,但是在modelsim中必须转换为mif文件或hex文件。(3)在建立ROM和RAM时,建立这两个IP的目录和初始化这两个IP的mif、hex、coe文件目录必须一致,否则会报Error: Failed to open VHDL file “.mif” in rb mode。或者修改IP中该文件的初始化位置也是可以的。

  2. VHDL 中SLA(左移)针对的是bit_vector,不能使用std_logic_vector,否则modelsim会报No feasible entries for infix operator “SLA”。对于除法“/”似乎也不能使用否则modelsim会报No feasible entries for infix operator “/“。等号两边的类型得一致否则modelsim会报No feasible entries for infix operator “=”.

  3. 当仿真PLL等IP核时,会出现没有BUFG、PLL_ADV等时,需要在run.do中添加“simprims_ver”这个库文件(在spartan6中的原语要使用unisims_ver库文件),并且还要添加glbl文件(该文件在D:\SoftWareInstall\Vivado1604\Vivado\2016.4\data\verilog\src目录下)。vsim -L D:/SoftWareInstall/ModelSim1002/vivado_164/simprims_ver -voptargs=\"+acc\" -novopt tb glbl

  4. 当仿真出现多个文件中最小精度(`timescale)不同时,要将run.do文件中vsim语句中-t后面的时间精度改为所有文件的最小精度。

  5. 当设计文件中含有头文件时,用modelsim仿真时需要将该文件放在modelsim工程的目录下。按照自己的习惯,是要仿真sim文件下。

  6. 当仿真中含有rom核时,需要将mif文件放在modelsim工程的目录下。当想要修改rom内容时只需修改mif文件即可,不需要再次生成rom核。

  7. “Error :Bad file format for null “这个错误是由于modelsim工程前后运行所使用的版本不一致造成的。解决方法:将上一个版本产生的中间文件删除掉,之后在使用新的版本进行运行就没有这个问题了。

  8. Vivado编译仿真库时,需要选择modelsim的位置,生成出来的vivado仿真库对应于该modelsim的版本,使用其他版本的modelsim可以会报错(“xxxx is not defined”),即使添加了相应的仿真库也会报错。还有就是目前vivado201803版本使用modelsim10.2c不能正确仿真,使用modelsim10.6以后的版本才可以。

  9. 运行自动化脚本.bat文件(一般只有vsim –do run.do)时,会出现“不是内部命令”。这是因为在系统变量中的path中缺少modelsim的路径。解决办法是:在path中添加modelsim的路径“D:\SoftwareInstall\Modelsim1007\win64”。之后再次双击.bat文件就可以正常运行了。

  10. 在modelsim中将状态机安装字符显示:需要在do文件中添加一下代码

virtual type              {{0x0001 IDLE} {0x0002 IDLE1} {0x0004 IDLE2} {0x0008 WR_ctrl_reg_cmd} {0x0010 WR_data_cmd} {0x0020 WR_data_cmd_IDLE} {0x0040 WR_cmd_reg_cmd} {0x0080 RD_reg_cmd} {0x0100 RD_data_cmd} {0x0200 RD_data_cmd_IDLE} {0x0400 WR_ctrl_reg_cmd_IDLE} {0x0800 WR_cmd_reg_cmd_IDLE} {0x1000 Wait_finish_low} {0x2000 Finish}}  fsm_type1

virtual function {(fsm_type1)/tb/top_inst/ctrl_inst_2/Ctrl_state}  Ctrl_state_2

add wave tb/top_inst/ctrl_inst_2/Ctrl_state_2

其中virtual type中的状态编码和自己代码中的对应起来。Virtual function中Ctrl_state_2是自己定义的名字,这个和add wave中的Ctrl_state_2要一致起来。其中/tb/top_inst/ctrl_inst_2/Ctrl_state是代码例化的顺序。关键的一点是,这几行代码要放在vsim命令的后面。否则modelsim会报错

“# ** Error: parsing expression “” # Null argument refScope”。

未完待续。。。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
匿名用户

匿名