《FPGA快速系统原型设计权威指南》读书小结

目录

 

前言

概念一:FPGA工程师需要的技能

概念二:FPGA架构相关基础内容

概念三:FPGA工程的稳定性

概念四:FPGA设计实现

         概念五:设计约束与优化


 

 

前言

本部是个人阅读的一些粗略总结,更多详细内容请阅读原著《FPGA快速系统原型设计权威指南》。可参考阅读英文原著《Rapid System Prototyping with FPGAs》PDF版

坚持,每读一本书,做个总结。

 

 

 

概念一:FPGA工程师需要的技能

今天的FPGA工程师可能需要精通系统级的设计,功能划分,嵌入式处理器的实现,DSP算法的实现,HDL设计输入,仿真,设计优化和高速电路板的布局,以及信号接口的设计。一个全能的FPGA工程师可能需要来自系统、软件和硬件工程的设计技能,其中关键的技能领域包括:基本和高级的FPGA设计实现,嵌入式处理器的实现,IP的实现和高速板级设计。

概念二:FPGA架构相关基础内容

基本的FPGA架构包含:逻辑块,布线矩阵和全局信号, I/O块,时钟资源,乘法器,存储器,高级特性。

 

(1)基于SRAM的FPGA架构相关介绍

FPGA内部包含许多逻辑阵列块结构的集成电路,这些逻辑块可以通过FPGA内部可配置的互联布线矩阵进行连接。逻辑阵列的周边是I/O块,它们可以配置成不同的接口标准。

基于SRAM的FPGA架构简化框图

 

 

(2)最小的FPGA逻辑块,可以被称为逻辑单元(logic cell)、切片(slice)、宏单元(macrocell)。传统的切片通常包含一到多个N输入查找表(look_up_table,LUT)以及一到多个触发器、信号布线选择器、控制信号、进位逻辑。

(3)FPGA的布线矩阵与全局信号

FPGA器件中最基本的布线单元是水平、垂直布线通道和可编程布线开关。

FPGA用于连接布线开关和CLB的另一种机制是进位链逻辑。进位链逻辑的方向一般是水平或者竖直的,这取决于FPGA期间的架构。进位链逻辑一般用于在逻辑架构中实现大规模的高效算法功能。

全局布线资源具有低偏斜(skew)的特性,资源一般比较有限,通常为高性能和高负载信号预留,一般会保留给高性能和高扇出的信号使用,最典型的是时钟和控制信号(如复位信号)。一般可以让软件工具自动分配全局布线资源,也可以手动添加设计约束或设置工具选项实现全局布线资源的分配。

当时序不能满足设计要求时,往往需要检查布局布线报告,确认全局布线资源的使用情况:全局布线资源有木有用尽?有没有关键的信号没能布放到全局布线资源上?有没有非关键的信号被错误的放到全局布线资源上?

当上述问题发生时,需要检查设计的约束和工具的设置,必要时需要改变设计的时钟或复位方案。

(4)FPGA的时钟资源

时钟变频主要基于两种不同的计数,即锁相环(phase-locked loop,PLL)和延迟锁相环(Delay lock loop,DLL)。

PLL通过调整压控振荡器来生成需要的输出时钟相位或频率。PLL是基于模拟电路实现,所以需要干净的电源和地环境。

DLL是数字电路,它是通过在输出时钟和反馈时钟之间插入多级的延时来实现设定频率和相位的时钟输出。

 

概念三:FPGA工程的稳定性

FPGA编译结果不应当在功能上受到非相关HDL代码修改的影响,不应该依赖于操作系统,甚至很大程度上不应当依赖于综合工具和实现工具的版本。在实际工作中,经常会遇到“找版本”的情况——设计者通过在HDL功能等价的多个版本或综合工具和实现工具的多个开关选项上反复编译得到多个配置文件并一一上板测试,最终发布一个“稳定”的版本。这种称为“经验”的做法往往不能被后续项目维护者重现,并最终造成项目维护的低效率甚至失败

当设计者遇到上述问题时,即逻辑设计和物理实现的行为不一致时需要考虑采用的HDL语法风格是否会导致逻辑仿真工具与综合工具对特定代码段的行为解释不一致的情况,需要考虑内部时序约束、输入/输出时序约束、引脚属性约束是否存在正确性和完整性问题。这些被忽视的隐患往往能够从综合、实现和时序分析报告中以警告的形式体现出来。例如,时序分析的结果报告出多个未约束的时钟信号或逻辑路径,甚至是时序约束目标没能达到。

 

概念四:FPGA设计实现

(1)同步设计指导原则

1不要使用门控时钟(避免使用门控时钟,避免使用内部逻辑或者分频产生的时钟)
2有效使用低偏斜的全局时钟
3使用时钟使能,而不是生成额外的时钟(使用时钟使能信号而非门控时钟)
4使用时钟模块生成稳定的相控时钟
5使用专用的时钟模块和布线,达到最小时钟偏移
6避免使用门控的异步置位和复位
7利用寄存器缓存异步输入信号,以避免竞争问题
8根据功能来划分结构模块的层次(可以简化时序约束和时序分析)
9根据时钟和功能划分底层模块,以支持综合工具的综合优化技术
10当需要多个时钟时,尝试单独使用一个层次模块实现同步。这样可以更容易进行设计的分析、复查和调试。

(2)层次化设计

当设计划分成不同模块时,要考虑清楚实现的接口和功能。其中一个重要的环节是分析设计的数据流。定义明确的接口可以简化调试,减小集成难度。通常在接口设计上很容易出现疏忽、异常和漏洞。模块的接口最好设计成同步,跨时钟域的接口需要格外注意。在接口上添加寄存器可以简化综合和布局布线。避免同一个模块内使用混合的时钟域,尽量保持时钟之间的隔离。时钟域的隔离有助于增量式综合,提高时钟管理。

层次化设计注意事项
1控制设计模块的大小
2尽量根据常用功能划分设计模块
3多使用定义明确的设计模块,实现资源共享
4恰当的对独立模块进行局部约束
5谨慎定义模块接口,保证模块之间的同步
6谨慎处理跨时钟域的情况
  
层次化设计文件关系

 

(3)HDL编码指南

设置综合和实现工具的选项以及优化等级(effort level)对设计所产生的影响还是相对有限的。尽管使用的工具可以影响最终的设计,但主要的结构还是由原始的设计选择和实现决定的。另一种影响设计的重要因素是,实现特定设计架构的编码技术。总而言之,原始设计的结构和代码实现方式对整个设计的性能影响最大。只有掌握了所选取的HDL、综合工具、目标FPGA器件上的架构和资源,以及三者之间相互作用的细节,设计才能获得更优异的性能。

HDL编码方法的建议
1尽量使用case语句,而不是嵌套if-then或者if-then-else结构。
2尽量避免case语句或者if语句超过三层嵌套。
3利用圆括号引导FPGA结构的逻辑实现。
4在构造算术功能的时候,尽量使用算术运算符,而不是同等的逻辑表达。
5当以设计灵活或者设计可移植为目标时,优先使用推译(inference)。
6当以预期性能或资源利用率为目标时,优先使用例化。
7当希望充分利用特殊架构及其特性时,优先使用例化。
8在使用case语句时,要么定义所有可能出现的情况,要么添加when-others语句。

(4)实现可综合的设计

掌握下面所罗列的信息有助于提升可综合设计的性能。

1使用VHDL/Verilog中可综合的子集,来完成设计的输入。
2选择合适的目标器件的系列和型号
3添加设计约束:
 (1)确定设计的时钟频率(或者在多时钟的情况下,确定各时钟的频率以及它们之间相位/时序的关系)
 (2)确定输入信号的延迟
 (3)确定输出到信号终端的时序要求
 (4)确定输入信号的边沿变化率
 (5)确定输入信号的驱动能力
 (6)确定FPGA内部信号负载
 (7)确定FPGA的工作环境

 

概念五:设计约束与优化

约束的基本类型有4种:综合约束、I/O约束、时序约束、布局约束。

综合约束影响从HDL代码综合得到RTL网表过程的细节。

I/O约束(通常也称为引脚分配)主要用于将信号分配到特定的I/O引脚或I/O组。

时序约束用来指定设计的时序特性。时序约束会影响所有的内部互联路径的时序:经过LUT的组合逻辑延时、两触发器或寄存器之间的时序逻辑延时。时序约束要么是全局约束,要么是针对特定路径的局部约束。

布局约束主要用于把特定的逻辑电路映射到FPGA芯片某一范围内的物理资源上。布局约束可以指定设计模块两两之间的相对位置,也可以指定设计模块在FPGA芯片颞部的固定位置。

(1)设计约束管理

约束实施的最重要问题之一是约束之间广泛存在潜在的重叠和干扰。有效地实施设计约束要求设计者对系统需求和当前的设计实现方法具有扎实的认识和理解。

避免设计过约束

有效的设计约束要求对设计进行分析,并在指定和维护约束的过程中加以限制,以保持正确的约束平衡。

设计过约束通常以几种不同的方式发生,最常见的包括:不加分析的设置过多的约束,对设计的非关键部分设置约束,约束设置超出要求的性能水平。

这里给出避免设计“过约束”需要遵循的几个简单的指导原则。一开始仅对性能要求最高的电路设置约束,然后以迭代的形式增加额外的必要约束;对布局面积约束要留出显著的余量;避免对低性能电路设置不必要的约束。

本节提到如何避免“显示”的过约束,实际中还广泛存在一种“隐式”的过约束,即越少约束例外而造成的过约束。比如,没有明确约束时序上不相关的两个时钟之间的数据路径为“虚假路径(false path)”,这一路径往往在逻辑设计中已经采用标准的跨时钟域信号传递处理方法进行了可靠设计;或者,没有明确约束某些复杂逻辑运算为“多周期路径(multicycle path)”,针对复杂的数学或逻辑运算,设计者往往会采用间隔为两到多个周期的使能脉冲来控制何时运算结果有效,从而放宽对该路径的时序要求。这些在逻辑设计中采用了特殊处理方法的电路,都需要设计者通过“时序例外(timing exception)”来明确的传递给实现工具,避免实现工具在这些特殊路径上按照适用于全局的时钟约束来实现电路。实现工具在这些电路上做的额外工作不但没能提高电路的性能,反而会因为挤占了其他真正需要高性能电路的布局布线资源,造成电路整体的性能下降。通用的时序约束需要与经过谨慎分析的时序例外配合使用,使珍贵的布局布线资源得到合理的使用。

(2)综合约束

 

(3)引脚约束

引脚分配是迭代式的。在一个项目的生命周期内,伴随着设计变更和更新的发生,引脚也会多次分配。

有效的引脚分配需要详细的系统级设计知识,包括:电路板级FPGA器件与其他器件之间的关系和接口细节;目标FPGA器件的架构细节和产商推荐的FPGA器件级别的设计实现方式。

在设计要求的信号分配完成之后,对于“多余”的I/O引脚,应该评估其用于测试点、辅助I/O或用户自定义信号的潜在用途。

要从系统角度考虑电路板的功能。未来会增加哪些功能?为了实现这些功能,会用到哪些信号?是否可以把特定的信号布线到FPGA上,获得额外的状态查看或控制功能?哪些信号可以用作此用途?

在测试盒调试时,多余的I/O引脚的另一个关键用途是作为访问FPGA内部节点的接入点。把一组测试点布线到插头或连接器上,方便电路板与测试仪器的挂接,可以极大的简化设计周期中验证和调试阶段的工作。把一些引脚布线到方便连接的焊盘上也是很有价值的。在解决未来问题时,这些焊盘可以容易的连接所需的飞线。

FPGA时钟设计的一些指导:

把FPGA时钟按照优先级进行分组:

  • 高频率    、高扇出
  • 中低频率、高扇出
  • 高频率、   低扇出
  • 中低频率、低扇出

优先分配高优先级时钟。高速度和高扇出是FPGA时钟设计中两个最显著的挑战。具有这样特性的时钟应该分配给更高性能的全局资源。

管理低优先级时钟。尽管在全局资源可用时,低优先级时钟可以在全局资源上实现;但是低优先级时钟也可以通过标准的FPGA逻辑布线资源来布线。

(4)时序约束

时序约束有两大类:全局约束和特定路径约束。全局约束覆盖逻辑设计中的所有时序路径;特定路径约束针对特定的时序路径。

FPGA设计时序约束的一些指导原则:

a.识别和约束系统时钟。时序约束的第一步应该是对所有标识的系统时钟指定全局约束。

b.识别和创建信号路径分组。信号路径分组的两个基本类型是全局分组和特定路径分组。通常情况下,全局分组包括一组寄存器之间的路径、输入路径和输出路径。通常情况下,这些路径应该在同一个时钟域内。特定路径分组大部分是静态或组合逻辑路径、跨时钟域路径或多周期路径。

c.设置全局约束。设置约束的一般规则是使用全局约束覆盖设计中绝大多数的路径。

d.设置专用分组和个别路径的约束。对于设计中证明不适用于已经设定的通用约束的路径,需要使用特定路径约束。这些特定路径约束是:多周期路径(multicycle);虚假路径(false path);关键路径(比如,from:To)

 设计优化或约束
1、指定和遵循设计约束计划
2、逐步增加设计约束
3、按照先全局后特定的顺序进行约束
4、只添加足够的约束,以保证设计能够持续地满足功能和时序要求
5、要达到更高的性能,需要平衡并混合使用各种约束
6、设计者需要熟悉时序报告的语法和具体路径的分析

 

 

 

 

 

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值