1.3 译码器原理图输入设计

要进行电路设计开发,必须使用开发工具。QuartusⅡ是Altera公司提供的FPGA/CPLD开发集成工具。Altera是世界最大可编程逻辑器件供应商之一。

1.3.1 EDA开发软件——QuartusⅡ

QuartusⅡ于21世纪初推出,是Altera前一代CPLD/FPGA集成开发环境MAX+plusⅡ的更新换代产品,界面友好,使用便捷。QuartusⅡ提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。

Altera 的 QuartusⅡ除能完成本节所述的整个流程外,还提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC 开发的基本设计工具,并为 Altera DSP 开发包进行系统模型设计提供了集成综合环境。QuartusⅡ设计工具完全支持 VHDL、Verilog 的设计流程,其内部嵌有 VHDL、Verilog逻辑综合器。QuartusⅡ也可以利用第三方的综合工具,如 Leonardo Spectrum、Synplify Pro、FPGA CompilerⅡ,并能直接调用这些工具。同样,QuartusⅡ具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。此外,QuartusⅡ与MATLAB和DSP Builder结合,可以进行基于FPGA的DSP系统开发和数字通信模块的开发。

QuartusⅡ包括模块化的编译器。编译器包括的功能模块有分析/综合器(Analysis &Synthesis)、适配器(Fitter)、装配器(Assembler)、时序分析器(Timing Analyzer)、设计辅助模块(Design Assistant)、EDA 网表文件生成器(EDA Netlist Writer)、编辑数据接口(Compiler Database Interface)等。可以通过选择“Start Compilation”来运行所有的编译器模块,也可以通过选择“Start”单独运行各个模块。还可以通过选择“Compiler Tool”(Tools 菜单),在“Compiler Tool”窗口中运行该模块来启动编译器模块。在“Compiler Tool”窗口中,可以打开该模块的设置文件或报告文件,或打开其他相关窗口。

此外,QuartusⅡ还包含许多十分有用的LPM(Library of Parameterized Modules)模块,它们是复杂或高级系统构建的重要组成部分,在SOPC设计中被大量使用,也可在QuartusⅡ中与普通设计文件一起使用。Altera 提供的 LPM 函数均基于 Altera 器件的结构做了优化设计。在许多实用情况中,必须使用宏功能模块才可以使用一些Altera特定器件的硬件功能,如各类片上存储器、DSP模块、LVDS驱动器、PLL以及SERDES和DDIO电路模块等。

QuartusⅡ编译设计主控界面如图1-8所示,它显示了QuartusⅡ自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编(装配)、时序参数提取以及编程下载几个步骤。下排则是流程框图,是与上面的QuartusⅡ设计流程相对照的标准的EDA开发流程。

图1-8 QuartusⅡ编译设计主控界面

QuartusⅡ编译器支持的硬件描述语言有VHDL(支持VHDL’87及VHDL’97标准)、VerilogHDL及AHDL(AlteraHDL)。

QuartusⅡ支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块(元件)进行调用,从而解决了原理图与 HDL 混合输入设计的问题。在设计输入之后,QuartusⅡ的编译器将给出设计输入的错误报告。可以使用 QuartusⅡ带有的 RTL Viewer观察综合后的RTL图。

前面已经对译码器的逻辑功能进行了分析,本节就以2线-4线译码器电路的详细设计流程为例介绍QuartusⅡ的原理图输入设计方法,使学习者初步掌握利用QuartusⅡ完成数字系统设计的基本方法;在学习项目2还将通过示例频率计的设计,进一步介绍较复杂数字系统的原理图输入方法。需要注意的是,以下介绍的设计流程具有一般性,它同样适用于其他输入方法的设计,如基于HDL的硬件描述语言的输入设计方法或混合输入设计等方法。

1.3.2 编辑文件

1. 建立工程文件夹

任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置相关所有设计文件的文件夹。此文件夹将被 EDA 软件默认为工作库。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。首先可以利用Windows 资源管理器来新建一个文件夹。这里假设本项设计的文件夹取名为“decode”,放在D盘中,路径为d:\decode。

2. 新建原理图文件

现在来建立一个新的原理图。

打开QuartusⅡ,选择菜单命令“File→New”。在“New”窗口的“DeviceDesignFiles”页中选择原理图文件类型,这里选择“BlockDiagram/SchematicFile”,如图1-9所示,单击【OK】按钮,然后即可在原理图编辑窗中输入所需的电路元件,如图1-10所示。

图1-9 选择编辑文件类型

图1-10 打开原理图编辑窗

3.加入器件

双击图1-10所示的原理图编辑窗,将弹出一个逻辑电路器件输入对话框(如图1-11所示)。在此对话框的左侧“Name”栏内输入所需元件的名称,在此为“nand2”。然后单击【OK】按钮,即可将此元件调入编辑窗中。以同样的方法调入2个反相器,名称是“NOT”;以及数个输入、输出端口,名称分别是“INPUT”和“OUTPUT”。各器件均可以移动、复制及删除。用鼠标右键单击器件后,在弹出的菜单中选择相应操作即可。

图1-11 输入需要的元件

4.连接及端口命名

把各个器件放置在合适位置上后,可以将它们按照所需的逻辑功能连接起来。连线有位线与总线的区别,连接时应该注意,完成的电路如图1-12所示。输入、输出端口的名称可以通过双击相应端口元件,在弹出的对话框中输入。

图1-12 2线-4线译码器电路图

5.保存原理图文件

完成原理图输入之后,选择“File→Save As”命令,找到已设立的文件夹路径d:\decode,存盘文件名为“decode.bdf”。出现问句“Do you want to create…”,若单击【是】按钮,则直接进入创建工程流程;若单击【否】按钮,可按以下方法进入创建工程流程。

1.3.3 创建工程

有了电路原理图,并不表示设计已完成,还必须使之成为一个工程,才能进行编译及仿真等操作。

1.打开工程创建向导

选择菜单命令“File→New Preject Wizard”,即弹出新建工程向导对话框,如图1-13所示。单击【Next】按钮,出现如图1-14所示的工程基本设置对话框。

图1-13 新建工程向导

2.设置工程及顶层文件的名字

图1-14 工程基本设置

单击如图1-14所示对话框第一栏右侧的“…”按钮,找到文件夹d:\decode,选中已存盘的文件decode.bdf(一般应该设顶层设计文件为工程)。再单击【打开】按钮,即出现如图1-14所示的设置情况。其中,第一行的“d:\decode”表示工程所在的工作库文件夹;第二行的“decode”表示此项工程的工程名;第三行是当前工程顶层文件的实体名。

3.加入该工程的文件

单击下方的【Next】按钮,在弹出的对话框中加入与本工程有关的文件。工程文件加入的方法有两种:第一种是单击【Add All】按钮,将设定的工程目录中的所有相关文件加入到工程文件栏中;第二种方法是单击【Add…】按钮,从工程目录中选出相关的文件。完成后如图1-15所示。

图1-15 加入设计文件

4.选择目标芯片

单击图1-15中的【Next】按钮,根据系统需要选择目标芯片。首先在“Family”栏选择芯片系列,在此选“CycloneⅡ”系列。在此栏下方,询问选择目标器件的方式,选“AutodeviceselectedbytheFiter”,表示允许编程器自动选择该系列中的一个器件:选“Specificdeviceselectedin'Availabledevices'list”,表示手动选择。本例采用手动选择。选择此系列的具体芯片为EP2C35F484I8,如图1-16所示。这里“EP2C35”表示CycloneⅡ系列及此器件的逻辑规模;“F”表示FPGA封装;“I8”表示速度级别。也可通过图1-16所示窗口右边的3个窗口过滤选择:分别选择“Package”为“FPGA”;“Pin为484”和“Speed”为“8”。

图1-16 目标器件选择

5.选择仿真器和综合器

单击图1-16中的【Next】按钮,弹出选择仿真器和综合器类型的窗口。如果其中三个选择项都不勾,表示使用QuartusⅡ中自带的仿真器和综合器。在本例中使用QuartusⅡ中自带的仿真器和综合器,如图1-17所示。

图1-17 EDA工具设置

6.观察工程相关设置

单击【Next】按钮后,弹出 EDA 工具设置统计窗口,上面列出了此项工程相关设置情况,如图1-18所示。

图1-18 EDA工具设置统计窗口

最后单击【Finish】按钮,即已设定好此工程,并出现 decode 的工程管理窗,或称为“Compilation Hierarchy”窗口,主要显示本工程项目的层次结构,如图1-19所示。

图1-19 工程管理窗

7.编译前设置

在对当前工程进行编译处理前,必须做好必要的设置,对编译加入一些约束,使编译结果更好地满足设计要求。具体步骤如下。

(1)选择目标芯片。目标芯片的选择也可以这样来实现:选择“Assignmemts”菜单中的“Settings”项,在弹出的对话框中选择“Category”栏中的“Device”。首先选择目标芯片为EP2C35F484I8(此芯片已在建立工程时选定了),如图1-20所示。

图1-20 选择目标器件

(2)选择配置器件工作方式。单击图1-20中的【DeviceandPinOptions】按钮,进入“DeviceandPinOptions”窗口。在此首先选择“General”选项卡,如图1-21所示。在“Options”栏内选中“Auto-restartconfigurationaftererror”,使对FPGA的配置失败后能自动重新配置,并加入JTAG用户编码(可略)。

图1-21 选择配置器件的工作方式

(3)选择配置器件和编程方式。选择图1-21所示的“Configuration”选项卡,即出现图1-22所示窗口。在“Configuration”选项卡中选择配置器件为“EPCS1”。其配置模式可选择“ActiveSerial”(一般默认)。这种方式只对专用的Flash技术的配置器件(专用于Cyclone/Ⅱ系列FPGA的EPCS4、EPCS1等)进行编程。注意,PCFPGA的直接配置方式都是JTAG方式。对FPGA进行所谓“掉电保护式”编程通常有两种:主动串行模式(ActiveSerialMode)和被动串行模式(PSMode)。对EPCS1/EPCS4的直接编程必须用主动串行模式。所以在选择了ActiveSerialMode后,必须在“Configurationdevice”项中选择配置器为EPCS1或EPCS4。注意应根据实验系统上目标器件配置的EPCS芯片型号决定。

图1-22 选择配置器件型号和压缩方式

(4)选择输出设置(此项操作可以不做,即保持默认)。选择“ProgrammingFiles”选项卡,选中“Hexadecimal(Intel-format)outputfile”,即在生成常规下载文件的同时,产生二进制配置文件*.hexout,并设地址起始为0的递增方式。此文件可用于单片机或CPLD与EPROM构成的FPGA配置电路系统。

(5)选择目标器件闲置引脚的状态。此项选择在某些情况下十分重要。选择“Unused Pins”选项卡,此页中可根据实际需要选择目标器件闲置引脚的状态,可选择为输入状态(呈高阻态,推荐此项选择)、输出状态(呈低电平)、输出不定状态或不做任何选择。在其他页也可做一些选择,各选项的功能可参考窗口下方的Description说明。

1.3.4 编译

所谓全程编译(Full Compilation),包括前面提到的QuartusⅡ对设计输入的多项处理操作,其中包括排错、数据网表文件提取、逻辑综合、适配、装配文件(仿真文件与编程配置文件)生成,以及基于目标器件硬件性能的工程时序分析等。

1.启动编译

编译前首先选择菜单命令“Processing→Start Compilation”,启动全程编译。编译过程中要注意工程管理窗下方“Processing”栏中的编译信息。

2.错误修改

如果工程中的文件有错误,启动编译后,在下方的“Processing”处理栏中会以红色显示出错说明文字,并告知编译不成功,如图1-23所示。对于“Processing”栏的出错说明,可双击此条文,即弹出对应的顶层文件,并用深色标记指出错误所在。改错后再次进行编译直至排除所有错误。

图1-23 全程编译后出现的报错信息

3.了解与分析编译结果

如果编译成功,可以见到如图1-24所示的工程管理窗口的左上角显示出工程decode的层次结构和其中结构模块耗用的逻辑宏单元数。在此栏下是编译处理流程,包括数据网表建立、逻辑综合(Synthesis)、适配(Fittering)、配置文件装配(Assembling)和时序分析(ClassicTimingAnalysizing)等。最下栏是编译处理信息;中栏(CompilationReport)是编译报告项目选择菜单,点击其中各项可以详细了解编译与分析结果。

图1-24 全程编译成功界面

1.3.5 仿真

对工程编译通过后,必须对其功能和时序性质进行测试,以了解设计结果是否满足原设计要求。仿真可分为功能仿真和时序仿真。功能仿真只测试设计项目的逻辑行为;而时序仿真不但测试逻辑行为,还测试器件在最差条件下的工作情况。仿真的步骤如下。

1.打开波形编辑器

选择菜单命令“File→New”,在“New”窗口中选择“Other Files”选项卡下的“Vector Waveform File”,如图1-25所示,单击【OK】按钮,即弹出空白的波形编辑器,如图1-26所示。

图1-25 选择编辑波形文件

图1-26 波形编辑器

2.设置仿真时间区域

对于时序仿真来说,将仿真时间轴设置在一个合理的时间区域上十分重要。通常设置的时间范围在数十微秒间。在“Edit”菜单中选择“EndTime”项,在弹出的“EndTime”对话框的“Time”中处输入50,单位选“μs”,整个仿真域的时间即设定为50μs,如图1-27所示。单击【OK】按钮,结束设置。注意使用放大缩小的按键,使50μs的时间全部显示,以利于后面的波形设置。

图1-27 仿真时间设置

3.波形文件存盘

选择菜单命令“File→Save as”,将默认名为“decode.vwf”的波形文件存入文件夹d:\decode,如图1-28所示。

图1-28 波形文件存盘

4.输入信号节点

选择菜单命令“View→Utility Windows→Node Finder”,弹出的对话框如图1-29所示,在“Filter”框中选“Pins:all”(通常已默认选此项),然后单击【List】按钮,于是在下方的“Nodes Found”栏中出现设计中的 decode 工程的所有端口名。如果此对话框中的“List”不显示 decode 工程的端口引脚名,就需要重新编译一次,即选择菜单命令“Processing→Start Compilation”,然后再重复以上操作过程。

图1-29 向波形编辑器拖入信号节点

最后,用鼠标将端口名A1、A0、Q3、Q2、Q1、Q0分别拖到波形编辑窗,结束后关闭“NodesFound”栏。单击波形窗左侧的全屏显示按钮,使之全屏显示,并单击放大缩小按钮,再用鼠标在波形编辑区域单击右键,使仿真坐标处于适当位置,如图1-30上方所示,这时仿真时间横坐标设定在数十微秒数量级。

图1-30 编辑A1波形

5.编辑输入波形

单击图1-30所示窗口的输入信号A1,使之变成蓝色条,再单击左列的时钟设置键,在弹出的“Clock”窗口中设置A1的周期为1us;Clock窗口中的“Dutycycle”是占空比,默认为50,即50%占空比,如图1-30所示。然后再设置信号A0。先全选A0,设置成全0,然后抓取一些时间段,设置成1。A1、A0输入按照真值表(表1-1)设置完成后,如图1-31所示,可对波形文件再次存盘。

图1-31 设置好的激励波形图

6.仿真器参数设置

选择菜单命令“Assignment→Settings”,在“Settings”窗口左栏选择“SimulatorSettings”,如图1-32所示。在右侧的“Simulationmode”栏中选择“Timing”,即选择时序仿真,并选择仿真激励文件名“decode.vwf”(通常默认),在“Simulationperiod”栏中选中“Runsimulationuntilallvectorstimuliareused”全程仿真。然后在窗口左栏选择“SimulationVerification”,确认选择“Simulationcoveragereporting”;毛刺检测“Glitchdetection”设置为1ns宽度,最后单击【OK】按钮确认。

图1-32 选择仿真约束和控制

7.启动仿真器

现在所有设置已经进行完毕。选择菜单命令“Processing→Start Simulation”,直到出现“Simulation was successful”的提示,仿真结束。

8.观察仿真结果

仿真波形文件“Simulation Report”通常会自动弹出,如图1-33所示。

图1-33 仿真波形输出

如果在启动仿真运行(Processing→Run Simulation)后,并没有出现仿真完成后的波形图,而是出现提示“Can’t open Simulation Report Window”,但报告仿真成功,则可自己打开仿真波形报告,选择菜单命令“Processing→Simulation Report”即可。

如果无法展开波形显示时间轴上的所有波形图,可以用鼠标右键单击波形编辑窗口中任意位置,在弹出的菜单中选择“View→Fit in Window”项,即可显示时间轴上的所有波形图。还可单击波形窗左侧的全屏显示按钮,使之全屏显示;单击放大缩小按钮,再用鼠标在波形编辑区域单击左键或右键,使仿真坐标处于适当位置。

图1-33所示波形可以放大观察,可知:电路功能符合设计要求,输出结果与真值表(表1-1)相符,实现了译码功能。

1.3.6 引脚设置与下载

为了能对此译码器进行硬件测试,应将其输入/输出信号锁定在芯片确定的引脚上,编译后下载。

1.确定锁定引脚序号

在此选择EDA实验系统的电路模式No.5(如图1-34所示),可通过查阅附录A芯片引脚对照表,确定引脚分别为:A1接键2(PIO1,第AB14脚),A0接键1(PIO0,第AB15脚);4位输出Q3~Q0分别用发光二极管D4~D1来显示,分别接PIO11、PIO10、PIO9、PIO8(它们对应的引脚编号分别为G16、H14、H15、J14)。

图1-34 实验系统模式No.5实验电路图

2.进行引脚锁定

选择菜单命令“Assignments→Pins”,即打开如图1-35所示“Assignment Editor”窗口。

图1-35 “Assignment Editor”编辑器窗口

在如图1-36所示的下拉栏中分别选择本工程要锁定的端口信号名,然后双击对应的“Location”栏的“new”,在弹出的下拉栏中选择对应端口信号名的器件引脚号,如对应Q3,选择G16脚。

图1-36 已将所有引脚锁定完毕

3.重新编译

最后存储这些引脚锁定的信息后,必须再编译(启动“Start Compilation”)一次,才能将引脚锁定信息编译进编程下载文件中。

4.下载准备

将编译产生的SOF格式配置文件配置到FPGA中,进行硬件测试的步骤如下:

打开编程窗口并配置文件。先将实验系统和并口通信线连接好,打开电源。在“Tool”菜单中选择“Programmer”项,于是弹出如图1-37所示的编程窗口。在“Mode”栏中有4种编程模式可以选择:“JTAG”、“Passive Serial”、“Active Serial Programming”和“In-Socket Programming”。为了直接对FPGA进行配置,在编程窗口的编程模式“Mode”中选“JTAG”(默认),并勾选下载文件右侧的第一小方框。注意要仔细核对下载文件路径与文件名。如果此文件没有出现或有错,单击左侧【Add File】按钮,手动选择配置文件decode.sof 。

图1-37 选择编程下载文件

5.设置编程器

若是初次安装QuartusⅡ,在编程前必须进行编程器选择操作。这里准备选择“USB-Blaster[USB-0]”。单击【HardwareSetup】按钮可设置下载接口方式,在弹出的“HardwareSetup”对话框中(如图1-38所示),选择“Hardwaresettings”选项卡,在“Currentlyselectedhardware”栏中选择“USB-Blaster[USB-0]”之后,单击【Close】按钮关闭对话框即可。这时应该在编程窗口左上方显示出编程方式为“USB-Blaster[USB-0]”(如图1-39所示)。如果图1-39所示的窗口内“Currentlyselectedhardware”栏只有“NoHardware”选项,则必须加入下载方式:单击【AddHardware】按钮,在弹出的窗口中单击【OK】按钮,再双击“ByteBlasterMV”项,使“Currentlyselectedhardware”栏中有“USB-Blaster[USB-0]”项。

图1-38 双击选中的编程方式名

6.选择编程器

究竟显示哪一种编程方式(ByteBlasterMV或ByteBlasterⅡ),取决于QuartusⅡ对实验系统上的编程口的测试。以GW48-EDA系统为例,若对此系统左侧的“JP5”跳线选择“Others”,则当进入QuartusⅡ“Tool”菜单,打开“Programmer”窗口后,将显示“USB-Blaster[USB-0]”,如图1-39所示;而若对“JP5”跳线选择“ByBtⅡ”,则当进入“Tool”菜单,打开“Programmer”窗口后,将显示“ByteBlasterII[LPT1]”。注意,对Cyclone的配置器件编程必须使用这编程方式。最后单击下载标符【Start】按钮,即进入对目标器件FPGA的配置下载操作。当Progress显示100%,表示编程成功。

图1-39 ByteBlasterⅡ编程下载窗口

7.硬件测试

成功下载decode.sof后,选择实验电路模式5,将键1、2分别设置成高低电平,观察发光二管D4~D1的亮灭,了解译码器工作情况是否与电路功能符合。