目录
1,Verilog HDL语言要素
语言要素:符号、数据类型、运算符、表达式。
1.1,空白符
空白符包括:空格符,制表符,换行符,换页符。
空白符可以使代码看起来结构清晰,阅读起来方便。在编译和综合的时候会被忽略。
编写Verilog程序的时候,加不加空白符都可以,加空白符的目的是为了看起来更加美观,清晰。
1.2,注释符
1,单行注释:以 ‘ // ’开始,注释从‘ // ’到行尾的内容。
2,多行注释:从 “ /* ”开始,到 “ */ ” 结束,注释两个注释符之间的内容。
注意:多行注释不可以嵌套多行注释,多行注释可以嵌套单行注释。
1.3,标识符和转义标识符
标识符
标识符:用来命名信号(reg,wire......),模块(module),参数(parameter)等等。
标识符命名格式:
1,标识符区分大小写
2,第一个字符必须是字母或者下划线
3,后续字符可以是任意 字母、数字 、下划线 (_)和 $符号的组合。
4,标识符不能是关键字。
转义标识符
转义标识符命名格式:
1,以“ \ "开头,以空白符(最好是一个空格)结尾
2," \ "和" "之间可以是任意能打印的字符内容,也就是任意字符都可以。
转义标识符在使用的时候也必须带上" \ "和" "。
举例: “\00abc ”作为转义字符。
module ch;
reg [3:0] \00abc ;
initial begin
\00abc = 10;
$display("%d",\00abc );
end
endmodule
如果不带空格符,那么 “\00abc; ”会被认为是一个转义标识符,编译的时候会报错;因为分号被认为是标识符的一部分,从而缺失了分号“;”
如果你想带分号,可以这样表示:
reg [3:0] \00abc; ;
1.4,关键字
关键字(保留字)非常多,在这里不进行展示了。
需要注意的是:
1,这时Verilog HDL内部的专用词,用户不能随便使用,在特定时候使用特定关键字。
2,所有关键字都是小写的,比如:ALWAYS和always不一样。
1.5,数值
状 态 | 含 义 |
---|---|
0 | 低电平、逻辑0或“假” |
1 | 高电平、逻辑1或“真” |
x、X | 不定态(不确定或未知的逻辑状态) |
z、Z | 高阻态 |
Verilog有四种逻辑数值状态:0、1、x、z。
在数值逻辑中不区分大小写。
为了提高数值可读性,有时候会在数值中添加 “ _ ”(下划线),下划线符号除了不能放在数值首位,别的地方都可以。
比如: 8'b10011100,可以写成 8'b1001_1100;
1,整及其表示
数制 | 基数符号 | 数字字符集 |
---|---|---|
二进制 | b或B | 0、1、x、X、z、Z、?、_ |
八进制 | o或O | 0~7、x、X、z、Z、?、_ |
十进制 | d或D | 0~9、_ |
十六进制 | h或H | 0~9、a~f、A~F、x、X、z、Z、?、_ |
整数表示形式:
+/-<size>'<base_format><number>
1,“+/-”是正负数的标示;
2,size是指换算过后的二进制宽度
3,“ ' ”为基数格式固有字符,该字符不能省略
4,base_format为其基数符号
5,number是可以使用的数字字符集,形式上是该进制下的一串数字
使用需要注意的情况:
1,下划线 “ _ ”是为了提高可读性,不能作为首字符。
2,当数字没有说明位宽时,默认为32位。
比如:50
3,x或z在二进制中代表1位x或者z,x或z在八进制中代3位x或者z,x或z在十六进制中代表4位x或者z。比如:
8'b1011xxxx 等价于 8'hBx
4,若没有定义一个整数的位宽,其宽度为相应值中定义的位数
比如: 'o642 为9位八进制数
'hBD 为8位十六进制数
5,若定义的宽度比实际的数大,则在左边补0;但如果最左边的一位为x或者z,那么就相应的用x或z来补齐。
比如:10'b101 等价于 10'b0000000101;
若定义的宽度比实际的数小,则相应地截掉左边的部分位。
比如: 4'b10101010 等价于 4'b1010;
6,“ ? ”是高阻态z地另一种表示方式。在数字地表示中,“ ? ”和 z 是等价的,可以互相替代。
7,整数可以带正、负号,并且正负号应该写在最左边。
同时负数也可以使用补码的方式表示。
比如:-4 等价于 4b'1100
8,如果进制和位宽都省略,则代表十进制数。
比如:-15代表十进制数-15.
9,数字中不能有空格,但是在基数符号两侧可以有空格。
比如:4'b1100 等价于 4' b 1100.