verilog概述

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.3 Always语句
• Always语句由于其不断的活动性,只有和一定的时序控制 结合在一起才有用。Always类似于一个无限循环,如果一 个always语句没有时序控制,则这个always语句将会使仿 真器产生死锁。这种执行停止的方式只能是断电 ($finish)和中断($stop)。 • 其声明格式如下:always <时序控制> <语句>
Verilog 概述
作者:王顶 单位:集创北方
一、Verilog的基本知识
Verilog HDL (Hardware Description Language) 是一 种硬件描述语言,可以在算法级、门级到开关级的多种抽 象设计层次上对数字系统建模。它可以描述设计的行为特 性、数据流特性、结构组成以及包含响应监控和设计验证 方面的时延和波形产生机制。此外,verilog提供了编程语 言接口,通过该接口用户可以在模拟、验证期间从外部访 问设计,包括模拟的具体控制和运行。 • Verilog 是最佳的寄存器传输级设计语言和门级描述语言, 这是Verilog成功的根本。 • • 下面简单概括下verilog的特点和优势:
• 指定赋值延迟的方法有三种:普通赋值延迟、隐式赋值延 迟和线网声明延迟。 • 普通赋值的延迟值位于关键词assign之后。 • Assign #10 out=int1 &int2; //连续赋值语句中的延迟 • 脉冲宽度小于赋值延迟的输入变化不会对输出产生影响。
• 隐式连续赋值:等效于声明一个线网并且对其进行连续赋 值。 • Wire #10 out = int1&int2; • 等效于: • Wire out; • Assign #10 out = int1&int2; • 线网声明延迟:verilog允许在声明线网时指定一个延迟, 这样对该线网的任何赋值都会被推迟指定的时间 • //线网延迟 • Wire #10 out; • Assign out = int1&int2; • 这条语句等效于上面两条语句。
• (7)能够描述层次设计,可使用模块实例结构描述任何层次. • (8)设计的规模可以是任意的;语言不对设计的规模(大小) 施加任何限制。 • (9)人和机器都可阅读 Verilog 语言,因此它可作为 EDA 的 工具和设计者之间的交互语言。 • (10)设计能够在多个层次上加以描述,从开关级、门级、寄存 器级(RTL)到算法级,包括进程和队列级。 • (11)能够使用内置开关级原语在开关级对设计完整建模。 • (12)同一语言可用于生成模拟激励和指定测试的验证约束条件, 例如输入值的指定。 • (13)对高级编程语言结构,例如条件语句、情况语句和循环语 句,语言中都可以使用。 • (14)可以显式地对并发和定时进行建模,并提供强有力的文件 读写能力。
2.2 模块(module)
用Verilog HDL描述的电路设计就是该电路的模块,模块的 概念代表一个基本的功能块。一个模块可以是一个元件, 也可以是低层次模块的组合。模块通过接口(输入和输出) 被高层的模块调用,但隐藏了内部的实现细节。
2.2ቤተ መጻሕፍቲ ባይዱ1 模块结构
• 1、模块内容是嵌在module和endmodule两个语句之间。每 个模块实现特定的功能,模块可进行层次的嵌套,故可将 大型的数字电路设计分割成大小不一的小模块来实现特定 的功能,最后通过顶层模块调用子模块来实现整体功能, 这就是Top-Down的设计思想。 • 2、模块包括接口描述部分和逻辑功能描述部分。这可以 把模块与器件相类比。模块的内容包括I/O说明,内部信 号,调用模块等的声明语句和功能定义语句。
• Always的时间控制可以是沿触发也可以是电平触发的,可 以单个信号也可以多个信号,中间需要用关键字or或逗号 连接。
• 沿触发的always块常常描述时序行为,如有限状态机;而 电平触发的always块常常用来描述组合逻辑的行为。 • 对于组合逻辑块语句输入变量多的,编写敏感列表会很繁 琐且易出错。那么可用@*和@(*)来代替,它们都表示对 其后面语句块中所有输入变量的变化是敏感的。
• 在Verilog中,用户可以使用三种不同的方法 来说明门的延迟。如果只指定了一个延迟值, 那么对所有类型的延迟都使用这个延迟值;如 果指定两个延迟值则它们分别代表上升延迟、 下降延迟,两者中的小者为关断延迟。如果未 指定延迟值,那么默认延迟值为0.
3.2 最小/典型/最大延迟
• 除上述三种类型的延迟外,对每种类型的延迟还可以指定 其最小值, 最大值和典型值。在建立期间行为模型时要 用到延迟的最小/最大/典型值,因为受到集成电路制造工 艺过程的影响,真实的器件延迟总是在最大值和最小值间 变化。 • 最小值:设计者预期逻辑门所具有的最小延迟。 • 典型值:设计者预期逻辑门所具有的典型延迟。 • 最大值:设计者预期逻辑门所具有的最大延迟。
• (1)基本逻辑门,例如 and、or 和 nand 等都内置在语言 中。 • (2)用户定义原语(UDP)创建的灵活性。用户定义的原语 既可以是组合逻辑原语,也可以是时序逻辑原语。 • (3)开关级基本结构模型,例如 pmos 和 nmos 等也被内 置在语言中。 (4)提供显式语言结构指定设计中的端口到端口的时延及 路径时延和设计的时序检查 • (5)可采用不同方式或混合方式对设计建模。这些方式包 括:行为描述方式建模;数据流方式建模;结构化方式建 模等。 • (6)Verilog HDL 中有两类数据类型:线网数据类型和寄 存器数据类型。线网类型表示构件间的物理连线,而寄存 器类型表示抽象的数据存储元件。
二、层次建模
数字逻辑电路设计者 可利用这种语言来描 述自己的设计思想, 然后利用EDA工具进 行仿真,再自动综合 到门级电路,最后用 ASIC或FPGA实现其 功能。
典型的设计流程
2.1 设计方法学
数字电路设计中有两种基本的设计方法:自底向上和自 顶向下。随着技术的发展,一个芯片往往集成了几十万 到几百万个器件,传统的自底向上的设计方法已不太现 实。因此,一个设计往往从系统级设计开始,把系统划 分成几个大的基本的功能模块,每个功能模块再按一定 的规则分成下一个层次的基本单元,如此一直划分下去。
五、行为级建模
• 随着设计复杂程度的不断提高,在设计前进行良好的整体 规划变得非常重要。行为级建模对整体结构的评估就是是 建立在硬件所完成的算法之上的,而不是建立在门级结构 或数据流之上的。
• 行为级建模是指采 用对信号行为级的 描述的方法来建模。 在表示方面,类似 数据流的建模方式, 但一般是always块 语句和assign块语句 描述的归为行为级 建模方式。
5.1 结构化过程语句
• Verilog中有两种结构化的过程语句:initial语句和 always语句,它们是行为级建模的两种基本语句。其他所 有的行为语句只能出现在这两种结构化过程语句里。 • 一个程序模块可以有多个initial和always过程块。它们的 说明语句是并行的,在仿真的一开始同时立即开始执行。 Initial只执行一次,而always语句则不断重复活动,但 always语句后跟着的过程块是否运行,则要看它的触发条 件是否满足。 • 每个initial语句和always语句代表一个独立的执行过程, 且这两种语句不能嵌套应用。
2.3 抽象层次及模型类别
• Verilog既是一种行为描述的语言也是一种结构描述的语 言。设计者可以根据设计需要,在每个module内部用以下 4个抽象层次进行描述。 • 1、行为或算法级: Verilog所支持的最高抽象层次,只 注重其实现的算法,不关心其具体的硬件实现细节。 • 2、数据流级:通过说明数据的流程对模块进行描述。关 心数据如何在各个寄存器间流动,以及如何处理这些数据。 • 3、门级:从组成电路的逻辑门及其相互之间的互连关系 的角度来设计模块。 • 4、开关级:描述器件中三极管和储存节点以及它们之间 连接的模型。
2.3.1 寄存器传输级(RTL)
• Verilog允许设计者在一个模块中混合使用多个抽象层次。 在数字电路设计中,术语寄存器传输级描述在很多情况下 是指能够被逻辑综合工具接受的行为级和数据流级的混合 描述。假设一个设计中包含4个模块,分别使用4种不同的 抽象层次对各个模块进行描述。在经过综合工具综合后, 综合结果一般都是门级结构的描述。 • 一般来说,抽象层次越高,设计的灵活性和工艺无关性就 越强;随着抽象层次的降低,灵活性和工艺无关性逐渐变 差,微小的调整可能会导致对设计的多处修改。
2.3.2 逻辑仿真的构成
• 设计完成后,还必须对设计的正确性进行测试。我们可以 对设计模块施加激励,通过检查其输出来检验功能的正确 性。我们称完成测试功能块为激励块。 • 激励块一般称为测试台(test bench),同样可以用 Verilog来描述。 • 激励块idea设计有两种模式。一种是在激励块中调用并直 接驱动设计块。另一种使用激励的模式是在一个虚拟的顶 层模块中调用(实例引用)激励块和设计块。激励块和设 计块之间通过接口进行交互。
但在典型的设计中,这两种方法是混合使用的。设计者首 先根据电路的体系结构定义顶层模块,再确定如何根据功 能将整个设计划分为子模块;与此同时,对底层功能块电 路进行优化设计,并进一步使用这些底层模块来搭建其高 层模块。两者的工作按相反的方向独立地进行,直至某一 中间点会合。 比如,使用自顶向下的方法设计计数器时。首先用T触发 器搭建顶层模块,进一步使用D触发器和反相门来实现T触 发器。在自底向上的设计方法中,使用与门和或门搭建D 触发器,使自底向上和自顶向下的方法在D触发器这个层 次上会合。
5.2 Initial语句
• 如果一个模块中包括若干个initial块,则这些initial块 从仿真0时刻开始并发执行,且每个块的执行时各自独立 的。如果块内又多条行为语句,则需要将这些语句组成一 组,一般使用关键字begin-end将它们组合为一个块语句。
如果在某条语句前面存在延迟#<delay>,那么对这条 initial语句的仿真将会停顿下来,在经过指定的延迟时间 之后再继续执行。 由于initial块语句在整个仿真期间只能执行一次,因此它 一般被用于初始化、信号监视、生成仿真波形等目的。常 用于测试文件和虚拟模块的编写。
四、数据流建模
• 门级建模虽然直观,但对于功能复杂的电路来讲,包含的 逻辑门很多,这时如果使用门级设计不但繁琐而且容易出 错。将设计重点放在功能实现上则可以避免这种情况。数 据流建模就是根据寄存器间的流动和处理过程对电路进行 描述,而不是直接对电路的逻辑门进行实例引用。 • 数据流设计可以使得设计者根据数据流来优化电路,而不 必专注于电路结构的细节。但为了在设计过程中获得最大 的灵活性,设计者也常常将门级、数据流级和行为级的各 种方式结合起来使用。在数字设计领域,RTL通常是指数 据流建模和行为级建模的结合。
三、门级建模
• 当前的数字电路设计, 绝大多数是建立在门 级或更高的抽象层次 上的。在门级抽象层 次上,电路是用表示 门的术语来描述的, 如and,nand,not 等来描述。
3.1 门延迟
• 在实际电路中,任何一个逻辑门都具有延迟。Verilog允 许用户通过门延迟来说明逻辑电路中的延迟。 • 在Verilog门级原语中,有三种从输入到输出的延迟 • 1、上升延迟:在门的输入发生变化的情况下,门的输出 从0,x,z变化为1所需的时间称为上升延迟; • 2、下降延迟:是指门的输出从1,x,z变化为0所需的时间。 • 3、关断延迟:是指门的输出从0,1,x变化为高阻抗z所需的 时间。 • 另外,如果值变化到不确定值x,则所需的时间可以看成 是以上三种延迟值最小的那个。
4.1 连续赋值语句
• 连续赋值时数据流建模的主要语法结构,连续赋值 总是处于有效状态,即任一操作数的变化都会立即 导致对表达式的重新计算。连续赋值语句的左侧值 必须是线网类型的变量或其连接,操作数可以是标 量或向量的线网或寄存器,也可以是函数调用。任 何逻辑功能都能够使用连续赋值语句来完成。
4.2 赋值延迟
相关文档
最新文档