深入浅出玩转FPGA学习6——FPGA重要设计思想及工程应用
- 速度和面积互换原则
- 乒乓操作及串/并转换设计
-
- 乒乓操作
- 串/并转换
- 流水线设计
- 逻辑复制与模块复用
-
- EX1B
- EX2B
- 模块化设计
- 时钟设计技巧
-
- 内部逻辑产生的时钟
- 分频时钟与使能时钟
- 门控时钟
速度和面积互换原则
所谓速度,是指整个工程稳定运行所能够达到的最高时钟频率,它不仅和FPGA内部各个寄存器的建立时间、保持时间以及FPGA与外部器件接口的各种时序要求有关,而且还和两个紧邻的寄存器间(有紧密逻辑关系的寄存器)的逻辑延时、走线延时有关。所谓面积,可以通过一个工程运行所消耗的触发器(FF)、查找表(LUT)数量或者等效门数量来衡量。
速度和面积始终是一对矛盾的统一体。速度的提高往往需要以面积的扩增为代价,而节省面积也往往会造成速度的牺牲。因此,如何在满足时序要求(速度)的前提下最大程度地节省逻辑资源(面积)是摆在每个设计者面前的一个难题。
若从系统的角度来解释速度和面积的呼唤,可以如图所示。
流水线设计
流水线设计可以从某种程度上提高系统频率,因此常用于高速信 处理领域。如果某个设计可以分为若干步步骤进行处理,而且整个数据处理过程是单向的,即没有反馈运算或者迭代运算、前一个步骤的输出即是下一个步骤的输入,就可以考虑采用流水线设计方法来提高系统的工作频率。
在很多高速信 处理领域都运用了流水线处理的方法,如高速通信系统、高速信 采集系统、图像处理系统甚至很多处理器和控制器等。流水线处理方法之所以能够在很大程度上提高数据流的处理速度,是因为它进行了处理模块的复制,也很好地体现了面积换速度地思想。
如图所示,典型地流水线设计是将原本一个时钟周期完成的较大地组合逻辑通过合理的切割后分为多个时钟周期完成。这样一来,该部分逻辑运行的时钟频率会有明显的提升,尤其当它是一条关键路径时,采用流水线设计后整个系统的性能都会得到提升。
逻辑复制与模块复用
逻辑复制是一种通过增加面积来改善时序条件的优化手段,它最主要的应用是调整信 的扇出。如果某个信 需要驱动的后级逻辑信 较多,换句话说,也就是其扇出非常大,那么为了增加这个信 的驱动能力,就必须插入很多级的Buffer,这样就在一定程度上增加了这个信 的路径延时。这种情况下就可以复制生成这个信 的逻辑,用多路同频同相的信 驱动后续电路,是平均到每路的扇出变低,这样就不需要插入Buffer就能满足驱动能力增加的要求,从而节约该信 的路径延时。
EX1B
如图所示,从EX1B代码综合出来的RTL视图来看,ADDER内部使用了两个加法器,分别做好了(a+b)和(c+d)的运算,然后把结果送到后端2选1选择器作为输入,所以此代码综合出了两个加法器和一个2选1选择器。
模块化设计
模块化设计是FPGA设计中一个很重要的技巧,它能够使一个大型设计的分工协作、仿真测试更加容易,使代码维护或升级更加便利。
如图所示,一般整个设计的顶层只做例化,不做逻辑,然后一个顶层下面会有模块A、模块B、模块C等,模块A/B/C下又可以分多个子模块来实现。
分频时钟与使能时钟
设计中往往需要用到主时钟的若干分频信 作为时钟,即分频时钟。可别小看这个所谓的分频时钟,简简单单不加处理的乱用时钟那就叫时钟满天飞,是很不好的设计风格。言归正传,如果设计中确实需要用到系统主时钟的分频信 来降低频率时,该如何处理呢r> 对于资源较丰富的FPGA,一般都有内嵌的多个PLL或者DLL专门用于时钟管理,利用它们就可以很容易地达到多个时钟的设计.输出时钟能够配置成设计者期望的不同频率和相位差(相对于输人时钟),这样的时钟分频是最稳定的。但是对于某些无法使用PLL或者 DLL资源的器件又该怎么办呢使用“使能时钟“进行设计,在“使能时钟”设计中只使用原有的时钟,让分频信 作为使能信 来用。
下面举一个实例来说明如何进行使能时钟的设计,该设计需要得到一个50MHz输入时钟的5分频信 即10MHz。
如图所示,使能信 不直接作为时钟使用,而是作为数据输入端的选择信 ,这样就避免了使用分频时钟。

这样的门控时钟电路很好地解决了组合逻辑常见的一些问题。 它避免了毛刺的出现,同时也有效抑制了亚稳态可能带来的危害。 但是从另一个方面来说,如果这个设计的系统时钟 (clk) 占空比不是很稳定 ,或者输出的使能信 (eoable) 与时钟信 (elk) 的逻辑过于复杂(不止这个例子中一个与门那么简单),那么它也会带来一些功能或时序上的问题。 总的来说,只要设计者控制好这个设计中时钟的占空比和门控逻辑复杂度,它还是比图 2.37 给出的门控时钟方案更可行。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!