问题
使用IOBUF原语,用modelsim进行功能仿真时没有问题,后仿时出现错误,提示原语在测试文件中未定义
原因
IOBUF是xilinx库里面的东西,modelsim vsim时,没有指定用到的所有的库
解决办法
对比功能仿真时正确的vsim指令
对两个vsim指令进行对比,得出IOBUF的功能是在预编译的 unisims_ver 库里面定义的。
方法1:将unisims_ver 库添加到modelsim后仿的vsim指令中
之前:vsim -L simprims_ver -L secureip -lib work -voptargs=\"+acc\" -t 1ps work.spi_interface_tb3 glbl
修改后:vsim -L simprims_ver -L unisims_ver -L secureip -lib work -voptargs=\"+acc\" -t 1ps work.spi_interface_tb3 glbl
结果:成功打开modelsim仿真界面,运行OK
方法2:测试文件中不使用IOBUF原语,直接写assign,也可以描述三态行为,并且不用调库
举例如下图所示:
备注:测试文件中,最先使用的assign实现的三态门,后来好像有一些问题,才换成了原语
方法3:找出错误vsim指令是在哪个文件中出现的,一般是*.do或者*.dofile文件,在文件中对指令进行修改(该方法未实验)