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.

[参考译文] LMK0.4906万:LMK0.4906万使用FPGA重新编程后出现异常行为

Guru**** 2548240 points


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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/570205/lmk04906-lmk04906-strange-behaviour-after-reprogramming-with-fpga

部件号:LMK0.4906万

您好,

让我们来描述一下我们的问题。 我们有一个带有FPGA和外部PLL的主板,即LMK0.4906万。

我们在 LMK0.4906万的初始化阶段观察到一些奇怪的行为。 通电后,我们有LMK0.4906万 的默认复位寄存器 。 开机后,FPGA进入用户模式并初始化外部PLL (使用LeuWire接口)。 外部PLL配置成功(我们将PLL编程为在具有内部VCO的单个PLL2模式下工作,并选择正确的输出时钟,相位检测器和其他设置)。 从外部闪存启动加电后,它也会成功配置。 如果我们从PC-JTAG接口启动初始化,它还可以从用户模式成功地重新配置无限次。  但是(!!!) 使用相同的编程文件和相同的设置重新编程FPGA (没有冷重置)后,PLL错误初始化(!!!!! )。 这意味着- 1. PLL未重置  2. 从1到31的所有寄存器都没有更改其值,但寄存器30除外,它重写错误!  (我们认为,重新配置后的PLL对于重写寄存器R0-R29是不明智的)。 这意味着我们无法重置PLL,因为R0值没有调整。  

同样有趣的是,如果我们甚至在首次初始化后从PLL重新读取并重新编程FPGA,那么PLL就会正确初始化。  

请帮助我们解决这个问题!

提前非常感谢。

此致,  

伊凡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定问题,这听起来像是两种不同情况下数据发送方式的编程问题。 您能否在成功编程和失败编程之间共享SPI图解?

    这不一定与您对问题的描述一致,但有uWire_lock位R31[5]。 如果设置了,您将锁定设备的编程,直到R31[5]=0。

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

    嗨Timothy!

    非常感谢您的回答!

    我们附加了Matlab文件(POWER_UP_reconf__reinit_conf.config) ,该文件由 两个图形组成,分别带有CLKuWire,LEuWire和DATAuWire接口引脚。 有前缀-successfull \-unsuccessfull。

    第一次LMK0.4906万 (之后为"PLL")初始化后即可获得成功的图解, 这意味着在通电后 ,LMK0.4906万 (PLL)包含重置(默认)寄存器值。 在FPGA中进入用户模式时,我们开始根据 我们的要求(单PLL模式,内部VCO等)初始化PLL。  随附注册更改列表(*。txt 文件)。 记录了LEUWire/CLKuWire/DATAuWire接口引脚行为,并使用前缀"-successfle"进行了相应命名。

    成功编程PLL后,我们尝试使用以前使用的*。sof文件(我们使用Altera FPGA,它是SRAM对象文件)重新编程FPGA,记录了LEuWire/CLKuWire/DATAuWire接口引脚行为,并使用前缀"-unsuccessfull"进行了相应命名   (这是随附的MATLAB图中显示的两个图形)。 我们 比较了它们,但没有发现差别。

    对于 uWire_lock位,我们认为我们从不将其编程为值“1”,它始终为“0”值。

    此致,

    伊凡

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

    嗨Timothy!

    非常感谢您的回答!

    我们附加了Matlab文件(POWER_UP_reconf__reinit_conf.config) ,该文件由 两个图形组成,分别带有CLKuWire,LEuWire和DATAuWire接口引脚。 有前缀-successfull \-unsuccessfull。

    第一次LMK0.4906万 (之后为"PLL")初始化后即可获得成功的图解, 这意味着在通电后 ,LMK0.4906万 (PLL)包含重置(默认)寄存器值。 在FPGA中进入用户模式时,我们开始根据 我们的要求(单PLL模式,内部VCO等)初始化PLL。  随附注册更改列表(*。txt 文件)。 记录了LEUWire/CLKuWire/DATAuWire接口引脚行为,并使用前缀"-successfle"进行了相应命名。

    成功编程PLL后,我们尝试使用以前使用的*。sof文件(我们使用Altera FPGA,它是SRAM对象文件)重新编程FPGA,记录了LEuWire/CLKuWire/DATAuWire接口引脚行为,并使用前缀"-unsuccessfull"进行了相应命名   (这是随附的MATLAB图中显示的两个图形)。 我们 比较了它们,但没有发现差别。

    对于 uWire_lock位,我们认为我们从不将其编程为值“1”,它始终为“0”值。

    此致,

    伊凡

    e2e.ti.com/.../0640.registers_5F00_to_5F00_initilize_5F00_LMK04906.txt</s>0.4906万

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

    无法附加MATLAB文件,已将其上载到磁盘: https://drive.google.com/open?id=0B2uQ-6QWshBJOHVBSHYxNjlSZWM

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

    您好 ,Timothy!

    我们发现了一个有趣的问题。 首次成功初始化LMK0.4906万 (PLL)后,我们尝试使用 *。sof文件对FPGA进行编程(我们使用Altera FPGA,它是SRAM对象文件)  这与我们之前使用的相同,只是在FPGA中进入"用户模式"时,我们不会初始化PLL,而只是等待回读命令。

    更详细地说,我们在成功初始化的情况下写入"回读地址"位R31 (20至16),然后使用 不初始化PLL的*。sof文件对FPGA进行编程,因此当我们在FPGA中进入"用户模式"时,我们尝试从寄存器读取 (从我们之前在PLL中记录的地址),我们将获得值。 我们发现,在退出“用户模式”后 (由于使用*.sof文件重新编程):

    当我们开始检查31到0的所有寄存器时,我们发现当我们读取表单寄存器31-16时,我们得到零,从15-0寄存器有错误的值,寄存器0除外 (但仅因为寄存器1和0具有相同的值)。 结果,当我们从第7个寄存器读取时,我们得到的值应该在第14个(R14->R7),从第6个得到的值应该在第12个(R12->R6),从第5个得到的值应该在第10个(R10->R5),依此类推... 从0寄存器中,我们得到正确的值,可能是因为它与第一个完全相同。  

    R1 (地址)  0.0001万 -> 0万 R (0)

    R10 (地址) 0.101万 -> 0.0101万 R (5)

    R12 (地址) 0.11万 -> 0.011万 R (6)

    R14 (地址) 0.111万 -> 0.0111万 R (7)

    如前所述,在进入"用户模式"时,我们使用不会初始化PLL的*。sof文件,因此,在对PLL编程后,我们可以对*。sof文件进行编程(跳过PLL初始化),并从之前写入的寄存器回读(PLL的上次成功初始化)。  在"用户模式"期间,PLL也可以通过 从重置 (R0[17])到R0-31的后续寄存器记录重新初始化(我们有一个"REPEATE_initialization"参数,该参数使用所需的设置(PLL成功初始化后具有的设置)初始化PLL。 在获取在PLL中写入的正确寄存器值后,我们可以更改“回读地址”,并使用 不初始化PLL的*.sof文件重新编程FPGA,并从先前选择的寄存器获取回读值。

    因此,在第一次重新初始化后(不编程*.sof文件,只需重复向PLL发送寄存器-从重置 (R0[17])发送到R0-31)。

    在第一次 Repeat_initialization后,我们再次尝试回读并再次检查所有寄存器,这次R29-R0的值正确,但R30-R31不正确。

    在第二 次REPEAT_initialization后 ,我们尝试第三次回读并再次检查所有寄存器,这次所有寄存器都有正确的值。

    此致,

    伊凡

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

    您好 ,Timothy!

    我们发现了一个有趣的问题。 首次成功初始化LMK0.4906万 (PLL)后,我们尝试使用 *。sof文件对FPGA进行编程(我们使用Altera FPGA,它是SRAM对象文件)  这与我们之前使用的相同,只是在FPGA中进入"用户模式"时,我们不会初始化PLL,而只是等待回读命令。

    更详细地说,我们在成功初始化的情况下写入"回读地址"位R31 (20至16),然后使用 不初始化PLL的*。sof文件对FPGA进行编程,因此当我们在FPGA中进入"用户模式"时,我们尝试从寄存器读取 (从我们之前在PLL中记录的地址),我们将获得值。 我们发现,在退出“用户模式”后 (由于使用*.sof文件重新编程):

    当我们开始检查31到0的所有寄存器时,我们发现当我们读取表单寄存器31-16时,我们得到零,从15-0寄存器有错误的值,寄存器0除外 (但仅因为寄存器1和0具有相同的值)。 结果,当我们从第7个寄存器读取时,我们得到的值应该在第14个(R14->R7),从第6个得到的值应该在第12个(R12->R6),从第5个得到的值应该在第10个(R10->R5),依此类推... 从0寄存器中,我们得到正确的值,可能是因为它与第一个完全相同。  

    R1 (地址)  0.0001万 -> 0万 R (0)

    R10 (地址) 0.101万 -> 0.0101万 R (5)

    R12 (地址) 0.11万 -> 0.011万 R (6)

    R14 (地址) 0.111万 -> 0.0111万 R (7)

    如前所述,在进入"用户模式"时,我们使用不会初始化PLL的*。sof文件,因此,在对PLL编程后,我们可以对*。sof文件进行编程(跳过PLL初始化),并从之前写入的寄存器回读(PLL的上次成功初始化)。  在"用户模式"期间,PLL也可以通过 从重置 (R0[17])到R0-31的后续寄存器记录重新初始化(我们有一个"REPEATE_initialization"参数,该参数使用所需的设置(PLL成功初始化后具有的设置)初始化PLL。 在获取在PLL中写入的正确寄存器值后,我们可以更改“回读地址”,并使用 不初始化PLL的*.sof文件重新编程FPGA,并从先前选择的寄存器获取回读值。

    因此,在第一次重新初始化后(不编程*.sof文件,只需重复向PLL发送寄存器-从重置 (R0[17])发送到R0-31)。

    在第一次 Repeat_initialization后,我们再次尝试回读并再次检查所有寄存器,这次R29-R0的值正确,但R30-R31不正确。 需要注意的是,在第一次REPEATE_initialization过程中,PLL没有重置 (可以在回读引脚上看到,因为默认回读引脚是"STATUS_HO",而初始化选择的回读引脚是"STATUS_CLKIN_0")。

    在第二 次REPEAT_initialization后 ,我们尝试第三次回读并再次检查所有寄存器,这次所有寄存器都有正确的值。 PLL在此处重置,经过第二次REPEAT_initialization过程后,可以看到readback pin从重置位(R0[17])的八倍变了一段时间,直到我们将readback pin编程为新值为止。

    此致,

    伊凡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否提供图解的.jpg,.png等图像? 您将能够附加这些文件...另一个文件为145 MB,因此这可能是我们网站不允许您上传的原因。

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

    嗨Timothy!

    我们在Matlab图上附加了一个链接,下面是一个链接: https://drive.google.com/open?id=0B2uQ-6QWshBJOHVBSHYxNjlSZWM

    图片(jpg,png等)分辨率不足以详细检查界面。

    如果您没有Matlab,我们可以附加*。csv文件或文本文件。 但在这种情况下,你必须自己绘制数据。

    另外,请查看我们的最后一条消息:

    我们发现了一个有趣的问题。 首次成功初始化 LMK0.4906万 (PLL)后,我们尝试使用 *。sof文件对FPGA进行编程(我们使用Altera FPGA,它是SRAM对象文件)  这与我们之前使用的相同,只是在FPGA中进入"用户模式"时,我们不会初始化PLL,而只是等待回读命令。

    更详细地说,我们在成功初始化的情况下写入"回读地址"位R31 (20至16),然后使用 不初始化PLL的*。sof文件对FPGA进行编程,因此当我们在FPGA中进入"用户模式"时,我们尝试从寄存器读取 (从我们之前在PLL中记录的地址),我们将获得值。 我们发现,在退出“用户模式”后 (由于使用*.sof文件重新编程):

    当我们开始检查31到0的所有寄存器时,我们发现当我们读取表单寄存器31-16时,我们得到零,从15-0寄存器有错误的值,寄存器0除外 (但仅因为寄存器1和0具有相同的值)。 结果,当我们从第7个寄存器读取时,我们得到的值应该在第14个(R14->R7),从第6个得到的值应该在第12个(R12->R6),从第5个得到的值应该在第10个(R10->R5),依此类推... 从0寄存器中,我们得到正确的值,可能是因为它与第一个完全相同。  

    R1 (地址)  0.0001万 -> 0万 R (0)

    R10 (地址) 0.101万 -> 0.0101万 R (5)

    R12 (地址) 0.11万 -> 0.011万 R (6)

    R14 (地址) 0.111万 -> 0.0111万 R (7)

    如前所述,在进入"用户模式"时,我们使用不会初始化PLL的*。sof文件,因此,在对PLL编程后,我们可以对*。sof文件进行编程(跳过PLL初始化),并从之前写入的寄存器回读(PLL的上次成功初始化)。  在"用户模式"期间,PLL也可以通过 从重置 (R0[17])到R0-31的后续寄存器记录重新初始化(我们有一个"REPEATE_initialization"参数,该参数使用所需的设置(PLL成功初始化后具有的设置)初始化PLL。 在获取在PLL中写入的正确寄存器值后,我们可以更改“回读地址”,并使用 不初始化PLL的*.sof文件重新编程FPGA,并从先前选择的寄存器获取回读值。

    因此,在第一次重新初始化后(不编程*.sof文件,只需重复向PLL发送寄存器-从重置 (R0[17])发送到R0-31)。

    在第一次 Repeat_initialization后,我们再次尝试回读并再次检查所有寄存器,这次R29-R0的值正确,但R30-R31不正确。

    在第二 次REPEAT_initialization后 ,我们尝试第三次回读并再次检查所有寄存器,这次所有寄存器都有正确的值。

    此致,

    伊凡

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

    如果您没有Matlab,我们可以附加*。csv文件或文本文件。 但在这种情况下,您必须自己绘制数据。[/QUOT]

    是的,请发布CSV文件。

    73岁
    Timothy

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

    您好Timothy!

    以下是两个CSV文件。

    此致,

    Ivane2e.ti.com/.../CSV_5F00_interface.rar

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

    嗨Timothy!

    目前我们的问题是否有足够的信息? 是否需要其他文件?

    此致,

    伊凡

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

    我开始审阅文件。  但是,它们似乎 比编程更吵?  我希望看到一个运行良好的时钟,数据与CS*并排。  Y值也非常低,  这是否应该是电压?

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

    您好Timothy!

    这是另一个CSV文件(CSV_seconde2e.ti.com/.../CSV_5F00_second.rar)。 唯一的区别是现在有三个信号被分开。 文件的开头不包含有价值的数据,看起来像附加的整个png。 您可能只检查了文件的该部分。

    此致,

    伊凡

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

    您是否查看过我们的文件?

    此致,

    伊凡
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我恐怕你没有机会来回顾一下。 我的计划是对SPI数据进行解码,然后将其编程到LMK0.4906万中以查看行为。

    我并不期望任何事情会出现根本性的错误,可能是程序或使用简单的事情。 因为您有一个可以工作的编程。

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

    嗨Timothy!

    我们建议您将.txt文件与我们编程到LMK0.4906万的所有寄存器一起使用,这些寄存器都经过编号和分解,因此您可能不必解码任何数据,而只需使用我们的文件和TI编程工具。 我们还附加了*。png文件,它们是逻辑分析器的问题数据打印屏幕。 Myabe首先,您可以使用硬件重复我们的初始化顺序,如果您不能发现问题,那么在初始化阶段,我们可能会遇到一些不同的情况,我们需要找出问题所在。 我们认为,在通电后首次初始化后,LMK0.4906万会进入这样一种状态,即它对输入上的某些时钟或数据更改敏感,在第二次初始化时出现在这些输入上(我们的原理图设计包括FPGA,时钟发生器和LMK0.4906万, 我们从FPGA开启时钟生成。 FPGA的内部PLL锁定后,我们开始配置LMK0.4906万)。   

    // 在初始化过程中,所有 LMK0.4906万的第一个都是通过对重置位进行编程来重置的。 可通过回读引脚之间的差异来查看。   默认值为STATUS_HO,STATUS_CLKin0为初始化后的值。

    LMK0.4906万_FIRST_INIT_SUCCESS -开机后首次初始化。   

    LMK0.4906万_second_init_unsuccess -  LMK0.4906万上的第二次初始化(从第一次初始化写入的寄存器仍在那里),但不进行冷复位。  LMK0.4906万未在此处重置。

    LMK0.4906万_second_init_success重置- 在LMK0.4906万上进行第二次初始化(不进行冷重置)后,在FPGA上进行热重置

    LMK0.4906万_thirit_init_success_after readback - LMK0.4906万第三次初始化不进行冷复位 ,回读操作之后PLL进入某种新状态,可以成功初始化。  

    e2e.ti.com/.../LMK0.4906万_5F00_initialization.txt

    此致,

    伊凡

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

    嗨Timothy!

    您是否查看过我们的*。png -文件?

    此致,

    伊凡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我恐怕目前还不能取得进一步的进展。 您是否能够继续进行某些调试?

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

    您好Timothy!

    调试目前没有任何成功,没有任何变化。

    您是否有一些想法,我们应该怎么做?