我正计划设计一个定制的 FPGA PCB。PCB 将包含传感器。我需要读取传感器的输出并在处理器中处理它们。我已经使用 FPGA 完成了许多项目,但这将是我的第一个定制设计,我还需要考虑硬件配置。我最近做了一些研究,但我仍然很难从一个点开始。因此,我请求您帮助我和其他想要设计定制 FPGA 的人,他们在每个步骤中需要考虑哪些要点。是否有书籍/在线资源可以在这个过程中帮助我们?在我完成我的项目后,我也会制作一个文档,以便人们可以使用它。
定制 FPGA PCB 设计技巧
在我的公司,我们之前设计了一些定制的 FPGA 板,并且最近开始使用带有定制 FMC 子板的商用现货 (“COTS”) FPGA 板。
原型阶段
如果您仍处于早期项目定义阶段,请计划购买至少一块 COTS FPGA 板用于原型设计。您可以将一个传感器连接到 I/O 接头并进行快速概念验证。这让您了解该项目在扩展到多个传感器时可能会如何执行,并估计您可以使用给定的 FPGA 支持多少。
如果 FPGA 太小或太慢,或者工具不适合这项工作,在这个阶段很容易换成不同的 COTS FPGA。(嗯,不容易,但至少可以管理......)
如果固件在这个阶段不起作用,很明显是因为固件问题,而不是定制 PCB 设计错误。使用定制固件和定制 PCB,有时很难判断哪一方有问题。
定制 FPGA 板与商用现成 FPGA 板
如果项目的生命周期短、体积大或需要比使用 COTS FPGA 板和 PMOD 或 FMC 附加板实现的更小的外形尺寸,则设计定制 FPGA 板是有意义的。
如果项目生命周期超过 DDR 内存芯片的产品生命周期(几年),那么设计定制 FMC 子板可能是更好的选择。
成本是这个决定的一个因素。大多数 COTS FPGA 板都具有一定的通用性,旨在实现最大的灵活性。如果您正在制造大批量、对成本敏感的产品,那么进行定制设计可能是值得的;但对于小批量,您可能最好专注于制作子卡。
无论您选择哪种方法,某些接口都需要清晰的主文档:在FPGA 顶层 I/O 引脚和板的其余部分之间的接口处,以及板之间的连接器接口处。这些是引脚位置、内部网络名称和外部网络名称有时不匹配和交换的地方。一张表格就足够了;请务必保持此接口表版本化并处于源代码控制之下。在将 PCB 文件发送到制造之前,请打印一份该接口表的副本、一份原理图副本以及一份 FPGA 引脚/焊盘报告的副本。在纸上拖动荧光笔以检查每个信号应连接到的位置。
对于连接器,我已经学会了提供机械“系统图”的艰难方法,该图将电路板和配对连接器一起显示在单个尺寸图上。我首先被 VME 连接器系统烧毁,其中一个连接器上的引脚“A1”没有映射到另一个连接器上的引脚“A1”。我还看到设计师忘记了一对直角连接器会导致镜像连接(90 度 + 90 度 = 180 度)。当我负责主板而其他几个项目经理负责各种子板时,这是一个问题。
定制 FPGA 板提示
从 FPGA 供应商的“参考设计”开始,然后省略您的应用不需要的任何部分。不要从 FPGA 上移除任何旁路电容器,也不要试图通过使用更少的 PCB 层来逃避。注意层堆栈(通常在钻孔图旁边找到);细间距元件通常使用 0.5oz 铜而不是标准的 1oz 铜箔厚度。
BGA 封装很难使用。良率永远不会像 TQFP 或 TQFN 封装那样好,而且返工 BGA 几乎是不可能的。即使是检查装配问题也需要 X 射线成像仪。请务必使用您信任的合同制造服务提供商。
使用 FPGA 板时,电源总是很棘手。FPGA 的实际功率需求很大程度上取决于配置比特流。Xilinx 提供了一个“功耗估算器”工具,但该估算仅在固件完整的情况下才有效。在最后一刻进行固件更改时存在风险,即功率要求高于预期。计划留下一些供应电流余量。如果最初的功率估计表明您需要 560mA,请继续使用 1000mA 稳压器。额外的可用输出电流无害,但输出电流不足会导致系统行为异常。
如果有任何未提交的 FPGA 管脚,请尽可能多地将其引出到标头。当出现问题时,这些未提交的引脚将成为用于探测 FPGA 内部信号的宝贵诊断资源。
我设计了十几种基于 FPGA 的板,它们采用了从低功耗 Lattice Mach X02 到具有 24 个 SERDES 通道的高性能 Virtex 6 的各种不同类型的 FPGA。我遵循的正常步骤是:
找一块 COT 板(类似于 MarkU),大致了解一下你需要的内部 FPGA 资源,我特别注意:
- LUT(查找表)计数:(设计是否适合参考板上的 LUT?)如果您没有资源或详尽的方法来确定 LUT 使用的精确估计(< 1K LUT 精度),因为可能设计尚未完成。使用这个经验法则。如果设计已接近完成,请考虑设计的大小(LUT 数量)并找到具有至少 30% 以上 LUT 的 FPGA。如果设计还没有接近完成,则可以增加 50% 或 100% 的 LUT。因此,如果设计适合 9K LUT,请确保使用具有 12K LUT 或更大的 FPGA。我倾向于过度杀伤,可能会达到 25K LUT。这将在以后为您省去令人难以忍受的头痛。调试此电路板设计的任何人都应该了解,此设计应该有不止一个旋转,因此将 FPGA 的第一个版本过大是可以理解的。
- BRAM(块 RAM 计数):确定您的设计是否需要比 FPGA 内部更多的内存资源。一开始这很容易被忽视,但在设计中,由于各种原因(ROM、FIFO 等),您倾向于使用块 RAM ) 它很快就吃光了我所有的 LUT。确定是否需要外部存储器很重要。这给设计增加了很多风险,因为如果设计需要任何级别的性能,你可以'
- 列举您将使用的所有信号标准和可能的电压电平:这很重要,因为您希望使用的某些信号标准(LVDS、LVSPEC、LVCMOS)可能有电压限制。仔细阅读用户指南并确保支持所有这些标准。
- 电源要求:我对以前所有关于电源尺寸过小、核心电压规定为凝灰岩的抱怨表示同情,最近我一直在为大型但低端的 FPGA 使用大量 TI Nano 模块(Spartan LX45(T) - LX75(T)和格子ECP3)。幸运的是,在确定用于 I/O 的电源大小时,您可以减轻一些风险。特别是如果该组未驱动未知源(扩展连接器),则过程如下:找到该组将连接到的所有组件,确定所有这些组件的输入电容,找出您的最大时钟速率将驱动这些信号,然后您可以计算功率要求并粗略估计旁路要求,
使用等式 [P = (1/2)CV^2 * (f)] 其中 C = 输入电容,f = 频率。FPGA 必须驱动的输入(对于每个信号!)。您可以找到驱动所有输出信号所需功率的最坏情况估计。
您还需要考虑与内部终端电阻相关的功率损耗(基于您使用的 I/O 标准)
我最近也越来越多地使用 TI Webbench 工具并取得了很大的成功:
TI Webbench (我不为 TI 工作)
示意图:
用一个白痴来设置你的原理图你和所有的 HDL 设计者都会经常回到这个原理图上,所以让每个人都可以很容易地快速找到他们需要的东西,而不需要你或他们将来研究整个原理图来找出答案如果引脚 20 是时钟输入。这包括原理图上的许多注释(如果可能),描述电路的目的,预期结果甚至关注点。因为 FPGA 可以分解为 bank,所以考虑将 FPGA 组件分解为多个部分,甚至可能将整个原理图页面专用于单个 bank。
在您的示意图中添加关于将时钟连接到正确引脚的大量令人讨厌的注释:当我为设计构建我的第一个图像时,我的头撞到了许多墙上,并得到了可怕的“时钟信号路由到非时钟启用的引脚” . 生活在对 FPGA 上各种类型的时钟管脚的恐惧中。确保您了解某些时钟引脚旨在用于 FPGA 的象限,否则您将面对所有人说:“嘿,您是否知道某些时钟引脚旨在用于 FPGA 的象限”。只需要 15 个人告诉你这一点,就可以确保你再也不会这样做了。
花费大量时间在 FPGA 配置设计上:确保带出 JTAG 引脚,即使您不打算使用它们。这是一个可行的错误和一个致命的缺陷之间的区别。
如有疑问,请带出额外的信号按钮、LED 和 DIP 开关:我对将额外信号路由到分线接头 LED、DIP 开关和按钮相关的额外工作抱怨了很多,但它总是有帮助。
布局:
尽早与 Fab house 沟通:特别是如果您可能需要阻抗控制布线,请要求堆叠层以达到所需的层数。当您首先定义走线宽度并确定您可以使用 6 mil 走线而不是 8 mil 走线来实现 50 ohm 阻抗时,路由高速信号会容易得多。
从旁路电容开始:尽早设计电源系统。我做的第一件事是首先将所有小电容放在 FPGA 下或靠近引脚。在 FPGA 之外的较大的电路并路由整个电源电路并将其大致放置在我期望的位置。这样,您就不会与路由难题作斗争并做出妥协。
其次是高速信号:这些将是您不想跳过太多层的信号。
我总是在学习更多的东西,并且会喜欢其他设计师遇到的任何其他技巧,所以请添加它们。
我认为配备 FPGA 的定制 PCB 的一个很好的起点是 FPGA 供应商的参考设计板。例如,您可以检查这些设计的电源,但请注意参考设计板有时尺寸过小。由于电源尺寸过小,Xilinx ML605 板失去了配置,我们遇到了很多麻烦。
回复 omid 的评论:
我的一位同事在 Virtex-6 LXT240 上实现了收缩计算算法。数据输入由千兆以太网提供。由于脉动方法,如果输入 fifo 中没有数据,或者如果新的以太网帧到达,FPGA 的所有触发器都以 200 MHz 切换,FPGA 几乎什么都不做。这种计算不平衡导致 TI 的电源电路关闭 ML605 板,只有通过切换主电源开关才能从这种状态中恢复。
我们把这个设计交给了我们大学的电气工程系,他们发现,没有办法根据安装的电容器调整调节器系数。
是的,有人可能会说:糟糕的设计或使用更大的 fifo 或......
我同事的解决方案是将 FPGA 利用率降低了 80%。
尽管如此,原型板和参考设计应该能够处理极端的工作负载,特别是如果该板包含的 FPGA 的功耗不如 CPU 那么正常。