Verilog快速入门知识学习
在服务器的硬件电路设计中都会用到CPLD,主要功能是控制上电时序以及电平之间的转换;那么我们编写代码用什么语言来做了,想必大家都知道用的是Verilog,Verilog不仅可以用在CPLD上,也可以作为FPGA的编程语言,它作为一门硬件语言,也是我们硬件工程师需要掌握的知识。在学习中,我们会走不少弯路,下面我把学习过程中认为能快速入门又是比较重要的知识点总结出来,希望能为初学者提供一些帮忙;
Verilog基础语法
1, 二进制表示如下:4'b0101表示4位二进制数0101;2, 标识符用于定义模块名、端口名、信号名,例如:clk_50;3, 寄存器数据类型,线网数据类型和参数数据类型;reg[31:0] delay_cnt; //延时计数
reg key_reg; //默认位宽为1
Reg类型的数据只能在always语句和initial语句中被赋值;
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则改寄存器变量对应为触发器;
如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则改寄存器变量对应为硬件连线;
3.1线网类型:表示结构实体(例如门)之间的物理连线;
不能存储值,它的值由驱动它的元件所决定;
如果没有驱动元件连接到线网类型的变量上,则改变 量就是高阻,即值为Z;
wire key_flag; //默认位宽为1
3.2参数类型:参数其实就是一个常量,用parameter定义 常量;
parameter H_SYNC = 11'd41; //行同步
parameter H_DISP = 11'd480; //行有效数据
常用于状态机的状态,数据为宽和延迟大小;
4,运算符算术运算符
符号 使用方法 说明
+ a+b a加上b
- a-b a减去b
* a*b a乘以b
/ a/b a除以b //a除以b的整数
% a%b a模除b //a除以b的余数
关系运算符
符号 使用方法 说明
> a>b a大于b
< a<b a小于b
>= a>=b a大于等于b
<= a<=b a小于等于b
== a== b a等于b
!= a!=b a不等于b
逻辑运算符
符号 使用方法 说明
! !a a的非
&& a&&b a与上b
|| a||b a或上b
条件运算符
符号 使用方法 说明
?: a?b:c 如果a为真,就选择b,否则选择c
位运算符
符号 使用方法 说明
~ ~a 将a的每个位进行取反
& a&b 将a的每个位与b相同的位进行相与
| a|b 将a的每个位与b相同的位进行相或
^ a^b 将a的每个位与b相同的位进行相或
(备注:为宽不同时,高位补零)
移位运算符
符号 使用方法 说明
<< a<< b 将a左移b位
>> a>> b 将a右移b位
左移时,位宽增加;右移时,位宽不变;
4'b1001<<2=6'b100100;
4'b1001>> 2=4'b0100;
拼接运算符
符号 使用方法 说明
{} {a,b} 将a和b拼接起来,作为一个新信号;
C={a,b[3:0]}; //假如a和b都是4位,那么c就是8位
运算符优先级:
5,Verilog关键字:关键字 含义
module 模块开始定义
input 输入端口定义
output 输出端口定义
inout 双向端口定义
parameter 信号参数定义
wire wire信号定义
reg reg信号定义
always 产生reg信号语句的关键字
assign 产生wire信号语句的关键字
begin 语句起始标志
end 语句结束标志
edge /posedge/negedge 时序电路的标志
case case语句起始标记
default case语句的默认分支标志
endcase case语句结束标记
if if/else语句标记
else if/else语句标记
for for语句标记
endmodule 模块结束定义
原创:卧龙会 玉京龙