前言:数字芯片设计工程师在设计的时候要考虑三个方面,PPA,即Performance、Power和Area。本文讲解在实际项目中,如何对前端面积进行有效优化。
理论方法
本文首先参考书籍《FPGA设计实战演练(高级技巧篇)》第七章,如何在书写代码时进行面积优化,其中主要方法有以下几个方面。
- 操作符平衡
其中举例,比如:
result <= a * b * c * d;假设abcd是4bit寄存器,书中讲述那么在综合之后的结果是使用了3个乘法器,分别是4bit、8bit和12bit乘法器。
如果更改成:
result_new <= (a * b) * (c * d);综合之后的结果尽管也用3个乘法器,但是是2个4bit和1个8bit乘法器。
但是我并没有自己验证过,对于书中所述情况存疑,我认为编译器可能会自动优化这种简单的情况。
- 打破设计流水
增加流水的好处之一是缩减组合路径长度,提高设计频率,虽然不能降低单次计算时间,但是可以降低整体计算时间,相当于PPA中的performance,但是缺点是会带来area的面积增加。所以在性能允许的前提下,可以适当去除流水,减少寄存器使用,降低面积。此外,书中举了一个例子,就是在乘法器输出端可以增加一级流水,而不带来面积增加,原因在于乘法器本身输出端会有寄存器,如果增加一级流水,那么乘法器原有输出端的寄存器就会整合到增加的一级流水的寄存器,优化时序的同时不带来面积增加。
- 资源共享