数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt

上传人:sccc 文档编号:5011365 上传时间:2023-05-29 格式:PPT 页数:88 大小:540.51KB
返回 下载 相关 举报
数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt_第1页
第1页 / 共88页
数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt_第2页
第2页 / 共88页
数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt_第3页
第3页 / 共88页
数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt_第4页
第4页 / 共88页
数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt》由会员分享,可在线阅读,更多相关《数字集成电路设计入门从HDL到版图于敦山北大微电子学系.ppt(88页珍藏版)》请在三一办公上搜索。

1、数字集成电路设计入门-从HDL到版图于敦山 北大微电子学系,课程内容(一),介绍Verilog HDL,内容包括:Verilog应用Verilog语言的构成元素结构级描述及仿真行为级描述及仿真延时的特点及说明介绍Verilog testbench激励和控制和描述结果的产生及验证任务task及函数function用户定义的基本单元(primitive)可综合的Verilog描述风格,课程内容(二),介绍Cadence Verilog仿真器,内容包括:设计的编译及仿真源库(source libraries)的使用用Verilog-XL命令行界面进行调试用NC Verilog Tcl界面进行调试图形

2、用户界面(GUI)调试延时的计算及反标注(annotation)性能仿真描述如何使用NC Verilog仿真器进行编译及仿真如何将设计环境传送给NC Verilog周期(cycle)仿真,课程内容(三),逻辑综合的介绍 简介 设计对象 静态时序分析(STA)design analyzer环境 可综合的HDL编码风格可综合的Verilog HDLVerilog HDL中的一些窍门 Designware库 综合划分 实验(1),课程内容(四),设计约束(Constraint)设置设计环境 设置设计约束 设计优化 设计编译 FSM的优化 产生并分析报告 实验(2),课程内容(五),自动布局布线工具(

3、Silicon Ensemble)简介,课程安排,共54学时(18)讲课,27学时Verilog(5)Synthesis(3)Place&Route(1)实验,24学时Verilog(5)Synthesis(2)Place&Route(1)考试,3学时,参考书目,Cadence Verilog Language and SimulationVerilog-XL Simulation with SynthesisEnvisia Ambit Synthesis硬件描述语言Verilog 清华大学出版社,Thomas&Moorby,刘明业等译,2001.8,第二章 Verilog 应用,学习内容使用

4、HDL设计的先进性Verilog的主要用途Verilog的历史如何从抽象级(levels of abstraction)理解电路设计Verilog描述,术语定义(terms and definitions),硬件描述语言HDL:描述电路硬件及时序的一种编程语言仿真器:读入HDL并进行解释及执行的一种软件抽象级:描述风格的详细程度,如行为级和门级ASIC:专用集成电路(Application Specific Integrated Circuit)ASIC Vender:芯片制造商,开发并提供单元库自下而上的设计流程:一种先构建底层单元,然后由底层单元构造更大的系统的设计方法。自顶向下的设计流程

5、:一种设计方法,先用高抽象级构造系统,然后再设计下层单元RTL级:寄存器传输级(Register Transfer Level),用于设计的可综合的一种抽象级Tcl:Tool command Language,向交互程序输入命令的描述语言,什么是硬件描述语言HDL,具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言这种特殊结构能够:描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性HDL主要有两种:Verilog和VHDLVerilog起源于C语言,因此非常类似于C语言,容易掌握VHDL起源于ADA语言,格式严谨,不易学习。VHDL出现较晚,但标准化早。

6、IEEE 1706-1985标准。,为什么使用HDL,使用HDL描述设计具有下列优点:设计在高层次进行,与具体实现无关设计开发更加容易早在设计期间就能发现问题能够自动的将高级描述映射到具体工艺实现在具体实现时才做出某些决定HDL具有更大的灵活性可重用可以选择工具及生产厂HDL能够利用先进的软件更快的输入易于管理,Verilog的历史,Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所创。Phi Moorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。在19841985年间,Moorby

7、设计出了第一个Verilog-XL的仿真器。1986年,Moorby提出了用于快速门级仿真的XL算法。1990年,Cadence公司收购了GDA公司1991年,Cadence公司公开发表Verilog语言,成立了OVI(Open Verilog International)组织来负责Verilog HDL语言的发展。1995年制定了Verilog HDL的IEEE标准,即IEEE1364。,Verilog的用途,Verilog的主要应用包括:ASIC和FPGA工程师编写可综合的RTL代码高抽象级系统仿真进行系统结构开发测试工程师用于编写各种层次的测试程序用于ASIC和FPGA单元或更高层次的模

8、块的模型开发,抽象级(Levels of Abstraction),Verilog既是一种行为描述的语言也是一种结构描述语言。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别包括:,系统说明-设计文档/算法描述RTL/功能级-Verilog门级/结构级-Verilog版图/物理级-几何图形,行为综合综合前仿真逻辑综合综合后仿真版图,抽象级(Levels of Abstraction),在抽象级上需要进行折衷,系统说明-设计文档/算术描述RTL/功能级-Verilog门级/结构级-Verilog版图/物理级-几何图形,详细程度 低 高,输入/仿真速度 高 低,抽象级(Levels

9、 of Abstraction),Verilog可以在三种抽象级上进行描述,行为级 用功能块之间的数据流对系统进行描述 在需要时在函数块之间进行调度赋值。RTL级/功能级用功能块内部或功能块之间的数据流和控制信号描述系统基于一个已定义的时钟的周期来定义系统模型结构级/门级用基本单元(primitive)或低层元件(component)的连接来描述系统以得到更高的精确性,特别是时序方面。在综合时用特定工艺和低层元件将RTL描述映射到门级网表,抽象级(Levels of Abstraction),设计工程师在不同的设计阶段采用不同的抽象级首先在行为级描述各功能块,以降低描述难度,提高仿真速度。在综

10、合前将各功能模块进行RTL级描述。用于综合的库中的大多数单元采用结构级描述。在本教程中的结构级描述部分将对结构级(门级)描述进行更详细的说明。Verilog还有一定的晶体管级描述能力及算法级描述能力,行为级和RTL级,MUX的行为可以描述为:只要信号a或b或sel发生变化,如果sel为0则选择a输出;否则选择b输出。,module muxtwo(out,a,b,sel);input a,b,sel;output out;reg out;always(sel or a or b)if(!sel)out=a;else out=b;endmodule,这个行为级RTL描述不处理X和Z状态输入,并且没

11、有延时。在行为级模型中,逻辑功能描述采用高级语言结构,如,while,wait,if,case。Testbench(test fixture)通常采用行为级描述。所有行为级结构在testbench描述中都可以采用。RTL模型中数据流都是基于时钟的。任何时钟元件在时钟沿处的行为都要精确描述。RTL级描述是行为级Verilog的子集。,结构级描述,结构级Verilog适合开发小规模元件,如ASIC和FPGA的单元Verilog内部带有描述基本逻辑功能的基本单元(primitive),如and门。用户可以定义自己的基本单元UDP(User Defined Privitives)综合产生的结果网表通常

12、是结构级的。用户可以用结构级描述粘接(glue)逻辑。下面是MUX的结构级描述,采用Verilog基本单元(门)描述。描述中含有传输延时。,module twomux(out,a,b,sl);input a,b,sl;output out;not u1(nsl,sl);and#1 u2(sela,a,nsl);and#1 u3(selb,b,sl);or#2 u4(out,sela,selb);endmodule,综合不支持!,仅需一种语言,Verilog的一个主要特点是可应用于各种抽象级。建模时可采用门级和RTL级混合描述,在开发testfixture时可以采用行为级描述。,复习,什么是Ve

13、rilog?Verilog是公开的吗?设计时什么时候采用Verilog RTL级描述?Verilog适合做什么样的设计?,解答:Verilog是用于硬件描述的具有时间概念的并行编程语言Verilog是一种公开语言,由OVI负责组织,有IEEE1394标准RTL描述用于综合,或用于必须精确到每个时钟周期的模型的建模。Verilog适用于各种抽象级模型的开发及验证,第三章 Cadence仿真器,学习内容逻辑仿真算法如何启动Verilog-XL和NC Verilog仿真器如何显示波形,仿真算法,主要有三种仿真算法基于时间的(SPICE仿真器)基于事件的(Verilog-XL和NC Verilog仿真

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

15、轮(time wheel),仿真器在编译数据结构时建立一个事件队列。只有当前时间片中所有事件都处理完成后,时间才能向前。仿真从时间0开始,而且时轮只能向前推进。只有时间0的事件处理完后才能进入下一时片。在同一个时间片内发生的事件在硬件上是并行的理论上时间片可以无限。但实际上受硬件及软件的限制。,一个时间片的事件可引起新的事件,在当前时片或以后,时间片timeslice,Cadence Verilog仿真器,Verilog-XL和NC Verilog仿真器都是基于事件算法的仿真器。仿真器读入Verilog HDL描述并进行仿真以反映实际硬件的行为。Verilog-XL和NC Verilog仿真器

16、遵循IEEE 1364 Verilog规范制定的基于事件的调度语义仿真器可用于确定想法的可行性用不同的方法解决设计问题功能验证确定设计错误,仿真过程,Verilog仿真分下列步骤:编译读入设计描述,处理编译指导(compiler directive),建立一个数据结构定义设计的层次结构这一步有时分为两步:compilation,elaboration初始化参数初始化;没有驱动的Net缺省值为Z;其它节点初始值为X。这些值延着设计层次传播。仿真刚开始时间为0时,仿真器将initial和always中的语句执行一次,遇到有时序控制时停止。这些赋值可产生在时间0或其后时间的事件。随着时间推进,被调度

17、事件的执行引起更多的调度事件,直至仿真结束。,Versus 交互式编译仿真器,Verilog-XL是一个交互式仿真器,过程如下:读入Verilog描述,进行语义语法检查,处理编译指导(compiler directive)在内存中将设计编译为中间格式,将所有模块和实例组装成层次结构(设计数据结构)。源代码中的每个元件都被重新表示并能在产生的数据结构 找到。决定仿真的时间精度,在内存中构造一个事件队列的时间数据结构(时轮)。读入、调度并根据事件执行每一个语句,Verilog-XL采用多种加速算法提高各种抽象级的仿真速度。每次重新启动Verilog-XL,将重复上述步骤。当进入交互模式时,可以输入

18、Verilog HDL语句并加到设计的数据结构中。,Versus 交互式编译仿真,Verilog-XL仿真器是与Verilog HDL同时开发的,因此它成为Verilog HDL仿真器的事实上的标准。Verilog-XL采用了多种加速算法,对每种抽象级描述都能很好的仿真。这些加速算法包括Turbo算法,XL算法及Switch-XL算法。在后面的教程中将对这些算法进行更为详尽的介绍。,NC Verilog-全编译仿真,NC Verilog是全编译仿真器,它直接将Verilog代码编译为机器码执行。其过程为:ncvlog编译Verilog源文件,按照编译指导(compile directive)检

19、查语义及语法,产生中间数据。ncelab按照设计指示构造设计的数据结构,产生可执行代码。除非对优化进行限制,否则源代码中的元件(element)可能被优化丢失。产生中间数据。ncsim启动仿真核。核调入设计的数据结构,构造事件序列(时轮),调度并执行事件的机器码。有些事件可能消失(从不执行)除非限制优化过程。,编译后的所有代码的执行使用同一个核。当重新启动仿真时,要对修改过的模块重新编译。省略这个手工过程的方法是直接对设计进行仿真,这将自动地对修改过的模块进行重新编译。当采用交互模式时,可以使用Tcl命令和针对NC Verilog的Tcl扩展命令。,NC Verilog全编译仿真,NC Ver

20、ilog是最近才开发的,但其对描述的仿真与Verilog-XL完全相同NC Verilog仿真器用同一个核(kernel)对所有抽象级进行混合仿真,也就是说用户可以采用各种不同抽象级混合设计。但在门级仿真的效率差一些。NC Verilog仿真器对源代码采用增量编译方式,减少了编译时间。在交互模式下,可以使用Tcl命令及其针对NC Verilog的扩展命令来修改设计和控制仿真。这将在后面进行详细描述。,对Verilog语言的支持,Verilog-XL和NC Verilog计划支持Verilog语言全集。用户可依据下列标准进行设计:IEEE1364-1995 Verilog语言参考手册OVI 2.

21、0 Verilog语言参考手册,但不支持:Attributes:Verilog描述中对象的属性。函数中output或inout变元(argument):OVI2.0允许函数中output和inout变元值能够返回。,启动Verilog-XL,在命令窗口启动Verilog-XL:verilog verilog-xl_options design_files没有option启动的例子 verilog mux.v test.v使用 c选项只对设计进行语法和连接检查 verilog c mux.v test.v使用-f选项指定一个包含命令行参数的文件 verilog f run.f run.f文件的内

22、容Verilog-XL将所有终端输出保存到名为verilog.log的文件,mux.vtest.v-c,启动NC Verilog,虽然NC Verilog仿真过程包括三个分立的步骤(ncvlog,ncelab,ncsim),但仿真时不需要三个命令,可以用带有命令行参数的ncverilog命令启动NC Verilog:ncverilog ncverilog_options verilog-xl_argumentsExamples:ncverilog mux.v test.vncverilog c mux.v test.vncverilog f run.f run.f文件的内容NC Verilog

23、将所有终端输出保存到名为ncverilog.log的文件,mux.vtest.v-c,NC Verilog有什么不同?,除+gui、-q和-s这些只影响运行时间的参数外,其它任何命令行参数的改变将使设计重新编译、elaborate及仿真。如果更新了源文件及仿真时用到的SDF文件,则与它们相关的文件将重新编译,设计也将重新elaborate和仿真。,NC Verilog为编译的元件及其它文件建立一个库结构。增量编译依赖于源文件、SDF文件和命令行参数。,ncverilog还有其它一些命令行参数,如,在调试时有完全的读、写及连接操作,用+access+argument ncverilog f ru

24、n.f+access+RWC要得到源文件行操作能力,用+linedebug ncverilog-f run.f+linedebug强制重编译所有设计单元,使用+noupdate,NC Verilog有什么不同?,使用+access选项可以设置对所有对象的缺省操作。对象的缺省设置是无操作。用+access+打开操作,+access-关掉操作。args可以是R、W、C的任何组合。使用+linedebug可以打开R、W、C,同时可对源文件行进行操作,如在行上设置一断点。使用+noupdate强制重编译整个设计。缺省时只重新编译修改过的文件。只有当库可能被破坏时才这样做。+gui选项启动图形界面;-q

25、选项抑制标识信息;-s选项使仿真器在时间0时停止,进入交互模式。,波形显示工具SignalScan,signalscan&或 signalscan 数据库文件名&,波形显示工具SignalScan,Title Bar:显示这是SignalScan窗口并以数字编号。若启动几个SignalScan窗口它们将顺序编号。Menu Bar:通过菜单可以执行所有基本命令。Tool Bar中的按钮有:copy,cut,paste,undo,delete,zoom,create marker,expand buses,launch the Design Brower等等。用户可以自定义。,在命令行输入sign

26、alscan启动。SignalScan窗口包括:,注:必须用Design Brower在波形窗口中添加信号。,Groups Pane列出用户建立的波形组Waveforms Region显示加入信号的波形Names Pane在波形的左边显示信号名。这些信号名可以拖拽,在pane中双击右键可以移动插入的markerTime-Display Region显示两个指针的时间值及其时间差,SHM:波形数据库,波形显示工具从数据库,如SHM数据库中读取数据。使用下面的系统任务可以对SHM数据库进行操作:,例子:initialbegin$shm_open(“lab.shm”);$shm_probe();en

27、d,SHM:波形数据库,仿真历史管理器(Simulation History Manager,SHM)数据库记录用户的设计在仿真时数据信号的变化。只记录用户要观察(probe)的信号。用户可以用$shm_系统任务打开一个SHM数据库,设置信号探针并将结果保存到数据库中。这些系统任务的功能除$shm_probe外都非常直观。对$shm_probe将在下面详细讨论。用户必须在仿真前(时间0前)设置探针信号才能看到信号在仿真过程中全部变化。,用$shm_probe设置信号探针,在$shm_probe中使用scope/node对作为参数。参数可以使用缺省值或两个参数都设置。例如:$shm_probe(

28、);观测当前范围(scope)所有端口$shm_probe(“A”);观测当前范围所有节点$shm_probe(alu,adder);观测实例alu和adder的所有端口$shm_probe(“S”,top.alu,“AC”);观测:(1):当前范围及其以下所有端口,除库单元(2):top.alu模块及其以下所有节点,包括库单元,用$shm_probe设置信号探针,$shm_probe的语法:$shm_probe(scope0,node0,scope1,node1,.);每个node都是基于前面scope的说明(层次化的)scope参数缺省值为当前范围(scope)。node参数缺省值为指定范

29、围的所有输入、输出及输入输出。,相关工具,Affirma NC VHDL仿真器Envisia Ambit综合工具Verilog-XL故障仿真器,用于评价用户测试向量的有效性SignalScan-TX图形界面调试工具包Affirma equivalence checker完成门级设计之间或门级与RTL级之间的静态功能验证Affirma model checker形式验证工具,将Verilog或VHDL描述与设计说明进行验证Affirma model packager,用户的Verilog,VHDL或C语言可执行模型分发时进行编译及分发许可证Affirma Advanced Analysis En

30、vironment includes CoverScan,a code profiler,and HAL,a lint checker,与Cadence Verilog仿真器相关的工具有:,总结,逻辑仿真运行Verilog-XL和NC Verilog仿真器探测及显示波形,本章学习内容,复习,基于事件的仿真器是如何做到并行的?时间t的事件能否调度同一时间t的事件?NC Verilog仿真器不支持IEEE 1364 Verilog LRM的什么元件?,通过调度在一个给定的时间片内发生的所有事件来得到并行性。实际上仿真器串行处理给定时间片内的事件,但理论上它们都是在同一时间片内发生的。任何时间片的事

31、件能够调度在同一时间片或其以后产生的事件。NC Verilog希望支持IEEE 1364 LRM规范全集。目前主要还不支持实例阵列(array of instances)。请参见产品发布手册。,第四章 设计举例,进一步学习Verilog的结构描述和行为描述Verilog混合(抽象)级仿真,学习目标:,语言的主要特点,module(模块),module能够表示:物理块,如IC或ASIC单元逻辑块,如一个CPU设计的ALU部分整个系统每一个模块的描述从关键词module开始,有一个名称(如SN74LS74,DFF,ALU等等),由关键词endmodule结束。,module是层次化设计的基本构件,

32、逻辑描述放在module内部,语言的主要特点模块端口(module ports),端口在模块名字后的括号中列出,端口可以说明为input,output及inout,端口等价于硬件的引脚(pin),注意模块的名称DFF,端口列表及说明模块通过端口与外部通信,语言的主要特点,模块实例化(module instances),module DFF(d,clk,clr,q,qb);.endmodulemodule REG4(d,clk,clr,q,qb);output 3:0 q,qb;input 3:0 d;input clk,clr;DFF d0(d 0,clk,clr,q 0,qb 0);DFF

33、d1(d 1,clk,clr,q 1,qb 1);DFF d2(d 2,clk,clr,q 2,qb 2);DFF d3(d 3,clk,clr,q 3,qb 3);endmodule,语言的主要特点,可以将模块的实例通过端口连接起来构成一个大的系统或元件。在上面的例子中,REG4有模块DFF的四个实例。注意,每个实例都有自己的名字(d0,d1,d2,d3)。实例名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。实例中端口的次序与模块定义的次序相同。模块实例化与调用程序不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。,模块实例化(module instances),一个完整的

34、简单例子 test fixture,被测试器件DUT是一个二选一多路器。测试装置(test fixture)提供测试激励及验证机制。Test fixture使用行为级描述,DUT采用门级描述。下面将给出Test fixture的描述、DUT的描述及如何进行混合仿真。,DUT 被测器件(device under test),module MUX2_1(out,a,b,sel);/Port declarations output out;input a,b,sel;wire out,a,b,sel;wire sel_,a1,b1;/The netlist not(sel_,sel);and(a1,

35、a,sel_);and(b1,b,sel);or(out,a1,b1);endmodule,注释行,已定义的 Verilog基本单元的实例,a,b,sel是输入端口,out是输出端口。所有信号通过这些端口从模块输入/输出。另一个模块可以通过模块名及端口说明使用多路器。实例化多路器时不需要知道其实现细节。这正是自上而下设计方法的一个重要特点。模块的实现可以是行为级也可以是门级,但并不影响高层次模块对它的使用。,多路器由关键词module和endmodule开始及结束。,Test Fixture template,module testfixture;/Data type declaration/

36、Instantiate modules/Apply stimulus/Display resultsendmodule,为什么没有端口?,由于testfixture是最顶层模块,不会被其它模块实例化。因此不需要有端口。,Test Fixture 如何说明实例,module testfixture;/Data type declaration/Instantiate modules MUX2_1 mux(out,a,b,sel);/Apply stimulus/Display resultsendmodule,多路器实例化语句,MUX的实例化语句包括:模块名字:与引用模块相同 实例名字:任意,但

37、要符合标记命名规则 端口列表:与引用模块的次序相同,Test Fixture 过程(procedural block),所有过程在时间0执行一次过程之间是并行执行的,过程语句有两种:initial:只执行一次 always:循环执行,Test Fixture 过程(procedural block),通常采用过程语句进行行为级描述。test fixture的激励信号在一个过程语句中描述。过程语句的活动与执行是有差别的所有过程在时间0处于活动状态,并根据用户定义的条件等待执行;所有过程并行执行,以描述硬件内在的并行性;,Test fixture 激励描述,module testfixture;/

38、Data type declaration reg a,b,sel;wire out;/MUX instance MUX2_1 mux(out,a,b,sel);/Apply stimulus initial begin a=0;b=1;sel=0;#5 b=0;#5 b=1;sel=1;#5 a=1;#5$finish;end/Display resultsendmodule,Time Values a b sel0 0 1 05 0 0 010 0 1 115 1 1 1,例子中,a,b,sel说明为reg类数据。reg类数据是寄存器类数据信号,在重新赋值前一直保持当前数据。#5 用于指示

39、等待5个时间单位。$finish是结束仿真的系统任务。,Test Fixture 响应产生,$time 系统函数,给出当前仿真时间$monitor 系统任务,若参数列表中的参数值发生变化,则在时间单位末显示参数值。$monitor(“format_specifiers”,);例如:$monitor($time,o,in1,in2);$monitor($time,out,a,b,sel);$monitor($time,“%b%h%d%o”,sig1,sig2,sig3,sig4);,Verilog提供了一些系统任务和系统函数,包括:,注意不能有空格,Test Fixture 响应产生,$time

40、是一个系统函数,返回当前返回仿真时间。时间用64位整数表示。$monitor 在时间单位末,若参数列表中的参数值发生变化则显示所列参数的值。由$time引起的变化不会显示。$monitor系统任务支持不同的数基。缺省数基是十进制。支持的数基还有二进制、八进制、十进制。,完整的Test Fixture,module testfixture;/Data type declaration reg a,b,sel;wire out;/MUX instance MUX2_1 mux(out,a,b,sel);/Apply stimulus initial begin a=0;b=1;sel=0;#5 b

41、=0;#5 b=1;sel=1;#5 a=1;#5$finish;end/Display results initial$monitor($time,out=%b a=%b b=%b sel=%b,out,a,b,sel);endmodule,0 out=0 a=0 b=1 sel=05 out=0 a=0 b=0 sel=010 out=1 a=0 b=1 sel=115 out=1 a=1 b=1 sel=1,结果输出,时间单位末的概念,timescale 1ns/1ns module testfixture;/Data type declaration reg a,b,sel;wire

42、out;/MUX instance MUX2_1 mux(out,a,b,sel);/Apply stimulus initial begin a=0;b=1;sel=0;#5.7 b=0;#5 b=1;sel=1;#5 a=1;#5$finish;end/Display results initial$monitor($time,out=%b a=%b b=%b sel=%b,out,a,b,sel);endmodule,0 out=0 a=0 b=1 sel=06 out=0 a=0 b=0 sel=011 out=1 a=0 b=1 sel=116 out=1 a=1 b=1 sel=1

43、,结果输出,VCD数据库,Verilog提供一系列系统任务用于记录信号值变化保存到标准的VCD(Value Change Dump)格式数据库中。大多数波形显示工具支持VCD格式。,VCD数据库,用户可以用$dump*系统任务打开一个数据库,保存信号并控制信号的保存。除$dumpvars外,其它任务的作用都比较直观。$dumpvars将在后面详细描述。必须首先使用$dumpfile系统任务,并且在一次仿真中只能打开一个VCD数据库。在仿真前(时间0前)必须先指定要观测的波形,这样才能看到信号完整的变化过程。仿真时定期的将数据保存到磁盘是一个好的习惯,万一系统出现问题数据也不会全部丢失。VCD数

44、据库不记录仿真结束时的数据。因此如果希望看到最后一次数据变化后的波形,必须在结束仿真前使用$dumpall。,VCD数据库是仿真过程中数据信号变化的记录。它只记录用户指定的信号。,$dumpvars,$dumpvars(,*);scope可以是层次中的信号,实例或模块。仿真时所有信号必须在同一时间下使用$dumpvars。就是说可以使用多条$dumpvars语句,但必须从同一时间开始。如:initial begin$dumpfile(“verilog.dump”);$dumpvars(0,testfixture.a);#1$dumpvars(0,testfixture.b);end,$dump

45、vars语法:,此语句将引起一个警告信息并被忽略,$dumpvars,$dumpvars;/Dump所有层次的信号$dumpvars(1,top);/Dump top模块中的所有信号$dumpvars(2,top.u1);/Dump实例top.u1及其下一层的信号$dumpvars(0,top.u2,top.u1.u13.q);/Dump top.u2及其以下所有信号,以及信号top.u1.u13.q。$dumpvars(3,top.u2,top.u1);/Dump top.u1和top.u2及其下两层中的所有信号。用下面的代码可以代替前面test fixture的$monitor命令:ini

46、tial begin$dumpfile(“verilog.dump”);$dumpvars(0,testfixture);end,要给$dumpvars提供层次(levels)及范围(scope)参数,例如,复习,Verilog的基本构建模块是什么?是如何构成一个系统的?module怎样与其它模块通信?仿真时两个性质不同的模块是什么?在test fixture中两类不同的过程语句是什么?它们有什么不同?用什么方法能以文本格式显示仿真结果?,module是基本构建单元。在module中实例化另一个module可以构成一个复杂的层次化系统。module之间通过端口的连接进行互相通信两个模块是设计模

47、块和激励模块。设计模块又称为DUT,激励模块又称为testbench或test fixture。测试模块用于设计模块验证在testbench中用到的两类过程语句是initial和always。其不同处是initial只执行一次,而always循环执行。$monitor语句以文本格式显示仿真结果,第五章 Verilog的词汇约定(Lexical convention),理解Verilog中使用的词汇约定认识语言专用标记(tokens)学习timescale,学习内容:,术语及定义,空白符:空格、tabs及换行Identifier:标志符,Verilog中对象(如模块或端口)的名字Lexical:

48、语言中的字或词汇,或与其相关。由其文法(grammar)或语法(syntax)区分。LSB:最低有效位(Lease significant bit)MSB:最高有效位(Most significant bit),空白符和注释,module MUX2_1(out,a,b,sel);/Port declarations output out;input sel,/control input b,/*data inputs*/a;/*The netlist logic selects input”a”when sel=0 and it selects”b”when sel=1.*/not(sel_,

49、sel);and(a1,a,sel_),(b1,b,sel);/What does this line do?or(out,a1,b1);endmodule,格式自由使用空白符提高可读性及代码组织。Verilog忽略空白符除非用于分开其它的语言标记。,多行注释,在/*/内,单行注释到行末结束,整数常量和实数常量,整数的大小可以定义也可以不定义。整数表示为:其中 size:大小,由十进制数表示的位数(bit)表示。缺省为32位 base:数基,可为2(b)、8(o)、10(d)、16(h)进制。缺省为10进制 value:是所选数基内任意有效数字,包括X、Z。实数常量可以用十进制或科学表示法表示

50、。,Verilog中,常量(literals)可是整数也可以是实数,整数常量和实数常量,整数的大小可以定义也可以不定义。整数表示为:数字中(_)忽略,便于查看没有定义大小(size)整数缺省为32位缺省数基为十进制数基(base)和数字(16进制)中的字母无大小写之分当数值value大于指定的大小时,截去高位。如 2b1101表示的是2b01实数常量实数可用科学表示法或十进制表示科学表示法表示方式:,表示:尾数10指数,字符串(string),字符串要在一行中用双引号括起来,也就是不能跨行。字符串中可以使用一些C语言转义(escape)符,如t n可以使用一些C语言格式符(如%b)在仿真时产生

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号