华为FPGA设计高级技巧xilnx篇-阅读笔记2

华为FPGA设计高级技巧xilnx篇-阅读笔记2

  • 设计技巧
    • 合理选择加法电路
      • 串行进位与超前进位
      • 使用圆括号处理多个加法器
    • IF语句和Case语句:速度与面积的关系。
    • 减少关键路径的逻辑级数
      • 通过等效电路,赋予关键最高优先级
      • 调整if语句中条件的先后次序
      • 合并if语句,提高设计速度
    • 组合逻辑与时序逻辑分离
    • 利用电路的等价特性,巧妙地分配延时
    • 复制电路,减小扇出(fanout),提高设计速度
    • 高效利用IOB

设计技巧

设计技巧主要从处理速度和面积着手,其中处理速度与面积的一个原则是:向关键路径(部分)要时间,向非关键部分(部分)要面积
为了获得更高的速度,应当尽量减少关键路径上的LUT级数,尽量压缩线延时;为了获得更小的面积,在非关键路径(部分)上尽量优化电路结构,压缩面积

合理选择加法电路

串行进位与超前进位

串行进位加法结构如图
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第1张图片
超前进位加法器结构
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第2张图片
由上图可以知道串行进位加法结构的面积较小,但速度较慢,超前进位加法结构虽然速度较快,但是面积相较来说较大。另外FPGA底层结构可知,进位链是FPGA专有的资源,因此通过FPGA专有的资源设计,比用逻辑设计得到的串行进位加法速度要快很多。

使用圆括号处理多个加法器

控制设计结构的另一种方法是使用圆括号来定义逻辑分组。
例如 z<=A+B+C+D;
电路 结构如图:
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第3张图片
用圆括号重构后的加法如下:
Z<=(A+B)+(C+D);
电路结构如图:
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第4张图片
上面两种方法在速度和面积上都有差别
第一种方法:面积小,但速度较慢。但是,如果信号D是关键路径,其他信号是非关键路径;或者,设计中关键路径与A,B,C,D无关,应当采用这种方法。
第二种:面积较大,但是速度较快。如果对A,B,C,D的时序都要求比较苛刻,应当采用这种方法。

IF语句和Case语句:速度与面积的关系。

if语句指定了一个优先级编码逻辑,而case语句生成的逻辑是==并行的,不具有优先级,==因此case语句速度较if语句速度较快。但是面积较if语句较高。另外if-else可以实现嵌套,但是不正确的使用嵌套会导致使用的设计需要更大的延时。在用IF语句实现对延时要求苛刻的路径时,应将最高优先级给最迟到达的关键信号(critical signal)。有时为了兼顾面积和速度,可以将IF和Case语句结合来用。

减少关键路径的逻辑级数

在FPGA设计中,关键路径(critical path)上的每一级逻辑增加延时。为了确保能满足时间约束,就必须对设计的行为进行描述时考虑逻辑级数。减少关键路径延时的最常用方法是给最迟到达的信号最高的优先级,这样可以减少关键路径的逻辑级数

通过等效电路,赋予关键最高优先级

例如经过两级逻辑的cirtical信号结构如图:

华为FPGA设计高级技巧xilnx篇-阅读笔记2_第5张图片
修改code 减少critical路径的逻辑级数,电路结构如图:
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第6张图片
该方法对FPGA影响较小,对ASIC设计有效。

调整if语句中条件的先后次序

在使用if-else 语句时将关键路径的优先级设置为最高。例如

if 条件1 
     do action1
else if 条件2
	do action2
else if 条件3
    do action 3
    ........

如果条件3是关键路径信号,则可以调整为

if 条件3 
    do action1
else if 条件2
   do action2
else if 条件1
   do action 1
   ........

合并if语句,提高设计速度

例如

if 条件1
信号置1
else if条件2
信号置0
else if 条件3
信号置1
else if条件4
信号置0
......

如果上述条件没有优先级,为了获得更高的速度,可以将if语句中的条件合并例如:

if 条件1 || 条件3
信号置1
else if 条件2 || 条件4
信号置0
.....

组合逻辑与时序逻辑分离

包含寄存器的同步存储电路和异步组合逻辑应分别在独立的进程中完成,组合逻辑中关联性强的信号应放在一个进程中,这样在综合后面积和速度指标较高,例如在三段式状态机中通常逻辑部分是与时序部分的状态转换,输出分别在不同的部分进行设计的。例如
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第7张图片

利用电路的等价特性,巧妙地分配延时

在功能等价的情况下,可以根据时序需要,安排组合逻辑电路在寄存器前后的位置,合理分配延时。
例如组合逻辑在寄存器之后
其中a,b信号的延时非常大 电路结构如图
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第8张图片
组合逻辑放在寄存器之前
如果a,b信号的延时并不大,而寄存器c信号经过的逻辑较多,延时大,则
电路结构如图
华为FPGA设计高级技巧xilnx篇-阅读笔记2_第9张图片
这种处理的本质是将关键路径中的部分延时挪到其他非关键路径上

复制电路,减小扇出(fanout),提高设计速度

提高关键路径速度的一个常用方法就是复制电路,减少关键路径的扇出。当一个信号网络所带负载增加时,其路径延时也相应的增加。

高效利用IOB

在IOB中包含有输入寄存器(或锁存器),输出寄存器和输出三态控制寄存器,在设计中应当尽量利用IOB中的寄存器(可在布局布线工具中进行设计),减少CLB的使用量。
在设计中:进入FPGA内部的信号,尽量经过register 从FPGA出来的信号也尽量经过register
1.IOB本身就有register,不用白不用。
2.FPGA内部线延时难以控制,如果不经过register 将增加input delay 和 output delay 对外部寄存器速度的要求更加苛刻,时序容限缩小。
合理利用IOB资源的建议
1.所有的输入输出信号都经过寄存器的处理。这样做能够放宽对外部电路或其他芯片的时序要求,提高单板设计速度,并且,IOB中的寄存器不用白不用。
2.在处理双向口试,为了将三态控制寄存器,输入输出寄存器,三态电路都移入IOB中,减少CLB的使用量,应当:
1.采用同样的始终触发。
2.同样的复位电路。
3.每个输出信号都有独立的三态控制信号。(一个输出对应一个三态控制寄存器)并且三态控制寄存器直接来至急促其。三态控制信号不许共用;
4. 三态控制低电平有效,否则三态寄存器无法引进IOB ,增加信号输出延时。

你可能感兴趣的:(verilog,FPGA)