vivado深入理解 --- advanced synthesis

本文介绍了Vivado综合工具的基本概念及其使用技巧,包括不同综合策略的选择、关键配置项的作用及其实现效果,如gated-clock转换、BUFG推断、扇出限制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的东西。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值