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.

[参考译文] SN74V293:输出的 FIFO 数据始终为输入的 FIFO 数据。

Guru**** 2540720 points


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

https://e2e.ti.com/support/logic-group/logic/f/logic-forum/1198668/sn74v293-fifo-data-out-isn-t-always-the-fifo-data-that-went-in

器件型号:SN74V293

我在一个应用中、将74V293连接在微控制器和并行 DAC 之间、在两者之间提供"弹性"缓冲器、并使数据以良好受控的速率传输到 DAC。

我曾尝试过74V293的几种型号、包括 EP 版本以及-6和-7标准产品速度等级。

大多数时候、它运行良好、但在本应用中、大约每200倍从 FIFO 发出的数据就会与进入的数据不同。

没有明显的原因。  例如、我会监控 FULL 和 EMPTY 标志、但这些标志从不被置为有效。  当输出符合预期和不符合预期时、所有运行方面看起来都相同。

原理图如以下主题中所示: https://e2e.ti.com/support/logic-group/logic/f/logic-forum/874433/sn74v293-unexpected-offset-value

由于输出驱动一个16位 DAC、所以只使用 D0-D15和 Q0-Q15。  FIFO 配置为用作65536x18存储器。

数据以突发8192个值的方式写入 FIFO。  读数处于恒定25MHz。  微控制器会缓存写入的数据、因此以大约30M 值/秒的平均速率写入、但实际上以更短的脉冲形式写入、这些脉冲具有几个周期的长度、并且周期时间更短。

不过、我已经尝试延长数据设置时间、以便写入周期具有非常保守的时序。  但这并不能消除这个问题。

可编程空标志自动运行、被设定为49152、并被用于触发 FIFO 补充。  

我只能使用16数字+ 2模拟通道 MSO 进行调试、因此无法轻松监控输入和输出。  如果我操作这个特定的 MSO 以便它记录时钟并行总线、那么我只能使用数据总线的14位来监控使能和时钟线路。

但是、通过单独监视输入和输出、我可以看到写入 FIFO 的数据始终正确、但输出中出现的内容有时会损坏。

通常、数据代表正弦信号。  为了尝试更多地处理正在发生的事情,我调整了代码,以便在发生这个问题时,写入的数据是一个从0到65535的线性序列,增量为2 (出于方便的原因,我不会在这里打扰)。

当这个线性测试序列被监控时、它立即变得清楚输出上正在发生什么:

(不知道为什么图像质量在上传时已经恶化了很多、但我认为它已经足够清晰了、可以跟随)。

顶部黄色迹线表示 DAC 输出:请忽略该图。  蓝色迹线来自顶部、REN、RCLK、Q2-Q15。

很清楚、每当输出位从低电平转换为高电平时、所有低位位、直至包括 Q5、然后在接下来的8个 RCLK 周期切换。

为便于理解、屏幕截图仅显示了位转换的选择。  但这种现象发生在 Q5-Q15从低到高的转换时、包括 Q16不存在的转换。

我不认为 REN 上的干扰是"真实的"。  我认为它们是一个不太理想的探测工件,这涉及到很多细小的电线,使板成为一个电孔。

什么导致了意外的数据模式?

几天以来、我一直在电路周围进行探测并尝试不同的测试、但没有找到任何可能导致这种情况发生的机制。

欢迎提出任何建议。

Colin

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

    嘿、Colin、

    我对我们的存储器 IC 没有太多经验... 能够帮助你的人是今天(2/21)出去,但应该在明天星期三(2/22)。 我会将这一请求转发给他,希望他能帮助你更多。  

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

    尊敬的 Albert:

    您的同事是否有机会了解此问题?  我不会更接近找到解释或解决方案。

    此致、

    Colin

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

    尊敬的 Colin:

    大多数时候它可以正常工作,但在这个应用程序中,大约每200次从 FIFO 发出的数据与进入的数据不同即可。

    根据以上描述、我的预期是有时可能无法满足时序要求、这可能导致存储不正确的数据。

    我首先建议查看的是模拟输入波形-上述数字分析有助于检查数据、但逻辑分析仪可以识别 一个值/时序、而器件本身不一定"看到"相同的值。 数据表中存在一些时序限制:

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

    尊敬的 Emrys:

    感谢您的回复。  从一开始、设计就采用了保守的时序。

    我理解您的观点、即逻辑分析仪和 FIFO 可能具有不同的逻辑阈值、但我使用模拟通道检查了波形、上升和下降时间足够快、可以确保轻松满足时序限制。

    这是示波器中的一个屏幕截图、其中同时显示了输入和输出总线的高6位、输入总线("D"总线)上的所有位都从高到低转换:

    这是所有输出位('Q'总线)从高到低转换的屏幕截图:

    EF 和 FF 标志位于模拟通道上。  它们永远不应处于活动状态、即使输出数据不正确、我也看不到它们上有任何活动。

    输出由 FIFO 使用一个25MHz 固定时钟源计时。  REN 固定为低电平。  我认为在这方面不会有太多的错误。

    在输入端、数据通过 STM32F4微控制器上的静态存储端口进行传输。  从屏幕截图可以看出、写入脉冲的宽度约为11ns。  屏幕截图不太清楚、但数据在 WCLK 的下降沿附近稳定、并在下一个写入周期之前保持稳定、因此很容易满足数据设置和保持时间要求。

    WEN 在运行期间保持低电平。

    这两个屏幕截图在不同的时间进行、因为从数据写入 FIFO 到读取数据之间存在2.6ms 的延迟。

    考虑到读取和写入时钟比规格要求慢得多、并且满足数据设置和保持时序要求、哪些其他时序违规可能会导致该问题、即输出数据永久停止与输入数据匹配?

    Colin

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

    嘿、Colin、

    [报价 userid="436158" url="~/support/logic-group/logic/f/logic-forum/1198668/sn74v293-fifo-data-out-isn-t-always-the-fifo-data-that-went-in ](不知道为什么图像质量在上传时退化了这么多,但我认为它已经足够清晰了)。[/报价]

    对于 E2E 帖子、当您附加图像时、您可以 在帖子中选择图像、然后选择左下角的"编辑"按钮。 在该弹出窗口中、您可以更改显示分辨率(我通常只需将宽度设置为800、并将高度留空以保持宽高比)。 我敢肯定、这是为了节省服务器上的内存、但这在 E2E 中却是一项令人沮丧的"功能"。

    -

    我的第一个检查是  在问题发生时查看模拟输入/输出信号。 DAC 在出现错误时好像有点疯狂、因此您可以将其作为触发器来查看发生的情况... 不过、我不确定您需要多少深度的存储器范围能够以纳秒级捕获超过2.6ms 的历史。

    坦率地说、我不经常查看这些器件-实际上、我不记得在过去8年中我一直为 TI 支持逻辑的时间里有一个关于这些器件的问题。 我要联系另一位 TI 员工、看看他们是否能提供一些有用的建议。

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

    尊敬的 Emrys:

    嵌入图像的注释点。

    我之前在该主题中包含的链接就是几年前我询问过的有关这些器件的问题。  我针对当时发现的错误制定了一个权变措施。

    该问题最初是由于 DAC 的输出波形错误而发现的、但这是一个很难触发的"错误"!  这就是我遇到 FIFO 的控制和数据信号问题、并尝试在发生活动时触发的原因。

    我使用的示波器可以捕获4Mpts、因此我可以获得几毫秒的数据。  挑战在于找到能够照亮该问题的几毫秒数据。

    感谢您的持续帮助。

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

    嘿、Colin、

    在等待我的同事回复的同时、我可以告诉您一些需要注意的事项。

    我发现你写的一篇关于类似主题的较旧的文章-- 对你来说,这是 一个相对较新的问题,还是一个你一直在追逐一段时间的 Gremlin?

    假设已经有一段时间了、我想看看不太可能的解决方案/之前可能还没有看到的事情。

    布局问题可能会导致串扰和反射、从而可能导致写入或从器件中读取不正确的值。 您是否有可能共享电路板布局?

    如果您无法分享、我建议您查看电路板中的接地层/电源层、并验证它们是否未在有问题的通道附近明显切断、从而影响信号的阻抗和串扰。 至少在 BGA 上、这些引脚彼此非常接近:

    它也可能有助于从您的测试点观察输入侧的导线延迟-这可能不是问题,但看是否有任何明显的差异可能导致时间比预期更接近它是没有好处的。

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

    尊敬的 Emrys:

    我的一位同事在一段时间前发现了这个问题、但直到最近才向我报告。  因为这是一个间歇性和偶然性的问题,不会造成严重的问题,他们把它放在一边。

    您提到的较旧帖子是我链接到的帖子、因为它包含原理图的相关部分、以便再次保存上传。  较旧的帖子是一个不同的问题、但确实与这些部件有关。

    在该板上、我使用 QFP 封装。

    电路板为4层、具有本地接地平面和电源平面以及双面组装。  以下图片(这次分辨率越高!) 是处理器和 FIFO 周围的区域、按照顶部铜、接地平面、电源平面、底部铜的顺序排列(我不打算将制造文件放在公共论坛上、但图像应该会很好地说明布局: 处理器和 FIFO 下的接地平面或电源平面没有任何切口)。

    我一直保留了顶部图例、但底部覆铜除外、因此它们易于对齐。  在底部铜层上、我使用了底部图例、因为那里有组件(底部主要用于去耦电容器、其中有很多)。

    问题会影响所有数据线路。  每条数据线的总布线长度各不相同、从最低大约35mm 到最高大约70mm 不等。  写入时钟布线长度约为95mm。

    我不会指望这些差异会造成超过几百 ps 的边沿时序差异、这是悲观的结果。  考虑到设置和数据时间要求、即使只有很小的 ns 时序差异也不会导致问题。  并且、正如我所提到的、如果我延长微控制器外部总线配置中的数据设置时间、问题仍然存在。

    从测试点观察输入侧的电线延迟

    我假设您是在建议我看到测试点的转换有多大的分布。  在我拥有的范围分辨率限制(2GS/s)下、我看不到任何变化。  我这里的设备无法进行比这更复杂的测量。

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

    嘿、Colin、

    对我来说、您的布局看起来不错- 这是一个很长的创意。

    我与在器件发布时间附近支持这些器件的人进行了讨论、他说、他最常看到的两个问题是上电时序和复位信号序列。 显然、如果没有精确遵循这些条件、器件可能最终 处于可能导致问题的错误状态。 我不认为这是你遇到的问题、但至少值得一看。

    我还要求 团队中有类似系统经验的另一位成员查看此问题、看看他是否发现了任何问题。

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

    尊敬的 Emrys:

    我不认为这可能是上电序列、因为不匹配的输入和输出数据在没有下电上电的情况下发生。

    但该器件经常会受到完整主复位序列的影响。  正如您可能预期的那样、连接到 FIFO 输出的 DAC 用于生成波形。  每次此单元更改输出波形时、都会重新初始化 FIFO、重新测试(有许多防御代码)、然后生成新的输出。

    数据表中显示的主复位序列看起来并不复杂。  每次重新初始化时、用于配置器件的引脚被设定至适当的电平、并且主复位被发出脉冲信号。  我已经实现了非常保守的时序:主复位脉冲有效(低电平)时间大约为1us。

    主器件复位完成后、可编程标志偏移使用并行接口进行编程(只有可编程部分空标志- PAE -实际用于应用)。

    考虑到我几年前发现的错误(链接较早于线程)、通过并行接口读回可编程偏移不会返回正确的值、因此软件继续使用已知值完全填充 FIFO、 然后将其清除,直到 PAE 激活以验证是否已加载正确的值。  每个从 FIFO 中输出的值也会被验证、因此每次配置新输出时、FIFO 都会有效地进行完全自检。

    在此应用中、所有花费的几分之一秒并不明显。  系统中的其他组件发生的情况几乎相同。

    然后 FIFO 完全填充波形数据、并且启用读取时钟。

    随着 FIFO 的消耗、PAE 变为活动状态、新数据将被传输到中以连续生成 DAC 的输出。

    如果该过程的自检部分没有为偏移和数据传输返回正确的值、则会报告错误、但我从未看到发生过此类错误。

    您能发现我在该流程中可能忽略的任何内容吗?  或者、在什么情况下、该序列中的计时可能足够严重、从而可能导致器件最终处于可能导致问题的状态?

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

    嘿、Colin、

    您是否可以在这两个缓冲区上强制执行禁用条件、并查看问题是否仍然存在? 我在这里的同事指出、该器件与 DAC 或 FIFO 之间的总线争用没有任何保护措施、因此可能是间歇性问题。

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

    尊敬的 Emrys:

    当输出信号生成时、缓冲器被禁用。  如果不是、那么输出将完全混乱!

    不过、很容易错过原理图上的信号:缓冲器禁用信号在此处突出显示:

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

    嘿、Colin、

    Emrys 目前不在办公室。 他应该明天回来,并可以继续支持你的这件事。

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

    我怕我出了主意。

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

    尊敬的 Emrys:

    感谢您的支持和建议。  当我到达问题的底部时、我将发布更新。