第2讲 Verilog HDL层次建模
verilog第二章简单的Verilog模块

and #1 u2(sela, a, nsl);
and #1 u3(selb, b, sl);
or #1 u4(out, sela, selb);
endmodule
/*一个名为adder的三位加法器的例子。*/
module adder ( count,sum,a,b,cin ); //模块定义开始
// 选择逻辑组合
2.2.2 模块的概念
一个设计是由一个个模块构成的。一个模块的设计如下:
1 模块内容是嵌套在module和endmodule两个语句之间。每个
模块实现特定的功能,模块是可以进行层次嵌套的。正因为
如此,才可以将大型的数字电路设计分割成不同的小模块来
实现特定的功能,最后通过顶层模块调用子模块来实现整体
endmodule
数据流语句
▪这个例子描述了一个三位的加法器。从例子中可以看出整个
Verilog HDL程序是嵌套在module和endmodule声明语句里
的,只出现了一个assign语句。
例SR触发器模块
S
Q
//SR 触发器
module SR_FF (Q, Q_n,S,R);
R
Q_n
output Q, Q_n; //端口声明
input S,R;
nand n1(Q, S,Q_n);
nand n2(Q_n,R,Q);
nand为verilog
中的与非门门级
原语部件
endmodule
模块中的5个部分并没全部出现,只出现在
低层次模块实例化
D触发器模块
//D 触发器
module D_FF (d, clk,clr,q,qb);
Verilog-HDL的建模

第四章 Verilog-HDL的建模1.内容回顾通常认为,给硬件建模的模型可以分为5个层次:▪系统级和算法级建模通常是软件工程师用C语言开发的软件模型,目的在于验证设计思想是否正确。
HDL也能做一些算法级建模的工作,但是有很多算法描述不被综合工具支持。
▪行为级建模主要考虑一个模块的抽象功能描述,而不考虑其具体以实现(具体电路结构由综合工具得到)。
▪门级模型是对电路结构的具体描述,主要是描述与、或、非等基本门电路的连接方式。
▪开关级模型是把最基本的MOS晶体管连接起来实现电路功能。
注:这5个层次从高到低越来越接近硬件。
Verilog HDL有两种建模方法:结构建模方法和行为建模方法。
结构建模方法是对电路具体结构的描述:1.调用Verilog内置门元件(门级结构描述)2.调用开关级元件(晶体管级结构描述)3.用户自定义元件UDP(也在门级)4.子模块调用行为建模方法是对电路功能的描述1.数据流行为建模2.顺序行为建模2.结构建模结构建模是对电路具体结构的描述,是一种比较底层的方法。
简单说,就是把所需要的基本电路单元(逻辑门、MOS开关等)调出来,再用连线把这些基本单元连接起来。
(调用、连线)。
2.1 内置的基本单元Verilog HDL为门级电路建模提供了26个内置基本单元,分类如下:多输入门:and, nand, or, nor, xor, xnor多输出门:buf, not三态门: bufif0, bufif1, notif0, notif1上拉、下拉电阻:pullup, pulldownMOS开关:cmos, nmos, pmos, rcmos, rnmos, rpmos双向开关:tran,tranif0, tranif1, rtran, rtranif0, rtranif1注:多输入门、多输出门和三态门构成Verilog-HDL的内置基本门。
2.1.1多输入门1.内置的多输入门包括: and nand nor or xor xnor2.这些逻辑门只有单个输出, 1个或多个输入。
Verilog HDL入门基础之门级建模

门级建模门级建模是指调用Verilog内部自定义的基本门元件(或者用户自定义基本元件)来对硬件电路进行结构描述门级建模方式采用的是一种特殊的模块调用方式。
此时所调用的模块式Verilog内部预先定义好的基本门级元件或者用户自定义的基本元件,在这种建模方式下硬件电路将被描述成由一组基本门级元件的实例组成。
内置基本门级元件Verilog HDL内含的基本门级元件有14中,包括and(与门)、nand(与非门)、or(或门)、nor(或非门)、xor(异或门)、xnor(异或非门)、buf(缓冲器)、not(非门)、bufif1(高电平使能缓冲器)、bufif0(低电平使能缓冲器)、notif1(高电平使能非门)、notif0(低电平使能非门)、pullup(上拉电阻)、pulldown(下拉电阻)基本门级元件的调用其语法格式为:<门级元件名><驱动强度说明>#(<门级延时量>)<实例名>(端口连接表);对上述格式做如下说明:•<门级元件名>:就是前面列出的Verilog HDL内含的14种基本门级元件类型中的任意一种,它用于指明被当前模块调用的是哪一种门级基本元件。
•<驱动强度说明>:这一项是可选项,它的格式为:(<对高电平的驱动强度>,<对低电平的驱动强度>)<驱动强度说明>用来对本次基本门级元件调用所引用的门级元件实例的输出端驱动能力加以说明。
这是因为:在结构建模方式下,一条连线可能会由多个前级输出端同时驱动,该连线最终的逻辑状态将取决于各个驱动端的不同驱动能力,因此有必要对元件实例的输出驱动能力进行说明。
对于门级元件,驱动强度分为对高电平(逻辑1)的驱动强度和对低电平(逻辑0)的驱动强度,因此<驱动强度说明>部分由<对高电平的驱动强度>和<对低电平的驱动强度>这两种成分组成。
VerilogHDL行为级建模

20
示例
Verilog HDL数字系统设计及仿真
if(clock= =1) q=d; //clock为1时执行此句 if(sel= =1) out=A; //sel为1时执行此句 else out=B; //sel非1时执行此句 if(Sum < 60) Total_C = Total _c + 1; else if (Sum < 75) Total_B = Total_B + 1; else Total_A = Total_A + 1;
always @ (posedge clock ) always @ (posedge clock or negedge reset)
12
顺序块
Verilog HDL数字系统设计及仿真
以关键字begin…end将多条语句封装 成块 按顺序执行
initial initial begin begin a=0; a=0; b=1; #5 b=1; c={a,b}; #10 c={a,b}; d={b,a}; #15 d={b,a}; end end
8
always结构
Verilog HDL数字系统设计及仿真
always结构在仿真过程中是时刻活动 的,它的语句结构如下:
always <时序控制方式> 执行语句
如果没有控制方式的参与,此结构中 的语句可能会一直执行并发生死锁, 或者变成类似数据流级的语句
VerilogHDL建模概述

VerilogHDL建模概述Verilog HDL 建模概述在数字电路设计中,数字电路可简单归纳为两种要素:线和器件。
线是器件管脚之间的物理连线;器件也可简单归纳为组合逻辑器件(如与或⾮门等)和时序逻辑器件(如寄存器、锁存器、RAM等)。
⼀个数字系统(硬件)就是多个器件通过⼀定的连线关系组合在⼀块的。
因此,Verilog HDL的建模实际上就是如何使⽤HDL语⾔对数字电路的两种基本要素的特性及相互之间的关系进⾏描述的过程。
下⾯通过⼀些实例,以便对Verilog HDL 的设计建模有个⼤概的印象。
1 模块模块(module)是Verilog 的基本描述单位,⽤于描述某个设计的功能或结构及与其他模块通信的外部端⼝。
模块在概念上可等同⼀个器件就如我们调⽤通⽤器件(与门、三态门等)或通⽤宏单元(计数器、ALU、CPU)等,因此,⼀个模块可在另⼀个模块中调⽤。
⼀个电路设计可由多个模块组合⽽成,因此⼀个模块的设计只是⼀个系统设计中的某个层次设计,模块设计可采⽤多种建模⽅式。
1.1 简单事例下⾯先介绍⼏个简单的Verilog HDL程序。
例[1] 加法器module addr (a, b, cin, count, sum);input [2:0] a;input [2:0] b;input cin;output count;output [2:0] sum;assign {count,sum} = a +b + cin;endmodule该例描述⼀个3位加法器,从例⼦可看出整个模块是以module 开始,endmodule 结束。
例[2] ⽐较器module compare (equal,a,b);input [1:0] a,b; // declare the input signal ;output equare ; // declare the output signal;assign equare = (a == b) ? 1:0 ;/ * if a = b , output 1, otherwise 0;*/endmodule该例描述⼀个⽐较器,从上可看到,/* .... */ 和// ... 表⽰注释部分。
第2章 Verilog HDL门级建模

9
语法形式:
端口类型 [端口位宽左界:端口位宽右界] 端口名;
端口类型
输入—input 输出—output 双向—inout
宽度
input [2:0] cin; cin[2]、cin[1]、cin[0] output [0:4] cout; cout[0]、cout[1]、cout[2]、cout[3]、cout[4] inout [4:7] fast; fast[4]、fast[5]、fast[6]、fast[7]
范例
bufif1 bufif0 notif1 notif0 b1(Y,A,ctrl); b2(Y,A,ctrl); n1(Y,A,ctrl); n2(Y,A,ctrl);
16
模块实例化
语法形式
模块名称 实例名称(端口连接);
两种连接方式
按顺序连接 按名称连接
17
按顺序连接
欲调用此模块
module MUX4x1(Y,A,B,C,D,S1,S0,En_); 顺 output Y; 序 input A,B,C,D; module Test; 一 input S1,S0; reg a,b,c,d,en_; //连接输入端 致 ! input En_; reg s1,s0; …… wire y; //连接输出端 //模块功能部分 …… //省略 endmodule MUX4x1 mymux(y,a,b,c,d,s1,s0,en_); endmodule
10
定义一个2位宽度的输入信号a
input input input input [1:0] [0:1] [3:4] [2:1] a; a; a; a;
数字系统设计QuartusⅡ的VerilogHDL建模与仿真

使用Quartus II软件的设计输入工具, 将设计转换为可编程的硬件描述语言或
原理图。
仿真
使用Quartus II软件的仿真工具,对 设计进行功能仿真和时序仿真,以确
保设计的正确性。
综合与布局布线
将设计转换为可编程的配置文件,并 进行布局布线,以确保设计的正确性。
编程与配置
将生成的配置文件下载到FPGA芯片 中,完成数字系统的设计和实现。
VS
优化设计
根据仿真结果分析和实际需求,对 Verilog HDL代码进行优化,提高设计的 性能和可靠性。
05
数字系统设计实例
实例一
总结词
简单计数器
详细描述
简单计数器是一个常见的数字系统设计实例,用于对输入信号进行计数。通过Verilog HDL建模,可 以实现计数器的逻辑功能,并在Quartus II中进行仿真测试。
模块化设计
将复杂的数字系统划分为若干个 较小的模块,每个模块具有明确 的功能和接口,便于设计和验证。
行为描述
使用Verilog HDL的逻辑运算符、 控制语句等对数字系统的行为进 行描述,实现逻辑功能。
层次化设计
将不同层次的模块按照层次结构 组织起来,上层模块调用下层模 块,实现系统的层次化设计。
Verilog HDL的仿真流程和工具
移位运算符:左移、右移。
04
05
数据类型:`reg`、`wire`、 `integer`等。
03
Quartus II软件介绍
Quartus II软件的特点和功能
高度集成
Quartus II软件集成了数字系统设计所需的所有工具,包括编辑器、 编译器、仿真器等,方便用户进行一站式设计。
第2章 Verilog HDL门级建模

UDP基本结构
Verilog HDL数字系统设计及仿真
primitive UDP名称(输出端口,输入端口1,……,输入端口n); output 输出端口名; input 输入端口名;
reg 寄存器名; initial //初始化寄存器,这两行在时序UDP中使用
table ……//状态表信息
endtable
endprimitive
28
UDP基本规则
Verilog HDL数字系统设计及仿真
➢ 1.UDP只能有一个1位的输出端口,输出端口必须
在端口列表的第一个位置。不允许有多个输出端 口或多位输出端口。如下声明均是违法的:
output a,b;
//多个输出违法
output [1:0] c; //多位输出违法
5
门级建模结构
Verilog HDL数字系统设计及仿真
➢模块定义 ➢端口声明 ➢内部连线声明 ➢门级调用
6
模块定义
Verilog HDL数字系统设计及仿真
➢语法要求
module 模块名(端口名1,端口名2……);
……
endmodule
➢例如:
端口列表,只写名称 标识符,自己定义
module MUX4x1(Y,A,B,C,D,S1,S0,En_); module abc(a,b,c); module adder(a,b,cin,sum,cout); module test;
endmodule
25
Verilog HDL数字系统设计及仿真
➢测试模块
module Test;
reg a,b;
wire y;
mynand nand1(y,a,b);
initial
Verilog HDL讲义

第二章 Verilog HDL设计方法概述前言随着电子设计技术的飞速发展,专用集成电路(ASIC)和用户现场可编程门阵列(FPGA)的复杂度越来越高。
数字通信、工业自动化控制等领域所用的数字电路及系统其复杂程度也越来越高,特别是需要设计具有实时处理能力的信号处理专用集成电路,并把整个电子系统综合到一个芯片上。
设计并验证这样复杂的电路及系统已不再是简单的个人劳动,而需要综合许多专家的经验和知识才能够完成。
由于电路制造工艺技术进步非常迅速,电路设计能力赶不上技术的进步。
在数字逻辑设计领域,迫切需要一种共同的工业标准来统一对数字逻辑电路及系统的描述,这样就能把系统设计工作分解为逻辑设计(前端)和电路实现(后端)两个互相独立而又相关的部分。
由于逻辑设计的相对独立性就可以把专家们设计的各种常用数字逻辑电路和系统部件(如FFT算法、DCT算法部件)建成宏单元(Megcell)或软核(Soft-Core)库供设计者引用,以减少重复劳动,提高工作效率。
电路的实现则可借助于综合工具和布局布线工具(与具体工艺技术有关)来自动地完成。
VHDL和Verilog HDL这两种工业标准的产生顺应了历史的潮流,因而得到了迅速的发展。
作为跨世纪的中国大学生应该尽早掌握这种新的设计方法,使我国在复杂数字电路及系统的设计竞争中逐步缩小与美国等先进的工业发达国家的差距。
为我国下一个世纪的深亚微米百万门级的复杂数字逻辑电路及系统的设计培养一批技术骨干。
2.1.硬件描述语言HDL(Hardware Description Language)硬件描述语言(HDL)是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。
它可以使数字逻辑电路设计者利用这种语言来描述自己的设计思想,然后利用电子设计自动化(在下面简称为EDA)工具进行仿真,再自动综合到门级电路,再用ASIC或FPGA实现其功能。
目前,这种称之为高层次设计(High-Level-Design)的方法已被广泛采用。
Verilog HDL层次结构描述优质课件

Page 8
Thank You
Designed by SZPT
C6
ImNo2d(Bu[l1e])a, d. der_four (A, B, C_I, F, C_O);
.V
IN1(A[1]), .
一堆的.V文件,谁是顶层?
层次结构的编译
从顶层,从上往下编译
• 谁的模块名称与Quartus项目设置的 顶层名称一样,谁就是顶层;
• 例如: Quartus项目设置的顶层名称 为C2,则在这堆.V文件中C2.V就是顶 层文件
深圳职业技术学院 电子信息工程专业资源库
Page 4
自定义模块的结构描述
调用格式
模块名 实例名 (.端口1(信号1), .端口2(信号2), …)
小点不可省略
C_O
F[3]
F[2]
F[1]
F[0]
CO
OUT
∑
IN1 IN2 CI
CO
OUT
∑
IN1 IN2 CI
CO
OUT
∑
IN1 IN2 CI
CO
);
ICNO1(Ac_[13]_),4.)); I端N口1(A1[(1信]),号. 1), .
C4
adder_one U30 ( . ICNI(1c(_A1[_12])),, ..
C1
.V
O(U不T用(F[管2]其), .他是编写编写的) .V
mINo2d(Bu[l1e])a, d. der_four (A, B, C_I, F, C_O);C2
OUT
∑
IN1 IN2 CI
A[3] B[3]
A[2] B[2]
A[1] B[1]
示例:4位串行进位加法器
Verilog HDL入门教程

VerilogHDL语言基础教材教学课件

1990年代,Verilog HDL成为IEEE标准,并不断发展完善。
新版本
随着数字电路设计的发展,Verilog HDL不断推出新版本,支持更高级的硬件描述和验证功能。
Verilog HDL的历史和发展
01
02
03
04
ASIC设计
在ASIC设计中,Verilog HDL用于描述数字电路的结构和行为。
FPGA设计
在FPGA设计中,Verilog HDL用于描述逻辑块、路由和IO接口等。
仿真验证
Verilog HDL还用于数字电路的仿真验证,通过模拟电路的行为来检测设计中的错误和缺陷。
学术研究
在数字电路和系统设计领域,Verilog HDL广泛应用于学术研究、教学和实验中。
Verilog HDL的应用领域
测试平台编写是指编写用于测试Verilog设计的测试平台代码。测试平台代码可以使用Verilog语言编写,并使用仿真测试平台进行测试和验证。
仿真测试平台
测试平台编写
仿真和测试平台
Verilog HDL设计实例
04
组合逻辑设计
总结词:组合逻辑设计是Verilog HDL中最基础的设计之一,主要用于实现逻辑函数。
02
数字系统设计涉及逻辑门、触发器、寄存器、组合逻辑、时序逻辑等基本数字逻辑单元的设计和组合,Verilog HDL语言能够方便地描述这些结构和行为。
03
数字系统广泛应用于计算机、通信、控制等领域,通过Verilog HDL语言可以实现高效、可靠的数字系统设计。
01
Verilog HDL的未来发展
发展趋势和挑战
THANKS
ASIC设计涉及逻辑设计、电路设计、物理实现等环节,Verilog HDL语言能够描述硬件结构和行为,为ASIC设计提供强大的支持。
Verilog HDL建模概述

主要内容
模块 时延 三种建模方式 四大法宝
结构化描述方式 数据流描述方式 行为描述方式
简单的事例
//与非门的行为型描述 //与非门的行为型描述 module nand(in1,in2,out); input in1,in2; output out; wire out; //连续赋值语句 //连续赋值语句 assign out=~(in1 & in2); endmodule
层module
Module
Module是Verilog的基本描述单位,用于描述 Module是Verilog的基本描述单位, 的基本描述单位 某个设计的功能或结构及与其他模块通信的外 部接口 Module概念上等同于一个器件就如我们调用通 Module概念上等同于一个器件就如我们调用通 用器件(与门、三态门等)或通用宏单元( 用器件(与门、三态门等)或通用宏单元(计 数器等) 数器等) 一个电路设计可由多个模块组合而成。 一个电路设计可由多个模块组合而成。因此一 个模块的设计只是一个系统设计中的某个层次 设计,模块设计可采用多种建模方式 设计,
电路结构
简单的事例
/******************************************\ Filename :dff.v \******************************************/ module dff(data,clk,q); ( input data,clk; //declare the input signal; output q; //declare the output signal; reg q; always @ (posedge clk) q<=data; end module
Verilog HDL学习要点之行为级建模

第 三 种 事 件 表 达 式 代 表 所 指 定 的 信 号 发 生 了 负 跳 变 ( x 0
z 0 1 0 1 x 1 0 中的一种) ,就算事件触发;
Байду номын сангаас
敏感事件列表在 always 过程块中的应用 (1) 用 always 过程块实现组合逻辑 • 事件表达式内不能包含 posedge 和 negedge 关键词 • 组合逻辑的所有输入都要作为<信号名>出现在敏感列表中 (2) 用 always 过程块实现时序逻辑 • 事件表达式可以是上述表达式三种中的任意一种 • 不要求所有输入都要作为<信号名>出现在敏感列表中
end wait (enable==1) d=a&b|c; begin wait (enable==1); d=a&b; d=d|c; end 注意此处要想实现 wait 语句对后面语句的控制只能在顺序执行的语句中。 例子: (参照实现时序逻辑的仿真) module zzy(flag1,flag2); output flag1,flag2; reg enable,flag1,flag2; initial begin flag1=1; flag2=1; enable=1; #20 enable=0; #10 enable=1; end always begin #10; wait(enable==1) flag1=~flag1; end initial begin #10 @(posedge enable) flag2=~flag2; end endmodule
• •
上述变量矢量的的某一位或某几位 存储器数据类型,只能对某个地址单元的整个字进行操作,不能对该字的某一位或某几 位进行赋值操作。 • 上述几个变量用连接操作符“{,}”拼接起来构成的整体。 赋值语句中可以出现延时控制和事件控制的时间控制, 根据控制语句出现的位置可以分为外 部事件控制方式(如#10 a=b)和内部时间控制方式(如 b=#10 ~b) 。前者是等待一段时间后 才计算等号右边的表达式的值, 后者是立即计算等号右边的表达式的值, 等待一段时间后才 赋值。
verilog建模方式

verilog HDL建模方式简单的归纳为三类:结构化描述方式、数据流描述方式、行为描述方式。
一个模块中往往是将三种建模方式混合起来使用,来描述一个完整的功能。
系统级、算法级、RTL级属于行为级,门级、开关级属于结构级。
系统级:用高级语言实现设计模块的外部性能的模型。
算法级:用高级语言结构实现设计算法的模型。
RTL级:描述数据在寄存器之间流动和如何树立这些数据的模型门级:描述逻辑门以及逻辑门之间的连线的模型开关级:描述器件中三极管和存储节点以及他们之间连线的模型1)结构化的建模方式是通过对电路的层次和组成结构进行描述来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各器件来描述一个模块的结构。
这里的器件包括Verilog HDL的内置门如与门and,异或门xor等,也可以是用户自定义的一个模块,还可以是FPGA厂商的提供的一个基本逻辑单元或者宏。
结构化的描述方式反映了一个设计的层次结构。
module FA_struct (A, B, Cin, Sum, Cout);input A;input B;input Cin;output Sum;output Cout;wire S1, T1, T2, T3;// -- statements -- //xor x1 (S1, A, B);xor x2 (Sum, S1, Cin);and A1 (T1, A, B );and A2 (T2, B, Cin);and A3 (T3, A, Cin);or O1 (Cout, T1, T2, T3 );endmodule该实例显示了一个全加器由两个异或门、三个与门、一个或门构成。
S1、T1、T2、T3则是门与门之间的连线。
代码显示了用纯结构的建模方式,其中xor 、and、or 是Verilog HDL 内置的门器件。
以 xor x1 (S1, A, B) 该例化语句为例:xor 表明调用一个内置的异或门,器件名称xor ,代码实例化名x1(类似原理图输入方式)。
VerilogHDL数字集成电路设计原理与应用教学课件ppt作者蔡觉平_第2章

第2章 Verilog HDL基础知识2.1 Verilog HDL的语言要素2.2 数据类型2.3 运算符2.4 模块本章小结12 Verilog HDL 语法来源于C 语言基本语法,其基本词法约定与C 语言类似。
程序的语言要素也称为词法,是由符号、数据类型、运算符和表达式构成的,其中符号包括空白符、注释符、标识符和转义标识符、关键字、数值等。
2.1 Verilog HDL 的语言要素2.1.1 空白符 空白符包括空格符(\b)、制表符(\t)、换行符和换页符。
空白符使代码看起来结构清晰,阅读起来更方便。
在编译和综合时,空白符被忽略。
Verilog HDL程序可以不分行,也可以加入空白符采用多行编写。
3 例2.1-1空白符使用示例。
initial begin a = 3'b100; b = 3'b010; end 相当于: initial begin a = 3'b100; b = 3'b010; end452.1.2 注释符 Verilog HDL语言中允许插入注释,标明程序代码功能、修改、版本等信息,以增强程序的可阅读性和帮助管理文档。
Verilog HDL中有两种形式的注释。
(1) 单行注释:单行注释以“//”开始,Verilog HDL忽略从此处到行尾的内容。
(2) 多行注释:多行注释以“/*”开始,到“*/”结束,Verilog HDL忽略其中的注释内容。
需要注意的是,多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中。
例2.1-2 注释符使用示例。
单行注释: assign a=b & c; //单行注释 多行注释: assign a[3:0]=b[3:0]&c[3:0;]; /*注释行1 注释行2 */ 非法多行注释:/*注释内容 /*多行注释嵌套多行注释*/ 注释内容*/ 合法多行注释:/*注释内容 //多行注释嵌套单行注释*/672.1.3 标识符和转义标识符 在Verilog HDL中,标识符(Identifier)被用来命名信号名、模块名、参数名等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。
Verilog HDL入门基础之门级建模

门级建模门级建模是指调用Verilog内部自定义的基本门元件(或者用户自定义基本元件)来对硬件电路进行结构描述门级建模方式采用的是一种特殊的模块调用方式。
此时所调用的模块式Verilog内部预先定义好的基本门级元件或者用户自定义的基本元件,在这种建模方式下硬件电路将被描述成由一组基本门级元件的实例组成。
内置基本门级元件Verilog HDL内含的基本门级元件有14中,包括and(与门)、nand(与非门)、or(或门)、nor(或非门)、xor(异或门)、xnor(异或非门)、buf(缓冲器)、not(非门)、bufif1(高电平使能缓冲器)、bufif0(低电平使能缓冲器)、notif1(高电平使能非门)、notif0(低电平使能非门)、pullup(上拉电阻)、pulldown(下拉电阻)基本门级元件的调用其语法格式为:<门级元件名><驱动强度说明>#(<门级延时量>)<实例名>(端口连接表);对上述格式做如下说明:•<门级元件名>:就是前面列出的Verilog HDL内含的14种基本门级元件类型中的任意一种,它用于指明被当前模块调用的是哪一种门级基本元件。
•<驱动强度说明>:这一项是可选项,它的格式为:(<对高电平的驱动强度>,<对低电平的驱动强度>)<驱动强度说明>用来对本次基本门级元件调用所引用的门级元件实例的输出端驱动能力加以说明。
这是因为:在结构建模方式下,一条连线可能会由多个前级输出端同时驱动,该连线最终的逻辑状态将取决于各个驱动端的不同驱动能力,因此有必要对元件实例的输出驱动能力进行说明。
对于门级元件,驱动强度分为对高电平(逻辑1)的驱动强度和对低电平(逻辑0)的驱动强度,因此<驱动强度说明>部分由<对高电平的驱动强度>和<对低电平的驱动强度>这两种成分组成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1.6 自顶向下的设计实例
例2.3 脉动进位计数器顶层模块
例2.4 触发器T_FF 例ຫໍສະໝຸດ .5 带异步复位的D触发器 D_FF
例2.6 激励模块
激励信号和波形输出
2.1.7 小结
用于数字电路设计的两种方法:自顶向下方法和自底向上
方法。在当今的数字电路设计中,这两种方法经常组合使 用。随着设计复杂性的增加,使用这些结构化的方法来进 行设计管理变得越来越重要。 模块是Verilog中的基本功能单元。模块通过调用(实例引 用)来使用,模块的每个实例都被惟一标识,以区别于同 一模块的其他实例。每个实例都拥有其模板模块的不同副 本。读者需要将模块和模块实例区别开来。 仿真有两个不同的组成部分:设计块和激励块,激励块用 于测试设计块。激励块通常是顶层模块。对设计块施加激 励有两种不同的模式。 以脉动进位计数器为例,一步步地解释了为各个部分创建 仿真的过程。
说明为向量,则默认线网的位宽为1。线网的默认值为 z(trireg类型的线网例外,其默认值为x)。线网的值 由其驱动源确定,如果没有驱动源,则线网的值为z。
2.2.2.3 寄存器(reg,integer,real,time)
寄存器用来表示存储元件,它保持原有的数值,直到被
改写。寄存器数据类型一般通过使用关键字reg来声明, 默认值为x。例3.1给出了如何使用寄存器的例子。 例3.1 寄存器的声明和使用
一个模块的示例
Verilog HDL的四种描述方式
行为或算法级:Verilog所支持的最高抽象层次。设计者只
注重其实现的算法,而不关心其具体的硬件实现细节。在 这个层次上进行的设计与C语言编程非常类似。 数据流级:通过说明数据的流程对模块进行描述。设计者 关心的是数据如何在各个寄存器之间流动,以及如何处理 这些数据。 门级:从组成电路的逻辑门及其相互之间的互连关系的角 度来设计模块。这个层次的设计类似于使用门级逻辑简图 来完成设计。 开关级:Verilog所支持的最低抽象层次。通过使用开关、 存储节点及其互连关系来设计模块。在这个层次进行设计 需要了解开关级的实现细节。
功能块,说明两种使用激励进行仿真的方法。
2.1.1 设计方法学
两种基本的设计方法:自底向上和自顶向下设计方法
自底向上设计方法:
首先定义顶层功能块,进而分 析需要哪些必要的子模块; 然后进一步对各个子模块进 行,直到达到无法进一步分 解的底层功能块 自顶向下设计方法: 首先对现有的功能块进行分析, 然后使用这些模块来搭建规 模大一些的功能块,如此继 续直至顶层模块
2.1.2 设计示例:四位脉动进位计数器
脉动进位计数器是由下降沿触发的T触发器组成的。每个T触发器可以由下降沿触 发的D触发器和反相器构成计数器的功能。
使用自顶向下的方法进行设计,首先需要说明脉动进位
在使用T触发器搭建起顶层模块之后,进一步使用D触发器和反相门来实现T触发 器。将较大的功能块分解为较小的功能块,直到无法继续分解。 在自底向上的设计方法恰好与此相反:我们不断地使用较小的功能块来搭建大一
2.2 基本语法
理解操作符、注释、空白符、数字、字符串和标识符
的词法约定。
定义逻辑值集合和数据类型,包括线网、寄存器、向
量、数字、仿真时间、数组、参数、存储器和字符串。
学习使用用于显示和监视信息、暂停和结束仿真的系
统任务。 学习用于宏定义、文件包含的基本编译指令。
2.2.1 词法约定
例3.2 带符号寄存器的声明
2.2.2.4 向量
线网和寄存器类型的数据均可以声明为向量(位宽大于
1)。如果在声明中没有指定位宽,则默认为标量(1 位)。 向量通过[high# : low#]或[low# : high#]进行说明,方括 号中左边的数总是代表向量的最高有效位。
操作符
操作符有三种类型:单目操作符、双目操作符和三目操作符, 单目操作符的优先级高于操作数。三目操作符包括两个单独 的操作符,用来分隔三个操作数。 数字声明 Verilog中包括两种数字声明:指明位数的数字和不指明位数 的数字 指明位数的数字的表示形式为:<size>'<base format><number> <size>用于指明数字的位宽度,只能用十进制数表示。合法 的基数格式包括十进制(‘d或’D)、十六进制(‘h或’H)、 二进制(‘b或’B)和八进制(‘o或’O)。数字用连续的阿拉伯 数字0,1,2,3,4,5,6,7,8,9,10,a,b,c,d,e, f来表示。但是,对于不同的基数,只能相应地使用其中的一 部分,并且允许使用大写字母。 例如:4'b1111,16'h3a6f等
如果在数字说明中没有指定基数,那么默认表示为十进制 数。如果没有指定位宽度,则默认的位宽度与仿真器和使 用的计算机有关(最小为32位) X和Z值 Verilog用两个符号分别表示不确定值和高阻值,这两个符 号在实际电路的建模中是非常重要的,不确定值用x表示, 高阻值用z表示。在以十六进制为基数的表示中x或z代表4 位,在八进制的情况下x或z代表3位,在二进制的情况下x 或z代表1位。如果某数的最高位为0,x或z,Verilog语言约 定将分别使用0,x或z自动对这个数进行扩展,以填满余下 的更高位。 负数 对于常数,我们可以通过在表示位宽的数字前面增加一个 减号来表示它是一个负数,因为表示大小的常数总是正的。 将减号放在基数和数字之间是非法的。对于带符号的算术 运算,可以增加一个可选的带符号说明符来表示负数
些的模块。首先使用与门和或门搭建D触发器,或者使用晶体管搭建一个自定义 的D触发器,使自底向上和自顶向下的方法在D触发器这个层次上会合。
2.1.3 模块
Verilog使用模块(module)的概念来代表一个基本的
功能块。一个模块可以是一个元件,也可以是低层次 模块的组合。常用的设计方法是使用元件构建在设计 中多个地方使用的功能块,以便进行代码重用。模块 通过接口(输入和输出)被高层的模块调用,但隐藏 了内部的实现细节。这样就使得设计者可以方便地对 某个模块进行修改,而不影响设计的其他部分。 在Verilog中,模块声明由关键字module开始,关键字 endmodule则必须出现在模块定义的结尾。每个模块 必须具有一个模块名,由它惟一地标识这个模块。模 块的端口列表则描述这个模块的输入和输出端口。
无反馈的模式
这种模式是在激励块中调用(实例引用)并直接驱动
设计块。如下图所示,顶层块为激励块,由它控制clk 和reset信号,检查并显示输出信号q。
有反馈的模式
这种模式是在一个虚拟的顶层模块中调用(实例引用)
激励块和设计块。激励块和设计块之间通过接口进行 交互,如下图所示。激励块驱动信号d_clk和d_reset, 这两个信号则连接到设计块的clk和reset输入端口。激 励块同时检查和显示信号c_q,这个信号连接到设计块 的输出端口q。顶层模块的作用只是调用(实例引用) 设计块和激励块。
2.1.4 模块实例
例2.1 模块调用
例2.2 非法模块嵌套定义
2.1.5 逻辑仿真的构成
设计完成之后,还必须对设计的正确性进行测试。我
们可以对设计模块施加激励,通过检查其输出来检验 功能的正确性。我们称完成测试功能的块为激励块。 将激励块和设计块分开设计是一种良好的设计风格。 激励块一般均称为测试台(test bench)。可以使用不 同的测试台对设计块进测试,以全面验证设计的正确 性。 激励块的设计有两种模式:有反馈的和无反馈的
Verilog中的基本词法约定与C语言类似。Verilog描述包含一个
“单词”流,这里的单词可以是注释、分隔符、数字、字符串、 标识符和关键字。Verilog是大小写相关的,其中的关键字全部 为小写。列出如下: 空白符 空白符由空格(\b)、制表符(\t)和换行符组成。除了字符串 中的空白符,Verilog中的空白符仅仅用于分隔标识符,在编译 阶段被忽略。 注释 有两种书写注释的方法:单行注释和多行注释。 单行注释以“// ”开始,Verilog将忽略从此处到行尾的内容。 多行注释以“/*”开始,结束于“*/”。 多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中。
标识符和关键字
关键字是语言中预留的用于定义语言结构的特殊标识符。Verilog 中的关键字全部小写,附录C中列出了Verilog中的全部关键字的清 单,包括关键字、系统任务和编译指令。 标识符是程序代码中对象的名字。Verilog中的标识符由字母数字字 符、下划线_和美元符 $ 组成。标识符是区分大小写的。Verilog标 识符的第一个字符必须是字母数字字符或下划线,不能以数字或 美元符开始。以美元符开始的标识符是为系统函数保留的。 转义标识符 转义标识符以反斜线“\”开始,以空白符(空格、制表符和换行符) 结束。Verilog将反斜线和空白符之间的字符逐个进行处理。所有 的可打印字符均可包含在转义字符中,而反斜线和表示结束的空 白符不作为标识符的一部分。 如:\a+b-c //与a+b-c等同
2.2.2.2 线网(net: wire,wand,wor,tri,triand,trior,trireg)
线网(net)表示硬件单元之间的连接。就像在真实的
电路中一样,线网由其连接器件的输出端连续驱动。 如下图所示,线网a连接到与门g1的输出端,它将连续 地拥有与门g1的输出值:b & c
线网一般使用关键字wire进行声明。如果没有显式地
f=ab …
主讲 陈付龙
安徽师范大学
2015
第2讲 Verilog HDL层次建模
层次建模 基本语法
模块和接口
2.1 层次建模
理解数字电路设计中的自底向上和自顶向下设计方法。 解释Verilog中模块和模块实例之间的区别。 学习从4种不同的抽象角度来描述同一个模块。 解释数字电路仿真中的各个组成部分,定义激励块和