首页 理论教育 高效模块设计原则-来自《FPGA系统设计》

高效模块设计原则-来自《FPGA系统设计》

时间:2023-10-20 理论教育 版权反馈
【摘要】:在进行模块设计的时候,需要遵循一些基本原则:第一个经常遇到的问题就是存在多时钟的时候如何处理。遇到这种问题,设计人员要主动去把中间的粘合逻辑合并到第二个模块。可以通过在每个模块的输出都经过D触发器来坚持这一原则。除非所设计的电路是纯纯粹粹的组合逻辑,都要尽量践行这一原则。

高效模块设计原则-来自《FPGA系统设计》

我们之前说过,现在在进行大规模集成电路设计的时候,都是采用由顶向下的模块设计。在进行模块设计的时候,需要遵循一些基本原则:

(1)第一个经常遇到的问题就是存在多时钟的时候如何处理。通常一个项目既然依据由顶向下的思路来设计的话,都是一个大的模块,下辖几个小的模块,小的模块再下辖更小的模块。遇到多时钟的设计的时候,要坚持按照时钟的管辖范围来划分模块的范围。这就意味着有多少个时钟,就有多少个模块。确立这一个原则是为了更加方便的管理时序,不至于出现异步的问题。

(2)第二个经常遇到的问题就是:假如有2个模块,第一个模块的输出经过了一个小型的组合逻辑,然后传递到第二个模块。往往这个小型的组合逻辑就是简简单单的一个与或非门。我们通常把这种情况叫作模块之间存在粘合逻辑。综合器遇到这种情况,不会主动地尝试去把中间的粘合逻辑合并到第二个模块。这对于优化系统结构很不利。遇到这种问题,设计人员要主动去把中间的粘合逻辑合并到第二个模块。

(3)在做项目的顶层规划的时候,需要事先确定好这个项目到底会分为几个大的模块。通常一个模块会包含时钟、输入输出管理、复位、收发,以及其核心功能等特性比较强的各个部分。这各个部分之间有时候是交织在一起的。遇到这种情况,要实现把这些功能模块单独的分离出来作为一个子模块。

(4)第四个经常遇到的问题就是对一个寄存器的赋值只能在一个模块实现,不要尝试去在多个模块同时改变一个寄存器。编译的时候系统会检测出这个错误。这由此就会引申出另外一个问题。比如说有一个寄存器,可能会有多个因素会导致其改变。那么根据这个原则,要尽可能把这多个因素的改变放到一个模块里,来影响该寄存器。往往这多个因素的每一个都意味着自己对应的组合逻辑。所以这个原则实际上也告诉我们,当存在有好几个相关的组合逻辑的时候,要尽可能把这些相关的组合逻辑放到一个模块。综合器会尝试去优化它们。

(5)第五个原则还是涉及由顶向下的设计方法。设计的时候,根据设计目标,把系统划分为不同的模块,可以分为关键模块和非关键模块,也可以分为速度优化模块和面积优化模块。按照不同的设计目标来进行开发。

(6)第六个原则就是尽量摒弃异步设计的思路。就算是存在异步触发,可以通过两种方式来解决它。(www.xing528.com)

第一种方式,比如说D触发器的例子,有时钟clk,有异步清零信号rst_n,那怎么办呢?可以像下面这段代码这样做:

上面这段代码就把遇到清零信号是如何处理纳入到了clk的同步触发管辖中来了。

第二种方式就是把不得不使用的异步逻辑独立出来,单独放到一个模块里。这样也便于检查代码和管理。

(7)第七个原则是:时序逻辑电路的设计要尽量使用D触发器,而不是锁存器。

(8)第八个原则是:对于所有的模块的输出,要尽可能的寄存。如何实现这个原则呢?可以通过在每个模块的输出都经过D触发器来坚持这一原则。除非所设计的电路是纯纯粹粹的组合逻辑,都要尽量践行这一原则。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈