【芝士】VLSI第四讲:Verilog HDL语言要素
上一篇博客里我们讲了Verilog的简介、设计举例和模块结构,这一篇接着往下看,聊聊Verilog程序里的"语言要素",简单说就是组成代码的那些基本符号。一、Verilog程序由哪些符号组成
Verilog程序本质上就是一串符号流,这些符号包括:
空白符(White space)
注释(Comments)
操作符(Operators)
数字(Numbers)
字符串(Strings)
标识符(Identifiers)
关键字(Keywords)
下面挨个简单说一下,对初学者来说搞清楚这些就够了。
二、空白符(White space)
空白符包括:空格、Tab、换行和换页。它的作用就是让代码排版好看,方便人阅读,综合器在编译时会把它忽略掉。
Verilog的格式非常自由,一行可以写几个语句,一个语句也可以拆成几行写。比如下面这两种写法是完全等价的:
//写法一:一行搞定
initial begin ina=3'b001; inb=3'b011; end
//写法二:拆开写,加点空格换行更清楚
initial
begin
ina = 3'b001; //用空格、换行让代码错落有致
inb = 3'b011;
end
记住一句话:Verilog的空格在文本里只是起"分隔符"的作用,没有其他用处。
三、注释(Comments)
注释对写代码来说非常重要,能让以后再看代码的人(包括你自己)一眼就明白这段在干嘛。Verilog的注释方法和C语言完全一致:
单行注释:用 // 开头,这一行后面都被忽略
多行注释:用 /* ... */ 包围起来,中间的内容都被忽略
// 单行注释举例
wire a; //这也是注释
/* 多行注释
可以写好几行
用来解释一大段代码 */
好的源程序一定要记得加注释,不然过两个星期你自己都看不懂。
四、标识符(Identifiers)
标识符就是你自己给东西起的名字,模块名、端口名、变量名这些都是标识符。
命名规则:
可以是字母、数字、$ 和 _(下划线)的组合
第一个字符必须是字母或者下划线,不能是数字
区分大小写(Count 和 count 是两个不同的标识符)
//合法的标识符
shift_reg_a
busa_index
bus
_count
//非法的标识符
30count //错:不能以数字开头
a*b_net //错:不能含有 * 这种字符
n@ //错:不能含有 @
特别注意一点:Verilog是大小写敏感的,并且所有的关键字都是小写的,所以写always不能写成Always,写module不能写成Module。
五、转义标识符
转义标识符比较特殊,用反斜杠 \ 开头,以空格结束,可以包含任何可打印的ASCII字符,主要是为了解决一些特殊场景下的命名问题,比如一些工具生成的信号名带特殊字符。普通写代码很少用到,简单了解就行:
\~#@sel
\bus+index
\{A,B}
六、关键字(Keywords)
关键字就是Verilog语言自己"占用了"的那些词,always、module、wire、assign这些都是关键字,我们自己不能再用这些词来给变量起名字。关键字全部都是小写形式,这点一定要记住。下面列出一些常见的关键字:
module, endmodule
input, output, inout
wire, reg
assign
always, initial
begin, end
if, else, case, endcase
for, while, repeat
and, or, not, xor
parameter
……(还有很多,用到的时候查一下就行)
七、小结
这一篇主要讲了Verilog的语言要素,也就是构成代码的最基本的几类符号:
空白符只起分隔作用
注释分单行 // 和多行 /* */
标识符第一个字符必须是字母或下划线,区分大小写
关键字都是小写,不能拿来做变量名
下一篇打算写写Verilog里的常量和数据类型,那部分也是基础但内容很多,先把语言要素这块理清楚再看后面的会轻松很多。
页:
[1]