【问题标题】:Designing system architecture for real time acquisition and 'control'为实时采集和“控制”设计系统架构
【发布时间】:2010-10-07 09:59:30
【问题描述】:

要求的简要说明

(这里有很多很好的答案,谢谢大家,如果我得到这个飞行,我会更新)。

探测器沿着轨道运行,实时测量几个不同的物理参数(确定性),作为曲线距离的函数。在此过程中,用户可以单击一个按钮来“标记”航点,然后使用 GUI 输入每个航点的详细信息(以人工方式,但在继续数据采集的同时)。

在此之后,系统对获取的数据执行一系列计算/过滤/修改,同时考虑到为每个航路点输入的约束条件。这个过程的输出是一系列的修正,也是曲线距离的函数。

该过程的第三部分涉及再次沿着轨道运行,但这次将修正写入修正轨道的物理系统(仍然是曲线距离的函数)。

我目前对您的输入/cmets/警告的想法

我想确定的是我是否可以使用 PC + FPGA 来做到这一点。 FPGA 会进行“数据采集”,我会在 PC 上使用 C# 从缓冲区读取数据。航点信息可以通过 WPF/Winforms 应用程序输入,并存储在数据库/平面文件/任何待处理的“处理”中。

对于处理,我会使用 F#。

FPGA 将用于将信息“写入”回物理机。

我目前可以预见的一个问题是,如果处理算法需要一个采样频率,这会使要缓冲的数据量太大。这意味着将一些处理卸载到 FPGA - 至少是不需要用户输入的位。不幸的是,唯一的预处理算法是卡尔曼滤波器,我在 google 上搜索过,很难用 FPGA 实现。

如果您愿意提供任何反馈,我将不胜感激。

更新(此处添加的额外信息)

在卡尔曼滤波器的入口处,我们每 1 毫秒查看一次。但在卡尔曼滤波器的另一边,我们将每 1m 采样一次,按照我们所说的速度,采样速度约为每秒 2 次。

所以我想更精确的问题是:

  1. 在 FPGA 上实现 Kalman filter - seems that it's 可能,但我对这两个主题的了解还不够,无法弄清楚它是如何可能的。

  2. 我也不确定卡尔曼的 FPGA 实现是否能够每 1ms 循环一次 - 尽管我想应该没问题。

  3. 如果我理解正确的话,FPGA 没有大量的内存。对于流程的第三部分,我将发送(大约)4 x 400 的双精度数组用作查找表,这可行吗?

  4. 另外,两个进程之间的交换(读/写数据)是否意味着每次都重新编程 FPGA,或者是否可以指示在两者之间切换? (也许可以只并行运行并忽略其中一个)。

  5. Anotheroption 我看到正在使用Avalda FPGA Developer 将 F# 编译为 VHDL,我想我很快就会尝试。

【问题讨论】:

  • 你的问题非常广泛..真的有问题吗?最好先开始其中的一些内容,并在实际开始后返回详细问题!

标签: f# real-time fpga architecture


【解决方案1】:

您没有提及您的目标、客户、预算、可靠性或截止日期,所以这很难回答,但是...

忘记 FPGA。简化您的设计、开发环境和接口,除非您知道您将使用另一个解决方案来满足您的实时要求。

如果您有预算,我会先看看 LabView。

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

LabView 将在一台 PC 上为您提供数据采集系统和用户 GUI。根据我的经验,开发人员不会选择 LabView,因为它感觉不像是一个“真正的”编程环境,但对于您描述的问题,我绝对会推荐它。

如果您决定使用编译语言,那么我会将实时数据采集组件隔离到具有 RTOS 的嵌入式目标,最好是利用 MMU 进行调度和线程隔离并让您写入C. 如果你得到一个真正的 RTOS,你应该能够真正地调度需要运行的进程,并且如果需要也能够调试它们!使用定义的接口使这个脱靶系统尽可能简单。让它足以获得您需要的数据。

然后,我将使用通用接口文件将接口实现回 PC GUI 以进行维护。使用标准接口将数据传输到 PC,例如 USB2 或以太网。 FTDI 芯片非常适合这些东西。

【讨论】:

  • 我猜这意味着你对labview不感兴趣? :)
  • LabView 作为原型设计的可能替代方案正在接受审查。
【解决方案2】:

由于您沿着轨道移动,我必须假设采样频率不超过 10 kHz。您可以轻松地将数据以该速率卸载到 PC,甚至是 12 Mb USB(全速)。

对于数学数据的严肃处理,Matlab 是要走的路。但由于我没有听说过 F#,所以无法发表评论。

4 x 400 双打没有问题。即使是低端 FPGA 也有 100 KB 的内存。

您无需更改图像即可在读取和写入之间切换。 FPGA 一直都是这样做的。

【讨论】:

  • @Brian Carlton,感谢您的回答。 F# 是 .Net 中的一种函数式语言,我认为与 Matlab 相比的优势在于它更易于分发。缺点是您必须自己滚动大部分内容,而且非常前沿。
【解决方案3】:

这是一个建议。

转储 FPGA 概念。 从 TI 获取 DSP 评估板 选择一个有足够的 gigaflops 让你开心的。 足够的 RAM 来存储您的工作集。

用 C 语言编程。TI 提供一个小型 RT 内核。

它通过串行端口或以太网等方式与 PC 通信。

它通过握手发送 PC 熟数据,因此数据不会丢失。 DPS中有足够的内存来存储你的数据,而PC有高级时刻。

DSP 没有性能问题。

实时位做实时,与 ram 的 MP。 处理速度很快,而且 GUI 对时间要求不高。

【讨论】:

    【解决方案4】:

    您与 PC 的连接是什么?如果 .Net 是基于网络的连接,它将非常适合,因为您可以使用流来处理数据输入。

    关于 F# 或任何涉及大型数据集的函数式编程语言,我对您的唯一警告是内存使用。它们很棒并且在数学上是可证明的,但是当您从多次递归中获得堆栈溢出异常时,这意味着您的程序将无法运行,并且您会浪费时间和精力。

    如果您需要开发 GUI、winforms 和 GDI+,C# 将是非常棒的选择,您无需付出巨大的努力即可获得可用的东西。

    请给我们一些有关数据速率和连接的更多信息,也许我们可以提供更多帮助?

    【讨论】:

    • 嗯,fpga 和 pc 会在同一个地方,所以它们可以以任何你喜欢的方式连接。从 Brian Carlton 的话说,USB 听起来很酷。现在查看数据速率。
    • 关于堆栈溢出的观点,但尾递归是我已经了解 F# 的一件事(我认为),所以我希望我可以避免这个特殊问题。跨度>
    • F#可以直接访问索引到数组中;它可以有引用类型,并且在调用时并不总是使用复制语义。因此,我们将在每次调用时传递一个 int 而不是数组的副本。此外,GDI+ 是软件渲染的,而 WPF 是 GPU 渲染的,所以 GDI+ 更慢!
    • 自 Windows 98 以来,GDI 调用已被硬件加速,WPF 在执行 3D 特效方面更快,GDI 对于普通 GUI 仍然很好。当我说更快时,我指的是开发,而不是执行性能。
    【解决方案5】:

    Microsoft Robotics Studio 中可能有一些有用的东西:link text,尤其是在实时方面。 CCR - Concurrency Coordination Runtime 已经对此进行了很多思考,模拟工具可能会帮助您构建有助于分析的模型。

    【讨论】:

      【解决方案6】:

      在我看来,您可以离线进行所有处理。如果是这种情况,那么离线是要走的路。换句话说,将流程分为 3 个步骤:

      1. 数据采集
      2. 数据分析
      3. 基于数据分析的物理系统修正。

      数据采集

      如果您无法使用标准界面收集数据,那么您可能必须使用自定义界面。很难说您是否应该在不了解更多接口的情况下使用 FPGA。构建自定义界面的成本很高,因此您应该进行权衡研究以选择方法。无论如何,如果这是基于 FPGA 的,那么保持 FPGA 简单并将其用于原始数据采集。使用当前的硬盘驱动器技术,您可以轻松存储 100 千兆字节的数据以进行后期处理,因此将原始数据存储在磁盘驱动器上。如果没有必要,您甚至不想在 FPGA 中实现一维卡尔曼滤波器。

      数据分析

      一旦您将数据保存在硬盘上,您就有很多数据分析选项。如果您已经了解 F#,请使用 F#。 Python 和 Matlab 都有很多可用的数据分析库。

      与您必须实时进行所有处理的解决方案相比,这种方法还可以让您更轻松地测试您的数据分析软件。如果结果看起来不正确,您可以轻松地重新运行分析,而无需再次收集数据。

      物理系统修正

      获取数据分析结果并沿轨道运行探测器,再次通过接口卡为其提供适当的输入。

      【讨论】:

        【解决方案7】:

        我做过很多嵌入式工程,包括您所描述的那种混合系统。以您需要处理的数据速率和大小,我怀疑您是否需要 FPGA……只需找到现成的数据采集系统即可插入您的 PC。

        我认为您将遇到的最大问题与硬件 API 的语言绑定有关。过去,我不得不用 C 和汇编(甚至一些 Forth)开发很多软件,因为这是从硬件获取数据的最简单方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-20
          • 1970-01-01
          • 2020-04-28
          • 2010-09-09
          • 2013-08-20
          • 2010-12-30
          • 2021-08-10
          • 2014-02-03
          相关资源
          最近更新 更多