![基于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=1738854329-c4Zk7SX5Vuo6YXo3ihaTXXKksYrrpihy-0-2f12c0600cdd5041a10ccc7ce5b6ff3c)
图2-9 Quartus Ⅱ软件的默认启动界面
(2)选择软件中的菜单命令【File】→【New Project Wizard】,新建一个工程,如图2-10所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0031_0002.jpg?sign=1738854329-fotGTEZhIUhZZ7kkKjPqWDwfFUNo1BNF-0-209546e899e8922b7a94897a44cc084e)
图2-10 新建工程向导介绍页
(3)单击图2-10中的【Next】按钮,进入工作目录,工程名的设定对话框如图2-11所示。第一个输入框为工程目录输入框,用户可以输入路径来设置工程的目录;设定好后,所有的生成文件将放入这个工作目录。第二个输入框为工程名称输入框,第三个输入框为顶层实体名称输入框。用户可以设定EXP1,一般情况下工程名称与实体名称相同。用户也可以根据自己的实际情况来设定。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0031_0003.jpg?sign=1738854329-NmfdkxvIGwPNMiz47qLvO2is26Hkpqd8-0-caac7e1c1e84ece230fdba8bf5801f82)
图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=1738854329-wCyQSk7N6qz9e81JR0rIOMpnRLjoPpKQ-0-fdf4a5693cf6da4f033c63a6efcc484f)
图2-12 器件选择对话框(一)
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0032_0002.jpg?sign=1738854329-nyJW0a8vefZShZDkG5M1fbbDVb7c5abm-0-ed08ed5faef6392aedb76435ee48294c)
图2-13 器件选择对话框(二)
在图2-13中,单击【Next】按钮,完成器件的选取,进入EDA Tool设置界面,如图2-14所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0033_0001.jpg?sign=1738854329-Z1JD0suZLyZnhiKx5U0USeGauuDY0Iee-0-839944ba9cdb7c7924350f986db06d14)
图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=1738854329-jYOwCIlytPnQTjMiMWVxqEdi5duJYlzl-0-4212e582d4f6ea24349589d8aa633c71)
图2-15 新建工程信息汇总
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0033_0003.jpg?sign=1738854329-IRRPo74IzoLG03BGU1VSNCZxYiPqTyGj-0-5764cab8942a327204976322d473cf0f)
图2-16 新建立的工程界面
(6)选择【File】→【New】命令,新建一个VHDL文件,如图2-17所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0034_0001.jpg?sign=1738854329-NTA9zPdiqsOMnkqkPOeAqKeXrxO2PUDZ-0-2f8e49609bab3ad4962968fd3a829dce)
图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=1738854329-y5d5QbN2IGUIoesTzFDKc7zNL5I7Yogu-0-3bd43a6e7afe2fa955e50b3d3d3a824c)
图2-18 VHDL程序写入
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0034_0003.jpg?sign=1738854329-qZMj5DkDe18c4BOaJgFZLPvS1rSp6rHj-0-7626fe61a94987504848c8f8c475813f)
图2-19 存储新建的VHDL文件
(8)分析与综合。
① 设计输入完毕后,为了检查程序中是否存在语法错误,可运行菜单命令【Processing】→【Analyze current file】,进行语法错误检查。若无语法错误,系统分析后弹出如图2-20所示的信息对话框。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0001.jpg?sign=1738854329-qxOcwK1Ur2yMkYP3wxWosImJ3pWDYLFY-0-fc6ea3306df034dbfd8b7cb8d181fcd6)
图2-20 语法分析成功对话框
② 选择主菜单命令【Processing】→【Start】→【Start Analysis & Synthesis】,运行分析与综合流程。执行该命令后,系统整合当前设计的所有设计文件,形成网表文件,并建立该设计的数据库;若设计无误,则系统弹出如图2-21所示的对话框提示分析与综合成功执行。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0002.jpg?sign=1738854329-xNZeAGUNVHyniRMxhyL6pzgA49ME5AYw-0-9b70b132610be11a3046bd68ab2305b2)
图2-21 分析与综合成功提示对话框
通过分析与综合的过程后,即可通过RTL电路观察器查看当前设计系统综合后生成的逻辑图。选择【Tools】→【Netlist Viewer】→【RTL Viewer】命令,系统运行电路观察器,查看当前设计生成的逻辑电路,如图2-22所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0003.jpg?sign=1738854329-Qa5qGWLDzYiRSoSSttUuq1VRfb0yugxe-0-b7e9d86f84bfc1a76dada76180f29785)
图2-22 RTL电路观察器
(9)代码书写结束后,选择【Processing】→【Start Compilation】命令,对编写的代码进行编译,直到编译通过,编译通过对话框如图2-23所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0035_0004.jpg?sign=1738854329-69AZV02q3MH8vElVlNUPaMdKaYSErSUN-0-ef815f56269ee8eb33252da870eed794)
图2-23 编译通过对话框
(10)时序仿真。为了验证设计的逻辑功能和内部时序的正确性,需要对设计进行时序仿真。通过建立波形矢量文件进行仿真,仿真结果如图2-24所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0036_0001.jpg?sign=1738854329-8Pwxaq0e3HVowjEmfJBhhcEutWnQ3oZN-0-a58f2c4f86265043510331d2ee105d05)
图2-24 仿真结果
(11)引脚分配。选择【Assignment】→【Assignment Editor】命令,进入【Assignment Editor】(资源分配编辑器),分配引脚端口,如图2-25所示。
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0036_0002.jpg?sign=1738854329-xXl7IQ43W07Ar7Qd9jpivrkK6tl8eQuI-0-68e91fac608175dec0a70a54bbb593b6)
图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=1738854329-FyCcGSAPGakOsuG4xPDGZhcoTo5t1qMp-0-4cac0a2a946b370355582694658d233d)
图2-26 硬件安装后的编程下载界面
![](https://epubservercos.yuewen.com/A379B3/3590437004573501/epubprivate/OEBPS/Images/figure_0037_0002.jpg?sign=1738854329-ofddmc6PWnrn2ZUgV3Cn08jyHUx7xUkr-0-5023a4800e8f14bc668337108cde5fa4)
图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;