Verilog HDL基础知识
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实 其主要目的是用来编写设计系文件,建立电子系统行为级 的仿真模型。即利用计算机的信巨电 大能力对用Verilog HDL或 成VH符D合L建要模求的且复在杂电数路字结逻江构大辑上学进可行以仿实真现,的然数后字再逻自辑动网综表合以生 (Netlist), 根据网表浙 和某种工艺的器件自动生成具体电
路,然后生成该工艺条件下这种具体电路的延时模型。仿真 验证无误后用于制造ASIC芯片或写入EPLD和FPGA器件中。
0~7,x,z
实 系
8'o305,
7'o12z
电
0~9
信 学
4'd61,45
大
0~ f浙,江x,z
8'hc5, 8'haz, 8‘hcx
不允许用x和z
注意
位宽小于相应数值的实际
位数时,相应的高位部分 被忽略 ,4'd61与4‘b1101相 同。61=(111101)2
二、常量
语法: parameter 参数名1=表达式,参数名2=表达式,…… ;
= = = (全等)
学
(a= =b)=x; (a= = =b)=1
!= = (非全等) 大
江
浙
操作数中的某一位为不定值x或高
阻z,则结果为不定值x
运算符(续2)
类别
运算符
操作数个数 例子或说明
缩减运算符
移位运算符 条件运算符 连接运算符
& (缩减与)
单目
若:reg[3:0] a;
| (缩减或)
则:&a=a[0]&& [1]&& a[2]&& a[3]
第 0章 Verilog HDL
•概述
心
•Verilog HDL的基本结构
中 验
•数据类型及常量、变量
实 系
•运算符
电 信
学
•语句
大
江
•语句的顺序执浙行与并行执行
•Verilog HDL模型级别
§0.1 概述
一、什么是Verilog HDL? 件设V计e人rilo员g 和HD电L子是设一计种自应动用化广(泛E的D硬A验)中件心工描具述之性间语的言界,面是。硬
输,状态表浙 储器之间的物理连接方式
布尔方程 门电路、触发器、锁存器
芯片模块电路 板和物理划分
的子系统 部件之间的物 理连接电路板
底盘等
芯片、宏单元
标准单元布图
电路级 微分方程 晶体管、电阻、电容等 晶体管布图
第4页
4、Verilog HDL语言是并行的,即具有在同一时刻执
行多任务的能力,因为在实际硬件中许多操作都是在
心
例:
中 验
parameter count_bits=8;
实 系
parameter sel=8,code=信8电’ha3;
学
parameter datawidth大=8;addrwidth= datawidth*2;
江
使用常量的目的: 浙
(1)便于阅读,(2)便于修改。(3)模块的通用性
第17页
0.3.2 变量
counter uut (.q(q),
#(100*20) cin=0;
.cout(cout),
#100 cin=1;
.reset(reset),
#(100*5) $stop;
.cin(cin),
end
.clk(clk));
always #50 clk=~clk;
endmodule
第11页
0.3 数据类型及常量、变量
功能说明
常用的寄存器型变量 如触发器、寄存器等
32位带符号整数型变量
心 中
64位带符号实数型变量
纯验数学的抽象描述,不对应 实任何硬件电路。
无符号时间变量
系
电
信
学
大
江
浙
第22页
reg型变量的定义
•语法:
reg 数据1,数据2,……数据n; 心
中
•例子:
验 实
reg a,b
//定义了两个reg型电系变量a,b
浙
true_expression:false_expression;
例,2选1的MUX:
out=sel?in1:in0
心 •常用来表示用assign语句赋值验的中组合逻辑信号。
实 系 电 •取值为:0,1,x(不学定信 值),z(高阻)。 大
时•V,eri自log动H定D义L模为块浙wi江中re的型输变入量/。输出信号类型缺省
注意
第20页
2、wire型变量的定义
•语法:
wire 数据1,数据2,……数据n;中心
验
信
reg[8:1] data //定义大了学八位宽reg型向量
江
reg[7:0] mymem[10浙23:0] //定义1k字节的存储器
注意
二维向量称为存储器变量
第23页
0.4运算符
类别
运算符
操作数个数 例子或说明
算术运算符 + ,- ,* ,/,%(求 双目 模)
17/中3=心5(舍去小数部分) 验9%4=1
其功能,隐藏其具体的细节实现。 心
•提高逻辑设计的效率,降低设计成验本中,更重要的是缩
短设计同期。
实
系
•可读性强,易修改。
电
信
学
注意
大 江
浙
HDL追求对硬件的全面描述,而将HDL描述在目标器件上实现是
由EDA工具软件的综合器完成。受限于目标器件,并不是所有Verilog
HDL语句均可被综合。
第6页
0.2 Verilog HDL的基本结构
~& (缩减与非) ~| (缩减或非)
心 中
^ (缩减异或)
验
^ ~,~ ^ (缩减同或) >>(右移) <<(左移)
实
电系 单目
语法:A>>n或A<<n; 其中n为移位
信
的位数,用0填补空位。
学
若 A=5'b11001,则A>>2为 5'b00110
?:
江大三目
语法:signal=condition?
module counter (q, cout, reset, cin, clk); parameter N=4;
参数:表示计数器的位数
output [N:1] q;
output cout;
输入、输出端口描述
input reset, cin, clk; reg [N:1] q ; // 逻辑功能描述 always @(posedge clk)
心 中
wor,trior
多重驱动时,具有线验或功能的连线型
wand,triand
多重驱动时,具有系实线与功能的连线型
tri1/tri0 supply1/supply0
上电拉源电(阻逻/辑学下1信拉)电电/地阻(逻辑0)
大
江
浙
以下只介绍wire型变量。
第19页
1、wire型变量:
•最常用的nets型变量。
描述设计。
大
江
浙
包括三个领域和五个抽象层次,如下表0.1 所示。
第3页
五个抽象层次
三个领域
行为领域
结构领域
物理领域
系统级
算法级 (芯片 级)
寄存器 传输级
逻辑级
性能描述
部件及它们之间的心逻辑连
接方式
中 验
实
I/O应答算 法级
硬件电模系块数据结构 信
并行操作, A大L学U、多路选择器、寄存
寄存器传 江器、总线微定序器、微存
电
input[N:1]
in0,in1;
信 学
输入、输出端口描述
--描述外部特性
input sel;
大
assign out=sel浙?i江n1:in0;
endmodule
逻辑功能描述 --描述内部特性
程序为模块结构,包含在module与endmodule之间
8 out
第8页
例0.2 4位二进制加法计数器(带同步清0) 1、功能描述:
实 逻辑运算符 &&(与),!(非) 双目/单目
||(或) 位运算符 ~(按位非)
系
电
单目 信
若 A=5'b11001,
& (按位与)
学
B=5'b10101
|^((按按位位或异)或)浙江双大目
~A= 5'b00110 A&B= 5'b10001
来自百度文库^ ~,~ ^ (按位
A^B= 5'b01100
同或)
注意
同一时刻发生的。 一般来讲,计算机编程语言是非并
行的。
心
5、Verilog HDL语言有时序的概验念中,因为在硬件电
路中从输入到输出总是有延迟实存在的。
系
电
信
学
这两点显江示大: Verilog HDL语言与C语言
注意
浙 的最大区别。
第5页
三、为什么要用Verilog HDL?
•电子设计规模越来越大(普通设计已达几百万门的数 量级) ,复杂度越来越高。有必要用高级语言来表达
学
// Outputs
大 wire [4:1] q; 江 wire cout; 浙 // Instantiate the Unit Under Test (UUT)
// Initialize Inputs reset = 0; cin = 0; clk = 0; #100 reset=1; #100 cin=1; #100 reset=0;
0.2.1 简单的Verilog HDL的例子
例0.1 数据选择器
1、功能描述:
输入信号:
心
中 验
MUX
实 sel
•in0、in1均为8位二进制数 •sel为地址信号(1位)
输出信号:
系 电 信 学 大
in0 8 0 in1 8 1
•out为8位二进制数
江
输出、输入关系: 浙
•当sel=0时: out=in0;
•例子:
实
系
wire a,b,c //定义了三个信电wire型变量a,b,c
学
wire[7:0] databus /江/定大义了八位宽wire型向量数据总线
浙
wire[20:1] addrbus //定义了20位宽wire型向量地址总线
第21页
(二)register型:
类型 reg integer real time
一、分类:
•指硬件电路中的各种连接, •输出始终根据输入的变化而 更新其值的变化
网络型(nets type):
心 中
验
系实常指硬件电路中具有状
电态保持作用的器件,如触
信 学
发器、寄存器等
大
寄存器型浙(江register type):
第18页
(一)nets型
最主要类型
类型
功能
wire,tri
连线类型
第2页
二、Verilog HDL语言的主要特征
1、语法结构上,Verilog HDL语言与C语言有许多相似之
处,并借鉴C语言的多种操作符和语法心结构。 中
2结、构V形eri式lo,g H同D时L语也言兼既顾包描含述一硬些件系高电实验层路次具程体序的设线计路语连言接的。
电
3、通过使用结构级或行为学级信 描述可以在不同的抽象层次
某一操作数有不确定值,则结果也是不定值。
运算符(续1)
将x或z看作是一种逻辑状态参与比
较,结果只有0或1两种 。
类别
关系运算符 等式运算符
运算符
操作数个数 例子或中说心明
验
<,<=,>,>=
双目
实
= =(相等) != (不等)
信电系 双目
= =与= = =区别: 例: a=5'b11x01, b= 5'b11x01则:
而当sel=1时:out=in1;
8 out
第7页
2、数据选择器的Verilog HDL源代码
sel
模块名
输入、输出端口列表
in0 8 0 in1 8 1
心
中
module MUX (out, in0,in1, sel); 验
parameter N=8;
参系数实:表示数据位数
output[N:1] out;
并行语句
q
endmodule
& q = q[1] • q[2]K q[ N ]
第10页
3. 在ModelSim中仿真
心
清0
附:测试代码
中
保持
验
实
`timescale 1ns / 1ps module count4_tb_v;
系 电 initial begin
// Inputs
信
reg reset, cin, clk;
心 中 数据类型定义:寄存器型(有保持功能)
实验缺省:wire导线型 系 电时钟上升沿执行下面语句块:描述时序
语句 begin
信
块
描述组 合电路
if (reset) q<=0;//清学0
else q<=
q
+
大 cin浙; 江//计数或保持
reset cin clk
cout 8
end
assign cout=&q && cin; // 进位
常用词法:
心
•Verilog HDL区分大小写。
中 验
实
•Verilog HDL的关键字(如电:系always、and、input等)都
采用小写。
信 学
大
•Verilog HDL的注释江符为:
单行注释符:// 浙
多行注释符:/* …… */
0.3.1 常量
一、数字
十进制可缺省
心
•语法:<位宽> ' <进制> <数值>验中
输入
reset cin clk q*
功能
心 中
reset
验 cin
cout
1×
q*=0 清0系实
clk
8
电
q
00
q*=q 学信保持
大
1
q*江=q+1 计数
浙
进位输出:
当 q 为 最 大 值 ( q==15 ) 且 cin=1 时 , cout=1 ; 否 则 ,
cout=0 。
第9页
2、4位二进制计数器的Verilog HDL源代码
实
系
电
信
对应二进制的宽度
学 大 进制说明:
江 •二进制(b或B) 浙 •八进制(o或O)
•十六进制(h或H)
•十进制(d或D)
•4种进制表示方式:
数制
二进制
进制符号
b或B
八进制 o或O 十进制 d或D 十六进制 h或H
值
例
0,1,x(不定), z(高阻)
8'b中1心1000101, 8'b1010zzzz, 验8'b0101xxxx,7'b1010zzz
路,然后生成该工艺条件下这种具体电路的延时模型。仿真 验证无误后用于制造ASIC芯片或写入EPLD和FPGA器件中。
0~7,x,z
实 系
8'o305,
7'o12z
电
0~9
信 学
4'd61,45
大
0~ f浙,江x,z
8'hc5, 8'haz, 8‘hcx
不允许用x和z
注意
位宽小于相应数值的实际
位数时,相应的高位部分 被忽略 ,4'd61与4‘b1101相 同。61=(111101)2
二、常量
语法: parameter 参数名1=表达式,参数名2=表达式,…… ;
= = = (全等)
学
(a= =b)=x; (a= = =b)=1
!= = (非全等) 大
江
浙
操作数中的某一位为不定值x或高
阻z,则结果为不定值x
运算符(续2)
类别
运算符
操作数个数 例子或说明
缩减运算符
移位运算符 条件运算符 连接运算符
& (缩减与)
单目
若:reg[3:0] a;
| (缩减或)
则:&a=a[0]&& [1]&& a[2]&& a[3]
第 0章 Verilog HDL
•概述
心
•Verilog HDL的基本结构
中 验
•数据类型及常量、变量
实 系
•运算符
电 信
学
•语句
大
江
•语句的顺序执浙行与并行执行
•Verilog HDL模型级别
§0.1 概述
一、什么是Verilog HDL? 件设V计e人rilo员g 和HD电L子是设一计种自应动用化广(泛E的D硬A验)中件心工描具述之性间语的言界,面是。硬
输,状态表浙 储器之间的物理连接方式
布尔方程 门电路、触发器、锁存器
芯片模块电路 板和物理划分
的子系统 部件之间的物 理连接电路板
底盘等
芯片、宏单元
标准单元布图
电路级 微分方程 晶体管、电阻、电容等 晶体管布图
第4页
4、Verilog HDL语言是并行的,即具有在同一时刻执
行多任务的能力,因为在实际硬件中许多操作都是在
心
例:
中 验
parameter count_bits=8;
实 系
parameter sel=8,code=信8电’ha3;
学
parameter datawidth大=8;addrwidth= datawidth*2;
江
使用常量的目的: 浙
(1)便于阅读,(2)便于修改。(3)模块的通用性
第17页
0.3.2 变量
counter uut (.q(q),
#(100*20) cin=0;
.cout(cout),
#100 cin=1;
.reset(reset),
#(100*5) $stop;
.cin(cin),
end
.clk(clk));
always #50 clk=~clk;
endmodule
第11页
0.3 数据类型及常量、变量
功能说明
常用的寄存器型变量 如触发器、寄存器等
32位带符号整数型变量
心 中
64位带符号实数型变量
纯验数学的抽象描述,不对应 实任何硬件电路。
无符号时间变量
系
电
信
学
大
江
浙
第22页
reg型变量的定义
•语法:
reg 数据1,数据2,……数据n; 心
中
•例子:
验 实
reg a,b
//定义了两个reg型电系变量a,b
浙
true_expression:false_expression;
例,2选1的MUX:
out=sel?in1:in0
心 •常用来表示用assign语句赋值验的中组合逻辑信号。
实 系 电 •取值为:0,1,x(不学定信 值),z(高阻)。 大
时•V,eri自log动H定D义L模为块浙wi江中re的型输变入量/。输出信号类型缺省
注意
第20页
2、wire型变量的定义
•语法:
wire 数据1,数据2,……数据n;中心
验
信
reg[8:1] data //定义大了学八位宽reg型向量
江
reg[7:0] mymem[10浙23:0] //定义1k字节的存储器
注意
二维向量称为存储器变量
第23页
0.4运算符
类别
运算符
操作数个数 例子或说明
算术运算符 + ,- ,* ,/,%(求 双目 模)
17/中3=心5(舍去小数部分) 验9%4=1
其功能,隐藏其具体的细节实现。 心
•提高逻辑设计的效率,降低设计成验本中,更重要的是缩
短设计同期。
实
系
•可读性强,易修改。
电
信
学
注意
大 江
浙
HDL追求对硬件的全面描述,而将HDL描述在目标器件上实现是
由EDA工具软件的综合器完成。受限于目标器件,并不是所有Verilog
HDL语句均可被综合。
第6页
0.2 Verilog HDL的基本结构
~& (缩减与非) ~| (缩减或非)
心 中
^ (缩减异或)
验
^ ~,~ ^ (缩减同或) >>(右移) <<(左移)
实
电系 单目
语法:A>>n或A<<n; 其中n为移位
信
的位数,用0填补空位。
学
若 A=5'b11001,则A>>2为 5'b00110
?:
江大三目
语法:signal=condition?
module counter (q, cout, reset, cin, clk); parameter N=4;
参数:表示计数器的位数
output [N:1] q;
output cout;
输入、输出端口描述
input reset, cin, clk; reg [N:1] q ; // 逻辑功能描述 always @(posedge clk)
心 中
wor,trior
多重驱动时,具有线验或功能的连线型
wand,triand
多重驱动时,具有系实线与功能的连线型
tri1/tri0 supply1/supply0
上电拉源电(阻逻/辑学下1信拉)电电/地阻(逻辑0)
大
江
浙
以下只介绍wire型变量。
第19页
1、wire型变量:
•最常用的nets型变量。
描述设计。
大
江
浙
包括三个领域和五个抽象层次,如下表0.1 所示。
第3页
五个抽象层次
三个领域
行为领域
结构领域
物理领域
系统级
算法级 (芯片 级)
寄存器 传输级
逻辑级
性能描述
部件及它们之间的心逻辑连
接方式
中 验
实
I/O应答算 法级
硬件电模系块数据结构 信
并行操作, A大L学U、多路选择器、寄存
寄存器传 江器、总线微定序器、微存
电
input[N:1]
in0,in1;
信 学
输入、输出端口描述
--描述外部特性
input sel;
大
assign out=sel浙?i江n1:in0;
endmodule
逻辑功能描述 --描述内部特性
程序为模块结构,包含在module与endmodule之间
8 out
第8页
例0.2 4位二进制加法计数器(带同步清0) 1、功能描述:
实 逻辑运算符 &&(与),!(非) 双目/单目
||(或) 位运算符 ~(按位非)
系
电
单目 信
若 A=5'b11001,
& (按位与)
学
B=5'b10101
|^((按按位位或异)或)浙江双大目
~A= 5'b00110 A&B= 5'b10001
来自百度文库^ ~,~ ^ (按位
A^B= 5'b01100
同或)
注意
同一时刻发生的。 一般来讲,计算机编程语言是非并
行的。
心
5、Verilog HDL语言有时序的概验念中,因为在硬件电
路中从输入到输出总是有延迟实存在的。
系
电
信
学
这两点显江示大: Verilog HDL语言与C语言
注意
浙 的最大区别。
第5页
三、为什么要用Verilog HDL?
•电子设计规模越来越大(普通设计已达几百万门的数 量级) ,复杂度越来越高。有必要用高级语言来表达
学
// Outputs
大 wire [4:1] q; 江 wire cout; 浙 // Instantiate the Unit Under Test (UUT)
// Initialize Inputs reset = 0; cin = 0; clk = 0; #100 reset=1; #100 cin=1; #100 reset=0;
0.2.1 简单的Verilog HDL的例子
例0.1 数据选择器
1、功能描述:
输入信号:
心
中 验
MUX
实 sel
•in0、in1均为8位二进制数 •sel为地址信号(1位)
输出信号:
系 电 信 学 大
in0 8 0 in1 8 1
•out为8位二进制数
江
输出、输入关系: 浙
•当sel=0时: out=in0;
•例子:
实
系
wire a,b,c //定义了三个信电wire型变量a,b,c
学
wire[7:0] databus /江/定大义了八位宽wire型向量数据总线
浙
wire[20:1] addrbus //定义了20位宽wire型向量地址总线
第21页
(二)register型:
类型 reg integer real time
一、分类:
•指硬件电路中的各种连接, •输出始终根据输入的变化而 更新其值的变化
网络型(nets type):
心 中
验
系实常指硬件电路中具有状
电态保持作用的器件,如触
信 学
发器、寄存器等
大
寄存器型浙(江register type):
第18页
(一)nets型
最主要类型
类型
功能
wire,tri
连线类型
第2页
二、Verilog HDL语言的主要特征
1、语法结构上,Verilog HDL语言与C语言有许多相似之
处,并借鉴C语言的多种操作符和语法心结构。 中
2结、构V形eri式lo,g H同D时L语也言兼既顾包描含述一硬些件系高电实验层路次具程体序的设线计路语连言接的。
电
3、通过使用结构级或行为学级信 描述可以在不同的抽象层次
某一操作数有不确定值,则结果也是不定值。
运算符(续1)
将x或z看作是一种逻辑状态参与比
较,结果只有0或1两种 。
类别
关系运算符 等式运算符
运算符
操作数个数 例子或中说心明
验
<,<=,>,>=
双目
实
= =(相等) != (不等)
信电系 双目
= =与= = =区别: 例: a=5'b11x01, b= 5'b11x01则:
而当sel=1时:out=in1;
8 out
第7页
2、数据选择器的Verilog HDL源代码
sel
模块名
输入、输出端口列表
in0 8 0 in1 8 1
心
中
module MUX (out, in0,in1, sel); 验
parameter N=8;
参系数实:表示数据位数
output[N:1] out;
并行语句
q
endmodule
& q = q[1] • q[2]K q[ N ]
第10页
3. 在ModelSim中仿真
心
清0
附:测试代码
中
保持
验
实
`timescale 1ns / 1ps module count4_tb_v;
系 电 initial begin
// Inputs
信
reg reset, cin, clk;
心 中 数据类型定义:寄存器型(有保持功能)
实验缺省:wire导线型 系 电时钟上升沿执行下面语句块:描述时序
语句 begin
信
块
描述组 合电路
if (reset) q<=0;//清学0
else q<=
q
+
大 cin浙; 江//计数或保持
reset cin clk
cout 8
end
assign cout=&q && cin; // 进位
常用词法:
心
•Verilog HDL区分大小写。
中 验
实
•Verilog HDL的关键字(如电:系always、and、input等)都
采用小写。
信 学
大
•Verilog HDL的注释江符为:
单行注释符:// 浙
多行注释符:/* …… */
0.3.1 常量
一、数字
十进制可缺省
心
•语法:<位宽> ' <进制> <数值>验中
输入
reset cin clk q*
功能
心 中
reset
验 cin
cout
1×
q*=0 清0系实
clk
8
电
q
00
q*=q 学信保持
大
1
q*江=q+1 计数
浙
进位输出:
当 q 为 最 大 值 ( q==15 ) 且 cin=1 时 , cout=1 ; 否 则 ,
cout=0 。
第9页
2、4位二进制计数器的Verilog HDL源代码
实
系
电
信
对应二进制的宽度
学 大 进制说明:
江 •二进制(b或B) 浙 •八进制(o或O)
•十六进制(h或H)
•十进制(d或D)
•4种进制表示方式:
数制
二进制
进制符号
b或B
八进制 o或O 十进制 d或D 十六进制 h或H
值
例
0,1,x(不定), z(高阻)
8'b中1心1000101, 8'b1010zzzz, 验8'b0101xxxx,7'b1010zzz