一、语言要素
(一)概述
1、空白符(White Space)
 空格、换行、换页、Tab等;
 是代码错落有致,提高可读性。
 2、注释(Comment)
 单行注释:“ // ”;
 多行注释:“ /* ”~“ */ ”。
 3、标识符(Identifier)
 字母、数字、_、$,最长1023个字符。
 4、关键字(Key Word)
 所有的关键字都是小写的。
 5、运算符(Operator)
(二)常量
1、整数(Integer)
 +/-<位宽>’<进制><数字>
 (1)较长的数之间可用下划线分开;
 (2)未定义整数位宽,则默认32位;
 (3)定义位宽比数值位数长,通常在左边填0补位,如果数最左边一位为x或z,就相应地用x或z在左边补位;
 (4)“?”是高阻态z的另一种表示符号,数字表示中与“z”等价可互相替代;
 (5)x(或z)在二进制中代表1位x(或z),在八进制中代表3位x(或z),在十六进制中代表4位x(或z),其代表的宽度取决于所用的进制。;
 (6)整数可以带符号,且正负号应写在最左边,负数通常表示为二进制补码形式;
 (7)位宽与进制默认时默认是十进制数;
 (8)位宽和’之间、进制与数值之间允许出现空格,‘和进制之间、数值之间不允许出现空格;
 (9)带符号整数定义;例:8’sh5a。
 2、实数(Real)
 十进制表示法 小数点两侧都必须有数字;
 科学计数法
 实数转整数 四舍五入
 3、字符串(String)
 reg型变量
 若声明的reg型变量位数大于字符串实际长度,则赋值操作后字符串变量的左端(即高位)补0;若小于,则字符串左端被截去。
(三)数据类型
1、四值逻辑:
 0:低电平、逻辑0或逻辑非;
 1:高电平、逻辑1或“真”;
 z或Z:高阻态;
 x或X:不确定或未知的逻辑状态。
 2、数据类型:
 net型;
 相当于硬件电路各物理连接,特点是输出的值紧跟输入值的变化而变化。
 (1)wire型
 默认为wire型。位连接到驱动,值为高阻态。
 (2)tri型
 增加程序可读性,可以更清除地表示该信号综合后的电路连线具有三态的功能。
 variable型(register型)。
 (1)reg型
 综合时综合器根据具体情况映射成寄存器或连线。
 (2)integer型
 多用于表示循环的变量。不能做为位向量访问。
 综合时初始值为x。
 (3)real型
 表示实数寄存器,主要用于仿真,不可综合。
 (4)time型
 用于对模拟时间的存储与处理,不可综合。
(四)参数
1、参数parameter
2、参数声明
3、参数传递
 (1)“#”符号隐式重载
 (2)在线显式重载
 (3)defparam语句显示重载
 4、localparam
 定义局部参数。
(五)向量
1、标量与向量
 2、位选择和域选择
 3、存储器
(六)运算符
1、算数运算符
 +
 -
 *
 /
 %
 2、逻辑运算符
 &&
 ||
 !
 3、位运算符
 ~
 &
 |
 ^
 ^~ ,~^
 4、关系运算符
 <
 <=
 >
 >=
 5、等式运算符
 == 相等运算符
 !=
 === 全等运算符
 !==
 6、缩减运算符(是单目运算符)
 &
 ~&
 |
 ~|
 ^ 异或
 ^~ , ~^ 同或
 7、移位运算符
 >>
 <<
 >>>
 <<<
 算数移位操作符"<<<"">>>"
 8、指数运算符
 **
 9、条件运算符
 ?:
 10、位拼接运算符
 { }
 将两个或多个信号某些位拼接起来;符号位扩展;嵌套使用;移位操作。
 11、运算符的优先级
二、语句语法
(一)过程语句
initial:用于初始化,只执行一次;
 always:重复执行,可综合。
always过程语句
 带触发条件
 1、敏感信号列表“sensitivity list”
 边沿敏感型、电平敏感型
 2、posedge与negedge关键字
 posedge clk:时钟信号clk的上升沿作为触发条件;
 negedge clk:时钟信号clk的下降沿作为触发条件。
 3、Verilog-2001标准对敏感信号列表
 (1)敏感信号列表中可用逗号分隔敏感信号
 (2)敏感信号列表中使用通配符“**”
 4、用always过程块实现较复杂的组合点亮
initial过程语句
 initial语句不带触发条件,其块语句沿时间轴只执行一次。
(二)块语句
串行块begin-end
 并行块fork-join
(三)赋值语句
1、持续赋值与过程赋值
 assign 为持续赋值语句,主要用于对wire型变量的赋值;
 过程赋值语句主要用于对reg型变量进行赋值。
 2、阻塞赋值与非阻塞赋值
(四)条件语句
if-else语句
 case语句
 1、case语句
 2、casez与casex语句
(五)循环语句
for语句
 repeat语句:连续执行一条语句n次
 while语句
 forever语句:连续执行语句;多用在initial块中,以生成时钟等周期性波形。
(六)编译指示语句
1、宏替换define
 2、文件包含include
 3、条件编译ifdef、else、endif
 if 宏名
 endif
 当宏名在程序中被定义过的话,则下面的语句块参与源文件的编译,否则,该语句块将不参与源文件的编译。
(七)任务与函数
1、任务
 2、函数
(八)顺序执行与并发执行
(九)Verilog—2001语言标准
1、改进和增强的语法结构
 提高Verilog行为级和RTL级建模的能力;
 改进Verilog在深亚微米设计和IP建模的能力;
 纠正和改进了Verilog-1995标准中的错误和易产生歧义之处。
 (1)ANSI C风格的模块声明
 (2)逗号分隔的敏感信号表
 (3)在组合逻辑敏感信号列表中使用通配符“ * ”
 (4)generate语句
 (5)带符号的算数扩展
 (6)指数运算符 * *
 (7)变量声明时进行赋值
 (8)常数函数
 (9)向量的位选和域选
 (10)多维矩阵
 (11)矩阵的位选则和部分选择
 (12)模块的实例化时的参数重载
 (13)register改为variable
 (14)新增条件编译语句
 (15)超过32位的自动宽度扩展
 (16)可重入任务(Re-entrant Task)和递归函数(Recursive Function)
 (17)文件和行编译指示
 2、属性及PLI接口
 (1)设计管理
 (2)属性
 (3)增强的文件输入、输出操作
 (4)VCD文件的扩展
 (5)提高了对SDF(标准延时文件)的支持
 (6)编程语言接口(PLI)的改进
三、Verilog设计的层次与风格
(一)Verilog设计的层次
抽象级别5级:
 系统级(System Level)
 算法级(Algorithm Level)
 寄存器传输级(Register Transfer Level,RTL)
 门级(Gate Level)
 开关级(Switch Level)
 描述方式:
 结构(Structural)描述
 行为(Behavioural)描述
 数据流(Data Flow)描述
(二)门级结构描述
1、门元件
 2、门级结构描述
 3、行为描述
 4、数据流描述
 5、不同描述风格设计
 6、多层次结构电路设计
 7、基本组合电路设计
 8、基本时序电路设计
 9、三态逻辑设计