Verilog HDL语法-模块、语言要素

模块

模块的基本结构

模块(module)是Verilog HDL语言的基本单元,它代表一个基本的单元块,用于描述某个设计的功能或结构,以及与其它模块通信的外部端口。
一个模块的基本结构如下:
module module_name(port_list);
端口定义
数据类型说明
逻辑功能描述
endmodule
module和endmodule表明了模块的范围。一个模块从module开始,到endmodule结束。
模块名:模块名是模块的唯一标识符。
端口列表:是由模块的输入、输出和双向端口组成的一个列表,可以理解为芯片的引脚。
模块端口定义:用来定义端口列表中的变量哪些是输入(input)、输出(output)和双向端口(inout)以及位宽。
注意:除了在模块中对端口进行定义外,还可以在端口列表中进行定义,如下面两个例字是等价的:

module adder32_1(clk, rst, enable, din1, din2, ci, data_sum, co);
	input            clk;
	input            rst;
	input            enable;
	input[31:0]      din1;
	input[31:0]      din2;
	input            ci;
	output[31:0]     data_sum;
	output           co;

	...
endmodule

module adder32_2(
		input          clk;
		input          rst;
		input          enable;
		input[31:0]    din1;
		input[31:0]    din2;
		input          ci;
		output[31:0]   data_sum;
		output         co;
		);
		
	...
endmodule

模块数据类型说明:定义中间变量的数据类型。数据类型一般包括wire、reg、memory和parameter等。input缺省定义为wire类型;output可以是wire类型,也可以是reg类型(被定义为reg类型时输出变量要在always或initial语句块中被赋值);inout一般为tri(三态线)类型,表示有多个驱动源。
模块逻辑功能描述:用来产生各种逻辑,主要是组合逻辑和时序逻辑。包括:initial语句、always语句、assign连续赋值语句、function函数、task任务、其他模块的实例化语句、门实例化语句、UDP用户自定义原语实例化语句。

模块引用时端口的对应方式

当模块被引用时,信号要通过端口被引用到模块内部或从模块内部取出来。具体有两种方式:

  1. 引用时,严格按照模块定义的端口顺序来连接输入或输出信号,其格式为:
    module_name (signal1, signal2, …);
  2. 引用时使用”.”标明端口定义时的端口名,其格式为:
    module_name (.signal_name1(signal1), .signal_name2(signal2), …);
    使用第二种方法时,可以不按照端口定义时的顺序传入或取出信号。

Verilog HDL的语言要素

空白符

空白符:包括空格符(\b)、制表符(\t)、换行符(\n)和换页符。空白符的作用仅仅是时代码结构看起来更清晰,阅读更方便。在编译和综合时空白符会被忽略。

注释符

注释符:注释符有两种,//用于单行注释;/* … */用于多行注释。

标识符

标识符:用来命名模块名、信号名、参数名等;由字母、数字、下划线和$组成;注意:标识符对字母大小写敏感,且第一个字符只能是字母或下划线。

转义标识符

转义标识符:以\开头,空白结尾(一个空格,一个制表符或换行符都可以)的标识符就是转义标识符;在转义标识符中可以包含任何可打印的字符。如下:
\a+b=c\b //\b是空格
\7400\t 等。

数值

Verilog HDL的数值与其他编程语言的不同点在于:Verilog HDL对应着具体的电路;在电路中一个数值必然是由有限根导线上的高低电平的组合来表示的。因此在Verilog HDL中也有和实际电路相对应的4种逻辑状态,并由它们组成数值。这四种逻辑状态分别是0, 1, x(X), z(Z)。0表示低电平;1表示高电平;x表示不定态;z表示高阻态。

整数的表示形式

在Verilog HDL中整数可以表示为二进制(b,B)、八进制(o,O)、十六进制(h,H)或十进制(d,D)。具体格式如下:
+/- size’<base_format> number
+/-表示符号;size是位宽,在电路中相当于用几根导线来表示一个整数;” ’ ”是固定格式;base_format是表示整数时使用的进制;number是具体的数字。
注意:
a. 在数字比较长时可以在数字中间使用下划线,例如:12’b1010_1100_0010,但是下换线不能用作首字符。
b. 数字没有说明位宽时默认是32位,如:’hffff,’o75等。
c. 只有一个数字,没有标明位宽和进制时,如5,默认是32位十进制。
d. 如果定义的位宽比实际的位数大,则在左边用0补齐。但如果最左边是一位x或z,就相应的使用z或x在左边补齐。
e. ?是高阻态z的另外一种表示符,两者等价。
f. 整数可以带正负号。负数使用二进制补码形式表示。例如一个整数为-4’d4,最高位是符号位,其补码形式为:4’b1100。
g. 在’base_format(进制)前后可以有空格,但数字之间,’与表示进制的字母之间不能有空格。
h. x或z在二进制中表示1位x或z,在八进制中表示3位,而在十六进制中表示4位。例如8’b1011xxxx等价于8’hBX。

实数的表示形式

实数有两种表示方法。

  1. 十进制表示方法。例如:3.0、 2.4、 5.6等。但是需要注意的是小数点两侧都必须有数字,例如:.5就是错误的写法。
  2. 科学计数表示方法。例如:523.e2,8.7E-1。e不区分大小写。

字符串表示形式

字符串使用双引号包裹,例如:”Hello World!”。在Verilog HDL中每个字符对一个8位ASCII码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值