This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DAC34SH84:多器件同步问题

Guru**** 2381260 points
Other Parts Discussed in Thread: DAC34SH84, LMK04610, SN65LVDT101
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1247786/dac34sh84-multi-device-synchronization-problem

器件型号:DAC34SH84
主题中讨论的其他器件:LMK04610SN65LVDT101

您好!

 

我们目前正在研发一个模块、该模块可以容纳4个连接到一个 FPGA (Kintex UltraScale)的 DAC34SH84。 FPGA 正在计算载波频率约为200MHz 的调幅信号。 对于我们的应用、DAC 的所有16个输出相互对齐非常重要。 随附的图片显示了电路板上各元件的连接。

基本时钟(CLK)通过背板 PCB 提供、频率为154.375 [MHz]、并馈入 LMK04610时钟抖动清除器。 LMK 生成4个 DACCLK、每个频率为1235 [MHz]。 此外、它生成了617.5 MHz 的 CLK_4X 作为 FPGA 的基础时钟。 FPGA 的大部分内部部件都使用了四分之一的频率(154.375 [MHz])。 DAC 在2倍内插模式下工作。 FPGA 可连接4个 DATACLK (每个617.5 MHz)和相应的数据总线与 DAC。 对于每个 DAC、还会在 FPGA 内生成 ISTR 和 OSTR。 每个 DAC 的 OSTR 路径包含另一个用于 LVDS 到 LVPECL 信号转换的 IC (SN65LVDT101)。

到目前为止、所有 DAC 的输出均正常工作并能提供所需的调幅信号。 唯一的问题是、多器件同步不能在4个器件上运行。 对于同步、为154.375 [MHz]的单个时钟周期和所有 DAC 同时生成 ISTR 和 OSTR 脉冲。 所需的 PCB 布线长度等于或通过 FPGA 输出引脚延迟进行补偿。 因此、我假设已满足所需的时序要求。

我观察的行为为:

  1. 如果我同步一次、那么单个 DAC 的4个输出最多可以延迟一个 CLK 周期或6.478 [ns]、在 DACCLK 周期或0.81 [ns]步长。 DAC 输出之间的延迟通常在0到3个 DACCLK 之间
  2. 如果我再次进行相对较快的同步(同步事件在1[s]内连续进行)。 第一个 DAC 的延迟与其他 DAC 相比、延迟与1以下实现的延迟保持不变。
  3. 如果再次缓慢同步(两个同步事件之间有2个或更多)、我将获得一个新的随机对齐、如第1点下所述。

我的预期是、如果我进行单次同步、我会使所有4个 DAC 的全部16个通道对齐(它们之间的延迟几乎为零)。 如果我再做一次(不管其间传递了多少时间)、我都会得到相同的对齐结果。

我们这里的设置可能会出现什么问题? 如何解释所描述的行为? 可以采取什么措施、进行测量等等? 我感谢您提供任何帮助…

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿 BERT、  

    哪个时钟域被用来在 FPGA 内部生成 OSTR 信号? 是156.375MHz 还是617.5MHz? 有趣的是、我们看到有4个样本在时间上重复播放、而且 DAC 的输入数据速率是内部 FPGA 速率的4倍。 您是否在示波器上查看过其中的任何信号? OSTR 信号的时序与数据通信的关系如何?

    此致、  

    马特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt、

    OSTR 信号在154.375 [MHz]域内生成(一个时钟周期的单脉冲)、然后作为8位数据字传送到运行于 DDR 模式下的 Xilinx 的 OSERDESE3、后者同时使用154.375 [MHz]时钟和617.5 [MHz]时钟计时。 之后经过 ODELAYE3、最终到达 OBUFDS、后者驱动 FPGA 的 LVDS 引脚。 所以、在 FPGA OSTR 之外是一个大约6.478 ns 的脉冲。

    我还没有使用示波器来测量信号–但我会尝试。 您在 OSTR 和 DATACLK 之间编写了时序。 你是否是指 OSTR 和 DACCLK 间的时序运算、因为它们都必须满足特定的要求?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt、

    我们在这里取得了一些进展... 对于 LVPECL 连接(DACCLK OSTR)、我们使用了数据表第46页图78所述的首选配置。 对于 OSTR、我们忘记组装端接电阻器(Rt = 150 [Ohm])。 由于我们添加了这些电阻器、因此行为如第3点所述。 在原始帖子中–DAC 输出相互随机对齐。

    我还尝试了用示波器测量信号。 因此、我将四根小导线连接到 DATACLK、DACCLK、ISTR OSTR 的正传输线上。 由于我们在1 [GHz]带宽范围上只有1 [GHz]带宽探针来适应这些线缆、因此 DACCLK 无法测量。 DATACLKISTR OSTR 行为与预期相符。 所有这三个信号也能正确响应 FPGA 输出延迟设置–可以将其移动512个抽头(每抽头5个[ps])。

    为了让事情变得更具体、我更倾向于先看一下单个 DAC。 观察到的行为是、在每次同步尝试(ISTR OSTR 同时出现单脉冲)之后、警报状态寄存器(CONFIG5)显示了位13:11的随机状态(ALARM_FROM_Fifo (2:0))。 这意味着、如果我读取寄存器、我将得到"所有数据"、"指针在2点之外"或"指针在1点之外"、甚至是"FIFO 指针冲突"。 对于单个 DAC、什么可能导致此行为?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿 BERT、  

    您是否尝试过使用 fifo_offset 字段? 也许尝试2或3等较小的值、然后查看行为是否发生变化。  

    此致、  

    马特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Matt、

    是的、我曾尝试改变 fifo_offset。  复位 FIFO 的读取和写入指针后、它没有更改该行为-仍然是 alarm_fifo (2:0)中的随机状态"。 还有其他建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、BERT、

    您是否曾尝试过 sif_sync 来查看单个 DAC 的4个输出是否已对齐? 请参阅寄存器0x1F 字段 syncsel_fifo_input (1:0)。 您能否与我们分享器件配置/寄存器以供我们查看? 我想所有4个 DAC 配置都是相同的、正确吗?

    此致、Chase

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chase:

    无论我在  单同步源模式下使用 Sif_SYNC、ISTR 还是在  双同步源模式下使用 ISTR 和 OSTR、单个 DAC 的输出都是完全对齐。 不同之处在于 alarm_from_fifo (2:0)在这三种情况下的行为:

    • SIF_SYNC: alarm_fifo (2:0)随机显示所有状态、
    • 单同步源模式下的 ISTR: alarm_from_fifo (   2:0)显示稳定状态(2距离、如寄存器  config9中设置的状态)、
    •    双同步源模式下的 ISTR 和 OSTR: alarm_from_fifo (2:0) 随机显示所有状态。

    所有4个 DAC 的配置完全相同。  如果软件正在运行(每行显示一个寄存器(地址/数据))、请在其中一个寄存器的转储下方找到:

    0x0/0x19c
    0x1/0x100e
    0x2/0x7082
    0x3/0xf001
    0x4/0x449f
    0x5/0x1860
    0x6/0x4100
    0x7/0xffff
    0x8/0x0
    0x9/0x4000
    0xa/0x0
    0xb/0x0
    0xc/0x400
    0xd/0x400
    0xe/0x400
    0xf/0x400
    0x10/0x0
    0x11/0x0
    0x12/0x0
    0x13/0x0
    0x14/0x0
    0x15/0x0
    0x16/0x0
    0x17/0x0
    0x18/0x280f
    0x19/0x440
    0x1a/0x20
    0x1b/0x800
    0x1c/0x0
    0x1d/0x0
    0x1e/0x1111
    0x1f/0x1118
    0x20/0x2400
    0x21/0x0
    0x22/0x1b1b
    0x23/0xffff
    0x24/0x0
    0x25/0xaaaa
    0x26/0x5555
    0x27/0xaaaa
    0x28/0x5555
    0x29/0xaaaa
    0x2a/0x5555
    0x2b/0xaaaa
    0x2c/0x5555
    0x2d/0x4
    0x2e/0x0
    0x2f/0x0
    0x30/0x0
    0x7f/0x5428

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、BERT、

    我现在了解这些问题:

    1. 每个 DAC 的4个输出中的每一个都相对齐、但4个 DAC 没有对齐。
    2. 在单个 DAC 内、FIFO 错误并不确定、这意味着 FIFO 读取和写入指针在每次尝试同步时都是随机的。

    由于 FIFO 充当 DATACLK 和 DACCLK 之间的弹性缓冲器、1235MHz 因此这两个速率应该相等(DATA/2x 内插=> 617.5MHz 数据时钟、因此不存在问题)。 只要 FIFO 写入指针和读取指针同时复位、指针将在 FIFO 中具有4个位置的偏移量。 而且只要传入的 DATACLK 与 DACCLK 相同、FIFO 指针就不会相互改变位置。 它们应始终相隔4个样品/位置。 我知道您提到了示波器的1GHz BW 限制、但您是否有办法可以验证  LMK04610的输出 以确保其准确是1235MHz 并将 FPGA DATACLK 测量为617.5MHz?

     

    • SIF_SYNC: alarm_fifo (2:0)随机显示所有状态、
    • 单同步源模式下的 ISTR: alarm_from_fifo (   2:0)显示稳定状态(2距离、如寄存器  config9中设置的状态)、
    •    双同步源模式下的 ISTR 和 OSTR: alarm_from_fifo (2:0) 随机显示所有状态。
    [/报价]

    关于这些不同的状态:

    • SIF_SYNC: alarm_fifo (2:0) 随机显示所有状态、

      这是预期行为。 因为仅写指针复位、而读指针保持不变。 它应该是任意的。  

    •  单同步源模式下的 ISTR: alarm_from_fifo (   2:0)显示稳定状态(2距离、如寄存器  config9中设置的状态)、

      这不是预期行为。 单源模式下的行为应与上述 sif_sync 模式相同。 这两种都是复位写入指针的单源方法。 我不确定你将在哪里得到2道远的距离。 寄存器0x9显示您的寄存器序列中的初始 fifo_offset 为4。 仅当两个指针都被复位时、才适用。 单源同步将使输出指针处于上述任意相对位置。

    •    双同步源模式下的 ISTR 和 OSTR: alarm_from_fifo (2:0) 随机显示所有状态。

      这也不是预期的行为。 FIFO 的写入指针和读取指针应同步复位 、每次复位时、区别始终是 fifo_offset 寄存器中的值(显示如前所述设置为4)。  

    我想了解的另一点是、误差是恒定的、还是位置会随着时间的推移而变化、而在"初始"重置后无需重置 FIFO 指针?

    此致、Chase

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更多注意事项:

    如果位置随时间变化、如果您在初始复位后禁用 clkdiv_sync_ENA (使用0x0198写入0x00)、它是否仍然漂移? 您还可以尝试将 clkdiv_sync_SEL 更改为 ISTR 信号、而不是 OSTR (使用0x2401写入0x20)。  

    另外、我想澄清上述单源同步的情况、只要 syncsel_fifoout 字段保持设置为 OSTR、同时仅应用 ISTR、输出指针的位置是任意的。 如果您更改该字段以使用 ISTR (上的位9)复位输出 FIFO、则两个指针应同步复位、偏移量应为4。

    此外、是否每次都通过向0x05写入0x0000来清除警报?

    此致、Chase

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否可以尝试将值0x1F 设置为0x1110而不是0x1118? 结果应该是相同的,但我们看到了奇怪的事情一般发生在过去几年。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chase:

    感谢您提供的详细和快速的回答... 首先、我想指出一点、这不是漂移。 我可以离开该系统一夜、在早上看一下它、可以看到输出处于相同状态、并且  alarm_from_fifo (2:0)未更改。 影响输出和状态的唯一因素是同步事件。 因此、我认为从时钟的角度来看、一切都很顺利。

    以蓝色显示您的评论:

    • 这是预期行为。 因为仅写指针复位、而读指针保持不变。 它应该是任意的。
      • SIF_SYNC 在双同步源模式下使用、并设置为 FIFO 写入和读取指针复位的源(CONFIG32为0x8801)。 因此、我的解释是两个指针都被复位。 您提到读取指针保持不变。 正确的假设是什么? 为什么  alarm_fifo (2:0)中存在随机内容
    • 这不是预期行为。 单源模式下的行为应与上述 sif_sync 模式相同。 这两种都是复位写入指针的单源方法。 我不确定你将在哪里得到2道远的距离。 寄存器0x9显示您的寄存器序列中的初始 fifo_offset 为4。 仅当两个指针都被复位时、才适用。 单源同步将使输出指针处于上述任意相对位置。
      • 我从数据表中了解到、单同步源模式并不意味着仅复位 FIFO 写入指针。 我当时想  ISTR 用于复位写入指针、它同步到   DACCLK  域中并用于复位读取指针(CONFIG32为0x2201)。 另一项功能是将0x4000写入  CONFIG9应导致 FIFO 指针距离为2、因为  fifo_offset (2:0)位于位15:13中(0x8000的距离应为4)。 我对吗?
      • 因此、从我的角度来看、  alarm_from_fifo (2:0)中生成 的2距离就是我所预期的。 此模式下的问题是输出延迟在多个同步事件或 多次启动中不可重现。
    • 这也不是预期的行为。 FIFO 的写入指针和读取指针应同步复位 、每次复位时、区别始终是 fifo_offset 寄存器中的值(显示如前所述设置为4)。
      • 在这里我完全和你在一起-这不是我所期望的行为。

    你提到的测试,我将做明天,然后回来... 您可以先回顾一下我在中的评论。

    此致

    贝尔特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、BERT、

    我以前对此做过澄清。 如果单源同步模式、 syncsel_fifoout 保持为 OSTR、那么只触摸写入指针。

    此致、Chase