Achievements provide the only real pleasure in life.
综合就是RTL设计转换为门级表示,是由时序驱动和优化的。vivado支持可综合的语言子集:SystemVerilog、Verilog、VHDL以及三者的混合语言。systhesis支持两种设计模式:project mode 和 non-project mode。
vivado有四种大的综合策略:default/runtime/area optimized/perf optimized,同时支持定制策略。下面list preconfigured strategies:
在综合之前或者之后,可以使用T code(tcl.pre tcl.post)。
下面说一下关键的几个点:
1. gated-clock-conversion:
off-关闭门控时钟转换成时钟使能。on-遇到systhesis attribute (* gated_clock = "ture" *)时,转换成时钟使能。 auto-如果遇到gated_clock属性或者vivado检测出门控时钟的时候都会转换。
2. BUFG
tool infers up to amount specified and tracks how many BUFGs are instantiated in the RTL。systhesis推断出最多使用多少个bufgs。
3. fanout_limit
如果超过了number of loads,才开始进行逻辑复制。注意:控制信号不受此影响,例如set/reset/clock en等。如果要使用更精确的控制,建议使用attribute max_fanout进行控制。
4. resource_sharing
dsp资源共享,可以看出runtimeOpt/areaOpt/default都是auto,就是说perform resource sharing depend on timing of design。而perOpt则是on,保证性能最佳,牺牲面积,
5. max_bram/max_dsp
设计中最大可使用的block ram/dsp资源。通常用在设计中包含black box或者网标文件,给其预留足够的资源。
结合实际工程查看了一下,systhesis约束,发现这些参数仅仅是作为guidelines,并不是force。
gated clock conversion,用于管理门控时钟,而非专门的时钟管理模块MMCM/PLL。例如二分频电路。典型危害:时钟出现毛刺,clock skew会恶化。同时发现门控时钟,vivado不会主动插入BUFG,识别为local clock,使用Fabric布线资源而不是时钟网络,会跟其他关键路径竞争布线资源,影响时序。
module gated_clock
(
input wire sys_clk,
input wire d,
output reg q
);
/************************************************/
(* gated_clock = "true" *)
reg gate_clk;
/************************************************/
always@(posedge sys_clk) begin
gate_clk <= ~gate_clk;
end
/************************************************/
always@(posedge gate_clk) begin
q <= d;
end
/************************************************/
endmodule
run systhesis之后,将选项打开,得到的结果如下:
可以明显看到
第二级ff,gate clock连接在CE端,而不是按照我们设计的作为,作为时钟输入。
report utilization之后发现
只有一个时钟网络。
如果修改为off,综合完成之后,report utilization之后,发现
识别出两个时钟:Q(gated)和sys_clk(master)。
在我的工程中,设置的BUFG个数为:
但是综合完成之后却发现
使用的资源为23个,仔细阅读The tool infers up to the amount specified, and tracks how many BUFGs are instantiated
in the RTL.用的infer,可能就是推断吧,不是force。不知道implement之后的实际资源,有待观察。
还需要注意,fanout max选项,针对控制信号不起作用(可以使用max fanout)。
这就是目前针对综合的一些实用技巧的说明。下面会继续介绍systhesis的东西。