源同步接口输入延迟(六)

源同步接口(六)



前言

  • 后面一系列分析,均可将外部设备和FPGA想象为在一个设备内种的分析方式。即,片内两个寄存器之间的时序计算时刻0点是在源时钟为起点(源同步两个时钟之间是有相位差偏斜的,而系统同步可当做没有偏斜,即clk1和clk2相减为0)
  • 通过输入input_delay最大最小值,让软件知晓如何计算建立时间裕量和保持时间裕量,才能正确分析是否违例,免得看着没时序问题,实际上隐藏时序问题不知道
  • 建立时间裕量是再下一个时钟周期进行计算,时刻以源时钟开始为标准。
  • input_delay和output_delay min和max,均是对外部走线源和目的相对延迟来说(延迟分两个,内部延迟和外部延迟,input的外部是指源到FPGA端口的一段,out的外部是FPGA端口到外部设备端口这一段)。在分析时均以如何试探建立时间和保持时间的极限值来进行计算,以这个思路就好分析公式的用意。总体来说,求的是源到目的到达时间的相对值
  • 再次强调,input_delay和output_delay min和max是计算相对FPGA的外部,是外部,是外部,不管是系统同步还是源同步,要分清楚什么是外部
  • 公式中时序分析中是源减目的还是目的减源,都可以,求出相对值即可,正负的问题,一般是在建立时间分析时是目的减去源,得到一个正值,如果为负值则违例。对于保持时间来说,源减去目的得到一个正值,说明数据来的慢,不会冲坏保持时间裕量中的数据,负值表示违例。因此建立时间和保持时间均以负表示违例,这样就统一了
  • 公式求IO延迟中,求的是外部数据走向相对于时钟的偏差(数据和时钟的关系),因此以原数据路径到FPGA端口或者端口到外部设备的相对于时钟的延迟来计算,即外部原延迟减去时钟之间的偏差。即,数据延迟多少个外部相对时间到达目标设备的外部接口(不包括设备内部延迟)
  • 为什么再分析输出延迟的时候,不计算FPGA内部的时延,之所以计算外部,就是因为内部的,FPGA自己知道,不用再计算,只计算外部时钟和数据之间相对的偏差即可

源同步接口 PCB 设计要点速览

一句话总结:把“时钟+数据”当成一对差分线来处理,所有时序余量都靠“等长”解决。


1. 核心概念

术语含义
源同步(Source-Synchronous)发送端随路输出时钟,接收端用该时钟直接采样数据。
Launch edge发送端寄存器(reg0)的触发沿。
Latch edge接收端寄存器(reg1)的采样沿,通常与 Launch edge 相差 1 个时钟周期。
Tc时钟网络延迟(PCB 走线 + 封装 + 缓冲)。
Tdata数据网络延迟(PCB 走线 + 封装 + 缓冲)。
Tsetup / Thold接收端器件要求的建立/保持时间。
Input DelayFPGA 时序约束里“告诉工具”外部已经消耗掉的时间预算(看下面的公式)
Setup Slack数据到达时间 – 建立要求时间,必须 > 0。
Hold Slack保持要求时间 – 数据到达时间,必须 > 0。

2. 设计步骤(checklist)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<think>嗯,用户问的是关于源同步接口中虚拟时钟(virtual clock)的约束条件和使用说明。首先,我需要回忆一下源同步接口的基本概念。源同步接口的数据和时钟是由同一个源端发出的,所以FPGA需要根据外部时钟来捕获数据。这种情况下,时序约束就显得尤为重要,特别是虚拟时钟的应用。 根据之前看到的引用内容,比如引用[3]和[4],虚拟时钟和真实时钟的区别在于,虚拟时钟并不连接到实际的物理端口或引脚上,而是用来模拟外部设备的时钟情况。这样的话,在约束输入输出延迟时,可以更准确地描述外部时钟与数据之间的关系。比如,当外部设备的时钟周期或相位与FPGA内部时钟不同时,使用虚拟时钟能更灵活地进行约束。 接下来,用户需要了解约束条件的具体使用说明。根据引用[2]和[3],虚拟时钟在SDC中通常用create_clock命令来定义,但不指定端口。然后,输入输出延迟约束会关联到这个虚拟时钟上,比如set_input_delay和set_output_delay。这样,时序分析工具就能根据虚拟时钟的参数来验证时序是否满足要求。 另外,还需要考虑虚拟时钟的时钟不确定性(set_clock_uncertainty)和时钟组(set_clock_groups),以确保时序分析的准确性。比如,虚拟时钟和内部时钟可能需要设为异步,避免错误的路径分析。 可能用户在实际应用中会遇到外部时钟与内部时钟不同步的情况,这时候虚拟时钟的优势就体现出来了。例如,如果外部设备有一个10ns周期的时钟,而FPGA内部主时钟是8ns,直接使用内部时钟进行约束可能不准确,用虚拟时钟就能更精确地描述外部时序。 需要注意的是,当源同步接口的时钟与FPGA内部时钟有确定的相位关系时,可能不再需要虚拟时钟,转而使用生成时钟或其他方法。这时候需要根据具体情况调整约束策略。 最后,用户可能还想知道如何验证这些约束是否有效,或者常见的错误有哪些。比如,是否忘记设置时钟不确定性,或者虚拟时钟与内部时钟的同步问题。这些都是在实际应用中需要仔细检查的地方。</think>### 源同步接口中Virtual Clock的约束条件与使用说明 #### 一、Virtual Clock的作用与定义 在源同步接口(Source-Synchronous Interface)中,**Virtual Clock(虚拟时钟)**用于模拟外部设备(如传感器、存储器等)的时钟特性,帮助时序分析工具(如Quartus、Vivado)准确计算输入/输出延迟的时序余量(Slack)[^2][^4]。 **定义方式**(SDC命令): ```tcl create_clock -name VCLK -period 10 -waveform {0 5} # 定义名为VCLK的虚拟时钟,周期10ns,占空比50% ``` #### 二、约束条件与使用场景 1. **输入延迟约束(Input Delay)** 当外部设备发送数据到FPGA时,需通过虚拟时钟描述数据与外部时钟的时序关系: ```tcl set_input_delay -clock VCLK -max 2.5 [get_ports data_in] # 数据相对于虚拟时钟VCLK的最大延迟为2.5ns ``` - 作用:声明外部设备时钟(VCLK)到FPGA输入端口的延迟,帮助工具分析建立时间(Setup Time)和保持时间(Hold Time)[^2][^3]。 2. **输出延迟约束(Output Delay)** 当FPGA外部设备发送数据时,需约束数据与虚拟时钟的关系: ```tcl set_output_delay -clock VCLK -max 3.0 [get_ports data_out] # 数据相对于VCLK的最大延迟为3.0ns ``` - 作用:确保FPGA输出的数据在外部设备的时钟有效窗口内被捕获。 3. **虚拟时钟与真实时钟的关联** - 若外部设备时钟与FPGA内部时钟**异步**,需通过`set_clock_groups`声明异步关系: ```tcl set_clock_groups -asynchronous -group {VCLK} -group {FPGA_CLK} ``` - 若两者有相位或频率关系,需通过`set_clock_latency`或`set_clock_uncertainty`细化约束[^3]。 #### 三、使用注意事项 1. **虚拟时钟不再适用的情况** - 当外部时钟与FPGA时钟**严格同步**(如通过PLL生成)时,可直接使用生成时钟(Generated Clock)替代虚拟时钟[^3]。 - 若外部设备时钟与FPGA时钟有固定相位偏移,需通过`set_clock_latency`显式声明[^4]。 2. **时序例外(False Path)** 对于不涉及虚拟时钟的路径(如内部逻辑),需设置`set_false_path`避免无效时序分析: ```tcl set_false_path -from [get_clocks FPGA_CLK] -to [get_clocks VCLK] ``` #### 四、示例场景 假设外部设备时钟周期为10ns,FPGA主时钟为8ns,且两者异步: ```tcl # 定义虚拟时钟和FPGA主时钟 create_clock -name VCLK -period 10 create_clock -name FPGA_CLK -period 8 [get_ports clk_in] # 输入延迟约束(外部设备到FPGA) set_input_delay -clock VCLK -max 4.0 [get_ports data_in] # 异步时钟组声明 set_clock_groups -asynchronous -group {VCLK} -group {FPGA_CLK} ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值