打印

Verilog HDL的语言要素

[复制链接]
1764|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星之火红|  楼主 | 2012-11-8 00:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本章介绍Verilog HDL的一些基本语言要素,包括标识符、注释、格式、数值、数据类型、参数、编译程序指令、系统任务和系统函数等。通过本章内容的学习,可以获得识别模块中各种语言要素的能力,为学习如何读懂以及编写代码打基础。


                                           3.1 标识符

                                           3.2 注释

                                           3.3 格式

                                           3.4 数值

                                           3.5 数据类型

                                           3.6 参数

                                           3.7 空白符

                                           3.8 编译程序指令

                                           3.9 系统任务和系统函数

相关帖子

沙发
星星之火红|  楼主 | 2012-11-8 00:09 | 只看该作者
3.1.1定义与举例

标识符( identifier)用于定义模块名、端口名、信号名、参数名等。 Verilog HDL 中的标识符( identifier)可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。以下分别举例说明一些正确的标识符命名和一些无效的标识符命名。

正确的标识符:

Mux

MUX

Dat1

Six$

_mult

错误的标识符:

12345

count@

$six

其中,Mux和MUX是不同的,因为标识符区分大小写;12345和$six错误的原因是标识符首字符不是字母或者下划线;count@错误的原因是标识符包含不支持的字符。

博主注:在一个模块内,端口名、信号名等使用的标识符必须是独一无二的,用于标识某个特定的设计单元(端口、信号、参数等)。另外,一般标识符的长度在不同的编译工具中有不同的限制,但一般都支持1024个字符的长度,超出长度限制的标识符不能使用,在编译工具中会报错。

3.1.2关键字

关键字(又称为保留字)是一种特殊的标识符,是Verilog语言定义的一些语法和结构的名称。附录A列出了Verilog语言的所有关键字。注意,所有关键字都是小写的,一些标识符虽然字母和关键字一样,但是包含大写字母,就不是一个关键字,而只是一个普通的标识符。如,always是关键字,但是Always和ALWAYS就不是关键字。用户自定义的一个设计单元(如端口、信号和参数等)的名称,必须是普通标识符,不可以使用Verilog语言的关键字。

       3.1.3书写规范与建议
以下是一些常规书写规范的要求,更多的规范可依据团队或公司习惯和要求自行规定。

1、用有意义的名字如 Sum 、Addr_Bus等。

2、用下划线区分词Data_Bus。

3、采用一些前缀或后缀,如

      时钟采用Clk 前缀:Clk_50,Clk_CPU;

      低电平采用_n 后缀:Enable_n;

4、统一一定的缩写如全局复位信号 Rst。

5、同一信号的名称(标识符)在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。

6、自定义的标识符不能与保留字同名。

7、参数采用大写,如SIZE 。

8、采用行业通用命名,如时钟Clk、复位Rst、地址Addr等。

使用特权

评论回复
板凳
星星之火红|  楼主 | 2012-11-8 00:09 | 只看该作者
Verilog HDL 中有两种注释的方式,第一种注释方法的格式为以“/*”符号开始,并以“*/”符号结束。在两个符号之间的语句都是注释语句,因此可扩展到多行。另一种注释方法的格式为以“ //”符号开始 ,直到本行结束为止。它表示从“ //”符号开始到本行结束的语句都属于注释语句。
第一种注释举例如下:
       /* statement1 ,
          statement2 ,
           .. ...
          statementn */
以上n个语句都是注释语句。
第二种注释举例如下:
        //statement1,statement2,......,statementn

以下给出一个带注释的module实例,其中玫红色部分为注释。

module FA_behav2(A, B, Cin, Sum, Cout );
input        A,B,Cin;
output     Sum,Cout;   //Sum is the summation,Cout is the carry out
reg          Sum, Cout;

/*when A+B+Cin >1,Cout =1;
  else Cout = 0; */
always@ ( A or B or Cin )
begin
      {Cout ,Sum} = A + B + Cin ;
end

endmodule

使用特权

评论回复
地板
星星之火红|  楼主 | 2012-11-8 00:10 | 只看该作者
Verilog HDL的书写格式比较自由,一条语句可以分多行书写,一行也可书写多个语句。白空(新行、制表符、空格)没有特殊意义。
例如,以下一行代码:

input A;input B;
与以下两行代码:

input A;
      input B;
是等效的。
业界一些大公司建议的书写规范是:
      1.一个语句一行。
      2.采用空四格的table 键进行缩进。

使用特权

评论回复
5
星星之火红|  楼主 | 2012-11-8 00:10 | 只看该作者
Verilog HDL中有下列四种基本的值:
       1) 0:逻辑0或“假”
       2) 1:逻辑1或“真”
       3) x:未知(不定态)
       4) z:高阻
注意,这四种值的解释都内置于语言中。如一个为x的值总是意味着不定态,一个为z的值总是意味着高阻抗,一个为0的值通常是指逻辑0。在门的输入或一个表达式中的为“ z”的值通常解释成“ x”。此外, x值和z值都是不区分大小写的,也就是说,值0 x 1 z与值0 X 1 Z相同。Verilog HDL中的常量是由以上这四类基本值组成的。
Verilog HDL中有三类常量:
       1) 整型
       2) 实数  
       3) 字符串
下划线符号( _)可以随意用在整型或实数型常量中,它们就数量本身没有意义。它们能用来提高代码的可读性;唯一的限制是下划线不能用作为首字符。

使用特权

评论回复
6
星星之火红|  楼主 | 2012-11-8 00:10 | 只看该作者
在Verilog HDL 中主要有两大数据类型:

1) 线网类型(Net type)。线网类型表示的是元器件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。

2) 寄存器类型(Register type)。寄存器类型表示的是一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值在没有被重新赋值之前是被保存下来的。寄存器类型的变量具有x的缺省值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

1782

帖子

22

粉丝