数字系统设计QuartusⅡ的VerilogHDL建模与仿真.ppt
数字系统设计Quartus的VerilogHDL建模与仿真 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望常用的PLD设计EDA工具软件PLD设计EDA工具软件的分类1.由芯片制造商提供提供了一个CPLD/FPGA 的完全集成化设计环境只支持本公司的PLDPLD可以使用几种不同的 EDA工具完成整个设计!即不同的阶段选用不同的工具 EDA ToolProviderDescriptionMAX+PLUSAltera早期早期PLD开开发工具,易于学工具,易于学习和使用和使用 Quartus Altera第第4代代EDA工具,功能工具,功能强大,大,并适于并适于 SOPC 开开发FoundationXilinxXilinx的早期的早期 PLD 开开发工具工具ISEXilinxXilinx的最新的最新 PLD开开发工具工具ispDesignEXPERT,ispLEVERLattice2002年推出年推出ispLEVER常用的PLD设计EDA工具软件2.由专业EDA软件商提供第三方设计软件支持多家公司的PLDEDA ToolProviderDescriptionFPGA AdvantageMentor Graphics包括 HDL Designer Series (可视化的设计输入工具),ModelSim(仿真工具),Precision RTL Synthesis (最新的逻辑综合器)。SynplifySynplicity优秀的逻辑综合工具LeonardoSpectrmMentor GraphicsMentor早期的逻辑综合工具FPGA Compiler IISynopsys新的逻辑综合工具ModelSimMentor Graphics高效、功能强大的仿真工具Active HDLAldec仿真工具,简单易用NC-Verilog/NC-VHDL/NC-SIMCadence优秀的仿真工具Quartus简介Quartus 美国Altera公司自行设计的第四代PLD开发软件目前最新版本:9.1 1.完全集成化的设计工具将设计输入、逻辑综合、布局与布线、仿真、时序分析、器件编程集成在同一开发环境下;可加快动态调试,缩短开发周期。特点特点特点特点 2.与器件结构无关 其核心Compiler支持Altera所有PLD器件:Stratix II,Cyclone II,Stratix GX,MAX II,Stratix HardCopy,Stratix,Cyclone,APEX II,APEX 20K/E/C,Excalibur,&Mercury DevicesFLEX 10K/A/E,ACEX 1K,FLEX 6000,MAX 7000S/AE/B,MAX 3000A Devices支持的第三方工具综合工具Leonardo Spectrum*Design CompilerFPGA Compiler IIStandard*&Altera Edition*FPGA Express*Synplicity Synplify*仿真工具ModelSim*ModelSim OEM*Cadence Verilog-XLInnoveda BLASTPrimeTime*Synopsys VCSSynopsys VSS注意*表示支持内部链接Quartus简介Quartus的启动界面1 Project Navigator窗口窗口2 Status窗口窗口3 主工作区域主工作区域4 Messages窗口窗口5 工具栏工具栏Quartus的图形用户界面功能1 Design Entry(设计输入)(设计输入)Text Editor Block&Symbol EditorMegaWizard Plug-In ManagerAssignment EditorFloorplan Editor2 Synthesis(综合)(综合)Analysis&SynthesisVHDL,Verilog HDL&AHDL Design Assistant RTL ViewerTechnology Map Viewer Incremental Synthesis3 Place&Route(布局布线)(布局布线)FitterAssignment EditorFloorplan EditorChip EditorReport WindowResource Optimization Advisor Design Space Explorer4 Timing Analysis(时序分析)(时序分析)Timing AnalyzerReport WindowTechnology Map Viewer5 Simulation(仿真)(仿真)SimulatorWaveform EditorQuartus的图形用户界面功能6 Programming(编程)AssemblerProgrammerConvert Programming Files7 System-Level Design(系统级设计)SOPC BuilderDSP Builder8 Software Development(软件开发)Software Builder9 Block-Based Design(基于块的设计)LogicLock WindowFloorplan EditorVQM Writer10 EDA Interface(EDA界面)界面)EDA Netlist Writer11 Power Analysis(功耗分析)(功耗分析)PowerPlay Analyzer ToolPowerPlay Early Power Estimator12 Timing Closure(时序逼近)(时序逼近)Floorplan EditorLogicLock WindowTiming Optimization AdvisorDesign Space ExplorerQuartus的图形用户界面功能13 Debugging(调试)SignalTap IISignalProbeIn-System Memory Content EditorRTL ViewerTechnology Map ViewerChip Editor14 Engineering Change Management(工程变动管理)Chip EditorResource Property EditorChange Manage如何在线获取帮助?按F1F1键,可打开帮助窗口,即时访问对话框上的信息、高亮度的菜单命令或弹出式信息;或按Shift+F1Shift+F1键,鼠标变为一个问号,在图元、宏单元符号等屏幕显示的任何项目上单击鼠标左键,可获得该项目的帮助;或单击工具栏上的帮助帮助按钮 ,鼠标也会变为一个问号,然后单击想要获得帮助的项目。Quartus 的设计流程(1)(2)(4)(5)(3)设计要求设计要求设计输入设计输入功能仿真功能仿真综合综合布局布线布局布线时序分析时序分析时序仿真时序仿真设计修改设计修改(6)(7)全编译全编译编程、配置编程、配置自上而下的方式自上而下的方式设计输入Quartus IIText Editor文本输入AHDL,VHDL,Verilog HDLMemory Editor存储器输入HEX,MIFSchematic Design Entry图形设计输入3rd-Party EDA Tools第3方EDA工具EDIFHDLVQM(Verilog Quartus Mapping)Mixing&Matching Design Files Allowed设计输入文件设计实例1设计要求设计要求设计一个3线-8线译码器,真值表如表1所示:()设置使能控制端,低电平有效。()输出高电平有效。()采用Verilog语言的文本输入方式。(4)进行功能仿真与验证。*说明:本例采用门级描述和行为描述两种方式。两种方式描述均能完成设计要求。设计实例11 门级描述(程序如下)/Gate-level description of a 3-to-8line decoder(Figure 1)module _3to8decode(A1,A2,A3,E,Y);input A1,A2,A3,E;/定义输入信号 output7:0 Y;/定义输出信号 wire A1not,A2not,A3not,Enot;/定义电路内部节点信号 not n1(A1not,A1),/非门调用 n2(A2not,A2),n3(A3not,A3),n4(Enot,E);and n5(Y0,A3not,A2not,A1not,Enot),/与门调用 n6(Y1,A3not,A2not,A1,Enot),n7(Y2,A3not,A2,A1not,Enot),顶层实体名称顶层实体名称设计实例1续上页 n8(Y3,A3not,A2,A1,Enot),/与门调用 n9(Y4,A3,A2not,A1not,Enot),n10(Y5,A3,A2not,A1,Enot),n11(Y6,A3,A2,A1not,Enot),n12(Y7,A3,A2,A1,Enot);endmodule设计实例12 行为描述(程序如下)module _3to8decode(Y,E,A);output7:0 Y;/输出信号 input2:0 A;/输入信号 input E;/输入使能 assign Y=(E=0)?(1b1 New Project Wizard”,打开Introduction对话框。单击“Next”。2.选择所建立工程的工作目录,输入工程名称、顶层实体名 工程名称可以是任何名字,建议使用和顶层实体名相同的名字。顶层实体名称必须和顶层文件名字相同!单击“Next”。此处为此处为_3to8decode此处为此处为_3to8decode此处为安装的默认路径此处为安装的默认路径#3.加入设计文件(必要时)(1)单击Add按钮,从其他工作目录中选择所需要的现成的源文件(只是指向该文件位置);如果未加入设计文件,可直接单击“Next”,参见后面文件输入步骤。(2)单击“Next”。此处添加位于软件安装的默认路径下此处添加位于软件安装的默认路径下decode文件夹中的文件夹中的_3to8decode文件文件v第3步也可以略过,以后再创建设计文件,或者以后再用“ProjectAdd/Remove Files in Project”命令将其他工作目录中的文件添加到本工程中。#建立工程环境4.指定目标器件类型在“Family”栏中选择“Cyclone II”,其它选项默认即可;单击“Next”;器件系列名称器件系列名称具体器件列表具体器件列表器件涮选信息器件涮选信息#建立工程环境5.指定第三方对代码进行综合和仿真的工具(需要时)在安装Quartus II软件时,缺省的情况下安装了综合和仿真工具,也可以选择Quartus II软件支持的其它综合或仿真工具。在弹出的对话框中,选择适当的工具,或者什么也不选,单击“Next”。此处都选择此处都选择None即可即可#建立工程环境6.完成在最后一步中,显示了在前面几步中所做选择的信息。确认无误后单击“Finish”。#建立工程环境7.完成后如右图所示双击_3todecode可以打开顶层文件(程序说明见设计实例)#建立工程环境执行“Assignments Settings”菜单命令,弹出“Settings”窗口Files添加和删除文件;User Libraries添加用户库;Device更改器件系列;EDA Tool Settings设置其它EDA工具;Timing Analyzer定时分析设置Simulator仿真设置:选择功能仿真或时序仿真 设计输入*说明:如果在建立工程时没有加入设计文件,则执行以下本文文件输入步骤;1.建立一个新文件用File-New命令,在Device Design Files标签下选择文件类型为“Verilog HDL File”。2.输入HDL语言程序。3.保存文件,文件名与顶层设计实体相同。在工程环境建立完后,新建的文件自动加入当前工程中。此处为_3to8code.v。双击_3to8code.v可以在工程中打开程序。用File Save As命令(用AHDL语言编写的文件名后缀为.tdf,用VHDL语言编写的文件名后缀为.vhd,用Verilog HDL语言编写的文件名后缀为.v)。设计的编译执行“Tools Compiler Tool”命令,打开编译器;分析和综合分析和综合开始全编译开始全编译 适配适配 装配装配时序分析时序分析 网表写入网表写入设计的编译功能模块功能描述Analysis&Synthesis检查句法错误及普通易犯的设计错误,将设计映射到具体器件的基本模块上(如触发器、逻辑门)Fitter在器件中布局布线Timing Analyzer进行时序分析和性能分析,将延时信息加到网表文件中Assembler产生器件编程文件(.pof,.sof,.hexout,.ttf,.rbf)EDA Netlist Writer*产生第三方EDA工具所用的网表文件(如Verilog HDL的输出文件.vo,VHDL的输出文件.vho)设计的编译1.打开编译器窗口执行“Processing Compiler Tool”命令;2.编译器选项设置(*此处默认即可,具体设置略过)用以控制编译过程:指定目标器件系列、Compilation Process设置、Analysis&Synthesis设置、Fitter设置等所有选项通过Settings对话框进行设置。打开Settings对话框的两种方法:方法一:执行“Assignments Settings”命令;方法二:单击工具条上的Settings 按钮。#设计的编译3.进行分析综合(分析综合窗口见下页),单击编译器上的Start Analysis&Synthesis 快捷按钮,单击Report出现分析报告。创建工程数据库,检查语法错误,设计文件逻辑综合*说明:本次实验只进行功能仿真,可以只进行分析综合,不需要进行全编译。u进行分析和综合有3种方法方法一:在编译器窗口中,单击Start Analysis&Synthesis按钮;方法二:执行“Processing Start Start Analysis&Synthesis”命令;方法三:单击工具条上的Start Analysis&Synthesis 快捷按钮。#设计的编译分析综合报告分析综合报告StatusMessages分析综合窗口设计的编译u查看message窗口,检查错误 所有信息、错误和警告会在自动打开的Message 窗口中显示:在一条消息上双击左键,或单击右键,然后从弹出菜单中选择“Locate Locate in Design File”,可给错误信息定位;选择“Help”,可查看错误信息的详细说明。u阅读编译报告如果编译报告窗口已关闭,单击快捷按钮 可以打开编译报告。在编译报告左边窗口点击要查看部分前的加号,然后选择要查看的部分。#设计的编译4.启动全编译过程:说明:此过程包含布局布线、延时、编程下载文件生成、第三方文件输出等,在本功能仿真中可以不执行。此过程耗时比单独分析综合要慢得多;执行“Processing Start Compilation”命令,或单击工具条上的全编译快捷按钮 在编译过程中,自动显示状态窗口、消息窗口和编译报告窗口。设计的仿真验证一、Quartus仿真器的功能1.功能仿真(前仿真)检验逻辑功能是否正确。在仿真开始前,必须将要仿真的设计文件设为顶层实体,然后执行“Processing Generate Functional Simulation Netlist”命令,进行功能编译,产生功能仿真网表文件。编译过程快。只运行仿真网表的提取,不作布局布线,故输出相对于输入没有延时。需加入激励信号(用波形编辑器输入,或用文本编辑器生成)。所有节点信号均可观测到。设计的仿真验证2.时序仿真(后仿真)检验逻辑功能是否正确,并验证器件配置后的时序关系是否正确。在仿真开始前必须执行“Processing Start Compilation”命令,对设计进行全编译,产生时序仿真网表文件。编译过程较慢。仿真所有综合结果,输出相对于输入有时间延迟。需加入激励信号,或利用功能仿真时生成的激励波形。组合逻辑的节点信号有可能观测不到。可以观察到竞争冒险!可以观察到竞争冒险!设计的仿真验证二、创建仿真文件步骤1.建立一个仿真文件(.vwf)(1)执行FileNew命令在New对话框中选择Verification/Debugging Files标签,文件类型选择“Vector Waveform File”;单击OK,则打开一个空的波形编辑器窗口。#设计的仿真验证u在标签栏按右键选择“Detach Window”可以使波形窗口放大,方便设置激励波形。#设计的仿真验证(2)设置仿真的结束时间 默认为1s可根据需要用EditEnd Time命令设置(如这里设置为100s)(3)设置网格间距用Edit Grid Size命令(如这里设置为1s)(4)保存文件执行“FileSave As”命令,仿真文件名为与工程文件名(_3to8decode)同名,后缀为.vwf,并选中“Add file to current project”复选框,将其加入到本工程中。一般设置为与输入时钟信号的时钟周期相同一般根据输出信号的时钟周期来设置#设计的仿真验证2.在波形文件中添加节点(1)查找设计中的节点名(有两种方法)方法一:执行“Edit Insert Insert Node or Bus”命令,弹出“Insert Node or Bus”界面;方法二:在波形编辑器左边Name列的空白处单击右键,在弹出菜单中选择“Insert Node or Bus”命令,或双击左键,则弹出对话框Insert Node or Bus,在其中选择“Node Finder”按钮。#设计的仿真验证(2)列出设计中的所有节点名在Node Finder界面中,在Filter列表中选择Pins:all,在Named栏中键入“*”,然后单击List按钮,则在“Nodes Found”中会出现所有节点名。#设计的仿真验证(3)选择节点加入波形文件(如上图)在Node Found栏中选择要加入波形文件中的节点(可用Shift键或Ctrl键选择多个连续或不连续的节点,此处选择A3,A2,A1,E,Y节点),单击右箭头,将所选择节点送入“Selected Nodes”栏中。单击“OK”,则所选的信号和组出现在波形编辑器中(见下页图)。v总线信号最好不要选择单个信号,而是选择一组信号!v一般将输入信号放在波形编辑器中的上方,输出信号放在下方便于观察波形!#设计的仿真验证未编辑的输入信号波形默认为低电平;输出信号和隐含节点默认为未定义(X)电平。波形编辑器设计的仿真验证高电平未定义逻辑电平使高低电平反相定义一个时钟定义一个计数序列低电平高阻态图形工具按钮对齐网格设计的仿真验证(4)信号波形输入在波形编辑器中选择某输入节点,单击窗口左部的图形工具按钮,编辑整个波形;或拖动鼠标选定信号在某个时间段的区域,单击图形工具按钮;或在选中区域上单击右键,在Value菜单中选择需要设置的值,编辑该段波形。在下图中单击 图标,分别以1s,2s,4s定义A1、A2、A3。选定E信号从零开始的某一段,单击 图标,置为高电平;选择“View Snap to Grid”命令,可以去除鼠标只能选定网格整数倍的波形段的限制。#设计的仿真验证设计的仿真验证三、进行仿真1.指定仿真器设置(1)执行“Assignments Settings”命令,打开Settings对话框。(2)在Category列表中选择Simulator Settings,则显示Simulator页面。(3)若要进行功能仿真,则在Simulation栏中选择Functional;若要进行时序仿真,则在Simulation栏中选择Timing。此处选择Functional。(4)指定仿真文件,这里为_3to8decode.vwf。(5)执行“Processing Generate Functional Simulation Netlist”命令,生成网表。(6)执行“Processing Start Simulation”命令,开始仿真。(7)仿真完后,选择Y节点,右键Properties把Radix改为Binary可以更好的观察结果。#设计的仿真验证仿真器的设置设计的仿真验证仿真结果设计的仿真验证四、仿真结果分析仿真结束时,出现仿真成功提示框。分析仿真结果是否符合设计要求,如果验证正确,选择“File/Save Current Report Section As”保存仿真结果,以默认工程名_3to8decode保存为.cvwf格式。移动蓝色的参考线,在Value域观察对应时刻各输出的逻辑状态值是否正确。#设计实例2设计一个模数为6的同步二进制计数器:()设置异步清零控制端,低电平复位。(2)输入数据保持(3)输出进位提示。(4)采用Verilog语言的文本输入方式。(5)进行功能仿真与验证。*说明:本例采用行为描述方式。第二种方法先定义一个类似产品74LVC161器件(模8),再反馈置数去掉无用状态。两种描述均能完成设计要求。该程序放在Quartus II 的安装目录“C:altera80quartus”的counter6文件夹下。设计要求设计要求状态图设计实例2 2/behavior description of a module_6 countermodule counter6(CLK,CE,CR,Q,TC);input CLK,CE,CR;/定义输入信号 output TC;/定义输出信号 output2:0 Q;/定义输出信号 reg2:0 Q;/定义信号类型 assign TC=CE&(Q=3b101);/进位信号 指示,输出5时进位 always(posedge CLK or negedge CR)begin if(CR=1b0)/复位 Q=3b0;else if(Q=3b101)/05循环计数 Q=3b0;else if(CE=1b0)/输出保持续右 Q=Q;else/计数 Q New Project Wizard”,打开Introduction对话框。单击“Next”。输入工作目录文件夹名、工程名、顶层文件名,此处都为counter6即可;点击“Next”。#设计实例2 2在安装目录counter6文件夹下选择counter6.v文件,单击“Add”按钮添加文件;其他步骤默认,直接点“Finish”完成工程环境建立。#设计实例2 2二、分析与综合单击工具条上的Start Analysis&Synthesis 快捷按钮。编译成功后弹出提示对话框。Message窗口提示“0 error,0warning”;如有错误,在Message栏选择错误条目,右键Help,查找原因。三、功能仿真与验证1.建立一个仿真文件(.vwf)(1)执行FileNew命令在New对话框中选择Verification/Debugging Files标签,文件类型选择“Vector Waveform File”;单击OK,则打开一个空的波形编辑器窗口。(2)设置仿真的结束时间,执行“EditEnd Time”,默认为1s即 可。#设计实例2 2(3)设置网格间距,用Edit Grid Size命令,(默认设置10ns即可)(4)保存文件执行“FileSave As”命令,仿真文件名为与工程文件名(counter6)同名,后缀为.vwf,并选中“Add file to current project”复选框,将其加入到本工程中。(5)在波形文件中添加节点 在波形编辑器左边Name列双击左键,则弹出对话框Insert Node or Bus,在其中选择“Node Finder”按钮。在Node Finder界面中,在Filter列表中选择Pins:all,在Named栏中键入“*”,然后单击List按钮,则在“Nodes Found”中会出现所有节点名。在Node Found栏中选择全部节点,单击右箭头,将所选择节点送入“Selected Nodes”栏中。单击“OK”,则所选的信号和组出现在波形编辑器中。#设计实例2 2(6)在波形编辑器中用图形编辑按钮给输入信号添加适当的激励。#具体操作见例1CE设置高-低(高计数,低保持)CLK信号设置周期10nsCR设置低-高波形编辑器设计实例2 2七、进行仿真1.指定仿真器设置(1)执行“Assignments Settings”命令,打开Settings对话框。(2)在Category列表中选择Simulator Settings,则显示Simulator页面。(3)在Simulation栏中选择Functional进行功能仿真选择。(4)指定仿真文件,这里为counter6.vwf。(5)执行“Processing Generate Functional Simulation Netlist”命令,生成网表。(6)执行“Processing Start Simulation”命令,开始仿真。(7)仿真完后,选择Q节点,右键Properties把Radix改为Binary可以更好的观察结果。仿真结果如下,功能正确。#设计实例2 2进位指示计数功能仿真结果Quartus II设计的其他步骤功能仿真完成之后,还需要进行布局布线、时序分析、时序仿真、下载编程才能完成整个FPGA设计流程。nFitter设置完成后,运行Fitter:完成设计逻辑在器件中的布局和布线;并进行引脚自动或手动分配分配。n根据设计要求完成Timing Analyzer时序分析器设置,运行Timing Analyzer,计算给定设计与器件上的延时,并注释在网表文件中,完成设计的时序分析和所有逻辑的性能分析。n运行时序仿真,确认设计的正确性。n根据FPGA配置方式、下载硬件类型设置Programmer,并将程序下载到FPGA配置芯片中。n在线调试。