描述了Verilog HDL源文本中使用的词法标记及其约定。
语言中词法标记的类型有:空格、注释、操作符、数字、字符串、关键字和标识符。
空格:空白应包含空格、制表符、换行符和制表符。
注释:单行注释//、多行注释/* */
number:
整型常量:二进制/b、八进制/o、十进制/d、十六进制/h
两种表达式:0-9(有符号数)、8‘b0000_0001(有无符号数视有无s指示符而定)
x代表未知数、z代表高阻抗(不区分大小写)
如果无符号数的大小小于指定大小,则将无符号数往左填充为0,如果无符号数最左边是x或是z,则将x或z扩展至最左边,如果无符号数大小大于常数指定的大小,则无符号数应该截断。
问号?可以用来替代z,在高阻抗值不关心条件的情况下,问号可以增强可读性。而十进制常数中,无符号数字标记不应该包含任何x、z或是?数字,除非只有一个数字,即表示十进制常数每一位都未知。
除了第一个字符,下划线在其他任何位置都合法,主要用于分割长数字。
-4'sd15 // this is equivalent to -(-4'd 1), or '0001'
8'd-6 // this is illegal syntax
-8'd6 // this defines the two's complement of 6,
// held in 8 bits—equivalent to -(8'd 6)
有大小的负数常量和有大小的有符号常量分配给reg时,不管reg本身是否有符号,都会进行符号扩展。
实数常量:遵循IEEE双精度浮点数标准
实数可以使用十进制计数法和科学计数法来指定,用小数点表示时,小数点两侧至少有一位数字。
实数转换成整数时不会产生截断而是按照四舍五入规则转换。
字符串:在表达式和赋值中用作操作符的字符串,每一个8位ASCII值代表一个字符。
字符串变量是reg类型的变量,宽度等于字符串中字符的数量乘以8。
reg[8*12:1] stringvar;
initial begin
stringvar = "Hello world!";
end
字符串在赋值时,如果被赋值的容量较小,截断,较大的话,用0填充。
标识符:一个简单的标识符应该是字母、数字、美元符号($)和下划线字符(_)的任何序列。简单标识符的首字符不得为数字或$;它可以是字母或下划线。标识符应该区分大小写。
转义的标识符应以反斜杠字符(\)开始,以空白(空格、制表符、换行符)结束。它们提供了在标识符中包含任何可打印ASCII字符的方法,主要作用在于让一些无法成为标识符规则的结构成为标识符。
关键字:关键字即为非转义标识符,有转义标识符的Verilog关键字不会被解释为关键字。所有关键字都仅用小写字母定义。
系统任务和功能:$定义了语言结构
$display ("display a message");
$finish;
编译器指令:`
`define wordsize 8
属性(attribute):
(* sttr_spec {,attr_spec} *)
(* full_case,parallel_case *):默认赋值1
属性可以放在模块的定义,case语句之上,也可以放在reg的定义和表达式之前。
作用: