Quartus-II中FPGA管脚的分配策略
- 格式:docx
- 大小:1.88 MB
- 文档页数:14
Quartus II常见问题集锦1、【问题】Pin Planner 的使用问题:在QuartusII 7.2 ,时序仿真都通过,但是,一旦使用Pin Planner设定引脚后,时序仿真就发生变化,与功能仿真结果不一致,不是理想的结果。
使用Pin Planner时要注意些什么问题呢?【解答】如果在没有设定引脚时就进行时序仿真,那么在后仿真就会不准确。
因为当设定引脚以后,需要重新进行布局布线,这和没有设定引脚是不同的,因此,布线的改变自然会影响到时序的改变。
通常的做法是:先做好所有的设定,生成网表文件和延时文件,再加上激励文件进行仿真,这个时候的仿真结果是最接近实际情况的。
通常的pin设定没有特定要求,差分信号是成对的。
所以请不要搞错。
时钟信号尽量使用专用的时钟引脚;普通I/O没有什么限制,做好时序约束就可以了。
2、【问题】怎样配置cyclone FPGA的管脚功能?【解答】FPGA芯片的引脚分为好多类,有通用IO,有时钟网络,有复位网络,这些引脚的具体功能是在布线时由用户选择的。
你可以自由的配置这些引脚的功能,但最好根据芯片的数据手册进行选择,如将时钟配置到专用时钟引脚上,将复位配置到专用复位引脚上,否则会影响最终的布线结果。
3、【问题】分配fpga管脚时该怎么选择,引脚有什么属性需要考虑,quartus2中引脚有几个属性:Reserved,Group,I/O Bank,Vref Group,I/O standard( 3.3-V LVTTL(default) )分别是什么意思,要怎么设置?【解答】首先说IO standard:这个是用于支持对应不同的电平标准。
FPGA IO 口的电压由IO bank上的VCC引入。
一个bank上引入3.3V TTL电平,那么此时整个bank上输出3.3V的TTL电平。
设置这个第一是为了和current strength 一起计算功率。
第二个是用于在IO口上加载正确的上拉/下拉电阻。
FPGA是基于SRAM编程的,编程信息在系统掉电时会丢失,每次上电时,都需要从器件外部的FLASH或EEPROM中存储的编程数据重现写入内部的SRAM中。
FPGA在线加载需要有CPU的帮助,并且在加载前CPU已经启动并工作。
FPGA的加载模式主要有以下几种:1). PS 模式(P assive Serial Con figuration Mode)即被动串行加载模式。
PS模式适合于逻辑规模小,对加载速度要求不高的FPGA加载场合。
在此模式下,加载所需的配置时钟信号CCLK由FPGA外部时钟源或外部控制信号提供。
另外,PS加载模式需要外部微控制器的支持。
2).AS 模式(Active Serial Con figuration Mode),即主动串行加载模式。
在AS模式下,FPGA主动从外部存储设备中读取逻辑信息来为自己进行配置,此模式的配置时钟信号CCLK由FPGA内部提供。
3).PP 模式(Passive Parallel Configuration Mode,即被动并行加载模式。
此模式适合于逻辑规模较大,对加载速度要求较高的FPGA加载场合。
PP模式下,外部设备通过8bit并行数据线对FPGA进行逻辑加载,QCLK信号由外部提供。
4).BS 模式(Bou ndary Sca n Con figuratio n Mode),即边界扫描加载模式。
也就是我们通常所说的JTAG加载模式。
所有的FPGA芯片都有三个或四个加载模式配置管脚,通过配置MESL[0..3]来选取不同的加载模式。
首先来介绍下PS加载模式,各个厂商FPGA产品的PS加载端口定义存在一些差异,目前主流的三个FPGA厂商Altera, Xilinx,Lattice的PS加载方式进行一一介绍。
Altera公司的FPGA产品PS加载接口如下图所示。
nSTATUS1).C0NFIG_D0NE :加载完成指示输出信号,I/O接口,高有效,实际使用中通过4.7K电阻上拉到VCC,使其默认状态为高电平,表示芯片已加载完毕,当FPGA正在加载时,会将其驱动为低电平。
二、管脚分配方法FPGA 的管脚分配,除了在QII软件中,选择“Assignments ->Pin”标签(或者点击按钮),打开Pin Planner,分配管脚外,还有以下2种方法。
方法一:Import Assignments步骤1:使用记事本或类似软件新建一个txt文件(或csv文件),按如下格式编写管脚分配内容(不同的开发版,其内容也不同,本文以我使用的DIY_DE2开发板为范例)。
【这种方式格式最为简单】注意:To和Location两个关键字中间有一个半角逗号。
图1 pin.txt步骤2:在QII软件中,选择“Assignments -> Import Assignments”。
如图所示,导入xxx.txt或者xxx.csv文件即可图2 导入pin.txt步骤3:在QII软件中,选择“Assignments -> Pin”标签(或者点击按钮),打开Pin Planner,验证管脚是否分配正确。
图3 验证管脚是否分配正确方法二:导入source xxx.tcl文件步骤1:在QII软件中,使用“Assignments -> Remove Assignments”标签,移除管脚分配内容,以确保此次操作,分配的管脚没有因为覆盖而出现错误的情况。
图4 Remove Assignments注:在未执行任何管脚分配操作新工程中,可跳过步骤1。
步骤2:使用记事本或类似软件新建一个tcl文件,按如下格式编写管脚分配内容(不同的开发版,其内容也不同,本文以我使用的DIY_DE2开发板为范例)。
注意关键字set_location_assignment和-to的用法。
图5 pin.tcl步骤3:执行pin.tcl方法1:在QII软件中,使用“View -> Utility Windows -> Tcl Console”标签,打开Quartus II Tcl Console。
执行语句:图6 source pin.tcl方法2:在QII软件中,使用“Tools -> Tcl Scripts …”标签,打开Tcl Scripts。
EDA应用实习软件平台QuatusII简明使用指南邹海英编黑龙江工程学院电子工程系2010年12月·哈尔滨一、Quartus Ⅱ简介Quartus II是美国Altera公司于2000年推出的FPGA/CPLD开发设计的集成软件环境,能够直接满足特定设8BA1需要,为可编程芯片系统(SOPC) 提供全面的设计环境,是Altera 前一代FPGA/CPLD开发软件MAX+PLUS II的更新换代产品。
至今已相继推出了Quartus II 1.0,5.0,6.0,7.2等很多版本,2009年11月又推出最新的Quartus II软件9.1,与以前的软件版本相比,其新特性和增强功能将编译时间缩短了20%。
Quartus II 软件集成了FPGA 和CPLD 开发流程中所用到的所有工具和第三方软件接口。
我们可以使用Quartus II 软件完成FPGA 和CPLD 设计的所有阶段,也可以在设计的不同阶段使用自己熟悉的EDA 工具,如在输入综合阶段利用第三方的输入与综合工具,如Leonardo Spectrum、FPGA Compiler II、Synplify、Synplify Pro等,在仿真阶段利用第三方的仿真工具,如ModelSim、VCS MX等。
Quartus II 软件同时支持自上而下或自下而上的渐进式设计流程以及基于模块的设计方法。
使用Quartus II 模块编辑器、文本编辑器、Mega Wizard 插件管理器和EDA设计输入工具还可以设计Altera宏功能模块、参数化模块库(LPM) 功能和知识产权(IP)。
Quartus II 软件还提供全面的命令行界面解决方案。
它允许使用命令行可执行文件和选项完成设计流程的每个阶段。
另外,Quartus II还可以与MATLAB和DSP Builder相结合,进行FPGA的DSP系统开发。
二、Quartus II软件开发流程Quartus II软件的开发流程如图2-1所示。
第二种:建立TCL文件进行管脚分配。
这种方法比较灵活,是比较常用的。
这种方法具有分配灵活,方便快捷,可重用性等多方面优点。
方法如下:选择Projects菜单项,并选择Generate tcl file for project选项,系统会为你自动生成相应文件,然后你只要向其中添加你的分配内容就可以了。
还有一种方法就是直接用new ,新建一个TCL文件即可,具体不再细讲。
下面是我分配的内容一部分,可供大家参考。
set_global_assignment -name FAMILY Cycloneset_global_assignment -name DEVICE EP1C3T144C8set_global_assignment -name ORIGINAL_QUARTUS_VERSION 8.0 set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:14:58 JANUARY 06, 2009"set_global_assignment -name LAST_QUARTUS_VERSION 8.0set_global_assignment -nameUSE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_ideda_palaceset_global_assignment -name DEVICE_FILTER_PACKAGE "ANY QFP" set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"set_global_assignment -name LL_MEMBER_STATE LOCKED-section_id "Root Region"set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 set_global_assignment -name FITTER_EFFORT "STANDARD FIT" set_global_assignment -name BDF_FILE topDesign.bdfset_global_assignment -name QIP_FILE nios.qipset_global_assignment -name QIP_FILE altpll0.qipset_global_assignment -name USE_CONFIGURATION_DEVICE ON set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Topset_global_assignment -name PARTITION_COLOR 14622752-section_id Topset_location_assignment PIN_72 -to addr[7]set_location_assignment PIN_69 -to addr[6]set_location_assignment PIN_70 -to addr[5]set_location_assignment PIN_67 -to addr[4]set_location_assignment PIN_68 -to addr[3]set_location_assignment PIN_42 -to addr[2]set_location_assignment PIN_39 -to addr[1]set_location_assignment PIN_40 -to addr[0]set_location_assignment PIN_48 -to data[15]set_location_assignment PIN_47 -to data[14]set_location_assignment PIN_50 -to data[13]set_location_assignment PIN_49 -to data[12]set_location_assignment PIN_56 -to data[11]set_location_assignment PIN_55 -to data[10]set_location_assignment PIN_58 -to data[9]set_location_assignment PIN_57 -to data[8]set_location_assignment PIN_61 -to data[7]set_location_assignment PIN_62 -to data[6]set_location_assignment PIN_59 -to data[5]set_location_assignment PIN_60 -to data[4]set_location_assignment PIN_53 -to data[3]set_location_assignment PIN_54 -to data[2]set_location_assignment PIN_51 -to data[1]set_location_assignment PIN_52 -to data[0]set_location_assignment PIN_16 -to clkset_location_assignment PIN_38 -to csset_location_assignment PIN_141 -to led[3]set_location_assignment PIN_142 -to led[2]set_location_assignment PIN_143 -to led[1]set_location_assignment PIN_144 -to led[0]set_location_assignment PIN_33 -to reset_nset_location_assignment PIN_41 -to rdset_location_assignment PIN_71 -to wrset_location_assignment PIN_105 -to mosiset_location_assignment PIN_107 -to sclkset_location_assignment PIN_106 -to ssset_location_assignment PIN_73 -to motor[0]set_location_assignment PIN_74 -to motor[1]set_location_assignment PIN_75 -to motor[2]set_location_assignment PIN_76 -to motor[3]set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top# Commit assignmentsexport_assignmentsFPGA 点滴(2008-09-30 09:44:45)转载标签:杂谈以此记录心得以及重要的知识点。
QuartusII软件概述QuartusII软件是Altera公司最新版本的EDA开发软件,支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的开发。
含有工作组计算、集成逻辑分析仪、EDA工具集成、多过程支持、增强重编译和IP集成等特性。
支持百万门级的设计,支持高速I/O设计,具有更强的设计能力和更快的编译速度。
QuartusII开发软件为可编程片上系统(SOPC)设计提供了一个完整的设计环境。
无论是使用个人电脑、NUIX或Linux 工作站,QuartusII都提供了方便设计、快速编译处理以及编程功能。
QuartusII输入的设计过程可分为创建工程、输入文件、项目编译、项目校验和编程下载等几个步骤。
1文本输入的设计过程现通过一个简单设计实例说明QuartusII的基本文本设计过程。
例:用硬件描述语言VHDL设计一个2 输入与非门,设计放d:\ nand2_lab1目录下,工程文件名为nand2_lab1 。
先打开“我的电脑”,在D盘新建名为“nand2_lab1”文件夹。
1、创建工程文件利用QuartusII软件创建工程向导(New Project Wizard)创建一个新工程。
步骤如下:1)打开QuartusII6.0软件界面,在“文件”菜单下选择“New Project Wizard”,点击“next”后弹出如图1.1对话框图1.1 New Project Wizard对话框第一页点选第一行右侧的“…”选择工程目录为“d:\ nand2_lab1”,在第二行输入项目名称: nand2_lab1,第三行默认把项目名设为顶层文件名,点击“next”,2)新建项目向导第二页,如图1.2,该窗口可为项目添加已经编辑好的程序文件,默认为空,点击“next”,图1.2 New Project Wizard对话框第二页3)新建项目向导第三页,如图1.3,该窗口可以选择FPGA硬件信息,在Family下拉框内选择“FLEX10K”,在Avaliable devices窗口选择芯片型号为:EPF10K20RC208-4,其它选项默认。
第一讲:QUARTUS II 安装及工程建立 (1)1.1Q UARTUS II安装 (1)1.1.1QuartusII安装文件夹内容 (1)1.1.2QuartusII安装步骤 (2)1.1.3QuartusII破解步骤 (3)1.2工程建立 (7)第二讲:VERILOG HDL语言的应用与仿真 (14)2.1分频器原理说明 (14)2.2编写V ERILOG HDL程序 (14)2.3程序仿真 (24)第三讲:原理图方式编程及I P核调用 (35)第四讲:程序下载 (61)4.1引脚配置 (61)FPGA教程——Quartu s II 入门指南第一讲:Q u a r t u s I I安装及工程建立。
第二讲:V e r i l o g H D L语言的运用及仿真。
第三讲:原理图方式编程及I P核调用。
第四讲:程序下载。
第一讲:Quartus II 安装及工程建立1. 1QuartusII安装本指南的QuartusII版本是QuartusII 7.2。
1.1.1QuartusII安装文件夹内容从网上下载或是从其它地方考贝来的QuartusII7.2文件夹内包含两个文件:72_quartus_windows.exe和压缩文件Crack_QII72,如图1-1所示。
图1-1 QuartusII安装文件夹包含文件1.1.2QuartusII安装步骤(1)双击72_quartus_windows.exe文件,出现QuartusII7.2对话框,如图1-2。
图1-2 QuartusII7.2对话框(2)点击Install按钮,开始安装,等待完成出现Quartus II 7.2 Setup安装对话框,如图1-3,点击Next,对话框变为图1-4所示,选择同意选项,点击Next,直到出现图1-5,单击Finish完成安装。
图1-3 Quartus II 7.2 Setup安装对话框图1-4 Quartus II 7.2 Setup安装对话框图1-5 Quartus II 7.2 Setup安装对话框1.1.3QuartusII破解步骤(1)解压文件Crack_QII72,出现四个文件license.DAT,Quartus_II_7.2_b151破解器.exe,sys_cpt.dll,读我.txt,如图1-6所示,其中读我.txt文件有破解说明。
FPGA设计与应用实验指导书实验一Quartus II开发软件入门一、实验目的1. 熟悉Quartus II 开发软件的基本使用方法2. 掌握用VHDL语言设计组合逻辑电路的方法二、实验内容1. 运用Quartus II 开发软件,完成工程创建、代码编写、程序调试、编译仿真等基本操作。
2. 用VHDL语言设计实现一个3-8译码器,并进行功能仿真验证。
三、实验步骤1.Quartus II 开发软件基本操作(1)创建工程在File菜单下选择New Project Wizard…如图1-1所示。
图1-1 创建工程示意图弹出创建工程选框,选择工程的工作路径,输入工程名称。
如图1-2所示。
注意工程名称的格式要求,同时工程名称默认和顶层实体名称相同,不允许修改。
图1-2 创建工程名称可选择添加已有的程序文件,如图1-3所示。
这里不添加,直接下一步。
图1-3 添加文件选框选择芯片系列和芯片型号,如图1-4所示。
实验中使用的是Altera公司的Cyclone II系列FPGA 芯片,型号为EP2C35F672C6。
如果不进行硬件下载,可直接下一步。
图1-4 芯片参数选框EDA外部工具选框如图1-5所示。
一般选择默认值,直接下一步。
图1-5 EDA外部工具选框完成工程设置后的工程信息如图1-6所示。
图1-6 工程信息选框至此完成工程的创建。
(2)新建VHDL文件在File菜单下选择New选项,如图7所示。
图1-7新建文件示意图点击新建菜单后给出新建文件选框如图1-8所示。
选择VHDL File项创建VHDL文件。
图1-8 新建VHDL文件选框确定后弹出新建VHDL文件编辑窗口如图1-9所示。
可在窗口中编写程序内容并保存,注意文件名称与工程实体名称必须一致。
图1-9 VHDL文件编辑窗口至此完成VHDL文件的创建和VHDL程序的编写。
(3) 程序编译程序编写完成后,选择Processing菜单下的编译工具(Compiler Tool)菜单,如图1-10所示,调出编译工具。
FPGA入门及Quartus II使用教程FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在可编程阵列逻辑PAL(Programmable Array Logic)、门阵列逻辑GAL(Gate Array Logic)等可编程器件的基础上上进一步发展的产物。
可以这样讲,ASIC(Application Specific Integrated Circuit )内部的所有资源,是用积木堆积起来的小房子,可以是一个欧美风情的房子,还可以是一个北京四合院…….而FPGA内部就可以说是一个个小积木,也就是内部有大量的资源提供给我们,根据我们的需求进行内部的设计。
并且可以通过软件仿真,我们可以事先验证设计的正确性。
第一章FPGA的基本开发流程下面我们基于Altera 公司的QuantusII 软件来说明FPGA 的开发流程。
下图是一个典型的基于Quartus II的FPGA开发整体流程框图。
1、建立工程师每个开发过程的开始,Quartus II以工程为单位对设计过程进行管理。
2、建立顶层图。
可以这样理解,顶层图是一个容器,将整个工程的各个模块包容在里边,编译的时候就将这些模块整合在一起。
也可以理解为它是一个大元件,比如一个单片机,内部包含各个模块,编译的时候就是生成一个这样的大元件。
3、采用ALTERA公司提供的LPM功能模块。
Quartus软件环境包含了大量的常用功能模块,比如计数器、累加器、比较器等等。
4、自己建立模块。
由于有些设计中现有的模块功能不能满足具体设计的要求,那就只能自己设计。
使用硬件描述语言,当然也可以用原理图的输入方法,可以独立的把它们当成一个工程来设计,并且生成一个模块符号(Symbol),类似于那些LPM功能模块。
这里可以理解为,如果我们需求的滤波器,没有现成的合适的,那我们可以通过LC自己来搭建一个滤波器。
5、将顶层图的各个功能模块连线起来。
基于QuartusII的实例实验一实验板上的KEY1按钮控制FPGA核心板上的LED灯。
目的:通过该实例学习,可以了解FPGA的基本开发流程,熟识quartusII软件基本功能的使用。
原理:利用一个常开按钮(实验板上的KEY1,在板上标“S2”)作为输入(常开时输入1,闭合时输入0),经过一个反相器后输出到核心板的第一个LED。
KEY1常开时,LED灭,按下(闭合)实验板上的KEY1,该LED亮。
1.建立工程运行QuatrusII软件(以下简称Q2),建立工程,File New Project Wizad 如点击New Project Wizard 后弹出指定工程名的对话框,在Diectory, Name, Top-Level Entity中如下图填写:按Next按钮,出现添加工程文件的对话框:在这里我们先不用管它,直接按Next进行下一步,选择FPGA器件的型号:在Family下拉筐中,我们选择CycloneII系列FPGA,然后在“Available devices:”中根据核心板的FPGA型号选择FPGA型号。
执行下一步出现对话框:这里是选择其它EDA工具的对话框,我们用Q2的集成环境进行开发,因此这里不作任何改动。
按Next进入工程的信息总概对话框,按Finish按钮即建立一个空项目。
2.建立顶层图执行File→New,弹出新建文件对话框:选择“Block Diagram Schematic File”按OK即建立一个空的顶层图,缺省名为“Block1.bdf”,我们把它另存为(File→Save as),接受默认的文件名,并将“Add file to current project”选项选上,以使该文件添加到工程中去。
如图所示:3.添加逻辑元件(Symbol)双击顶层图图纸的空白处,弹出添加元件的对话筐:在Libraries里寻找所需要的逻辑元件,如果知道逻辑元件的名称的话,也可以直接在Name一栏敲入名字,右边的预览图即可显示元件的外观,按OK后鼠标旁边即拖着一个元件符号,在图纸上点击左键,元件即安放在图纸上。
Quartus II简明操作指南在前面的实验里,我们所有的实验都是基于这样一个观点,即将一个数字系统划分成合适利用已有的中小规模数字集成电路的功能的模块,然后将这些集成电路通过外部引线连接起来。
现在开始我们将研究用可编程逻辑器件(PLD/FPGA)来进行数字系统设计。
可编程逻辑器件是一种大规模的集成电路,其内部预置了大量易于实现各种逻辑函数的结构,同时还有一些用来保持信息或控制连接的特殊结构,这些保持的信息或连接确定了器件实现的实际逻辑功能,当改变这些信息或连接时器件的功能也将随之改变。
可编程逻辑器件的设计过程和传统的中小规模数字电路设计也不一样,可编程数字系统,无论是CPLD 还是FPGA器件都需要利用软件工具来进行设计。
可编程数字系统设计总体上一般可以分为设计输入、项目处理、设计校验和器件编程这四个主要过程。
下面我们将一个简单的模60BCD计数器为例,说明可编程数字系统设计的基本流程、概念和方法,掌握Quartus II 软件的基本功能和操作,了解原理图输入方式的设计全过程。
一、设计项目输入设计输入是设计者对系统要实现的逻辑功能进行描述的过程。
设计输入有多种表达方式,本次我们主要学习图形输入法。
1.1 建立工程项目1.打开Quartus II,在File菜单中选择New Project Wizard项,将出现工程项目建立向导对话框。
2.点击“Next”,进入到相应的对话框,在最上面的文本输入框中输入项目所在的目录名(注意:不能用中文名,下同),在中间的文本输入框中输入项目名称,在最下面的文本输入框中输入最顶层模块的名称。
3.点击“Next”,进入到设计文件选择对话框,由于在本例中还没有任何设计文件,所以不选择任何文件。
4.点击“Next”,进入到器件选择对话框,在“Family”下拉菜单中选择“Cyclone”,在“AvailableDevices”列表栏中选择“EP1C3T144C8”。
5.点击“Next”进入到第三方EDA工具选择对话框,在这个界面我们可以选择第三方的综合工具、仿真工具和时延分析工具。
FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)FPGA管脚分配时需注意的一些事项(以xilinx xc4vsx55为例)平台:XC4VSX55 ISE10.1设计过FPGA的原理图,看FPGA的手册,说管脚的分配问题,如时钟管脚要用GC类管脚,而且单端时钟输入时要用P类型的管脚,不能用N类型管脚等等。
一直以来都没有试验过,今天试验一把,以求各种验证。
1)GC类全局时钟管脚是否可用作普通IO使用?所谓GC类管脚,就是在管脚的称是诸如IO_L1P_GC_LC等带有GC的管脚。
其实手册中说的是GC类管脚可以用作IO的,但在《Xilinx FPGA开发实用教程》(清华出版社)574页倒数第八行提到:“所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错”,于是今天我试了一下,将某一GC 类管脚分配给一个普通的输入口(也试验了分配给一个普通的输出口),经布局布线后,未出错。
因此得出结论:GC类全局时钟管脚可以作为普通IO使用。
(不知道是不是我对书中提到的全局时钟管脚理解有误,如果是,请网友别拍我,敬请留言指正)2)非GC类全局时钟管脚是否可以作时钟使用?其实至于说能否作为时钟使用,这里有另一层函义。
当然,如果你把一个普通IO口配置成输入口,就把它的输入信号作为时钟,那是没问题的。
但我们一般不这么做,因为时钟信号对于我们来说是一个很重要的信号,因此FPGA在内部会有特殊照顾,如果你使用FPGA传门为时钟预留的管脚,并作一些处理,那么你的时钟对于各种模块的时延是可以忽略的,因为时钟在布线时是单独走的一层,而如果你就仅用普通IO 的话,经过FPGA内部布局布线后,从它的输到,再到各个使用时钟的地方,有的线长,有的线短,它的时延将是不一样的。
这些东西还是看一些FPGA结构的内容吧。
在xilinx里有专门的DCM IP核可供调用,在ISE中执行project——>New Source——>IP(CORE Generator & Architecture Wizard)——>FPGA Features andDesign——>Clocking——>Virtex-4——>Single DCM ADV v9.1i,可得如下界面:需要特别注意的是CLKIN Source需要选择是External还是Internal,各自生成的源文件如下:==========================选择External=========================`timescale 1ns / 1psmodule clk_test(CLKIN_IN,CLKIN_IBUFG_OUT,CLK0_OUT,LOCKED_OUT);input CLKIN_IN;output CLKIN_IBUFG_OUT;output CLK0_OUT;output LOCKED_OUT;wire CLKFB_IN;wire CLKIN_IBUFG;wire CLK0_BUF;wire GND_BIT;wire [6:0] GND_BUS_7;wire [15:0] GND_BUS_16;assign GND_BIT = 0;assign GND_BUS_7 = 7'b0000000;assign GND_BUS_16 = 16'b0000000000000000;assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;assign CLK0_OUT = CLKFB_IN;IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),.O(CLKIN_IBUFG));BUFG CLK0_BUFG_INST (.I(CLK0_BUF),.O(CLKFB_IN));DCM_ADV DCM_ADV_INST (.CLKFB(CLKFB_IN), .CLKIN(CLKIN_IBUFG),.DADDR(GND_BUS_7[6:0]),.DCLK(GND_BIT),.DEN(GND_BIT),.DI(GND_BUS_16[15:0]),.DWE(GND_BIT),.PSCLK(GND_BIT),.PSEN(GND_BIT),.PSINCDEC(GND_BIT),.RST(GND_BIT),.CLKDV(),.CLKFX(),.CLKFX180(),.CLK0(CLK0_BUF),.CLK2X(),.CLK2X180(),.CLK90(),.CLK180(),.CLK270(),.DO(),.DRDY(),.LOCKED(LOCKED_OUT),.PSDONE());defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";defparam DCM_ADV_INST.CLKDV_DIVIDE = 2.0;defparam DCM_ADV_INST.CLKFX_DIVIDE = 1;defparam DCM_ADV_INST.CLKFX_MULTIPLY = 4;defparam DCM_ADV_INST.CLKIN_DIVIDE_BY_2 = "FALSE";defparam DCM_ADV_INST.CLKIN_PERIOD = 16.129;defparam DCM_ADV_INST.CLKOUT_PHASE_SHIFT = "NONE";defparam DCM_ADV_INST.DCM_AUTOCALIBRATION = "TRUE";defparam DCM_ADV_INST.DCM_PERFORMANCE_MODE = "MAX_SPEED";defparam DCM_ADV_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";defparam DCM_ADV_INST.DFS_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DUTY_CYCLE_CORRECTION = "TRUE";defparam DCM_ADV_INST.FACTORY_JF = 16'hF0F0;defparam DCM_ADV_INST.PHASE_SHIFT = 0;defparam DCM_ADV_INST.STARTUP_WAIT = "FALSE";endmodule==========================选择Internal=========================`timescale 1ns / 1psmodule clk1_test(CLKIN_IN,CLK0_OUT,LOCKED_OUT);input CLKIN_IN;output CLK0_OUT;output LOCKED_OUT;wire CLKFB_IN;wire CLK0_BUF;wire GND_BIT;wire [6:0] GND_BUS_7;wire [15:0] GND_BUS_16;assign GND_BIT = 0;assign GND_BUS_7 = 7'b0000000;assign GND_BUS_16 = 16'b0000000000000000;assign CLK0_OUT = CLKFB_IN;BUFG CLK0_BUFG_INST (.I(CLK0_BUF),.O(CLKFB_IN));DCM_ADV DCM_ADV_INST (.CLKFB(CLKFB_IN),.CLKIN(CLKIN_IN),.DADDR(GND_BUS_7[6:0]),.DCLK(GND_BIT),.DEN(GND_BIT),.DI(GND_BUS_16[15:0]),.DWE(GND_BIT),.PSCLK(GND_BIT),.PSEN(GND_BIT),.PSINCDEC(GND_BIT),.RST(GND_BIT),.CLKDV(),.CLKFX(),.CLKFX180(),.CLK0(CLK0_BUF),.CLK2X(),.CLK2X180(),.CLK90(),.CLK180(),.CLK270(),.DO(),.DRDY(),.LOCKED(LOCKED_OUT),.PSDONE());defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";defparam DCM_ADV_INST.CLKDV_DIVIDE = 2.0;defparam DCM_ADV_INST.CLKFX_DIVIDE = 1;defparam DCM_ADV_INST.CLKFX_MULTIPLY = 4;defparam DCM_ADV_INST.CLKIN_DIVIDE_BY_2 = "FALSE";defparam DCM_ADV_INST.CLKIN_PERIOD = 16.129;defparam DCM_ADV_INST.CLKOUT_PHASE_SHIFT = "NONE";defparam DCM_ADV_INST.DCM_AUTOCALIBRATION = "TRUE";defparam DCM_ADV_INST.DCM_PERFORMANCE_MODE = "MAX_SPEED";defparam DCM_ADV_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";defparam DCM_ADV_INST.DFS_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "LOW";defparam DCM_ADV_INST.DUTY_CYCLE_CORRECTION = "TRUE";defparam DCM_ADV_INST.FACTORY_JF = 16'hF0F0;defparam DCM_ADV_INST.PHASE_SHIFT = 0;defparam DCM_ADV_INST.STARTUP_WAIT = "FALSE";endmodule比较以上两段代码,区别在于选择是External时CLKIN经过了IBUFG才到的DCM_ADV,而选择Internal 的CLKIN则直接到了DCM_AV,而IBUFG就是原语“全局时钟缓冲”单元,我们使用时要选择External,只有当我们的级联两个DCM模块时,直接与外面相连的选External,而另一个选择Internal。
Quartus II中FPGA管脚的分配策略编写:***校核:审核:二〇一年月日目录目录 (I)QUARTUS II中FPGA管脚分配策略 (1)1.FPGA管脚介绍 (1).电源管脚 (1).配置管脚 (2).普通I/O管脚 (2).时钟管脚 (2)2.FPGA管脚分配方法 (3).P IN P LANNER方式 (3).I MPORT A SSIGNMENTS方式 (3).T CL S CRIPTS方式 (6).项目组统一使用方式 (8)3.编写FPGA管脚分配文件 (9).查看PDF格式的原理图 (9).查看P RJ PCB格式的原理图 (10)4.保存FPGA管脚分配文件 (11).T CL格式或CSV格式 (11).QSF格式 (11).项目组统一使用格式 (11)附录管脚类型说明 (12)Quartus II中FPGA管脚分配策略1.FPGA管脚介绍FPGA的管脚从使用对象来说可分为两大类:专用管脚和用户自定义管脚。
一般情况下,专用管脚大概占FPGA管脚数的20% ~ 30%,剩下的70% ~ 80%为用户自定义管脚。
从功能上来说可分为电源管脚、配置管脚、时钟管脚、普通I/O管脚等。
下面以Altera公司的Cyclone IV E系列芯片EP4CE30F23C8为例,如图1所示,芯片总共包含484个芯片管脚。
图中不同颜色的区域代表不同的Bank,整个芯片主要分为8个Bank,FPGA的各个管脚分布在不同的Bank中。
其中,三角形标记的管脚为电源管脚,正三角表示VCC,倒三角表示GND,三角内部的O表示I/O管脚电源,I表示内核电源。
圆形标记的管脚为普通用户I/O管脚,可以由用户随意使用。
正方形标记且内部有时钟沿符号的管脚为全局时钟管脚。
五边形标记的管脚为配置管脚。
图1 Wire Bond1.1.电源管脚FPGA通常需要两个电压才能运行,一个是内核电压,另一个是I/O电压。
每个电压通过独立的电源管脚来提供。
内核电压是用来给FPGA内部的逻辑门和触发器供电。
随着FPGA的发展,内核电压从5V、、、到,变得越来越低。
I/O电压用来给各个Bank供电,每个Bank都有独立的I/O电压输入。
一般情况下,内核电压会比I/O电压低。
图1中的VCCINT是内核电压管脚,VCCIO是I/O电压管脚。
1.2.配置管脚每个FPGA都需要配置管脚,以支持多种配置方式,例如JTAG、从串、从并、主串、主并等。
对于配置管脚的控制信号来说,是专用管脚,不能作为普通的I/O管脚。
而其数据信号可以作为普通的I/O管脚使用。
图1中的MSEL为配置模式选择信号,即选择AS模式、PS模式或FAST AS模式。
MSEL[1:0]为00表示用AS模式,10表示用PS模式,01表示用FAST AS模式。
如果用JTAG模式,MSEL[1:0]置00,JTAG模式和MSEL无关,即用JTAG模式时,MSEL会被忽略,但是因为MSEL不能浮空,所以置00。
图1中的TMS、TCK、TDI和TDO为JTAG接口的4根线,分别为模式选择、时钟、数据输入和数据输出线。
常用的为AS模式和JTAG模式。
1.3.普通I/O管脚FPGA的I/O管脚是FPGA上较为丰富的资源,也是做管脚约束时最常用的资源。
对于FPGA的普通I/O管脚,可以设定电平类型(TTL、LVTTL、LVCOMS、ECL等)、驱动电流、摆率等参数。
1.4.时钟管脚FPGA内部的时钟都需要通过专用时钟管脚连接内部PLL或者DCM等专用时钟处理单元,从而接入内部高速时钟网络。
对于一些外部同步信号的输入,如果时钟只用于采样当前的同步信号,其时钟可以不用连接到专用时钟管脚上,即不用接入全局时钟网络,但需要约束其管脚不使用全局时钟资源。
否者,EDA 工具会报错,提示其作为时钟输入而没有接在专用时钟管脚上。
更多的管脚类型说明见附录。
2.FPGA管脚分配方法FPGA管脚分配常用的有3种方式,分别为Pin Planner方式、Import Assignments方式和Tcl scripts方式。
2.1.P in Planner方式步骤1:在Quartus II软件中,选择“Assignments ? Pin Planner”,或者按快捷键“Ctrl+Shirt+N”,出现如图2所示的画面。
通过下拉菜单可以选择需要的管脚在Location选择了管脚后I/O Bank自动填充Bank内部的细分区域,非修改属性用于支持对应不同的电平标准,即VCCIO。
每个Bank只能有一种电压标准对管脚内部的I/O逻辑进行约束驱动电流强度电压转换速率,表示单位时间内电压升高的幅值图2 Pin Planner图2主要包含了7个选择项,分别为Location、I/O Bank、VREF Group、I/O Standard、Reserved、Current Strength和Slew Rate。
Location里可以选择所需要的芯片管脚,管脚确定后I/O Bank 中的Bank数会自动填充,VREF Group也会自动填充。
I/O Standard是每个Bank对应的电压标准,一个Bank只能有一种电压标准,一般情况下选择默认值就好。
Reserved是对管脚内部的I/O逻辑进行约束,有6个选择项供选择,例As SignalProbe output、As bidirectional等。
Current Strength 是驱动电流强度,一般选择默认值,如果需要驱动大功率的电路,一般在FPGA外围加驱动电路。
Slew Rate是电压转换速率,跟信号跳变时间有关,一般选择默认值。
在管脚分配的过程中,我们主要关心Location这一选项,其他选项采用默认值就可。
步骤2:在Location中选择管脚。
所有管脚配置完成后关闭当前界面。
2.2.I mport Assignments方式步骤1:新建一个txt文件(或csv文件),按图3格式编写管脚分配内容。
(编写格式有多种,但这种格式最简单。
)【注】To和Location两个关键字中间有一个半角逗。
图3 管脚分配格式步骤2:在Quartus II软件中,选择“Assignments?? Import Assignments”,出现如图4所示的画面,导入或者文件。
图4 Import Assginments导入后Quartus II软件的Message信息栏会弹出如图5所示的内容,显示Import Completed,表示文件没有语法错误。
图5 Message步骤3:在Quartus II软件中,选择“Assignments ? Pin Planner”,验证管脚是否分配正确。
如图6所示。
图6 验证管脚是否分配正确常见错误1:分配的管脚不属于FPGA芯片。
如果分配的管脚不属于FPGA芯片,在Pin Planner中会出现如图7所示的错误提示,表示管脚PIN_GC21不属于该FPGA芯片,找不到对应的I/O Bank和VREF Group。
图7 管脚不属于FPGA若信号比较多,人工不能发现存在的错误,可以通过Enable Live I/O Check工具检查I/O分配情况。
点击Pin Planner工具栏中的I/O Check图标,如图8所示。
图8 Enable Live I/O Check执行Check后,在Message窗口中会弹出检查结果,如图9所示,提示PIN_GC21是非法的管脚定义。
图9 Check检查管脚不属于FPGA常见错误2:多个信号公用一个管脚,即分配管脚冲突。
如果分配的管脚冲突,通过肉眼的方式很难发现,通过Enable Live I/O Check工具可以有效的发现存在的问题,如图10所示,提示fpga_rst_n定义的管脚G21已经被phy_clk50m信号占用。
图10 Check检查管脚冲突2.3.T cl Scripts方式步骤1:在Quartus II软件中,选择“Assignments ? Remove Assignments”,出现如图11所示的画面。
此步骤用来移除已经存在的管脚分配内容,以确保分配的管脚没有因为覆盖而出现错误的情况。
【注】在执行没有管脚分配的新工程中,可跳过步骤1。
图11 Remove Assignments步骤2:新建一个tcl文件,按图12格式编写管脚分配内容。
注意关键字set_location_assignment和-to的用法。
图12管脚分配格式步骤3:执行文件。
方法1:(1)在Quartus II软件中,选择“View?? Utility Windows?? Tcl Console”,打开Quartus II Tcl Console,如图13所示。
图13 Tcl Console(2)将tcl文件中的内容复制到Tcl Console对话框中,如图14所示。
图14 执行管脚分配语句方法2:(1)将tcl文件添加到工程中,如图15所示。
图15 添加Tcl文件(2)在Quartus II软件中,选择“Tools ? Tcl Scripts”,出现如图16所示的画面。
图16 Tcl Scripts选择“Run”,执行Tcl文件。
步骤4:在Quartus II软件中,选择“Assignments ? Pin Planner”,验证管脚是否分配正确。
检查的方法同Import Assignments方式中的Enable Live I/O Check。
2.4.项目组统一使用方式为了统一代码风格,便于项目管理,FPGA项目组统一使用的Tcl Script方式。
在的步骤3中也使用方法2,即添加Tcl文件,而非命令行。
3.编写FPGA管脚分配文件在上文提到的3种管脚分配方法中主要包含了2种文件格式,即txt和tcl。
无论那种格式的文件都是为了阐明信号与管脚的对应关系。
编写FPGA管脚分配文件的主要任务就是要快速定位工程TOP文件中各个信号与FPGA管脚的对应关系。
通过2种方式可以定位这种关系,一种是通过查看对外PDF格式的原理图,另一种是通过查看PrjPCB格式的原理图。
推荐使用PrjPCB格式的原理图。
3.1.查看PDF格式的原理图通过SVN下载相应工程,在工程路径中可以找到对应的原理图,如图17所示。
由于PDF格式的原理图没有目录,如图18所示,查找各个模块比较费时费力,所以不推荐这种方式。
图17 原理图路径图18 PDF格式原理图3.2.查看PrjPCB格式的原理图查看原理图的软件有多种,我司主要使用Altium Designer软件。
通过SVN下载相应工程,在工程路径中可以找到对应的原理图,如图19所示。
图19 原理图路径用AD软件打开图15中的文件,打开后如图20所示。
左侧文件预览窗口罗列了整个板件各个模块的原理图,最后两个和就是FPGA部分的原理图。