打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
了解Verilog HDL语法规则吗,看完这篇就知道了

本节介绍Verilog HDL语法规则,包括文字规则、数据对象及运算符的使用等。

Verilog HDL文字规则

1.关键词与标识符

关键词是Verilog HDL中预先定义的单词,它们在程序中有特别的使用目的。已经被用作关键词的单词不可以在程序中另作他用,见表3-1。不同版本的Verilog HDL硬件描述语言中定义的关键词数目略有变化,Verilog 1995的关键词有97个,Verilog 2001共102个。

标识符是用户编程时给对象定义的名称,对象包括:常量、变量、模块、寄存器、端口、连线、示例和beginend块等元素。定义标识符时应遵循如下规则:

只能由26个大小写英文字母、数字和下划线组成。

标识符的第一个字符必须是英文字母或下划线。

字符中的英文字母区分大小写。

【例3-7】判断下面标识符是否合法。

2.注释

与C语言一样,硬件描述语言中的注释也不会被编译。在Verilog HDL中有两种形式的注释方式:

采用/* */,多用于多行注释。

采用//,用于单行注释。

【例3-8】注释举例。

在实际使用中,很多公司的编程规范明确表明,注释行中不提倡采用第一种/**/的注释方式,不允许使用中文注释。

3.常数的表示

在Verilog HDL中,常数用来表示在程序中不随意变化的量,常数分为整数、实数及字符串三大类型。

(1)整数型常数

是数字电路中最常用到的类型,在Verilog HDL中有两种表示方法:

简单的十进制格式,例如-50、6等。

基数格式,其表达方式一般如下:

〈位宽〉是十进制数值表示的常数化成二进制时对应的宽度,〈进制符号〉用进制符号b或B(二进制)、o或O(八进制)、d或D(十进制)、h或H(十六进制)表示常数的进制格式,即二进制、八进制、十进制、十六进制这4种进制表示。数字的位宽可以默认,如果没有定义长度,数的长度由具体机器系统决定(至少是32位)。

【例3-9】常数表示方法举例。

(2)实数型常数

通常用来表示带小数点的常数。实数也有两种表示方法:一种是十进制计数法;另一种是科学计数法。注意小数点两侧必须有数字,否则是错误的表示。

【例3-10】实数表示方法举例。

(3)字符串型常数

字符串是双引号内的字符序列。它必须写在同一行中。例如:

"Hi kitty"。在表达式和赋值语句中,字符串要转换成无符号整数,每一个8位ASCII码代表一个字符。例如:字符串"ab"等价于16'h5758。因此字符串是8位ASCII值的序列。例如,存储字符串"Hi kitty",需要定义8×8位的变量。

数据对象

在Verilog HDL中,凡是可以被赋值的对象就称为数据对象,它类似于一种容器,可以接受不同类型的赋值,在Verilog HDL中,数据对象有两种:常量和变量。

1.常量

常量就是在设计过程中不会发生变化的数据对象,Verilog HDL允许用参数定义语句定义一个标识符来代表一个常量,称为符号常量。符号常量的定义和设置通常是为了设计中的常数更容易阅读和修改。

符号常量定义的格式为:

【例3-11】符号常量定义举例。

2.变量

变量是在设计过程中数值可以改变的数据对象。在Verilog HDL中,变量有两大数据类型:线网类型(nets type)和寄存器型(register type)。

(1)线网类型变量

线网类型变量可以看做硬件电路中元件之间实际连线。它不能存储值,必须受到驱动器或者连续赋值语句的驱动,它是输出值始终根据输入变化而更新的变量,如果没有驱动,那么它将会是高阻态。Verilog HDL提供的常见线网类型变量如表3-2所示。

在表3-2所列若干线网类型中,常用的是wire类型。对于wire类型的变量,其定义的格式如下:

[n-1:0]表示信号的位宽为n位,若没有特别的说明,被定义的信号往往被默认为1位宽度的wire类型变量。

【例3-12】线网类型变量定义举例。

(2)寄存器类型

寄存器类型表示一个抽象的数据存储单元,不与具体硬件对应。它具有状态保持作用,通过赋值语句可以改变寄存器存储的值。寄存器变量的初始值为不确定态。寄存器类型变量共有4种数据类型,见表3-3所示。

在表3-3所列若干寄存器型中,reg型变量是数字系统中存储设备的抽象,常用于具体的硬件描述,因此是最常用的寄存器型变量。对于被定义的reg类型变量,其定义的格式如下:

[n-1:0]表示信号的位宽为n位,若没有特别的说明,被定义的信号往往被默认为1位宽度的reg类型的变量。

【例3-13】寄存器变量类型举例。

若把一个变量定义成integer、real和time等寄存器类型,其方法同定义reg类型一样。integer型变量通常用于对整型常数进行存储和运算。必须注意,integer、real和time等寄存器类型宽度是固定的,因此在定义时不能加入位宽。

【例3-14】

数组类型并不是一种新的数据类型,它是寄存器类型二维数组的形式,是将reg变量进行地址扩展而得到的,它常用来对存储器ROM、RAM进行建模。

数组类型变量的定义格式如下:

【例3-15】数组类型定义及赋值举例。

数据对象被定义后,无论定义成哪种类型,都可以采用如下多种赋值形式:

【例3-16】赋值举例。

运算符

Verilog HDL中定义了多种运算符,按照类别共分为9类,分别是算术运算符、关系运算符、等式运算符、逻辑运算符、位运算符、缩位运算符、移位运算符、条件运算符、位拼接运算符。

1.算术运算符

算术运算符包括+(加)、-(减)、*(乘)、/(除)、%(求模)这5种。

需要注意的是,两个整数做相除运算,商的整数部分作为结果,小数部分截掉。两个整数做求模运算,商的余数部分作为结果,整数部分截去。如果任意一个操作数中含有X或Z,那么整个结果为X。例如:'b001 x+'b0101结果为不确定数'bxxxxx。

【例3-17】算术运算举例。

2.关系运算符

关系运算符包括>(大于)、<(小于)、>=(大于等于)、<=(小于等于)4种。

在关系运算中,如果表达式成立,关系结果为真(逻辑1),否则关系结果为假(逻辑0)。如果操作数中有一位为X或Z,那么结果为X。

【例3-18】关系运算举例。

3.等式运算符

等式运算符包括==(逻辑相等)、!=(逻辑不等)、===(全等)、!==(非全等)4种。

相等运算对两个操作数进行逐位比较,当两个数完全相等时,结果为真(逻辑1),否则结果为假(逻辑0)。若任意一个操作数中含有X或Z,那么结果为X。在全等运算中,允许操作数的某些位为X或Z,只要被比较的两个数对应位完全相同,则全等运算结果就为真。

【例3-19】相等运算举例。

4.逻辑运算符

逻辑运算符包括!(逻辑非)、&&(逻辑与)、||(逻辑或)3种。

在逻辑运算中,将操作数看成一个整体,当操作数不为0时,把它作为逻辑1,否则作为逻辑0,若任意一个操作数中含有X或Z,那么结果为X。

【例3-20】逻辑运算举例。

5.位运算符

位运算符包括~(按位取反)、&(按位与)、|(按位或)、^(按位异或)、^~或~^(按位同或)5种。位运算用于对两个操作数对应位进行运算。

【例3-21】位运算举例。

6.缩位运算符

缩位运算符包括&(与缩位)、~&(与非缩位)、|(或缩位)、~|(或非缩位)、^~或~^(同或缩位)5种。

位运算和缩位运算虽然运算符相同,但是运算过程不同。位运算的操作数有两个,操作数是几位,运算结果也是几位。而缩位运算只有一个操作数,运算时对一个操作数由左向右进行运算,运算结果为1位。

【例3-22】缩位运算举例。

7.移位运算符

移位运算符包括<<(向左移位)、>>(向右移位)。移位操作符将操作数向左、向右移动指定的位数,空出的位置用“0”补充。

【例3-23】移位运算举例。

8.条件运算符

条件运算符为?:(条件运算)。

其格式是:条件表达式?表达式1:表达式2

该运算符的运算过程为:如果条件表达式为真,结果为表达式1的值,否则为表达式2的值。

【例3-24】条件运算举例。

9.位拼接运算符

位拼接运算符为{}。位拼接运算是将小表达式合并形成大表达式的操作。形式如下:

{expr1,expr2,……,exp N}

【例3-25】拼接运算举例。

10.运算符的优先等级

Verilog HDL运算符的优先等级见表3-4,若想改变运算的优先等级,可以加圆括号。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Verilog HDL的基本语法(一)
FPGA的Veilog HDL语法、框架总结
8位数据的奇偶校验verilog程序
Verilog HDL的常用运算符---位拼接运算符
格雷码与二进制的相互转换 Verilog实现
FPGA知识大梳理(二)verilogHDL语法入门(1)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服