请选择 进入手机版 | 继续访问电脑版
搜索
查看: 680|回复: 3

芯片设计的特殊考虑

[复制链接]
发表于 2017-5-12 13:14 | 显示全部楼层 |阅读模式
一. 芯片制造商和工艺的选择
  选择时一般需要考虑以下因素:
  • NRE费用(NonRecurring Engineering, 是指新产品开发过程中所发生的一次性费用﹐例如人力支出﹑治具支出﹑产品测试支出等);
  • 工艺能达到的最高工作频率;
  • 物理限制;
  • 功率限制;
  • 封装限制;
  • 时钟树的实现;
  • 布局;
  • 反标的支持;
  • 对库、单元和RAM等的支持;
  • 可用的IP核;
  • 可用的测试方法和扫描方式;
二. 设计的层次化
  芯片的设计一般采用层次化设计的方法,可简化设计和集成的难度。
  顶层(top level)一般包含以下几类模块:I/O管脚、时钟产生模块(如PLL)、模拟模块、JTAG以及核心设计(core design)。其中的核心设计才是实现芯片功能的部分,通常核心设计还会分为更多的层次化,这种层次的划分应该在架构设计阶段合理的规划。
21.png
三.  时序闭合性设计(Design For Timing Closure
  在深亚微米设计中,连接线的延迟大大超过逻辑门的延迟,对面积较大的芯片来说,设计中连接线延迟的不可预测性可能会对设计周期有很大的影响,这是由于综合过程中使用的线载模型(Wire-load Model)是基于统计设计的模型,当模块较大时估计的延迟与实际最差情况有较大误差,时序闭合性的设计具有较大的挑战。为了满足时序约束,可能需要增加单元的驱动能力,对于很长的线需要在门之间添加缓存以减小延迟。
  不同的设计风格对最终电路的时序闭合性有较大的影响,下面讨论在设计各个阶段需要注意的问题并给出设计建议,包括模块接口设计、同步/异步设计、时钟和复位策略以及物理设计等。
(1)接口设计
  良好的模块接口使得时序闭合无论在系统级还是模块级都成为容易实现的局部问题,最重要的技术问题是对较大的模块输入/输出加以寄存。
A. 模块接口
  主要模块(是指在版图设计过程中作为单元单独进行布局布线的模块)的输入和输出都应该加以寄存,这种方式可以保证时序闭合性局限在局部模块内部,模块之间有一个完整的时序周期用来传输,模块内部时序不会影响到模块的外部输入和输出的时序特性。必要的话,可以在顶层添加缓存来驱动模块之间的连线,而不需要重新设计模块接口。
22.png
  这种保护时序的设计在面积较大的芯片设计中经常使用,尤其是基于重用的SoC设计,因为保护时序的设计几乎是确保IP复用不受时序限制的唯一方法。值得注意的是,微处理器和高速缓存之间的接口是个例外,设计中一般将微处理器和高速缓存看做一个模块,它与系统其它模块的接口仍需遵循上述原则。
B. 子模块的接口
  对于任何在综合过程中作为单元单独进行综合的子模块都需要在输出端添加寄存器,将时序闭合性问题局限在局部。综合和时间预算(Timing Budget)是我们开始考虑时序闭合性的起点,因此在此基础上将问题局部化。需要注意的是,对于较小的模块(无须单独综合)不需要在接口加寄存器,过犹不及。
  下图,子模块A和子模块B在版图设计中作为主要模块的一部分加以布局布线,因此A、B在布局布线后将距离很近,以防因为连线引起时序问题。
23.png
C. 总结
  对接口加以寄存是可重用技术中最重要的技术,它是模块设计对整个芯片没有特定的版图设计要求,通过使得时序闭合成为局部问题,综合、静态时序分析以及时序驱动的布局布线工具都能更加有效的工作,只有在不可避免的情况下才可违反上述设计原则。
(2)基于触发器(Flip-flop)和锁存器(Latch)的设计
系统应尽可能使用基于触发器的同步设计。锁存器应该只用于实现小的存储器或FIFO,这些存储器和FIFO应该是同步并且边沿触发的,只有在不可避免的情况下才能违反该规则,并且应该有良好的文档说明锁存器的位置和功能
  基于锁存器的设计能增加芯片上集成的门数,内部延迟比触发器(由两个锁存器组成)要小,尽管设计复杂,但在过去的微处理器设计中较为流行。但随着工艺的进步,①深亚微米设计使得芯片上可利用的门数大幅增加,②连接线延时超过逻辑内部延时,③基于锁存器的设计复杂度随着芯片规模大幅增加,这几个原因使得目前芯片设计尽可能使用同步的基于触发器的设计。
(3)时钟策略
  时钟信号是芯片设计中最重要的全局信号,在设计阶段必须进行详细地规划。为了降低功耗以及与各种外围接口匹配,当前的大规模SoC设计中都含有多个时钟域。此外,设计者可能会在模块不工作的时候选择关闭该模块来降低功耗,这种方式相当于生产另一个不同的时钟域。
A.时钟规划
  即使是单时钟设计,使用该时钟驱动成千上万个触发器并且要求足够小的时钟偏移(Clock Skew),对时钟树的生成也是一个巨大的挑战。每个增加的时钟都会增加设计的复杂性,当数据在多个时钟域间交互时,很容易产生不稳态或者错误的数据,因此要小心处理多时钟设计,具体设计中应遵循以下设计规则:
  • 系统时钟的产生和控制逻辑应该与其他模块功能分开,这样使得设计者,可以为特定目的使用工具修改时钟逻辑时不影响其功能。
  • 使用尽可能少的时钟域,如果两个异步时钟域交互,应该在尽可能小的同步模块中交互,称之为同步电路(Synchronizer)。理想情况下,该模型应该仅包括为传输数据而使用的触发器。
  • 应该详细记录时钟域的数目和时钟频率,包括相关的锁相环(PLL)、外部时序特性(建立/保持时间)以及相关时钟域的偏移要求。
  • 如果使用锁相环产生片上时钟,应该提供关闭(disable)或旁路(by-pass)机制,这不但使得系统测试和调试更加容易,而且有助于使用硬件模型进行系统仿真。
  目前大多数设计使用平衡的时钟树结构来降低时钟偏移,由此而来的大量时钟缓冲(Clock Buffer,起到隔离和增加驱动的作用)大大增加了功耗,因此在系统级设计中要考虑到如何通过关闭时钟网络来降低功耗。
B. 硬核的时钟延迟
  由于硬核的版图设计已完成,在设计中必须考虑到内部时钟树较大的插入延迟,即从该硬核时钟输入引脚经过内部时钟buffer,到内部触发器时钟输入端的延迟,这种插入延迟可能会达到几个纳秒,这样大的延迟使得通过在输入引脚插入buffer来解决保持时间问题不太可能。因此,芯片设计者必须要求硬核供方提供详细地硬核时钟插入延迟信息,如果该延迟与时钟周期相比较小,可以通过在输入引脚插入buffer来解决保持时间问题,否则必须给该硬核提供一个较早到达的时钟,建议对硬核采用单独的时钟网络。
(4) 复位策略
  与时钟信号相同,复位信号也是全局信号,在系统级设计阶段对以下几个设计到复位策略的问题必须考虑清楚:
A. 是同步复位还是异步设计;
B. 是内部复位还是外部上电复位;
C. 是否有多个复位信号(如软复位/硬复位);
D. 是否每个主要模块可以单独复位(有助于调试).
  • 同步复位较容易综合实现,并不需要单独的布线复位信号,但需要一个时钟信号进行复位。
  • 异步复位需要在版图设计时特殊处理,插入复位Buffer树,但复位并不需要时钟信号;
  目前,业界对于使用同步和异步复位并无定论,在设计中最重要的是各个模块时候用相同的复位策略,就目前而言,多数设计使用异步复位策略。但需要注意的是,不管同步复位还是异步复位,复位信号都必须同步释放以避免不同的触发器复位在不同的是时钟沿,从而导致系统进入无序状态。
(5) 综合策略
  设计的时序、面积和功耗目标必须在系统级设计阶段仔细的考虑和权衡,综合对实现这些目标有很大影响,因此需要尽早地规划系统的综合策略。
  建议采用由底向上(bottom-up)的综合策略,每个主要模块有自己的综合脚本程序来满足该模块的内部时序要求,尽可能地在版图设计阶段将这些模块单独进行布局布线,而不是放到更大的模块中,从而使综合时使用的线载模型比较准确。

回复

使用道具 举报

发表于 2017-5-25 11:42 | 显示全部楼层
布线中对于连接线的要求其实是苛刻的
回复 支持 反对

使用道具 举报

发表于 2017-5-26 15:52 | 显示全部楼层
feixiang20 发表于 2017-5-25 11:42
布线中对于连接线的要求其实是苛刻的

芯片内部也需要布线吗?
回复 支持 反对

使用道具 举报

发表于 2017-5-26 15:58 | 显示全部楼层
乖乖妮 发表于 2017-5-26 15:52
芯片内部也需要布线吗?

芯片的内部布线比我们平时的PCB打样布线复杂的多了,不然的话一个小小的芯片怎么能实现这么多功能,对吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

facebook google plus twitter linkedin youku weibo rss
©2019 Microchip Corporation

小黑屋|手机版|Archiver|Tensilica技术社区

GMT+8, 2019-9-19 21:32 , Processed in 0.150119 second(s), 10 queries , MemCache On.

快速回复 返回顶部 返回列表