目录

  • 引言
  • 仿真算法
  • 仿真过程
    • NC Verilog全编译仿真
    • NC Verilog特点
  • NC内部文件结构
  • NC Verilog使用

引言

完成RTL代码后需要仿真确定代码功能正确性,需要用到仿真工具,本篇就以Cadence的NC Verilog为例来介绍一下RTL仿真的基础知识。

关键词:NC-Verilog RTL仿真

仿真算法

主要有三种仿真算法:

  • 基于时间的(SPICE仿真器)
    基于时间的算法用于处理连续的时间及变量,在每一个时间点对所有电路元件进行计算。
    问题是效率低,因为在一个时间点只有约2~10%的电路活动
  • 基于事件的(Verilog-XL和NC Verilog仿真器)
    基于事件的算法处理离散的时间、状态和变量,只有电路状态发生变化时才进行处理,只模拟哪些可能引起电路状态改变的元件。仿真器响应输入引脚上的事件,并将值在电路中向前传播。这是应用最为广泛的仿真算法,效率比较高,所谓“evaluate when necessary”。
  • 基于周期的(cycle)
    基于周期的仿真以时钟周期为处理单位(与时间无关),只在时钟边沿进行计算,不管时钟周期内的时序。使用两值逻辑 (1, 0) ,只关心电路功能而不关心时序。对于大型设计效率较高,但是仅适用于同步电路。

基于事件的仿真会构造一个时轮(time wheel):


其特点如下:

  • 仿真器在编译数据结构时建立一个事件队列。
  • 只有当前时间片中所有事件都处理完成后,时间才能向前。
  • 仿真从时间0开始,而且时轮只能向前推进。只有时间0的事件处理完后才能进入下一时片。
  • 在同一个时间片内发生的事件在硬件上是并行的
  • 理论上时间片可以无限。但实际上受硬件及软件的限制。

仿真过程

Verilog仿真分下列步骤:

  1. 编译
    -读入设计描述,处理编译指导(compiler directive),建立一个数据结构定义设计的层次结构
    -这一步有时分为两步:compilation,elaboration
  2. 初始化
    -参数初始化;没有驱动的Net缺省值为Z;其它节点初始值为X。这些值延着设计层次传播。
  3. 仿真
    -刚开始时间为0时,仿真器将initial和always中的语句执行一次,遇到有时序控制时停止。这些赋值可产生在时间0或其后时间的事件。
    -随着时间推进,被调度事件的执行引起更多的调度事件,直至仿真结束。

NC Verilog全编译仿真

NC Verilog是全编译仿真器,它直接将Verilog代码编译为机器码执行。其过程为:

  1. ncvlog编译Verilog源文件,按照编译指导(compile directive)检查语义及语法,产生中间数据。
  2. ncelab按照设计指示构造设计的数据结构,产生可执行代码。除非对优化进行限制,否则源代码中的元件(element)可能被优化丢失。描述设计并且生成仿真的snapshot。
  3. ncsim启动仿真核。核调入设计的数据结构,构造事件序列(时轮),调度并执行事件的机器码。有些事件可能消失(从不执行)除非限制优化过程。对snapshot进行仿真。

NC Verilog仿真器用同一个核(kernel)对所有抽象级进行混合仿真,也就是说用户可以采用各种不同抽象级混合设计。但在门级仿真的效率差一些。
NC Verilog仿真器对源代码采用增量编译方式,减少了编译时间。
当重新启动仿真时,要对修改过的模块重新编译。省略这个手工过程的方法是直接对设计进行仿真,这将自动地对修改过的模块进行重新编译。
当采用交互模式时,可以使用Tcl命令和针对NC Verilog的Tcl扩展命令来修改设计和控制仿真。

NC Verilog特点

NC Verilog为编译的元件及其它文件建立一个库结构。增量编译依赖于源文件、SDF文件和命令行参数。

  • 除+gui、-q和-s这些只影响运行时间的参数外,其它任何命令行参数的改变将使设计重新编译、elaborate及仿真。
  • 如果更新了源文件及仿真时用到的SDF文件,则与它们相关的文件将重新编译,设计也将重新elaborate和仿真。

ncverilog还有其它一些命令行参数,如

  • 在调试时有完全的读、写及连接操作,用
    +access + argument
    ncverilog –f run.f + access+RWC
    使用+access选项可以设置对所有对象的缺省操作。对象的缺省设置是无操作。用+access+<args>打开操作,+access-<args>关掉操作。args可以是R、W、C的任何组合。
  • 要得到源文件行操作能力,用+linedebug
    ncverilog -f run.f +linedebug
    使用+linedebug可以打开R、W、C,同时可对源文件行进行操作,如在行上设置一断点。
  • 强制重编译所有设计单元,使用+noupdate
    使用+noupdate强制重编译整个设计。缺省时只重新编译修改过的文件。只有当库可能被破坏时才这样做。
  • +gui选项启动图形界面;-q选项抑制标识信息;-s选项使仿真器在时间0时停止,进入交互模式。

NC内部文件结构

  1. 源文件
  2. 工作库文件
  3. 配置文件:
  4. 仿真结果输出文件

注:本节图片来自博主「ty_xiumud」的原创文章,原文链接:https://blog.csdn.net/qq_41467882/article/details/105870579

NC Verilog使用

关于NC Verilog的使用教程,博主「耐心的小黑」的文章进行了详细介绍,链接:https://blog.csdn.net/qq_39507748/article/details/109143848

注:本篇参考了北大于敦山老师课件,特别感谢。

NC-Verilog仿真相关推荐

  1. linux 下nc-verilog 仿真环境搭建,Cadence NC Verilog仿真教程

    这个手册将向你介绍使用 NC-Verilog simulator 和 SimVision. 本文使用的是一个用 Veilog 硬件编程语言编写的一个饮料分配机,通过这个例 子你将学会:  ·编译 Ve ...

  2. 搭建 Verilog 仿真环境

    搭建 Verilog 仿真环境 对于 Verilog 的初学者,有一个仿真环境是必要的.这就好比是刚开始接触 C 语言,连 C 语言的开发环境都没有,怎么学习 C 语言呢,难道靠大脑模拟运行吗? 本文 ...

  3. Linux下Verilog仿真过程(二)

    上一篇Linux下Verilog仿真过程(一)已经介绍了Verilog基本仿真问题 只不过仿真结果输出只是简单输出,不是很形象. 下面看一下"gui(图形用户界面)"的仿真结果. ...

  4. (150)System Verilog仿真结束机制

    (150)System Verilog仿真结束机制 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog仿真结束机制 5)结语 1.2 FP ...

  5. 轻量版verilog仿真平台:icarus verilog使用简介

    作为一名系统软件工程师,需要对verilog语言有一定的了解,学习verilog过程中免不了要进行仿真.工程上常见的verilog仿真软件基本就是国外EDA三大厂的:Mentor公司的ModelSim ...

  6. FPGA系统性学习笔记连载_Day15【状态机、自动售货机】 【原理及verilog仿真】篇

    FPGA系统性学习笔记连载_Day15[状态机.自动售货机] [原理及verilog仿真]篇 本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主. 连载&l ...

  7. Verilog初级教程(23)Verilog仿真中的显示任务

    文章目录 前言 正文 Display/Write Tasks Verilog Strobes Verilog Continuous Monitors Verilog Format Specifiers ...

  8. verilog仿真——$test$plusargs 和 $value$plusargs

    VERILOG的参数可以用define和parameter的方式定义,这种方法要求我们在编译前将变量必须定义好,编译完成之后再也不能修改: 然而,有时候我们在进行仿真时,需要从外部传递参数,这个要求怎 ...

  9. 【Chips】如何启动第一个Quartus/Vivado下的Verilog仿真过程

    1 如何让Quartus和Modelsim实现联动仿真 Quartus中新建一个工程,注意,Simulator设置为Modelsim. 如果你的工程已经建好了,可以通过[Assinment -> ...

  10. verilog仿真读取十进制数据的方法

    在verilog语法书中,在仿真的时候要读取文件中的内容,我们常看到的是这两个系统任务: $readmemh("数据文件名","存储器名","起始地址 ...

最新文章

  1. 用 eclipse SVN 插件共享项目
  2. 根据ip查经纬度软件_f.lux - 必须推荐给大家的开源免费的护眼软件
  3. Python 数据结构之栈的实现
  4. 分布式——ACID原则 CAP理论
  5. linux服务器下降,linux - 远程升级Ubuntu:如何最大程度地降低丢失服务器的风险? - Ubuntu问答...
  6. 计算机网络在我国的发展,04. 当前现状ISP典型架构 计算机网络在我国的发展
  7. 项目管理的三大目标即时间、成本和质量
  8. 微赞dataconfig.php,php生成微信jssdk wx.config参数,调用js接口
  9. JSK-135 数字加1【大数】
  10. Git和SourceTree配合使用
  11. 07-SNAP处理Sentinel-1 IW GRD数据
  12. 方差缩减——分层抽样
  13. 【译】3D打印:介绍
  14. 【编译原理·总复习】第二章||文法语言||语法树||最左最右推导归约||句柄直接短语||例题+知识点
  15. MCE公司:表观遗传研究指导肿瘤个性化治疗
  16. 【uni-app】解决iPhone X “刘海屏”兼容性问题
  17. 雪花css样式,css雪花动画
  18. python-清华大学镜像源
  19. LayoutInflater深度解析,学习方式分享
  20. python写所有大写、小写、大小写、字母

热门文章

  1. azkaban上传zip报错:Error Chunking during uploading files to db
  2. 固态装linux,Linux下安装SSD固态卡
  3. keil MDK AC5向AC6迁移后如何重定向printf
  4. 对图片进行剪切,保留原始比例
  5. 人脸识别会被留底吗_人脸识别会保存我们的照片吗?
  6. 移动应用开发技术选择六要素
  7. 根据经纬度调用Google地图显示对应位置
  8. python3的open函数中newline_newline不适用于python 2.7
  9. 阿里邮箱备份,引发的小小插曲--2018年6月21日
  10. 职称计算机初级应知应会书,职称计算机考试用书