15

多年来,我参与了许多基于微控制器的项目。主要是Microchip的PIC。我使用过各种微控制器模拟器,虽然它们有时会很有帮助,但我经常发现自己很沮丧。在现实生活中,微控制器永远不会单独存在,固件的行为取决于环境。但是,我使用的模拟程序都没有为微控制器之外的任何东西提供良好的支持。

我的第一个想法是在 Verilog 中对整个电路板进行建模。但是,我宁愿不创建一个完整的 CPU 模型,而且我没有太多运气为我使用的芯片找到现有模型。无论如何,我真的不需要或不想在那个细节级别上模拟 proc,我想保留常规处理器 sim 提供的调试工具。

在我看来,理想的解决方案将是一个混合模拟器,它将传统处理器模拟器与 Verilog 模型接口。

这样的事情存在吗?

4

6 回答 6

4

我使用了嵌入在 FPGA 上的 Altera Nios II 处理器。Altera 提供了一个工具链,用于在模拟器中模拟 CPU(及其软件)以及您的自定义逻辑。我想可以通过下载 CPU 的 VHDL/Verilog 内核来实现类似的设置(你尝试过 opencores 吗?那里有很多东西)。

但请记住,它的速度会慢得令人难以置信,所以不要指望以这种方式模拟整个复杂的过程。您可以期望的最好的结果是模拟精细的软件-硬件交互点来调试问题。如果您需要更深入的仿真,请考虑在具有内置监控代码的 FPGA 上运行它。

于 2008-12-30T17:18:23.260 回答
3

对于“模拟整个电路板”的方法,The Free Model Foundry 有大量的模型,有些是 VHDL 的,有些是 Verilog 的,现在可用。但你需要付费才能创建新模型。这些对于确保正确构建电路板非常有帮助。

但我认为调试 PIC 时更常见的方法是只构建一个板,然后在固件上工作。在芯片世界中,(固件在尚未进入晶圆厂的芯片中的微处理器上运行)人们经常求助于非常昂贵的系统(或在其上租用时间),这些系统允许将设计的一部分编译到仿真器中而其余的设计在正常的模拟器环境中运行。如果没有昂贵的芯片掩模组的障碍,电路板的成本是不合理的。虽然我听说过 Simulink (Mathworks) 与 FPGA 的一些创造性应用,但我记得有人要么在计算机上运行系统,要么对设备进行编程并实时运行相同的东西。

我相信如果您有钱花在 Cadence(询问 Palladium)和 Mentor Graphics 的集成解决方案上。

于 2008-12-29T12:31:50.763 回答
2

我最近所做的是在模拟环境和主机系统之间创建一个接口。不同的 hdl 模拟器有不同的接口,让模拟器不以批处理模式思考,传统的模拟模型,而是像真正的设计一样永远运行是问题的一半。

然后从使用 C(或其他)的主机上,您可以创建抽象,这些抽象可能允许也可能不允许您为任何目标编写应用程序软件(取决于您拥有的语言和编译器功能)。例如,您可以制作一个通用的 poke 和 peek 函数,并在最终目标上拥有那些实际 poke 和 peek 内存或 I/O,但是对于通过抽象进行的模拟,您可以与模拟相同内存周期的模拟测试台对话。

我更进一步,在主机和测试台之间使用了(Berkeley)套接字,这样模拟可以在主机应用程序停止和启动时继续运行。与拥有一个带有操作系统的真实处理器不同,您正在启动应用程序并运行它们以完成并启动另一个。至少对于测试应用程序,对于交付,您可能只有一个应用程序。

通过创建这些抽象层,我可以编写真正的应用程序,这些应用程序将在构建目标时使用。在此过程中,您最初可以使用逻辑的软件模拟,然后如果您喜欢使用抽象接口(丢弃逻辑)构建一个 fpga,例如说一个 uart。用 uart 接口或其他方式替换应用程序抽象层和模拟器之间的 shim。然后,当您将处理器和逻辑结合在同一个芯片或同一个板上时,再次用直接调用他们一直在与之交谈的任何接口替换抽象层。如果出现问题并且您保留了抽象层,您可以将应用程序带回仿真模型并访问所有内部逻辑。

特别是这一次,我使用的是 sourceforge 上的 hdl 语言循环 cdl,文档需要一些帮助,但示例可能会让你继续前进,它会产生可合成的 verilog,所以你会在那里获得额外的胜利。除了连接和启动 C 仿真模型所需的最低限度之外,我扔掉了所有脚本批处理的东西。所以我的测试台是用 C 语言(从技术上讲是 C++),套接字层是在那里完成的。输出可以是 gtkwave 使用的 .vcd 文件。基本上,您可以使用没有许可证等的开源软件来完成大部分 HDL 设计。通过向 CDL 仿真部分添加一两行代码,我可以让它作为无限循环运行,我可以说它有效很好,似乎没有任何内存泄漏等。

modelsim 和 cadence 都有将宿主 C 程序连接到仿真世界的标准化方法,从那里您可以使用 IPC 来访问与抽象层 api 对话的宿主应用程序。

这对于一张照片来说可能有点矫枉过正,无论如何,我已经放弃了照片,以获得更快和基于 C 的基于手臂的 micros。有/曾经有一个开放的核心图片,您可以简单地将其合并到您的模拟中,即使这不是您在这里想要做的。

于 2009-01-16T22:01:44.933 回答
1

不是我见过的。最好的办法是正确定义 uC 和 FPGA 之间的接口和行为,然后定义一系列可以使用自动测试仪应用的测试波形。您必须使用 FPGA 或 uC(应用波形、观察中断、断点等)制作自动化测试仪(或者逻辑分析仪可能具有某些此类功能)。如果你真的想知道 Opencores.org 有定义为 VHDL 的 PIC 和类似 AVR 的 8 位 uC 内核,那么你可以在 FPGA 上实现你的整个项目,然后调试它。

于 2009-01-08T18:42:26.103 回答
1

通常不需要在 RTL 级别对 CPU 进行建模。因为你并不真正关心它一点一点地做了什么;您通常关心它的作用,例如寄存器值、存储器和总线访问。

最简单的是调用总线功能模型。这只是生成 CPU 所做的读取和写入,通常基于文本文件。这些可用于某些 CPU 和许多流行的总线(例如 PCI、PCIe)。这些模拟超快。

下一步是功能周期精确模型。那些模拟速度很快。它们通常是加密的。

最后是完整的 RTL 模型。这些通常只有在您与 CPU 供应商密切合作时才可用,例如在您的 ASIC 中使用他们的内核。通常这些都是加密的,除非你是一家大公司。

内存模型通常是周期精确的(例如美光)。

于 2009-01-16T19:55:20.557 回答
0

我硬件部门的同事经常使用 FPGA 仿真软件来查找时序错误并追踪奇怪的行为。

模拟一到两毫秒可能需要几个小时,因此除了非常小的事情外,使用模拟器是不可行的。

不过,您可能想看看 SystemC。http://en.wikipedia.org/wiki/SystemC

于 2008-12-17T19:32:57.103 回答