在执行实时故障检测时,您通常会遇到权衡:您可以以高速率采样但面临很长的死区时间,或者可以以非常低的速率采样并获得几乎连续的数据。 显然,这两种方法都不是理想的。 然而,有一种方法可以更好地优化您的测试设备——使用 VHDL 和可定制的测试设备自行编程瞬态故障检测。 这样做可以让您实时检测 FPGA 中的故障,甚至可以在您已经使用的测试和验证设备内进行故障检测。 我们知道,编写 FPGA 代码因比传统的过程编程更具挑战性而享有盛誉。 然而,像 ChatGPT 这样的新一代大型语言模型可以让您在不了解某门语言细节的情况下轻松高效地使用该语言。
传统方式
测试装置不太擅长瞬态故障检测。 通常有两种监控和检测方法:
- 高频率但间歇性
- 低利率但持续
选项 1 使用示波器。 示波器的死区时间通常在 20% 到 >99.9% 之间,因此依靠在屏幕上“看到”瞬态故障的可能性很小。 解决此问题的一种方法是设置一个触发器,使示波器能够为您进行故障检测并仅向您显示结果。 这种方法有一些缺点:首先,故障必须是能够被触发的,其次,它只能可靠地告诉您故障是否发生过一次。 它无法确定故障计数、故障率、故障状态下的总时间等。
选项 2 使用数据记录器或数据采集设备。 在这种情况下,计算机实时监控所有相关信号并可以计算中间值。 系统检测故障和相关参数。 然而,这种方法也有其自身的缺点。 这种方法需要计算机具有适当的编程环境,但更重要的是它只能监测达到某个最大速率的信号,受到计算机功率、任何计算的复杂性以及数据采集设备之间连接的吞吐量的限制和电脑。
人们希望将两种方法的优点结合起来:检测复杂的瞬态故障状况并实时测量其参数,而不受低采样率的限制。 Moku 设备方便地利用片上仪器架构和用户可编程 FPGA。 与 Moku 设备上最多 15 个其他仪器一起(图 1),Moku Cloud Compile (MCC) 为自定义仪器提供了编程环境。 MCC 提供您编写自己的 FPGA 代码并将其部署到 Moku 所需的所有基础设施。

图 1:具有 iPad 和桌面界面的 Moku 产品阵容
示例:瞬态电源事件检测
假设您的测试仪需要监视电源系统的瞬态电源事件。 系统的额定功率高达总功率,但实际上,只要事件发生率、事件时间和故障条件下的总时间低于阈值,它就可以承受瞬态过功率。 换句话说,我们希望设计一个能够:
- 通过系统中的一个点监控功率,即监控电压和电流,然后计算功率。
- 计算功率超过阈值的次数(如果有)。
- 记录功率超过阈值的总时间。
我们还可以记录任何一个故障的最大持续时间、故障条件下的总能量等等,但我们将仅限于这三个步骤。
这不太适合像使用示波器那样进行间歇性监测。 当示波器的输入是电压和电流时,需要示波器在功率电平上触发。 很少有系统可以使用实时计算作为触发电路的输入。
根据系统参数,它也不太适合数据采集方法。现代电力系统可能会被高速瞬变损坏,需要较高的采集速率;但像这样的电力系统通常设计用于长时间连续使用,因此系统需要监控以确认其行为的时间也可能非常长。总之,这会导致数据量非常大,从而增加成本和复杂性。
定制片上仪器部署是一个完美的选择,让我们看看如何使用 ChatGPT 来帮助我们构建一个。
用于自定义故障检测的 ChatGPT
首先,ChatGPT 在给出非常具体的指令时表现最佳。 将大型问题陈述分解为更易于管理的迭代。 这样看来,还真是人性啊!
接下来,我们要求一个 VHDL 实体来计算图 2 中的故障事件数量。

图 2:提示 ChatGPT 基于 VHDL 的故障计数器。
接下来,我们添加故障状态总时间的计数器(图 3)。

图 3:提示 ChatGPT 将计数器添加到我们的程序中。
最后,我们通过将故障条件阈值添加为 VHDL 实体的端口,使故障条件阈值在运行时可配置(图 4)。 在最终的 MCC 实现中,该阈值将连接到控制寄存器,因此无需重建整个仪器即可对其进行设置。

图 4:提示 ChatGPT 修改我们的实体。
在本文末尾可找到最终 VHDL 的完整列表。
请注意,我们尚未解决计算输入功率的问题。 我们可以通过在电压和电流输入进入 VHDL 实体之前将它们简单地相乘来实现这一点。 图 5 显示了如何在 MCC 中实例化该实体的示例,并将电源作为输入。

图 5:用 VHDL 计算输入信号的功率
请注意,这确实将输入端口的宽度从 16 位增加到 32 位。 这里的实例化可以丢弃低 16 位(如果精度损失可以接受),或者更新实体以直接采用 32 位输入。 无论哪种方式,您所需要做的就是询问! 请参阅本文末尾的提示。
回顾:使用 ChatGPT 和 Moku Cloud Compile 执行自定义瞬态故障检测
我们遇到一个问题,需要对计算量(而不是可以直接测量的量)进行实时、高速率、无死区故障检测。 仅经过三个提示,ChatGPT 就为我们提供了用 VHDL 实现此功能所需的所有代码,VHDL 是一种专门为 FPGA 上的高速数据处理而设计的语言。 简单的剪切和粘贴操作和一点粘合代码,以及 Liquid Instruments 的 Moku Cloud Compile 将其转变为自定义仪器,能够部署到 Moku 片上仪器。 10分钟的工作还不错!
有关将 ChatGPT 与 MCC 结合使用的更多示例,请在此处观看我们的网络研讨会: https://liquidinstruments.com/webinar-registration-moku-cloud-compile-and-chatgpt-essential-strategies-for-testing-smarter-with-ai/
对想要与 MCC 一起开发的定制仪器有疑问吗? 联系我们: support@liquidinstruments.com 我们将为您联系一位工程师。
附录1:代码清单

VHDL 代码片段:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity RisingAboveZero is
Port (
clk: in std_logic;
reset: in std_logic;
in_value: in signed(15 downto 0);
threshold: in unsigned(15 downto 0);
out_value: out signed(15 downto 0);
out_cycle_count: out signed(15 downto 0)
);
end RisingAboveZero;
architecture Behavioral of RisingAboveZero is
signal counter: signed(15 downto 0);
signal cycle_count: signed(21 downto 0); -- Updated to 22 bits
signal previous_value: signed(15 downto 0);
begin
process(clk, reset)
begin
if reset = '1' then
counter <= to_signed(0, 16);
cycle_count <= to_signed(0, 22); -- Updated to 22 bits
previous_value <= to_signed(0, 16); elsif rising_edge(clk) then if in_value > signed(threshold) and previous_value <= signed(threshold) then
counter <= counter + 1; end if; if in_value > signed(threshold) then
cycle_count <= cycle_count + 1;
end if;
previous_value <= in_value;
end if;
end process;
out_value <= counter;
out_cycle_count <= cycle_count(21 downto 6); -- Output the 16 most significant bits
end Behavioral;
附录2:端口连接提示
