概述
Verilog HDL基础知识
- 一、Verilog HDL简介
- 1、什么是HDL?
- 2、什么是Verilog?
- 3、Verilog基础
- 二、数据类型
- 1、寄存器类型
- 2、线网类型
- 3、参数类型
- 三、运算符
- 1、算术运算符
- 2、关系运算符
- 3、逻辑运算符
- 4、条件运算符
- 5、位运算符
- 6、移位运算符
- 7、拼接运算符
一、Verilog HDL简介
1、什么是HDL?
数字系统设计的流程:
(1)逻辑设计(前端)
① HDL(Hardware Description Language),硬件描述语言,用于描述数字电路结构和功能的语言。
② HDL可以在不同层次对数字电路的结构、功能和行为进行描述。
(2)电路实现(后端)
HDL所描述的电路可以通过综合工具将其转换为门级电路网表,然后将其与某种工艺的基本元件逐一对应起来,再通过布局布线工具转换为电路布线结构。
2、什么是Verilog?
常见的硬件描述语言:Verilog HDL和VHDL。
美国和中国的集成电路设计公司常用Verilog HDL,而欧洲常用VHDL,相比较而言,Verilog HDL比VHDL更灵活,适合初学者学习。
(1)Verilog标准
Verilog语言最初于1983年由Gateway Design Automation 公司为其模拟器产品开发的硬件建模语言。
Verilog语言于1995年成为IEEE标准,称为IEEE Std 1364 -1995,也就是常说的Verilog-95。
Verilog-2001是对Verilog-95的重大改进版本。
(2)Verilog与C语言的区别
① Verilog是硬件描述语言,编译下载到FPGA后,会生成电路,所以Verilog是并行运行的;
② C语言是软件编程语言,编译下载到单片机后,是存储器中的一组指令。单片机处理软件指令需要取指、译码、执行,这个过程是串行执行的;
③ Verilog与C语言的区别也就是FPGA和单片机/CPU的区别。
3、Verilog基础
(1)数值
① 逻辑值
状态 | 含义 |
---|---|
0 | 低电平、逻辑0或“假” ,对应电路GND |
1 | 高电平、逻辑1或“真” ,对应电路VCC |
x | 不确定或未知的逻辑状态,可能是高电平,也可能是低电平 |
z | 高阻态,外部没有激励信号,是一个悬空状态 |
② 进制
数制 | 基数符号 | 举例 |
---|---|---|
二进制 | b | 4’b0101表示4位二进制数字0101 |
十进制 | o | 4’d2表示4位十进制数字2(二进制0010) |
十六进制 | h | 4’ha表示4位十六进制数字a(二进制1010) |
(2)标识符
标识符用于定义模块名、端口名、信号名等。
① 标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合;
② 标识符第一个字符必须是字母或下划线;
③ 标识符区分大小写。
(3)常用关键字
关键字 | 含义 | 关键字 | 含义 |
---|---|---|---|
module | 模块开始定义 | begin | 语句的起始标志 |
input | 输入端口定义 | end | 语句的结束标志 |
output | 输出端口定义 | case | case语句的起始标记 |
inout | 双向端口定义 | default | case语句的默认分支标志 |
parameter | 信号参数定义 | endcase | case语句的结束标记 |
wire | wire信号定义 | if | if/else语句标记 |
reg | reg信号定义 | else | if/else语句标记 |
always | 产生reg信号语句的关键字 | for | for语句标记 |
assign | 产生wire信号语句的关键字 | endmodule | 模块结束定义 |
posedge/negedge | 上升沿/下降沿,时序电路的标志 | integer | 有符号数 |
二、数据类型
Verilog语言中,主要有三大数据类型:
寄存器数据类型、线网数据类型和参数数据类型。
1、寄存器类型
(1)寄存器表示一个抽象的数据存储单元,通过赋值语句assign可以改变寄存器存储的值。关键字是reg,默认初始值为x;
(2)reg类型的数据只能在always语句和initial语句中被赋值。
①如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;
②如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线;
(3)例如:reg [31:0] delay_cnt;
reg表示数据存储类型为reg, [31:0] 表示数据存储位宽为32位,delay_cnt为数据名称(由标识符构成)。
2、线网类型
(1)线网数据类型表示结构实体(例如门)之间的物理连线,线网类型的变量不能存储值,它的值由驱动它的元件所决定。
(2)驱动线网类型变量的元件有门、连续赋值语句、assign等。如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,其值为x。
(3)最常用线网类型是wire类型,例如:wire [3:0] key;
wire表示数据存储类型为wire, [3:0] 表示数据存储位宽为4位,key为数据名称(由标识符构成)。
3、参数类型
(1)参数其实就是一个常量,关键字是parameter,每个参数定义的右边必须是一个常数表达式。
(2)参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。
(3)在模块调用时,可以通过参数传递来改变被调用模块中已定义的参数。
(4)例如:parameter H_BACK = 11’d2;
parameter表示数据存储类型为parameter, H_BACK 为数据名称(由标识符构成),11表示数据位宽为11位(二进制),d表示数据类型为十进制,2表示十进制的数字2。
三、运算符
1、算术运算符
符号 | 使用方法 | 说明 |
---|---|---|
+ | a+b | a加上b |
- | a-b | a减去b |
* | a*b | a乘以b |
/ | a/b | a除以b |
% | a%b | a模除b |
2、关系运算符
符号 | 使用方法 | 说明 |
---|---|---|
> | a>b | a大于b |
< | a<b | a小于b |
<= | a<=b | a小于等于b |
>= | a>=b | a大于等于b |
== | a==b | a等于b |
!= | a!=b | a不等于b |
3、逻辑运算符
符号 | 使用方法 | 说明 |
---|---|---|
! | ! a | a的非,如果a为0,那么a的非是1 |
&& | a && b | a与b,如果a和b都为1,a && b结果为1,表示真 |
ll | a ll b | a或b,如果a或者b有一个为1,a ll b结果为1,表示真 |
4、条件运算符
符号 | 使用方法 | 说明 |
---|---|---|
? : | a ? b : c | 如果a为真,选择b,否则选择c |
5、位运算符
符号 | 使用方法 | 说明 |
---|---|---|
~ | ~ a | 将a的每个位进行取反 |
& | a & b | 将a的每个位与b相同的位进行相与 |
l | a l b | 将a的每个位与b相同的位进行相或 |
^ | a ^ b | 将a的每个位与b相同的位进行异或 |
6、移位运算符
符号 | 使用方法 | 说明 |
---|---|---|
<< | a << b | 将a左移b位 |
>> | a >> b | 将a右移b位 |
例如:4’b1001 << 2 = 6’b100100;
4’b1001 >> 2 = 4’b0010;
7、拼接运算符
符号 | 使用方法 | 说明 |
---|---|---|
{ } | {a , b} | 将a和b拼接起来,作为一个新信号 |
例如:c = { a , b[3:0] };
最后
以上就是完美小懒猪为你收集整理的Verilog HDL语法篇1一、Verilog HDL简介二、数据类型三、运算符的全部内容,希望文章能够帮你解决Verilog HDL语法篇1一、Verilog HDL简介二、数据类型三、运算符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复