![基于Quartus II的FPGA/CPLD设计实例精解](https://wfqqreader-1252317822.image.myqcloud.com/cover/316/679316/b_679316.jpg)
2.3 基于Quartus Ⅱ的设计实例
加法器电路是数字电路中运算器的重要单元,分为半加器和全加器两种。全加器的实现可以根据其真值表直接用VHDL语言编程实现。
实现全加器的操作步骤如下:
(1)选择【开始】→【程序】→【Altera】→【Quartus Ⅱ】命令,或者双击桌面上的Quartus Ⅱ图标运行Quartus Ⅱ软件,出现如图2-9所示的界面。如果是第一次打开Quartus Ⅱ软件,可能还会有其他的提示信息,用户可以根据自己的实际情况进行设计后进入如图2-9所示的界面。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0031_0001.jpg?sign=1739327454-BxAe2U3o24xCEXwwh0SwdlSHm0cGXBMc-0-4da500ee58fe1320a1d057814b4504e4)
图2-9 Quartus Ⅱ软件的默认启动界面
(2)选择软件中的菜单命令【File】→【New Project Wizard】,新建一个工程,如图2-10所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0031_0002.jpg?sign=1739327454-1NcHGIsMJIAOfylyvr0Xf0FJQx9TvASt-0-bc194c93208a2ad24fce3756e46025d9)
图2-10 新建工程向导介绍页
(3)单击图2-10中的【Next】按钮,进入工作目录,工程名的设定对话框如图2-11所示。第一个输入框为工程目录输入框,用户可以输入路径来设置工程的目录;设定好后,所有的生成文件将放入这个工作目录。第二个输入框为工程名称输入框,第三个输入框为顶层实体名称输入框。用户可以设定EXP1,一般情况下工程名称与实体名称相同。用户也可以根据自己的实际情况来设定。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0031_0003.jpg?sign=1739327454-pvCKlHnYDZDAob9NPEEDkTJVcbvO32kK-0-e9e6653e5c0309b2b85035c61697c22b)
图2-11 制定工程及工作目录
(4)单击【Next】按钮,进入下一个设定对话框,按默认选项直接单击【Next】按钮,进入器件选择对话框,如图2-12和图2-13所示。在图2-13中,用户可以根据自己的硬件资源进行相应的选择;在选择具体器件的时候,首先要指定正确的器件家族(Family)。在【Family】一栏的下拉列表中选取正确的器件系列。这里我们选择FLEK10K系列芯片EPF10K10LC84-4。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0032_0001.jpg?sign=1739327454-4sWNk14qCCRMju8NRVpj0mQ18a0G4MRV-0-d23f6f7a7a802029162b745edf16f39e)
图2-12 器件选择对话框(一)
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0032_0002.jpg?sign=1739327454-EcHGEzlpZ6iWwdDwhQoKZfUMJII5lLtI-0-9dbba948021d19411a2fd46c519299e4)
图2-13 器件选择对话框(二)
在图2-13中,单击【Next】按钮,完成器件的选取,进入EDA Tool设置界面,如图2-14所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0033_0001.jpg?sign=1739327454-fyW6bgYi2bLPXSgDkEsDcjERJm3aOnwS-0-447423b017614ed0e5e46131c7d343e0)
图2-14 EDA Tool设置界面
(5)按默认选项,单击【Next】按钮,出现新建工程以前所有的设置信息,如图2-15所示,单击【Finish】按钮,完成新建工程的建立,如图2-16所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0033_0002.jpg?sign=1739327454-WY2eRyGRXYsfXjjheDjr7qlEf50pRQom-0-1a3b7458b6ad1aa72b1a4263e8e34ec9)
图2-15 新建工程信息汇总
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0033_0003.jpg?sign=1739327454-v1feREPXbfBkZLnnW7G5Xq7tQVglxqSf-0-f61bfa37d5bda20ac5cd47edb39429e6)
图2-16 新建立的工程界面
(6)选择【File】→【New】命令,新建一个VHDL文件,如图2-17所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0034_0001.jpg?sign=1739327454-GnwEnMCH2oYsBRLEgkgb6lxzxfS1SANE-0-cdcd70f8433c1db7e4b65c408eee08ef)
图2-17 新建一个VHDL文件
(7)选择【VHDL File】文件类型,单击【OK】按钮,将VHDL程序写入后,如图2-18所示,并选择【File】→【Save】命令,无须做任何更改,单击【OK】按钮即可,如图2-19所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0034_0002.jpg?sign=1739327454-R01CTPim5sqe4XMhwnX6L96dvSmgr5B3-0-511a0ccb780ced754992d940c9627d50)
图2-18 VHDL程序写入
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0034_0003.jpg?sign=1739327454-PkWLJ9RLSilvDBdmybgaFTsWXc6s4pmq-0-ad7631a9753d2e2e83f228a0a4435a7a)
图2-19 存储新建的VHDL文件
(8)分析与综合。
① 设计输入完毕后,为了检查程序中是否存在语法错误,可运行菜单命令【Processing】→【Analyze current file】,进行语法错误检查。若无语法错误,系统分析后弹出如图2-20所示的信息对话框。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0001.jpg?sign=1739327454-9lN1pUa1WAc0OeRRQ7s8SK3XVrKm5GKM-0-35a56578df3c78ea683bdb04aeb08db6)
图2-20 语法分析成功对话框
② 选择主菜单命令【Processing】→【Start】→【Start Analysis & Synthesis】,运行分析与综合流程。执行该命令后,系统整合当前设计的所有设计文件,形成网表文件,并建立该设计的数据库;若设计无误,则系统弹出如图2-21所示的对话框提示分析与综合成功执行。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0002.jpg?sign=1739327454-JNwsfv0G3zyF3iLNRCPniS4FaMr9i1TM-0-16bd4ef65ea0d99d89be1cf25eb26c37)
图2-21 分析与综合成功提示对话框
通过分析与综合的过程后,即可通过RTL电路观察器查看当前设计系统综合后生成的逻辑图。选择【Tools】→【Netlist Viewer】→【RTL Viewer】命令,系统运行电路观察器,查看当前设计生成的逻辑电路,如图2-22所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0003.jpg?sign=1739327454-wNkC6DhDJJIcCC4DsXn6SIMlKh41Tvki-0-0901edaa6939a54b2e59ba6e8089341a)
图2-22 RTL电路观察器
(9)代码书写结束后,选择【Processing】→【Start Compilation】命令,对编写的代码进行编译,直到编译通过,编译通过对话框如图2-23所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0004.jpg?sign=1739327454-qs2toYFP5PxMfDl92vSsiFRce8mdnPqx-0-5970ed48f7b40846b2c7cc2c30f2255f)
图2-23 编译通过对话框
(10)时序仿真。为了验证设计的逻辑功能和内部时序的正确性,需要对设计进行时序仿真。通过建立波形矢量文件进行仿真,仿真结果如图2-24所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0036_0001.jpg?sign=1739327454-D3fSKZpJriu0oXKseUvfX6aOShBFVnq0-0-8e70ae6f1c9dfc30620400d15b5958d0)
图2-24 仿真结果
(11)引脚分配。选择【Assignment】→【Assignment Editor】命令,进入【Assignment Editor】(资源分配编辑器),分配引脚端口,如图2-25所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0036_0002.jpg?sign=1739327454-GpZ4admsnSfvuUyfuu1jDOezgHjg6Xri-0-50870846f4d839c673608f84faec032e)
图2-25 引脚分配
(12)编译无误后,将实验系统的下载线与计算机并口连接好,打开电源。选择【Tools】→【Programmer】命令,进入程序下载界面,该界面对应文件名为adder.cdf。使用USB电缆时的界面如图2-26所示。使用ByteBlaster下载线下载时的界面如图2-27所示。然后单击【Start】按钮,将adder.sof文件下载到FPGA芯片中(注:初次使用USB电缆下载时,需要安装USB-Blaster驱动)。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0037_0001.jpg?sign=1739327454-HTQqhnPSWxJavwcbUBKyLuNxwaW9nu9o-0-987eef55a3d285869ce53bf23fd554c5)
图2-26 硬件安装后的编程下载界面
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0037_0002.jpg?sign=1739327454-3UhxG0vr1VxYjHFSq4Y8DXwz1ky6K0Cq-0-0fdac7b6f3c9fa4ad498c72ac9681cf7)
图2-27 编程下载界面
在完成硬件安装的编程下载界面中,在【Mode】一栏中选择【JTAG】,在工作区的下载文件列表选项中,选中【Program/Configure】复选框,单击左侧工具栏的启动下载按钮,启动下载。下载完毕后,可根据设计与外围资源的链接情况,进行测试操作。
(13)观察实验结果是否与程序设计相吻合。
参考程序如下所示:
---------------------------------库说明------------------------------- library ieee; --IEEE标准库 use ieee.std_logic_1164.all; entity adder is --adder是实体名 port( INA,INB:IN std_logic; --输入信号 CI:std_logic; --输入进位信号 SO:OUT std_logic; --和输出 CO:OUT std_logic); --进位信号输出 end adder; -------------------------------结构体说明----------------------------- architecture rtl of adder is COMPONENT half_adder --元件定义语句,定义半加器电路模块 PORT(IN0,IN1:IN std_logic; SUM:OUT std_logic; CARRY_OUT:OUT std_logic); end COMPONENT ; SIGNAL SUM1,CO1,CO2:std_logic; BEGIN adder1:half_adder PORT MAP(INA,INB,SUM1,CO1); adder2:half_adder PORT MAP(SUM1,CI,SO,CO2); CO<=CO1 OR CO2; END rtl; --半加器模块 library ieee; --IEEE标准库 use ieee.std_logic_1164.all; entity half_adder is port( IN0,IN1:IN std_logic; SUM:OUT std_logic; CARRY_OUT:OUT std_logic); end half_adder; -------------------------------结构体说明----------------------------- architecture rtl of half_adder is BEGIN PROCESS(IN0,IN1) BEGIN SUM<=IN0 XOR IN1; CARRY_OUT<=IN0 AND IN1; END PROCESS; END rtl;