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. 运算符优先级:
文章图片
7. 常用关键字:
文章图片
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语句中一次只对一个变量赋值。
【FPGA Verilog语言常用语法】
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- C语言解方程的根和判断是否是闰年
- C语言的版本比较
- 【C】题目|【C语言】题集 of ⑥
- echart|echart 双轴图开发