modelsim仿真使用到vivado的IP,该如何使用!

本文介绍了将Vivado的IP添加到Modelsim中进行仿真的方法。首先要生成ini文件并打包IP,接着处理综合IP与ini的关系,包括修改权限、复制数据和检查IP。然后加入数据,找到并存储IP,添加相关库。最后还提到了避免时钟报错等错误处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

modelsim仿真时,如果使用到了vivado的IP就会报错,本次就告诉大家如何将vivado的IP添加到modelsim中直接仿真。

一、生成ini文件以及IP打包

打开vivado,点击上方的Tools-->Compile Simulation Libraries得到如下界面

simulator:选择相应的仿真器,本次讲解的时modelsim,所以该选什么你们懂的。

language:选择语言,自行判断。

library:一个相关的一个是相关的,也就是你调用的IP是相关的,没有调用的就是不相关的。总之你不理解的话,就选All。

family:选择你所用的板子,同理不知道什么板子的就全选。

compiled library location:选择IP包和ini文件的存储位置(注意:要记清这个位置,而且最好是在modelsim安装的地方)。

simulator executable path:选择modelsim启动程序,找到你modelsim安装的位置里面有win64类似的启动程序。比如我的位置在这里

后面的几个就不解释了,用不到!

勾选的话就选第一个就行,我把第二个也选了是因为我已经生成了,所以需要覆盖一下。

然后点击compile就可以了。那之后就是慢慢等了,大概要个半个多小时的时间。

二、综合IP与ini的关系

1.修改权限

用文本方式打开modelsim安装下的modelsim.ini(后面简称为ini1),同时记得在属性里面修改一下它的权限,把它改为可改写。

2.修改

然后打开,找到library

同时打开我们刚刚生成的ini,也就是上面我让你记住的文件位置。里面也会有一个modelsim.ini(后面就简称为ini2

打开后别弄混淆了哦,两个可是长得很像的,也同样找到相应的位置library位置,将ini2中library下面,到DefineOptionset中间的数据复制到ini1相同的位置(要覆盖里面的library到DefineOptionset)。这一步慢慢看懂看清楚,错了就要重来的喔!

3.检查

弄完之后你就可以检查一下modelsim有没有上面的IP,打开modelsim点开library,就可以看到相应的IP。但还没完,有后续的!

三、加入数据

1.找到IP

打开你vivado生成的程序文件夹,找到你想要仿真的IP,复制 xxx_sim_netlist.v,如果你用的是VHDL你就赋值下面那个。

2.存储IP

将IP粘贴到你的仿真程序文件夹里,再和你的仿真程序一起加到modelsim里(modelsim创建和加入文件应该不需要我交吧,需要的留言,我看看有多少,后面再补充),我用的是FIFO示例

3.加入库

将程序compile之后,点simulate-->start  simulate-->Libraries-->add...

向里面加入以下五个库secureip、simprims_ver、unifast、unifast_ver、unimacro、unimacro_ver、unisim、unisims_ver。这些库在刚刚vivado生成的文件夹里面!加完之后就可以在work里面找到一些数据命名的文件。

然后你就可以点击ok仿真了。

四、错误

在仿真文件里面例化一下glbl,这样可以避免时钟报错,还有modelsim是不支持PS端的仿真,别瞎搞!另外其他报错,就是你需要重新添加一下上面的库,因为重新打开貌似需要重新添加库。还有vivado生成的那些文件不要删除、也不要移动或者改名字,改了那就改回来,要么你就从头开始!

后续有问题就留言吧,或者私聊,觉得有用就动动小手点个赞+收藏+关注,后续会出一些更多有意义的操作。

### 如何在 ModelSim 中添加 Vivado IP 核 为了成功地将来自 VivadoIP 核集成到 ModelSim 进行仿真,需遵循一系列特定的操作步骤来确保两者之间的兼容性和正确设置。 #### 准备工作 确保已安装并配置好 VivadoModelSim 工具环境。对于 FPGA 设计而言,通常会有一个典型的设计流程[^1],其中涉及多个阶段的工作,包括但不限于综合、实现以及最终的比特流生成前的功能验证。 #### 创建和导出 IP 核 当利用 Vivado 开发工具创建所需的 IP 核时,比如 DDR3 控制器或任意类型的 RAM 模块,可以通过 Out-of-Context (OOC) 方式提前对其进行单独编译与优化[^3]。一旦完成了 IP 核的设计及其 OOC 综合过程,则可将其导出以便后续用于其他项目或是不同平台上的测试环境中。 #### 导入ModelSim 并建立连接 为了让 ModelSim 能够识别由 Vivado 所产生的 IP 核文件,在启动 ModelSim 后应按照以下方法操作: - **设定路径**:通过 `vlib` 命令新建一个目标存储位置,并运用 `vmap` 将其映射给指定名称的空间;这一步骤是为了让 ModelSim 知道去哪里查找新加入的组件。 ```bash vlib work vmap my_ip_lib ./path/to/ip_library/ ``` - **编译 Verilog 文件**:采用 `vlog` 或者针对 VHDL 使用相应的命令加载从 Vivado 获取来的源代码及任何关联的支持文档。注意要特别处理那些作为黑箱模块存在的部分,它们可能不需要实际的内容解析而是仅声明接口定义即可。 ```bash vlog -work my_ip_lib path_to_verilog_files/*.v ``` - **实例化顶层实体**:编写一段简单的测试程序用来调用所导入IP 核。这里可以参照官方提供的模板来进行修改调整以适应具体的实验需求。例如,如果是在 Verilog 下面则可能是这样的形式: ```verilog module tb_top; reg clk, rst_n; initial begin $dumpfile("wave.vcd"); $dumpvars(0, tb_top); // Reset sequence rst_n = 0; @(posedge clk); #2 rst_n = 1; // Add your test vectors here // Finish simulation after some time #1000 $finish; end always #5 clk = ~clk; // Instantiate the IP core with appropriate parameters blk_mem_gen_0 uut ( .clka(clk), .ena(1'b1), .wea(1'b0), .addra({addr_width{1'b0}}), // Replace addr_width accordingly .dina('b0), .douta() ); endmodule ``` 上述过程中提到的某些参数如地址宽度 (`addr_width`) 需依据实际情况替换为具体数值。此外,由于直接运行 Vivado 内置仿真的效率较低且存在资源占用过高的风险[^2],因此推荐使用这种方式借助外部更高效的模拟器执行更为复杂的场景分析。 #### 测试与调试 最后便是运行整个工程并对结果进行评估。如果有错误发生,可以根据报错提示逐步排查直至解决问题为止。在整个开发周期里不断迭代改进直至满足预期功能表现。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值