在进行仿真时,经常遇到设计代码中需要调用一些标准的库文件,但是在设计的编译列表filelist中却没有相应的库文件,这时为了完成仿真,需要设计人员提供对应的库文件或者库文件所在的路径,然后仿真时将这些库文件或者路径添加到编译命令中,以实现仿真编译的正常进行。这个过程在实际中是通过”-y”和”-v”将对应的这些库文件或者库路径告诉仿真器,这样在编译时仿真器就会在对应的库文件或者库路径下寻找对应的module代码。本文将示例”-y”和”-v”具体如何使用。

1 使用库文件

如果模块中存在对于某个库文件中的某个module的实例化,那么可以通过在编译命令中使用”-v”的方式指定要搜索的库文件。其格式如下:

compile_order -v library_file.v

其中compile_order为仿真器的编译命令,library_file.v为库文件,其中可以包含多个模块,编译时只编译用到的模块。

2 使用库路径

如果在编译的时候,不知道文件夹中到底哪个库文件包含需要的模块,那么这是可以使用”-y”的方式,指定要搜索的文件夹,但是这是需要注意,使用”-y”的同时需要配合使用”+libext+”用于指定要在搜索文件夹中哪些后缀类型的文件中进行搜索。其格式如下:

compile_order -y ./path_name +libext+.v

其中compile_order为仿真器的编译命令,./path_name用于指定要搜索的文件夹的路径(路径名包含要搜索的文件夹名), +libext+.v用于指定要在被搜索文件夹中搜索的文件的后缀,如果要搜索多个后缀可以继续追加”+libext+.v+后缀名”,如果没有后缀可以使用两个”++”连续写即可。

【示例】

示例文件的结构如下图,top_tb中例化了两个模块,分别是t2and和t1xor。t2and在t2.v中,t2.v中还存在另一个模块t2x2and,并且与top_tb.v位于同一个文件夹中。t1xor位于文件夹path中,该path文件夹下还有另外两个文件:t0xor.v和t2xor.v,并且在t1xor例化了t0xor。整体结构如下图所示:

【源代码】

【仿真命令】

注:其中的file.f中仅包含top_tb.v一个文件。

【仿真结果】

通过编译后仿真器分析的电路层次结构我们可以可以看到,只有在top_tb中被调用的模块出现在了设计层次中,没有被调用的并没有出现,即只有被调用的模块被编译到了设计中。同时我们注意到,因为t1xor中例化了t0xor,编译时会自动识别库中本身的层次调用关系,将相关的库文件自动搜索编译,但是需要注意的是这时t1xor和t0xor必须都位于相同的文件夹中。

通过示例我们可以知道,使用-v或-y选项指定库时,编译器将只编译那些设计中用到的模块,这些用到的模块无需再添加到filelist中,这样可以大大压缩编译时间及内存空间,避免了在众多文件或者路径下找模块的问题,将人力工作交由电脑来完成。

【总结】

  • 使用库文件

在命令行中使用选项:-v file_name

  • 使用库目录

在命令行中使用选项 -y directory_name

在命令行中使用选项 +libext+file_extension

  • ”-y”和”-v”在Verilog和SystemVerilog的LRM中并没有出现,但是他们不是某家EDA大厂所特有的,所有的EDA大厂生产的仿真器都支持;
  • ”-y”和”-v”仅适用于Verilog和SystemVerilog的代码;
  • 使用”-y”和”-v”指定库文件和库路径时,只编译那些设计中用到的模块。如果没有使用”-v”,那么库文件中所有的模块都将会被编译;

更多技术内容,可关注下图个人技术微信公众号,欢迎朋友们关注沟通!

【原创】如何通过-y和-v使用库文件的更多相关文章

  1. SharePoint文档库文件夹特殊字符转义

    当我们在SharePoint网站文档库中新建文件夹时包含了~ " # % & * : < > ? / \ { | }字符时(一共15个), 或者以.开头或者结束,或者包含 ...

  2. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  3. 安卓---下拉刷新---上拉加载---解决导入library等自生成库文件失败的问题

    本文的下拉刷新以及上拉加载都是用PullToRefresh实现的,关于PullToRefresh的介绍以及源码,网上可以找到很多,本人在此不再赘述. PullToRefresh是一套实现非常好的下拉刷 ...

  4. 第一百六十一节,封装库--JavaScript,完整封装库文件

    封装库--JavaScript,完整封装库文件 /** *feng_zhuang_ku_1.0版本,js封装库,2016/12/29日:林贵秀 **/ /** 前台调用 * 每次调用$()创建库对象, ...

  5. Linux系统上java调用C++ so库文件

      PART1:     java中使用jna替代jni调用c++/c生成的 dll/so库文件需要做的事项 1.引入JNA依赖或者直接下载JNAjar包           <!-- http ...

  6. gcc编译时头文件和库文件搜索路径

    特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始( ...

  7. golang调用c++的dll库文件

    最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:一.DLL 的编制与具体的编程语言及编译器无关 dll分com的dll和动态dll,Com组件dll:不管是何种语言写的都可以 ...

  8. 向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)

    在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面:    ·Quartus不支持Testbench:    ·调用了megafunction或者lpm库之类的Alte ...

  9. linux web服务器必需的库文件

    往往安装完linux之后,本文用的centos6.4,再编译安装其它服务器软件时,总是提示缺少各种库文件,在这里我总结了一下 平时web服务器经常需要的一些库,如下: yum -y install m ...

随机推荐

  1. 将HLSL射线追踪到Vulkan

    将HLSL射线追踪到Vulkan Bringing HLSL Ray Tracing to Vulkan Vulkan标志 DirectX光线跟踪(DXR)允许您使用光线跟踪而不是传统的光栅化方法渲染 ...

  2. 将DataTable转成Json字符串

    1 public string ToJson(DataTable tbl) 2 { 3 if (tbl.Rows.Count > 0) 4 { 5 DataRowCollection rows ...

  3. 简单测试 APISIX2.6 网关

    Apache APISIX是一个动态的.实时的.高性能的 API 网关.它提供丰富的流量管理功能,例如负载均衡.动态上游服务.金丝雀发布.断路.身份验证.可观察性等.您可以使用 Apache APIS ...

  4. 三、Nginx设置用户认证

    要求:通过nginx服务端配置实现以下目标 访问web页面需要进行用户认证. 用户名为:tom,密码:123456 操作步骤, 更改配置文件 [root@client ~]# vim /usr/loc ...

  5. 【NX二次开发】按层查找工作部件中的对象 UF_LAYER_cycle_by_layer

    第一次调用 :返回第一个启用层中的第一个对象. 第二次调用 :返回下一个已启用层中的下一个对象. 最后一次调用:当所有对象都被耗尽时,将返回object_tag = NULL_TAG. 在循环数据库时 ...

  6. C#关于数据库中存储的用户权限类似 "普通员工,管理员" 如何在代码中读取分析权限

    之前在看某些数据库的用户权限的表时,发现字段是这样类似这样存储的"  普通员工,管理员 ",当时觉得他们是通过分割字符串来分析权限的.后来读到 Liam Wang  的 https ...

  7. 高速数字逻辑电平(8)之LVDS差分信号深度详解

    原文地址点击这里: LVDS(Low-Voltage Differential Signaling ,低电压差分信号)是美国国家半导体(National Semiconductor, NS,现TI)于 ...

  8. 图解 Redis | 不多说了,这就是 RDB 快照

    大家好,我是小林. 虽说 Redis 是内存数据库. 但是它为数据的持久化提供了两个技术,分别是「 AOF 日志和 RDB 快照」. 这两种技术都会用各用一个日志文件来记录信息,但是记录的内容是不同的 ...

  9. .net core Redis消息队列中间件【InitQ】

    前言 这是一篇拖更很久的博客,不知不觉InitQ在nuget下载量已经过15K了,奈何胸无点墨也不晓得怎么写(懒),随便在github上挂了个md,现在好好唠唠如何在redis里使用队列 队列缓存分布 ...

  10. excel用函数去掉单元格内容中的括号,并只保留单元格里面的内容

    1.substitute(需要执行替换操作的单元格,需要替换的字符,替换后的字符,有多个需要替换的字符可以指定替换的第几个) 例如:aab--substitute("aab",&q ...