Verilog 代码风格
Verilog 代码风格是 FPGA 设计中非常重要的一方面,一个良好的代码风格可以减少错误,提高电路的性能,达到事半功倍的效果。反之,一个混乱的代码风格则会产生南辕北辙的后果。
在 FPGA 设计中,代码风格有两层含义:其一是 Verilog 的代码书写习惯;另一个则是对特定电路采用哪种形式的语言描述,才能将电路描述的更加准确,使得综合后产生的电路更为合理。在这里,我们主要介绍后者,并且主要介绍不依赖于 FPGA 开发的 EDA 软件工具和 FPGA 芯片类型,仅仅是 HDL 语言出发的代码风格。
一、逻辑复用
逻辑复用是通过提高工作频率来节省面积的优化方法,经常用于存在多个资源可共享的单元的设计中,是大规模 FPGA 设计的核心思想。例如,在幅度到功率转换模块中,逻辑复用可以减少资源的使用,使得设计更加合理。假如系统输入信号为 I Q 两路,每路速率为 5Mb/s,位宽为 16bit,分别给出了普通设计实现和使用逻辑复用的设计实现。
普通实现方式如下:
```verilog
module amplitude_to_power (
input [15:0] I,
input [15:0] Q,
output [31:0] power
);
assign power = I * I + Q * Q;
endmodule
```
逻辑复用方式如下:
```verilog
module amplitude_to_power (
input [15:0] I,
input [15:0] Q,
output [31:0] power
);
wire [31:0] I_squared = I * I;
wire [31:0] Q_squared = Q * Q;
assign power = I_squared + Q_squared;
endmodule
```
第二种实现方式将资源缩减为第一种方式的一半。虽然很多 EDA 软件能够自动的发现可以复用的逻辑,但能力毕竟有限,所以综合结果对于设计者来说还是不确定的。因此,逻辑复用主要还是通过代码实现。
二、逻辑复制
逻辑复制是通过增加面积而改善设计时序的优化方法,经常用于调整信号的扇出。如果信号具有高的扇出,如时钟信号和复位信号。虽然可以添加缓存器来增加驱动能力,但是这也会造成信号的延时增大。通过逻辑复制,使用多个相同的信号来分担驱动任务,每路信号的扇出就会变低,就不需要额外的缓冲器来增加驱动,可减少信号的路径延迟。
例如,在产生控制信号的监控模块中,逻辑复制可以减少信号的延迟。图(a)给出了未采用逻辑复制的设计模式,其占用资源较少,但延迟大,容易出错。图(b)的延迟小但占用资源多。
良好的代码风格对 FPGA 设计的影响非常大。一个良好的代码风格可以减少错误,提高电路的性能,达到事半功倍的效果。因此,在设计时,需要特别注意代码风格,合理地使用逻辑复用和逻辑复制等技术,提高设计的效率和可靠性。