Verilog语法总结

  • 格式:docx
  • 大小:147.64 KB
  • 文档页数:8

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Verilog语法总结

数电基础

能够存储1位二值信号的基本单元电路统称为触发器。

根据逻辑功能的不同特点,可以将数字电路分成两大类:

组合逻辑电路和时序逻辑电路。

组合逻辑电路中,任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。

时序逻辑电路中,任一时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态。或者说还与以前的输入有关,因此时序逻辑必须具备记忆功能。

组合逻辑电路时序逻辑电路

逻辑值

逻辑0:表示低电平,也就对应我们电路GND;

逻辑1:表示高电平,也就是对应我们电路的

VCC;

逻辑X:表示未知,有可能是高电平,也有可能

是低电平;

逻辑Z:表示高阻态,外部没有激励信号,是一

个悬空状态。

数字进制格式

Verilog数字进制格式包括二进制、八进制、十进

制和十六进制。

一般常用的为二进制、十进制和十六进制。

二进制表示如下:4’b0101 表示4位二进制数字0101

十进制表示如下:4’d2 表示4位十进制数字2(二进制0010)

十六进制表示如下:4’ha 表示4位十六进制数字a(二进制1010)

16’b1001_1010_1010_1001 = 16’h9AA9

第一个表示用几个二进制位可以表示、’为语法、b为二进制,d为十进制,h为16进制,后面则表示要输出输入的字。(括号内为二进制表示,因为最终在计算机中都会变为二进制表示)

标识符

标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合;

但标识符的第一个字符必须是字母或者下划线;

标识符是区分大小写的;

数据类型

在Verilog 语言中,主要有三大类数据类型:寄存器数据类型、线网数据类型和参数数据类型。

寄存器类型:

寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器储存的值寄存器数据类型的关键字是reg,reg 类型数据的默认初始值为不定值x

reg类型的数据只能在always 语句和initial 语句中被赋值。

如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;

如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线;

线网类型:

线网数据类型表示结构实体(例如门)之间的物理连线。线网类型的变量

不能储存值,它的值是由驱动它的元件所决定的。

驱动线网类型变量的元件有门、连续赋值语句、assign等。

如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为z

参数类型:

参数其实就是一个常量,在Verilog HDL 中用parameter 定义常量。我们可以一次定义多个参数,参数与参数之间需要用逗号隔开。每个参数定义的右边必须是一个常数表达式。

参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。

采用标识符来代表一个常量可以提高程序的可读性和可维护性。

在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。

运算符

两种移位运算都用0来填补移出的空位。左移时,位宽增加;右移时,位宽不变。4’b1001 << 2 = 6’b100100;

4’b1001 >> 1 = 4’b0100;

常用的关键字

if if/else语句标记

else if/else语句标记

for for语句标记

endmodule模块结束定义

模块的结构

Verilog 的基本设计单元是“模块”(block)。

一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能。

initial 和always

initial 语句它在模块中只执行一次。

它常用于测试文件的编写,用来产生仿真测试信号(激励信号),或者用于对存储器变量赋初值

always 语句一直在不断地重复活动。

但是只有和一定的时间控制结合在一起才有作用。

always 的时间控制可以是沿触发,也可以是电平触发;

可以是单个信号,也可以是多个信号,多个信号中间要用关键字or 连接。always 语句后紧跟的过程块是否运行,要看它的触发条件是否满足。

沿触发的always 块常常描述时序逻辑行为。

由关键词or 连接的多个事件名或信号名组成的列表称为“敏感列表”。

电平触发的always 块常常描述组合逻辑行为。

如果组合逻辑块语句的输入变量很多,那么编写敏感列表会很烦琐并且容易出错。

@( * )表示对后面语句块中所有输入变量的变化都是敏感的。

赋值语句

阻塞赋值可以认为只有一个步骤的操作:

即计算RHS 并更新LHS 。

非阻塞赋值的操作过程可以看作两个步骤:

(1) 赋值开始的时候,计算RHS ;

(2) 赋值结束的时候,更新LHS 。

在描述组合逻辑的always 块中用阻塞赋值= ,综合成组合逻辑的电路结构;这种电路结构只与输入电平的变化有关系。

在描述时序逻辑的always 块中用非阻塞赋值<=,综合成时序逻辑的电路结构;这种电路结构往往与触发沿有关系,只有在触发沿时才可能发生赋值的变化。

注意:在同一个always块中不要既用非阻塞赋值又用阻塞赋值

不允许在多个always块中对同一个变量进行赋值!