导图社区 Verilog HDL语法
Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。V...
编辑于2023-02-06 15:08:10 广东这是一篇关于FPGA学习-小梅哥的思维导图,FPGA 的集成度很高,其器件密度从数万系统门到数千万系统门不等,适用于高速、高密度的高端数字逻辑电路设计领域。
关键词:功能安全SIL、61508、50126、50128、50129,IN 20500-1988地下采矿铁路.轨距和轨道.标准类型和选择Underground mine railways; track gauges and rails; standard types and selection DIN 20501-1988矿山铁路.S30 钢...
Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。V...
社区模板帮助中心,点此进入>>
这是一篇关于FPGA学习-小梅哥的思维导图,FPGA 的集成度很高,其器件密度从数万系统门到数千万系统门不等,适用于高速、高密度的高端数字逻辑电路设计领域。
关键词:功能安全SIL、61508、50126、50128、50129,IN 20500-1988地下采矿铁路.轨距和轨道.标准类型和选择Underground mine railways; track gauges and rails; standard types and selection DIN 20501-1988矿山铁路.S30 钢...
Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。V...
Verilog HDL语法
概述
简介
硬件描述语言
以文本形式来描述数字系统硬件的结构和行动的语言
可以表示逻辑电路图、逻辑表达式、还可以表示数字逻辑系统完成的逻辑功能。
顶层到底层逐层描述自己的设计思想
常规
静态
注释
单行://
多行:/* */
标识符、关键字
标识符
用于定义模块名,端口名,信号名
是任意符号的组合,但是第一个字符必须是字母或者下划线
标识符区分大小写
代码风格
全部小写
信号命名体现信号含义:oo_xx XX作用于OO
编译指令
特征:以反引号 ` 开始
种类
`define,`undef,`elsif, `else,
类似于 C 语言中的 #define。。。
`include
作用类似于 C 语言中的 #include 结构
`timescale
有具体的单位时间表述
`default_nettype
用于为隐式的线网变量指定为线网类型
`resetall
该编译器指令将所有的编译指令重新设置为缺省值。
`celldefine, `endcelldefine
用于将模块标记为单元模块
`unconnected_drive, `nounconnected_drive
在模块实例化中,出现在这两个编译指令间的任何未连接的输入端口,为正偏电路状态(连接到高电平)或者为反偏电路状态(连接到低电平)。
变量
数值表示 | 数据类型
电平逻辑
逻辑0:表示低电平
逻辑1:表示高电平
逻辑X:表示未知,可能是高也可能是低
逻辑Z:高阻态,外部没有激励信号是一个悬空状态
整数(integer)
实数(real)
字符串
双引号 例:"www.runoob.com"
数据类型
线网(wire)
作用
线网数据类型表示结构实体(例如门)之间的物理连线
线网类型不能存储值,它的值是由驱动它的元件决定的
如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的(悬空),及其值为Z
wire使用在连续赋值语句中,reg用在过程赋值语句(always、initial)中
应用
驱动线网类型变量的元件有门,连续赋值语句,assign等
线网数据类型包括 wire 型和 tri 型,其中最常用的就是 wire 类型
寄存器(reg)
作用
表示一个(抽象)的数据存储单元,通过赋值语句改变寄存器存储的值
关键字是reg
应用
reg类型的数据只能在always语句和initial语句中被赋值
实际在数字电路中例化的
区别
- wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接) - reg表示一定要有触发,输出才会反映输入的状态。
因此在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。
wire一般用在组合逻辑中,reg一般用在时序逻辑中
理解
reg是可主动变化,wire是可被动变化
整数(integer)
关键字:integer
实数(real)
关键字:real
时间(time)
对仿真时间进行保存。其宽度一般为 64 bit
数组
实际使用reg和wire类型
存储器
实际使用reg类型
字符串
实际使用reg类型
参数(parameter)
关键字:parameter ,表示常量(赋值一次)。
应用
参数类型常用于定义状态机的状态,数据位宽和延迟大小等
运算符
类型
算数运算符
加,减,乘,除,求余(%)
关系运算符
>,<,<=,>=,==,!=
逻辑运算符
!,&&(与),||(或)
条件运算符
?:(如果 a 为真,就选择 b ,否则选择 c )
使用方法
a ? b :c
位运算符
~,&,|,^
都是位的操作,按位取反,按位与,按位或,按位异或
移位运算符
<<,>>
拼接运算符
{},{a,b},将a和b拼接在一起,作为一个新信号
运算符的优先级(由高到低)
+ - ! ~
* / %
+,-
<<,>>
<,<=,>,>=
==,!=,===,!==
& ~&
^ ~^
| ~|
&&
||
?
表示逻辑
条件语句
if_else语句
case 语句
使用要求:条件语句必须在过程块中使用(过程快语句是指由initial和always语句引导的块语句)
循环语句
while:当*就*
for:当*就*
repeat:重复*次*事情
forever:一直*
多路分支语句
函数 | function 和 任务 | task
函数
作用域:模块内
任务
概要
特有
时延
时延
相当于延时
惯性时延
指的是延时过程中,数值出现了新的变化。
边沿触发事件控制
一般事件控制
@ 表示,posedge 指信号发生边沿正向跳变,negedge 指信号发生负向边沿跳变
命名事件控制
可以声明 event(事件)类型的变量,并触发该变量来识别该事件是否发生
敏感列表
当多个信号或事件中任意一个发生变化都能够触发语句的执行时,Verilog 中使用"或"表达式来描述这种情况,用关键字 or
电平敏感事件控制
Verilog 中还支持使用电平作为敏感信号来控制时序,即后面语句的执行需要等待某个条件为真。Verilog 中使用关键字 wait 来表示这种电平敏感情况。
设计建模
行为级建模/并行编程 ——使用过程化结构建模
过程结构
过程结构语句(在语句里面是顺序执行的)
initial:从0时刻开始执行,只执行一次
特点
initial语句在模块中只执行一次
用法
常用于测试文件的编写,用来产生仿真测试信号(激励信号),或者用于对存储器变量赋初值
always:用0时刻开始循环执行
特点
always语句为循环,但是只有和一定的时间控制结合在一起才有作用
用法
always的时间控制可以是沿触发,也可以是电平触发,可以是单个信号可以是多个信号,多个信号中间要用关键词 or 连接。
always语句后紧跟的过程块是否运行,要看它的触发条件是否满足
沿触发的always块常常描述时序逻辑行为
由关键词 or 连接的多个事件名或信号名组成的列表称为“敏感列表”
电平触发的always块常常描述组合逻辑行为
如果组合逻辑块语句输入变量很多,那么编写敏感列表会很繁琐并且容易出错
@(*)表示对后面语句块所有输入变量的变化都是敏感的
过程赋值
阻塞和非阻塞
理解:
阻塞:在过程结构语句中的”顺序“
非阻塞:在过程结构语句中的”并行“
非阻塞赋值只能用于对寄存器类型的变量进行赋值,因此只能用在 initial 块和 always 块等过程块中
过程连续赋值 —— 数据流描述 —— 使用连续赋值语句建模
assign(过程赋值操作)
deassign (取消过程赋值操作)
赋值过程中对寄存器连续赋值,寄存器中的值被保留直到被重新赋值。
force (强制赋值操作)
release(取消强制赋值)
语句块
顺序块:顺序执行
begin 和 end 来表示
并行块:并行执行,即使使用阻塞形式的赋值
fork 和 join 来表示
嵌套块
命名块:可给块语句结构,通过层次名引用的方法对变量进行访问。
在语句块在过程结构语句中
数据流描述 —— 使用连续赋值语句建模
关键词:assign,作用与wire数据类型
结构化方式 | 结构建模 ——使用门和模块例化语句描述
Gate(门级)例化语句
UDP (用户定义原语)例化语句
module (模块) 例化语句
例化规则
带参数例化
使用层次访问
特色
状态机设计
了解状态机概念,其实就是软件层面的事了,可例子学习,并不算什么特征。
总结
1||| 用语言(Verilog )去“描述电路结构”(设计Design), 用语言(Verilog )去“描述电路过程”( 功能仿真TestBeanch)