FPGA Verilog语言常用语法

本文介绍FPGA Verilog语言语法知识。

1. 逻辑值,Verilog语言中有四种逻辑值,分别代表4中逻辑状态,逻辑1:高电平状态、逻辑0:低电平状态、逻辑X:不定状态、逻辑Z:高阻状态。

2. 标志符,Verilog语言中的标志符用于定义模块名、端口号、信号名等,注意标识符的定义是区分大小写的。

3. 数字的基数表示法:Verilog语言常用基数表示法表示数字,例如4’b1010表示二进制数据1010,其中4表示数据占4个bit位,4’h9表示16禁止数字9,4'o8表示8进制数字8,4‘d2表示10进制数字2.

4. 数据类型,Verilog语言中数据类型包括,寄存器类型、网线类型、参数类型三种,其中寄存器类型表示一个数据存储单元,只能在always语句和initial语句中被赋值,常用寄存器类型是reg,使用方法如下:reg [31:0] delay;表示一个32位寄存器。网线类型表示逻辑单元之间的物理连线,常用的是wire,使用方法如下:wire [7:0] data; 参数类型表示一个常量,例如parameter STATUS=1;

常用于表示状态机的状态。

5. 运算符 ,Verilog算术运算符:+ 、-、*、/、%  关系运算符:> 、< 、== 、>=、<= 、!=  逻辑运算符:&& 、||、!条件运算符:

?: 位运算符:^、&、|、~移位运算符:<<、>>拼接运算符{}。

6. 运算符优先级:

FPGA Verilog语言常用语法_第1张图片

7. 常用关键字:

FPGA Verilog语言常用语法_第2张图片

8. 堵塞赋值(=)与非堵塞赋值(<=),堵塞赋值只有在上一条赋值语句结束时,下一条语句才会执行,非堵塞赋值,在一个时钟周期下,位于同一个begin end 逻辑块内的表达式全部被赋值。一般堵塞赋值用于assign语句和不带时钟的assign语句,非堵塞赋值用于带时钟的assign语句,即组合逻辑电路使用堵塞赋值,时序逻辑电路使用非堵塞赋值。

9.always与assign语句,assign 表示组合逻辑电路的起始,always语句,当输入带时钟信号时,表示时序逻辑电路,不带时钟信号时表示组合逻辑电路,复杂的组合逻辑电路推荐使用always.

10.latch  容易引发毛刺,应该尽量规避。latch只在组合逻辑电路中会出现,比如不带是时钟信号的always语句中,如果if  结构缺少else 或 case 结构缺少default。

11.  凡是在initial语句和always语句中被赋值得变量一定是reg类型,凡是在assign语句中被赋值得变量一定是wire类型。

12. 在仿真测试文件中,输入信号一定是reg类型,输出信号一定是wire类型。

13.对于组合逻辑电路使用阻塞赋值(=)例如assign语句和不带时钟得always语句。对于时序逻辑电路使用非阻塞赋值(<=)例如带时钟得assign语句。

14. 在仿真测试文件中,时钟信号的初始值为1,且使用阻塞赋值,注意非阻塞赋值只能用于对寄存器变量进行赋值操作,因此只能用于initial和always语句中,不能用于assign语句中。

15.编写时序逻辑电路,使用带时钟的always语句,要使用非阻塞赋值,编写组合逻辑电路,推荐使用不带时钟的always语句,要使用阻塞赋值,一般建议在always语句中一次只对一个变量赋值。

 

 

你可能感兴趣的:(杂记)