CH2:Verilog HDL基础

171 阅读4分钟

注意:语法集和C语言几乎完全一样,但是设计方法和C完全不一样(从根本上不同)

Verilog HDL语言要素

空白符

空格符(\b)、制表符(\t)、换行符、换页符。编译和综合时被忽略。

作用:提高代码易读性


注释符

单行://

多行:/* */

所有的注释用英文(EDA工具对中文支持不好)


标识符

用来命名信号名、模块名、参数名等。

规则:

  • 任意一组字母、数字、$、_(下划线)的组合;
  • 区分大小写
  • 首字符必须是字母或下划线

转义标识符:以\开头,空白符结尾(可以是\b、\t或换行),如:\a+b-c


关键字

见课本2.1.4


数值

状态含义
0低电平、逻辑”0“、假
1高电平、逻辑”1“、真
x/X不确定或未知的逻辑状态
z/Z高阻态
数制基数符号合法表示符
二进制b/B0、1、x、X、z、Z、?、_
八进制o/O0-7、x、X、z、Z、?、_
十进制d/D0-9、_
十六进制h/H0-9、a-f、A-F、x、X、z、Z、?、_
  • 整数及其表示: +/-< size > ’ <base_format>< number >

    1. 正负号。数值可以用补码
    2. size:位数。标准的写法,建议都把size写上。
    3. base_format: 基数符号
    4. number:对应的数字(过长可以使用_分割以增强易读性)

几个例子:

 //正确表示(课本例2.1-6):
 8'b10001101   //8位二进制数:10001101
 8'ha6       //8位十六进制数:a6
 5'o35       //5位八进制数:35
 4'd6        //4位十进制数:6
 4'b1x_01    //4位二进制数:1x01
 ​
 //错误表示(课本例2.1-7):
 4'd-4       //符号出现在数值位,有符号应该放在最左边
 3' b001     //'和基数之间不能有空格
 (4+4)'b11   //size不能是表达式
  • 实数及其表示(也允许使用_):

    (1)十进制表示法:十进制格式。小数点两边必须有数字,如3.0是正确的,5.和.3就是错误的

    (2)科学计数法:同C



数据类型

信号强度表示数字电路不同的驱动源,用来解决不同驱动强度下的赋值冲突:(???)

标识符名称类型
supply电源级驱动驱动
strong强驱动驱动
pull上拉级驱动驱动
large大容性存储
weak弱驱动驱动
medium中性驱动存储
small小容性存储
highz高容性高阻

强弱程度:从supply到highz依次递减。


物理数据类型


连线型

数据类型功能说明
wire,tri标准线型(缺省为该类型)
wor,trior多重驱动时,具有线或特性的连线型
wand,trand多重驱动时,具有线与特性的连线型
trireg具有电荷保持特性的连线型类型(特例)
tri1上拉电阻
tri0下拉电阻
supply1电源线,用于对电源建模,为高电平1
supply0电源线,用于对”地“建模,为低电平0

声明:

<net_declaration>[list_of_variables];

net_declaration:见上表。

drive-strength:连线变量的驱动强度。

range:指定数据为标量或矢量。默认为1位的标量,超过1位为矢量。

delay:仿真延迟时间。

list_of_variables:变量名称,一次可定义多个名称,用逗号分隔。


寄存器型

reg型是数据存储单元的抽象类型,其对应的硬件电路单元具有状态保持作用,能够存储数据,如触发器、锁存器。

常用于行为级描述(?),由过程赋值语句对其进行描述。

定义:

reg [x:x] 名称; 如果没有用中括号定义位数,就是一位变量。

一般为无符号数,若将一个负数赋值给reg变量,则自动转为其补码类型。

声明:

reg<list_of_register_variables>:

range:可选项,指定range的位宽,缺省为1位。

list_of_register_variables:变量名称列表,一次可定义多个名称,用逗号分隔。


存储器型

可描述RAM、ROM类型存储器以及reg文件。

声明:

reg<name_of_register>;

range1和range2是可选项,缺省是1。

range1:表示存储器中寄存器的位宽,格式:[msb:lsb]。

range2:表示寄存器的个数,格式:[msb:lsb],即有msb-lsb+1个。

name_of_register:一次可定义多个名称,用逗号分隔。


抽象数据类型

整型(integer)、时间型(time)、实型(real)、参数型(parameter)