




已阅读5页,还剩162页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FPGA技术技术 第二章第二章 CPLD/FPGA概述概述 第一章第一章 可编程逻辑器件发展历程可编程逻辑器件发展历程 第三章第三章 硬件描述语言硬件描述语言 VHDL/Verilog HDL简介简介 第四章第四章 Quartus II的的 Verilog HDL建模与仿真建模与仿真 第一章第一章 可可 编编 程程 逻辑逻辑 器件器件 的发展历程的发展历程 一、一、 可编程逻辑器件的发展历程可编程逻辑器件的发展历程 二、二、 可编程逻辑器件的分类可编程逻辑器件的分类 可编程逻辑器件可编程逻辑器件 (PLD) 可可 编编 程程 阵阵 列列 逻辑逻辑 (PAL) 可可 编编 程程 逻辑阵逻辑阵 列列 (PLA) Xilinx的的 FPGAAltera的的 CPLD 早期 FPGA 现在 一、 可编程器件大致的发展过程如下:可编程器件大致的发展过程如下: 1) 20世纪世纪 70年代年代 ,出现了熔丝编程的出现了熔丝编程的 PROM 和和 PLA器件。器件。 70 年代末,年代末, AMD 公司对公司对 PLA进行了改进,推出了进行了改进,推出了 PAL器件。器件。 2) 20世纪世纪 80年代初年代初 ,Lattice(莱迪思 )公司发明了电可擦写的,公司发明了电可擦写的, 比比 PAL更灵活的更灵活的 GAL通用阵列逻辑 器件。器件。 3) 20世纪世纪 80年代中期,年代中期, Xilinx公司提出现场可编程概念,生公司提出现场可编程概念,生 产出了世界上第一片产出了世界上第一片 FPGA器件。器件。 FPGA是改变内部连接的布是改变内部连接的布 线来编程。线来编程。 4) 20世纪世纪 80年代末,年代末, Lattice公司又提出在系统可编程概念(公司又提出在系统可编程概念( ISP),并推出了一系列具有在系统可编程能力的),并推出了一系列具有在系统可编程能力的 CPLD器件器件 。 CPLD的设计是修改具有固定内部连接电路的逻辑功能来的设计是修改具有固定内部连接电路的逻辑功能来 编程。编程。 5) 20世纪世纪 90年代后期,可编程集成电路技术飞速发展,器年代后期,可编程集成电路技术飞速发展,器 件的可用逻辑门数超过了百万门,并出现了内嵌复杂功能模件的可用逻辑门数超过了百万门,并出现了内嵌复杂功能模 块(如加法器,乘法器,块(如加法器,乘法器, RAM, CPU核,核, DSP核等)的核等)的 SOPC。 二、可编程器件的分类二、可编程器件的分类 1.按集成度来划分,分为高密度和低密度按集成度来划分,分为高密度和低密度 PLD器件。器件。 1)集成度小于)集成度小于 1000 门门 /每片的每片的 LDPLD,又称简单又称简单 PLD。 PROM(可编程只读存储器)(可编程只读存储器) PLA (可编程逻辑阵列(可编程逻辑阵列 , Programmable Logic Array) PAL (可编程阵列逻辑(可编程阵列逻辑 , Programmable Array Logic) GAL (通用阵列逻辑,(通用阵列逻辑, Generic Array Logic) 2)集成度大于)集成度大于 1000门门 /每片的每片的 HDPLD FPGA ( Field Programmable Gate Array) CPLD ( Complex Programmable Logic Device) 2.从结构上可分为:从结构上可分为: 1)乘积项结构器件:为)乘积项结构器件:为 “与与 或或 ”阵列结构,大部分简单阵列结构,大部分简单 PLD和和 CPLD都属于这个范畴;都属于这个范畴; 2)查找表结构器件:由查找表组成可编程门,再构成阵)查找表结构器件:由查找表组成可编程门,再构成阵 列形式,列形式, FPGA属于此类器件。属于此类器件。 3. 从编程工艺上分为:从编程工艺上分为: 1)熔丝)熔丝 (Fuse)型器件:编程过程就是根据设计的熔丝图文件来烧断型器件:编程过程就是根据设计的熔丝图文件来烧断 对应的熔丝,来达到编程的目的。编程后即使系统断电对应的熔丝,来达到编程的目的。编程后即使系统断电 ,它们中存它们中存 储的储的 编程信息不会丢失编程信息不会丢失 。 2)反熔丝)反熔丝 (Antifuse)型器件:由型器件:由 Actel公司推出,在编程处通过击穿漏公司推出,在编程处通过击穿漏 层使得两点之间获得导通。反熔丝层使得两点之间获得导通。反熔丝 PLD抗辐射,耐高低温,功耗低,抗辐射,耐高低温,功耗低, 速度快,在军品和宇航上有较大优势。前两种都属速度快,在军品和宇航上有较大优势。前两种都属 OTP器件。器件。 3) EPROM型:紫外线擦除电可编程逻辑器件,它用较高的编程电型:紫外线擦除电可编程逻辑器件,它用较高的编程电 压进行编程,当需要再次编程时,用紫外线擦除。前三种较少使用。压进行编程,当需要再次编程时,用紫外线擦除。前三种较少使用。 4) EEPROM型:电可擦除可编程逻辑器件。型:电可擦除可编程逻辑器件。 CPLD采用此编程工艺采用此编程工艺 。 5) SRAM型:型: SRAM查找表结构的器件,大部分的查找表结构的器件,大部分的 FPGA采用此编程采用此编程 工艺。断电后编程信息会丢失,每次上电时,需从器件外部存储器将工艺。断电后编程信息会丢失,每次上电时,需从器件外部存储器将 编程数据重新写入编程数据重新写入 SRAM中。允许无限次编程。中。允许无限次编程。 6) Flash( Fastflash)型:即闪存技术,由)型:即闪存技术,由 Actel公司推出。采用此编公司推出。采用此编 程工艺的器件,可以实现多次可编程,也可以做到掉电后不需要重新程工艺的器件,可以实现多次可编程,也可以做到掉电后不需要重新 配置。配置。 CPLD采用此编程工艺。采用此编程工艺。 第二章第二章 CPLD/FPGA概述概述 一、一、 简单的简单的 PLD 结构结构 二、二、 FPGA/CPLD的结构的结构 三、三、 FPGA/CPLD的基本原理的基本原理 四、四、 FPGA的设计方法的设计方法 五、五、 FPGA设计流程设计流程 二维的逻辑块阵列,构成了 PLD器件的逻 辑组成核心。 输入输出块: 连接逻辑块的互连资源 连线资源:由各种长度的连线线段组成,其中也有 一 些可编程的连接开关,它们用于逻辑块之间、逻辑块 输入输出块之间的连接 一一 . 简单简单 PLD的结构的结构 任何组合函数都可以表示为与任何组合函数都可以表示为与 -或表达式:如或表达式:如 F=AB+BCD 。 PLD由由 “与门阵列与门阵列 ”和和 “或门阵列或门阵列 ”加上输入输加上输入输 出电路构成。出电路构成。 早期的早期的 PLD有些是有些是 “与与 ”阵列可编程,有些是阵列可编程,有些是 “ 或或 ”阵列可编程,还有些是阵列可编程,还有些是 “与与 ”和和 “或或 ”阵列都可编程。阵列都可编程。 1.输入缓冲器输入缓冲器 2.PLD的互补输入的互补输入 3.PLD中与阵列表示中与阵列表示 4.PLD中或阵列的表示中或阵列的表示 5. 阵列线连接表示阵列线连接表示 编程前编程前 编程后编程后 6.PROM的的 PLD阵列图阵列图 二、二、 FPGA/CPLD的结构的结构 FPGA/CPLD的结构各有其特点和长处,但概括起来,它们是由三的结构各有其特点和长处,但概括起来,它们是由三 大部分组成的大部分组成的 : 1.逻辑阵列块逻辑阵列块 LAB (Logic Array Block)或或 CLB( Configurable Logic Block),构成了),构成了 PLD器件的逻辑组成核心。器件的逻辑组成核心。 2.输入输出块输入输出块 IOB( I/O Block) 3.连接逻辑块的可编程连线阵列连接逻辑块的可编程连线阵列 PIA (Programmable Interconnect Array)或互连资源或互连资源 IR( Interconnect Resources) .它由各种长度的连线它由各种长度的连线 线段组成,也有一些可编程的连接开关,用于逻辑块之间、逻辑块与线段组成,也有一些可编程的连接开关,用于逻辑块之间、逻辑块与 输入输出块之间的连接。输入输出块之间的连接。 规模大,能够完成任何数字逻辑的功能,实现系统集成规模大,能够完成任何数字逻辑的功能,实现系统集成 在投片前验证设计的正确性,开发成本低在投片前验证设计的正确性,开发成本低 修改设计而不用改动硬件电路,开发周期短修改设计而不用改动硬件电路,开发周期短 减少减少 PCB面积,提高系统可靠性面积,提高系统可靠性 PLD(CPLD/FPGA)的优点:的优点: CPLD和和 FPGA的区别的区别 制造工艺不同制造工艺不同 实现功能不同实现功能不同 FPGA:查找表技术,查找表技术, SRAM工艺工艺 CPLD:乘积项技术,:乘积项技术, Flash/EEPROM工艺工艺 FPGA:时序逻辑电路时序逻辑电路 CPLD:组合逻辑电路组合逻辑电路 三、三、 CPLD/FPGA基本原理基本原理 基于查找表的基于查找表的 PLD的基本结构及逻辑实现原理的基本结构及逻辑实现原理 基于乘积项的基于乘积项的 PLD的基本结构及逻辑实现原理的基本结构及逻辑实现原理 基于乘积项的基于乘积项的 PLD的基本结构及逻辑实现原理的基本结构及逻辑实现原理 这种 FPGA的结构可分为三块:宏单元( Macrocell )、可编程连线( PIA)和 I/O控制块。宏单元是器 件的基本结构,由它来实现基本的逻辑功能;可编 程连线负责信号传递,连接所有的宏单元; I/O控制 块负责输入输出的电气特性控制,比如可以设定集 电极开路输出,摆率控制,三态输出等。 INPUT/GCLK1, INPUT/GCLRn , INPUT/OE1, INPUT/OE2是全 局时钟、清零和输出使能信号, 这几个信号有专用连线与器件中 每个宏单元相连,信号到每个宏 单元的延时相同并且延时最短。 宏单元具体结构宏单元具体结构 与或阵列,每一个交叉点都是与或阵列,每一个交叉点都是 可编程熔丝,导通实现与逻辑可编程熔丝,导通实现与逻辑 “或或 ”阵列阵列 可编程可编程 D触发器触发器 乘积项结构的逻辑实现原理乘积项结构的逻辑实现原理 f=f1+f2= A*C*!D+B*C*!D 查找表(查找表( Look-Up-Table)的原理和结构)的原理和结构 查找表查找表 LUT实质上是一个实质上是一个 RAM, n位地址线可以配置为位地址线可以配置为 n1的的 RAM。当用户描述。当用户描述 了一个逻辑电路后,软件会计算所有可能的结果,并写入了一个逻辑电路后,软件会计算所有可能的结果,并写入 RAM。每一个信号进行。每一个信号进行 逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,输出结果逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,输出结果 Xilinx Spartan-II内部结构内部结构 Altera的的 FLEX/ACEX等芯片的内部结构等芯片的内部结构 查找表结构的逻辑实现原理查找表结构的逻辑实现原理 f=(A+B)*C*!D=A*C*!D+B*C*!D 选择选择 FPGA还是还是 CPLD? CPLD组合逻辑的功能很强,一个宏单元就可以 分解十几个甚至 20 30多个组合逻辑输入。而 FPGA 的一个 LUT只能处理 4输入的组合逻辑,因此, CPLD 适合用于设计译码等复杂组合逻辑。 但 FPGA的制造 工艺确定了 FPGA芯片中包含的 LUT和触发器的数量 非常多,往往都是几千上万, CPLD一般只能做到 512 个逻辑单元,而且如果用芯片价格除以逻辑单元数量 , FPGA的平均逻辑单元成本大大低于 CPLD。 四、四、 FPGA的设计方法的设计方法 FPGA的常用设计方法包括 “自顶向下 ”和 “自下而上 ”,目前大规模 FPGA设 计一般选择 “自顶向下 ”的设计方法。 所谓 “自顶向下 ”设计方法 , 简单地说 ,就是采用可完全独立于芯片厂商及其 产品结构的描述语言 ,在功能级对设计产品进行定义 , 并结合功能仿真技术 ,以确 保设计的正确性 ,在功能定义完成后 ,利用逻辑综合技术 ,把功能描述转换成某一 具体结构芯片的网表文件 ,输出给厂商的布局布线器进行布局布线。布局布线 结果还可反标回同一仿真器 , 进行包括功能和时序的后验证 ,以保证布局布线所 带来的门延时和线延时不会影响设计的性能。 自顶向下设计方法学自顶向下设计方法学 顶层模块顶层模块 子模块子模块 1 子模块子模块 2 子模块子模块 3 叶单元叶单元 叶单元叶单元 叶单元叶单元叶单元叶单元 叶单元叶单元 叶单元叶单元 RTL代码 逻辑综合器 调用模块 的黑盒子 接口 设置综合目 标和约束条 件 EDIF网表 ( netlist) HDL网表 ( netlist) RTL代码 逻辑仿真器 (modelsim) 调用模块 的行为仿 真模型 测试数据测试程序 ( test bench) 五、五、 FPGA设计流程设计流程 ( 1)设计定义 ( 2)设计输入 布尔等式设计,原理图设布尔等式设计,原理图设 计,计, HDL语言设计语言设计 ( 3)功能仿真 RTL代码中引用的由 厂家提供的宏模块 /IP ( 4)逻辑综合 ( 5)前仿真 HDL网表 ( netlist) 逻辑仿真器 测试数据调用模块的 行为仿真模型 测试程序 ( test bench ) ( 6)布局布线 EDIF网表 ( netlist) FPGA厂家工具 调用模块的 综合模型 设置布局布线 约束条件 HDL网表 ( netlist) SDF文件 (标准延时格式)下载 /编程文件 ( 7)后仿真 HDL网表 ( netlist) SDF文件 (标准延时格式) 逻辑仿真器 测试数据 FPGA基本单 元仿真模型 测试程序 ( test bench ) ( 8)静态时序分析 ( 9)在系统测试 第三章第三章 Verilog HDL语语 言言 一、一、 Verilog HDL设计模块的基本结构设计模块的基本结构 二、二、 Verilog HDL词法构成词法构成 三、三、 Verilog HDL的语句的语句 四、四、 Verilog HDL描述方式描述方式 五、五、 Verilog HDL设计流程设计流程 六、六、 用用 Verilog HDL描述数字电路的实例描述数字电路的实例 硬件描述语言(硬件描述语言( HDL)就是可以描述硬件电路)就是可以描述硬件电路 的功能、信号连接关系及定时(时序)关系的语言的功能、信号连接关系及定时(时序)关系的语言 ,也是一种用形式化方法来描述数字电路和设计数,也是一种用形式化方法来描述数字电路和设计数 字系统的。字系统的。 常用的硬件描述语言有常用的硬件描述语言有 VHDL、 Verilog HDL,已,已 成为成为 IEEE的工业标准硬件描述语言,得到了众多的工业标准硬件描述语言,得到了众多 EDA公司的支持。公司的支持。 VHDL VHDL主要用于描述数字系统的结构、行为、功主要用于描述数字系统的结构、行为、功 能和接口。能和接口。 Verilog HDL Verilog HDL是在是在 C语言的基础上发展而来的硬件语言的基础上发展而来的硬件 描述语言,具有简洁、高效、易用的特点。描述语言,具有简洁、高效、易用的特点。 语言语言 Verilog HDL VHDL 设计层次设计层次 行为描述行为描述 结构描述结构描述 系统级系统级 系统算法系统算法 系统逻辑框图系统逻辑框图 RTL级级 数据流图、真数据流图、真 值表、状态值表、状态 机机 寄存器、寄存器、 ALU、 ROM等分模块描等分模块描 述述 门级门级 布尔方程、真布尔方程、真 值表值表 逻辑门、触发器、锁逻辑门、触发器、锁 存器构成的逻辑图存器构成的逻辑图 版图级版图级 几何图形几何图形 图形连接关系图形连接关系 Verilog HDL语言简介语言简介 u能力能力 设计的行为特性、设计的数据流特性、设计的结构组成以及 包含响应 监控和设计验证方面的时延和波形产生机制。提供 了编程语言接口,通过该接口可以在模拟、验证期间从设计 外部访问设计,包括模拟的具体控制和运行。 u主要功能 基本逻辑门,例如 and 、 or 和 nand 等都内置在语言中 开关级基本结构模型,例如 pmos 和 nmos 等也被内置在语言中 可采用三种不同方式或混合方式对设计建模 两类数据类型 能够描述层次设计,可使用模块实例结构描述任何层次 能够使用门和模块实例化语句在结构级进行结构描述 一、一、 Verilog HDL设计模块的基本结构设计模块的基本结构 Verilog HDL程序设计由模块 (module)构成的, 设计模块的基 本结构如图,一个完整的 Verilog HDL设计模块包括端口定义、 I/O声明、信号类型声明和功能描述 4个部分。 1 模块端口的定义 模块端口定义用来声明电路设计模块 的输入 /输出端口,端口定义格式如下: module 模块名 (端口 1,端口 2,端口 3, ); 在端口定义的括号中,是设计电路模块与外界联系的全部输入 /输出端口信号或引脚,是设计实体对外的一个通信界面,是外 界可以看到的部分(不包含电源和接地端),多个端口之间用 “ , ”分隔。例如 1位全加器 adder模块的端口定义为 module adder (S, CO, A, B, CI); 模块名 adder 2 信号类型声明 信号类型声明是声明设计电路的功能描述中所用的信号 的数据类型和函数。信号的数据类型主要有连线( wire)、 寄存器( reg)、整型( integer)、实型( real)、和时间( time)等。 信号声明格式如下: wire msb:lsb 端口 1,端口 2,端口 3, ; reg msb:lsb 端口 1,端口 2,端口 3, ; 3 功能描述 功能描述是 Verilog HDL程序设计中最主要的部分,用 来描述设计模块的内部结构和模块端口间的逻辑关系,在电 路上相当于器件的内部电路结构。功能描述可以用 assign语 句、元件例化( instantiate)方式、 always块语句、 initial块语 句等方法来实现,通常将设计模块描述的方法称为建模。 用 assign语句建模 用 assign语句建模的方法很简单,只需要在 “assign”后面再加一 个表达式。 assign语句一般适合对组合逻辑进行赋值,称为连续 赋值方式。 例 1 一位全加器的设计 1位全加器的逻辑符号: S是全加器的和输出端, CO是进位输出端, A和 B是两个加数输入端, CI是低位进位输入端。 全加器的 Verilog HDL源程序如下 : module adder1 (S, CO, A, B, CI); input A, B, CI; output S, CO; wire S, CO, A, B, CI; assign CO, S = A+B+CI; endmodule “assign CO, S = A+B+CI;”语句实现 1位全加器的进 位输出 CO与和输出 S的建模。 在语句表达式中,用拼接运算符 “”将 CO、 S这两个 1位 操作数拼接为一个 2位操作数。 用元件例化( instantiate)方式建模 元件例化方式建模是利用 Verilog HDL提供的元件库实现的 。例如,用与门例化元件定义一个三输入端与门可以写为 and myand3(y,a,b,c); and是 Verilog HDL元件库中与门元件名, myand3是例化出的三输入端与门名, y是与门输出端, a、 b、 c 是输入端。 用 always块语句建模 always块语句可以产生各种逻辑,常用于时序逻辑的功能 描述。一个程序设计模块中,可以包含一个或多个 always语句 。程序运行中,在某种条件满足时,就重复执行一遍 always结 构中的语句。 例 2 8位二进制加法计数器的设计 8位二进制加法计数器的逻辑符号如图 。 OUT是 8位二进制计数器的输出端( 8位 向量); COUT是进位输出端( 1位); DATA是并行数据输入端( 8位向量); LOAD是计数器的预置控制输入端, 当 LOAD=1时, OUT=DATA; CLK是时钟控制输入端,上升沿为有效 边沿; CLR是同步复位输入端,当 CLK的上升 沿到来时且 CLR=1,则计数器被复位, OUT=00000000。 (逻辑符号图是由计算机对计数器电路的 Verilog HDL源代码 编译后产生的元件符号,图中的输入 /输出标识符自动被改为大 写,而源程序中的标识符都是小写。) 8位二进制加法计数器的 Verilog HDL 源程序如下: module cnt8 (out, cout,data,load,cin,clk, clr); input 7:0 data; input load, cin, clk, clr output 7:0 out; output cout; reg 7:0 out; always (posedge clk) begin if (load) out=data; else if(clr) out=b00000000; else out=out+1; end assign cout = endmodule 用 always块语句实现 8位二进制加法计数器的建模。 (posedge clk)是时间控制敏感函数,表示 clk上升沿到来的 敏感时刻。每当 clk的上升沿到来时, always块语句中的全部 语句就执行一遍。 “assign cout = ”语句产生进位输出 cout,在语句中 “ 语句 2; : end 例 3 用 Initial过程语句对测试变量赋值 initial begin for(addr=0; addr 大于 = 大于等于 右移 4 结果 A=8b00001101 而 A 左移、右移 、 = 小于、小于等于、大于、大于等于 =、 !=、 =、 != 等于、不等于、全等、不全等 Verilog HDL中的整型数值常量就是整数,有两种书写格式:一种是无位 宽的十进制表示法,如 -132。第二种是定义位宽和进制的表示法,这种 表示方法通常是无符号数。 常数书写格式是: sizebase value 其中 size是位宽,定义了数值常量的位数(长度); base 代表这个数 据的进制,取值范围和相应的进制如下表; value是一个数值常量的值, 书写格式与进制 base相对应。 例如 16h6a8c, 表示一个 4位十六进制数。 8hf5 等于 8b11110101; 8b1111xxxx 等价 2hfx; 8b1101zzzz 等价 8hdz。 Verilog HDL中的进制中的进制 base进 制代 码 取 值 对应 的 进 制 b或 B 二 进 制 o或 O 八 进 制 d或 D 十 进 制 h或 H 十六 进 制 Verilog HDL中的 实 型数 值 常量就是浮点数,可以用十 进 制与科学 计 数法 两种形式 书 写。如果采用十 进 制格式,小数点两 边 必 须 都有数字。 Verilog HDL的 编 程最 终 是与硬件相 对应 的。由于硬件 电 路中信号的 逻辑 状 态 具有特殊性,即不 仅 有 0(低 电 平)和 1(高 电 平), 还 有可能是 X(未知 状 态 )和 Z(高阻 态 ),因此 Verilog HDL数 值 集合有四个基本 值 : 0: 逻辑 0或假状 态 ; 1: 逻辑 1或真状 态 ; X: 逻辑 不确定; Z:高阻 态 。 ( 4)字符串 字符串是双引号 “”括起来的字符序列,必须包含在同 一行中,不能多 行书写。在表达式或赋值语句中作为操作数的字符串被看作 ASCII值 序列,即一个字符串中的每一个字符对应一个 8位 ASCII值。 ( 5)标识符 标识符是模块、寄存器、端口、连线、示例和 begin-end块等元素的名 称,是赋给对象的唯一的名称。标识符可以是字母、数字、 $符和下 划线 “_”字符的任意组合序列。 定义标识符规则: 首字符不能是数字,必须以字母或下划线 “_”开头。 字符数不能多于 1024。 标识符区分大小写。 不要与关键字同名。 例如 ina、 inb、 adder、 adder8、 name_adder是正确的,而 1a ?b是错误 的。 ( 6)关键字 关键字是 Verilog HDL预先定义的专用词。在 IEEE标准 Verilog HDL 1364-1995中规定了 102个关键词,都采用小写形式。关键词有其 特定和专有的语法作用,用户不能再对它们做新的定义。 关键字 Alwaysand Assignattribute Begin Buf Bufif0 Bufif1 Case Casex Casez Cmos Deassign Defaultdefpara m Disable edge else end endattribute endcase endfunction endmodule endprimitive endspecify endtable endtask event for force forever fork function highz0 highzl if initial inout input integer join large macromod ule medium module nand negedge nmos nor not notif0 notifl or output parameter pmos posedge primitive pull0 pull1 pulldown pullup rcmos real realtime reg release repeat rtranifl scalared signed small specify specpram strength strong0 strong1 supply0 supply1 table task time tran tranif0 tranif1 tri tri0 tri1 triand trior triteg unsigned vectored wait wand weak0 weak1 while wire wor xnor xor ( 7)变量 变量是在程序运行时其值可以改变的量。在 Verilog HDL中,变量分为网 络型( nets type)和寄存器型( register type)两种。 网络型变量 nets型变量是输出值始终根据输入变化而更新的变量,一般用来定义硬件 电路中的各种物理连线。 Verilog HDL提供了多种 nets型变量。 常见的 nets型变量及说明 类型 功能说明 wire、 tri 连线类型(两者功能完全相同) wor、 trior 具有线或特性的连线(两者功能一致) wand、 triand 具有线与特性的连线(两者功能一致) tri1、 tri0 分别为上拉电阻和下拉电阻 supply1、 supply0 分别为电源(逻辑 1)和地(逻辑 0) s1 s2 s3 寄存器型变量 register型变量是用来描述硬件系统的基本数据对象。作为一 种数值容器,可以容纳当前值,也可以保持历史值。与寄存 器的记忆功能相对应,可以作为模块各器件间的信息传递通 道。 register型变量与 wire型变量的区别在于 register型变量需要被 明确的赋值, 并且在重新赋值前一直保持原值。 register型 变量是在 always、 initial等过程语句种定义,并通过过程语句 赋值。 常见的 register型变量及说明 类型 功能说明 reg 常用的寄存器型变量 integer 32位带符号整数型变量 real 64位带符号实数型变量 time 无符号时间型变量 三、三、 Verilog HDL的语句的语句 Verilog HDL的语句包括赋值语句、条件语句、循环语句、 结构声明语句和编译预处理语句等类型,每一类语句又包括 几种不同的语句。在这些语句中,有些语句属于顺序执行语 句,有些语句属于并行执行语句。 ( 1)赋值语句 在 Verilog HDL中,赋值语句常用于描述硬件设计电路输出 与输入之间的信息传送,改变输出结果。 Verilog HDL有 4种 赋值方法:门基元、连续赋值、过程赋值和非阻塞赋值。 门基元赋值语句 门基元赋值语句的格式为 : 基本逻辑门关键字 (门输出,门输入 1,门输入 2, ,门 输入 n); 例如 4输入与非门的门基元赋值语句为 nand (y,a,b,c,d); /与语句 assign y=(a output y; input a,b,c,d; assign #1 y=(a /#1表示输出与输入信号之间具有 1个单位的时间延迟 endmodule 过程赋值语句 过程赋值语句出现在 initial和 always块语句中,赋值符号是 “=”,语句格式为: 赋值变量 =表达式; 过程赋值语句 “=”左边的赋值变量必须是(寄存器) reg型变 量,其值在该语句结束时即可得到。 如果一个块语句中包含若干条过程赋值语句,按顺序一条一 条执行,前面的语句没完成,后面的语句就不能执行。 因此,过程赋值语句也称为阻塞赋值语句。 非阻塞赋值语句 非阻塞赋值语句也是出现在 initial和 always块语句中,赋值符号是 “=b) max=a; else max=b; end endfunction 函数调用的格式如下 函数名 (关联参数表); 函数调用一般是出现在模块、任务或函数语句中。通过函数的调用来完 成摹写数据的运算或转换。例如,调用上例中求最大值函数的语句为 z ( ); 门级描述即直接调用门原语进行逻辑的结构描述。 以门级为基础的结构描述所建立的硬件模型不仅是可 仿真的,也是可综合的; 一个逻辑网络由许多逻辑门和开关组成,用逻辑门的 模型来描述逻辑网络最直观! 门类型的关键字有 26个,常用的有 9个: not, and, nand, or, nor, xor, xnor, buf, bufif1, bufif0, notif1, notif0(各种三态门) 调用门原语的句法 : 注 1: 在 端口列表中输出信号列在最前面; 注 2:门级描述不适于描述复杂的系统! 门级描述门级描述 可省略!可省略! 例:采用结构描述方式描述硬件电路 module example_4_11(y,a,b,c); input a,b,c; output y; wire s1,s2,s3; not (s1,a); nand (s2,c,s1); nand (s3,a,b); nand (y,s2,s3); endmodule 2)基于设计模块的结构描述 任何用 Verilog HDL描述的电路设计模块( module),均可 用模块例化语句,例化一个元件,来实现电路系统的设计。 模块例化语句格式与逻辑门例化语句格式相同,具体格式: 设计模块名 (端口列表); 其中, “例化电路名 ”是用户为系统设计定义的标识符,相 当于系统电路板上为插入设计模块元件的插座,而端口列表 相当于插座上引脚名表,应与设计模块的输入 /输出端口一一 对应。 用模块例化方式设计 1位全加器。 在 1位全加器设计中,需要事先设计一个半加器,然后用 例化方式将两个半加器和一个或门连接成全加器。 使用两个半加器模块构造全加器 module HA (A , B , S , C); input A , B; output S, C; assign S = A B; assign C = A endmodule module FA (P, Q, Cin, Sum, Cout) ; input P, Q, Cin; output Sum, Cout; wire S1, C1, C2; HA h1 (P, Q, S1, C1); /通过位置关联。 HA h2 (.A(Cin), .S(Sum), .B(S1), .C(C2); /通过端口与信号的名字关联。 or O1 (Cout, C1, C2) ; /或门实例语句 endmodule 端口列表小结:端口列表小结: 端口列表端口列表 是把例化元件端口与连接实体端口连接起来。是把例化元件端口与连接实体端口连接起来。 端口列表的方法有两种端口列表的方法有两种 : 位置关联法 : 位置关联法要求 端口列表中的 引脚明称与设计模块的输入、输出端口一一 对应。 名称关联法 : 名称 关联法的格式如下: ( .设计模块端口名( 连接实体端口名), ); 端口列表 中的位置可以是任意的。 例:用模块例化方式设计 8位计数译码器电路 系统。 在 8位计数译码系统电路设计中,需要事先设计一 个 4位二进制加法计数器 cnt4e模块和一个七段数码 显示器的译码器 Dec7s模块,然后用例化方式将这 两种模块组成计数译码系统电路。 4位二进制加法计数器的设计 4位二进制加法计数器的符号如图, CLK是时钟输入端; CLR复位控制输入端,当 CLR=1时计数器被复位,输出 Q30=0000; ENA 是使能控制输入端,当 ENA=1时,计数器才能工作; COUT是进位输出端,当输出 Q30=1111时, COUT=1。 module cnt4e(clk,clr,ena,cout,q); input clk ,clr,ena; output 3:0 q; output cout; reg 3:0 q; always (posedge clr or posedge clk) begin if (clr) q= b0000; else if (ena) q=q+1; end assign cout= endmodule 七段数码显示器的译码器 Dec7s的元件符号如图 A30是 4数据输入端,将接至 cnt4e的输出端 Q30; Q70是译码器的输出端,提供七 段数码显示数据。 module Dec7s(a,q); output7:0 q; input3:0 a; reg7:0 q; always (a) begin case(a) 0: q=8b00111111; 1: q=8b00000110; 2: q=8b01011011; 3: q=8b01001111; 4: q=8b01100110; 5: q=8b01101101; 6: q=8b01111101; 7: q=8b00000111; 8: q=8b01111111; 9: q=8b01101111; 10: q=8b01110111; 11: q=8b01111100; 12: q=8b00111001; 13: q=8b01011110; 14: q=8b01111001; 15: q=8b01110001; endcase end endmodule 计数译码系统电路的设计 计数译码系统电路是用 Quartus II的图形编辑方式设计出来 的。 用模块例化方式将 cnt4e和 dec7s两种模块组成计数译码系统电路 cnt_dec7s的源程序: module cnt_Dec_v(clk,clr,ena,cout,q); input clk ,clr,ena; output 15:0 q; output cout; reg 15:0 q; wire 3:0 q1,q2; wire x; cnt4e u1(clk,clr,ena,x,q1); cnt4e u2(clk,clr,x,cout,q2); dec7s u3(q1,q7:0); dec7s u4(q2,q15:8); endmodule 2 数据流建模 例:数据流描述的一位全加器 module FA_Df (A, B, Cin, Sum, Cout) ; input A, B, Cin; output Sum, Cout ; assign Sum = AB Cin; assign Cout = (A endmodule 1) assign语句之间是并发的,与其书写的顺序无关; 2)线网的赋值可以在声明时赋值,例如 wire Sum = AB Cin; 数据流建模的时延 assign #2 Sum = A B Cin; #2表示右侧表达式的值延迟两个时间单位赋给 Sum; 时间单位是多少?由谁来决定? timescale 1ns/100ps FPGA设计中的时延仅在功能仿真时有效,不影响实际 电路生成 。 数据流建模注意事项: 1) wire型变量如果不赋值,默认值为 z; 2)数据流建模没有存储功能,不能保存数据; 3) wire型变量只能在声明时赋值或者 assing语句 赋值; 4) assign语句并发执行,实际的延迟又物理芯 片的布线结果决定。 三、 Verilog HDL行为描述 Verilog HDL行为描述方式是通过行为语 句来描述电路要实现的功能,表示输入输出 间转换的行为,不涉及具体结构。 行为建模是一种 “高级 ”的描述方式。行 为描述既可以描述简单的逻辑门,又可以描 述复杂的数字系统,乃至微处理器。既可以 描述组合逻辑电路,又可以描述时序逻辑电 路。 例 11 2选 1数据选择器,用 Verilog HDL 对它做行为描述。 module mux_2_to_1 (a, b, out,outbar,sel); /这是一个这是一个 2选选 1数据选择器,名为数据选择器,名为 mux_2_to_1 input a, b, sel; /定义模块的输入端口为定义模块的输入端口为 a, b和和 sel output out, outbar; /定义模块的输出端口为定义模块的输出端口为 out和和 outbar assign out=sel? a:b; /如果如果 sel=1,将,将 a赋值给赋值给 out /如果如果 sel=0,将,将 b赋值给赋值给 out assign outbar =out; /将将 out取反后赋值给取反后赋值给 outbar endmodule /模块描述结束模块描述结束 例 3线 -8线译码器的 Verilog HDL设计 module decode3_8 (a, b, c, y, en); /这是一个 3线 -8线译码器,名为 decode3_8 input a, b, c, en; /定义模块的输入端口 output 7:0 y; /定义模块的输出端口为 out reg7:0 y; always (en or a or b or c) begin if(en) y=8b11111111; else begin case(c, b, a) 3b000: yb01001) cout,sum=sum+4b0110; end endmodule 保存的文件名与设计模块名相同,扩展名为 .v。 完成 BCD_adder的编译后,用 Quartus II的 File 菜单下 “Create Default Symbol”命令,对 BCD_adder编译生成元件 图形符号。 图中细的输入 /输出线表示单信号线,粗的输入 /输出线表示 多信号总线 。 编辑 BCD_Dec7源程序如下 : module BCD_Dec7(a,q); input 3:0 a; output 7:0 q; reg7:0 q; always (a) begin case(a) 4b0000: qb01001) cout,sum=sum+4b0110; end endmodule ( 6) 4输入端与非门 module example_4_4(y,a,b,c,d); /4input nand output y; input a,b,c,d; assign #1 y=(a endmodule ( 7)上升沿触发的 D触发器 module D_FF(q,d,clock); input d,clock; output q; reg q; always (posedge clock) q New Project Wizard”, 打开 Introduction对话框 。单击 “Next”。 2. 选择所建立工程的工作目录选择所建立工程的工作目录 ,输入工程名称、顶层实体名,输入工程名称、顶层实体名 工程名称工程名称 可以是任何名可以是任何名 字,建议使用和顶层实字,建议使用和顶层实 体名相同的名字。体名相同的名字。 顶层实体名称顶层实体名称 必须和顶必须和顶 层文件名字相同!层文件名字相同! 单击单击 “Next”。 此处为此处为 _3to8decode 此处为此处为 _3to8decode 此处为安装的默认路径此处为安装的默认路径 # # 3. 加入设计文件( 必要时) ( 1)单击 Add按钮 ,从其他工作目录 中选择所需要的现 成的源文件(只是 指向该文件位置) ;如果未加入设计 文件,可直接单击 “Next”,参见后面 文件输入步骤。 ( 2)单击 “Next” 。 此处添加位于软件安装的默认路径下此处添加位于软件安装的默认路径下 decode文件夹中的文件夹中的 _3to8decode文件文件 v第第 3步也可以略过,以后再创建设计文件,或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 边境安全防护员培训总结课件
- 垃圾屋数据中台建设中的隐私保护与资源利用效率悖论研究
- 哌啶酮盐酸盐在抗肿瘤药物中的构效关系与血脑屏障穿透机制
- 后疫情时代公共空间声压分级标准争议
- 反射棱镜纳米镀层环境稳定性与长周期可靠性研究
- 反光胶条生产工艺能耗与碳排放的碳中和路径重构
- 单相诱导塑封电机模块化设计对供应链弹性供应链的支撑度评估
- 区块链赋能供应链透明化与溯源信任机制构建
- 化工生产链中三氯乙烷挥发性逸散的实时监测与智能防控系统构建
- 功率倍增放大模块面向空天应用的极端环境可靠性强化与热失控预警
- 新学期幼儿园小班新生家长会课件
- 2024年车险理赔保险知识试题库(附含答案)
- 极简化改造实施规范
- 热固复合聚苯乙烯防火保温板应用技术规程(征求意见稿)
- 线性代数精第一章第一节课件
- 计算机系统原理13015习题答案
- 动物病料的采集运输保存
- 创意设计垃圾桶
- 截肢患者康复护理
- 应用统计基础与实务-教学课件-作者-宋文光-宫颖华-项目一
- 《维生素及图片》课件
评论
0/150
提交评论