4数字集成电路设计第四讲PLD与Verilog_第1页
4数字集成电路设计第四讲PLD与Verilog_第2页
4数字集成电路设计第四讲PLD与Verilog_第3页
4数字集成电路设计第四讲PLD与Verilog_第4页
4数字集成电路设计第四讲PLD与Verilog_第5页
已阅读5页,还剩224页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字集成电路设计今天的话题数字集成电路设计流程FPGAVerilogHDL3DesignAbstractionLevelsn+n+SGD+DEVICECIRCUITGATEMODULESYSTEM课前摸底问题Verilog中什么是RTL?

RTL寄存器传输级(register-transferlevel,RTL)是一种对同步数字电路的抽象模型,这种模型是根据数字信号在硬件寄存器、存储器、组合逻辑装置和总线等逻辑单元之间的流动,以及其逻辑代数运作方式来确定的。如果使用硬件描述语言来设计数字集成电路,设计人员通常并不在晶体管级进行设计,而是在更高的抽象级别(层次)进行工程设计。在硬件描述语言中,设计人员只需要声明寄存器(就像在计算机编程语言中声明变量一样),然后使用类似计算机编程中的条件(if...then...else)、选择(case)等运算符来描述组合逻辑的功能。我们把上述这样级别的设计成为寄存器传输级的设计。这个术语主要是指我们的关注点为信号在寄存器之间的流动。课前摸底问题什么是“逻辑综合”

(LogicSynthesize)?

逻辑综合(英语:logicsynthesis)是所设计数字电路的高抽象级描述,经过布尔函数化简、优化后,转换到的逻辑门级别的电路连线网表的过程。集成电路设计流程与软件:Synopsys为例7FunctionalsimulationLogicsynthesisDFTsynthesisNETLISTATPGPre-layout

simulationSTAFormalverificationPlace

&Route

PostSimulationSign-offVCSDesignCompilerDesignVisionDFTCompilerPrimetimeFormality

ICCompilerVCSRTLCodingMilkywayEnvironmentVCS(verilogcompiledsimulator)VCS是编译型Verilog模拟器。功能仿真与检测。DesignVision“综合工具”Synthesizes可测性设计(DFT,DesignForTest)Formality形式验证,形式验证是一种集成电路设计的验证方法,通过使用形式证明的方式来验证一个设计的功能是否正确:等价性检查(EquivalenceChecking)、形式模型检查(FormalModelChecking,也被称作特性检查)和定理证明(TheoryProver)TetraMax:AutomaticTestPatternGeneration(ATPG)自动测试向量生成是在半导体电器测试中使用的测试图形向量由程序自动生成的过程PrimeTime&DesignCompiler:STA工具静态时序分析(英语:StaticTimingAnalysis,STA),或称静态时序验证,是电子工程中,对数字电路的时序进行计算、预计的工作流程,该流程不需要通过输入激励的方式进行仿真

ICCompiler:layout版图设计工具Star-RCXT:版图后仿真JupiterXTHerculesDRC&LSCPrimeTime:signoff工具ASIC特点和分类按设计方法 全定制,各层掩模按特定电路功能专门制造半定制,有约束性的设计门阵列:预先制好的硅阵列,包含基本逻辑门和触发器,片上留有布线区标准单元:将预先配置好的经过测试有一定功能的逻辑块作为标准单元,存放在数据库,供设计时调用,在版图级完成与电路一一对应的最终设计PLDASIC设计方法ASIC的设计方法

IP核概念IP核复用技术

IP核的基本概念

IP,原意知识产权,著作权。 在IC设计领域,可理解为用于ASIC或FPGA/CPLD中的预先设计好的电路功能模块。 与IC工艺无关,可以移植到不同的半导体工艺中IC设计复用:复用以前的IP,利用已有的或第三方IP作为宏单元进行系统集成,形成完整的系统。IP核种类IP核种类----硬核,固核,软核硬核以版图形式描述基于一定设计工艺,设计者不能修改,系统设计布局布线难,灵活性较差有效保护知识产权固核由RTL描述和可综合的网表组成可在系统级重新布局布线,按规定增减部分功能实现技术不能更改,不同厂家固核不能互换,灵活性较差软核完全用HDL语言描述与实现技术无关,可按需要进行修改可在系统设计中重新布局布线灵活性较大时序不确定,增加系统设计后测试的难度IP核内容IP核内容功能描述文件说明IP功能时序要求设计实现文件具体设计设计验证文件仿真验证用综合描述文件指导软核综合SOC设计

SOC设计

SystemonChip,系统级芯片,片上系统 是一个有专用目标的集成电路,包含功能完整的一个系统并有嵌入软件的全部内容。 也是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。

基于IP模块的SOC设计方法含时序的全功能指令集,体系结构总线功能时序模型测试模型平面物理模型电规则检查周期精度的全功能IP模块设计IP模型生成设计修正基于IP模块的SOC设计方法采用自顶向下的设计和综合技术,大量IP模块的复用集成为特点功能设计详细时序设计物理设计系统级芯片软件设计IP模块设计IP验证模型层次IP模块集成使用基于IP的SoC设计的关键技术基于IP的SoC设计的关键技术系统级设计方法 总线架构技术、软硬件协同设计技术

IP核的设计和使用 设计,测试,验证技术、仿真技术,低功耗设计技术 超深亚微米集成电路设计实现技术

此外还要做嵌入式软件移植、开发研究,是一门跨学科的新兴研究领域。IP核可复用技术是SOC设计中关键,和保证系统及芯片开发效率和质量的重要手段。SoC的实现全定制ICFPGA/CPLDSOPC:SystemonProgrammableChip可编程片上系统EDA技术的发展趋势EDA技术的发展趋势

1、高性能EDA工具将得到进一步发展 新的系统级设计设计和验证语言,混合仿真工具systemC/systemverilog/C/C++

2、EDA技术将使ASIC和FPGA逐步走向融合 许多PLD公司为ASIC提供FPGA内核,可用于修改设计问题,提高ASIC设计灵活性

3、EDA技术的应用领域越来越广泛今天的话题数字集成电路设计流程可编程逻辑器件基础VerilogHDL可编程逻辑器件基础可编程逻辑器件入门FPGA现场可编程门阵列(FieldProgramableGateArray)PLD可编程逻辑器件(ProgramableLogicDevice)两者的功能基本相同,只是实现原理略有不同,可以忽略这两者的区别,统称为可编程逻辑器件或PLD/FPGA。CPLD复杂可编程逻辑器件(ComplexProgramableLogicDevice)RDDQ

QSD可编程逻辑器件基础PLDLogicAmoebaProgrammablelogicdevice2.1.1可编程逻辑器件发展历程Programmablelogicdevice低密度20世纪70年代PROM和PLAprogrammablelogicarray,Fuse熔丝编程结构70年代末AMDPALprogrammablearraylogic80年代初LatticeGALgenericarraylogic,E2PROM技术高密度80年代中AlteraEPLDerasableprogrammablelogicdevice,E2PROMorFlash technologyXilinxFPGAfieldprogrammablegatearray,SRAMtechnology90年代CPLD,complexPLD,Lattice提出ISP技术近年SOPC技术,高度集成化第2章可编程逻辑器件基础2.1.2PLD器件的分类

1)PLD器件的分类--按集成度 低密度PROM,EPROM,EEPROM,PAL,PLA,GAL只能完成较小规模的逻辑电路 高密度EPLD,CPLD,FPGA可用于设计大规模的数字系统集成度高,甚至可以做到SOC(SystemOnaChip)PLD器件的分类--按集成度

PLD器件的分类--按编程工艺2)PLD器件的分类--按编程工艺熔丝或反熔丝编程器件--Actel的FPGA器件体积小,集成度高,速度高,易加密,抗干扰,耐高温只能一次编程,在设计初期阶段不灵活SRAM--大多数公司的FPGA器件可反复编程,实现系统功能的动态重构每次上电需重新下载,实际应用时需外挂EEPROM用于保存程序ROM--大多数CPLD器件基于EPROM,EEPROM或FLASH可反复编程不用每次上电重新下载,但相对速度慢,功耗较大3)PLD器件的分类--按器件结构基于乘积项(Product-Term)的PLD结构

与或阵列通过修改固定内部电路的逻辑功能来编程,实现“积之和”形式的布尔逻辑函数大部分PLD,CPLD基于查找表(LUT,LookUpTable)的PLD结构类似门阵列,由简单查找表组成可编程逻辑门,在构成阵列形式通过改变内部连线的布线来编程大多数FPGAPLD器件的分类--按器件结构第2章可编程逻辑器件基础2.1.3PLD器件的优势

1、缩短研制周期 用FPGA/PLD试制样片,快速占领市场。

2、降低设计成本 出厂前做过测试,不需设计人员承担投片风险和费用,在实验室就可以通过相关的软硬件环境来完成芯片的最终功能设计。

3、提高设计灵活性 可反复地编程、擦除、使用,或在外围电路不动的情况下用不同软件就可实现不同功能。

4、

FPGA/CPLD规模越来越大,实现的功能越来越强,可实现系统集成。可编程逻辑器件基础基于乘积项(Product-Term

)的PLD器件的基本结构原理

器件名与阵列或阵列输出电路PROM固定可编程固定PLA可编程可编程固定PAL可编程固定固定GAL可编程固定可组态第2章可编程逻辑器件基础电路符号第2章可编程逻辑器件基础PROM实现的函数为:PLAI5I4O0I3I2I1I0O1O2O3ProgrammableANDarrayProgrammableORarrayIndicatesprogrammableconnectionIndicatesfixedconnectionPROMPALI5I4O0I3I2I1I0O1O2O3ProgrammableANDarrayFixedORarrayO0I3I2I1I0O1O2O3FixedANDarrayProgrammableORarray与或阵列均可编程与阵列可编程或阵列固定或阵列可编程与阵列固定可编程逻辑器件基础可编程逻辑器件基础GAL

BlockDiagramEEPROM工艺与或阵列输出逻辑宏单元,多种组态组合逻辑I/O寄存器I/O可编程逻辑器件基础可编程逻辑器件的编程元件非易失 熔丝型开关一次编程 反熔丝开关一次编程军品浮栅编程元件多次编程EPROMEEPROMFlashMemory易失

多次编程基于SRAM编程元件每个编程互联节点上有熔丝需要连接,保留熔丝若需断开,则用比工作电流大得多的编程电流烧断熔丝一次性编程熔丝占芯片面积较大基于熔丝(FUSE)基于熔丝(FUSE)核心:介质未编程时开关呈高阻(例如一对反向串联的肖特基二极管),当编程电压加在开关上将介质击穿后(使一个二极管永久性击穿而短路),开关呈现导通状态。熔丝:PROMPAL反熔丝:ActelFPGA基于反熔丝(ANTI-FUSE)0V25V0VDSRemovingprogrammingvoltageleaveschargetrapped5V22.5V5VDSProgrammingresultsin

higherVT.20V10V5V20VDSAvalancheinjection浮栅晶体管编程:利用浮栅存储电荷来保存数据非易失可重复擦除器件:GAL,CPLDEPROM紫外线擦除基于浮栅晶体管编程EEPROM电擦除FlashROM快速电擦除FLASHEEPROMWLBLVDDM5M6M4M1M2M3BLQQConfig.ControlRead/Write.ControlDataIOSRAM,静态配置存储器,易失元件,XilinxFPGA每次加电必须重新配置,方便在线重置基于SRAM编程

以MAX7000系列为例基于乘积项的CPLD内部结构

宏单元Macrocell组合逻辑输出(AND3的输出):f=(A+B)*C*(!D)=A*C*!D+B*C*!D(!D表示D的“非”)

乘积项结构PLD的逻辑实现原理f实现组合逻辑f:A,B,C,D由PLD的管脚输入后进入可编程连线阵列(PIA),在内部产生A,A反,B,B反,C,C反,D,D反8个输出。图中x表示相连(可编程熔丝导通),得到:f=f1+f2=(A*C*!D)+(B*C*!D)

DFF:用宏单元中的可编程D触发器实现CLK:走芯片的全局时钟专用通道,直接连接到DFF时钟端。DFF的输出与I/O脚相连,把结果输出到芯片管脚。乘积项结构PLD的逻辑实现原理简单电路:只需一个宏单元就可以完成,如前例。复杂电路:一个宏单元不能实现,可通过并联扩展项和共享扩展项连接多个宏单元,宏单元的输出也可连接到PIA,再做为另一个宏单元的输入。从而实现更复杂逻辑。这种基于乘积项的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无需其他芯片配合。乘积项结构PLD的逻辑实现原理基于查找表的FPGA结构原理采用这种结构的PLD芯片也称之为FPGA:如Altera的APEX,Stratix系列,Xilinx的Spartan,Virtex系列等。查找表(Look-Up-Table):LUT本质上是一个RAM目前FPGA中使用4或6输入LUT,所以每一个LUT可以看成一个有4或6位地址线的16x1(或64x1)的RAM。通过原理图或HDL语言描述的逻辑电路,PLD/FPGA软件会自动计算其所有可能的结果,并将其事先写入RAM。每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容输出即可。基于查找表(LUT)的FPGA的结构一个4输入与门的例子实际逻辑电路LUT的实现方式

a,b,c,d输入逻辑输出地址RAM中存储的内容00000000000001000010....0...01111111111

查找表(Look-Up-Table)的原理与结构xilinxSpartan-II的内部结构xilinxSpartan-II芯片内部结构Slices结构基于查找表(LUT)的FPGA的结构FPGA中可配置逻辑块(CLB)Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。在spartan-II中,一个CLB包括2个Slices每个slices包括2个LUT,2个触发器和相关逻辑。

Slices可看作是SpartanII实现逻辑的最基本结构单元(xilinx其他系列,如SpartanXL,Virtex的结构与此稍有不同,具体请参阅数据手册)基于查找表(LUT)的FPGA的结构altera的FLEX/ACEX等芯片的结构

alteraFLEX/ACEX芯片的内部结构基于查找表(LUT)的FPGA的结构LAB(logicarrayblock)逻辑阵列块

逻辑单元(LE)内部结构基于查找表(LUT)的FPGA的结构FLEX/ACEX的结构:LAB,I/O块,RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE)每个LE包括一个LUT,一个触发器和相关的逻辑。LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX的结构与此基本相同,具体请参阅数据手册)基于查找表(LUT)的FPGA的结构我们仍以这个电路为例。组合逻辑:A,B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连接到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出。D触发器:利用LUT后面D触发器来实现。CLK:由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到DFF的时钟端。DFF的输出与I/O脚相连,把结果输出到芯片管脚。查找表结构的FPGA逻辑实现原理对于一个LUT无法完成的电路,通过进位逻辑将多个单元相连,可以实现复杂的逻辑。由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,一定需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作,由于配置时间很短,不会影响系统正常工作。也有少数FPGA采用反熔丝或Flash工艺,对这种FPGA,就不需要外加专用的配置芯片。查找表结构的FPGA逻辑实现原理随着技术的发展,在2004年以后,一些厂家推出了一些新的PLD和FPGA,这些产品模糊了PLD和FPGA的区别。例如:Altera的MAXII系列PLD,基于FPGA(LUT)结构,集成配置芯片于PLD,在本质上是一种在内部集成了配置芯片的FPGA,但由于配置时间极短,上电就可以工作,所以对用户来说,感觉不到配置过程,可以象传统的PLD一样使用,容量和传统PLD类似,所以altera把它归作PLD。Lattice的XP系列FPGA,同样将外部配置芯片集成到内部,在使用方法上和PLD类似,但是容量大,性能和传统FPGA相同,也是LUT架构,所以Lattice仍把它归为FPGA。其他结构类型的FPGA和PLD可编程逻辑器件基础可编程逻辑器件的基本资源可编程功能单元RAM查找表基于多路开关的功能单元固定功能单元可编程输入输出单元可编程布线资源长线直线连线通用内部连线开关矩阵可编程连接点片内RAM(块式、分布式)可编程逻辑器件基础

可编程逻辑器件的设计开发流程和开发工具

设计流程设计流程架构设计产生设计文档非常重要器件设计目标说明与上层或整个系统关系描述器件外部接口器件结构图structuraldiagram器件完整系统的工作方法,原理描述operationalgorithm其内部各个子模块结构功能描述I/O信号定义结构structuraldiagram工作原理功能或行为描述operationalgorithm与软件接口定义设计输入原理图适合描述连接关系和接口关系,直观,对表现层次结构,模块化结构更为方便要求设计工具提供必要元件库或逻辑宏单元设计可重用性可移植性差一些HDL文本逻辑描述能力强描述接口连接关系不如图形方式直观是基本,有效,通用的输入方法 一般的,PLD设计采用层次化设计方法,顶层设计描述器件总体功能,常使用图形法;底层设计描述器件最基本的功能模块,常用HDL描述。设计流程设计输入设计综合:是将HDL描述与硬件结构挂钩,将软件转化为硬件电路的关键步骤。有三种形式:行为综合:从算法表示,行为描述转换到寄存器传输级(RTL),即从行为描述转换到结构描述逻辑综合:RTL级描述转换到逻辑门级(含触发器)版图综合/结构综合:从逻辑门表示转换到版图表示,或转换到PLD器件的配置网表表示综合时要给定最后实现的硬件结构参数,综合的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,成为相应的映射关系。显然映射不是唯一的,为达到速度,面积,性能优化,常需要对综合加以约束,称为综合约束。设计流程设计综合设计流程

设计综合要点FPGA/IC硬件结构参数HDL描述的电路电路网表约束条件速度/面积/性能优化综合工具布局布线适配器:结构综合器,将由综合器产生的网表文件配置于指定的目标器件中,产生最终的下载文件。适配所选定的目标器件必须与综合时指定的目标器件相同。EDA软件中综合器可由第三方EDA公司提供,而适配器则需要由CPLD/FPGA供应商提供。因为适配器适配对象直接与器件结构细节相对应。适配后可利用适配所产生的仿真文件作精确时序仿真,同时产生可用于编程的文件设计流程布局布线时序与功能仿真仿真:编程下载前利用EDA工具对适配生成的结果进行模拟测试,对电路进行功能验证。功能仿真:不考虑信号延时等因素,也叫前仿真时序仿真:选择了具体器件并完成了布局布线后进行,包含定时关系,是接近真实器件运行特性的仿真,精度高。也叫后仿真不同器件内部延时不一样,不同布局布线会对延时造成很大影响,有必要作后仿真,以分析电路的情势关系,估计设计的性能设计流程时序与功能仿真编程下载和硬件测试下载:把适配后生成的下载或适配文件,通过编程器或编程电缆装入FPGA/CPLD中。将基于EEPROM等工艺的非易失结构的CPLD器件的下载称为编程(program)基于SRAM工艺结构的FPGA器件的下载成为配置(configure)对于反熔丝结构和Flash结构的FPGA的下载,以及对FPGA的专用配置ROM的下载仍称为编程。编程方式ISP在系统编程专用编程器现在的编程器一般都支持在系统编程,设计数字系统和做PCB板时应预留好器件的下载接口设计流程编程下载和硬件测试可编程逻辑器件基础CPLD/FPGA开发工具1、设计输入编辑器原理图

ViewDraw OrcadCapture状态图波形图HDL文本

UltraEdit AldecActiveHDL结合MentorHDLDesignerSeries第2章可编程逻辑器件基础2、HDL综合器FPGA综合器Synopsys:FPGACompiler,DC-FPGASynplicity:SynplifyProMentor:LeonardoSpectrumASIC综合器Synopsys:DesignCompilerSynplicity:SynplifyASICCadence:Synerdy可编程逻辑器件基础3、仿真器按对设计语言不同的处理方式分:编译型,速度快,需预处理,不便即时修改;解释型,速度一般,可随时修改仿真环境和条件按处理的HDL类型分:VHDL仿真器;Verilog仿真器;混合仿真器;其他HDL仿真器按仿真的电路描述级别不同,HDL仿真器可单独或者完成各步骤仿真系统级行为级RTL级门级时序仿真典型例子ModelTechnology:Modelsim,编译型混合仿真器Cadence:Verilog-XL,最好的Verilog仿真器之一Aldec:ActiveHDLSynopsys:VCSCadence:NC-sim可编程逻辑器件基础4、适配器(布线)

完成目标系统在器件上的布局布线,由PLD厂商提供的专门针对器件开发的EDA软件工具来完成。Lattice:ispLEVELAltera:QuatusII中的FitterXilinx:ISE可编程逻辑器件基础5、下载器 把设计下载到对应的实际器件 软件部分一般由PLD厂商提供的专门针对器件下载或编程软件来完成今天的话题数字集成电路设计流程可编程逻辑器件基础VerilogHDL67硬件描述语言Verilog简介知识点:什么是硬件描述语言HDL以及why?硬件描述语言分类与Verilog简介VerilogHDL的抽象级别

68什么是硬件描述语言HDL具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言这种特殊结构能够:描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性

HDL主要有两种:Verilog和VHDL69电路的逻辑功能容易理解;把逻辑设计与具体电路的实现分成两个独立的阶段来操作;逻辑设计与实现的工艺无关;逻辑设计的资源积累可以重复利用;

可以由多人共同更好更快地设计非常复杂的逻辑电路。为什么要用硬件描述语言来设计?702.3.2有哪几种硬件描述语言?各有什么特点?VHDL

语法/结构比较严格,因而编写出的模块风格比较清晰;

较多的设计人员合作完成的特大型项目。欧洲习惯VerilogHDL语法灵活,在注释清晰的情况下,工作量略少;美国、台湾习惯71Verilog的历史

VerilogHDL是在1983年由GDA(GateWayDesignAutomation)公司的PhilMoorby所创。PhiMoorby后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。在1984~1985年间,Moorby设计出了第一个Verilog-XL的仿真器。

1986年,Moorby提出了用于快速门级仿真的XL算法。

1990年,Cadence公司收购了GDA公司

1991年,Cadence公司公开发表Verilog语言,成立了OVI(OpenVerilogInternational)组织来负责VerilogHDL语言的发展。

1995年制定了VerilogHDL的IEEE标准,即IEEE1364。722.3.4VerilogHDL的抽象级别

语言本身提供了各种层次抽象的表述,可以用详细程度有很大差别的的多层次模块组合来描述一个电路系统。行为级:技术指标和算法的Verilog描述RTL级:逻辑功能的Verilog描述门级:逻辑结构的Verilog描述开关级:具体的晶体管物理器件的描述73抽象级(LevelsofAbstraction)在抽象级上需要进行折衷系统说明-设计文档/算术描述RTL/功能级-Verilog门级/结构级-Verilog版图/物理级-几何图形详细程度低高输入/仿真速度高低74例子:RTL级(即逻辑描述)两路MUX的逻辑描述为:只要信号a或b或sel发生变化,如果sel为0则选择a输出;否则选择b输出。modulemuxtwo(out,a,b,sel);inputa,b,sel;outputout;

wireout;assignout=(sel)?b:a;endmodule75VerilogHDL基本模块说明VerilogHDL中的词汇约定VerilogHDL

数据类型VerilogHDL

运算符主要内容76VerilogHDL基本模块说明module能够表示:物理块,如IC或ASIC单元逻辑块,如一个CPU设计的ALU部分整个系统每一个模块的描述从关键词module开始,有一个名称(如SN74LS74,DFF,ALU等等),由关键词endmodule结束。module是层次化设计的基本构件逻辑描述放在module内部77

Verilog模块(module)结构基本要素知识点:1.端口信息2.输入/输出说明3.逻辑功能描述781.端口信息1.端口在模块名字后的括号中列出3.端口可以说明为input,output及inout2.端口等价于硬件的引脚(pin)模块通过端口与外部通信79Verilog模块的结构由在module和endmodule

关键词之间的四个主要部分组成:

-1.端口信息:modulecombination(a,b,c,d);-2.输入/输出说明:inputa,b,c;outputd;

-//输入/输出端口信号类型声明,缺省为wire型:-3.内部信号:wirex;-4.功能定义:assignd=a|x;assignx=(b&~c);

endmodule

端口说明80逻辑功能描述modulemux2to1(out,a,b,sel);inputa,b,sel;outputout;

wireout;assignout=(sel)?b:a;endmodule两路选择器的RTL级描述:81请在下面的空格中填入适当的符号使其成为右图的Verilog模块:

moduleblock1(a,b,—,—,—);input—,—,—;——d,—;assignd=a|(b&~c);assigne=(b&~c);_______练习:编写VerilogHDL模块abcde

82

moduleblock1(a,b,c,d,e);inputa,b,c;

outputd,e;assignd=a|(b&~c);assigne=(b&~c);endmodule

练习答案:编写VerilogHDL模块abcde83VerilogHDL中的词汇约定知识点:术语及定义Verilog采用的四值逻辑系统整数常量和实数常量标识符841.术语及定义1.空白符:空格、tabs及换行2.标志符(Identifier):Verilog中对象(如模块或信号)的名字3.LSB:最低有效位(Leasesignificantbit)4.MSB:最高有效位(Mostsignificantbit)853.

Verilog采用的四值逻辑系统’0’,零,Low,False,LogicLow,Ground,VSS,NegativeAssertion‘1’,壹,High,True,LogicHigh,Power,VDD,VCC,PositiveAssertion’X’Unknown:不确定,OccursatLogicalWhichCannotbeResolvedConflict‘Z’,HighImpedance,高阻状态(三态门),Tri-Stated,DisabledDriver(Unknown)864。整数常量和实数常量

Verilog中,常量(literals)可是整数也可以是实数。1.整数的大小可以定义也可以不定义。整数表示为:

<size>'<base><value>

其中

size:位数大小,由十进制数表示的位数(bit)表示。缺省为32位

base:数基,可为2(b)、8(o)、10(d)、16(h)进制。缺省为10进制

value:是所选数基内任意有效数字,包括

X、Z。2.实数常量可以用十进制或科学表示法表示。8712

unsizeddecimal(zero-extendedto32bits)‘h83a

unsizedhexadecimal(zero-extendedto32bits)8'b110000018-bitbinary16'hff0116-bithexadecimal

32'bz01xZ-extendedto32bits3'b101011013-bitnumber,truncatedto3’b1016.3decimalnotation32e-4scientificnotationfor0.00324.1E3scientificnotationfor4100整数与实数常量例子88整数和实数常量小结整数的大小可以定义也可以不定义。整数表示为:数字中(_)忽略,便于查看没有定义大小(size)整数缺省为32位/*特别注意*/缺省数基为十进制数基(base)和数字(16进制)中的字母无大小写之分当数值value大于指定的大小时,截去高位。如2'b1101表示的是2'b01实数常量实数可用科学表示法或十进制表示科学表示法表示方式:

<尾数><e或E><指数>,表示:尾数×10指数89标识符(identifiers)(重点)标识符是用户在描述时给Verilog对象(电路模块、信号等)起的名字标识符必须以字母(a-z,A-Z)或(_)开头,后面可以是字母、数字、($)或(_)。最长可以是1023个字符标识符区分大小写,sel和SEL是不同的标识符例如:

moduleMUX2_1(out,a,b,sel); outputout; inputa,b,sel;

wiresel_,a1,b1; notnot1

(sel_,sel); andand1(a1,a,sel_); andand2(b1,b,sel); oror1(out,a1,b1); endmoduleVerilog标识符90有效标识符举例:

shift_reg_a busa_index _bus3无效标识符举例:

34net//开头不是字母或“_” a*b_net//包含了非字母或数字,“$”“_” n@238//包含了非字母或数字,“$”“_”Verilog区分大小写,所有Verilog关键词如module、endmodule等都使用小写字母。91VerilogHDL数据类型知识点:1线网类型2寄存器类型3参数4位选择92VerilogHDL数据类型VerilogHDL有两大类数据类型。1.线网类型(nettype):

表示Verilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。2.寄存器类型(registertype):表示一个抽象的数据存储单元,它只能在always语句和initial语句等过程语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量具有x的缺省值。93net(线网)型net需要被持续的驱动,驱动它的可以是门和模块。当net驱动器的值发生变化时,新值被传送到net上。可综合的线网数据类型包含下述:

wire

worwandtrisupply0supply1

最常用的是wire!!94简单的线网类型说明语法为:

net_kind[msb:lsb]net1,..,netN;

解释:1.net_kind是上述线网类型的一种;2.msb和lsb是用于定义线网范围的常量表达式,如果没有定义,缺省为1位。例1:wirerst,data;//1位的复位线和数据线。例2:wire[2:0]Addr1;//Addr1是3位地址线

wire[3:1]Addr2;//Addr2是3位地址线

线网数据类型-使用语法95寄存器的类型寄存器类有四种数据类型寄存器类型功能reg

是最常用的寄存器类型,无符号型。integer32位有符号整数变量,算术操作产生二进制补码形式。的结果。通常用作不会由硬件实现的的数据处理。real双精度的带符号浮点变量,用法与integer相同。time64位无符号整数变量,用于仿真时间的保存与处理。realtime与real内容一致,但可以用作实数仿真时间的保存与处理。96

寄存器类型reg-使用语法

reg是寄存器数据类型最常见的数据类型。

使用语法形式如下:

reg[msb:lsb]reg1,...,regN;msb和lsb定义了范围,并且均为常数值表达式;如果没有定义范围,缺省值为1位寄存器。例1:reg[3:0]counter1;//4位寄存器。例2:regcounter2;//1位寄存器。例3:reg[31:0]data_buffer1;

reg[32:1]data_buffer2;97

常见的寄存器类型:integer

integerA,B,C;//三个整数型寄存器。说明:

1.

与reg不同,integer可以表示有符号数,并且算术操作符提供2的补码运算结果。

2.同时,如上例定义的A,B,C变量它们分别是32位(32-bit)的寄存器变量。

98

如何给模块端口信号选择正确的数据类型?moduletop(A,B,Y);inputA,B;outputY;//信号Y,A,B,类型?DUTu1(Y,A,B);endmodulemoduleDUT(O,in1,in2);outputO;inputin1,in2;wirein1,in2;regO;always@(in1orin2)O=in1+in2;endmodule输入端口(如右图in1、in2信号)只能是net;但输入端口可以由net/register驱动输出端口(如O)可以是net/register类型,但输出端口只能驱动net若in1、in2说明为reg则会产生错误。in1in2OABY99

参数

参数是一个常量。

参数定义的语法:parameter<list_of_assignment>;如:parameterWIDTH

=8'h20;parameterBYTE

=4'h8;

100

参数(parameters)使用注意事项1.推荐:一般定义参数等常量名称用大写,变量名称用小写!2.可一次定义多个参数,用逗号隔开。如:parameterWORD_WIDTH=32,ADDR_WIDTH=8;等同于:parameterWORD_WIDTH=32;parameterADDR_WIDTH=8;101

(parameters)使用注意事项(cont.)

3.参数的定义是局部的,只在当前模块中有效。如:在工程Multi-CPU中一个文件a.v中定义

parameter

WORD_WIDTH=32;在同一工程另一个文件b.v中定义

parameter

WORD_WIDTH=8;

是可以的。//但是如果这样,项目比较复杂时,容易混淆WORD_WIDTH的值,不建议这样使用,可以声明成两个不同名称的参数来处理这种情况。

1023.3.5

Verilog模块中常见信号类型-总结两种主要的信号类型:

-寄存器类型:代表reg

在always等过程块中被赋值的信号,往往代表触发器,但不一定是触发器。(时序逻辑电路中常常被综合为D触发器;纯组合逻辑电路中被综合为连线)

-连线类型:代表wire用assign关键词指定连续/持续赋值所描述的组合逻辑的信号或连线。103VerilogHDL运算符知识点:逻辑运算符按位操作符连接操作复制操作

104逻辑运算符逻辑操作符有:

&&(逻辑与)||(逻辑或)!(逻辑非)这些操作符在逻辑值0或1上操作。逻辑操作的结构为0或1。

105

逻辑运算符例一例如,假定:Crd=1'b0;//0为假Dgs=1'b1;//1为真那么:Crd&&Dgs结果为0(假)Crd||Dgs结果为1(真)!Dgs结果为0(假)

106按位操作符按位操作符有:~(一元非)&(二元与)|(二元或)^(二元异或)~^,^~(二元异或非)

107

按位操作符例一例如,假定,A=4'b0110;B=4'b0100;那么:A|B结果为?,

A||B结果为?A&B

结果为?,A&&B结果为?~A=?,!A=?

1083.4.4关系运算符关系操作符有:>(大于)<(小于)>=(不小于)<=(不大于)关系操作符的结果为真(1'b1)或假(1'b0)或1'bx。

1093.4.5相等操作符(掌握)moduleequalities_test;reg[3:0]rega,regb,regc;regval;initialbegin

rega=4'b0011;regb=4'b1010;regc=4'b1x10;

#10val=(rega==regb);//val=0#20val=(rega!=regc);//val=1#30val=(regb!=regc);//val=x

#50$finish;endendmodule

其结果是1’b1、1’b0或1’bx。如果左边及右边为确定值,并且相等,则结果为1。如果左边及右边为确定值,并且不相等,则结果为0。如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。!=的结果与==相反值确定是指所有的位为0或1。不确定值是有值为x或z的位。==!=

1103.4.7移位操作符移位操作符有:<<(左移)>>(右移)

如rega<<5意思是rega向左移5位;rega>>3意思是rega向右移3位;

移位操作符对其左边的操作数进行向左或向右的位移位操作。第二个操作数(移位位数)是无符号数。

111moduleshift_test;reg[9:0]num,num1;reg[7:0]rega,regb;

…//如果rega=8'b00001100;num<=rega<<5;//num=10'b0110000000regb<=rega<<5;//regb=8'b10000000num1<=rega>>3;//num1=10'b0000000001…endmodule左移先补后移右移先移后补建议:移位操作最好表达式左右两边位数一致,如上面的reg[7:0]rega,regb;

1123.4.8连接操作连接操作是将小表达式合并形成大表达式的操作。形式如下:{expr1,expr2,...,exprN}

113

连接操作实例

wire[9:0]d;wire[9:0]a;assignd[9:5]={a[0],a[1],a[2],a[3],a[4]};

//以反转的顺序将a的低端4位赋给d的高端4位。

assign

d={d[4:0],d[9:5]};

//高4位与低4位交换。

114

由于非定长常数的长度未知,不允许连接非定长常数。例如,下列式子非法:reg[16:0]a;reg[31:0]d;…

d={a,5};//error!!不允许连接操作非定长常数。

d={a,16'h0005};

//error!!右边33位,左边32位,位宽不匹配,一样会出错改为:d={a,15'h5};

连接操作注意事项

1153.4.9复制操作

复制通过指定重复次数来执行操作。语法形式如下:{repetition_number{expr1,expr2,...,exprn}}

116例一:wire[7:0]d;wire[11:0]a;…assignd={2{4'b1011}};//d等于8‘b10111011例二:/*符号扩展*/{3{1'b1}}结果为3'b111{3{Ack}}结果与{Ack,Ack,Ack}相同复制操作实例

1176.2测试的目的被测试器件DUT是一个二选一多路器。测试装置(testfixture/testbench)提供测试激励及验证机制。

118测试模块的3要素:1)产生激励(输入信号波形)。2)将输入激励加入到测试模块并收集其输出响应。3)将响应输出与期望值进行比较。

119施加激励方式:

产生激励并加到设计有很多种方法。一些常用的方法有:从一个initial块中施加线性激励从一个循环或always块施加激励从一个向量或整数数组施加激励记录一个仿真过程,然后在另一个仿真中回放施加激励测试模块的编写

120通常需要两类波形:1.一类是具有重复模式的波形,例如时钟波形。2.另一类是一组确定值的波形,如输入的图像数据。

1216.3.1确定值序列产生方法

产生确定值序列的最佳方法是使用initial语句。initial内使用阻塞赋值语句外延时,例如: initial begin Reset=0; #100Reset=1; #80Reset=0; #30Reset=1; end

122

initial内采用阻塞赋值语句内延时,也能够按如下实例所示产生波形。 initial begin Reset=0; Reset=#1001; Reset=#800; Reset=#301; end

123

initial内采用非阻塞赋值语句:如果使用绝对时延,可用带有语句内时延的非阻塞性过程性赋值,例如,initial begin Reset<=0; Reset<=#1001; Reset<=#1800; Reset<=#2101; end这三个initial语句产生的波形与图11-1中所示的波形一致。

124

如:常用时钟信号的激励产生方法:

regclk_A;parameterCLK_PER=10; initial clk_A=0; always

#(CLK_PER/2)clk_A=~clk_A;重复值序列产生方法-always语句

125上机作业:寄存器变量被综合成触发器或者线的例子电路功能文件proced_reg.v中定义:`timescale1ns/10psmoduleprocedure_reg(clk,rst,a,c);inputclk,rst,a;outputc;regc;

regb;always@(posedgeclkornegedgerst)

//always@(rstora)if(!rst)b<=0;elseb<=a;

always@(posedgeclkornegedgerst)

//always@(rstorb)if(!rst)c<=1;elsec<=b;endmodule

126其测试模块编写测试文件test_proced_reg.v中:`timescale1ns/10psmoduletest_procedu_reg;regclk_test,rst_test;rega_test;wirec_test;procedure_regu1(.clk(clk_test),.rst(rst_test),.a(a_test),.c(c_test));initialbegin

clk_test=0;

rst_test=1; #10rst_test=0;

#10

rst_test=1; #100

a_test=0; #200a_test=1;

#100

a_test=0;end

always#50clk_test=~clk_test;endmodule

1276.5仿真工具的使用电路功能文件proced_reg.v中定义过程块敏感量为@(posedgeclkornegedgerst)时的仿真波形:

128过程块敏感量为@(posedgeclkornegedgerst)时的电路图

1296.5.2过程块敏感量为always@(rstora)/(rstorb)时的

仿真波形

1307.1.2综合器的作用综合工具把Verilog模块描述的逻辑按照设计工程师的面积、功耗、延时等约束要求转变为用具体某一Foundry厂所提供的工艺下的门级结构描述的模块。综合后的网表(即门级结构描述的模块),逻辑正确与否同样可以通过Modelsim等仿真工具来仿真进行验证。

1317.1.3综合技术带来的好处设计师可以采用更高层次的设计方法,设计出更复杂的东西;由于逻辑综合工具的使用,高层次的设计可以很快的转换为门级电路设计,芯片推出周期缩短;逻辑综合技术使与工艺无关的设计成为可能;综合工具可以按照约束设置对设计进行自动优化,要得到有不同性能指标的结果,有时候仅仅需要修改综合时的约束设置。

132综合工具种类最著名的综合工具是Synopsys公司开发的DesignCompiler等。一些FPGA公司也开发了自己的HDL综合器,例如XilinxISE平台下的XSTSynplicity(Synplify,Amplify,Certify和SynplifyAsic),

1337.1.5综合具体操作流程

1347.1.6综合过程中的三个步骤

综合包括转译(Translation)、优化(Opitimization)、映射(Mapping)三过程。转译把电路的HDL描述转化为与工艺无关的功能块组成的逻辑电路的过程。映射是把转译后得到的电路结构用特定目标工艺库中的单元来实现。这时得到的电路包含了具体的制造工艺参数。优化则是综合工具根据设计者施加的时序和面积等约束条件对电路进行改进的过程。

1357.2静态时序分析基础知识知识点:7.2.1进行静态时序分析的原因7.2.2进行静态时序分析的方法

1367.2.1为什么要进行静态时序分析?说说静态、动态时序模拟的优缺点。传统上是采用动态仿真来验证一个设计的功能和时序。随着设计规模的增大,验证一个设计所需要的测试向量的数量以指数增长,且这种方法难以保证足够的覆盖率。在大型设计中,如果仅用传统的动态仿真的方法,则时间及工作量都难以承受。

137静态时序分析可以降低验证的复杂性。静态时序分析提供了一种针对大规模设计验证的有效解决方法。它可以检查电路中所有时序路径的时序,测试覆盖率可以达到100%。STA的方法不需要任何测试向量,分析所需要的时间远远少于门级动态仿真。但静态时序与动态仿真相比,也有自身的缺点。

138STA不能验证设计的功能,设计功能验证还必须使用功能仿真来实现。另外,静态时序分析

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论