当前位置: 首页 > news >正文

Modelsim 使用教程(3)——Projects

目录

一、概述

二、设计文件及tb

2.1 设计文件 counter.v

2.2 仿真文件 tcounter.v

三、操作流程

3.1 Create a New Project(创建一个新的工程)

3.2 Add Objects to the Project(把代码加入项目)        

3.3 Compile the Design(编译设计)

3.4 Optimize for Design Visibility(优化设计可见性)

3.5 Load the Design(加载设计) 

3.6 Organizing Projects with Folders(用文件夹组织项目)

3.6.1 Adding Folders(添加文件夹)

3.6.2 Moving Files to Folders(把文件移动到文件夹中)

3.7 Using Simulation Configurations(使用仿真配置)

四、总结 


一、概述

        在本文中,我们将练习创建一个项目。项目至少包含一个存储在.mpf文件中的工作库和一个会话状态。一个项目也可以包括:

  • HDL源文件或对源文件的引用
  • 其他文件,如README或其他项目文档
  • 本地库
  • 对全局库的引用

二、设计文件及tb

2.1 设计文件 counter.v

// Copyright 1991-2014 Mentor Graphics Corporation
//
// All Rights Reserved.
//
// THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF 
// MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
//   `timescale 1ns / 1ns
module counter (count, clk, reset);
output [7:0] count;
input clk, reset;reg [7:0] count;
parameter tpd_reset_to_count = 3;
parameter tpd_clk_to_count   = 2;function [7:0] increment;
input [7:0] val;
reg [3:0] i;
reg carry;beginincrement = val;carry = 1'b1;/* * Exit this loop when carry == zero, OR all bits processed */ for (i = 4'b0; ((carry == 4'b1) && (i <= 7));  i = i+ 4'b1)beginincrement[i] = val[i] ^ carry;carry = val[i] & carry;endend       
endfunctionalways @ (posedge clk or posedge reset)if (reset)count = #tpd_reset_to_count 8'h00;elsecount <= #tpd_clk_to_count increment(count);
/***************************************************************** 
Use the following block to make the design synthesizable.
always @ (posedge clk or posedge reset)if (reset)count = 8'h00;elsecount <= count + 8'h01;
******************************************************************/
endmodule

2.2 仿真文件 tcounter.v

//
// Copyright 1991-2014 Mentor Graphics Corporation
//
// All Rights Reserved.
//
// THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF 
// MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
//   `timescale 1ns / 1ns
module test_counter;reg clk, reset;
wire [7:0] count;counter dut (count, clk, reset);initial // Clock generatorbeginclk = 0;forever #10 clk = !clk;endinitial	// Test stimulusbeginreset = 0;#5 reset = 1;#4 reset = 0;endinitial$monitor($stime,, reset,, clk,,, count); endmodule    

三、操作流程

3.1 Create a New Project(创建一个新的工程)

        我们将通过定义项目设置来开始创建一个新项目的过程。

1、创建一个新的目录,并将本文的设计文件复制到其中

2、打开Modelsim

3、创建新project。 

(1)选择File > New > Project

        这将打开“创建项目”对话框,您可以在其中输入项目名称、项目位置(即目录)和默认库名称。您还可以从选定的.ini文件中引用库设置,或将它们直接复制到项目中。默认库是编译的设计单元所在的位置。 

(2)设置 Project 名称为 test

(3)点击Browse来设定Project Location,选择项目存储的地点

(4)保留默认库名称设置为work

(5)点击OK

3.2 Add Objects to the Project(把代码加入项目)        

        点击OK后,将出现一个空白的项目窗口和“将项目添加到项目”对话框。

        在对话框中,您可以创建新的设计文件、添加现有文件、添加组织文件夹,或创建模拟配置(下面讨论)。

 1、选择Add Existing File

        把我们的两个文件 counter.v 和 tcounter.v 加载进来

3.3 Compile the Design(编译设计)

1、编译文件

(1)选择Compile > Compile All,ModelSim将编译这两个文件,并将“状态”列中的符号更改为绿色复选标记。复选标记表示编译成功。如果编译失败,该符号将是一个红色的“X”,您将在文本窗口中看到一个错误消息。

2、查看设计单元

3.4 Optimize for Design Visibility(优化设计可见性)

        设计优化有助于减少仿真时间。

1、使用vopt命令优化设计,使所有设计单元完全可见。

vopt +acc test_counter -o testcounter_opt

3.5 Load the Design(加载设计) 

1、加载test_counter.v文件

使用如下命令

vsim testcounter_opt

        此时,你通常会像上一课那样运行仿真、分析或调试你的设计。现在,您将继续处理该项目。但是,首先需要结束加载test_counter时开始的仿真。

2、结束仿真

        选择Simulate > End Simulation 

3.6 Organizing Projects with Folders(用文件夹组织项目)

        如果你有很多文件要添加到一个项目中,那么你可能希望将它们组织在文件夹中。你可以在添加文件之前或之后创建文件夹。

        如果在添加文件之前创建文件夹,则可以指定添加文件时要放置文件的文件夹(参见下图中的文件夹字段)。

        如果在添加文件后创建了文件夹,则编辑文件属性将其移动到该文件夹。

3.6.1 Adding Folders(添加文件夹)

1、添加一个新文件夹

        在project窗口右击选择Add to Project > Folder

2、添加一个子文件夹

        在project窗口右击选择Add to Project > Folder,文件夹命名为HDL,在Folder Location 选择时选择Design Files作为顶层。

3.6.2 Moving Files to Folders(把文件移动到文件夹中)

         把两个文件都移动到我们新创建的文件夹中,右击文件(例:counter.v),选择 Properties,修改配置如下(修改Place in Floder):

        用这样的方式把两个文件都放到我们新创建的文件夹中。

        所选的文件将被移动到HDL文件夹中。单击HDL文件夹旁边的“+”图标以查看这些文件。这些文件现在被标记为“?”因为你移动了文件。该项目不再知道以前的编译是否仍然有效。

3.7 Using Simulation Configurations(使用仿真配置)

        仿真配置将设计单元及其仿真选项关联起来。例如,假设每次加载tcounter.v时,都要将仿真器频率分辨率设置为皮秒(ps),并启用事件危险检查。通常,每次加载设计时都必须指定这些选项。使用仿真配置,您可以为设计指定选项,然后保存一个与设计及其选项关联起来的“配置”。然后在“project”窗口中列出配置,您可以双击它来加载tcounter.v及其选项。

1、创建一个新的仿真配置

        在“project”窗口中右键单击并进行选择 Add to Project > Simulation Configuration

         这将打开“添加模拟配置”对话框。此对话框中的选项卡中显示了几个模拟选项。您可能想要探索这些选项卡看看有什么是可用的。您可以查阅ModelSim用户手册,以获得每个选项的描述。

        完成配置修改如下:

 

 

        重新编译一下两个.v文件

2、加载仿真配置 

         在project界面下双击counter仿真配置文件

        在主窗口的文字记录窗口中,vsim(ModelSim模拟器)调用显示了-hazards和-t ps开关。这些是在仿真对话框中指定的命令行选项。 

        接下来就可以进行我们想要进行的项目仿真分析了,这里不过多赘述。

四、总结 

        本文中,我们介绍了在Modelsim里对于完整项目进行仿真的过程,介绍了如何在Modelsim创建工程,添加源代码,编译设计,优化设计,通过文件夹来组织设计以及仿真配置的相关内容。

相关文章:

Modelsim 使用教程(3)——Projects

目录 一、概述 二、设计文件及tb 2.1 设计文件 counter.v 2.2 仿真文件 tcounter.v 三、操作流程 3.1 Create a New Project&#xff08;创建一个新的工程&#xff09; 3.2 Add Objects to the Project&#xff08;把代码加入项目&#xff09; 3.3 Compile the …...

pytorch复现3_GoogLenet

背景&#xff1a; GoogLeNeta是2014年提出的一种全新的深度学习结构&#xff0c;在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果&#xff0c;但层数的增加会带来很多负作用&#xff0c;比如overfit、梯度消失、梯度爆炸等。GoogLeNet通过引入i…...

CH09_重新组织数据

拆分变量&#xff08;Split Variable&#xff09; 曾用名&#xff1a;移除对参数的赋值&#xff08;Remove Assignments to Parameters&#xff09; 曾用名&#xff1a;分解临时变量&#xff08;Split Temp&#xff09; let temp 2 * (height width); console.log(temp); t…...

最新 IntelliJ IDEA 旗舰版和社区版下载安装教程(图解)

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

优化 FPGA HLS 设计

优化 FPGA HLS 设计 用工具用 C 生成 RTL 的代码基本不可读。以下是如何在不更改任何 RTL 的情况下提高设计性能。 介绍 高级设计能够以简洁的方式捕获设计&#xff0c;从而减少错误并更容易调试。然而&#xff0c;经常出现的问题是性能权衡。在高度复杂的 FPGA 设计中实现高性…...

LVGL库入门 01 - 样式

一、LVGL样式概述 1、创建样式 在 LVGL 中&#xff0c;样式都是以对象的方式存在&#xff0c;一个对象可以描述一种样式。每个控件都可以独立添加样式&#xff0c;创建的样式之间互不影响。 可以使用 lv_style_t 类型创建一个样式并初始化&#xff1a; static lv_style_t s…...

酷克数据出席永洪科技用户大会 携手驱动商业智能升级

10月27日&#xff0c;第7届永洪科技全国用户大会在北京召开。酷克数据作为国内云原生数仓代表企业&#xff0c;受邀出席本次大会&#xff0c;全面展示了云数仓领域最新前沿技术&#xff0c;并进行主题演讲。 携手合作 助力企业释放数据价值 数据仓库是商业智能&#xff08;BI…...

英语教育目标转变:更加注重实际应用能力培养

今年九月份,北京市教委发布了《关于深入推进高中阶段学校考试招生改革的实施意见》。按照该意见,北京市2024年初三年级学生的初中学业水平考试英语科目听力口语考试与笔试将分离,首次计算机考试将于2023年12月17日进行。 根据《意见》规定,听力口语计算机考试共有两次考试机会…...

Java中的继承和多态

目录 1. 继承 1.1 为什么需要继承 1.2 继承概念 1.3 继承的语法 1.4 父类成员访问 1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法 1.5 super关键字 1.6 子类构造方法 1.7 super和this 1.8 再谈初始化 1.9 protected 关键字 1.10 继承方式…...

海外问卷调查现在还可以做吗?

可以做&#xff0c;海外问卷调查是一个稳定长期的互联网创业项目。 大家好&#xff0c;我是橙河&#xff0c;这篇文章讲一讲海外问卷调查现在还可以做吗&#xff1f; 海外问卷调查&#xff0c;简单来说&#xff0c;就是外国的商业公司对外发放的付费调查问卷&#xff0c;按照…...

CA证书与服务器证书

服务器证书和CA证书是网络通信中使用的两种重要的证书。服务器证书是用于验证服务器身份的证书&#xff0c;而CA证书是用于验证证书颁发机构(Certificate Authority)身份的证书。 服务器证书是由网站服务器申请并由CA机构颁发的。它包含了服务器的公钥和其他相关信息&#xff…...

AI智能语音识别模块(二)——基于Arduino的语音控制MP3播放器

文章目录 简介离线语音控制模块Mini MP3模块0.96寸 OLED模块实验准备安装库接线定义主要程序实验效果注意事项总结 简介 在前面一篇文章里我们对AI智能语音识别模块进行了介绍&#xff0c;并对离线语音模组下载固件的过程进行了一个简单描述&#xff0c;不知道大家还记不记得&…...

CentOS部署Minikube

基本介绍 Minikube是本地的Kubernetes&#xff0c;专注于使其易于为Kubernete学习和开发。 官方地址&#xff1a;https://minikube.sigs.k8s.io/docs/start/ 部署安装 # CentOS 7.6# 前置条件&#xff1a;安装好Docker或其他容器引擎或虚拟机 参见《CentOS一键部署Docker》…...

第5章_排序与分页

文章目录 1 排序数据1.1 排序规则1.2 单列排序1.3 多列排序排序演示代码 2 分页2.1 背景2.2 实现规则2.3 拓展分页演示代码 3 课后练习 1 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 …...

Elasticsearch实战:常见错误及详细解决方案

Elasticsearch实战&#xff1a;常见错误及详细解决方案 1.read_only_allow_delete":“true” 当我们在向某个索引添加一条数据的时候&#xff0c;可能&#xff08;极少情况&#xff09;会碰到下面的报错&#xff1a; {"error": {"root_cause": [{&…...

C#添加缓存,删除缓存,修改缓存

在C#中&#xff0c;可以使用内置的缓存功能或者使用第三方缓存库来管理缓存。下面分别介绍使用内置缓存功能和使用第三方缓存库的方法。 使用内置缓存功能&#xff1a; 添加缓存&#xff1a; 在C#中&#xff0c;可以使用MemoryCache类来添加缓存。以下是一个简单的示例&…...

PADS Router的操作页面及鼠标指令介绍

PADS Router的用户界面由菜单栏&#xff0c;工作界面&#xff0c;一般工具栏&#xff0c;状态栏&#xff0c;项目浏览器组&#xff0c;输出窗口&#xff0c;电子表格组成&#xff08;图1&#xff09;&#xff1a; 图1 注意&#xff1a;如果你的界面没有显示项目浏览器&#xff…...

Android studio进入手机调试状态

首先usb插入电脑手机打开开发者模式进入点击就会在你的页面显示了...

《Pytorch新手入门》第二节-动手搭建神经网络

《Pytorch新手入门》第二节-动手搭建神经网络 一、神经网络介绍二、使用torch.nn搭建神经网络2.1 定义网络2.2 torch.autograd.Variable2.3 损失函数与反向传播2.4 优化器torch.optim 三、实战-实现图像分类(CIFAR-10数据集)3.1 CIFAR-10数据集加载与预处理3.2 定义网络结构3.3…...

C++ 模板学习笔记

C另外一种编程成为 泛型编程 &#xff0c;主要利用的技术就是模板 C提供两种模板机制&#xff1a;函数模板和类模板 C11中&#xff0c;函数模板和类模板都可以设定默认参数&#xff0c;传送门 函数模板 一般 typename 和 class 没有区别&#xff0c;typename 还有个作用是使…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...