高级FPGA设计结构实现和优化word版2.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级FPGA设计结构实现和优化word版2

第2章 面积结构设计 本章讨论数字设计的三个主要物理特性的第二个:面积。本章也讨论在FPGA中结构的面积 优化方法。 要讨论通过选择正确的拓扑结构来减少面积的方法。拓扑指的是设计的高层次组织,不是 器件的特性。由综合和布局图工具执行的电路级简化指的是在设计的子集中最小化门数,可能 是器件的特性。 针对面积的拓扑是尽可能最大程度地复用逻辑资源,常常以流量(速度)为代价。为此经 常要求一个递归的数据流,其中一级的输出反馈到输入端进行类似的处理,这可以是简单的环 路,随着算法自然地流动,或者逻辑复用可能是复杂的,并要求专门的控制。这节描述这两种技 术,也根据性能损失描述必要的结论。 在这章的课程期间,将详细讨论以下的内容: ·在计算的不同级中为重用逻辑资源折叠流水线; ·当不存在自然的流程时控制对逻辑复用的管理; ·在不同的功能操作中共享逻辑资源; ·复位对面积优化的影响: ·缺少复位能力对FPGA资源的影响。 ·缺少置位能力对FPGA资源的影响。 ·缺少异步复位能力对FPCA资源的影响。 ·RAM复位的影响。 ·为逻辑实现优化利用置位/复位引脚。 2.1 折叠流水线 上一章描述了为改善流量用“拆开环路”来达到最大的性能,“折叠流水线”的方法是与其 相反的操作。当拆开环路产生流水线时,要求更多的资源保存中间数值,以及并行地运行需要复 制计算结构,都增加了面积。因而,当要使一个设计的面积最小化时,必须相反地执行这些操 作,即折叠流水线使得逻辑资源可以重用。所以,当优化在流水线级复制逻辑的高度流水线设计 时,应该利用这个方法。 折叠流水线可以优化在流水线级复制逻辑的流水线设计的面积。 考虑定点的分数乘法器的例子,在这个例子中,A表示定点刚好在最低有效位( LSB) 右边的归一化整数格式,输入B的定点剐好在最高有效位( MSB)左边,换言之,B与A 比例从O到1。 module mult8( output [7:0] product, input [7:0] A, input [7:0] B, input clk); reg [15:0]prod16; assign product=prod16【15:8】j always @(posedge clk) prod16=A*B; endmodule 由于这个实现,在每个时钟产生一个新的乘积。就寄存器的各别集合而言,在这个设计中没 有明显的流水线,但是,注意到乘法器本身是十分长的逻辑链,即添加中间的寄存器层很容易流 水线起来。希望“折叠”这个乘法器,用一系列的移位和加操作如下执行乘法将把它折叠起来: module mult8( output done, output reg【7:0】product, input 【7:0】A, input 【7:0】B, input clk, input start); reg 【4:0】multcounter; //counter for number of shift/adds reg 【7:0】 shiftB: //shift register for B reg 【7:0】 shiftA; //shift register for A wire adden; //enable addition assign adden=shiftB[7]!done; assign done=multcounter[3]; always @(posedge clk) begin // incrementmultiply counter for shift/add ops if (start)multcounter =0; else if( !done) multcounter=multcounter+l; //shift register for B if(start) shiftB=B; else shiftB【7:0】 = {shiftB【6:0】, 1b0}; //shift register for A if(start) shiftA=A; else shiftA【7:0】 = {shiftA【7】,.shiftA

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档