所谓的语言要素,实际上主要包括词法和数据类型。
因为Verilog HDL与C语言很像,所以可以从C语言的角度来学习Verilog HDL。
词法
词法就是词的组成。Verilog HDL的符号流包括 空白符(White Space)、操作符(Operators)、数字(Numbers)、字符串(Strings)、注释(Comments)、标识符(Identifiers)、关键字(Keywords)。
-
空白符与C语言相同,如空格,制表符,换行符等,Verilog程序可以分行,也可以不分行。
-
操作符(运算符),与C语言基本类似,不同的有:增加了按位同或(^~,~^,这两个等价),等式运算符加了全等(===),不全等(!==),缩位运算符,位拼接运算符。
-
数字的表示方法与C语言有点不同。 Verilog HDL有4中基本状态:0,1,x(或X,未知态),z(或Z,高阻,或用?表示)。
常量有3种类型:整数,实数,字符串。
整数与C语言表示方法差异较大,完整格式为:+/-<size><base><value>
其中size表示对应的二进制数的宽度,base表示进制,value表示基于进制的数字值。
base(缺省为d/D):b/B,d/D,o/O,h/H。
eg:8'b11000101 = 二进制的11000101 8'hd5 = 16进制的d5 4'B1x_01 = 二进制的1x01 5'Hx = 16进制的x,对应于二进制的xxxxx
tips:
size指的是对应的二进制的宽度,于base无关,如2’h1 = 01B,而不是 00000001B。我看的《Verilog程序设计教程》(王金明著)这本书P34说size省略时,默认值为32位,但是下面又说“如果没有定义一个整数的位宽,其宽度为相应值中定义的位数”,有点前后矛盾。 负数采用二进制补码。
缺省size,缺省base,代表十进制数。 个人认为,通常情况下,size和base都缺省,应该就够用了。
实数与C语言类似,但是没有区分单精度和双精度,可以采用科学计数法
-
字符串也与C语言类似,采用字符序列表示,不能多行书写。
-
注释与C语言类似,两种:// 和 / * * /
-
标识符与C语言类似,由字母,数字,$,_ 组成。首字符必须是 字母 或 _ 。区分大小写。 标识符还可以以 \ 开头,但不算作是标识符的一部分。
-
关键字都是小写,是C语言的好几倍。