本文主要是介绍跟我一起学FPGA (二) 语法讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本章讲解
1 、Verilog 概述和基础知识;2 、Verilog 程序框架和高级知识点;3 、Verilog 编程规范。
1.Verilog 概述和基础知识
Verilog 是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能.
verilog的逻辑值:逻辑 0 :表示低电平,也就是对应我们电路的 GND ;逻辑 1 :表示高电平,也就是对应我们电路的 VCC ;逻辑 X :表示未知,有可能是高电平,也有可能是低电平;逻辑 Z :表示高阻态,外部没有激励信号是一个悬空状态。
verilog标识符
标识符 (identifier )用于定义模块名、端口名和信号名等。Verilog 的标识符可以是任意一组字母、数 字、$ 和 _( 下划线 ) 符号的组合。1. 标识符的第一个字符必须是字母或者下划线。2. 区分大小写。不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写,另外信号命名最好体现信 号的含义。
Verilog 的数字进制格式
二进制表示如下: 4’b0101 表示 4 位二进制数字 0101 ;十进制表示如下: 4’d2 表示 4 位十进制数字 2 (二进制 0010 );十六进制表示如下: 4’ha 表示 4 位十六进制数字 a (二进制 1010 ),十六进制的计数方式为 0 , 1 , 2…9, a , b , c , d , e , f ,最大计数为 f ( f :十进制表示为 15 )。当代码中没有指定数字的位宽与进制时,默认为 32 位的十进制,比如 100,实际上表示的值为 32’d100
Verilog 的数据类型
寄存器类型、线网类型和参数类型
寄存器类型
表示一个抽象的数据存储单元,它只能在 always 语句和 initial 语句中被赋值。
//reg definereg [ 31 : 0 ] delay_cnt ; //延时计数器reg key_flag ; //按键标志线网类型Verilog 结构化元件间的物理连线。它的值由驱动元件的值决定。其中最常用的就是 wire 类型//wire definewire data_en ; //数据使能信号wire [ 7 : 0 ] data ; //数据参数类型参数其实就是一个常量,常被用于定义状态机的状态、数据位宽和延迟大小等。//parameter defineparameter DATA_WIDTH = 8 ; //数据位宽为8位
Verilog 的运算符
七种:1 、算术运算符、 2 、关系运算符、 3 、逻辑运算符、4 、条件运算符、 5 、位运算符、6 、移位运算符、 7 、拼接运算符
2.Verilog 程序框架
关键字
程序框架
3.Verilog 高级知识点
阻塞赋值(Blocking)
阻塞赋值,顾名思义,即在一个 always 块中,后面的语句会受到前语句的影响,具体来说,在同一个 always 中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被 “ 阻塞 ” 。阻塞赋值 “= ” 在 begin 和 end 之间的语句是顺序执行,属于串行语句非阻塞赋值(Non-Blocking)
符号“<=”用于非阻塞赋值(如:b <= a;)
非阻塞赋值是由时钟节拍决定,在时钟上升到来时,执行赋值语句右边,然后将 begin-end 之间的所有赋值语句同时赋值到赋值语句的左边。注意:是 begin—end 之间的所有语句,一起执行,且一个时钟只执行一次,属于并行执行语句。区分
在描述组合逻辑电路的时候,使用阻塞赋值,比如 assign 赋值语句和不带时钟的 always 赋值语句。这种电路结构只与输入电平的变化有关系。
在描述时序逻辑的时候,使用非阻塞赋值。
assign 和 always 区别
assign 语句使用时不能带时钟。always 语句可以带时钟,也可以不带时钟。在 always 不带时钟时,逻辑功能和 assign 完全一致,都是 只产生组合逻辑。比较简单的组合逻辑推荐使用 assign 语句,比较复杂的组合逻辑推荐使用 always 语句。
latch 锁存器
是一种对脉冲电平敏感的存储单元电路。锁存器和寄存器都是基本存储单元:锁存器是电平触发的存储器,组合逻辑产生的。寄存器是边沿触发的存储器,时序电路中使用,由时钟触发产生的。latch 的主要危害是会产生毛刺(glitch),这种毛刺对下一级电路是很危险的。并且其隐蔽性很强, 不易查出。因此,在设计中,应尽量避免 latch 的使用。
状态机
状态机相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。
4.Verilog 编程规范
工程组织形式
工程的组织形式一般包括如下几个部分,分别是 doc、par、rtl 和 sim 四个部分。
doc:一般存放工程相关的文档
par:主要存放工程文件和使用到的一些 IP 文件;
rtl:主要存放工程的 rtl 代码,这是工程的核心,文件名与 module 名称应当一致。sim:主要存放工程的仿真代码
文件头声明
每一个 Verilog 文件的开头,都必须有一段声明的文字。包括文件的版权,作者,创建日期以及内容介绍等。我们建议一个.V 只包括一个 module ,这样模块会比较清晰易懂。
这篇关于跟我一起学FPGA (二) 语法讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!