Menu Close

Xilinx专用设计代码风格

专用代码风格是指从FPGA器件特征角度考虑,尽可能利用芯片结构以及内嵌的底层宏单元,以取得最佳的综合和实现效果。对于同一个设计,使用适合于FPGA体系结构特点的优化设计方法,可以大大提高芯片利用率和设计实现速度。

Xilinx FPGA的体系结构特点

Xilinx FPGA芯片的3种可构造单元是:

  1. 可编程输入、输出块IOB,主要为逻辑阵列与外部芯片引脚之间提供一个可编程接口;
  2. 可编程逻辑块CLB,CLB主要有一个组合逻辑、几个触发器、若干个多选一电路和控制单元组成,若干个CLB有规则地组成FPGA逻辑单元整列结构,以完成用户指定地逻辑功能;
  3. 各种连线资源,包括可编程地开关矩阵,内部连接点和金属线。

他们位于芯片内部地逻辑块之间,经编程后形成连线网络,以连接芯片内部的逻辑块及传递逻辑信息。优秀的设计应在芯片架构的基础上,合理使用组合逻辑、触发器以及块RAM等内嵌硬核单元

组合逻辑功能通过用户可编程的查找表实现。查找表是由静态存储器构成函数发生器,在此基础上再增加触发器来形成的,它是既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元电路。SRL16是Xilinx器件中独有的一种移位寄存器查找表,有4个输入用来选择输出序列的长度,能够以极少的硬件资源实现数据缓存和组合逻辑。

每个CLB中包含两个触发器,CLB的组合逻辑功能较少,触发器资源十分丰富。没个CLB中包含一个高速进位逻辑。专用进位电路速度远远大于采用传统的加速方法所能增加的速度。算术进位逻辑为有关算术运算中许多新的应用问题提供了有效的解决途径。

同时,xilinx提供了片上RAM,特别是大量块RAM,可以配置成双口RAM或ROM,存储器大、速度快,且不占用逻辑资源,在设计实现中有着广泛的应用。

内嵌的宏单元包括硬核乘加器、硬核处理器、数字时钟处理模块以及高速串行接口,处理能力强,处理能力为片上最高,且不存在时序问题。如果合理地利用宏单元,可达到事半功倍地效果。

Xilinx FPGA芯片专用代码风格

时钟信号地分配策略

时钟分配网络是FPGA芯片中地特殊布线资源,由特定地引脚和特定地驱动器驱动,只能驱动芯片上触发器地时钟输入端或除了时钟输入端外有限地一些负载,其目的是为了设计提供小延迟偏差和扭曲可忽略地时钟信号

  1. 使用全局时钟可为信号提供最短地延时和可忽略地扭曲。全局网线由全局缓冲器BUFG来驱动,使用BUFG时,时钟信号经BUFG驱动后通过长线同时接到每个触发器地时钟端,减少传输延迟。如不使用BUFG,时钟信号按一般布线连接到不同CLB,时钟信号到达各触发器的延迟不一致,使同步时序电路出现不同步的现象;
  2. FPGA特别适合于同步电路设计,尽可能减少使用的时钟信号种类。如TTL电路设计中经常采用的由组合逻辑生成多个时钟分别驱动多个触发器的设计方法,对FPGA的设计不适用。因为这样做使得时钟种类很多,不能利用专用的时钟驱动器和专用的时钟布线资源,时钟信号只能由通用的布线资源拼凑而成,各个负载点上的时钟延迟偏差很大,会引起数据保持时间问题,降低工作速度;
  3. 减少时钟摆率的另一种更有效方法是,使用一个时钟信号生成多个时钟使能信号,分别驱动触发器的时钟使能端,所有触发器的数据装入都由同一个时钟控制,但只有时钟使能信号有效的触发器才会装入数据,时钟使能信号无效的触发器则保持数据。这种方法充分发挥了FPGA器件体系结构的优势。
  4. 要避免时钟信号毛刺,当二进制计数器从0111向1000变化时,必须会出现一个1111的过渡过程,则D触发器的时钟就会产生毛刺,毛刺出现的时间很短,但对于高速处理来讲,足以使触发器误动作

SRL16是一种基于查找表(LUT)的移位寄存器,可用于构建高密度DSP结构(如滤波器),能够大幅削减硬件资源。再Virtex后续芯片中为6输入的查找表,在其余系列芯片中都为4输入查找表。其位宽(B)和深度(D)可以任意配置,最大的特点就是占用Slice资源特别少。其占用Slice资源M的计算公式如下:

M=B(R[D/16]+1)

其中,R[ ]函数的意义是取整。从上式可以看出,深度为1的移位寄存器和深度为16的移位寄存器所占的Slice资源是一样的。

例子:SRL16生成位宽为8,深度为10的移位寄存器。

Module lut_ram(clk, d, q);

Input clk;

Input [7:0] d;

Output [7:0] q;

Sr116_based_ram sr116_based_ram(

.clk(clk),

.d(d),

.q(q)

);

endmodule

其中,srl16_based_ram例化了Xilinx提供的RAM_based_shiftreg的IP core,使用SRL16结构完成了移位寄存器。上述程序经过综合后,得到RTL

触发器资源的分配技术

由于FPGA是一种触发器密集型可编程器件,因此系统的逻辑设计就应该充分利用触发器资源,尽可能降低每个组合逻辑操作的复杂度。

首先,应尽量使用库中的触发器资源。因为FPGA触发器资源丰富,而且开发系统在划分逻辑块时,对D触发器等元件直接利用CLB中的触发器,而对自建触发器则认为是组合电路,需要使用CLB中的组合逻辑电路构成,这样既占用更多的CLB,又浪费了CLB的触发器资源。将两种方法进行比较,每使用一个自建D触发器比使用库中D触发器的电路多占用2~3个CLB。

其次,在设计状态机时,应该尽量使用ONE-HOT状态编码方案,不用二进制状态编码方案。ONE-HOT状态编码方案是表示每个状态由1位触发器来表示,而二进制状态编码方案是用lgN/lg2位触发器来表示n个状态。由于二进制状态编码的稳定度较低,ONE-HOT状态编码方案对于触发器资源丰富的FPGA芯片十分适用。

信号反向的处理策略

在处理反相信号时,设计时应尽可能地遵从分散反相原则。具体为,应使用多个反相器分别反相,每个反相器驱动一个负载,这个原则无论对时钟信号还是对其他信号都是适用的。因为在FPGA设计中,反相是被吸引到CLB或IOB中的,使用多个反相器并不占用更多资源,而使用一个反相器将信号反相后驱动多个负载却往往会多占资源,而且延迟也增加了。

首先,如果输入信号需要反相,则应尽可能地调用输入带反相功能地符号,而不是用分离地反相器对输入信号进行反相。

其次,如果一个信号反相后驱动了多个负载,则应将反相功能分散到各个负载中实现,而不能采用传统地TTL电路设计,采用集中反相驱动多个负载来减少所用地器件地数量。因为在FPGA设计中,集中反相驱动多个负载往往会多占一个逻辑块或半个逻辑块,而且延迟增加了。分散信号地反相往往可以与其他逻辑在同一单元内完成而不消耗额外地逻辑资源。

Posted in FPGA

发表评论

相关链接