我们正在设计一个基于 ARM CPU 和多个其他硬件引擎的 ASIC。这些引擎通过 CPU AHB 端口可访问的内存映射寄存器进行控制。目前,我们有用 C 语言编写的简单测试,由 CPU RTL 编译、加载和执行。一切正常,但正如预期的那样,CPU RTL 大大减慢了仿真速度,这使得运行更复杂的 C 代码来更广泛地测试设计的其余部分变得困难。由于我们没有尝试验证 CPU RTL,我想知道是否可以采用不同的方法。
我们已经用 C 语言编写了大部分固件,用于 FPGA 原型设计。固件使用宏 MemRead 和 MemWrite 访问内存映射寄存器,它们可以很容易地被函数调用或类似的东西代替。方法是:
- 从设计中移除 CPU RTL
- 创建一个由 MemRead 和 MemWrite C 调用调用的 shim,这些调用将生成对设计 AHB 从端口的 AHB 请求,因为 CPU 移除而断开连接
- 使用模拟器(Cadence irun,在我们的例子中)编译基于 C 的固件、RTL 设计(减去 CPU)和测试平台
- 运行模拟
这甚至可能吗?有没有人尝试过这种方法?关于如何在 C 代码固件和 Verilog 测试平台和设计之间提出“垫片”的任何建议?
谢谢,
马库斯。