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

Modelsim 使用教程(4)—— Working With Multiple Libraries

一、概述

        在文中,我们将练习使用多个库。在实际的项目开发过程中,我们可能有多个库来组织设计,从第三方源代码访问IP,或者在仿真之间共享公共部分。我们将通过创建一个包含计数器设计单元的资源库来开始本文。接下来,我们将创建一个项目,并将测试台编译到其中。最后,我们将链接到包含计数器的库,然后运行模拟。

 二、设计文件及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    

三、创建资源库(Creating the Resource Library)

        在创建资源库之前,请确保安装目录中的modelsim.ini是“只读”。这将防止将资源库永久映射到modelsim.ini文件中。

3.1 为资源库创建一个目录

        创建一个名为 resource_library 的新目录,把counter.v文件复制到这个目录下。

3.2 为 test bench 创建一个目录

        创建一个名为 testbench 的新目录,该目录用来保存test bench和项目文件。把 tcounter.v 复制到这个目录下。

        在本文中我们创建了两个目录,以模拟从第三方接收资源库的情况。如前所述,我们将链接到第一个目录中的资源库。

3.3 打开modelsim 并把目录设置到 resource_library。

3.4 创建资源库

        选择 File > New > Library ,设置如下:

        单击“确定”后,ModelSim将为库创建一个目录,在库窗口中列出它,并修改modelsim.ini文件以将来记录这个新库。 

3.5 将 counter.v 编译到资源库中

        点击编译按键:

        从库的列表中选择parts_lib库

 

        选择counter.v文件进行编译,选中后点击compile,完成后点击Done。

3.6 将目录切换到testcounter 

四、创建项目(Creating the Project)

        现在我们将创建一个包含有 tcounter.v 的项目

        1、创建项目:File > New > Project,项目名称设置为counter,请确保选择了“Copy Library Mappings”。将使用默认的modelsim.ini文件,点击OK。

        2、 把 test bench 加载到项目中,点击 Add Existing File ,添加后结果如下:

        3、编译test bench

五、没有链接库的情况( Loading Without Linking Libraries)

        要想实现本文的最终目标,我们需要链接到自己创建的资源库,我们会在后面的部分实现这一目标,但是现在我们先来试一下不链接到库的情况。这里我们以verilog的情况为例展开。

        我们通过 vpot 命令进行优化:

vopt +acc test_counter -o testcounter_opt

        得到了如下的结果,显示counter模块未定义。 

        我们输入 quit -sim 以退出仿真。

六、链接到资源库(Linking to the Resource Library)

        链接到资源库需要你在调用仿真器时指定一个“搜索库”。 

1、在主界面点击仿真按键

2、单击工作库旁边的“+”图标,选择test_cecter,选择不优化

3、选择libraries,点击add > browse找到part_libs目录,进行添加,结果如下:

 

4、点击OK。最终结果如下:

        至此我们就可以正常进行仿真分析了。

http://www.lryc.cn/news/216703.html

相关文章:

  • 【重要】浏览器输入地址提示【您的连接不是私密连接】解决方法
  • ESP-07S烧写固件记录
  • 网络编程中关于UDP套接字的一些知识点
  • 淘宝商品评论API接口(评论内容|日期|买家昵称|追评内容|评论图片|评论视频..)
  • 计算机网络 第五章传输层
  • cartographer,ros,路径规划近两年的工作笔记
  • react 生命周期讲解
  • 什么是TCY油封?
  • 【Vue.js】使用Element入门搭建登入注册界面axios中GET请求与POST请求跨域问题
  • Apache Hive
  • [idea]关于idea开发乱码的配置
  • 比较一个结构分割平面的两种方式
  • 学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理
  • AITO问界崛起的“临门一脚”,落在了赛力斯汽车的智慧工厂里
  • 影视企业有哪些方式将视频文件快速海外跨国传输国内?
  • Android原生分享与指定app分享
  • ActiveMQ是什么?-九五小庞
  • <蓝桥杯软件赛>零基础备赛20周--第4周--杂题-1
  • Telnet/ssh/Serial远程工具WindTerm
  • 电脑技巧:台式机噪音非常大的几个原因以及解决办法
  • C++名称空间
  • Centos7扩容
  • react中ref的使用(useRef,forwardRef,useImperativeHandle,createRef)
  • 正点原子嵌入式linux驱动开发——Linux USB驱动
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • 【kafka】记一次kafka基于linux的原生命令的使用
  • C语言或C++结构体及其变量的创建方式汇总
  • mysql之基础语句
  • Sentinel 哨兵数据 更新下载地址 2023年11月
  • 动态路由协议OSPF项目部署(二)