当前位置:首页 >> 教学案例/设计 >>

Quartus


一、Quartus II 软件的入门介绍
随着可编程逻辑器件应用的日益广泛,许多IC制造厂家涉足PLD/FPGA领域。目 前世界上有十几家生产CPLD/FPGA的公司,最大的三家是: Altera,Xilinx,Lattice, 其中Altera和Xilinx占有了60%以上的市场份额。 Altera 公 司 是 全 球 最 大 的 可 编 程 逻 辑 器 件 供 应 商 之 一 。 主 要 产 品 有 : MAX3000/7000,MAXⅡ,FLEX6000,FLEX8000,APEX20K,ACEX1K,Cyclone,Stratix, CycloneⅡ,StratixⅡ等。Altera公司针对FPGA/CPLD器件推出了相应的设计软件, 目前主要是第三代的 MAX+plusⅡ和第四代的QuartusⅡ。作为 Altera 公司的最新 一代集成设计环境,QuartusⅡ支持Altera 公司目前流行的所有主流 FPGA/CPLD 的 设计开发,并引入了一系列的新特性,如支持RLT View,综合效率更高,可以进行 功耗估算等等。本使用手册主要是针对使用Quartus Ⅱ 5.0软件进行FPGA设计开发 的常见的功能进行介绍。 主要分以下几个步骤:

1、Quartus II 软件的安装步骤
一、PC 机系统配置要求: CPU 在奔腾 II400MH 以上,内存在 512M 以上; 大于 800MB 的安装空间; Win2000 或 WindowsXP 操作系统; Microsoft Windows 兼容的 SVGA 显卡; 具有并行通信口或 USB 通信口,以便用下载电缆; 二、QuartusII 5.0 软件安装方法: 1、先进入你的 QuartusII 5.0 软件的存放目录; 如果你的机子里还没有下载,则可以到下面这个 altera 公司的 FTP 网站上下载: ftp://ftp.altera.com/outgoing/release/quartusii_50_pc.Zip ; 2、进入QuartusII 5.0软件存放文件夹(下图是我电脑里的位置<E:\软件备份\硬件 开发工具\SOPC的软件\QuartusII_5_0\QuartusII_5_0>) ;

1. Quartus II 软件的安装步骤 2. Quartus II 软件的开发环境介绍 3. Quartus II 项目工程的建立介绍 4. Quartus II 的 VHDL 工程设计介绍 5. Quartus II 的图形工程设计介绍 6. Quartus II 的时序仿真设计介绍 7. Quartus II 的逻辑器件下载配置

图1

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第1页

3、运行安装向导: Install.exe,出现如下图所示的安装向导主界面;

图2 4、点击 Install QuartusII and Related Software 按钮, 进入欢迎界面,点击 Next 进入安装 QuartusII 软件的安装向导界面。在这个安装向导界面中,选中 QuartusII 5.0,其它软件安装项目不选,点击 Next 按钮,进入下一步;

图4 5、在 License Agreement 对话框上选中 I accept the terms of the license agreement 选项,点击 Next 按钮,进入下一步;

图3

图5

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第2页

6、在 Custom information 对话框上,输入用户信息,User Name:内核开发_王兴 权,Company Name:桂林电子科技大学(三院), 点击 Next 按钮,进入下一步;

图6 7、在 Choose Destination Location 对话框上选择安装路径,也可使用默认路径。 确保硬盘上有足够的空间,(我在设计中更换了路径)点击 Next 按钮进入下一步;

图8 8、在 Setup Type 对话框上选中 Complete 选项(表示完全安装) ,点击 Next 按 钮,进入下一步;

图7
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第3页

图9 9、确认安装设置,点击下图中的两个 Next 按钮,安装向导开始复相关文件;

图 11

图 10

图 12 复制结束后开始进行驱动的安装

图 13 10、询问是否在桌面上放置 Quartus II 5.0 的桌面快捷方式,选择“是”;

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第4页

图 14 11、在 Installshield Wizard Complete 对话框上,去掉 Launch QuartusII 5.0 选项,点击 Finish 按钮,完成安装; 两个复选择框分别是: “阅读 readme 文件”和“运行 QuartusII 5.0 软件”;

,点击 Install Stand-Alone 12、回到安装向导主界面(在 3 中已经有图示了) Programmer 按钮,启动 Programmer 和 SignalTapII 的安装向导。在 欢迎 对话 框上点击 Next 按钮,进入下一步;

图 16 13、在 License Agreement 对话框上选中 Accept the terms of the license agreement 选项,点击 Next 按钮,进入下一步;

图 15

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第5页

图 17 14、在 Custom Iformation 对话框上输入客户信息,User Name:欣欣工作室, Company Name:http://www.xinworks.com/,点击 Next 按钮,进入下一步;

图 18 15、在 Choose Destination Location 对话框上,输入安装路径,也可以使用默认 路径,点击直 Next 按钮,进入下一步;

图 19 16、在 Select Features 对话框上,选中 Stand-Alone programmer 和 StandAlone SignalTapII 选项,点击 Next 按钮,进入下一步;

图 20 17、在 Start Copying Files 对话框架上确认安装设置,点击 Next 按钮,安装向
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第6页

导开始复制相关文档;

图 21 图 23 18、复制完成,点击 Finish 按钮,完成安装;

图 22
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第7页

安装向导。在 Choose Destination Location 对话框上,点击 Next 按钮,安装到 默认路径;

图 25 20、文档复制完毕,点击 Finish 按钮,完成安装; 图 24

19、回到安装向导主界面, 点击 Install FLElm Server 按钮, 启动 FLElm Server 的

图 26 21、回到安装向导主界面,点击 Exit 按钮,退出安装向导。 三、安装 QuartusII 5.0 的 license

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第8页

1、打开 QuartusII 5.0 的 Crack 文件夹

3. 使用写字板软件,打开 license.dat 文件,修改该文件,将其中 HOSTID 的值改 为本机的网卡地址。本机网卡地址可以在 dos shell 下使用 ipconfig/all 命令查 看。(我的如下)

图 30

图 27 2、把 sys_cpt.dll 复制到你所安装的目录中,我的目录是 D:\QuartusII 5_0\bin\ 下覆盖同名文件;

图 31 4. 启动 QuartusII 6.0,遇到如下对话框时选择 Specify valid license file 选 项,点击 OK 按钮;

图 28

图 29

图 32

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

第9页

图 33 图 35:将你改好的 Licenst.dat 文 件 导入 进 来 哦 ! ! !

图 34 5. 在随后的 license setup 对话框中,指定修改好的 license.dat 文件,点击 OK 按钮 图 36:你就可以看到你的网卡号啦! ! ! 6. 设置到这里,你的 QuartusII 5.0 已经可以使用了 。
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第10 10页

图 38:启动时的中间运行界面

2、Quartus II 软件的开发环境介绍
由于我以前使用 MAX PLUS II 10.2 版本的开发软件,所以在下面的软件学习小 结中,我也是将 QuartusII 5.0 设置为 MAX PLUS II 的界面风格,这样方便我的学 习。 (一)、在 QuartusII 5.0 中如何设置软件的界面风格: (进入 Quartus Ⅱ 5.0 运 行界面,点击菜单"Tool"-"Customize..."可将 Quartus Ⅱ的运行界面可以设置成 MAX+plus Ⅱ界面。下面的一些图片是我的设置截图)

图 39:第一次启动后的界面 图 37:(方法 1)启动 QuartusII 5.0 图 38:(方法 2)启动 QuartusII 5.0

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第11 11页

图 40:点击菜单"Tool"-"Customize..." (二)、现在从左至右开始介绍各个菜单项

图 41:初次进入后的

图 42:对各个选择项进行设置

图 44:真个软件窗口的介绍

图 43: (点击图 42 的确定后会提示退出窗口,重新运行后的界面

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第12 12页

图 48:Edit 菜单

图 49:View 菜单

图 45:"Quartus Ⅱ"菜单

图 46:MAX+PLUS II 菜单

图 47:"File"菜单 图 50:Project 菜单 图 51:Assignments 菜单

图 52:Processing 菜单

图 53:Tool 菜单

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第13 13页

图 54:Window 菜单 图 55:Help 菜单 各个菜单的功能的简单阐述: “Quartus Ⅱ”菜单:可以完成新建文件、工程、编译、仿真、下载等操作; “MAX+PLUSⅡ”菜单:完成上面的功能外还包括了整个菜单项的总合; “File”菜单:可以完成有关文件、工程的打开、新建、保存等操作; “Edit”菜单:可以完成文件的修改、编辑等操作; “View”菜单:可以完成有关视图的一些操作; “Project”菜单:可以完成有关工程的一些操作,如向工程中添加或删除文件等; “Assignments”菜单:可以完成器件的选择、引脚锁定、综合时的优化、约束的设置等; “Processing”菜单:可以启动编译、仿真等操作; “Tool”菜单:菜单可以打开相关的调试工具; “Window”菜单:可以进行窗口的操作; “Help”菜单:可以进行各种帮助的查询等操作。

图 56:Quartus II 软件的设计流程 在各个设计阶段中 Quartus II 所提供的功能介绍(图 57)

各项菜单的具体应用将在下面结合实例进行介绍。
(三)、在上面的各个菜单项只是让使用者先对 Quartus Ⅱ 5.0 软件有个比较粗略 的认识。 在后续的几个小结我将就如何使用 Quartus Ⅱ 5.0 软件进行 F P G A (或 CPLD) 的简单项目工程开发作较详细的介绍。 在 对 Quartus Ⅱ 5.0 软件进行项目工程开发之前, 先了解一下uartus II 软 (四)、 件的设计流程(见图 56)
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第14 14页

3、Quartus II 项目工程的建立介绍
任何一个项目的开发都需要一个工程的建立,对于 Quartus II 5.0 的软件使用 手册将以 Altera 公司的 Cyclone 系列 FPGA 器件 EP1C6Q240C8 驱动发光二极管为例 进行软件的使用说明。也希望使用者可以对 Quartus II 的开发有一个比较详细的了 解。 1) 、启动 Quartus II 5.0 软件,进入下图所示的 Quartus II 开发环境界面;

图 57:Quartus II 用户界面的功能

下面将进行项目工程的开发

图 58:Quartus II 开发环境界面 2) 、点 击 “File”菜单的“New Project Wizard...” 来新建一项工程。注意 不要把“New”误认为“New Project Wizard… ” ,新建工程向导对话框如图 60 所示 ; 在新建工程对话框中,你可以了解到在这个过程中我们即将要完成的工作任务。 主要包括下面几个任务: 1.指定项目的存放目录、项目的名称和顶层实体的名称。 2.指定项目设计的文件。 3.指定该设计的 Altera 器件系列。 4.指定用于该项目的其它 EDA 工具。 5.项目信息报告。

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第15 15页

工程存放的文件夹 指定工程名
指定顶层文件的实体名

图 59; 点击“File”菜单的“New Project Wizard...”

图 61:新建工程路径、名称、顶层实体指定对话框 说明:任何一项设计都是一项工程(project),必须首先为此工程建立一个放置 与此工程相关的所有文件的文件夹,此文件夹将被 QuartusII 默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文 件都必须放在同一文件夹中。 不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装 目录中。文件夹所在路径名和文件夹名中不能用中文, 不能用空格, 不能用括号(), 可用下划线_,最好也不要以数字开头。 图 61 的第一栏用于指定工程所在的工作库文件夹;第二栏用于指定工程名,工 程名可以取任何名字,也可以直接用顶层文件的实体名作为工程名(建议使用) ;第 三栏用于指定顶层文件的实体名。 本例工程的路径为 D:\MY_VHDL\LED_test 文件夹, 工程名与顶层文件的实体名同名为 LED_test。

图 60:新建工程向导对话框 3)、 在图 60 中点击 按钮进入图 61 所示的新建工程的存放路径、工 程的名称、顶层实体的名称的指定对话框;

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第16 16页

4) 、单击图 61 中的

按钮进入图 62 的添加文件对话框;

说明: 这里我选择的是 “21 嵌入式控制实验室”的 FPGA3.0 核心板上用的 Cyclone 系 列的 EP1C6Q240C8 器件。另外在图 63 右边的过滤器栏(Filters)中,你可以通过 指定器件的封装、管脚数以及器件速度等级来加快器件查找的速度,见下面的图形;

图 64:器件的封装 图 62:新建工程添加文件对话框 说明:由于本设计时新建的项目工程,还没有输入文件,所以可以不做任何操作, 如果你已经有文件或调用以前的文件,建议最好先将你的文件复制到该目录后再加 入。 5) 、点击图 62 的 按钮进入图 63 的所示的指定目标器件对话框;

图 65:器件的管脚数

图 63:指定目标器件对话框

图 66:器件的速度等级

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第17 17页

6) 、点击图 64 的

按钮进入图 67 所示的指定 EDA 工具对话框;

说明:在工程信息报告对话框,你可以看到你目前所建立的工程文件的配置信息报 告。单击图68中的 按钮,完成你本次设计的工程的建立工作。 另外,需要注意的是,工程建立完成后,你还可以根据设计中的实际情况对工 程进行重新设置,可选择【Assignments】>> 【Settings…】进行设置,如图69和70 所示

图 69:进入工程进行重新设置 图 67:指定 EDA 工具对话框 说明:本次 Quartus II 软件的使用介绍只是利用 Quartus II 软件的集成环境进行 项目的开发,在整个过程中不使用其它的 EDA 开发工具,所以在本操作中不进行任 何的复选项的设定。 7) 、点击图 67 的 按钮进入图 68 所示的工程信息报告对话框;

图 68:新建的工程信息报告对话框

图 70:对工程进行重新设置 到目前为止,一个新的工程已经建立,但该工程还没有任何的文件信息,这将 在下一小结进行介绍文本文件的输入方法。

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第18 18页

4、Quartus II 的 VHDL 工程设计介绍
在第三小结中我们已经建立了一个 LED_test 的工程,现在在本结来给该工程输入一 个文本文件。 1) 、点击菜单栏的“File”菜单项,选择其“New”下拉菜单;

图 74:Other Files 图 75:本设计选择的 VHDL File 3) 、象 图 75,选择 VHDL File 文件后,点击 OK 按钮进入图 76 的 VHDL 文件编辑 窗口;

图 71:进入文件的建立 2) 、点 击 “New”下拉菜单后进入输入文件的类型选择对话框。下面是它的一些 截图,这里也不做详细的介绍,以后就看用户慢慢的摸索了! ! !呵呵! ! !

图 72:Device Designed Files

图 73:Software File

图 76:新建的 VHDL 文件编辑窗口

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第19 19页

4) 、点击菜单栏的“File”菜单项,选择其“Save as”下拉菜单,来保存文件;

图 77:保存文件图 1

图 78:保存文件图 2

图 79:保存文件为 LED_test 后的 VHDL 文件编辑器 5) 、在 VHDL 文件编辑窗口中输入如下 VHDL 代码,注意在编写时的文件的保存, 要培养好这种习惯哦! ! ! ! ! ! 本代码是完成跑马灯的功能,利用计数器轮流点亮 LED 灯,实现各种动态效果。 -- 跑马灯的功能实现利用计数器轮流点亮 LED 灯,实现各种动态效果。 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; --***设计实体部分***-ENTITY LED_test IS PORT ( clk : IN std_logic; rst : IN std_logic; dataout : OUT std_logic_vector(7 DOWNTO 0) ); END LED_test; --***结构体部分***-ARCHITECTURE arch OF LED_test IS SIGNAL cnt : std_logic_vector(22 DOWNTO 0); SIGNAL dataout_tmp : std_logic_vector(7 DOWNTO 0); BEGIN dataout <= dataout_tmp; PROCESS(clk,rst) BEGIN IF (NOT rst = '1') THEN cnt <= "00000000000000000000000"; dataout_tmp <= "11100111"; --为 0 的 bit 位代表要点亮的 LED 的位置 ELSIF(clk'event and clk='1')THEN cnt <= cnt + "00000000000000000000001"; IF (cnt = "11111111111111111111111") THEN dataout_tmp(3 DOWNTO 0) <= dataout_tmp(4 DOWNTO 1); dataout_tmp(5) <= dataout_tmp(0); dataout_tmp(7 DOWNTO 4) <= dataout_tmp(6 DOWNTO 3); dataout_tmp(4) <= dataout_tmp(7); END IF; END IF; END PROCESS; END arch;

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第20 20页

图 81:点击菜单栏中的“Processing”菜单的“Start Compilation”下拉菜单

图 82:编译窗口

图 80:输入后的 VHDL 文件 6) 、对编写的 VHDL 代码进行大体上的检查,看看一些关键字是否正确等等! ! ! 7) 、现在可以对你所编写的代码进行编译了! ! ! 点击菜单栏中的“Processing”菜单的“Start Compilation”下拉菜单;或点 击工具栏的 图标按钮(这个和上面的功能一样) ,也可以点击工具栏上的 标按钮进行存盘自动编译 图 图 83:点击 Start 按钮开始编译

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第21 21页

图 84:有编译错误 当有错误时,可以查看信息窗口中的提示修改错误直到没有错误为止。

5、Quartus II 的图形工程设计介绍
同“QuartusII 的 VHDL 工程设计”的前面一样,我们这里所说的图形文件的设 计只是我们为某个工程设计的一个设计文件而已,所以在输入一个图形文件时同样 也需要在之前建立一个新的工程,那么言外之意就是我们设计的图形文件是为新建 立的工程所设计的了!下面开始以图形和文字相结合的方法来阐述如何建立一个新 的图形文件: 1、 新建一个文件夹(在这个文件夹里我们将存放我们现在设计的工程) 需要注意的是文件夹名称不能是中文,大家可以取一个与工程性质相关的 名称作为文件夹的名称。 2、 输入设计的图形文件 在 QuartusII 软件的菜单中选择菜单栏上的“File”的下拉菜单“New”菜 单项,或者点击工具栏

图 85:查看信息窗口中的信息 8) 、当编译成功后本来要进行时序仿真,这里由于在图形输入时也要进行仿真, 所以将时序仿真单独作为一个环节。 9) 、如果上一步的时序仿真正确的话,那你就可以为你的实际配置管脚了,关 于管脚的配置方法我们将在第 7 个小结“QuartusII 的逻辑器件下载配置”中进行讲 解。 通过本小结的图形与文字相结合的方式进行了“QuartusII 的 VHDL 工程设计介 绍”的说明,希望大家对 QuartusII 的文本设计方法有一个基本的认识。更多的知 识需要大家在自己的学习过程中慢慢的总结,接下来我们将对 QuartusII 的图形工 程设计的方法步骤作一个介绍。

上的 图标,也可以进入,或者使用快捷键“Ctrl+N”同样也可以,相关 图片如下:

图 86:新建文件(不是工程哦!)

图 87:新建窗口(New)

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第22 22页

3、 在上一步弹出的工具对话框中“Device Design Files”中选择我们要创建 的文件类型, 这里是建立图形文件选择 Block Diagram/Schematic File 选 项后点击 OK 按钮“ ”即可出现下图的图形文件的输入窗口。

图 89:图形文件的输入窗口 !) 4、 保存你的原理图文件(要注意你的文件名的命名规则哦! 关于保存的方法在文本文件的设计中也介绍了!这里保存为 yima3_8 5、 输入你的原理图文件 在原理图输入环境中点击鼠标右键,在弹出的右键菜单中选择“Insert” —>“Symbol…”则会出现下图的中的元件输入对话框。在“Libraries” 中选择不同的元件库,在不同的元件库里选择你需要的元件,点击“OK” 即可以输入该元件。另外你也可以使用在原理图输入环境中双击鼠标也可 以出现元件输入对话框。这个方法比较好吧! !呵呵呵呵

图 88:选择为图形文件的输入类型

图 90:单开元件库的方法 图 91:打开后的元件管理系统对话框 6、 在本设计中我们设计一个简单的一个 3-8 义马器,其原理如图,按照图 92 所表示的原理,在原理图输入开发环境中设计原理图,并保存文件,设计 好的如下图 93 所示(由于重新安装了开发软件,故环境的背景颜色不同了 ,大家也要小心毒哦,好个熊猫病毒哦)
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第23 23页

10、 通过本小结的图形与文字相结合的方式进行了 “QuartusII 的图形工程 设计介绍”的说明,希望大家对 QuartusII 的原理图的设计输入方法有一 个基本的认识。更多的知识需要大家在自己的学习过程中慢慢的总结,接 下来我们将对 QuartusII 的时序仿真设计步骤作一个介绍

图 92:一位半加器的原理图

6、Quartus II 的时序仿真设计介绍
仿真是对项目进行一项全面的测试,以确保设计项目的功能和时序特性与原设计相 吻合,满足项目的设计要求。具体的操作步骤如下: 1、 在进行时序仿真时,先需要建立一个波形文件时序建立仿真文件 在菜单栏中,选择“File”->“New”,在“New”窗口中选择“Other Files” 中的“Vector Waveform File”选项, (如图 95) , 点 击 “OK”,即出现空白 的波形编辑器,将该文件以默认的文件名保存在当前的工程文件夹中。

图 93:原理图输入保存后的工程 7、 放大原理图,仔细的检查一下原理图是否正确,看看一些端口是否连接好, 当基本检查完毕后,就可以编译你的工程了,这一点与第 5 小结的基本相 同,点击菜单栏中的“Processing”菜单的“Start Compilation”下拉菜 单;或点击工具栏的 图标按钮(这个和上面的功能一样) ,也可以点击

工具栏上的 图标按钮进行存盘自动编译,这里就不再详细的介绍了, 具体的操作在第 5 小结中有较为详细的操作解析。 8、 当编译成功后本来要进行时序仿真, 这里由于在图形输入时也要进行仿真, 所以将时序仿真单独作为一个环节。 9、 如果上一步的时序仿真正确的话,那你就可以为你的实际配置管脚了,关 于管脚的配置方法我们将在第 7 个小结“QuartusII 的逻辑器件下载配置” 中进行讲解。

图 94:点击 File 中的 New

图 95:新建波形文件

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第24 24页

图 99:Insert Node or Bus 窗口

图 96:波形文件的编辑环境 2、 设置仿真时间区域 选择“Edit”菜单中的“End Time ”选项,在弹出的窗口中的 Time 窗口中 输入 100,单位选择“uS”,点击“OK”,结束设置,即设置完成。 图 100:Node Finder 窗口

图 97:进入 End Time 编辑框 图 98:End Time 编辑框 3、 输入信号节点 在窗口的左侧点击鼠标右键->Insert Node or Bus…(或直接双击),在对话框 中选择 Node Finder ,导入输入输出端。 (也可以在菜单栏中选择“View”-> “Utility Windows ”->“Node Finder ”项,其图形为图 101)

图 101:另外一种 Node Finder 窗口
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第25 25页

Filter 选项选择 all,点击 List ,文件中所有的输入输出端均在左侧显示,选择要 进行仿真的项,点≥添加到右边,点击 OK 即可 4、 在仿真文件中设置输入值

希望大家对时序仿真的方法有一个比较初步的了解。

7、Quartus II 的逻辑器件下载配置
1、打开编程窗口 引脚锁定后,要重新编译一次,将引脚锁定信息编译进下载文件中。然后 将系统连接好,上电,在菜单"Tools"中,选择"Programmer", 2、设置编程下载接口方式 点击图中的"Hardware Setup"按钮,出现"Hardware Setup"窗口点击 "Add Hardware...",出现"Add Hardware"。按图所示选择设置,点 击 "OK",在"Available hardware items"窗中选中"ByteBlaster",单击 "Select Hardware"按钮,关闭"Hardware Setup"对话框,完成编程下载 接口方式的设置。 3、对器件编程 下载模式选"JTAG",勾选"Program/Configure"、"Verify"、"Blank-Check" 条目,点击"Start"按钮,即可完成对目标器件进行编程 4、详细的图片在下面一一列出。

图 102:输入信号设置值 5、 进行时序仿真 点右上角的蓝色按钮 Start Simulation 进行仿真,仿真后的波形图为图 103 所示。

图 103:3-8 译码器的时序仿真结果 6、 当时序仿真正确后,那么可以进行硬件的下载配置。将在第 7 小结中进行 了详细的设计操作解析。 7、 通过本小结对时序仿真设计的介绍,使用图文相结合的方式进行了说明,
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第26 26页

图 104:设置下载方式 1

二、FPGA 的设计知识小结
本小结主要是对在使用 Quartus II 软件进行 FPGA 设计时的一些常见的设计小 知识进行了一些小结,便于以后的知识小结。主要包括下面几个方面:

图 105:设置下载方式 2

图 106:对器件编程(JTAG 方式)

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第27 27页

Quartus II 文件扩展名
Altera 文件扩展名的缩写 .v -------- verilog 文件 .qpf ---------- quartus 工程文件 .bsf ---------- 块符号文件 .qsf ---------- quartus 配置文件 .pin ---------- 引脚文件 .vo ---------- gate level .pof ---------- 编程对象文件 .qar -----------工程归档文件, .mif ----------memory initial file .srec ---------S record .gdf ----------graphic desing file .vhd ---------- vhdl 文件 .vwf ---------- 矢量波形文件 .rpt ---------- 报告文件 .summary --------- summary .sdo ---------- delay .qws ---------- 工作区文件 .sof ---------- SRAM 对象文件 SDK ----------system development kit .ISO ---------- 是 ISO9660 标准下的文件形式 .tdf ----------text design file .tcl-----------tool command language

FPGA/CPLD 的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍 一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线操作和数据接口 的同步方法。希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导

HAL-----------Nios II 运行库(或者称为硬件抽象层(HAL) ) 图 107:Quartus II 文件扩展名

2、FPGA 设计的四种常用思想与技巧
作 者:王诚(Lattice Semiconductor) 本文讨论的四种常用 FPGA/CPLD 设计思想与技巧:乒乓操作、串并转换、流水 线操作、数据接口同步化,都是 FPGA/CPLD 逻辑设计的内在规律的体现,合理地采 用这些设计思想能在 FPGA/CPLD 设计工作种取得事半功倍的效果。

日后的设计工作,将取得事半功倍的效果! 图 108:典型的乒乓操作方法 乒乓操作 “乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法 如图 108 所示。 乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时 分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元 为双口 RAM(DPRAM)、单口 RAM(SPRAM)、FIFO 等。在第一个缓冲周期,将输入的 数据流缓存到“数据缓冲模块 1”;在第 2 个缓冲周期,通过“输入数据选择单元” 的切换,将输入的数据流缓存到“数据缓冲模块 2”,同时将“数据缓冲模块 1”缓 存的第 1 个周期数据通过“输入数据选择单元”的选择,送到“数据流运算处理模 块”进行运算处理;在第 3 个缓冲周期通过“输入数据选择单元”的再次切换,将 输入的数据流缓存到“数据缓冲模块 1”,同时将“数据缓冲模块 2”缓存的第 2 个 周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运 算处理。如此循环。 乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按 节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模 块”进行运算与处理。把乒乓操作模块当做一个整体,站在这个模块的两端看数据, 输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流 进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲 与处理。 乒乓操作的第二个优点是可以节约缓冲区空间。比如在 WCDMA 基带应用中,1 个帧是由 15 个时隙组成的,有时需要将 1 整帧的数据延时一个时隙后处理,比较直 接的办法是将这帧数据缓存起来,然后延时 1 个时隙进行处理。这时缓冲区的长度 是 1 整帧数据长,假设数据速率是 3.84Mbps,1 帧长 10ms,则此时需要缓冲区长

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第28 28页

度是 38400 位。如果采用乒乓操作,只需定义两个能缓冲 1 个时隙数据的 RAM(单 口 RAM 即可)。当向一块 RAM 写数据的时候,从另一块 RAM 读数据,然后送到处理 单元处理,此时每块 RAM 的容量仅需 2560 位即可,2 块 RAM 加起来也只有 5120 位的容量。 另外,巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。如图 109 所示, 数据缓冲模块采用了双口 RAM, 并在 DPRAM 后引入了一级数据预处理模 块,这个数据预处理可以根据需要的各种数据运算,比如在 WCDMA 设计中,对输 入数据流的解扩、解扰、去旋转等。假设端口 A 的输入数据流的速率为 100Mbps, 乒乓操作的缓冲周期是 10ms。以下分析各个节点端口的数据速率。 A 端口处输入数据流速率为 100Mbps,在第 1 个缓冲周期 10ms 内,通过“输 入数据选择单元”,从 B1 到达 DPRAM1。B1 的数据速率也是 100Mbps,DPRAM1 要 在 10ms 内写入 1Mb 数据。同理,在第 2 个 10ms,数据流被切换到 DPRAM2,端 口 B2 的数据速率也是 100Mbps,DPRAM2 在第 2 个 10ms 被写入 1Mb 数据。在第3 个 10ms,数据流又切换到 DPRAM1,DPRAM1 被写入 1Mb 数据。

实现了数据流的串并转换,并行用“数据预处理模块 1”和“数据预处理模块 2”处 理分流的数据,是面积与速度互换原则的体现! 串并转换设计技巧 串并转换是 FPGA 设计的一个重要技巧, 它是数据流处理的常用手段, 也是面积 与速度互换思想的直接体现。串并转换的实现方法多种多样,根据数据的排序和数 量的要求,可以选用寄存器、 RAM 等实现。前面在乒乓操作的图例中,就是通过 DPRAM 实现了数据流的串并转换,而且由于使用了 DPRAM,数据的缓冲区可以开 得很大,对于数量比较小的设计可以采用寄存器完成串并转换。如无特殊需求,应 该用同步时序设计完成串并之间的转换。比如数据从串行到并行,数据排列顺序是 高位在前,可以用下面的编码实现: prl_temp<={prl_temp,srl_in}; 其中,prl_temp 是并行输出缓存寄存器,srl_in 是串行数据输入。对于排列顺序 有规定的串并转换,可以用 case 语句判断实现。对于复杂的串并转换,还可以用状 态机实现。串并转换的方法比较简单,在此不必赘述。 流水线操作设计思想 首先需要声明的是,这里所讲述的流水线是指一种处理流程和顺序操作的设计 思想,并非 FPGA、ASIC 设计中优化时序所用的“Pipelining”。 流水线处理是高速设计中的一个常用设计手段。如果某个设计的处理流程分为 若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个 步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工 作频率。 流水线设计的结构示意图如图 110 所示。其基本结构为:将适当划分的 n 个操 作步骤单流向串联起来。流水线操作的最大特点和要求是,数据流在各个步骤的处 理从时间上看是连续的,如果将每个操作步骤简化假设为通过一个 D 触发器(就是用 寄存器打一个节拍),那么流水线操作就类似一个移位寄存器组,数据流依次流经 D

仔细分析就会发现到第 3 个缓冲周期时,留给 DPRAM1 读取数据并送到“数据 预处理模块 1”的时间一共是 20ms。有的工程师困惑于 DPRAM1 的读数时间为什么 是 20ms,这个时间是这样得来的:首先,在在第 2 个缓冲周期向 DPRAM2 写数据 的 10ms 内,DPRAM1 可以进行读操作;另外,在第 1 个缓冲周期的第 5ms 起(绝对 时间为 5ms 时刻),DPRAM1 就可以一边向 500K 以后的地址写数据,一边从地址 0 读数,到达 10ms 时,DPRAM1 刚好写完了 1Mb 数据,并且读了 500K 数据,这个 缓冲时间内 DPRAM1 读了 5ms;在第 3 个缓冲周期的第 5ms 起(绝对时间为 35ms 时刻),同理可以一边向 500K 以后的地址写数据一边从地址 0 读数,又读取了 5 个 ms,所以截止 DPRAM1 第一个周期存入的数据被完全覆盖以前,DPRAM1 最多可以 读取 20ms 时间 , 而 所 需 读 取 的 数 据 为 1Mb ,所 以 端 口 C1 的数 据 速 率 为 : 1Mb/20ms=50Mbps。 因 此 , “数据预处理模块 1”的最低数据吞吐能力也仅仅要求 为 50Mbps。同 理 , “数据预处理模块 2”的最低数据吞吐能力也仅仅要求为 50Mbps。 换言之,通过乒乓操作, “数据预处理模块”的时序压力减轻了,所要求的数据处理 速率仅仅为输入数据速率的 1/2。 图 109:低速模块处理高速数据流的流程 通过乒乓操作实现低速模块处理高速数据的实质是: 通过 DPRAM 这种缓存单元

触发器,完成每个步骤的操作。流水线设计时序如图 111 所示。 图 110:流水线设计的结构示意图 流水线设计的一个关键在于整个设计时序的合理安排,要求每个操作步骤的划 分合理。如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级的输出 直接汇入后级的输入即可;如果前级操作时间大于后级的操作时间,则需要对前级 的输出数据适当缓存才能汇入到后级输入端;如果前级操作时间恰好小于后级的操 作时间,则必须通过复制逻辑,将数据流分流,或者在前级对数据采用存储、后处 页 Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心! 第29 29页

理方式,否则会造成后级数据溢出。 图 111:流水线设计时序 在 WCDMA 设计中经常使用到流水线处理的方法,如 RAKE 接收机、搜索器、 前导捕获等。流水线处理方式之所以频率较高,是因为复制了处理模块,它是面积 换取速度思想的又一种具体体现。 数据接口的同步方法 数据接口的同步是 FPGA/CPLD 设计的一个常见问题,也是一个重点和难点,很 多设计不稳定都是源于数据接口的同步有问题。 在电路图设计阶段, 一些工程师手工加入 BUFT 或者非门调整数据延迟, 从而保 证本级模块的时钟对上级模块数据的建立、保持时间要求。还有一些工程师为了有 稳定的采样,生成了很多相差 90 度的时钟信号,时而用正沿打一下数据,时而用负 沿打一下数据,用以调整数据的采样位置。这两种做法都十分不可取,因为一旦芯 片更新换代或者移植到其它芯片组的芯片上,采样实现必须从新设计。而且,这两 种做法造成电路实现的余量不够,一旦外界条件变换(比如温度升高),采样时序就有 可能完全紊乱,造成电路瘫痪。 下面简单介绍几种不同情况下数据接口的同步方法: 1. 输入、输出的延时(芯 片间、PCB 布线、一些驱动接口元件的延时等)不可测,或者有可能变动的条件下, 如何完成数据同步? 对于数据的延迟不可测或变动,就需要建立同步机制,可以用一个同步使能或 同步指示信号。另外,使数据通过 RAM 或者 FIFO 的存取,也可以达到数据同步目 的。 把数据存放在 RAM 或 FIFO 的方法如下:将上级芯片提供的数据随路时钟作为 写信号,将数据写入 RAM 或者 FIFO,然后使用本级的采样时钟(一般是数据处理的

主时钟)将数据读出来即可。这种做法的关键是数据写入 RAM 或者 FIFO 要可靠,如 果使用同步 RAM 或者 FIFO, 就要求应该有一个与数据相对延迟关系固定的随路指示 信号,这个信号可以是数据的有效指示,也可以是上级模块将数据打出来的时钟。 对于慢速数据,也可以采样异步 RAM 或者 FIFO,但是不推荐这种做法。 数据是有固定格式安排的,很多重要信息在数据的起始位置,这种情况在通信 系统中非常普遍。通讯系统中,很多数据是按照“帧”组织的。而由于整个系统对 时钟要求很高,常常专门设计一块时钟板完成高精度时钟的产生与驱动。而数据又 是有起始位置的,如何完成数据的同步,并发现数据的“头”呢? 数据的同步方法完全可以采用上面的方法,采用同步指示信号,或者使用 RAM、 FIFO 缓存一下。找到数据头的方法有两种,第一种很简单,随路传输一个数据起始 位置的指示信号即可,对于有些系统,特别是异步系统,则常常在数据中插入一段 同步码(比如训练序列), 接收端通过状态机检测到同步码后就能发现数据的 “头”了 , 这种做法叫做“盲检测”。 上级数据和本级时钟是异步的,也就是说上级芯片或模块和本级芯片或模块的 时钟是异步时钟域的。 前面在输入数据同步化中已经简单介绍了一个原则:如果输入数据的节拍和本 级芯片的处理时钟同频,可以直接用本级芯片的主时钟对输入数据寄存器采样,完 成输入数据的同步化;如果输入数据和本级芯片的处理时钟是异步的,特别是频率 不匹配的时候,则只有用处理时钟对输入数据做两次寄存器采样,才能完成输入数 据的同步化。需要说明的是,用寄存器对异步时钟域的数据进行两次采样,其作用 是有效防止亚稳态(数据状态不稳定)的传播,使后级电路处理的数据都是有效电平。 但是这种做法并不能保证两级寄存器采样后的数据是正确的电平,这种方式处理一 般都会产生一定数量的错误电平数据。所以仅仅适用于对少量错误不敏感的功能单 元。 为了避免异步时钟域产生错误的采样电平,一般使用 RAM、FIFO 缓存的方法完 成异步时钟域的数据转换。最常用的缓存单元是 DPRAM,在输入端口使用上级时钟 写数据,在输出端口使用本级时钟读数据,这样就非常方便的完成了异步时钟域之 间的数据交换。 设计数据接口同步是否需要添加约束 建议最好添加适当的约束,特别是对于高速设计,一定要对周期、建立、保持 时间等添加相应的约束。 这里附加约束的作用有两点: a. 提高设计的工作频率,满足接口数据同步要求。通过附加周期、建立时间、 保持时间等约束可以控制逻辑的综合、映射、布局和布线,以减小逻辑和布线延时, 从而提高工作频率,满足接口数据同步要求。 b. 获得正确的时序分析报告。几乎所有的 FPGA 设计平台都包含静态时序分析 工具,利用这类工具可以获得映射或布局布线后的时序分析报告,从而对设计的性

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第30 30页

能做出评估。静态时序分析工具以约束作为判断时序是否满足设计要求的标准,因 此要求设计者正确输入约束,以便静态时序分析工具输出正确的时序分析报告。 Xilinx 和 数 据 接 口 相 关 的 常 用 约 束 有 Period 、 OFFSET_IN_BEFORE 、 OFFSET_IN_AFTER、OFFSET_OUT_BEFORE 和 OFFSET_OUT_AFTER 等;Altera 与 数据接口相关的常用约束有 Period、tsu、tH、tco 等。

3、关于有限状态机(FSM)编码的技巧和注意事项
贴1 状态机的编码 a.状态机的编码。Biary、gray-code 编码使用最少的触发器,较多的组合逻辑。 而 one-hot 编码反之。由于 CPLD 更多的提供组合逻辑资源,而 FPGA 更多的提供触 发器资源,所以 CPLD 多使用 gray-code,而 FPGA 多使用 one-hot 编码。另一方面, 对于小型设计使用 gray-code 和 binary 编码更有效,而大型状态机使用 one-hot 更 高效。 b.在代码中添加综合器的综合约束属性或者在图形界面下设置综合约束属性可 以比较方便的改变状态的编码。 如 VHDL 的示例: Synplicity: attribute syn_encoding : string; attribute syn_encoding of <signal_name> : type is "value "; -- The syn_encoding attribute has 4 values : sequential, onehot, gray and safe. Exemplar: -- Declare TYPE_ENCODING_style attribute -- Not needed if the exemplar_1164 package is used type encoding_style is (BINARY, ONEHOT, GRAY, RANDOM, AUTO); attribute TYPE_ENCODING_style : encoding_style; ... attribute TYPE_ENCODING_style of <typename> : type is ONEHOT; Verilog 示例: Synplicity: Reg[2:0] state; /* synthesis syn_encoding = "value" */; // The syn_encoding attribute has 4 values : sequential, onehot, gray and safe. Exemplar:Parameter /* exemplar enum <type_name> */ s0 = 0, s1 = 1, s2 = 2, s3 = 3, S4 = 4; Reg [2:0] /* exemplar enum <type_name> */ present_state, next_state

贴 2:状态机的编码风格 a.关于 FSM 的编码方法。FSM 分两大类:米勒型和摩尔型。组成要素有输入(包 括复位) ,状态(包括当前状态的操作) ,状态转移条件,状态的输出条件。 设计 FSM 的方法和技巧多种多样,但是总结起来有两大类:第一种,将状态转 移和状态的操作和判断等写到一个模块(process、block)中。另一种是将状态转 移单独写成一个模块,将状态的操作和判断等写到另一个模块中(在 Verilog 代码 中,相当于使用两个“always” block)。其中较好的方式是后者。其原因如下。 首先 FSM 和其他设计一样,最好使用同步时序方式设计,好处不再累述。而状 态机实现后,状态转移是用寄存器实现的,是同步时序部分。状态的转移条件的判 断是通过组合逻辑判断实现的,之所以第二种比第一种编码方式合理,就在于第二 种编码将同步时序和组合逻辑分别放到不同的程序块(process,block) 中 实现 。 这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码, 利于用户添加合适的时序约束条件,利于布局布线器实现设计。 b.初始化状态和默认状态。 一个完备的状态机(健壮性强)应该具备初始化状态和默认状态。当芯片加电 或者复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态。需要 注明的一点是,大多数 FPGA 有 GSR(Global Set/Reset)信号,当 FPGA 加电后,GSR 信号拉高,对所有的寄存器,RAM 等单元复位/置位,这是配置于 FPGA 的逻辑并未生 效,所以不能保证正确的进入初始化状态。所以使用 GSR 企图进入 FPGA 的初始化状 态,常常会产生种种不必要的麻烦。一般的方法是采用异步复位信号,当然也可以 使用同步复位,但是要注意同步复位的逻辑设计。解决这个问题的另一种方法是将 默认的初始状态的编码设为全零,这样 GSR 复位后,状态机自动进入初始状态。 令一方面状态机也应该有一个默认(default)状态,当转移条件不满足,或者 状态发生了突变时,要能保证逻辑不会陷入“死循环”。这是对状态机健壮性的一 个重要要求,也就是常说的要具备“自恢复”功能。对应于编码就是对 case,if- else 语句要特别注意,要写完备的条件判断语句。VHDL 中,当使用 CASE 语句的时 候, 要使用“When Others”建立默认状态。 使用“IF...THEN...ELSE”语句的时候 , 要用在“ELSE”指定默认状态。Verilog 中,使用“case”语句的时候要用 “default”建立默认状态,使用“if...else”语句的注意事项相似。 另外提一个技巧:大多数综合器都支持 Verilog 编码状态机的完备状态属性- -“full case”。这个属性用于指定将状态机综合成完备的状态,如 Synplicity 的综合工具(Synplify/Synplify Pro,Amplify,etc)支持的命令格式如下: case (current_state) // synthesis full_case 2’b00 : next_state <= 2’b01; 2’b01 : next_state <= 2’b11; 2’b11 : next_state <= 2’b00; //这两段代码等效

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第31 31页

case (current_state) 2’b00 : next_state <= 2’b01; 2’b01 : next_state <= 2’b11; 2’b11 : next_state <= 2’b00; default : next_state <= 2bx; Synplicity 还有一个关于状态机的综合属性,叫“// synthesis parallel_case”其功能是检查所有的状态是“并行的”(parallel),也就是说在 同一时间只有一个状态能够成立。 c.使用完备的“if...else”还有一个重要的好处,就是可以避免生成非目的性 的“锁存器”(Latch)。详见 westor 的一篇文章“为什么 XST 与 Synplify 的综合 结果不一样?” d.状态机的定义可以用 parameter 定义, 但是不推荐使用`define 宏定义的方式 , 因为‘define 宏定义在编译时自动替换整个设计中所定义的宏,而 parameter 仅仅 定定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。义模块内部 的参数,定义的参数不会与模块外的其他状态机混淆。

4、FPGA 设计过程中常用的电平标准
现在常用的电平标准有 TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、 RS485 等,还有一些速度比较高的 LVDS、GTL、PGTL、CML、HSTL、SSTL 等。下面简 单介绍一下各自的供电电源、电平标准以及使用注意事项。 TTL:Transistor-Transistor Logic 三极管结构 Vcc:5V;VOH>=2.4V;VOL<=0.5V;VIH>=2V;VIL<=0.8V。 因为 2.4V 与 5V 之间还有很大空闲,对改善噪声容限并没什么好处,又会白白增大 系统功耗,还会影响速度。所以后来就把一部分“砍”掉了。也就是后面的 LVTTL。 LVTTL 又分 3.3V、2.5V 以及更低电压的 LVTTL(Low Voltage TTL)。 3.3V LVTTL: Vcc:3.3V;VOH>=2.4V;VOL<=0.4V;VIH>=2V;VIL<=0.8V。 2.5V LVTTL: Vcc:2.5V;VOH>=2.0V;VOL<=0.2V;VIH>=1.7V;VIL<=0.7V。 更低的 LVTTL 不常用就先不讲了。多用在处理器等高速芯片,使用时查看芯片手册 就 OK 了。 TTL 使用注意:TTL 电平一般过冲都会比较严重,可能在始端串 22 欧或 33 欧电 阻 ; TTL 电平输入脚悬空时是内部认为是高电平。 要下拉的话应用 1k 以下电阻下拉 。 TTL 输出不能驱动 CMOS 输入。 CMOS:Complementary Metal Oxide Semiconductor PMOS+NMOS Vcc:5V;VOH>=4.45V;VOL<=0.5V;VIH>=3.5V;VIL<=1.5V。

相对 TTL 有了更大的噪声容限,输入阻抗远大于 TTL 输入阻抗。对应 3.3V LVTTL, 出现了 LVCMOS,可以与 3.3V 的 LVTTL 直接相互驱动。 3.3V LVCMOS: Vcc:3.3V;VOH>=3.2V;VOL<=0.1V;VIH>=2.0V;VIL<=0.7V。 2.5V LVCMOS: Vcc:2.5V;VOH>=2V;VOL<=0.1V;VIH>=1.7V;VIL<=0.7V。 CMOS 使用注意:CMOS 结构内部寄生有可控硅结构,当输入或输入管脚高于 VCC 一定值(比如一些芯片是 0.7V)时,电流足够大的话,可能引起闩锁效应,导致芯片 的烧毁。 ECL:Emitter Coupled Logic 发射极耦合逻辑电路(差分结构) Vcc=0V;Vee:-5.2V;VOH=-0.88V;VOL=-1.72V;VIH=-1.24V;VIL=-1.36V。 速度快,驱动能力强,噪声小,很容易达到几百 M 的应用。但是功耗大,需要负电 源。为简化电源,出现了 PECL(ECL 结构,改用正电压供电)和 LVPECL。 PECL:Pseudo/Positive ECL Vcc=5V;VOH=4.12V;VOL=3.28V;VIH=3.78V;VIL=3.64V LVPELC:Low Voltage PECL Vcc=3.3V;VOH=2.42V;VOL=1.58V;VIH=2.06V;VIL=1.94V ECL、PECL、LVPECL 使用注意:不同电平不能直接驱动。中间可用交流耦合、电 阻网络或专用芯片进行转换。以上三种均为射随输出结构,必须有电阻拉到一个直 流偏置电压。(如多用于时钟的 LVPECL:直流匹配时用 130 欧上拉,同时用 82 欧下 拉;交流匹配时用 82 欧上拉,同时用 130 欧下拉。但两种方式工作后直流电平都在 1.95V 左右。) 前面的电平标准摆幅都比较大, 为降低电磁辐射, 同时提高开关速度又推出 LVDS 电平标准。 LVDS:Low Voltage Differential Signaling 差分对输入输出,内部有一个恒流源 3.5-4mA,在差分线上改变方向来表示 0 和 1。 通过外部的 100 欧匹配电阻(并在差分线上靠近接收端)转换为±350mV 的差分电平。 LVDS 使用注意:可以达到 600M 以上,PCB 要求较高,差分线要求严格等长,差最好 不超过 10mil(0.25mm)。100 欧电阻离接收端距离不能超过 500mil,最好控制在 300mil 以内。 下面的电平用的可能不是很多,篇幅关系,只简单做一下介绍。 CML:是内部做好匹配的一种电路,不需再进行匹配。三极管结构,也是差分线 , 速度能达到 3G 以上。只能点对点传输。 GTL:类似 CMOS 的一种结构,输入为比较器结构,比较器一端接参考电平,另 一端接输入信号。1.2V 电源供电。 Vcc=1.2V;VOH>=1.1V;VOL<=0.4V;VIH>=0.85V;VIL<=0.75V PGTL/GTL+:

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第32 32页

Vcc=1.5V;VOH>=1.4V;VOL<=0.46V;VIH>=1.2V;VIL<=0.8V HSTL 是 主 要 用 于 QDR 存 储 器 的 一 种 电 平 标 准 : 一 般 有 V?CCIO=1.8V 和 V??CCIO=1.5V。和上面的 GTL 相似,输入为输入为比较器结构,比较器一端接参考 电平(VCCIO/2),另一端接输入信号。对参考电平要求比较高(1%精度)。 SSTL 主要用于 DDR 存储器。和 HSTL 基本相同。V??CCIO=2.5V,输入为输入为比较器 结构, 比较器一端接参考电平 1.25V, 另一端接输入信号。 对参考电平要求比较高(1% 精度)。 HSTL 和 SSTL 大多用在 300M 以下。 RS232 和 RS485 基本和大家比较熟了,只简单提一下: RS232 采用±12-15V 供电, 我们电脑后面的串口即为 RS232 标准。+12V 表示 0,-12V 表示 1。可以用 MAX3232 等专用芯片转换,也可以用两个三极管加一些外围电路进行 反相和电压匹配。 RS485 是一种差分结构,相对 RS232 有更高的抗干扰能力。传输距离可以达到上千米

(2) 位于器件的右侧中部 归纳了 Cyclone PLL 的功能:下表 Cyclone PLL 功能 功 能 说 明 时钟倍频和分频 M/(N×后 scale 计 数 器) (1) 相位偏移 小至 156 皮秒(ps)的增量幅度(2),( 3) 可编程占空比 内部时钟输出数量 每个 PLL 两个输出 外部时钟输出数量(4) 每个 PLL 一个输出 锁定端口可以输入逻辑阵列 PLL 时钟输出可以输入逻辑阵列 表注释: (1)M,N 和后 scale 计数器的值从 1 至 32 (2)最小的相位偏移量为压控振荡器(VCO)周期除以 8 (3) 对于角度调整, Cyclone FPGA 的偏移输出频率的增量至少为 45?。更小 的角度增量可能取决于 PLL 时钟输出的倍频/分频系数。 (4) 100 脚的扁平四方封装(TQFP)的 EP1C3 器件不支持 PLL LVDS 输出或 外部时钟输出。144 脚 TQFP 封装的 EP1C6 PLL2 不支持外部时钟输出。 Cyclone PLL 区块 PLL 主要作用就是把内部/外部时钟的相位和频率同步于输入参考时钟。PLL 由 许多部分组成,共同完成相位调整。 Cyclone PLL 采用一个相位频率检测器(PFD)把参考输入时钟的上升沿和反馈 时钟对齐。根据占空比规定确定下降沿。PFD 产生一个上升或下降信号,决定 VCO 是否需要以更高或更低的频率工作。PFD 输出施加在电荷泵和环路滤波器,产生控 制电压设置 VCO 的频率。如果 PFD 产生上升信号,然后 VCO 就会增加。反之,下 降信号会降低 VCO 的频率。 PFD 输出这些上升和下降信号给电荷泵。如果电荷泵收到上升信号,电流注入 环路滤波器。反之,如果收到下降信号,电流就会流出环路滤波器。环路滤波器把 这些上升和下降信号转换为电压,作为 VCO 的偏置电压。环路滤波器还消除了电荷 泵的干扰,防止电压过冲,这样就会最小化 VCO 的抖动。 环滤波器的电压决定了 VCO 操作的速度。VCO 是用四级差分环滤波器实现的。 反馈环路中的分频计数器增加输入参考频率以上的 VCO 频率,使得 VCO 频率 (fVCO)等于输入参考时钟(fREF)的 M 倍。PFD 的输入参考时钟(fREF)等于 输入时钟(fIN)除以欲 scale 计数器(N) 。因此 , PFD 某个输入的反馈时钟(fFB) 锁定于 PFD 的另一个输入的 fREF) 。

5、使用 Cyclone 器件中的 PLL
译者:Altera 中国区授权代理—骏龙科技有限公司(技术支持部) 介绍 Cyclone? FPGA 具有锁相环(PLL)和全局时钟网络,提供完整的时钟管理方案。 Cyclone PLL 具有时钟倍频和分频、相位偏移、可编程占空比和外部时钟输出,进行 系统级的时钟管理和偏移控制。 Altera? Quartus? II 软件无需任何外部器件,就可 以启用 Cyclone PLL 和相关功能。 本文将介绍如何设计和使用 Cyclone PLL 功 能 。 PLL 常用于同步内部器件时钟和外部时钟,使内部工作的时钟频率比外部时钟更高,时 钟延迟和时钟偏移最小,减小或调整时钟到输出(TCO)和建立(TSU)时间 硬件结构 每个 Cyclone FPGA 包括具有多达两个 PLL。下表为几种型号 Cyclone FPGA 内 可用的 PLL 数量。

表注释: (1) 位于器件的左侧中部

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第33 33页

VCO 的输出输入三个后 scale 计数器(G0、G1 和 E) 。这些后 scale 计数器可以 在 PLL 中产生许多谐振频率。 另外,PLL 有内部延迟单元补偿全局时钟网络的走线和外部时钟输出管脚的 I/O 缓冲器延迟。这些内部延迟是固定的,用户无法控制。

图 112:Cyclone PLL 主要部分的框架图 图 112 的注释: (1) 100 脚 TQFP 封装的 EP1C3 器件不支持 PLL LVDS 输入 (2) 如果你采用 LVDS 标准, 那么要使用 PLL 的两个 CLK 管脚。 专有 CLK 管脚的 辅助 功 能支 持 LVDS 输入。 对于 PLL1 , CLK0 管脚的 辅助 功 能是 LVDSCLK1p,CLK1 管脚的辅助功能是 LVDSCLK1n。对于 PLL2 ,CLK2 管脚 的辅助功能是 LVDSCLK2p,CLK3 管脚的辅助功能是 LVDSCLK2n。 (3) 100 脚 TQFP 封装的 EP1C3 器件和 144 脚 TQFP 封装的 EP1C6 PLL 不支持外部时钟输出。

图 113: Cyclone PLL 的端口 图 113 的注释: (1) 你可以把这些信号分配给单端 I/O 标准或 LVDS。 (2) Inclk0 必须由专用时钟输入管脚驱动 (3) e0 驱动两用 PLL[2..1]_OUT 管脚

PLL 输入信号 PLL 输入信号 端口
inclk0 PLL 的时钟输入

说明

来源 专用时 钟 输 入管脚(1)

目的 ÷ n 计数 器

pllena 是高有效信号,是 PLL 的启动和复位 信号。它可以启动一个或两个 PLL。当该信 号为低时, PLL 时钟输出端口输出为 GND, PLL 控制 pllena(2) PLL 失锁。一旦该信号再次变高,锁定过程 逻辑阵列(3) 软件简述 信号 开始,PLL 重新和输入参考时钟同步。可以 Quartus II 软件中用 altpll 宏功能调用 Cyclone PLL。图 113 是 Cyclone PLL 的端 由内 部 逻 辑 或 任 意 的 通 用 I/O 管脚 驱 动 口 (用 Quartus II altpll 宏功能内的名称) 以及来源和目的。 要注意 altpll 的 c[1..0]和e0 pllena 。 时钟输出端口是由后 scale 计数器 G0、G1 和 E 驱 动 的。 G0 和 G1 计数器驱动 c0 和c1 areset 是高有效信号,复位所有的 PLL 计数 PLL 输出的内部全局时钟网络, E 计数器驱动到 e0 PLL 输出连接的 PLL 外部时钟输 器为初始值。当该信号为高时,PLL 复位该 出管脚。 计数器,失锁。一旦该信号再次变低时,锁 areset 逻辑阵列(3) PFD 定过程开始, PLL 重新和输入参考时钟同步。 可以由内部逻辑或任意通用 I/O 管脚驱动 areset。 pfdena 是高有效信号,启动 PFD 的升降输出 信号。当 pdfena 为低时,PFD 无效,而 VCO pfdena 逻辑阵列(3) PFD 继续工作。PLL 不管输入时钟是否有效,时 钟输出继续触发,但是会有一些长期偏移。 页 Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心! 第34 34页

因为输出时钟频率一段时间内不会改变,在 输入时钟无效时, pfdena 端口可以作为关机 或清除信号。 可以由内部逻辑或任意通用 I/O 管脚驱动 pfdena 端口。 表注释: (1) PLL 的 inclk0 端口必须由专用时钟管脚驱动。 (2) 所有的 PLL 没有专门的 pllena 管脚,这样你可以为两个 PLL 选用其中一 个 pllena 或每个 PLL 都有各自的 pllena 管脚。 (3) 逻辑阵列来源意味着你可以从内部逻辑或任意通用 I/O 管脚驱动这个端口 。 PLL 输出信号 PLL 输出信号 端 口 说 明 来 源 目 的 PLL 时钟输出驱动内部全局时 PLL 后 scale 计数 c[1..0] 全局时钟网络(1) 钟网络 器 G0 或 G1 PLL 时钟输出驱动单端或 LVDS PLL 后 scale 计数 PLL[2..1]_OUT 管 e0(2) 外部时钟输出管脚。 器E 脚(3) PLL 锁定状态。当 PLL 锁 定 时, 该端口为高。当 PLL 失锁时,该 locked PLL 锁定检测 逻辑阵列(4) 端口为低。在 PLL 锁定过程中, 锁定端口输出为脉冲高和低。 表注释: (1) C[1..0]可以通过全局时钟网络驱动任何通用 I/O 管脚。 (2) 100 脚 TQFP 封装的 EP1C3 器件和 144 脚 TQFP 封装的 EP1C6 PLL2 不支持外 部时钟输出 PLL[2..1]_OUT。 (3) PLL[2..1]_OUT 管脚是两用管脚。 如果不需要这些管脚, 它们可以作为通用 I/O 管脚。 (4) 逻辑阵列目的意味着你可以把该端口输出到内部逻辑或任意通用 I/O 管脚。 在 Quartus II 软件中,你定义哪些从 PLL(c0 或 c1)输出的内部时钟应该补偿。 这些 PLL 时钟输出参照 PLL 输入时钟进行相位校正。例如,如果 c0 指定为正常模 式下的补偿时钟,那么根据 c0 在全局时钟网络上的走线来补偿。 管脚和时钟网络连接 你必须用专用时钟输入管脚 CLK[3..0] 驱动 Cyclone PLL 。反转时钟和内部产生 时钟无法驱动 PLL。表 5 说明哪些专用时钟管脚驱动哪些 PLL 输入时钟端口。 单个时钟输入管脚不能驱动所有的 PLL,但是单个时钟输入管脚可以输入逻辑 阵列的两个缓存器以及 PLL inclk 端口。 PLL 输入时钟来源

PLL 输入时钟来源 PLL1 时钟输入管脚(1) PLL2(2) CLK0 × CLK1 × CLK2 × CLK3 × 上表注释: (1) 如果你使用 LVDS 标准,那么两个驱动 PLL 的管脚的 CLK 都要使用。 (2) EP1C3 只支持 PLL1 。 altpll 的 c[1..0]和 e0 时钟输出管脚由 PLL 后 scale 计数器 G0、G1 和 E 驱动(和 顺 序 无关 ) 。G0 和 G1 计数器馈入 c0 和 c1 PLL 输出的内部全局时钟网络上。E 计数 器馈入 e0 PLL 输出的 PLL 外部时钟输出管脚上。下表是说明 PLL 后 scale 计数器输 出能够驱动哪些全局时钟网络。 PLL 输出时钟对应的全局时钟网络
计数器输出 GCLK0 GCLK1 GCLK2 GCLK3 GCLK4 GCLK5 GCLK6 GCLK7

PLL1 PLL2

Cyclone PLL 时钟连接关系 归纳了上面两个表的内容

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

PLL

G0 G1 G0 G1

× ×

× × × × × ×

页 第35 35页

图 114:Cyclone PLL 时钟连接关系 图 114 注释: (1) PLL1 通过 CLK0 和 CLK1 管脚支持一个单端或 LVDS 输入。 (2) PLL2 通过 CLK2 和 CLK3 管脚支持一个单端或 LVDS 输入。 (3) PLL1_OUT 和 PLL2_OUT 支持单端或 LVDS 输出。如果不使用外部时钟输出 , 这些管脚可以作为通用 I/O 管脚。

硬件功能 你可以在逻辑阵列区块(LAB )和输入/输出单元(IOE)级反转 PLL 的时钟输 出 。Cyclone PLL 有许多高级功能,包括时钟倍频和分频、相位偏移、可编程占空比 、 外部时钟输出和控制信号。
时钟倍频和分频 Cyclone PLL 采用 M/(N×后 scale)scale 系数为 PLL 输出端口提供时钟合成输出。 每个 PLL 有一个预 scale 系数(N)和一个乘法系数(M) ,范围从 1 到 32。输入时 钟( fIN) 经由预 scale 计数器 ( N) 分频后产生 PFD 的输入参考时钟 (fREF) 。然 后 fREF 乘以 M 反馈系数。控制环路驱动 VCO 频率匹配 fIN×(M/N)。见下面等式。 fREF=fIN/N fVCO=fREF×M=fIN×(M/N) 每个输出端口有一个唯一的后 scale 计数器降低高频 VCO。有三个后 scale 计数 器(G0、G1 和 E) ,范围从 1 至 32。见下面等式: fC0=fVCO/G0=fIN×(M/(N×G0)) fC1=fVCO/G0=fIN×(M/(N×G1)) fC0=fVCO/E=fIN×(M/(N×E)) c0 和 c1 可以使用两个后 scale 计数器之一,G0 或 G1。 对应有不同频率的多个 PLL 输出,VCO 可以设置为满足 VCO 频率规定输出频率的

最小倍数。然后,后 scale 计数器降低每个 PLL 时钟输出端口的输出频率。例如,如 果时钟输出频率需要从 33 到 66MHz,VCO 可以设置为 330MHz(VCO 范围内的最 小 倍 数) 。 相位偏移 Cyclone PLL 有高级的时钟偏移能力,提供可编程的相位偏移。你可以在 altpll MegaWizard?外挂插件管理器中设置所需的相位偏移,Quartus II 软件会自动设置和 显示最近的有效相位偏移。你可以为每个 PLL 时钟输出端口输入角度、单位时间的 相位偏移。 所有三个 PLL 后 scale 计数器 G0、G1 和 E 以及所有的时钟反馈模式都支 持这种功能。 相位偏移是根据补偿的 PLL 时钟输出进行的。 例如, 你需要 100MHz 输出时钟, 在 c0 上具有 a×1 倍频和+90°相位偏移,在 c1 上具有 a×1 倍频和+45°相位偏移。如 果你选择补偿 c0 时 钟 输出 , PLL 使用零相位偏移 c0 时钟作为参考点在 c0 上生成+90° 的相位偏移。既然 c0 是补偿时钟,那么它相对输入时钟的相位偏移 +90°。c1 时钟 也使用零相位偏移 c0 参考在 c1 上生成+45°的相位偏移。 对于精细的相位调整,每个 PLL 时钟输出计数器可以从多达 8 个相位移位中选 择不同的 VCO 相位,进行精细的相位调整。另外,每个时钟输出计数器使用唯一的 初始化计数设置独立实现相位粗调,步长为一个 VCO 周期。Quartus II 软件可以使 用时钟输出计数器和后 scale 计数器的初始化设置,实现整个输出时钟周期的相位偏 移。你可以把 PLL 时钟输出的相位偏移到 ±180°。Quartus II 软件会根据相位偏移需 求自动设置相位移位和计数器设置。 相位细调精度取决于输入频率和倍频/分频系数(也就是 VCO 周期的函数) ,最 精细的步长等于 VCO 周期的八分之一。 最小的相位偏移是 1/(8×fVCO)或 N/(8×M×fIN)。 在 Cyclone FPGA 中, VCO 范围从 300 到 800MHz 。因此 ,相位偏移 可以按照 1/(8×800MHz)到 1/(8×300MHz)范围的精度进行调整,时间单位是 156 到 417ps。 因为有八个 VCO 相位位移,最大步长为 45°。更小的步长取决于输出时钟端口所需 的倍频和分频比率。决定相位偏移度数的精度是 45°除以后 scale 计数器值。例如, 如果输入时钟为×1 的 125MHz,那么后 scale 计数器 G0 是 3。因此,最小的相位步 长是(45°/3=15°) ,可能的相位偏移值是 15°的倍数。 因为这类的相位偏移对制程、电压和温度变化很不敏感,因此具有最大精度。 可编程占空比 可编程占空比功能允许你设置 PLL 时钟输出的占空比。占空比是时钟输出高 / 低时间和整个时钟周期时间的比率,表示为处于高的时间的比例。Quartus II 软件使 用输入频率和目的倍频 /分频比率来选择后 scale 计数器。占空周期精度由 PLL 时钟 输出选用的后 scale 计数器值决定,定义为 50%除以后 scale 计数器值。例如,如果 后 scale 计数器的值为 3,允许的占空比为 50%除以 3 等于 16.67%。因为 altpll 宏功 能不接受非整数值的占空比值,允许的占空比为 17%、33%、50%和 67%。 由于硬件的限制,你不能实现 84%的占空比,因为对于给定的计数器值你不能

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第36 36页

实现最接近 100%的值。然而,你可以选择 17%的占空比,反转 PLL 时钟输出,从 而实现 84%的占空比。例如,如果 G0 计数器为 10,占空比增量是 5%,范围从 5% 到 90%。 外部时钟输出 每个 PLL 支持通用外部时钟或来源同步发送器一个单端或 LVDS 外部时钟输出。 E 计数器输出驱动 PLL 外部时钟输出(e0) ,它只能馈入 PLL[2..1]_OUT 管脚而不是 内部逻辑。所有三种时钟反馈模式都可以使用 PLL[2..1]_OUT。 100 脚封装的 EP1C3 器件和 144 脚的 EP1C6 PLL2 封装不支持外部时钟输出。 PLL[2..1]_OUT 管脚是两用管脚, 如果 PLL 不使用该管脚, 那么它们可以作为 I/O 管 脚。PLL[2..1]_OUT 管脚支持的 I/O 标准见下表。 表注释: (1) 100 脚 TQFP 封装的 EP1C3 和 144 脚 TQFP 封装的 EP1C6 PLL2 不支持外 部时钟输出 (2) 100 脚 TQFP 封装的 EP1C3 不支持 LVDS 输出 既然 pllena 和 locked 信号可以由通用 I/O 管脚驱动或驱动通用 I/O 管脚, 那么 它 们也支持所有的 Cyclone I/O 标准。 Cyclone 外部时钟输出管脚(PLL[2..1]_OUT)没有独立于器件的 VCC 和 GND 组。PLL[2..1]_OUT 管脚和相邻的 I/O 管脚共享 VCCIO 组。只有同一组内的 I/O 管 脚会影响 PLL[2..1]_OUT 管脚。因此,为了让 PLL[2..1]_OUT 管脚的抖动最小,和 它们直接相邻的 I/O 管脚要么作为输入要么不使用。 有关板子设计的详细信息, 参见 “抖动注意事项”。 Cyclone PLL 管脚支持的 I/O 标准 Cyclone PLL 管脚支持的 I/O 标准 inclk I/O 标准 PLL[2..1]_OUT(1) LVTTL × × LVCMOS × × 2.5-V × × 1.8-V × × 1.5-V × × 3.3-V PCI × × LVDS(2) × × SSTL-2 Class I × × SSTL-2 Class II × × SSTL-3 Class I × × SSTL-3 Class II × ×

控制信号 Cyclone PLL 有四个控制信号 pllena 、areset、prdena 和 locked ,进行 PLL 管 理 。
Pllena

PLL 启动信号 pllena 启动 PLL。当 pllena 为低时,PLL 时钟输出端口为低,PLL 失锁。当 pllena 再次变高,PLL 和重新锁定和重新同步输入时钟。因此,pllena 是 高有效信号。因为在 Cyclone FPGA 中没有专用的 pllena 管脚,内部逻辑或任意通 用 I/O 管脚都可以驱动 pllena 端口。因为每个 PLL 都有自己的 pllena 控制电路或 共享通用的 pllena 电路,这样就很灵活。pllena 信号是可选的,如果软件中没有启 动它,端口内部就连接到 VCC。 Areset PLL areset 信号是每个 PLL 的复位或重新同步输入。但驱动为高时,PLL 计数 器重定,清除 PLL 输出,造成 PLL 失锁。VCO 复位后回到初始设置。当 areset 再次 变低,PLL 重新开始锁定,PLL 重新和输入时钟同步。如果目标 VCO 的频率低于标准 频率,在锁定过程中 PLL 时钟输出起始频率值比所需值要高。 areset 是高有效信号。 Cyclone FPGA 可以从内部逻辑或任意通用 I/O 管脚驱动这个 PLL 输入信号。areset 信号是可选的,如果在软件中没有使用它,该端口内部连接到 GND。 Pfdena pfdena 信号用可编程闸控制着 PLL 中 PFD 输出。 如果你把 areset 置低禁止 PFD, 那么 VCO 将以最后设置的控制电压和频率值工作,长时间会漂移到更低的频率。即 使每个输入时钟 PLL 时钟输出也会继续触发,但是 PLL 可能会失锁。当 PLL 失锁或 输入时钟禁止时,系统会继续运行。因为在一段时间内最后锁定输出频率不会改变, 所以你可以用 pfdena 端口作为关机或清除功能。为了维持这一频率,系统在关机之 前有时间储存当前的设置。如果 pfdena 信号再次变高,PLL 重新锁定和输入时钟重 新同步。因此 pfdena 管脚是高有效信号。你可以用任意通用 I/O 管脚或内部逻辑驱 动 pfdena 输入信号。该信号是可选的,如果在软件没有使用它,该端口内部连接到 VCC。 Locked 当 locked 输出是逻辑高电平,该电平说明稳定的 PLL 时钟输出,和 PLL 参考输 入时钟同相。当 PLL 开始跟踪参考时钟时,locked 端口可能会触发,无需额外电路。 PLL 的 locked 端口可以馈入任意通用 I/O 管脚和/或内部逻辑。这个 locked 信号是 可选的,在监视 PLL 锁定过程中是非常有用的。 时钟反馈模式 Cyclone PLL 支持三种反馈模式:标准、零延迟缓冲和无补偿。和其它 Altera 器 件系列不同,Cyclone PLL 不支持外部反馈模式。所有支持的三种时钟反馈模式允许 倍频/分频、相位偏移和可编程占空比。下面是每种模式的简要说明。 图 115 图 116 所示的相位关系是内定值相位偏移设置-0°。 改变相位偏移设置会 改变相位关系。 标准模式

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第37 37页

在标准模式下,PLL 把参考时钟和逻辑阵列或 IOE 的端口缓存器处的时钟信号 相位对齐,补偿内部全局时钟网络延迟。在 altpll MegaWizard 外挂插件管理器中, 你可以定义 PLL 的哪个内部时钟输出(c0 或 c1)应该补偿。 如果在该模式中使用外部时钟输出( PLL[2..1]_OUT) ,相对于时钟输入管脚有 相位偏移。相同的,如果你用内部 PLL 时钟输出驱动通用 I/O 管脚,相对应的时钟 输入管脚也有相位偏移。

图 116:零延迟缓冲模式下 PLL 时钟之间的相位关系
无补偿 在该模式下,PLL 不补偿任何时钟网络。这样会有更佳的抖动性能,因为反馈 到 PFD 的时钟不经过某些电路。相对 PLL 时钟输入,PLL 内部和外部时钟输出都有 相位偏移。图 117 是无补偿模式下的 PLL 时钟相位关系范例波形。

图 115:标准模式下 PLL 时钟之间的相位关系 图 115 注释: 外部时钟输出可能领先或落后于 PLL 时钟信号 零延迟缓冲模式 PLL 外部时钟输出管脚 (PLL[2..1]_OUT)的时钟信号和 PLL 输入时钟是相位对 齐的,没有延迟。如果你用 c[1..0]端口驱动内部时钟管脚,那么相对于输入时钟管脚 有相位偏移。图 116 是零延迟缓冲模式下 PLL 时钟相位关系的范例波形。

图 117:无补偿模式下的 PLL 时钟相位关系范例波形 图 117 注释: (1) PLL 输出的内部时钟之间相位是对齐的。 管脚 下表是 Cyclone PLL 相关的实体管脚和它们的功能 Cyclone PLL 管脚 管脚名 说明 CLK0 单端或 LVDS p 管脚,可以驱动 PLL1 的 inclk0 端口 CLK1(1) 单端或 LVDS n 管脚,可以驱动 PLL1 的 inclk0 端口 CLK2 单端或 LVDS p 管脚,可以驱动 PLL2 的 inclk0 端口 CLK3(1) 单端或 LVDS n 管脚,可以驱动 PLL2 的 inclk0 端口 PLL1_OUTp ( 2 ) 单端或 LVDS 管脚, 由 PLL1 的 e0 端口驱动。 如果 PLL 不使用 , PLL1_OUTn(2) 可以作为通用 I/O 管脚。 PLL2_OUTp ( 2 ) 单端或 LVDS 管脚, 由 PLL2 的 e0 端口驱动。 如果 PLL 不使用 , PLL2_OUTn(2) 可以作为通用 I/O 管脚。 VCCA_PLL1 (3) PLL1 的模拟电源。即使 PLL 不使用,也必须连接到 1.5V。 GNDA_PLL1(4) PLL1 的模块接地。你可以把该管脚连接到板子的 GND 层。 VCCA_PLL2 (3) PLL2 的模拟电源。即使 PLL 不使用,也必须连接到 1.5V。

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第38 38页

GNDA_PLL2(4) PLL2 的模拟接地。你可以把该管脚连接到板子的 GND 层。 GNDG_PLL1(5) PLL1 的保护环路接地。你可以把该管脚连接到板子的 GND 层 GNDG_PLL2(5) PLL2 的保护环路接地。你可以把该管脚连接到板子的 GND 层 表注释: (1) 100 脚 TQFP 封装的 EP1C3 器件没有专用时钟管脚 CLK1 和 CLK3。 (2) 100 脚 TQFP 封装的 EP1C3 和 144 脚 TQFP 封装的 EP1C6 PLL2 不支持外 部时钟输出。 (3) 参考 16 页的“板子布局”进行滤波和其它推荐设计。 (4) 100 脚 TQFP 封装的 EP1C3 器件和 144 脚 TQFP 封装的 EP1C6 PLL2 没有 分开的 GNDA_PLL 管脚。它们内部连接到 GND。 (5) 保护环路电源(VCCG_PLL)内部连接到 VCCINT。
抖动注意事项 如果输入时钟有任何的低频抖动(低于 PLL 的 频 宽) ,PLL 会试图跟踪它,这样 就会增加 PLL 时钟输出的抖动。为了把这种影响减到最小,避免在同一个 VCCIO 组 中连接有噪声的信号给 PLL 时钟输入缓冲供电。这只有当 PLL 输入时钟指定为 3.3 或 2.5 LVTTL 或 LVCMOS I/O 标准时非常重要。在这些 I/O 标准下,VCCIO 对输入时 钟缓冲供电。因此,VCCIO 供电上的任何噪声都可能影响抖动性能。 对于所有其它 I/O 标准,输入缓冲是由 VCCINT 供电。 因为 Cyclone 外部时钟输出管脚 (PLL[2..1]_OUT) 没有独立的 VCC 和 GND 组 , 所以你应该避免把噪声输出信号直接在和这些管脚相邻。因此,Altera 推荐和 I/O 管 脚相邻的 PLL[2..1]_OUT 要么作为输入管脚要么根本就不用。如果噪声输出临近 PLL[2..1]_OUT 管脚,它们会通过接地弹起或 VCC 下陷和管脚互感应引入噪声,这 样会导致 PLL[2..1]_OUT 管脚更糟糕的抖动性能。 另外, 你应该考虑在同一个 VCCIO 组中像 PLL[2..1]_OUT 这样同时开关的输出数 量。Altera 推荐在同这些 VCCIO 组中同一个方向上同时尽可能少地开关输出。而且, 如果你在同一个 VCCIO 组中有像 PLL[2..1]_OUT 管脚这样的开关输出。Altera 推荐你 在这些输出管脚上使用低电流强度和/或低偏移率选项,这样有助于改善抖动性能。 Cyclone FPGA PLL 规范 下表是 Cyclone FPGA PLL 规范:

tOUT DUTY tJITTER (2) tLOCK

fVCO 300.00 800.00 MHz 1.00 32.00 M、N、G0、 整数 G1、E 表 9 注释: (1) 这些数据仅供参考,是当前的硅芯片特性。 (2) PLL[2..1]_OUT 管脚的 tJITTER 规范取决于 VCCIO 组的 I/O 管脚,多少 个开关输出,它们切换情况,它 们是否使用可编程电流强度或低 偏移率。
Quartus II altpll 宏功能 图 117:Quartus II 软件中的 altpll 宏功能符号

外部输出时钟的占空比(当设置 为 50%) PLL 外部时钟输出抖动 (峰到峰) 从器件配置结束到锁定所需的时 间 PLL 内部 VCO 工作范围 计数器值

45.00

55.00 TBD 100.00

% ps us

10.00

altpll 输入端口 下表是 altpll 宏功能的输入端口以及功能说明。

代 号 fIN fIN DUTY tIN JITTER fOUT

Cyclone PLL 规范(1) 参 数 最 小 15.00 输入频率 40.00 输入时钟占空比 输入时钟抖动(峰到峰) 9.38 PLL 输出频率

最 大 156.00 60.00 200.00 312.00

单 位 MHz % ps MHz

表 10.altpll 宏功能输入端口 端口名 必需 说 明 inclk0 (1) 是 输入时钟端口驱动 PLL。 pllena (2) 否 pllena 是高有效信号,作为 PLL 的组合启动和复位信号。你可 以用它作为一个或两个 PLL 的启动端。当该信号为低时,PLL 时钟输出端输出为 GND,PLL 失锁。一旦信号再次变高,锁定 过程启动, PLL 重新和输入参考时钟同步。 pllena 端口可以由 内部逻辑或任意通用 I/O 管脚驱动。 areset(2) 否 areset 是高有效信号,复位所有的 PLL 计数器为初始值。当该 信号为高时,PLL 复位它的计数器,清除 PLL 输出,失锁。一 旦该信号再次变低,锁定过程启动,PLL 重新和输入参考时钟 同步。areset 端口可以由内部逻辑或任意通用 I/O 管脚驱动。 pfdena (2) 否 pfdena 是高有效信号,它启动升降 PFD 的输出信号。当 pfdena 页 第39 39页

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

为低是,PFD 禁用,而 VCO 继续工作。无论输入时钟是否存 在,PLL 时钟输出继续翻转,但是会有长期偏移。因为在一段 时间内输出时钟频率不会改变, 当可靠的输入不再有效, pfdena 端口作为关机或清除功能。可以由内部逻辑或任意通用 I/O 管 脚驱动 pfdena 端口。 表注释: (1) PLL 的 inclk0 端口必须由专用时钟输入端口。 (2) 详细情况请参考“控制信号”。 altpll 输出端口 下表是 altpll 宏功能的输出端口和功能说明。 表 11.altpll 宏功能的输出端口 端口名 必需 说明 c[1..0](1) 否 PLL 的时钟输出驱动内部全局时钟网络。 e0(1) 否 时钟输出馈入外部时钟输出管脚,PLL[2..1]_OUT。 locked(2) 否 给出 PLL 锁定状态。当 PLL 锁定时,该端口输出逻辑 高。当 PLL 失锁时,该端口输出逻辑低。在 PLL 锁定 过程中锁定端口可能是脉冲高和低。 表注释: (1) 必需选择 PLL 的内部或外部时钟输出。 (2) 详细情况请参见“控制信号”。 下面是使用 Quartus II 的 MegaWizard 实现 PLL 的设计, 在电脑上出现的各种见 面的功能描述表 altpll MegaWizard 外挂插件第一页的选项功能 功 能 说 明 你 可 以 使 用 哪 本应用指南解释所有 Cyclone 器件系列的 altpll 选项。 些器件系列? inclock0 输入的 PLL 输入时钟的频率,inclock0 。 频率是多少 创建 pllena 输入 为这个 PLL 例化创建 pllena 端口。pllena 端口的说明见表 10。 来选 择启动 PLL 创建 areset 输入 为这个 PLL 例化创建 areset 端口。areset 端口的说明见表 10。 来异 步复位 PLL 创 建 pfdean 输 为这个 PLL 例化创建 pfdena 端口。pfdean 端口的说明见表 10。

入来 选 择 启 动 PFD 使用 PLL 内的 反馈路径

哪些 输 出 时 钟 会补偿?

该选项设置 OPERATION_MODE 参数为标准,零延迟缓冲或 无补偿模式。 标准模式下,PLL 反馈路径是全局时钟网络,这样会最小化到 特定 PLL 时钟输出缓存器的时钟延迟。你可以用 OMPENSATE_CLOCK 参数指定补偿哪个 PLL 输出。 零延迟缓冲模式下,PLL 反馈路径是专用 PLL 外部输入管脚。 从 PLL_OUT 管脚输出芯片的时钟信号和 PLL 时钟输入相位是 对齐的,使得时钟输入和外部时钟输出之间的延迟是最小的 。 如果 PLL 也用于驱动内部时钟网络, 那么时钟网络就会有相应 的相位偏移。 无补偿模式下,PLL 反馈路径是 PLL 环路,不是全局时钟网络 或外部来源。没有时钟网络补偿,但是这种模式下时钟的抖动 最小。这种模式可能导致 IOE 缓存器需要正的保持时间,你可 以用手动相位偏移来补偿正保持时间。 详细情况,请参阅“时钟反馈模式”。 指示 PLL 的哪个输出端口被补偿。对于标准模式,你可以选择 c0 或 c1。

altpll MegaWizard 外挂插件第二页的选项 功 能 说 明 创建 “ 锁定 ” 创建锁定输出端口指示 PLL 锁定状态。将表 11 中的锁定端口描 输出 述。 altpll MegaWizard 外挂插件第五页到第七页的选项 功 能 说 明 时钟倍频系数 指定 PLL 输出的时钟倍频量。倍频系数不能大于 32。 (比率) 时钟分频系数 指定 PLL 输出的时钟分频量。 (比率)

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第40 40页

根据要补偿的 PLL 时钟输出,为时钟输出设置可编程的相位偏 移。等式决定了相位偏移角度的精度( 45°除以或 scale 缓存器 的值) 。因此,最大的步长是 45°,步长可能更小,这取决于时 钟输出端口上所需的分频/分频比率。 例如, 如果你的输入时钟是 125MHz×1,或 scale 计数器 G0 是 3。那么最小的相位偏移步长 是 15°,相位偏移是以 15°递增。上升/下降按钮根据内定值 M 和后 scale 分频器决定的可能相位偏移设置来调整,MegaWizard 外挂插件管理器选用它们作为你的目标频率和倍频/分频比率。 如 果你在相位偏移域中手动输入一个数字,可能得到其它的相位偏 移精度。例如,你以覆盖 MegaWizard 选择的值,自己定义为 7.5 ° 。 MegaWizard 外挂 插 件 管 理 器 尝 试 着 用 M=6 和 G0=6 。 MegaWizard 外挂插件管理器尝试着事项最近的可能的相位偏移。 例如,如果你输入 10°,MegaWizard 外挂插件管理器验证 M=5 和 G0=5 是可以实现的,确定相位偏移为 9°。详细情况,请参 见“相位偏移”。 指定 PLL 时钟输出的时钟占空比。等式决定占空比的精度是 (50%除以后 scale 计数器的值) 。例如,如果后 scale 计数器 G0 是 3,那么容许的占空比是 50%除以 3,等于 16.67%。因为 altpll 宏功能不接受非整数值的占空比,那么实际允许的占空比是 17、 33、50 和 67%。由于硬件的限制,84%的占空比是无法实现的, 因为最接近 100%的值是无法在给定计数器值内实现。然而,你 可以选择 17%的占空比,然后反转 PLL 时钟输出。使用上升/下 降按钮选择所有可能的设置。 详细情况,请参见“可编程占空比”。

编译报告 在编译过程中,会显示一些信息说明所需的倍频/分频系数,和/或相位偏移,和 /或占空比是否实现。如果你输入无效的倍频/分频比率,编译失败, Quartus II 软件 显示错误信息。 如果你输入无效的相位偏移或占空比值, 编译会继续处理, Quartus II 软件会选择最佳的替代值。 编译报告的 Resource Section 提供两个 PLL 的 报 告: PLL Summary 和 PLL Usage 报告 。 PLL Summary 提供每个 PLL 参数的信息(见图 118。PLL Summary 是分栏显示,每 栏代表不同的 PLL 例化。表 15 列出并说明 PLL Summary 报告中显示的参数。上表 中没有列出的 PLL 属性不用影响 Cyclone PLL。

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

时钟相位偏移? ? Ph 时钟占空比? ? DC

PLL 属性 PLL 模式 补偿时钟 输入频率 0 标称 VCO 频率

图 118:PLL 总结报告 编译报告文件中的 PLL 总结 说明 时钟反馈模式 指示补偿哪个 PLL 时钟输出(clock0、clock1 或 extclock0 ) inclk0 的时钟输入频率 显示 VCO 频率:f VCO=fIN×M/N

页 第41 41页

最小锁定频率

显示当前 M/N 保证有效 VCO 锁定情况下的最小 PLL 输入时钟频 率 最大锁定频率 显示当前 M/N 保证有效 VCO 锁定情况下的最大 PLL 输入时钟频 率 M值 M 计数器的值 N值 N 计数器的值 PLL Usage 报告显示每个 PLL 时钟输出的明细(见图 119) 。该报告是按照 PLL 时钟输出端口分类的,每行表示设计中使用的不同 PLL 时钟输出。下表按行格式罗 列和说明 PLL Usage 报告中的参数。商标中没有列出的 PLL 参数不会影响 Cyclone PLL。

图 119:PLL 使用情况报告 编译报告文件中的 PLL 使用情况 PLL 参数 说明 Name 指示 PLL 例化的名称和报告的时钟输出 Output 指示该行参数作用的 PLL 时钟输出( clock0 、 clock1 或 extclock0 ) Clock 这是由 MegaWizard 外挂插件管理器(c0、c1、e0)指定的时钟端口 。 Mult 整个倍频率。 Div 整个分频率。 Output 该输出时钟的输出频率。 Frequency Phase Shift 实现相位偏移的角度和时间单位(可能和用户输入的值不同) 。 Duty Cycle 该时钟输出的占空比。 Counter 该时钟输出的后 scale 计数器,哪个计数器( G0、G1、E0)馈入时 钟输出。 Counter 后 scale 计数器的值。 Value High/Low 计数器值中的高和低时间数目。高和低数目的比率就直接反映为占 空比。 Intial 后 scale 计数器的初始值(相位偏移的粗调) 。 VCO Tap VCO 移位范围从 0 到 7(以 VCO 周期的 1/8 单位对相位偏移进行细 调) 。 每个驱动逻辑阵列的 PLL 时钟输出的缓存器到缓存器时序用冗余量表示。报告

文件的时序分析部分为每个 PLL 时钟输出提供冗余量信息。 你可以从冗余量报告中获得 fMAX 值。在冗余量报告窗口中的 Actual Maximum P2P 时序中按照 List Path 指令给出微参数 t CO ,tSU 和路径延迟。你可以把它们相加, 转换为该路径的 fMAX。见下面等式: f MAX = 1/(<register to register delay>-<clock skew delay>+<micro setup delay>+<micro clock to output delay>) 在对采用 PLL 的 Cyclone 设计进行时序分析过程中, 项目的时钟设置会覆盖 PLL 输入时钟频率和占空比设置。所以下面的情况非常重要。 ●在编译报告中会警告项目时钟设置覆盖了 PLL 时钟设置 ● 对于时序驱动编译,项目时钟设置覆盖 PLL 时钟设置。当你用时序驱动编 译设计时,你可以更严格地限制设计这样可以给你一个更佳的 f MAX 能。 例如,如 果 PLL 设置输出为 150MHz 时钟,你可以将项目时钟设置为 170MHz,这样装配器 会尽量时序 170MHz 的性能。 ● 编译器检查 PLL 锁定频率的范围。如果项目时钟设置指定的频率在可锁定 的频率范围之外,PLL 时钟设置就不会被覆盖。 ● 覆盖 PLL 时钟设置只会改变时序需求,不会改变 PLL 每个时钟输出的整个 倍频 / 分频和相位延迟。 MegaWizard 外挂插件管理器不使用项目时钟设 置决定 altpll 参数。 ● 在没有重新编译你的设计情况下进行时序分析不会改变编程文件。你必须 重新编译你的设计更新编程文件。 ● 内定所需的 fMAX 设置不会覆盖 PLL 时钟设置。只有独立的时钟设置会覆盖 PLL 时钟设置。 当你配置 Cyclone 器件,想看看当你输入 PLL 一个和指定 PLL 参数不同的输入 时钟时序要求是否满足,这种能力是非常有用的。因此,该功能允许你覆盖 PLL 输 入时钟频率设置进行时序分析,意味着你不必重新合成或重新适配你的设计。以下 过程允许你覆盖 PLL 输入频率设置,重新产生时序分析。 1. 选择 Timing Settings(Project Menu) 。 2. 点选 Clock Setting 标签。 3. 在 Specify circuit frequency as 下,选择 Settings for individual clock signals 。 4. 点选 New。 5. 在 New Clock Settings 对话方框中,在 Clock settings 对话方框中为新的时钟 设置输入一个名字。 6. 如果你想为一个绝对时钟指定一个时序要求。按下面的步骤操作。 a. 在 Relationship to other clock settings 下,选择 Independent of other clock settings。 b. 在 Required fMAX 框中,输入时钟信号所需的频率(fMAX) ,从列表中选择 一个时间单位。

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第42 42页

c. 在 Duty Cycle 列表中,指定时钟所需的占空比。 ● Cyclone PLL 接受 40-60%之间的占空比 d. 如果你想在计算 fMAX 时包括器件管脚进出的外部延迟,选择 Include external delays to and from device pins in fMAX calculations 。 e. 点选 OK。 7. 点选 OK 关闭时序设置窗口。 8. 打开 Assignment Organizer 对话方框(Tools 菜 单 ) 。 9、点选 By Node 标签。 10. 在 Mode 下,选择 Edit Specific entity & node settings for。 11. 如果需要的话, 用 Node Finder 对话框中复制指定的 PLL 输入时钟管脚名字 到 Name 框中。 12. 在 Assignment Categories 下,点选 Timing 旁边的+按钮。 13. 点选 Click here to add a new assignment。 14. 在 Assignment 下,选择 Name 列表下的 Clock Settings ,选择第五步中你创 建的时钟设置的名字。 15. 在 Stored in assignments for 下,选择 This instance only, This instance in all occurrences of it parent entity, or Other 。 16. 点选 Add 。 17. 点选 OK 或 Apply。 18. 选择 Start Timing Analysis(Processing 菜单) 仿 真

特 性 pllena areset pfdena

locked

Cyclone FPGA 支持 altpll 仿真 仿 真 支 持 pllena 信号是可仿真的。当该信号为低时,PLL 失锁,PLL 时钟输出 为逻辑低。 areset 信号是可仿真的。当该信号为高时,PLL 失锁,PLL 时钟输出 为逻辑低。PLL 时钟输出的频率过冲是无法仿真的。 pfdena 控制信号是可仿真的。当该信号为低时,PLL 的锁定输出无 定义,PLL 时钟输出继续以最后设置的频率翻转。VCO 有限的频率 长期偏移是无法仿真的。 locked 信号只在大频宽情况下是可以仿真的。 在仿真过程中 PLL 在2 到 10 个周期内锁定或重新锁定,不必反映真实的锁定时间。
如果 PLL 的输入频率在仿真中发生变化,模型会检查 fIN×(M/N) 是否在 VCO 频率范围之内,如果在 VCO 操作范围之外就会失锁。 抖动在仿真中无法仿真。

频率 输 入 变化 抖动

altpll 宏功能支持 Quartus II 软件和其它第三方仿真工具中进行行为和时序仿真。 你可以仿真 PLL 所有数字方面的特性,无法仿真模拟特性。仿真支持所有的控制信 号和时钟输出。 下表说明 altpll 支持的仿真。 你可以使用 altpll 行为级模型来仿真 Cyclone PLL。Cyclone 行为模型例化必须遵 循和设计一样的规则和限制。altpll 行为和时间模型不能仿真抖动、锁定时间或 VCO 偏移。 altpll 的行为模型存放在 \quartus\eda\sim_lib 目录下。ALTERA_MF.VHD 包括了 VHDL 行为模型,可用于例化 altpll 的 Cyclone 设计。ALTERA_MF.v 包括了 Verilog HDL 行为模型。行为模型不会进行参数差错检查,你必须指定有效的值。 u● 你必须把仿真器的精度设置到皮秒级(ps) ,才能正确地仿真这个模型。更 大的精度会在计算中舍去,造成不正确的结果。

全局时钟网络 Cyclone FPGA 有八个全局时钟网络。四个专用时钟输入管脚(CLK[3..0] ) ,八 个两用时钟管脚(DPCLK[7..0] ) , PLL 时钟输出可以驱动全局时钟网络。另外,内 部产生全局时钟和异步清除的内部逻辑,时钟启动或其它具有大扇出的控制信号都 可以驱动全局时钟网络。 组成全局时钟网络的八个全局时钟线驱动整个器件。你可以用全局时钟网络作 为所有器件资源的时钟来源,包括 IOE、逻辑单元(LE)和内存区块。你也可以用 全局时钟来源作为控制信号,如时钟启动和外部管脚送入的同步或异步清除。 图 120 是全局时钟网络资源。 图 120 注释: (1) EP1C3 器件只包括 PLL1 。 (2) 100 脚 TQFP 封装的 EP1C3 器件没有专用时钟管脚 CLK1 和 CLK3。 (3) 100 脚 TQFP 封装的 EP1C3 器件和七个 DPCLK 管脚。详细情况,请参阅 “两用时钟 I/O 管脚”。

图 120:全局时钟的产生

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第43 43页

部内存接口的 DQS 信号) 。 这些管脚也可以作为通用 I/O 管脚, 意味着它们可能是输 入、输出或双向管脚。下表说明哪些两用时钟管脚驱动 Cyclone FPGA 中的哪些全局 时钟网络。 I/O 时钟输入 管脚 GCLK0 GCLK1 GCLK2 GCLK3 GCLK4 GCLK5 GCLK6 GCLK7

DPCLK0 DPCLK11 DPCLK2 DPCLK3 DPCLK4 DPCLK5 Cyclone FPGA 有多达四个专用时钟输入管脚(CLK[3..0]) ,左右两 边 各 两个。 你可以用 CLK[3..0]管脚驱动 PLL,或直接驱动全局时钟网络。下表说明哪个时钟管 脚驱动哪个全局时钟网络。 表时钟管脚驱动哪个全局时钟网络 时钟输 入管脚 GCLK0 GCLK1 GCLK2 GCLK3 GCLK4 GCLK5 GCLK6 GCLK7 DPCLK6 DPCLK7 × × ×

×

× × × ×

表注释: (1) EP1C3 器件没有 DPCLK1。

CLK0 × × CLK11 × × CLK2 × × CLK31 × × 表注释: (1) 100 脚 TQFP 封装的 EP1C3 器件没有专用的时钟管脚 CLK1 和 CLK3。 I/O Cyclone FPGA 可以有多达八个两用时钟管脚。DPCLK[7..0](每边两个) 。这些 两用管脚可连接的全局时钟网络。你可以用 DPCLK[7..0] 管脚作为高扇出控制信号, 如异步清除、预置,时钟启动或协议控制信号(例如 PCI 的 TRDY 和 IRDY,或外
Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第44 44页

哪些组合来源驱动哪些全局时钟网络 来源 GCLK0 GCLK1 GCLK2 GCLK3 GCLK4 GCLK5 GCLK6 GCLK7

PLL1 G0 × × PLL1 G1 × × PLL2G01 × × PLL2G11 × × 专 用 CLK0 × × 时 钟 CLK12 × × 输 入 CLK2 × × 管脚 CLK32 × × DPCLK0 两用 × 时 钟 DPCLK13) × 管脚 DPCLK2 × DPCLK3 × DPCLK4 × DPCLK5 × DPCLK6 × DPCLK7 × 表注释: (1) EP1C3 器件只有 PLL1。 (2) 100 脚的 TQFP 封装的 EP1C3 器件没有专用时钟管脚 CLK1 和 CLK3。 (3) EP1C3 器件没有 DPCLK1。 在 Cyclone FPGA 中,有八个独立的专用全局时钟网络。这些时钟通过复用器形 成 6 位总线驱动 LAB 行时钟,列 IOE 时钟或行 IOE 时钟(见图 121) 。另一个复用 器用于 LAB 级选择六个行时钟其中两个输入 LAB 中的 LE 缓存器。 IOE 时钟有水平(行)和垂直(列)块区域,它们由从八个全局时钟来源中选 择的六个 I/O 时钟信号驱动。图 122 是 I/O 时钟区域。 Cyclone PLL 具有重要的功能,为成本敏感的时钟合成应用提供了如 M/(N×后 scale 系数)倍频/分频、 相位偏移和可编程占空比等特性。 器件内时钟延迟的减小和时 钟偏移的消除改善了设计的速度。 Cyclone PLL 特性使得器件的内部逻辑运行速度比 输入时钟频率更快,简化了板子设计。 PLL 计数 器输 出

图 121:全局时钟网络复用器

图 122:I/O 时钟区

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第45 45页

6、FPGA 器件的双向口设计
一、这是一个双向端口的代码 我总共定义了 7 个双向端口,为了方便赋值,我定义了自己的类型 type LINKBUS is array (7 downto 1) of std_logic_vector(7 downto 0); --Gary add 使用的 package 方式,可以综合的时候出错, 把 package 放到另外一个文件夹中好像也不行的: (请问各位大侠 有没有好的解决方 法? Error (10482): VHDL error at BidirPort.vhd(15): object "std_logic" is used but not declared 代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; package MyDef is type LINKBUS is array (7 downto 1) of std_logic_vector(7 downto 0);--Gary add end MyDef; use work.MyDef.all; entity BidirPort is port( Dir : in std_logic; Sel : in std_logic_vector(2 downto 0); Dbus : inout std_logic_vector(7 downto 0); Din : in LINKBUS; Dout : out LINKBUS ); end BidirPort; architecture BidirPort_a of BidirPort is begin process( Sel,Dbus,Dir,Din) begin if (Dir = '1') then -- Dbus out if (Sel = "000") then for n in 1 to 7 loop Dout(n)<= Dbus; end loop; elsif(Sel <= "111") then Dout(CONV_INTEGER(Sel)) <= Dbus; end if;

Dbus <= (others => 'Z'); else if (Sel >= "001" and Sel <= "111") then Dbus <= Din(CONV_INTEGER(Sel)); end if; for n in 1 to 7 loop Dout(n) <= (others => 'Z'); end loop; end if; end process; end BidirPort_a; 二、FPGA 中双向端口的设计问题 (来自老古网站) 在工程应用中,双向电路是设计者不得不面对的问题.在实际应用中,数据总线往 往是双向的.如何正确处理数据总线是进行时序逻辑电路设计的基础.在程序设计过 程中,关键技术在于:实体部分必须对端口属性进行申明,端口属性必须为 inout 类型, 在构造体需要对输出信号进行有条件的高阻控制.在双向电路的处理问题上,常用的 处理方式有两种,在介绍双向电路的处理方式之前,先看看双向电路的基本格式: ENTITY bidir_pin IS ( bidir : INOUT std_logic; oe, clk, from_core : IN std_logic; to_core : OUT std_logic; …… END bidir_pin; ARCHITECTURE behavior OF bidir_pin IS BEGIN bidir <= from_core WHEN oe=‘1’ ELSE “ZZZZ”; to_core <= bidir; END behavior; 该程序揭示了双向电路的处理技巧,首先在实体部分 bidir 属于双向信号,在端口定义 时,端口属性为 inout 类型,即把 bidir 信号作为输入三态输出. 语 句 “bidir <= from_core WHEN oe=‘1’ ELSE “ZZZZ”;”表示 bidir 信号三态输出,语句”to_core <= bidir;” 把 bidir 信号作为输入信号. 由此可见,双向电路在程序设计中,didir 输入当着普通的 in 类型,而在输出时,需要加 一定的控制条件,三态输出.问题的关键在于:如何确定这个条件? 1)双向信号作一个信号的输入,作另一信号的输出 ENTITY bidir IS PORT( bidir : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0); oe, clk : IN STD_LOGIC;

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第46 46页

from_core : IN STD_LOGIC_VECTOR (7 DOWNTO 0); to_core : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END bidir; ARCHITECTURE logic OF bidir IS SIGNAL a : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL b : STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN PROCESS (clk) BEGIN IF clk = ''1'' AND clk''EVENT THEN a <= from_core; to_core <= b; END IF; END PROCESS; PROCESS (oe, bidir) BEGIN IF( oe = ''0'') THEN bidir <= "ZZZZZZZZ"; b <= bidir; ELSE bidir <= a; b <= bidir; END IF; END PROCESS; END logic; 这种设计方式叫做寄存双向信号的方法.本设计中 bidir 为双向信号,from_core 为 数据输入端,to_core 为数据输出端,oe 为三态输出使能,clk 为读写数据的时钟.在程序 设计中,需要定义两个 signal a 和 b 信号.a 信号用于输入数据 from_core 的寄存器,b 用 于输出数据 to_core 的寄存器.采用寄存器的方法需要设计两个进程,一个进程把 a,b 信 号在时钟的控制下负责端口的输入信号 from_core 和端口输出信号 to_core 的连接,这 一步实现了寄存双向的功能.另外一个进程则负责信号 a,b 和双向口之间的赋值关系. 本设计只揭示了简单的双向信号操作方式,即 bidir 既可以作为 from_core 的输出,又可 以作为 to_core 的输入 2)双向信号既做输出又做输出 上例是最简单的双向信号应用的特例.在实际的工程中,双向信号既做信号的输 入,又做信号的输出,常见的数据总线就是这种操作模式. library IEEE; use IEEE.STD_LOGIC_1164.all; entity dir_data is

port( clk : in STD_LOGIC; rst : in STD_LOGIC; rw : in STD_LOGIC; address : in STD_LOGIC_VECTOR(1 downto 0); data : inout STD_LOGIC_VECTOR(7 downto 0) ); end dir_data; architecture arc_dir of dir_data is signal data_in : STD_LOGIC_VECTOR(7 downto 0); signal data_out: STD_LOGIC_VECTOR(7 downto 0); signal reg_a: STD_LOGIC_VECTOR(7 downto 0); signal reg_b: STD_LOGIC_VECTOR(7 downto 0); begin data_in<=data; d1:process(clk,rst,rw) begin if rst=''1'' then reg_a<= (others=>''0''); reg_b<= (others=>''0''); elsif clk''event and clk=''1'' then if rw=''1'' then if address="00" then reg_a<=data_in; elsif address="01" then reg_b<=data_in; else null; end if; else null; end if; else null; end if; end process d1; d2:process(clk,rw,reg_a,reg_b) begin if clk''event and clk=''1'' then if rw=''0'' then if address="00" then data_out<=reg_a; elsif address="01" then data_out<=reg_b; else null;

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第47 47页

end if; else null; end if; else null; end if; end process d2; data<=data_out when (rw=''0'' and address(1)=''0'') else (others=>''Z''); end arc_dir; 在程序设计中,首先需要定义 data_in, data_out, reg_a, reg_b 四个 signal,我们把 data_in 叫做输入寄存器,它是从双向信号 data 接收数据的寄存器,data_out 叫做输出寄 存器,它是向双向信号 data 发送信号的寄存器,reg_a 和 reg_b 叫做操作寄存器,它们是 在一定的时序控制下把 data_in 数据送给 reg_a,reg_b,在一定的时序控制下从 reg_a 和 reg_b 读出数据的. 这样的处理方式必须有两个进程,因为在 architecture arc_dir of dir_data is 和 begin 之间定义了 data_in, data_out, reg_a, reg_b 四个 signal,它在同一进程内不支持既赋值, 又调用,也就是说它不支持在 d1 进程中对信号 reg_a, reg_b 赋值,又在 d1 进程中又调 用 reg_a, reg_b. 首先有语句”data_in<=data;”它表示输入寄存器无条件的接收双先信号的数据. 在 d1 进程中,首先在 rst 信号有效时,对操作寄存器 reg_a,和 reg_b 进行清零操作,然后 在时钟(clk) 的控制下,在写(rw)信号有效的情况下,对 reg_a, reg_b 寄存器在不同的地址 控制下写入不同的 data_in 值.在 d2 进程中,在时钟(clk) 的控制下,在读(rw) 信号有效的 时候,把不同地址的 reg_a, reg_b 的值送进 data_out 中. 最关键的是最后一句:“data<=data_out when (rw=''0'' and address(1)=''0'') else (others=>''Z'');”它表示双向信号的三态输出,而最最关键的是 when 后面的条件,如果 条件限制太宽,就会错误占用双向信号总线,引起总线的误操作,如果条件限制太窄,输 出寄存器的数据就不能够正确的送到数据总线上去,会引起数据的丢失.也就是说,只 有正确的限制了 when 语句后面的条件,才能够把输出寄存器的数据正确地送到数据 总线上去.仔细查看此条件,有如下的规律:when 语句后的条件是操作寄存器写入输出 寄存器的条件的公共条件.比如:rw=’0’是操作寄存器的数据写入输出寄存器的读使 能信号,address(1) 是地址线的公共部分.在实际工程应用中,需要设计者在分配地址总 线的时候掌握一定的技巧,尽量从地址的低位到到高位,保证地址总线有更多位的公 共部分,比如只对四个寄存器操作时,地址线分配为”100”,”010”,”110”,”001” 是不科学的,而”000”,”001”,”010”和”011”则是理想的.两者不同的是前者地 址线没有公共部分,这样的设计无法用 when 语句对条件进行直接的控制,如果置之不 理,由于列举不全,在逻辑综合时,电路会利用器件的乘积项和查找表的资源形成一个

Latch, Latch 不仅会把电路的时序变得复杂,而且电路存在潜在的危险性.虽然 when 语 句后的条件不能够对条件进行直接的控制,但是可以使用枚举法一一把用到的地址线 罗列出来,表示只有在这样的地址线的情况下才会用到数据总线,否则其他状态对数 据总线送高阻,表示不占用数据总线. 总而言之,双向信号是程序设计中尤其重要的基础,设计者在设计程序的时候,要 尤其注意,何时会占用数据总线,何时不占用数据总线. 三、MC8051 的 IO 口如何设置为具有双向的功能 MC8051 的 IO 口如何设置为具有双向的功能呢?很多朋友问这个问题,也没人 回答,我以前自己玩 8051core 的时候也问别人,最后还是天天请别人吃饭才学到了。 如果你知道 Open Drain (这是有幸认识了台湾 OTI 的设计师 Nash 后,他告诉我 的) 漏极开路输出,用法同等 OC 射极输出。如果作为图腾输出必须接上拉电阻。 接容性负载时下降延是芯片内的晶体管是有源驱动速度较快,上升延是无源的外接 电阻速度慢,如果要求速度高电阻选择要小,功耗会大。所以负载电阻的选择要兼 顾功耗和速度。 其实 io 口这样用: assign io_in = rd ? io : 1'bz; //用 always 比较好,我这里是为了方便 assign io = wr ? data_reg:1'bz data_reg 在别的地方被赋值就可以了 这样就实现了双向 IO 口的读和写了。 让很多人搞不清楚的地方就是自己想得 太复杂了 @@@@@@@ 请问 open drain 的 i/o 的用法。是不是 open drain 只可以输出 L, 要输出 H 的时候就一定需要上拉电阻?请教 @@@@@@@OPEN DRAIN 输出只能做输出口,当外部无上拉电阻时,该口为 高阻状态。只有外部有上拉电阻时,才有可能输出高或低的电平。 @@@@@@@OPEN DRAIN 输出只能做输出口,当外部无上拉电阻时,该口为 高阻状态。只有外部有上拉电阻时,才有可能输出高或低的电平。 @@@@@@@ 为什么加了上拉电阻,才可能输出高低电平呢?请教原理. @@@@@@@ 当外部无上拉电阻时,该口不能输出高电平,应该可以输出低电 平。如果接上拉电阻,则可以实现高低电平输出 。 @@@@@@@ 楼上的说的正确, “可以输出低电平。如果接上拉电阻,则可以 实现高电平输出 ”。 @@@@@@@ 漏极开路输出,用法同等 OC 射极输出。如果作为图腾输出必须 接上拉电阻。接容性负载时下降延是芯片内的晶体管是有源驱动速度较快,上升延 是无源的外接电阻速度慢,如果要求速度高电阻选择要小,功耗会大。所以负载电 阻的选择要兼顾功耗和速度。

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第48 48页

7、HEX 格式介绍及分析程序
用 Keil C51 编程时,可以自动生成 Intel HEX 格式的程序文件。Intel HEX 文件通常 由若干个记录组成,每个记录都具有如下的形式: :llaaaattdd...ddcc 其中: 开头的冒号“:”是记录起始标志。 “ll”是记录的有效数据长度。 “aaaa”是装入地址。 “tt”是记录类型。00 表示数据记录,01 表示结束。 “dd...dd ”是记录中的有效数据。数据个数必须与“ll”一致。 “cc”校验和。将它的值与记录中所有字节(冒号“:”除外)内容相加,其结 果应为 00,否则出错。 举例: 某行记录的内容是“:05012000B5412B215543”,则数据长度 ll 是 05H,装入地 址是 0120H,记录类型是数据记录,有效数据是 B5H、41H、2BH、21H、55H,校 验和为 43H。 在文件的最后一行,总是“:00000001FF”,表示无任何有效数据,装入地址为 0000H(没有用处) ,记录类型为 01H,表示结束,校验和当然是 FFH 了。 以下是一个分析 Intel HEX 记录的简单程序: /* IntelHEX.h 分析处理 Intel HEX 格式记录的头文件 */ #ifndef _INTEL_HEX_H_ #define _INTEL_HEX_H_ #include <ctype.h> #include <string.h> //定义 Intel HEX 记录的结构 struct { unsigned char ll; //长度 unsigned int aaaa; //地址

unsigned char tt; char dd[16]; char cc; }IntelHEX;

//记录类型,0-数据,1-终止 //数据 //校验和

/* 函数:AnalyseHEX() 功能:分析一条 HEX 记录(把 Intel HEX 记录的文本转换成 IntelHEX 结构) 参数: hex[] 是记录的文本一行内容 转换后的结果保存在 IntelHEX 结构中 返回: 0-转换成功 1-HEX 记录文本中有错误 */ bit AnalyseHEX(char hex[]) { unsigned char i; unsigned char j; unsigned char t; unsigned char n; unsigned char cc; unsigned int x; //检查冒号 if ( hex[0] != ':' ) return 1; //检查长度 t = (toint(hex[1])<<4) + toint(hex[2]); if ( t > 16 ) return 1; n = 2 * t + 11; if ( n != strlen(hex) ) return 1; IntelHEX.ll = t; cc = t; //提取地址 t = (toint(hex[3])<<4) + toint(hex[4]); cc += t; x = (unsigned int)t; x <<= 8; t = (toint(hex[5])<<4) + toint(hex[6]); cc += t; x += (unsigned int)t;

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第49 49页

IntelHEX.aaaa = x; //提取记录类型 t = (toint(hex[7])<<4) + toint(hex[8]); if ( (t==0) || (t==1) ) { cc += t; IntelHEX.tt = t; } else { return 1; } //提取数据 i = 9; if ( t == 0 ) { j = 0; n = IntelHEX.ll; do { t = (toint(hex[i++])<<4); t += toint(hex[i++]); cc += t; IntelHEX.dd[j++] = t; } while ( --n != 0 ); } //提取校验和 t = (toint(hex[i++])<<4); t += toint(hex[i++]); cc += t; IntelHEX.dd[j++] = t; //检查校验 if ( cc == 0 ) return 0; else return 1; }

Quartus II 的 FPGA 设计手册--------王兴权(030320122)2007 年 4 月 桂林电子科技大学计算机与控制学院(自动化专业)-------- 用喜悦振奋精神,用成绩增添信心!

页 第50 50页


相关文章:
Quartus_II使用教程-完整实例.doc
Quartus_II使用教程-完整实例_信息与通信_工程科技_专业资料。Quartus II 的入门教程,通过一个verilog程序实例进行介绍。 Quartus Ⅱ入门教程(一个 Verilog 程序的...
Quartus简介_图文.doc
Quartus简介 - 第 3 章 QuartusⅡ使用入门 3.1 QuartusⅡ简介 QuartusⅡ可编程逻辑开发软件是 Altera 公司为其 FPGA/CPLD 芯片设计的集成化专用...
第2章 Quartus II器件编程和管脚锁定_图文.ppt
编程模式 Quartus的编程器 的编程器Programmer主要支持四种编程模
QuartusII操作入门全加器设计.doc
QuartusII操作入门全加器设计_电子/电路_工程科技_专业资料。QuartusII操作的基本要点,以全加器设计为例 实验1 QuartusII 操作入门全加器设计友情提示: ...
Quartus II教程_图文.doc
Quartus II教程 - 详细讲解Quartus II的使用。... Quartus II教程_工学_高等教育_教育专区。详细讲解Quartus II的使用。 第3 章 Altera Quartus II 软件开发向导基...
FPGA教程--QuartusII入门指南.doc
FPGA教程--QuartusII入门指南 - 第一讲:QUARTUS II 安
在Quartus中调用Modelsim进行仿真.doc
Quartus中调用Modelsim进行仿真 - 在 QuartusⅡ中调用 ModelSim 进行仿真 Quartus Ⅱ版本:Quartus Ⅱ10.0 (32-bit);安装路径为 D:...
quartus ii 常见的19个错误、28个警告.doc
quartus ii 常见的19个错误、28个警告_信息与通信_工程科技_专业资
QuartusII及USB Blaster下载器驱动安装说明_图文.pdf
Quartus II 及 USB Blaster 下载器驱动安装说明张慧勇 Quartus II 安装 1、单击 quartus 安装文件夹下的 install.exe 文件开始安装,出现如下界面 2、单击第一选项...
Quartus II简介(中文).pdf
? Altera Corporation 101 Innovation Drive San Jose, CA 95134 (408) 544-7000 www.altera.com Quartus II 简介 版本 5.0 第一次修订 2005 年 4 月 P25-...
使用QUARTUS II做开发全流程,傻瓜式详细教程_图文.pdf
使用QUARTUS II做开发全流程,傻瓜式详细教程 - 东理电子 Easy-FPGA开发板 QUARTUS II开发流程 1:打开 QuartusII 软件 2:如果下图所视,新建一个工程。...
Quartus II FPGA烧写教程.doc
中的方法.[Quartus II] 在 Quartus II 中使用 JTAG 模式固化程序到 EPCS 中的方法范例流水灯 图 1 流水灯范例 实现步骤步骤 1: :在 Quartus II 中,单击 ...
Quartus II 中常见Warning 及解决方法(转载).txt
Quartus II 中常见Warning 及解决方法(转载) - 支持原版!本
Quartus_II_时钟约束.doc
Quartus_II_时钟约束 - QuartusII 时钟约束 时钟约束(Cl
Quartus中生成MIF.doc
Quartus中生成MIF - Quartus中需要调用宏功能模块,有些存储区r
Quartus II 入门.doc
Quartus II 入门 - Quartus II 入门 (以一个简单选择器为
第二章 SOPC开发流程及Quartus II的使用_图文.ppt
第二章 SOPC开发流程及 Quartus II的使用 2.1 2.2 2.3 2.4 2.5 2.6 2.7 SOPC开发流程和开发工具 Quartus II操作基础 SOPC硬件开发实例 创建Nios II 系统...
Quartus ii 11.1安装教程_图文.doc
Quartus ii 11.1安装教程 - 首先,把你的文件解压,这里详述。需要
Quartus常见错误说明.doc
Quartus常见错误说明_计算机软件及应用_IT/计算机_专业资料。Quartus的使用注意事项,出错提示 quartus 的功能仿真出错怎么办 Error: Run Generate Functional Simulation ...
如何在quartusII中调用modelsim-altera.doc
如何在quartusII中调用modelsim-altera - 1 Alter
更多相关标签: