FPGA 中的重要设计思想

401 阅读5分钟

1 速度和面积互换原则

速度指整个工程稳定运行所能达到的最高时钟频率,这不仅与FPGA内部各个寄存器的建立时间set time、保持时间hold time、还与FPGA与外部接口的时序要求,两个相邻寄存器间的走线延时,逻辑延时有关。

面积是需要消耗的触发器、查找表等。

速度的提升往往以增大面积为代价,二减少面积往往也会导致速度的牺牲。所以针对不同的问题需要做出合理的分析设计。

2乒乓操作及串并转换思想

乒乓操作: 乒乓操操作来对数据流的控制处理,一般是通过多个数据缓冲区实现数据的无缝缓冲与处理,乒乓操作通过对输入数据选择控制和输出数据选择控制,相互配合来回切换,使得经过缓冲的数据没有停顿地送到后续处理模块。

image.png 如上如图,外部输入数据通过输入数据的选择控制,在第一个缓冲周期将输入输入到ram1中,在第二个缓冲周期输入数据通过输入数据选择控制流入ram2的同时,ram1中的数据送到输出控制模块中,如此循环。实现数据的无缝缓冲和处理。 而中间缓冲的选择可以是双口ram,SDRAM,也可以是fifo。

串并转换:

串并转换也是高速数据流处理的一种方法,其原理就是通过移位寄存器将数据缓存,我最近一次使用就是通过三个寄存器,我的目的是同时输出三行数据,而每次输入是串行的,所以我是通过三个寄存器,即在原先输出一行数据的基础上增加两个寄存器,通过移位的方式,延迟两拍,等第三个行同步信号到来时,也就是第四行数据到来时,同时输出三个寄存器上的数据,实现并行输出。

其实除了寄存器也可以通过fifo,双口ram,SDRAM等。因为一行数据量很大,其实我这里使用的是fifo来缓存数据,通过对时钟信号的控制实现数据的移位。使得三行数据存储到三个fifo中。通过时钟做同步信号,这里就是使用了三倍的面积来实现了三倍的数据吞吐量。

image.png

3 流水线设计思想

流水线的设计思想将设计拆分成多个步骤来实现,这里整个数据的处理是单向的,没有反馈和迭代。 前一个步骤的输出是下一个步骤的输入。

比如我们要完成一个操作需要四个步骤,不采用流水线的设计思想我们每次输入输入都需要步骤一步骤二步骤三步骤四等四个步骤结束后才可以进行下一次操作,而流水线操作在每个步骤后加入寄存器进行时钟控制,第一个数据处理的时间和正常一样四个时钟周期,而第五个时钟周期的时候就可以完成第二个数据的处理,不考虑率第一数据的处理,侯旭东数据处理速度是之前的四倍。

image.png

4 逻辑复制和模块复用

逻辑复制,即类似的操作,我们通过分开来计算实现面积换取速度,比如我们要完成(a+b)*(c+d)

的操作,我们可以使用模块复用通过一个加法器和两个二选一选择器来实现,也可以通过逻辑复制使用两个加法器和一个二选一选择器。 逻辑复制使用两个加法器提高了速度。 而模块复用节省了面积。ac+bd。 只需要一个加法器。

5 模块化设计

FPGA设计中通过顶层模块的设计,顶层下面分为模块A,B,C等等子模块,各自完成子模块的设计与综合,可以使复杂的模块化为简单的多个模块。

6 关于时钟设计

时钟信号是整个设计最主要的部分之一,因为时序逻辑关系到功能是否可以很好的实现。而时序问题存在很多地方,组合逻辑的延时,内部逻辑时钟带来的毛刺,都会去影响功能点实现。

1 内部逻辑的时钟

由于组合逻辑的时钟不可避免存在毛刺,如果此时输入数据在变化过程中,那么将违反建立时间和保持时间的要求,影响后续电路的输出。 在需要使用内部逻辑时钟或者复位信号时候,我们在输出始终活着复位信号前,通过系统专用时钟PLL等打一排,避免组合逻辑直接输出,达到同步。 最好输出的时钟信号和复位信号使用的是全局时钟网络,可以提升系统时序能力,在我之前设计的分频器中,使用的方法直接输出的频率也是不能直接用作时钟信号的,因为不是全局时钟时钟,最好通过标志信号来传递相同的效果。但就是占空比不接近百分之50。

2 分频使能 与 使能时钟

分频使能 FPGA中常用的PLL DLL等都可以。 而时能时钟就是我在上面提到的 让分频信号作为使能信号来使用,使能信号不作为时钟使用,而作为数据输入端的选择信号,这样避免了使用自己设计的分频信号。