1.1.8 −shreg_min_size和−no_srlextract
−shreg_min_size和−no_srlextract在综合设置中的位置如图1.22所示。
图1.22
在Xilinx FPGA中,LUT可以配置为移位寄存器(Shift Register)。以UltraScale芯片为例,SLICEM中的8个LUT可级联构成深度为256的移位寄存器,并且不会消耗额外的触发器。移位寄存器的工作原理如图1.23所示(此图只是工作原理,并非真实架构)。通过addr的控制,可实现深度的动态切换。
图1.23
采用LUT实现移位寄存器有两种方式:一种是通过SRL16E或SRLC32E实现;另一种是通过手工RTL代码实现。对于第一种方式,SRL16E和SRLC32E的区别在于深度不同,同时后者提供了级联端口Q31。端口A0~A3的功能与图1.23中的addr等效,并且当addr为0时,深度为1,如图1.24所示。
图1.24
对于手工描述的实现方式,相应的RTL代码如图1.25(VHDL版)和图1.26(Verilog版)所示。注意:这里没有复位信号。
图1.25
图1.26
−shreg_min_size用于管理移位寄存器是否映射为LUT,默认值为3。通过实验可以得到如图1.27所示的结论:当移位寄存器的深度小于等于−shreg_min_size时,最终的实现方式为触发器级联的形式;当其深度大于−shreg_min_size时,实现方式则为FF+LUT+FF的形式。
−no_srlextract用于阻止工具将移位寄存器映射为LUT,其优先级高于−shreg_min_size。例如,当移位寄存器的深度为4、−shreg_min_size为3、−no_srlextract被勾选时,最终的实现方式是4个触发器级联的形式,而非FF+LUT+FF的形式。
在System Generator中有两个模块:Delay和Register,如图1.28所示。这两个模块是不同的:Delay的延迟深度可设定;Register的延迟深度是1。
图1.27
图1.28
对于Delay的详细描述如图1.29所示。可见,Delay最终的实现形式是LUT+FF;Register则直接对应SLICE中的FF。
对于移位寄存器的实现方式,可通过−shreg_min_size进行全局管理,也可通过模块化综合技术中的选项SHREG_MIN_SIZE进行细粒度管理,还可通过综合属性SRL_STYLE进行控制。
移位寄存器采用LUT+FF或者FF+LUT+FF形式的好处在于节省了FF(尤其对于较大深度的延迟);因为SLICE中的FF,其Tco(时钟到输出延迟)小于LUT的Tco,所以对时序收敛也是有好处的。
图1.29
结论:
① 对于移位寄存器的实现方式,可通过−shreg_min_size进行全局管理,也可通过模块化综合技术中的选项SHREG_MIN_SIZE进行细粒度管理,还可通过综合属性SRL_STYLE进行控制。
② 选项−no_srlextract的优先级高于−shreg_min_size。
③ 采用LUT实现的移位寄存器不支持复位。
④ 在System Generator中,Delay和Register是不同的。