前言
内容可能比较简单与基础。这其实是写给我自己看的,做一些简单的记录,方便以后使用时的查找。
我所知道的不多。
——某名人言
简介
Xilinx
所说是发明FPGA的公司,目前(2015年)其最大的竞争者Altera公司已经被Intel收购了。
ISE
这是Xilinx推出的一款综合性的EDA软件工具,集成了设计输入、综合、仿真、布局布线、下载。当然这些可以由第三方提供的软件来完成。什么Synplify、Modelsim、Verdi、Matlab等等。这些第三方工具的版本,必须与ISE的版本对应,否则可能就用不了咯。
积累
设计输入
创建cdc文件,Chipscope,添加所需要查看的节点等,选取采样深度
编写ucf约束文件,分配管脚、约束时钟。也可以采用界面化的设置,不过也挺复杂的样子。
可HDL输入、IP核输入、原理图输入等。
在Verilog语言中,Xilinx还自己弄了许多“原语”,其格式与Verilog的例化十分相似,但不同的是,它!不属于例化,在hierarchy中是看不到的,这些原语,有点类似于C语言里面的内联函数,可能它只是把一代代码嵌入到对应的Verilog中吧。
IP核的添加
调用IP核的时候,ISE会生成包含所有ip核配置信息的“.xco”文件,同时此文件似乎还记录所需文件的路径。工程里面只需要添加“.xco”文件,就包含了所有的文件了,虽然工程里面还是没有看到这些文件,但已经定义了。
仿真
仿真之前,如果安装的modelsim不是Xilinx版本的(即不是modelsimXE),那仿真之前一定要先编译仿真库文件,先指定好库文件的位置(指定为:x:\modeltech_x.xe\xilinx_lib)。
Modelsim SE版在发行时是不带任何FPGA厂家的仿真库的,因此用户必须手动编译这些库。由此面临的一个问题就是怎样建立各FPGA器件的仿真库,目前各FPGA厂家都支持用户编译库,所以实现比较简单。仿真的时候,会生成一个modelsim.ini文件,里面包含了库文件的一些路径以及相关的配置。关于工程下modelsim.ini的生成,它是从modelsim安装路径下的modelsim.ini拷贝一份,并添加库文件路径得到的。所以呢,适当修改modelsim安装路径下的modelsim.ini是可以实现“一劳永逸”的。
Modelsim库编译的时候,如果存入的库文件路径为默认时,会存放在:E:\Xilinx\13.2\ISE_DS\ISE\mti_se(mti为modelsim;se为版本)、E:\Xilinx\13.2\ISE_DS\ISE\verilog\mti_se、E:\Xilinx\13.2\ISE_DS\ISE\vhdl\mti_se等多个地方,
而如果是手动指定一个路径的话,好像会全部存放到一个指定的文件夹里面。
建议采用手动指定一个库文件路径,因为不同的modelsim版本的库文件,似乎是不通用的。一般的库文件路径是:D:\modeltech_10.1a\simlib_xilinx13_2
注:编译仿真库的时候,有一点要记住,每一个工程都会记住自己的库路径,当你的工作被移动(或者复制到)其他的电脑上面去里,记得修改好库文件的路径,否则会报错。
编译设置
查看各个模块占用的资源
对映射(Map)进行设置,可把每个模块的占用的资料逻辑出来,只需要将“detail”选项打开即可。编译过Map之后,就可以在summary中查看各个模块的Logic、DSP、RAM、LUTRAM等等内容了。
注:如果summary的Module Level Utiliztion的报告没有出来,那么可以通过手动Reset Report List解决。
深入分析
在Post-Place & Route Static Timing的配置中,将对应的扩展打开,可进时序进行深入的分析!
下载固化至FPGA的启动速度
Xilinx的ISE中的bit生成,里面有一项“配置速率”的配置,可以将其速率调高,这样固化之后启动就会快许多。
编译简介
ISE中设计实现分为3步,分别是:Translate、MAP和Place & Route。
Translate:读取综合生成EDIF和NGC格式的网表文件,生成Xilinx的NGD格式的文件。NGD文件是用逻辑元件表示的网表,包括触发器、逻辑门和RAM等逻辑元件。
MAP:输入文件是Translate生成的NGD格式的网表文件,输出为NCD(Native Circuit Description)格式的文件。MAP的功能是将NGD文件中的逻辑元件映射成Xilinx FPGA中的元件,比如Logic Cell、I/O cells或者Block RAM等。
Place & Route:接收MAP生成的NCD文件,将各个元件放置到FPGA中适当的位置,并通过布线器连接各个元件,完成在FPGA中的设计实现。Place & Route输出NCD文件,用于生成下载文件。
编译结束后,其中“时序”、“资源”是报告中最重要的两项。
ChipScope
用于ChipScope的时候,有时查看一些管脚的时候,但管脚又找不到时,有以下方法可以解决:一般只修改成“soft”:即保持平铺地设计,但又不会破坏要查看的信号。
ChipScope是Xilinx开发的针对FPGA的在线片内信号分析工具,使用ChipScope可以通过JTAG实时在线观察FPGA的内部信号。
ChipScope使用集成逻辑分析仪ILA(Intergrated Logic Analyzer)采样FPGA的内部信号,将采样值存储在FPGA多余的Block RAM中,然后通过JTAG观察采样信号。
打开了ChipScope之后,还需要将工程的CDC导入到ChipScope里面去,才可以看到对应的管脚量
关于管脚的总线问题,当建立CDC时,查看的信号是属于输出管脚时,系统只能通过OBUF进行查看,且在建立之后,无法在ChipScope里面自动归类总线。只能手动建立总线。而其它的内部信号量,则可以自动建立起总线。
波形图中的T、X、O,为三根不同的游标。T为触发点的不动标(游动不了)。同时可以配置zoom进行对XO中间区域的放大。!
修改触发的条件,==等于,<>不等于。
还可选取触发的条件,包括电平触发及上下沿触发等。功能强大。
对CDC调试捕捉到的波形,进行导出到Matlab进行数据处理。CDC能捕捉到的时间间隔可以调到十分短,还可以存储大量的数据,有时是无法肉眼进行观察得出结果,有时需要Matlab进行处理。
管脚分配与时钟约束
Xilinx的约束一般采用ucf文件进行,称为约束文件。可以包含管脚分配(即管脚的约束)、时钟约束、面积约束等操作,有自己的一套语法。当然也可以采用PlanAhead进行界面化的约束,不过相对操作比较复杂,所以一般没有采用这种方法。但界面更加直观。
时钟报告
ISE的时钟报告文件为后缀名“.twr”。map的报告后缀名:“.mrp”
嵌入式软核MicroBlaze
MicroBlaze采用功能强大的32位流水线RISC结构,包含32个32位通用寄存器和一个可选的32位移位寄存器,时钟可达150MHz(一般情况下,就只能跑65MHz左右)。在Virtex-2 Pro以及更高系列的平台上,其运行速度可达120DMIP(DhrystoneMIPS),占用资源不到100个Slice。MicroBlaze是软处理器,在高端的芯片系列(Virtex系列)中,还嵌入了PowerPC硬核。
ISE的下板调试
Xilinx的下载文件有两种主要的类型:后缀名为Bit的文件,该类文件可直接下载到FPGA;后缀名为MCS的文件,该类文件可下载到PROM中,后PROM中的内容会配置FPGA。
Xilinx的bit文件,似乎也可以通过iMPACT下载到PROM。不过还没有尝试过。
在选择bit文件时,如果工程包含了MicroBlaze软核时,则需要在SDK_Export文件夹下的硬件平台文件夹,找到已经包含了elf(软件程序)的download.bit文件。这样固化程序,就会将MicroBlaze中的软件也固化进去了。
Tcl语言
编写tcl脚本,然后先使用xtclsh,再运行命令行source xxx.tcl。(PS:xxx.tcl为你的tcl脚本文件名)
或者直接
或者直接在cmd,在C:\Xilinx\14.1\ISE_DS\ISE\bin\nt\xtcl.sh(或者添加path的环境变量)
采用xfile add 添加文件时,添加.v、.ucf、.cdc、以及IP核的.xco文件。
FPGA芯片
RAM
芯片包含有两种RAM,一种是分布式离散的,XC6SLX100T大概有976kb(XC6SLX150T有1355kb);另一种是块RAM(18k为一块,一块18k的RAM可以由两块9k的RAM组成),大概有268块(即共4824kb)
COE就如QuartusII软件中的MIF文件,在Xilinx的RAM IP核配置可进行选择是否添加COE文件,来对RAM进行初始化。
FIFO的使用,有基于Block的FIFO,也有基于distribute的FIFO,Block FIFO基于固定占用52个Slice,而distribute FIFO会根据深度及位宽占用不同数量的Slice,
BUFG
经常听到别人说“时钟buffer”,所以Xilinx的FPGA也使用BUF作用时钟树的分配。全局时钟缓冲器BUFG是走全局时钟网络。配置PLL时,对输出时钟使用BUFG,这样时钟会稳定一些,保证各个模块之间的时钟偏差最小。FPGA的BUFG资源是比较有限的,对于多时钟系统,有时BUFG会很紧张。
在Xilinx器件中,提供全局时钟布线资源和数字时钟管理(DCM,Digital Clock Managers)模块。DCM可以实现时钟锁定功能、频率合成功能、分频和倍频功能
SERDES
片内微处理器软核MicroBlaze
简介
MicroBlaze软核内部采用RISC架构和哈佛结构的32位指令和数据总结,内部有32个通用寄存器R0~R3、2个特殊寄存器程序指针(PC)和处理器状态寄存器(MSR)、1个ALU单元、1个移位单元和两级中断响应单元等基本模块,还可具有3/5级流水线、桶形移位器、内存管理/内存保护单元、浮点单元(FPU)、调整缓存、异常处理和调试逻辑等可根据性能需求和逻辑区域成本任意裁剪的高级特性。
MicroBlaze可以作为子模块,在FPGA工程实现嵌入式。也可单独作为顶层模块进行运行。
在ISE中,双击可为MicroBlaze生成一个顶层文件,此时MicroBlaze为允当一个子模块的功能。
MicroBlaze的总结接口
MicroBlaze的总线是其优于其他同类CPU软核的重要部分,每种总线都有鲜明的特点和明确的外设。只有合理使用不同的总线来访问不同的外设,且正确地协调这些总线的工作,才能最大程序地发挥MicroBlaze的优势。
CoreConnect是由IBM开发的片上总线链,它使多个芯片核相互连接成为一个完整的新芯片成为可能。Xilinx以IBM CoreConnect为嵌入式处理器的设计基础,提供了丰富的接口资源。常用总线标准有:
EDK开发
EDK软件主要包括XPS(Xilinx Platform Studio)和SDK(Software Develop Kit)这两个软件,前者用于构建嵌入式硬件平台,后者专门用于开发应用软件,各有侧重。
通常ISE FPGA开发软件在后台运行,XPS工具调用ISE软件提供的功能。XPS主要用来嵌入式处理器硬件系统的开发(微处理器、外围设备和这些组件之间的连接问题,以及它们各自的属性设置)。软件开发在SDK中完成。硬件平台的功能验证可以通过硬件描述语言HDL仿真器完成。XPS提供了行为级、结构级以及定时精确级三种类型的仿真。验证过程结构由XPS自动产生,其中包括了仿真的HDL文件。设计者只需要输入时钟时序、重配置信息、以及一些应用代码即可。完成设计后,在XPS中将FPGA比特流和可执行文件可链接格式文件下载,就可以进行目标器件的配置。步骤:
- 创建硬件平台:利用XPS的板级开发包向导(BSB Wizard)快速构建设计的硬件平台,是EDK设计的第一步。
- 添加IP core以及用户定制外设:在XPS中添加所需的IP core,
- 生成仿真文件并测试硬件系统:生成硬件系统的仿真文件,可选择行为级、结构级以及时序级仿真,利用Modelsim等工具测试系统,特别是用户自定义的外设;
- 生成硬件比特流:生成硬件和比特流文件,这个步骤类似于传统FPGA设计的综合、布局布线、生成编程文件这3个操作;
- 开发软件系统:针对软件需要编写硬件代码,确定软件的操作系统、库、外设驱动等属性,针对每个软件应用工程、设置编译器、优化级别、使用的连接文件等信息。之后编译生成“.elf”帮工的可执行代码。(软件比特流)
- 合并软、硬件比特流,生成最终的二进制比特文件。
- 采用JTAG下载
- 在线调试:可利用XMD工具或ChipScope工具调试。
有些不懂
- GPIO的位宽不对应问题
- 从BSB新建的LEDS,假如当时配置的位宽为4bit,但生成mhs时,对外的LEDS_IRI_O却是默认的8bit(range),此时会在生成网表处报错,应该手动将其位宽修改如上图的4bit。
- 下载程序时,一直失败。答:清除工程(Clean Project),然后重新编译一次,再次下载即可
- 关于综合操作,现在许多人都认为,Xilinx开发环境ISE的综合能力已经十分不错了,而且只有Xilinx才对自己的芯片最了解嘛,所以许多人皆采用Xilinx自带的XST综合工具进行综合操作。
采用XST工具对输入设计的综合,可以根据需要进行一些针对性比较强的配置。(相关配置还没有研究)