去年我试着涉猎竞赛世界把它弄清楚一点。当时一切看起来都很简单。那是在我把它解开之后。问题是,我只是认为我把它解开了。节奏最近宣布“统一”(就是这样词再次强调)仿真、仿真加速和仿真之间的关系。事情很快就变得很清楚,在这一年里,一个新的纠结的网取代了我之前以为我已经清理干净的网。
总之,我有点糊涂了。一次。
好吧,也许这种情况并不罕见,但请配合我……
当我开始四处交谈时,我觉得我不是唯一一个困惑的人。尽管,事实上,在你意识到其他人坚持其他信仰的程度和你坚持自己的信仰的程度相同之前,你从来没有觉得自己困惑过。所以每个人或多或少都有一个明确的观点,只是他们并不一致。所以我有点困惑。所以,反过来,我尽我最大的努力和其他人分享我的困惑,试图说明困惑的存在。
这一次,我没有遭到太多的反对。是的,伙计们:这令人困惑。
真正的问题是,如果这三个项目是统一的,它们之间的区别是什么?
•Mentor的Jim Kenney建议使用真实的I/O而不是建模的I/O来区分模拟和模拟加速。此外,FPGA的使用意味着原型;Cadence和Mentor使用定制的asic进行仿真。
•好吧,现在我们把原型系统也加入到混合系统中。四件事就可以解决了,为什么还要解决三件事呢?
•EVE表面上做模拟器,但他们使用fpga。那它们就是原型吗?Jim还提到原型系统很小。但是EVE也建立了大单位。那么到底是哪一种呢?
•《EVE》的Lauro Rizzatti表示模拟加速/模拟的区别非常模糊。Cadence的新营销图纸看起来很像EVE的旧营销图纸。Mentor的定制ASIC实际上是一个定制的FPGA,而Cadence的定制ASIC是基于逻辑处理器的(我们去年看到的是基于lutc的,因此也有点像FPGA)。
•Cadence的Michael Young表示,如果验证环境涉及主机和硬件单元之间的SCE-MI接口,那么这是模拟加速,而不是仿真。但是,由于没有SCE-MI接口,您无法(以任何速度)与托管的测试台通信,并且只能将测试台的一个子集合成到硬件中。
Synopsys销售原型系统,而不是模拟器,但他们支持模拟器使用模型。
嗨!
当然,并不是每个人说的每件事都有冲突,在这里或那里都有一致的线索。所以让我们试着梳理一下,找出什么是什么。
原型!*
让我们从原型开始,因为我们可以更容易地把它放在一边。原型系统和仿真系统——更不用说虚拟原型系统了——都允许软件在芯片最终外观的模型上执行。重要的区别在于,你为什么要这么做?
如果答案是“这样我就可以验证我的硬件是正确的”,那么您将看到一个模拟器。如果答案是,“这样我的软件开发人员就可以更早地开始编写软件”,那么你谈论的就是原型。
硬件原型假设RTL是相对稳定的,并且正在用硅实现。软件开发可以在芯片构建和测试之前开始。在RTL稳定之前,可以使用更抽象的虚拟原型;在此之后,硬件原型提供了更好的性能。事实上,它的运行速度比模拟器快得多——就像一个数量级或更快。
与EVE Zebu或Mentor Veloce(或者Cadence Palladium,如果你认为他们的芯片类似于fpga)系统相比,原型机往往更小,使用更少的fpga。但是它们可以运行得更快,因为有人花了时间和精力来创建一个非常有效的硬件实现。只有当您知道RTL相当稳定时才花那么多精力是有意义的。FPGA编译过程(更不用说性能关闭)需要时间,因此实现原型的整个过程所花费的时间远远超过硬件检出所能容忍的时间。
如果您仍然在测试硬件RTL,那么您希望能够快速地进行设计迭代。这通常意味着低效率的实现,使用更多的fpga,实现更低的速度。这就是竞赛的意义所在。这都是一种权衡。
然后就剩下三个了
剩下的就是模拟,模拟加速和模拟。为了把它们组合成一个合理的结构,让我们把它们分开来确保我们知道发生了什么。
验证环境实际上由三个元素组成:
•被测设计/设备(DUT)
•刺激政策
•检查人员(或任何决定事情是否有效的人)
刺激和检查通常被打包在一起作为“测试平台”。它们通常是用Verilog或SystemVerilog编写的,通常不能作为一个整体进行合成(尽管一个子集可以)。
DUT通常用其中一种hdl编写,并且是可合成的。如果不是这样,总有一天会有人遇到麻烦。
这些东西有两个地方可以出现:
•主机,采用软件模型
•硬件
让我们以简单的情况为例。模拟完全在主机中进行。所以DUT,刺激和检查器都是作为软件模型实现的。这没什么大不了的。问题是,他们往往跑得很慢。特别是当你开始尝试在执行软件时查看硬件是如何工作的;它在模拟器中运行得慢得要命。你可能会因为等待系统初始化而变老;希望到那时,您已经训练过您的孩子在实际软件运行时接管。
所以你用硬件来加速。因为DUT是可合成的,而测试平台不是,所以第一步显然是将DUT转移到硬件中。事实上,您甚至可能想将DUT的一部分转移到硬件中。但是我们有一个重要的考虑因素需要考虑:硬件和模拟器之间的接口。因为,在这种情况下,模拟器会话仍然统治土地;它只是把硬件作为它的仆从之一。
在这类事情还很新鲜的时候,主机中的刺激会一次一个切换地刺激硬件中的DUT,而对检查器的响应将一次一个切换地返回。DUT可能执行得很快,但是从DUT获取信号成为瓶颈。
在被Mentor收购之前,IKOS开创了一种方法:交易而不是单个信号值的变化。这种方法位于连接主机和硬件DUT的SCE-MI接口的核心。这极大地加快了测试平台控制DUT的能力。
但是如果你把DUT分开,只加速它的一部分呢?好吧,假设这一部分必须与另一个未加速的部分通信,现在您又回到了必须通过主机和硬件之间的电线连接这些信号的问题上。没有什么可以将信号更改打包到事务中。这把我们带回到令人痛苦的缓慢。
这意味着DUT几乎可以在主机或硬件上找到。后者是加速版。
那么,仿真将何去何从?我们还有这根烦人的系绳连接着宿主。Cadence和Mentor似乎都同意,在他们看来,模拟器是独立存在的。它不与宿主对话。有两种方法可以实现这一点:要么把尽可能多的测试平台放到硬件中,要么不使用Verilog测试平台——使用“真正的”测试平台。
让我们把测试台拆分成刺激部分和检查部分。为了刺激您的DUT(在某些州是非法的),您可以使用一些来自合成的部分测试平台的信号,或者更好的是,使用实际的I/O卡,看起来像最终系统中实际发生的情况。如果您需要的是网络流量,请通过真实的网卡将DUT连接到真实的网络,而不是使用模拟流量生成器。需要与PCI总线上的某些东西对话?使用真正的PCI卡与坐在真正PCI总线上的真正的东西对话。
那支票呢?好吧,你可能没有。毕竟,在最终的系统中不会有。你如何知道最终的系统是否有效?因为,它很有效。如果没成功,那就说明没成功。你知道,蓝屏死机之类的。(希望比尔在演讲的时候……也许会限制你的职业生涯,但是非常值得……这是孙辈们唯一想听一遍又一遍的科技故事……)
所以,本质上,通过这种方法,模仿意味着让你的宝宝自由,剪断绳索,要么沉要么游;你懂的。如果它沉了,那你就有麻烦了。哦,对了,然后你需要找出那些问题是什么。所有大型仿真系统都有办法捕捉比真实系统更多的内部状态;对于大型系统,可以就地检查大量数据。如果您愿意,您可以将系统状态传送回主机(哦,是的,又出现了那条线……也许它并没有完全被切断……),以便通过模拟进行分析或比较,这样您就可以隔离出哪里出了问题,但是,作为坚定的男子汉隔离主义者,模拟器人员表示他们可以在没有任何帮助的情况下做得很好。(不,他们不需要方向;他们知道自己的确切位置。)
请注意,即使您在这里的模拟器上运行软件,就像在原型上运行一样,其目的不是在一个或多或少已知良好的硬件模型上开发更多的软件,而是验证软件和硬件是否能够很好地协同工作。如果有问题,可能是软件或硬件问题。只有两者都起作用,才能称之为好东西。
那么统一意味着什么呢?
在调查和规划了整个领域之后,让我们回到开头:模拟、模拟加速和模拟这三个曾经互不相关的领域现在已经合并为一个流。这是什么意思?
这意味着两件事:
•验证的控制来自运行单个会话的单个控制台,而不管DUT或测试台在哪里运行
•我们该怎么称呼它,实例化轨迹?(是的,很好,很矫情……在你附近的主题演讲中注意听)DUT和testbench应该在会议中是可管理的。
这意味着,您可以从一个窗口中运行验证,随意将内容移到硬件中或移出硬件。Cadence声称能够通过一个命令行指令将DUT在硬件和软件之间来回移动。实际上它们并没有来回移动DUT的软像和硬件像都在,状态在两者之间来回移动。他们称之为热插拔。
这将模拟与模拟加速联系起来。连接到仿真怎么样?这意味着也能够热插拔测试平台。显然,测试平台的可合成部分可以交换,在某些情况下,I/O模块(实际的模型)也可以交换。
这是另一个大问题:假设你可以无缝地做到这一切。是否有一种使用模型能从像这样交换所有这些东西中获益?或者它是否足够能够从模拟开始,直到它变得太累赘,然后移动到加速器,直到您认为它很好,然后移动到模拟?每次一个过渡。来回移动有价值吗?
想必,顾客将是回答这个问题的人。
更多信息:
*完全披露:这是对一个名字的无耻重复探索频道节目不幸的是,这并没有持续太久,更不用说去年的标题了文章对不起,我保证再也不会链接到那篇该死的文章了。
关于“从模拟到仿真”的11个思考