水煮FPGA 传统FPGA设计流程简介
FPGA? Field Programmable Gate Array 可编程逻辑器件 适合高密度,复杂时序逻辑 供应商: Xilinx、Altera、Actel、Lattice、Quicklogic
FPGA结构 可编程IO 可编程逻辑单元 LUT(查找表) 寄存器 布线 全局线(低Skew、强驱动) 普通互连(长、短) 专用进位链 内嵌功能单元 PLL/DLL RAM DSP SERDES ……
DCM IOB XC3S50 overview Switch box CLB RAM&DSP Lan (global、short、long)
LUT Register 进位链 XC3S50 CLB overview
FPGA设计流程 电路设计 功能仿真 综合 综合后仿真 布局布线 布局布线后仿真 板级仿真(optional) 加载配置,在线调试
FPGA设计平台 ? Xilinx ISE — 界面简洁的工具接口 Altera Quarters II — 高集成度的工具箱 MAXPLUS II ?
模型设计 数字系统模型设计层次 ESL Behavior level RTL Gate level 设计输入 SystemC, SystemVerilog HDL 原理图 — simple 网表 – IP core TOP DOWN
高性能电路HDL描述 1、提升频率 算法:并行、乒乓、流水线……合理按排数据流 结构:源逻辑复制,减少扇出…… 2、减少资源、功耗 资源共享,时钟使能
功能仿真 Tools Modelsim VCS NCsim …… Working in Test Bench 建议在设计中估算并加入延时信息 测试激励 测试目标 测试监控 Test Bench
综 合 将模型映射到现有资源 Tools Synplify Pro – for most FPGA XST – for xilinx FPGA Quartus – for Altera FPGA ……
可综合HDL设计 HDL是描述性语言,非设计语言,原则上先有电路后有HDL。 可综合的特点:可以直观反应到一个或几个具体的简单电路上 if()…else… mux2 always @( posedge clk) begin … DFFs end for()… ? a÷b ? 传说中可综合的RTL不一定可综合 对应的映射区间限制在FPGA现有的资源内
HDL模型优化 — 我们的目标是,没有不确定性 — 不要让综合器替你做决定 用HDL设计描述你的设计 尽量使用厂商所提供的库 使用综合约束
A+B+C+D or Example
综合约束 模型优化(speed、area) 模型映射自由度 设置方式: 1、菜单选择 – for global 2、HDL内嵌入 – for special 3、约束文件编辑
优化目标 优化力度 FSM选项 资源识别 Example
综合结果观察 1、综合报告 资源利用率 最大设计速率 – 注意你的Warning 2、RTL View/Technology View 跟踪、分析关键模块、路径
Synplify Pro RTL overview Technology view Critical path Net/port/inst
综合后仿真 目的: 验证综合后的实际功能与模型所描述功能的一致性 添加器件延时信息,初步验证时序(optional)
实 现 流程 布局 单元放置 物理综合(optional) 布线 单元连接 单元重放置 组合逻辑优化(复制,交换) 时序逻辑优化(复制,平衡) 布局后仿真
约束 附加约束 唯一人为干预实现过程的接口 决定实现效果好坏的主要因素 约束不会提升设计的最佳性能,同综合一样,它只增加实现过程的可控性,结果的唯一性 PIN 分配管脚、电压标准 驱动能力、速度 输入延迟 端接阻抗 Timing …… Area 附加约束
Area Constraint 绝对位置 触发器 LUT RAM/DSP ……(primitive) 绝对区域 模块 group of primitive 相对位置 …… (primitive) 相对区域 指定布线 net
Floorplanner overview 区域约束 模块列表 Map结果
!区域约束主要目的是关联耦合逻辑,减少后续布线压力;其次是加大资源利用率。 !靠的近信号延迟不一定就小,信号线上延迟主要来自线与线之间的转接(如LUT,switch-box)。由于FPGA内部连接的结构是横纵两向的,斜向的连接延迟会大于横纵方向上最大跨度连接。所以,在做位置约束时尽量避免斜向;而区域约束要松,如果没有资源上的顾虑,约束面积建议为所需的3倍以上。 !对时序的改善贡献很小,紧的约束甚至有恶化时序的可能。
Timing Constraint 端口输入输出约束 IO端口 时钟约束 单时钟域约束 同步器件 多时钟域约束 关联时钟组 Skew约束 同源时钟 线延迟约束 net TIG all 设计的最高速度已经由设计的构造和器件的性能决定,时序约束只提供了设计需求,明确了设计内部各单元哪些需要被优待,哪些可以随意。所以,没必要在时序上加上很紧的约束,跟自己的电脑过不去,还浪费青春,浪费电。适可而止才是正道。
布局布线后验证&仿真 时序分析 动态时序分析 需要测试向量 效率低 覆盖率不能保证 静态时序分析 不需要外部测试激励 效率高 全覆盖 精确度不高
STA时序模型
TPmin = Tcko +Tdelay +Tsetup -Tskew Tcko + Tdelay - Tskew ≥Thold Slack = Tp - Tpmin
Xilinx STA tool overview !尽量保证实现结果留有一定的余量
后仿 仿真模型 时序标注 .sdf文件 提供三种延时值,最大、典型、最小 打印信息 $setup, $hold, $recovery # ** Error:/path/to/xilinx/verilog/src/simprims/X_RAMD16.v(96): $setup(negedge WE:29138 ps, posedge CLK:29151 ps, 373 ps); # Time:29151 ps Iteration:0 Instance: /test_bench/u1/\U1/X_RAMD16\ 要求时间 相关信号 出错模型 错误类型 信号最后改变时间 错误报告事件 出错位置
END…