vivado 知识碎片

K0:常见Vivado Constraints 问题索引 https://www.xilinx.com/support/answers/69583.html

K1:FPGA差分信号缓冲的转换(IBUFDS、IBUFGDS和OBUFDS) 

https://blog.csdn.net/github_33678609/article/details/53789063?utm_source=blogxgwz2

全局时钟资源概念解释与基本使用方法,https://blog.csdn.net/pcseye/article/details/7321646

 

  • IBUFDS、IBUFGDS和OBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。
  • IBUFDS 是差分输入的时候用;
  • OBUFDS 是差分输出的时候用;
  • IBUFGDS 则是时钟信号专用的输入缓冲器。
  • P侧、N侧应该是指差分输入的P端与N端,时序约束时只用约束P端,且P端约束会传播到IBUFGDS的输出端 https://www.xilinx.com/support/answers/57109.html
  • IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。 IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多种格式的IO标准。
  • IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
  • BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。
  • 常见全局时钟资源的使用方法:IBUFG + BUFG;IBUFGDS + BUFG;IBUFG + DCM + BUFG;

  • 注释语句不能写在约束语句后面
  • 多个时钟定义在同一个引脚,需要采用"create_clock -add"约束 https://www.xilinx.com/support/answers/53805.html
  • set_clock_groups,cross group的clock不分析,另外至少有两个非空group,set_clock_groups约束才有效
  • 逻辑复制在FPGA中对timing优化的作用要弱于ASIC,在ASIC中逻辑复制可以从减少扇出和取消过长连线来改善timing,但是FPGA中只能通过取消过长连线来改善timing,而运算单元是无法替换的
  • 当FPGA调试较高频率时,就不得不使用最近的两级reg,而在它们之间呢都够实现的组合逻辑是有限的,此时只能通过修改RTL代码,将原先安排在1拍完成的任务拆分为多拍;不具备ASIC中register shifting的能力

K2:直接使用从mmcm出来的时钟 https://www.xilinx.com/support/answers/59893.html

 (注: xilinx的PLL内部接构是输入master clock经过IBUF输入后进入MMCM,然后生成的时钟再经过BUFG输出)

 这样使用时输入master clock与输出generate clock是不同的,要根据它们之间的相位偏移(phase shift)做不同的处理

频率不变,相位偏移为‘负’或‘0’:通过设置调整input_delay 最大最小值来处理;

频率不变,相位偏移为‘正’:通过设置multicycle_path来处理;

频率改变,相位偏移‘0’:使用虚拟时钟

(注:PLL可以生成多个不同频率且不同相位的时钟,但是具体到个例,需要根据VCO(压控振荡器)数量分析,因为PLL内部的VCO具备将频率倍增上去的能力,比如要同时输出25M和33M,就要将VCO的频率调到至少是25和33之间的公倍数,然后通过由VCO经过分频器之后得到的时钟;在这个过程中,来自同一VCO的时钟是相同的相位偏移,那么想要几个什么频率下什么相偏的时钟就要结和FPGA芯片提供的具体资源进行分析。http://bbs.eetop.cn/thread-288895-1-1.html

K3:时钟切换方案 https://www.cnblogs.com/alifpga/p/7493996.html

1. 生成所有可能时钟用mux选择;

2. 采用PLL/MMCM的动态时钟可配置功能;(best in FPGA)

3. 生成所有可能时钟外clk?,再生成max{clk?}*2 频率的采样时钟,基于乃奎斯特采样定理采样输出;

K4:FPGA 约束步骤与方案

reference:

generate clock的继承,http://www.eetop.cn/blog/html/34/840234-28710.html

create_clock与create_generate_clock的作用范围,https://www.xilinx.com/support/answers/64340.html

virtual clock:xilinx UG903

PLL 约束:http://bbs.eetop.cn/viewthread.php?tid=477572&page=1&extra=

1. IO pad:指定输入IO pad,及其电器特性;

set_property IOSTANDARD TMDS_33 [get_ports clk_in]
set_property PACKAGE_PIN K18 [get_ports clk_in]

2. IO pad 到 PLL/MMCM:

  • 从IO pad进入后一般会直接连到PLL/MMCM之类的时钟生成/处理单元(具体使用中,这些的单元会以IP的形式呈现);
  • 如果是从IO pad简单的直联到PLL/MMCM单元,可以通过IP生成时自行产生的约束文件约束IP输入时钟(即IO pad 输入的时钟),其他复杂情况可以通过直接约束设计最顶层对应IO pad输入的port,最终只有一个目的,用尽可能简介的约束方式,指定PLL/MMCM输入时钟,即其master clock;
creat_clock -period 20.000 [get_ports clk_in]
set_input_jitter [get_clocks -of_objects [get_ports clk_in]] 0.2
...

3. PLL/MMCM:(在约束万FPGA所有输入clk后且完成内部时钟IP的示例化连接后,先synthesis,然后借助report_clocks找到所有auto derived的generated clock信息,完成generated clock的renameing和同步、异步关系设定)

  • PLL/MMCM可以生成若干相对master clock不同频率、不同相偏(具体以FPGA IC为准)的衍生时钟,即generate clock;
  • PLL/MMCM、BUFG等具备一定的继承能力,即generate clock可以继承master clock的latency属性,其余uncertainty、clock gating等需要额外通过set_generate_clock来约束,所以稳妥的做法,是所有generate clock通过set_generate_clock;
  • 在FPGA中除过IO pad输入时钟、Gigabit Transceiver (GT)输出时钟以及虚拟时钟外,所有其他内部时钟都只能用generate_clock来约束;
  • 当有多个generate 时钟时,需要指定时钟间的同步、异步关系
# complement the non-inherited constraints
create_generate_clock ...

# clk100 and clk66 are generate clock
set_clock_groups–async –group {clk50 clk100} -group {clk33 clk66}

 4. logic constraints: 

  • 设置input delay与output delay,通常情况其参考时钟需要新设virtual 时钟,其理由和好处包括:由IO pad的输入可能与设计内部的所有时钟都是无关的、IO pad输入与内部非整数倍关系的generate clock有关,导致用内部时钟不好约束、通过virtual时钟可以独立与内部reg-to-reg约束,设置不同的jitter和latency;综合而言,由virtual clock约束的采样时钟可以更加灵活合理的采样来自于FPGA 芯片外的数据输入,更好的保证源头数据获取的正确性;
  • virtual clock的频率应当与输入第一级FF所用clock(master/generate)一致,只是具体到uncertainty参数与该时钟下的内部reg-to-reg的设置可以允许不一致;
  • 另外,简单起见,也可以用generate clock取代virtual clock来作为input output delay的参考时钟(这里要注意其不足) ;
  • (注:虚拟时钟不能有object,且要在input/output delay约束前定义)

K5:采用create_clock定义内部clock的影响 https://www.xilinx.com/support/answers/59030.html

create_clock 定义的起点是将来timing分析的时间零点,比如latency和uncertainty值,当内部generate clock用creat clock定义就表示用了不当的中间节点作为timing分析的时间零点,就会导致timing计算偏差,可能导致设计无法稳定正常工作。

K6:create_clock与create_generated_clock概念分析 https://blog.csdn.net/u011729865/article/details/52810619

create_generated_clock 是用来说明generated clock与source clock的相位(边沿)关系,其中source clock指定了master clock真正用于产生generate clock的起点(不一定是master clock最开始的输入点,如下图所示,真正的开始输入点是Udiv/clk pin脚,而非clk脚),如果指定准确,那么generate clock与master clock的相位差会由内部连接的路径来决定/保证;另外,如果source clock没有指定准确的输入起点时,还可以通过设置相位偏移关系(-edges 选项)来达到同样效果;

  在遇到多个master clock来生成多个generate clock的情况下,遵循如下原则:

1.一致性:声明的generated clock和master clock相位边沿的关系要和实际的一致。
2.唯一性:确保generated clock和master clock的路径的唯一。

其中第2条,可以借助命令(report_timing)来辅助确定每个generate clock的生成路径,然后加以约束

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值