Fanout,即扇出,指模块直接调用的下级模块的个数,假如这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛。因而,在写代码时应尽量防止高扇出的状况。可是,在某些特殊状况下,遭到全体结构规划的需求或许无法修正代码的约束,则需求通过其它优化手法处理高扇出带来的问题。
以下就介绍三个这样的办法:
首要来看下面这个实例,如图1所示为转置型FIR滤波器中的要害途径时序陈述,在DSP in FPGA的FIR专题中有介绍转置型结构FIR滤波器输入数据的扇出较大,在图1中所示为11,因而net delay高达1.231ns。如图2所示,输入数据驱动了11个DSP48E1。
在没有优化状况下,该规划的fmax:206.016MHz
1. 寄存器仿制
寄存器仿制是处理高扇出问题最常用的办法之一,通过仿制几个相同的寄存器来分管由原先一个寄存器驱动一切模块的使命,继而到达减小扇出的意图。通过简略修正代码,如图3所示,仿制了4个寄存器:din_d0、din_d1、din_d2、din_d3,din_d、din_d0、din_d1、din_d2别离驱动2个DSP48E1,din_d3驱动3个DSP48E1。其间在代码中为防止归纳器优化相同寄存器,在对应信号上加入了(* EQUIVALENT_REGISTER_REMOVAL=”NO” *)特点防止被优化。
归纳完成后得到时序陈述如图4所示,该数据途径上输入数据fanout减为2,对应net delay也减小到了0.57ns。得到规划如图5所示,与希望的相同,仿制了4个寄存器来分管fanout。通过寄存器优化后得到fmax:252.143MHz
2. max_fanout特点
在代码中能够设置信号特点,将对应信号的max_fanout特点设置成一个合理的值,当实践的规划中该信号的fanout超过了这个值,归纳器就会主动对该信号选用优化手法,常用的手法其实便是寄存器仿制。特点设置如下代码所示:
(* max_fanout = “3” *)reg signed [15:0] din_d;
将din_d信号的max_fanout特点设置成3,通过归纳完成后,得到时序陈述如图6所示,其间fanout只要2,相应的net delay也只要0.61ns,主动优化作用还不错。结构如图7所示,其间din_d_12_1、din_d_12_2、din_d_12_3是归纳器优化后主动增加,即完成了寄存器仿制功用。通过设置max_fanout特点优化后得到fmax:257.135MHz
3. BUFG
一般BUFG是用于大局时钟的资源,能够处理信号由于高扇出发生的问题。可是其一般用于时钟或许复位之类扇出超级大的信号,此类信号触及的逻辑遍布整个芯片,而BUFG能够从大局的视点优化布线。并且一块FPGA芯片中BUFG资源也有限,在7k325tffg900上也仅有32个,假如用于一般信号的高扇出优化也不大实际。因而,在时钟上运用BUFG是有必要的,可是假如规划中遇到某些复位信号因高扇出发生的时序问题时,能够在此信号上运用BUFG来优化。