xilinxfpga设计基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章开发软件ISE与开发流程
LUT主要适合SRAM工艺生产,因此FPGA都是基于SRAM工艺的,掉电就会丢失。
设计输入
除了常见的文本输入,还可以采用图形输入方式:
单击Design Utilities->Creat Schematic Symbol,则会在工程文件夹下生成一个文件,同时这个生成的符号被加入到符号库中。这样可以添加元件。
用户约束文件UCF的编写:
管脚约束:如NET “
时钟约束:如NET “
采用图形化方法输入约束文件:
创建ucf文件,选择ucf文件,然后点击Processes->User Constrains->Create Timing Constraints添加时序约束;点击Processes->User Constrains->I/O Pin Planning添加管脚约束。
设计综合(Synthesize)
综合将概念性硬件描述语言HDL的设计定义转换成针对目标器件的逻辑或者物理表示。
XST(Xilinx Synthesis Tools)就是综合工具,其输出为Xilinx特有的NGC网表文件,NGC包含转化后的逻辑数据和约束信息。
综合是设计流程中的基本步骤,它将概念性硬件描述语言的设计定义转换为针对器件的逻辑或物理表示。在综合过程中,状态机是单独处理、独立分析的,根据综合的选项,综合器选择状态机在综合过程中选用的实现算法。
综合完成后,综合器会根据综合选项和XCF(XST Constraint File, 综合约束文件),对综合结果做一些基础的优化。
HDL文件
语法分析
检查语法错误
HDL综合
宏识别、优先状态机展开资源共享技术
底层优化
宏实现、时序优化映射、复制寄存器
NGR文件NGC文件LOG文件
功能仿真(Simulation->behavioral)
功能仿真可以对工程设计文件进行初步的功能验证。仿真软件将HDL语言转换为抽象的逻辑电路,忽略信号在逻辑器件和传输线上的延时,并对应各种可能的输入信号仿真得到设计工程的输出信号,检验输出信号是否满足预期的要求。
功能仿真需要创建Test Bench文件。
工程实现(Implementation)
工程实现包含以下四个步骤:
Translate—将综合后的网表文件NGC和约束文件UCF融合到同一个Xilinx的设计
文件PCF中。
Map—将设计中的功能器件映射到工程设计的目标器件资源中。
Place and Route—对映射后的目标器件资源进行布局和布线,满足时序约束。
Generate Programming File—生成可以下载到器件中的比特流文件,对器件进行
编程配置。
时序仿真(Simulation->Post Route)
对经过布局布线后的仿真模型加入延时文件进行仿真的过程,他将最基本的门级延时计算在内,模拟工程设计在FPGA器件内的实现过程。经过时序仿真后的设计基本上与实际电路是一致的。
时序仿真的基本参数:
时钟周期Period:最小时钟周期是指信号从一个触发器或锁存器的输入端,经过
一系列的组合逻辑单元和信号线,到达下一个同步器件,所用的最长时间。
端口到建立时间(Pad to setup time):信号从进入fpga芯片,经过一系列的逻
辑元件和连线,到达一个同步器件(触发器、锁存器或存储器)的输入端所用的最
长时间。
时钟到端口时间(Clock to pad time):数据信号从触发器或锁存器的输入端口,经过逻辑单元和连线时延,到达fpga芯片的输出管脚的最长时间。这个时间在约
束文件中称为OFFSET OUT AFTER约束。
端口到端口时间(Pad to pad time):数据信号从输入端口进入fpga芯片,经过
一系列逻辑元件和连线延时后到达fpga的输出端口的最大时间。
器件配置
利用iMPACT工具将比特流文件编程到fpga中。
第二章 VHDL硬件描述语言
基础知识
fpga电路设计的四个层次:行为层次(Behavioral)、寄存器传输层次(RTL, Register Transfer Level)、逻辑门层次(Logic)和布图层次(Layout)。
行为层次主要关注模块的功能描述和仿真验证,寄存器传输层次要关注模块的可综合电路的实现,逻辑门层次考虑如何用门级电路实现给定功能,布图层次考虑如何将电路适配到fpga的资源中。
2.2VHDL基本结构
实体与构造体
实体与C++中的类相似。
构造体的行为描述通常采用process进程语句实现。
构造体的数据流描述方式主要使用VHDL语言中的标准布尔函数,将信号之间的布尔代数关系用布尔方程式来表示。
结构体的结构描述主要通过下层模块的声明和调用及端口映射将下层模块相连。
Generic参数声明类似于C++语言中的类属参数声明。
library IEEE;
use COUNTER is
generic( COUNT_WIDTH :INTEGER:=7);
port( RST, SET, CLR :in STD_LOGIC;
SETVALUE :in STD_LOGIC_VECTOR(COUNT_WIDTH downto0);
COUNTOUT :out STD_LOGIC_VECTOR(COUNT_WIDTH downto0) );
end COUNTER;
库
用户自定义库时,先用关键字library说明要引用的库名,然后用use语句打开库中程序包。在计算机中新建一个文件夹,将文件夹名改为用户自定义“库名”,将编辑的程序包等以文件形式存在该文件下,此时该文件夹即为用户自定义库。
在ise中自定义library时,首先要新建library,然后编写相应的程序包,并将程序包移到(move to library)该library中,然后就可以使用use <库名>之类的语句了。
程序包
程序包的作用是收集被多个VHDL实体共享的数据类型、子程序或数据对象,使其适用于更一般的访问和调用范围。
配置
一个实体可以声明多个构造体,但形成最终电路时,只能使用一种结构体作为功能实现的描述,这时就需要使用配置将实体与结构体连接起来。配置不是从属单元,可以独立存在。通常在使用时都会将配置单独写入一个文件中。