在过去的几年中,我使用了许多微控制器,其中有时会出现一些硅级错误,制造商会向工程师提供勘误表,描述他们可能会遇到的意外行为。
他们为什么不修复这些“错误”?由于产品仍在生产,并且在大多数情况下解决问题不会影响以前的实现,为什么他们不只是修改它?在许多情况下,产品可能会稳定下来,可能已经发现了大多数错误,并且可能会在产品使用寿命中占很大一部分。
(技术上)如此困难吗?昂贵?
A
。结果证明是有据可查的,但确实使人们感到困惑。
在过去的几年中,我使用了许多微控制器,其中有时会出现一些硅级错误,制造商会向工程师提供勘误表,描述他们可能会遇到的意外行为。
他们为什么不修复这些“错误”?由于产品仍在生产,并且在大多数情况下解决问题不会影响以前的实现,为什么他们不只是修改它?在许多情况下,产品可能会稳定下来,可能已经发现了大多数错误,并且可能会在产品使用寿命中占很大一部分。
(技术上)如此困难吗?昂贵?
A
。结果证明是有据可查的,但确实使人们感到困惑。
Answers:
关键错误确实得到修复。通常,它们在产品进入生产之前就已固定。除非您使用的是早期样本,否则您可能永远不会看到最严重的错误。
修复错误既困难又昂贵。这不仅仅是更改一行RTL代码。如果这样做,则必须重新合成,重做物理布局,调整布局以解决任何时序问题,购买全新的掩模组,生产新的晶片,测试晶片(通常),验证新的修正,以及可能再次表征或鉴定产品。这需要数月的时间,并花费大量金钱。因此,我们尝试直接在布局中(最好在单个金属层上)修复错误。这比从RTL综合开始更快,更便宜,但是仍然不是很好。
如果我们还是要修复一个关键错误,为什么不还要修复所有其他错误呢?再次,这需要时间-需要时间来确定和实施修复,需要时间来重新运行设计验证测试。这段时间意味着将下一个产品推向市场需要更长的时间。同时,如果您看上去足够努力的话,几乎可以肯定会在当前产品中发现更多错误。这是一场失败的战斗。在已经存在很长时间的产品上,修复错误甚至变得更加困难,因为人们不得不深入研究旧的设计来弄清发生了什么。正如Null所说,客户可能必须重新认证您的系统中的产品。如果您的产品仍在开发中,则延迟生产发布可能会导致客户计划拖延,这会使客户非常不满意。
通常,遗留的错误仅在怪异的配置中发生,导致非常小的问题,具有容易的解决方法或以上所有条件。他们只是还不至于值得麻烦。而且,如果您在下一个产品上重复使用硬件模块,则现有客户无论如何都已经可以在其软件中解决该问题。
软件工具链是另一个因素。如果一个模块停留了足够长的时间,您的工具链可能会发生足够的变化,以至于重做旧的验证测试本身就是一个主要项目。而且您可能不能只加载旧工具,因为您不再为站点许可证付费。但是,只要不更改模块,就可以继续将其复制并粘贴到新的MCU中。
软件也是客户方面的问题。如果您的错误修正以任何方式破坏了向后兼容性,则所有客户都将不得不更新他们的代码,他们甚至可能不再拥有该工具。
作为从事微控制器开发的人,我可以告诉您,我们都愿意修复每个错误。但是,这样做会意外地延迟开发,烦扰客户,花费大量资金,而最终,我们仍然可能会失败。
通常是因为费用。
当您“修复”错误时,总是存在破坏其他内容的风险。因此,制造商通常需要完全重新鉴定设备并重新定性,以确保“修复”未引入其他(甚至可能更令人讨厌的)错误。这意味着金钱和时间(对于制造商而言,这也是金钱)。这也意味着制造商让员工固定现有产品,而不是开发新产品。
与此相关的是,有时客户还需要对产品中的固定设备进行重新认证,以确保错误修复程序也不会破坏系统中的某些内容。这对他们来说是花费金钱和时间,而且客户可能不愿意接受这些费用-他们仍然需要“越野车”版本。
当然,在某些情况下,该错误在技术上确实很难修复。在这种情况下,修复它的成本甚至更高。
如果零件的主要购买者将其用于已通过认证的设计中,例如在飞机或航天飞机上使用,则对设计中使用的任何组件进行的任何更改都将要求对整个设计进行重新认证。如果设计能够适当解决硅片中的所有错误,则修改硅片可能需要让客户重做其电路板的所有资格测试,维持“非固定”和“固定”零件的供应,或者只是继续制造旧设计。芯片供应商没有发布他们的购买者名单,但是在某些情况下,单个客户可能代表了对特定芯片需求的很大一部分,因此公司可能不愿采取任何措施给客户带来不便。
话虽这么说,在以后的零件中仍会出现一些硅勘误表,其中一些缺少适当的解决方法。我最大的烦恼可能是Microchip 18Fxx器件中UART的传输逻辑中存在竞争条件,如果代码试图在错误的时间传输数据,这可能导致它传输虚假的NUL字节。Microchip建议的解决方法是编写代码,以确保在UART开始发送停止位以发送更早字符的时间与完成传输的时间之间(如果发生中断),它不会尝试加载传输数据寄存器。禁用,通常在传输缓冲区为空的中断处理程序中的代码不会被执行
虽然我可以理解诸如Microchip UART错误之类的错误可能如何潜入,但修复应该并不困难:我希望Microchip根据非同步的“传输完成”和“加载的字符”的“与”来生成“运行”信号信号,并且如果前一个信号紧随后者之后又改变状态,则会遇到麻烦(导致TX缓冲电路错过了在给定周期上加载字符数据的机会,但允许TX定序器在该周期上开始新的传输) ; 即使Microchip不想在发送器为空且加载了字符或加载了字符后发送器为空的正常情况下增加了同步延迟,也可以解决该问题,而不会影响这两种定时的时间在这些情况中通过添加三个NAND门和两个同步锁存器。但是,自该问题发布以来,已经交付了许多零件,而没有添加任何此类修复程序。
发现错误后,它们可能已经生产(但尚未出售)成千上万个IC。他们不会仅仅因为一个错误就把它们扔掉。
我认为您可以将其与书籍印刷进行比较。在短时间内(几天,几周)一次印刷成千上万本书籍。但是它们在几年或几十年内就被出售了。发现错别字或其他错误后,这些书不会被丢弃并重印。同样对于书籍,勘误表被打印并交给用户。
当然,已知错误(错别字,错误)将在下一版中修复。