emulator总结

本文详细介绍了硬件仿真器Palladium,对比软件仿真和FPGA原型验证,突出其作为两者间的解决方案,强调了Emulator的高速、方便调试的特点,以及Cadence Palladium Z1的架构和开发过程中的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在日常工作中会用到Cadence家的emulator仿真器palladium,正好有时间做个总结。

  1. 什么是硬件仿真器

做IC设计的人应该都知道软件仿真和FPGA原型验证,我们可以把硬件仿真器理解为这二者之间的产物,它同时具备二者的优点。

软件仿真(simulator)全面,支持UVM、assert、coverage收集、可以很方便的dump 波形来debug,但速度很慢,尤其是在做大分辨率图像处理的时候,一条case甚至可以跑一个礼拜,且相当耗内存,所以在debug一些大分辨率或者多帧之后才出现错误的case时如果只用仿真的话,效率就会很低。

FPGA原型验证(FPGA prototype verification)速度快,可以认为是待验证设计的低速版,是实实在在的芯片了,与待验证设计一起协同工作的其他部分都是工作在实际频率的,比如ddr、flash、phy等,但在debug时不是很方便需要用内嵌逻辑分析仪来抓取信号一点点排查问题,尤其是一些大型设计,单颗FPGA根本放不下,需要多颗通过PCIe级联,debug时更是灾难。

基于软件仿真和FPGA原型验证的不足,硬件仿真器就应运而生。Emulator是软件仿真的硬件化,但还不是真实的硬件,是个虚拟的世界。它通过厂商定制化的流程,将rtl映射到各自的硬件仿真平台上,可以像软件仿真一样dump全部的波形,dump的波形是fsdb格式直接可以用verdi打开查看。由于是映射到专门的硬件上,所以速度比软件仿真快很多。此外为满足不同的用户需求,emulator还提供多种模式,1)基于cycle级的软硬件联合仿真;2)基于事务级Transaction的软硬件联合仿真(Veloce叫TBX)3)基于ICE模式的,基本上重点使用后两种。ICE模式运行速度最快,接近于FPGA的运行模式,就是DUT和TB都可综合例化在硬件中,另外还可外接硬件作为激励源,比如PCIE、Ethernet、SATA等设备,通过SpeedBridge来解决真实硬件和Emulator的速度差问题。缺点也很明显,就是TB要是可综合的,或者使用向量模式,限制了其使用方式。

  1. 目前有哪些硬件仿真器

做EDA工具的三家巨头都有各自的emulator,Cadence Palladium(帕拉丁), Synopsys ZeBu, Mentor Veloce(韦洛切),但又有不同。Palladium有的系列使用定制化cpu有的是用FPGA、Zebu使用Xilinx V7 FPGA、Veloce使用定制化ASIC芯片等,在使用上也各有自己的一套流程,具体可以看对应的userguide。

  1. 帕拉丁的一些细节

帕拉丁Z1的实物图如下,采用了服务器刀片式机架,可以根据客户需求来扩容,支持资源共享,一般都是把这台机器放在固定机房,和服务器使用类似,比如公司不同site都可以远程访问,编译时不需在固定的服务器,只有在使用Emulator时,只需要用cadence提供的命令load bit即可,然后就可以用像使用FPGA一样来跑case,如果需要debug,设置好触发条件即可,然后dump 波形,上传波形,最后直接用verdi打开波形。

帕拉丁Z1使用cadence自己定制的超标量处理器,分配效率极高,像Z1的每一个机架上配有50W个这样的超标量处理器,最多可以扩展到16个机架,根据验证需要,每次可以指定某几个机架进行服务。这也就解释了为什么emulator和FPGA原型验证不同,它本质上是用一块处理器来仿真一小块设计的逻辑部分,将结果在处理器之间传递,然后成千上万的处理器集群并行工作,依次达到加速的目的。

目前帕拉丁Z2也已经推出,采用xilinx Virtex UltraScale+VU19P FPGA,具体详情可以查看cadence官网。

  1. 开发过程中遇到的问题

有时候在FPGA上会遇到一些bug,仿真不能复现,emulator也不能复现,毕竟只有FPGA原型验证才是真正意义上的电路,所以遇到些奇奇怪怪的问题也不足为奇,这个时候怎么办?我们通常是根据现象先猜,然后拉线来逐点排查,但是FPGA拉线又会遇到调试信号被优化的问题,有时候vivado、quartus综合结果不可靠还需要用synplify来综合,所以调试手段也是很值得研究的,后面再写。

  1. 总结
  1. Emulartor是介于软件仿真和FPGA原型验证之间的,具有二者的有点,速度快,方便调试;
  2. Emulator本质上是通过处理器集群来加速验证任务,并不是实际的电路,在于外设协调时,需要用速度适配器来进行转换,这也是为什么FPGA上的问题emulator有时候不能复现。
### 关于E2仿真器的相关资料 在讨论E2仿真器之前,需明确其具体定义和用途。通常情况下,“E2 Emulator”可能指代特定平台上的模拟环境或开发工具链的一部分。然而,在现有引用中并未提及具体的“E2 Emulator”。以下是基于已知信息和技术背景的推测及相关资源说明。 #### 1. E2仿真器的概念扩展 如果假设“E2 Emulator”是指某种嵌入式设备或移动应用的仿真工具,则可以将其与QEMU或其他虚拟化技术联系起来。例如,QEMU支持多种架构下的硬件仿真功能[^1]。对于某些专用设备(如ARM处理器),开发者可能会依赖类似的仿真器来测试软件行为而不必实际部署到物理硬件上。 #### 2. 下载途径的可能性 针对“E2 Emulator”的下载需求,建议从以下几个方向入手: - **官方文档**:查找制造商官网是否有提供正式版本或者技术支持页面链接。 - **开源社区贡献**:GitHub等平台上可能存在由第三方维护的项目副本[^3]。 - **NDK相关联接点**:如果是涉及Android底层开发,则可参考Bionic libc库及其配套工具集的信息[^2]。 需要注意的是,任何未经授权分发的行为都应谨慎对待以免触犯版权法规。 #### 3. 技术实现层面探讨 当构建自己的仿真框架时,考虑因素包括但不限于目标体系结构的支持程度以及性能优化策略等方面。下面给出一段简单的Python脚本用于展示如何通过命令行调用外部程序完成基本操作: ```python import subprocess def run_emulator(emulator_path, args): try: result = subprocess.run([emulator_path] + args, check=True, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print("Output:", result.stdout) except subprocess.CalledProcessError as e: print(f"An error occurred: {e.stderr}") if __name__ == "__main__": path_to_e2 = "/path/to/e2/emulator" parameters = ["--help"] # Example parameter list run_emulator(path_to_e2, parameters) ``` 此代码片段仅作为示例演示启动过程中的参数传递方式,并不特指某个真实存在的产品实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值