Diamond软件的使用--(4)搭建Modelsim仿真库

使用Modelsim仿真的原因

由于diamond自带的仿真软件Active-HDL需要另一套Lisence,所以我们使用第三方仿真软件Modelsim来进行仿真。

Modelsim10.5下载链接如下:https://pan.baidu.com/s/1G9699ocWm1UTqK2yS2igyQ 提取码:lewa

一、Lattice仿真文件

1)库文件路径

LATTICE仿真模型文件位于安装目录下simulation文件夹

X盘:\diamond\3.13\cae_library\simulation

在编译以前,一定要确认需要仿真的顶层文件是verilog还是VHDL。如果是verilog文件,那么需要编译的库文件的路径为:X:…\cae_library\simulation\verilog

 Verilog文件夹中是Verolig 器件库文件

 blackbox文件夹中是PCS, JTAG, systemBUS等黑盒子的库文件,已经是编译好的库了,需要使用的话 直接在modelsim中映射到新建库即可。

2) 库文件说明

在这verilog文件夹下,分别有不同的芯片库文件和pmi库文件。

pmi文件夹中的文件,主要为一些ip core的仿真库,如PLL、FIFO、RAM等,这些都是直接能看到IP仿真库内部如何调用底层原语的。

由于我的使用环境都是以verilog为主,生成IP核时都是用的verilog格式,所以以下内容都是只以verilog文件夹为例。

二、编译Modelsim

1) 新建编译后的库文件夹

2) 更改Modelsim工作路径

打开Modelsim软件

点击“file ‐‐>Change Directory” 然后设置好需要建 真库的路 立仿真库的路径。比如“X:\modelsim\Simulation_Lib\Lattice” .然后确定。

3) 建立新的仿真库

File->NEW->library 新建一个仿真库填你建的仿真库名称

由于我使用的是Lattice ECP3的芯片,所以偷懒直接命名为“ecp3&pmi”,

新建仿真库后会在该路径下生成ecp3&pmi文件夹。

4) 编译特定的仿真库

点击工具栏上的“Compile” ,然后在打开的对话框中设置目标库以及需要编译的仿真模型文件。

由于我使用的芯片是ECP3,所以只需要编译verilog文件夹下ecp3(基本元器件库)即可。

6) 设置初始化文件

安装好后,打开Modelsim安装目录,在modelsim根目录下找到“modelsim.ini”文件,右键点击属性,然后去掉只读属性,确定并退出。

7) 设置路径库路径

打开modelsim.ini文件,会发现有一行:ecp3&pmi = ecp3&pmi,修改这一行为:

ovi_ecp3 = X:/X/modelsim/Simulation_Lib/Lattice/ecp3&pmi

其功能为指定仿真库的路径。修改完成后保存退出,并添加modelsim.ini的只读属性,防止错误修改。

PS:为什么名称是ovi_ecp3 ?

为了和Diamond软件中调用的库名统一,后续调用更方便

三、通过Modelsim仿真PLL工程

1)新建工程(略)

module pll_test(
input	sys_clk,
input	rst_n
);pll_125 pll_125 (.CLK(sys_clk ), .CLKOP(clk_50), .LOCK( )
);endmodule

`timescale 1ns / 1psmodule    pll_test_tb();reg                                        sys_clk                    ;reg                                        rst_n                      ;
GSR GSR_INST(.GSR(1'b1));
PUR PUR_INST(.PUR(1'b1));initialbegin#2                                             rst_n = 0   ;                          sys_clk = 0     ;                          #10                                            rst_n = 1   ;                          end                                                parameter   CLK_FREQ = 125;//Mhz                       always # ( 1000/CLK_FREQ/2 ) sys_clk = ~sys_clk ;              pll_test u_pll_test(.sys_clk(sys_clk),  .rst_n(rst_n)
);endmodule                                                  

2)设置PLL IP核

3)在Modelsim中建立仿真工程

4)观察仿真波形

PS:在编写testbench的时候需要添加一下两段代码:

GSR GSR_INST(.GSR(1'b1));
PUR PUR_INST(.PUR(1'b1));

这是因为有些LATTICE 的PMI IP核中使用了DIAMOND的全局GSR_INST 变量 ,其实还有一个PUR_INST变量。这时由于仿真不具有这个全局变量 我们就在顶层文件的模块中添加上面两段代码。

四、Diamond联合Modelsim仿真(略)

有空再写

五、仿真PCS(略)

对于ECP2M,ECP3这几个系列的器件来说PCS的仿真库都是已经编译好的,库文件形式存在于“x\cae_library\simulation\blackbox\pcsd_work”这个文件夹中,只需要将对应的库映射到想要的库文件存放地址,然后在modelsim.ini文件中设置好即可。如果您没有可能用到ECP2M,ECP3,SC这些器件或者是这些器件的SERDES功能,那么需要做好库的映射。

 

参考来源

以下内容主要参考自两个来源

如何在 Modelsim SE中建立LATTICE仿真库 PPT

作者 Jason Chen@weikeng.com.cn

以及

Lattice Diamond与modelsim联合仿真环境设置 作者IceyP庚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年4月19日,四月第三周,C++,字符串数组答案解析

答案与解析 1. 输出字符串数组所有元素 cpp 复制 下载 #include <iostream> using namespace std;int main() {string arr[] = {"apple", "banana", "cherry"};int n = sizeof(arr)/sizeof(arr[0]); // 计算数组长度for (int i = 0; …

C语言之高校学生信息快速查询系统的实现

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之高校学生信息快速查询系统的实现 目录 任务陈述与分析 问题陈述问题分析 数据结构设…

【网络篇】TCP vs UDP底层区别+网络编程概念

大家好呀 我是浪前 今天讲解的是网络篇的第三章&#xff1a;网络编程概念和TCP&UDP的区别 网络编程概念TCP和UDP的区别 跨主机通信:网络编程插座&#xff1a;网络编程的本质&#xff1a; 网络编程的重要概念&#xff1a;客户端和服务器&#xff1a; 客户端和服务器的交互模…

EMIF详解

一、EMIF的基本定义 EMIF&#xff08;External Memory Interface&#xff0c;外部存储器接口&#xff09; 是嵌入式处理器&#xff08;如DSP、FPGA、SoC&#xff09;用于连接外部存储器的专用硬件接口模块&#xff0c;负责管理处理器与存储器之间的地址/数据总线、控制信号及时…

Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly

问题与处理策略 问题描述 ..\..\User\stm32f1xx_it.c(141): warning: #223-D: function "HAL_IncTick" declared implicitlyHAL_IncTick(); ..\..\User\stm32f1xx_it.c: 1 warning, 0 errors问题原因 在 stm32f1xx_it.c 文件中调用了 HAL_IncTick()&#xff0c;但…

Java Web项目(一)

框架 java web项目总工分为两部分&#xff1a;客户端&#xff08;前端&#xff09;和服务端&#xff08;后端&#xff09; 客户端发起请求&#xff0c;服务端接受请求并进行处理 发起请求的方式&#xff1a;from表单、jQuery ajax from表单 造成全局的变化&#xff0c;在发…

Dify部署内网时遇到的代理问题及解决办法

大家知道&#xff0c;在公网环境下利用docker安装dify源码镜像比较容易&#xff0c;详见我之前的文章&#xff0c;基于dify开发agent、workflow等非常方便&#xff0c;本次想着在内部网络环境下也完成部署&#xff0c;以方便更多的人使用&#xff0c;但在部署到内网环境下&…

多节点监控的docker管理面板Portainer安装指南:家庭云计算专家

背景 Portainer 是一个轻量级且功能强大的容器管理面板&#xff0c;专为 Docker 和 Kubernetes 环境设计。它通过直观的 Web 界面简化了容器的部署、管理和监控&#xff0c;即使是非技术用户也能轻松上手。Portainer 支持多节点管理&#xff0c;允许用户从一个中央控制台管理多…

Linux内核哈希表学习笔记

前沿 近期项目中需要给自定义的驱动增加一个功能存储相关的数据信息。结合实际业务层面,最终决定采用哈希表的结构来存储。因为其具备快速查找,插入和删除。其实现原理通过散列函数映射到指定位置。时间复杂度O(1).而且运算速度也快,很适合处理大量的数据场景。但是其也有一…

对于在线教育或知识付费类网站视频处理方案

一、视频格式&#xff1a; 1. 推荐格式&#xff1a;HLS&#xff08;HTTP Live Streaming&#xff09; 优势‌&#xff1a; ‌自适应码率‌&#xff1a;根据用户网络状况自动切换清晰度&#xff0c;避免卡顿。‌广泛兼容性‌&#xff1a;iOS/macOS 原生支持&#xff0c;Android…

Deepseek输出的内容如何直接转化为word文件?

我们有时候会直接利用deepseek翻译别人的文章或者想将deepseek输出的内容直接复制到word文档里。但是文本格式和word是不对应的。这时候需要输入如下命令&#xff1a; 以上翻译内容的格式和排版要求如下&#xff1a; 1、一级标题 字体为黑体&#xff08;三号&#xff09;&…

【Vue】组件通信(Props/Emit、EventBus、Provide/Inject)

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Vue 文章目录 1. Props/Emit 父子组件通信1.1 Props 向下传递数据1.2 Emit 向上传递事件 2. EventBus 跨组件通信2.1 创建事件总线2.2 使用事件总线2.3 EventBus 优缺点 3. Provide/Inject 深层组件通信3.1 基本使用3.2 响应式处…

vulnhub sunset系列靶机合集(部分)

描述&#xff1a;该合集包含sunset系列适合新手的四个靶机&#xff08;sunset:1、dusk、sunrise、noontide&#xff09;的渗透全过程。 靶机下载地址&#xff1a;Vulnerable By Design - Search: sunset ~ VulnHubhttps://www.vulnhub.com/?qsunset sunset:1 渗透过程 信息…

【MySQL】MySQL的基础语法及其语句的介绍

1、基础语法 mysql -h【主机名】 -u【用户名】 -p //登录MySQL exit或quit; //退出MySQL show database; //查看MySQL下的所有数据库 use 【数据库名】; //进入数据库 show tables; //查看数据库下的所有表名 *MySQL的启动和关闭 &am…

2025-4-20-C++ 学习 数组(1)

数组 2025-4-20-C++ 学习 数组(1)P1428 小鱼比可爱题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1说明/提示题解代码P1427 小鱼的数字游戏题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1说明/提示数据规模与约定题解代码P5727 【深基5.例3】冰雹猜想题目描…

ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(显示输出类外设之LCD)

目录 ESP-ADF外设子系统深度解析&#xff1a;esp_peripherals组件架构与核心设计&#xff08;显示输出类外设之LCD&#xff09;简介模块概述功能定义架构位置核心特性 LCD外设分析LCD外设概述LCD外设层次架构图 LCD外设API和数据结构外设层API公共API内部数据结构 LCD外设配置选…

面试题:循环引用两个节点相互引用,如何判断哪个用 shared_ptr?哪个用 weak_ptr?

目录 1.引言 2.原理 3.所有权模型与指针选择 4.复杂场景的决策策略 5.注意事项 6.总结 1.引言 当两个对象通过 shared_ptr 相互引用时&#xff0c;会产生循环引用问题&#xff0c;导致内存泄漏。因为这两个对象的引用计数永远不会变为 0&#xff0c;即使它们在程序的其他…

QT聊天项目DAY06

1.从git上同步项目 编译测试&#xff0c;编译通过 Post请求测试 测试成功 2. email is 打印有问题&#xff0c;检查 解析结果是存储在jsonResult中的&#xff0c;修改 3. 客户端实现Post验证码请求 3.1 同步Qt客户端项目 检查QT版本&#xff0c;由于我在公司用的还是QT5.12.9…

PHP腾讯云人脸核身获取FaceId

参考腾讯云官方文档&#xff1a; 人脸核身 合作方后台上传身份信息_腾讯云 前提&#xff1a;已经获取了SIGN Ticket。获取参考文档&#xff1a; PHP腾讯云人脸核身获取SIGN Ticket-CSDN博客 public function getTxFaceId($uid,$name,$idNo){$appId ;$userId $uid;$nonce …

用 Deepseek 写的uniapp油耗计算器

下面是一个基于 Uniapp 的油耗计算器实现&#xff0c;包含 Vue 组件和页面代码。 1. 创建页面文件 在 pages 目录下创建 fuel-calculator 页面&#xff1a; <!-- pages/fuel-calculator/fuel-calculator.vue --> <template><view class"container"…