9.1 FPGA系统设计的3个基本原则9.1.1 面积与速度的平衡互换原则 在FPGA设计领域,面积通常指的是FPGA的芯片资源,包括逻辑资源和I/O资源等。速度一般指的是FPGA工作的最高频率。和DSP或者ARM芯片不同,FPGA设计的工作频率不是固定的,而是和设计本身的延迟紧密相联。 在实际设计中,使用最小的面积设计出最高的速度当然是每一个开发者追求的目标。但往往面积和速度是不可兼得的。想使用最低的成本设计出最高性能的产品是不现实的,只有兼顾面积和速度,在成本和性能之间有所取舍,才能够达到设计者的产品需求。
1.速度换面积所谓的速度优势指的是在整个FPGA设计中,有一部分模块的算法运行周期较其他部分快很多,这部分模块就相对与其他的部分具有速度优势。利用这部分模块的速度优势来降低整个FPGA设计的使用资源就是速度换面积原则的体现。 速度换面积原则在一些较复杂的算法设计中常常会用到。在这些算法设计中,流水线设计常常是必须用到的技术。在流水线的每一级,常常有同一个算法被重复的使用,但是使用的次数不一样的现象。在正常的设计中,这些被重复使用但是使用次数不同的模块将会占用大量的FPGA资源。 随着FPGA技术的不断发展,FPGA内部越来越多的内嵌了DSP乘法模块,为一些常用算法的实现提供了很大的方便,也大大提高了运算的速度和能力。因此,在以往设计中那些被重复使用的算法模块的速度可以很高,即相对其他部分具有速度优势。 利用这个特点,重新对FPGA的设计进行改造。将被重复使用的算法模块提炼出最小的复用单元,并利用这个最小的高速单元代替原设计中被重复使用但次数不同的模块。当然在改造的时候必然会增加一些其他的资源来实现这个代替的过程。但是只要速度具有优势,那么增加的这部分逻辑依然能够实现降低面积、提高速度的目的。 如图9.1所示,是一个流水线的n个步骤,每个步骤都相应地运算一定次数的算法,每个步骤的算法都占用独立的资源实现。其中运算次数方框的大小表示占用的设计资源。 图9.1 未使用速度换面积的流水线算法 假设这些算法中有可以复用的基本单元,并且具有速度优势,那么就可以使用如图9.2所示的方式实现面积的节省。在这种方法中,通过将算法提取出最小单元,配合算法次数计数器及流水线的输入输出选择开关,即可实现将原设计中复杂的算法结构简化的目的。 2.面积换速度9.1.2 硬件可实现原则 DoSomething(); //实现函数的重复调用 在C语言下运行没有任何问题,但是在Verilog HDL的环境下编译就会导致综合后的资源严重浪费。所以for语句在Verilog HDL环境下一般只用来做仿真或者行为级的描述。那么for语句在HDL语言中如何实现呢?有几种不同的模式,其中最常见的是以下方式。 reg[3:0] counter; //调用次数计数器 if (syn_rst) else always @ (posedge clk) begin //使用case语句实现分支调用, 4’b000: DoSomething; //实现该语句的重复调用 … … endcase 9.1.3 同步设计原则图9.4 Cyclone LE结构图 因此,单纯的使用异步电路也并不会节省触发器的资源。或者说,使用同步设计电路,并不会带来FPGA资源的浪费。但是全同步的设计对于FPGA的仿真验证是有好处的。因为电路的所有动作都是在相同的时钟边沿来触发,可以减少整个设计的延迟,提高系统的工作频率。
|