微控制器+ Verilog / VHDL模拟器?

时间:2008-12-17 19:23:59

标签: microcontroller simulator verilog vhdl

多年来,我参与了许多基于微控制器的项目;主要使用Microchip的PIC。我已经使用过各种微控制器模拟器,虽然它们有时会非常有用,但我常常感到很沮丧。在现实生活中,微控制器从不存在,固件的行为取决于环境。但是,我使用过的sims都没有为微控制器以外的任何东西提供良好的支持。

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

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

这样的事情存在吗?

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

但我认为调试PIC时更常用的方法是只构建一块电路板,然后再使用固件。在芯片领域,(固件运行在尚未上市的芯片中的微处理器上)人们经常使用非常昂贵的系统(或者花费时间在它们上面),这些系统允许将部分设计编译成模拟器而其余的设计在正常的模拟器环境中运行。没有为芯片设置昂贵掩模的屏障,成本对于电路板来说是不合理的。虽然我已经听说过Simulink(Mathworks)和FPGA的一些创造性应用,但我的回忆是,要么在计算机上运行系统,要么对设备进行编程并实时运行相同的东西。

我相信Cadence(询问Palladium)和Mentor Graphics都有这种集成解决方案,如果你有钱花在它上面的话。

答案 2 :(得分:2)

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

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

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

通过创建这些抽象层,我可以编写将在构建时在目标上使用的真实应用程序。一路上你可以最初使用逻辑的软件模拟,然后如果你喜欢用一个抽象接口构建一个fpga(扔掉逻辑),比如说一个uart。使用uart接口或其他任何东西替换应用程序抽象层和模拟器之间的垫片。然后,当您将处理器和逻辑与同一芯片或同一块电路板结合在一起时,再次直接调用抽象层,直接调用它们所说的任何接口。如果出现问题并保留了抽象层,您可以将应用程序带回模拟模型并访问所有逻辑内部。

具体来说这次我正在使用源代码上的hdl语言循环cdl,文档需要一些帮助,但是这些示例可能会让你前进,并且它会生成可综合的verilog,因此你可以在那里获得额外的胜利。除了连接和启动C仿真模型所需的最低限度之外,我抛弃了所有脚本批处理的东西。所以我的测试平台是在C(技术上是C ++)插槽层在那里完成的。输出可以是gtkwave使用的.vcd文件。基本上你可以使用没有许可证等的开源软件来完成大部分HDL设计。通过向CDL模拟部分添加一行或两行代码,我能够将其作为无限循环运行,我可以说它可以工作很好,似乎没有任何内存泄漏等。

modelsim和cadence都有标准化的方法将主机C程序连接到模拟世界,从那里你可以使用IPC来托管与抽象层api交谈的应用程序。

对于一张照片来说,这可能是一种过度杀戮,我不久之前已经放弃了更快和C友好的基于微处理器的图片。有一个开放的核心图片,您可以简单地将其合并到您的模拟中,即使这不是您在此尝试做的。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

最简单的是在Bus Functional Model上调用。这只会生成CPU执行的读写操作,通常基于文本文件。这些适用于某些CPU和许多流行的总线(例如PCI,PCIe)。 THese模拟超快。

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

Last是一个完整的RTL模型。这些通常仅在您与CPU供应商密切合作时才可用,例如:在ASIC中使用它们的核心。通常这些是加密的,除非您是一家大公司。

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

答案 5 :(得分:0)

我的硬件部门的工作人员经常使用FPGA仿真软件来查找时间错误并追查奇怪的行为。

模拟一到两毫秒可能需要几个小时,所以使用模拟器来处理任何非常小的事情是不可行的。

您可能想要查看SystemC。 http://en.wikipedia.org/wiki/SystemC