VerilogHDL基本语法

上传人:平*** 文档编号:52752484 上传时间:2018-08-25 格式:PPT 页数:152 大小:1.36MB
返回 下载 相关 举报
VerilogHDL基本语法_第1页
第1页 / 共152页
VerilogHDL基本语法_第2页
第2页 / 共152页
VerilogHDL基本语法_第3页
第3页 / 共152页
VerilogHDL基本语法_第4页
第4页 / 共152页
VerilogHDL基本语法_第5页
第5页 / 共152页
点击查看更多>>
资源描述

《VerilogHDL基本语法》由会员分享,可在线阅读,更多相关《VerilogHDL基本语法(152页珍藏版)》请在金锄头文库上搜索。

1、第4章 Verilog HDL 基本语法,4.1 Verilog 简介 硬件描述语言(Hardware Description Language,HDL)是电子系统硬件 (1)行为描述、 (2)结构描述、 (3)数据流描述的一种语言。,数字电路系统的设计者通过这种语言 a可以从上层到下层,从抽象到具体,逐层次地描述自己的设计思想, b用一系列分层次的模块来表示极其复杂的数字系统, C然后利用模块组合经由自动综合工具转换到门级电路网表, d再用自动布局布线工具把网表转换为具体电路进行布局布线后, e下载到专用集成电路(ASIC)或现场可编程逻辑器件。,4.1.1 Verilog HDL发展过程

2、Verilog HDL语言最初是于1983年由Gateway Design Automation公司为其模拟器产品开发的硬件建模语言。 Verilog 语言于1995年成为IEEE标准,称为IEEE Std 13641995; 2001年又发布了Verilog HDL1363-2001标准; 随即在2005年又发布了System Verilog 1800-2005标准,这一系列标准的制定使得Verilog语言在综合、仿真、验证及IP重用等方面有很大幅度的提高。 Verilog HDL 是System Verilog语言的基础。SystemVerilog结合了来自 Verilog、VHDL、C+

3、的概念,它将硬件描述语言(HDL)与现代的高层级验证语言结合了起来。System Verilog加入了一些C+的元素。近些年在国内Verilog的应用率显著增加,国内绝大多数IC设计公司都采用Verilog HDL。学习Verilog不仅可以对数字电路技术有更进一步的了解,而且可为以后学习高级的行为综合、物理综合、IP设计和复杂系统设计打下坚实的基础。,4.1.2 Verilog HDL 与C语言比较,C语言与Verilog HDL运算符基本相同。而C语言是一种在硬件上运行的语言,而Verilog是描述硬件的语言,要受到具体硬件电路的限制,它们的区别如下:在Verilog HDL中不能使用C语

4、言中很多抽象的表示方法,如迭代表示法、指针(C语言最具特点的语法)、不确定的循环及动态声明等等。 C语言是一行一行地执行,按顺序执行;而Verilog HDL描述的是硬件,可以在同一时间内有很多硬件电路一起并行执行,两者之间有区别。 C语言的输入/输出函数丰富,而Verilog HDL 能用的输入/输出函数很少。 C语言无时间延迟的指定,而Verilog HDL可以指定时间延迟。 C语言中函数的调用是唯一的,每一个都是相同的,可以无限制调用。而Verilog HDL对模块的每一次调用都必须赋予一个不同的别名,虽然调用的是同一模块实例,但不同的别名代表不同的模块,即生成了新的硬件电路模块。 与C

5、语言相比,Verilog HDL描述语法较死,限制较多,能用的判断叙述有限。 Verilog HDL中的延时语句只能用于仿真,不能被综合工具所综合。,4.2 Verilog HDL设计举例1、1位比较器的三种不同风格Verilog HDL程序设计 【例4.2.1】1位比较器的Verilog HDL程序。通过对输入信号A,B的比较,把比较的结果反映到m,L,e端口。,2、测试模块例子 Verilog HDL可以用来描述变化的测试信号,它给出模块的输入信号,通过观测被测试模块是否符合要求,可以调试和验证逻辑系统设计和结构的正确性,并能发现问题及时修改。,每一项工程是由大量功能各异的模块组合而成的。

6、 模块是由两部分组成的: (1)一部分是接口描述(该模块与其他外部模块进行通信的端口), (2)另一部分是逻辑功能描述(描述某个设计的功能或者结构),即定义输入是如何影响输出的。 模块可以进行层次嵌套,将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。,4.3 Verilog 模块的结构,一个模块, 由 module 1.模块名 (module_name) 2端口列表 (port_list) 3端口声明 (input、output、inout) 4变量声明 (reg、wire、parameter) 5行为描述语言 (initial、always)

7、 6连续赋值语句 (continuous assignment) 7模块调用语句 (module instantiation) 8任务及函数 (task、function) endmodule在模块的所有组成部分中,只有module、模块名和endmodule必须出现,其它部分都是可选的,模块:verilog模块的部件,作用:端口是模块与外界交互的接口;于外部环境(使用者/连接者)来讲,模块内部 不可见,对模块的调用只能通过其端口进行。,举例:module sr_latch(q,qbar,sbar,rbar); 说明:被处理信号(数据)从sbar,rbar进入模块,处理结果从q,qbar端口送

8、出,这样它可被外界调用;,(2)实例引用,4.2 I/O说明 常见I/O口类型有 1.输入口(input) 2.输出口(output) 3.双向口(inout), 分别表示数据流的方向是输入,输出或双向的。,常用到的是assign语句和always块语句。 1.assign语句-数据流描述风格的主要建模语句,通常用来描述组合逻辑 。 assign声明语句很简单,只需要写一个“assign” (赋值),后面再加一个方程式即可。 例如 :assign sa 该语句描述了一个三输入的与门,这是一个组合逻辑。 注意:s的数据类型只能是wire类型。,4.4、功能描述,2.always块 -行为级建模的

9、主要语句 既可以用来描述组合逻辑, 也可以用来描述时序逻辑。 从字面上理解,always的意思是“总是,永远”。在Verilog HDL中,只要指定的事件发生,由always指定的内容将不断地重复运行,不论该事件已经发生了多少次。这恰恰反映了实际电路的特征,即在通电的情况下电路将不断运行。 最常用的两种事件是电平触发和边沿触发。电平触发是指当某个信号的电平发生变化时,执行always指定的内容;边沿触发是指当某个信号的上升沿或下降沿到来时,执行always指定的内容。 电平触发的写法是在“”后面直接写触发信号的名称;边沿触发的写法是在“”后面写“posedge 信号名”或者“negedge 信

10、号名”,posedge代表信号的上升沿,negedge则代表信号的下降沿。,4.5 模块调用-结构级建模的主要语句,4.4 Verilog HDL语言要素与表达式 介绍Verilog语法中的注释、常量、变量、操作符、字符串、关键字和标识符等基本语法要素。 4.4.1 注释 在代码中插入注释可以有效地增加程序的可读性,也便于文档管理。Verilog HDL允许单行注释和多行注释。单行注释以“/”开始,直到行末结束;多行注释以“/ *”开始,以“*/”结束。这两种注释的方法和C+的注释方式相同。,4.4.2 常量 1、数字(1)整数有以下4种进制表示形式:二进制整数(b或B)、十进制整数(d或D)

11、、十六进制整数(h或H)、八进制整数(o或O)。数字表达方式主要有三个部分:位宽、进制和数字。位宽指数字常量的二进制宽度,进制表示数字的类型。,数字表达方式一共有三种: 位宽 进制 数字,这种方式描述数字最为完整; 进制 数字,这种描述方式省略了位宽,在这种情况下,数字的位宽采用系统默认位宽(由系统决定,至少是32位) 数字,这种描述方式省略了位宽和进制信息,采用默认的位宽和进制(十进制)。 例如:8b00101000 /位宽为8的二进制表示,b表示二进制,(2)负数 数字同样也可以定义为负数,只需要在位宽表达式前面加一个减号。 (3)x和z值 Verilog语法中,有x和z两种特殊值。在数字

12、电路中,x代表不定值,z代表高阻值。在不同进制中,x和z表示的不定值或高阻值的位数不同。 例如:4bx1x0 /位宽为4的二进制数从低位数起的第二位和第四位为不定值,(4)下画线 为了提高程序的可读性,尤其在使用二进制表示较长的数字常量的时候,我们可以使用下划线将数字分隔开来。例如:16 b0010_0100_1101_0001 /合法格式,2、参数声明 用parameter来定义常量,称为符号常量,即标识符形式常量,采用标识符代表一个常量可以提高程序的可读性和可维护性。参数的声明格式: parameter 参数名1=常数表达式1, 参数名2=常数表达式2,; 例如:parameter ALL

13、_X=16bx; /定义参数ALL_X为常数16bx parameter state0=2b00, /定义参数state0为常数2b00,4.4.3 变量 变量是在程序运行过程中其值可以改变的量。 1、线网类型 线网类型可以理解为实际电路中的导线,通常用于表示结构实体之间的物理连接。,2、寄存器变量类型 寄存器变量类型主要有以下6种:reg,integer,time,real,realtime,memory型。(1)寄存器是数据储存单元的抽象,寄存器数据类型的关键字是reg。,reg型变量定义格式如下: reg signed 最高位 :最低位 寄存器名1, 寄存器名2,寄存器名N; 其中,si

14、gned表示数值为有符号数(以二进制补码形式保存),默认情况下为无符号数。 例如:reg 3:0 bus; /定义了一个4位的名为bus 的reg型变量,总之, 1.wire表示直通,即只要输入有变化,输出马上无条件地变化;reg 一定要有触发,输出才会反映输入。 2.wire只能被assign连续赋值,reg只能在initial和always中赋值。 3.wire使用在连续赋值语句中,而reg使用在过程赋值语句中。,(2)使用integer、real、time关键字定义寄存器变量和使用reg进行定义并没有本质上的区别,仅仅是为了使程序的表述更加清晰明了。integer、real、time型变

15、量的位宽是固定的,integer型变量的位宽为32,real型变量的位宽为64,time real型变量的位宽为64,它们已经是矢量,因此在定义变量时不可以加入位宽。如 integer a1,b1; /定义a1、b1为32位整型变量,(3)memory型数据 可以通过reg型变量建立数组来对存储器建模,可以描述RAM型存储器、ROM存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。memory型变量定义格式如下:reg 最高位 :最低位 存储器名 最高位 :最低位; 下面举例说明: reg 7:0 mema 0:255;,4.4.4 操作符,1、 算术运算符,算术运算符有+(加法

16、符号,正值符号)、 (减法符号,负值符号)、 * (乘); / (除) 、 % (取模)、 *(指数幂)6种。 例如:reg1reg2 / “”为加法符号 -num / “-”为负值符号 9 / 4 / 9除以4结果为2 -/ -5模以2结果为 -1,取第一个操作数的符号值 2*4/ 2的4次方 算术运算中任意一个操作符中含有一位或多位不确定值x或z,则整个运算结果为x。 例如:4b10x04b0001 结果为4bxxxx;,2、位运算符 Verilog 作为一种硬件描述语言,是针对硬件电路而言的。硬件电路中信号有1,0,x,z。在硬件电路中信号进行与、或、非时,反映在Verilog中则是相应的操作数的位运算。Verilog 位运算符有(取反)、 & (按位与)、 |(按位或)、 (按位异或)、 , (按位同或)5种。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号