1、标识符(Identifier):由任意字母、数字、$符号、_(下划线)符号组成的字
符序列。第一个字符必须是字母或者下划线。 区分大小写。
转义标识符(Escaped Identifier):\OutGate 等同于 OutGate
但 \initial 不等同于 initial
Verilog语言中的保留字(小写的关键词);转义关键词与关键词是不同的。
2、以$字符开始的标识符被认为是系统任务或系统函数
任务可以返回0个或多个值;函数除了返回一个值以外,与任务类似。
函数的执行不需要时间,即不允许有任何延迟,而任务可以带有延迟;但系
统任务不能有任何延迟。
3、编译器指令:以'(反引号)起头的标识符
'define 用于定义文本替换的宏命令
'undef 取消前面定义的宏
条件编译:
'ifdef 检查该宏定义是否存在
'ifndef 检查该宏定义是否不存在
'else、'elseif、'endif
'default_nettype 为隐式线网指定线网类型
'include 用于在代码行中包含任何其他文件的内容
'resetall 将所有的编译指令重新设置为缺省值
'timescale time_unit/time_precision
注:当一个设计中的多个模块带有自身的 'timescale编译指令时,仿真器总是根据所有模块中的最小时间精度,所有延迟都相应地转换为最小延迟精度。
'unconnected_drive //出现在这两个编译指令之间的任何未连接的输入端
'nounconnected_drive //口,可以是上拉状态,也可以是下拉状态。
上拉 pull1;下拉pull0。
'celldefine //用于把模块标记为单元模块
'endcelldefine //可由某些PLI子程序调用
'line 在Verilog编译器中将行号和文件名复制至指定的值。
4、值集合
四种基本值:0、1、x、z (在门的输入或表达式中的z通常被解释为x)
三种类型的常数:Integer、Real、String
整型的书写方式:十进制、基数格式
[size] '[signed] base value
b或B:二进制;o或O:八进制;d或D:十进制;h或H:十六进制
例: 5'037 5位八进制数
7'Hx 7位x,即:xxxxxxx
注:a、基数格式通常为无符号数;
b、若定义的位宽比常量指定的位宽大,对无符号数则在数的左边填0
补齐,而对有符号数则在左边填写符号位补齐;若数最左边一位为
x或z,则以x或z在左边补位。
c、若位宽定义的比数值小,则最左边的多余位被相应的截断。
实数:十进制表示、科学计数法
字符串:双引号内的字符序列,不能被分成多行书写
5、数据类型:线网类型与变量类型
线网类型:wire、trior、trireg、tri、wand、tril、
wor、triand、tri0、supply0、supply1
表示法:net_kind [signed] [[msb:lsb]] net1,net2,...,netN
tri类型的线网可用于描述多个信号源驱动的线网
wor指两个驱动源中若某一个为1,则线网的值为1
trior 三态线或
wang 线与、triand 三态线与
trireg 三态变量
tri0、tri1用于逻辑线网的建模
supply0、supply1 用于对“地”、“电源”线网建模
未声明的线网被缺省地设置为1位的wire型线网
向量线网与标量线网:scalared 可以对位赋值
vectored不能对位赋值,必须对线网整体赋值
6、变量类型:reg、integer、time、real、realtime
reg [signed][[msb:lsb]] reg1,reg2,...,regN;
未初始化的reg变量的缺省值为x
存储器(memories):由reg变量组成的数组;存储器被赋值时,需要定义一个
索引。
$readmemb 加载二进制值
$readmemh 加载十六进制值
time:用于存储和处理时间值
实型(real)和实型时间(realtime):缺省值为0,不允许对位宽或字界做任何
指定;若将x和z赋予实型变量则这些值将被当作0处理。
7、数组
一维的reg变量数组被称作存储器
不能用一条赋值语句就把某个数组的值赋值给另一个数组
只能对数组的一个元素进行赋值操作
8、reg变量只能在always和initial语句中赋值
wire线网只能用连续赋值语句或通过模块实例的输出端口赋值
初始化后:reg为x;wire为z
9、参数parameter:一个常量,经常用于指定延迟和变量的位宽
和'define的区别:参数是局部的,只在其定义的模块内部起作用;而'define对
同时编译的多个文件起作用。
localparameter 局部参数
10、下划线符号_可以自由地在整数和实数中使用;就数值本身而言,它们没有
任何意义。被用来改进易读性。
用户347575 2011-10-19 21:20