一、语言要素
(一)概述
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、三态逻辑设计