如果移位寄存器这么写

2019-10-30 22:08:59 浏览数 (1)

有两种代码风格可用来描述移位寄存器。第一种风格如图1所示,第二种风格如图2所示。相比而言,第一种风格易于参数化,且将移位深度设置为参数可实现设计复用。同时,这种风格还可方便地使用综合属性SRL_STYLE,从而达到控制综合结果的目的。第二种风格是无法使用SRL_STYLE的。SRL_STYLE的具体使用方法可参考这里Vivado综合属性:SRL_STYLE

图1图1
图2图2

图1和图2所示代码移位深度为6,以此代码为例,在综合设置选项为默认值的情形下(-shreg_min_size为3),综合后的电路形式为FF->SRL->FF,如图3所示。

图3图3

从时序收敛的角度而言,图3所示的电路是易于达到收敛的目的的,但在实践中,我们发现,有时第一级的触发器与后续的SRL距离较远,导致布线延迟太大。一个可能的解决方法是能否从该SRL中“拽出”一个触发器,也就是将SRL变为FF SRL,此时的SRL深度为原始SRL深度减1。这时可利用属性SRL_STAGES_TO_REG_INPUT。具体使用方法如图4所示。这里get_cells命令的对象为图3中的SRL。

图4图4

该属性在opt_design阶段生效,因此如果其作为约束,相应的约束文件应作为Hook Script显示在tcl.pre里,如图5所示。

图5图5

最终布局布线后的电路就变为如图6所示情形。

图6图6

此外,如果希望从SRL中“拽出”一个触发器与最后一级触发器相连,可利用属性SRL_STAGES_TO_REG_OUTPUT。

结论

SRL_STAGES_TO_REG_INPUT可从SRL中向其输入方向“拽出”一个触发器

SRL_STAGES_TO_REG_OUTPUT可从SRL中向其输出方向“拽出”一个触发器

0 人点赞