在没有实际硬件的情况下模拟 FPGA 设计

电器工程 FPGA 高密度脂蛋白
2022-01-21 03:43:58

我是 FPGA 新手,目前正在学习 HDL(尤其是 Verilog)课程。我对组合电路和时序电路等数字设计有足够的了解。

我想创建一个类似于此 YouTube 视频中所示的项目。

我也知道 Xilinx ISE 可以处理逻辑信号和模拟波形。它是否具有额外的功能,例如通过 USB、相机等获取输入信号并将其输出到您的计算机中。

是否可以在不购买实际 FPGA 板的情况下运行这个项目(如计算机中的模拟)?我的意思是,我可以在我的计算机上构建、编码和运行该项目,然后通过 USB 连接我的相机,然后让输入的视频信号由 Xilinx ISE 等 HDL 模拟器处理(无需真正购买一块FPGA板并在那里合成你的项目,我目前没有预算拥有一个)

(我真正的意思是将 HDLl 设计连接到现实世界的源代码、C 代码等)

4个回答

标准 Xilinx ISE Webpack(您可以从 xilinx.com 下载的免费版本)包括一个名为 iSim 的模拟器。它不是一个很棒的模拟器,但功能齐全且价格合适。

虽然我没有使用过 Altera 工具,但如果不包括模拟器,我会感到惊讶。

但是……你需要知道模拟器能做什么,不能做什么。首先,它无法模拟全速运行的 FPGA。事实上,它们非常缓慢。根据被模拟的 FPGA 的复杂性,看到模拟 1 毫秒的“模拟时间”需要 1 分钟,我不会感到惊讶。如果要模拟一小时的“模拟时间”,则需要 1000 小时的实时时间。

此外,模拟的 FPGA 无法直接与 USB 端口等设备通信。模拟的 FPGA 确实与“测试平台”通信。测试台是一大块 VHDL 或 Verilog 代码,用于提供 FPGA(或 FPGA 的一部分)的输入并验证 FPGA 的输出。您可以在测试台中做一些相当复杂的事情,例如使用浮点数、读写文件以及运行无法综合的逻辑。

据我所知,Xilinx 工具无法实时连接,ModelSim(Actel 的 Libero IDE 使用)也不能。
我不了解开源模拟器,那里有一些相当奇特的项目,所以可能可以做到这一点的东西。

但是,这可能是您没有要求的答案(如果没有帮助,我会删除它),但我会考虑构建自己的 FPGA 板来做到这一点,或者至少开始朝着它前进。我蚀刻了我的第一块 FPGA 板,虽然它非常简单(板不是过程 ;-)),但它很快教会了我很多东西。

优点:

  • 便宜的
  • 深入了解并了解您需要了解的有关硬件注意事项的所有信息。迫使您首先阅读大部分数据表,然后编写自己的入门代码,恕我直言,这通常比即插即用开发板学习方法更好。
  • 只把你需要的东西放在板上。
  • 通过可能与弄清楚如何实时模拟这一切可能相同的努力/研究,让您进一步朝着真正工作设计的目标前进。

缺点:

  • 仍然需要购买一个编程器,尽管可以在 eBay 上找到廉价版的 Xilinx/Altera 编程器。
  • 如果您不希望关注 PCB/信号完整性设计和问题,那么您可能对通过这种方式获得的大部分知识不感兴趣。

我知道蚀刻你自己的电路板可能是不必要的,我这样做只是因为我有 FPGA,不耐烦并且不想等待 2 周的 PCB 到达。这里有非常便宜的 2 层板交易,至少可以运行您的设计(可能以低于最终预期的速度 - 通常高速 FPGA 设计的最小层数为 4,但这些是贵得多)

无论如何,Spirit Circuits 提供完全免费的 2 层“裸机”PCB 交易(每月一次,一种设计,无掩模或丝网印刷),这对于一次性设计非常有用。
此外,对于适当的 2 层和 4 层廉价原型板,ITead 和 Seed Studio 的 10 块板(或按该价格可能 5 块)服务的价格低至 10 美元。

我不知道有任何模拟器可以直接连接到 USB 端口(或其他硬件)上的信号。

至少在理论上,可以编写一些软件来接收到达端口的信号,并将这些信号转换成模拟器可以处理的测试台文件。不幸的是,我不知道有任何现有的软件可以做到这一点,而自己编写它绝对不是微不足道的。

您需要使用协同仿真接口(DPI、VPI、VHPI、FLI),它允许您编写挂钩到仿真器的代码,从而在仿真中运行的 RTL 和您机器上的真实硬件之间架起一座桥梁。

您将遇到的重大问题(除了记录不充分的接口)与同步和时间相关。在仿真中运行的 RTL比真实硬件得多 - 您需要能够逐步完成与外部接口的交互以匹配仿真速度。一些硬件接口不会这样!例如,如果使用 TCP,您可能必须修改内核堆栈中的计时器以避免虚假重传等。

Icarus支持 VPI 并且是免费的,因此您可以在不花任何钱购买许可证的情况下进行实验。您可能想研究现有的框架,这些框架可以完成一些协同模拟繁重工作并为模拟器提供更清晰的抽象。一个这样的框架是Cocotb,一个为模拟器提供 Python 接口的开源库。免责声明:我是 cocotb 的开发者之一。)

一个可能相关的例子:昨天我敲了一些 RTL 来响应 ping 请求,并创建了一个打开 TUN 接口的测试平台。然后,您可以使用该ping命令 ping 接口,并且在模拟中运行的 RTL 接收 ping 并做出响应。整个测试平台不到 50 行 Python!此示例的源代码在Github上,它在 Linux 下的 Icarus 上运行。