FPGA学习——Verilog语法

简介

(一)概述
Verilog是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,可表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
数字电路设计者利用这种语言,可以从顶层到底层逐层描述自己的设计思想,用一系列的模块来表示及其复杂的数字系统。然后利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下来,再用专用集成电路ASIC或FPGA自动布局布线工具,把网表转换为要实现的具体电路结构。
(二)与C的区别
Verilog是硬件描述语言,在编译下载到FPGA之后,会生成电路,所以Verilog全部是并行处理和运行的;
C语言是软件语言,编译下载到单片机后,还是软件指令,单片机处理软件指令需要取址、译码、执行,是串行执行的;

Verilog基础知识

(一)逻辑值
逻辑0:低电平
逻辑1:高电平
逻辑X:表示未知,可能高电平也可能低电平
逻辑Z:表示高阻态,外部没有激励信号是一个悬空状态

(二)数字进制格式
二进制:4’b0101表示4位二进制数字0101
十进制:4’d2表示4位十进制数字2(二进制0010)
十六进制:4’ha表示4位十六进制数字a(二进制1010)
若代码中没有指定数字的位宽与进制时,默认为32位的十进制,比如100,实际上表示的值为32’d100

(三)数据类型
真正在数字电路中起作用的数据类型应该是寄存器类型和线网类型。
1.寄存器类型
寄存器类型表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值过程中被保存下来。如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为寄存器;如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线;寄存器类型的缺省值时x(未知状态)

//reg define
reg	[31:0]	delay_cnt;	//延时计数器

2.线网类型
表示Verilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。若没有驱动元件连接到线网,线网的缺省值为z(高阻态)

//wire define
wire		[7:0]		data;		//数据

3.参数类型
常量,常用于定义状态机的状态、数据位宽和延迟大小等。参数的定义是局部的,只在当前模块中有效。

//parameter define
parameter 	DATA_EIDTH=8;	//数据位宽为8位

(四)运算符
其他都与C语言相通,除了拼接运算符

{a,b}		//将a和b拼接起来,作为一个新信号

Verilog程序框架

(一)关键字
FPGA学习——Verilog语法_第1张图片
(二)程序框架
……

Verilog高级知识点

(一)阻塞赋值和非阻塞赋值
阻塞赋值(=):在begin和end之间的语句是顺序执行;
非阻塞赋值(<=):由时钟节拍决定,在时钟上升沿来时,执行赋值语句右边,然后将begin-end之间的所有赋值语句同时赋值到赋值语句左边;
总结:组合逻辑电路使用阻塞赋值;时序逻辑电路使用非阻塞赋值

(二)assign和always的区别
assign使用时不能带时钟。
always可以带时钟,也可以不带时钟,不带时钟时,逻辑功能和assign完全一致,都是只产生组合逻辑。

总结自正点原子教程

你可能感兴趣的:(FPGA学习系列)