《基于FPGA的快速系统原型开发》CH3.2.2译
0赞在抽空翻译第三章的同时,特权同学也陆陆续续的细读到了这本书的第14章。体味最深的两个字叫“精彩”,感觉最想说的四个字叫“相见恨晚”。书中所阐释出来作者的点滴经验 之谈都有些似曾相识,要是能够再早一些看到这些,也许可以再少走很多弯路。但是,书中有更多我所未曾经历未曾领悟的东西,这样一本“葵花宝典”是值得每一 位FPGA工程师用心去学习的。就如riple兄所言,也许对 于我们这些已经入了门,市面上国内出版的书都懒得去翻的时候,也许我们更需要这样一本能够带领我们身临其境的进入开发设计中每个环节(细节)的好书。
我也不得不承认,在逻辑设计领域,我充其量不过只是个新手而已。项目做得还不够多、不够深、不够 广,但这一点都不影响我对FPGA开发设计的热爱,也唯有抱着“谦卑谦卑再谦卑,追求追求再追求”的心态,才能够长久的在这个领域持 续长进。也正是因此,我才格外推崇这本书。
特权同学的E文水平也确实够烂,但是 很庆幸有我的另一半做最坚强的后盾,花时间花心思核对修改这些对她而言也许是很枯燥乏味的文字。在这里再次表达我的爱意和谢意。
个人时间、精力以及能力所限,不可能翻译得尽善尽美。还希望各位网友多提宝贵意见和看法,大家齐心 协力尽可能原汁原味的用中文诠释作者的意思。
下面送上新鲜出炉的3.2.2小节的原文和译 文。
3.2.2结构和设计阶段
结构需求定义是开发 流程中至关重要的阶段。使用可编程逻辑架构的系统通常会有很多可行的方案。从系统如何更有效的被定义、实现、调试和测试方面而言,这些方法是有优劣之分 的。定义好通信接口也是该阶段很重要的一个任务,这将有利于与其他系统模块或单元间的通信。同时也必须定义好每个模块需要和期望的功能。需要注意的部分包 括面包板电路搭建、使用评估板进行性能测试、市场调查和设计余量。
在设计阶段将设计部 分概念化是有益的。在此阶段可以如同利用面包板一样模拟实现各种概念和功能。使用一些工具评估设计的潜在性能和特性(使用功耗评估工具计算可能的功耗;使 用评估板或演示板从硬件上测试关键功能和性能,以帮助进行元器件和工艺的选择;评估资源需求时可简化类似的复杂功能)。评估板上如同面包板的功能有助于设 计团队对计划的设计结构树立信心,也有助于验证性能、减少设计风险和缩短项目日程。模拟功能实现比实际仿真的风险低得多,因为基于硬件的设计实现能够更容 易的测试真实世界的数据流和控制信号。
使用评估板考察功能 是否达到预期的设计功能和性能水平,这将有助于提高用户自信心。评估板为评估不同的设计方式和实现特定的设计功能提供了可靠的平台。尽量使用含有规模和结 构与最终的目标FPGA器件相近(相同的FPGA系 列的型号)的板子进行评估。如果实现了既定功能的目标板是不同系列或待产的FPGA,则需确认目标FPGA和评估板上的FPGA有什么差异。
当考虑用评估板对电 路实现做试验时,事先做一些分析,确保测试功能可以在目标设计中实现,并确保付出的资源满足试验结果。设计团队的注意力绝不可偏移设计的核心部分。核心以 外的设计工作需要有一个评估的标准,验证它是否可以集成到设计的核心中,并且不会比核心部分的实现花费更多的时间。但是,在开发板上的测试平台搭建所做出 的实现、调试和评估努力可能超过直接有益于设计所做出的努力,这是进行评估测试的风险。
使用评估板有助于发 现需求冲突和歧义。在设计周期中尽早纠正需求问题将避免设计努力付诸东流。在进行评估模拟设计同时也要考虑正式的设计与需求,以保证设计工作没有偏离核心 部分。市场调查在所有工程领域都很重要,它在评估与FPGA技术相关的复杂并相互关联的决定时更是 具有独特的价值。
在做出厂商、零件和 工具的选择时,市场调查是很重要的。他们有益于记录设计决策以及产品的经营回顾和前景分析。如果影响项目的关键决策是由直接设计团队以外的人员做出的,那 么设计团队可以通过所收集的信息更多地向决策人员阐释其产品,并促使决策人员做出更多有利的决策。
市场调查能够有效的 跟踪原本难以组织和分类的多样化的科目。不同系列的FPGA器件有许多相似之处,通常他们之间也许 只有唯一的差别,这是需要评估的地方。商用移动终端市场的产品开发就是一个例子。这类应用要求FPGA具 有小封装、低功耗、小外形和低成本。哪个需求是最重要的呢?哪个需求是最不重要的?那些需求具有同等重要的地位?哪些需求具有优先权?如果优先权改变了 呢?这些问题不能独立的进行分析,又必须及时果断的做出决定。为解决这些问题需要尽可能的收集和整理相关信息,从而对这些关键的设计因素进行比较。
市场调查能够为组织管理各种设计因素提供有效的方式。横坐标列出了厂商、器 件系列和被评估的特定型号。纵坐标列出了可能影响设计的相关的和不相关的因素。这些因素和选项可能有主次之分。一个市场调查的例子如表3.2所示。
表3.2
厂商 |
型号 |
封装 |
I/O |
速度 |
逻辑资源 |
移植性 |
成本 |
工具集 |
其他特性 |
设计项 |
选项1 |
选项2 |
厂商 |
||
型号 |
||
封装 |
||
可用I/O数量 |
||
速度 |
||
逻辑资源大小(Slice) |
||
移植性 |
||
成本 |
||
工具集 |
||
其他特性 |
市场调查表格也可以 包含备注、人力资源、人力的工作经历级别(及其能力级别)、相关设计工具的优点、工具的成本、前期内部的经验等项目。这种表格将能够将影响决定原料、元器 件和工艺选择的各种设计因素集中在一起。
随着市场调查的进行,各种趋势与关系将变得明朗。其格式必须是可以直接比较 各个项目的特征、优点与缺点才可称得上是正确。这个格式也能够突显尚需进一步研究的事项。
FPGA的设计余量很重要。 由于FPGA设计的灵活性,产品在寿命终结之前可以不断地进行功能增强和设计扩展。被选择的FPGA器件至少必须实现项目初始定义的功能需求。理想情况下,被选择的器件系列、型号和封装必须支持必要的 功能扩展。设计余量大小的选择具有一定的挑战性。没有足够的设计余量,额外的功能将无法实现。余量过大,产品过多的资源无法得到充分利用,也会给产品带来 额外的成本负担。
影响余量的另一个因 素是需要相对准确的评估资源需求。通常地,评估是建立在最大和最小资源需求的基础上。余量的评估决定所基于的设计因素包括风险、预期的准确性、将来潜在的 功能需求和预算。额外的设计余量应该作为设计阶段风险的一部分来考虑。
需要考虑的余量应该包含管脚数量、逻辑资源大小、存储量、处理器性能、处理 能力、速度和固定的硬IP功能。它们中的某些单元具有一定程度的灵活性,因为一些额外的功能可以被 塞进一些小的封装资源中。另一些设计单元诸如存储器或实现“硬”以太MACs则相对固定,如果资源 不足则很难在设计中实现。
设计的每一部分都应该考虑到未来可能的功能扩展所需的资源预算。每一个设计 模块都应留有余量,这个设计余量由系统的目标余量与各个模块的设计风险和潜在设计扩展所需余量共同决定。
最后还应该验证每个模块所使用的资源是否在所分配的范围内。如果一个模块即 将超出(或者是远不及,或者是远远超过)预算范围,系统工程师应该及时了解情况,重新审视总体设计预算(以及相关余量)。理想状态下,整体设计余量与各个 模块的余量应能够满足预期的功能扩展,并且不超出整体的资源预算范围。
设计分割
为了增强对设计变化 的兼容能力,一个很重要的方法是根据实际情况进行子系统的分割。在快速开发中,相互独立的设计团队可以同时进行单独的子系统开发。这就要求独立的开发模块 按照特定的需求定义,便于独立开发与设计。根据设计的要求,各个独立开发模块可分别由不同区域、不同专业知识的专家完成。所有模块被相互高度独立 的设计是最理想的状态。这有助于隔离功能实现相关的风险,并允许在不影响其他设计模块的实现的情况下进行某些设计模块的更新。
如果独立模块的设计 功能已被准确的定义、实现和验证,使用模块化设计方法能够使设计整合阶段的进展更加平稳。如果在不使用高度独立的模块化实现方法的情况下,开发流程中的任 何变更都将影响设计的很多其它部分,设计更新也就变得复杂且耗时。模块化设计的关键元素是时序和设计模块的接口,它包括了FPGA内部之间以及FPGA和外部器件之间的电路。但 是也要注意在保证所需的功能同时尽量减少子系统的数量。
在评估功能性设计项时,可以考虑各种可能的实现方法。绘制 一副高层次的详细的FPGA系统模块框图。绘制一副包含详细的接口的功能级模块框图。初步设计阶段 尽可能与系统模块和设计块的定义相符合。并时刻注意在结构和设计阶段很可能进行的设计需求的更新。
如果采用了分等级的设计输入方法,细心的进行设计分割是非 常重要的。如果不止一个设计团队在设计的不同阶段进行工作,或者设计的各个部分将独立的进行仿真,那么将更加突显设计分割的优点。
相比于拙劣的设计分割,深思熟虑过的设计分割将使从事独立 模块设计的工作容易得多。如果不止一或两个人或者设计团队在设计的不同阶段进行工作,或者设计的各个部分将独立的进行设计,那么设计分割也将带来更多的好 处。最坏情况下,低劣的设计分割将影响到系统功能性和运行速度。设计分割的结果通常是将设计工作按照具有一定等级结构的层级和群组组织起来。设计边界的选 择将会极大地影响布局布线和总体编译效率。对相关功能模块或具有许多共用信号的模块进行归类,这将会极大的优化于布局布线过程。分离的部分有不同的设计目 标(性能、范围等),这就允许设计者根据特定的设计模块进行合适的编译优化。如果可能,分割的边界信号最好是寄存器直接输出的信号。避免分割组合逻辑信 号,因为这会阻碍组合逻辑优化。以下是考虑分割时必须牢记的事项:
l 相同的功能划分为一个模块
l 有许多共用信号的功能划分为一个模块
l 以寄存器输出作为模块间接口信号分界
l 以寄存器输出作为群组间接口信号分界