数字系统设计基础主讲:谢跃雷(讲师)Verilog部分介绍VerilogHDL,内容包括:Verilog应用Verilog语言的构成元素结构级描述及仿真行为级描述及仿真延时的特点及说明介绍Verilogtestbench激励和控制和描述结果的产生及验证任务task及函数function用户定义的基本单元(primitive)可综合的Verilog描述风格第一讲VerilogHDL数字系统设计综述Verilog概述结构化设计方法Verilog建模硬件描述语言HDL:描述电路硬件及时序的一种编程语言仿真器:读入HDL并进行解释及执行的一种软件抽象级:描述风格的详细程度,如行为级和门级ASIC:专用集成电路(ApplicationSpecificIntegratedCircuit)ASICVender:芯片制造商,开发并提供单元库自下而上的设计流程:一种先构建底层单元,然后由底层单元构造更大的系统的设计方法。自顶向下的设计流程:一种设计方法,先用高抽象级构造系统,然后再设计下层单元RTL级:寄存器传输级(RegisterTransferLevel),用于设计的可综合的一种抽象级Tcl:ToolcommandLanguage,向交互程序输入命令的描述语言术语定义(termsanddefinitions)VerilogHDL是在1983年由GDA(GateWayDesignAutomation)公司的PhilMoorby所创。PhiMoorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。在1984~1985年间,Moorby设计出了第一个Verilog-XL的仿真器。1986年,Moorby提出了用于快速门级仿真的XL算法。1990年,Cadence公司收购了GDA公司1991年,Cadence公司公开发表Verilog语言,成立了OVI(OpenVerilogInternational)组织来负责VerilogHDL语言的发展。1995年制定了VerilogHDL的IEEE标准,即IEEE1364。2005年制定了verilogHDL的IEEE新标准,又称SystemverilogV3.1标准.1.Verilog的历史1.1Verilog概述2.Verilog与VHDL两者的区别:VHDL侧重于系统级描述,从而更多的为系统级设计人员所采用Verilog侧重于电路级描述,从而更多的为电路级设计人员所采用目前,设计者使用Verilog和VHDL的情况美国:Verilog:80%,VHDL:20%台湾:Verilog:50%,VHDL:50%中国的微电子设计公司,90%以上采用Verilog,对于从事FPGA开发设计者,掌握Verilog或VHDL都可以,对于ASIC设计者,必须掌握Verilog,掌握VHDL。3.VerilogHDL与C语言虽然Verilog的某些语法与C语言接近,但存在本质上的区别Verilog是一种硬件语言,最终是为了产生实际的硬件电路或对硬件电路进行仿真C语言是一种软件语言,是控制硬件来实现某些功能利用Verilog编程时,要时刻记得Verilog是硬件语言,要时刻将Verilog与硬件电路对应起来SystemVerilogandSystemC:面向SOC4.Verilog的用途Verilog的主要应用包括:ASIC和FPGA工程师编写可综合的RTL代码高抽象级系统仿真进行系统结构开发测试工程师用于编写各种层次的测试程序用于ASIC和FPGA单元或更高层次的模块的模型开发1.数字IC设计层次与verilog描述抽象层次时序单位基本单元电路的功能描述系统级数据处理进程及通信自然语言描述或者相互通信的进程算法级运算步运算的控制行为有限状态机、数据流图、控制流图寄存器变换级(RTL)时钟周期寄存器、运算、变换布尔方程、二元决策图、有限状态机逻辑门级延时逻辑门、器件(晶体管)原理图电路级物理时间晶体管、R,L,C等电压、电流的微分方程物理(版图)级几何图形前端后端1.2结构化设计方法Verilog既是一种行为描述的语言也是一种结构描述语言。Verilog模型可以是实际电路的不同层次的抽象,一般分为四个抽象级:系统说明/行为级-设计文档/算术描述RTL/功能级-Verilog门级/结构级-Verilog版图/物理级-几何图形行为综合综合前仿真逻辑综合综合后仿真版图Verilog设计在抽象级上需要进行折衷系统说明/行为级-设计文档/算术描述RTL/功能级-Verilog门级/结构级-Verilog版图/物理级-几何图形详细程度低高输入/仿真速度高低一个设计可以用任何层次来表示,当设计从上而下进行时,该设计就逐步接近物理实现,在表示上就更少了一些抽象。但一个设计所需的细节会随着它在层次中的下降而增加。细节不充分会造成不精确的结果,过多的细节则会使该层次的设计复杂。Verilog可以在3个抽象级上建模n+n+SGD+版图级电路级逻辑门级RTL级系统级和算法级行为描述(Behavior)数据流描述(DataFlow)结构描述(Structure)混合描述||++行为级用功能块之间的数据流对系统进行描述在需要时在函数块之间进行调度赋值。RTL级/功能级用功能块内部或功能块之间的数据流和控制信号描述系统基于一个已定义的时钟的周期来定义系统模型结构级/门级用基本单元(primitive)或低层元件(component)的连接来描述系统以得到更高的精确性,特别是时序方面。在综合时用特定工艺和低层元件将RTL描述映射到门级网表抽象级(LevelsofAbstraction)描述选取设计工程师在不同的设计阶段采用不同的抽象级首先在行为级描述各功能块,以降低描述难度,提高仿真速度。在综合前将各功能模块进行RTL级描述。用于综合的库中的大多数单元采用结构级描述。在本教程中的结构级描述部分将对结构级(门级)描述进行更详细的说明。Verilog还有一定的晶体管级描述能力及算法级描述能力2.自顶向下(Top-Down)的结构化设计方法一个系统由总设计师先进行系统描述,将系统划分为若干模块,编写模块模型(一般为行为级),仿真验证后,再把这些模块分配给下一层的设计师,由他们完成模块的具体设计,而总设计师负责各模块的接口定义顶层模块子模块1子模块2子模块3基本单元基本单元基本单元基本单元基本单元基本单元(1).相对独立、功能单一的模块结构结构化设计的基本思想是将系统设计成由多个相对独立、功能单一的模块组成的结构。由于模块之间相对独立,每一模块就可以单独地被理解、编写、测试、排错和修改,从而可以有效防止错误在模块之间的扩散,提高系统的质量。(2).“块内联系大,块间联系小”的模块性能标准模块内部联系要大,模块之间联系要小,这是结构化设计中衡量模块相对独立性能的标准。事实上,块内联系和块间联系是同一个事物的两个方面。若把联系密切的成分组织在同一模块中,块内系统高了,块间联系自然就少了。(3).采用模块结构图的描述方式结构化设计方法使用的描述方式是模块结构图,即以图形的方式来表达。结构化设计方法特点:(1)分割后最底层的逻辑块应适合用逻辑语言进行表达。如果利用逻辑图作最底层模块输入方法,需要分解到门,触发器和宏模块一级;用HDL行为描述语言则可以分解到算法一级。(2)考虑共享模块。在设计中,往往会出现一些功能相似的逻辑模块,相似的功能应该设计成共享的基本模块,象子程序一样由高层逻辑块调用。这样可以减少需要设计的模块数目、改善设计的结构化特性。(3)接口信号线最少。复杂的接口信号容易引起设计错误,并且给布线带来困难。以交互信号的最少的地方为边界划分模块,用最少的信号线进行信号和数据的交换为最佳的方法。模块划分原则:(4)结构均称。同层次的模块之间,在资源和I/O分配上,不出现悬殊的差异,没有明显的结构和性能上的瓶颈。(5)通用性好,易于移植。模块的划分和设计应满足通用性要求,模块设计应考虑移植的问题。一个好的设计模型块应该可以在其它设计中使用,并且容易升级和移植;另外,在设计中应尽可能避免使用与器件有关的特性,即设计具有可移植性。1.3Verilog建模现在我们将层次建模的概念和verilog联系起来。verilog使用模块(module)的概念来代表一个基本的功能块。模块通过接口(输入和输出)被高层的模块调用,但隐藏了内部的实现细节。这样就使得设计者可以方便地对某个模块进行修改,而不影响设计的其他部分。线。线是器件管脚之间的物理连线;Verilog中用变量wire器件。等同于模块的概念。Verilog中用moduleVerilogHDL的建模实际上就是如何使用HDL语言对数字电路的两种基本要素的特性及相互之间的关系进行描述的过程。在数字电路设计中,数字电路可简单归纳为两种要素:线和器件。verilog中,模块声明由关键字module开始,关键字endmoduIe则必须出现在模块定义的结尾。每个模块必须具有一个模块名,由它惟一地标识这个模块。模块的端口列表则描述这个模块的输入和输出端口。Module模块名(模块端口列表)…………..<模块内容>…………….endmoduIe简单的例子(数据流方式)moduleHalfAdder(A,B,Sum,Carry);inputA,B;outputSum,Carry;assign#2Sum=A^B;assign#5Carry=A&B;endmoduleModule定义了一个模块或一个器件,对模块的描述是任意的,可以是行为描述、数据流描述或结构描述顶层模块子模块1子模块2子模块3基本单元基本单元基本单元基本单元基本单元基本单元moduletop(A,B,,C,D,…);Second_1(……);Second_2(……);Second_3(……);endmodulemodulesecond_1(…);Third_1(……);Third_2(……);endmodulemodulesecond_2(…);Third_3(……);Third_4(……);endmodulemodulesecond_3(…);Third_5(……);Third_6(……);endmodulemoduleThird_1(…);…………..endmodulemoduleThird_2(…);…………..endmodulemoduleThird_3(…);…………..endmodulemoduleThird_4(…);…………..endmodulemoduleThird_5(…);…………..endmodulemoduleThird_6(…);…………..endmodule例设计一个4位二进制脉动进位计数器T’触发器tff0qT’触发器tff1qT’触发器tff2qT’触发器tff2qq0q1q2q3clockresetD触发器D_FFqclockdresetqT’触发器4位二进制脉动进位计数器由4个T‘触发器构成,而很一个T’触发器可由一个D触发器和一个非门构成脉动进位计数器T’触发器tff0T’触发器tff1T’触发器tff2T’触发器tff3D_FF非门D_FF非门D_FF非门D_FF非门moduleripple_carry_counter(q,clk,reset);output[3:0]q;inputclk,reset;T_FFtff0(q[0],clk,reset);T_FFtff1(q[1],q[0],reset);T_FFtff2(q[2],q[1],reset);T_FFtff3(q[3],q[2],reset);endmoduleT’触发器tff0qT’触发器tff1qT’触发器tff2qT’触发器tff2qq0q1q2q3clockresetD触发器D_FFqclockdreset