路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

用于多核HDL仿真的自动分区技术

已有 1099 次阅读| 2016-7-31 16:35 |个人分类:验证前沿资讯

前端RTL验证和后端门级验证是集成电路设计流程的重要阶段。这些阶段甚至会占到整个IC设计周期的70%到80%。随着IC设计日益复杂化,HDL逻辑仿真更显得至关重要,并且为满足市场需求,我们需要验证仿真时间更短一些才好,基于此,就开发出了多核HDL仿真器


但是多核仿真器也提出了一个新的问题,即要对哪些操作实现并行化呢?这就要对仿真流程进行分割了,分割开来的每个区块通常会在一个线程中执行,多个分区即在多核HDL仿真器的多个线程里一起执行。基于统筹法的原理,同时我们会期望不同区块的工作负荷相当,所谓工作负荷即CPU完成相应区块任务时消耗的CPU资源和时间。


分区技术大致可以分为两类:ALP( application level partitioning)DLP(design level partitioning)。 ALP方法根据明HDL仿真过程中明确定义的独立任务进行分割,独立的任务相互间可并行运行。比如,核心模拟任务和生成波形任务,核心模拟区块传递相应的模拟仿真数据信息给生成波形的区块,生成波形的区块使用这些数据生成波形。这两个相对独立的任务可以被处理为并行运行的,这样的话,当然是远比串行进程省时地多。另一方面,DLP方法是指分割HDL设计本身。这种方法中,人工地把HDL设计拆分为一些可以并行仿真的部分,本文我们要讲的是一种基于DLP多核HDL仿真的自动分区技术。


HDL仿真的DLP简介

DLP方法中,设计基于HDL进程等一些精细的行为过程分割为不同区块,DLP方法要求各个区块能有规律地同步,不然在仿真过程中可能出现语法或者事件流程的错误。下图提供了基于DLP多核HDL仿真的一个高层次的结构图。

 

基于DLP,将设计分为三个分区。在到达同步点之前,各个区块独立执行相应的仿真任务。同步点处,要求各分区任务同步。彩色部分是各个区块完成有效仿真任务的时间,灰色部分表示各个区块在同步点到来前的等待时间,这一段时间内是没有仿真任务进行的,所以灰色区域代表的时间表示着对CPU资源的浪费。所以为了达到尽可能高的性能提升,灰色区域划分的越小越好。


分区算法

我们详细讨论一下划分区块的算法。HDL设计本身就存在由进程、赋值、时序原件和逻辑门基本单元带来一些并行特性。分区算法基于这些设计参数平均分配各个区块的工作负载。设计参数可以计算平分,但是运行时间却没办法做到平分。为了同时兼顾运行时间,分区算法还考虑了一些设计中可能会用到的设计案例。这样可以提高估测平衡运行时间时的精确度。

分区算法使用多个静态参数的加权值来标注实例层次的每个节点,静态参数是从由HDL设计中的进程、赋值、时序原件和原始的逻辑门中提取出来的。我们会由这些参数计算得到加权值。若考虑到设计案例信息,还要考虑到另外一些参数。我们先说设计案例和他们对加权值的影响。下面就是一些在划分区块算法中会用到的设计案例。

  • RTL设计:对于RTL设计,实例层次树节点的加权值要着重考虑到并行进程,例如Verilog里的initial/always块。因为在实际仿真中这些内容会消耗掉较多的CPU资源。

  • 门级的设计:对于门级的设计,实例层次树节点的加权值要着重考虑到基本单元,在门级的设计中门级基本单元仿真会消耗较多CPU资源。

  • ATPG设计:ATPG设计是指测试图形生成后ATPG向量的仿真。ATPG工具在设计中插入扫描链之后,生成测试图案。原本设计中的时序单元被相应的扫描单元替换,扫描单元以链形连接。在ATPG设计中,在时序原件周围生成了大量的其他电路活动,所以实例层次树节点的加权值要着重考虑到时序原件。


基于以上,我们就可以计算分区所需要的数据基础了,即各个实例节点的加权值。如果有n个静态参数s1~sn,权重分别为w1~wn,那么各节点权重计算公式为:wnode = (count of s1 + … + count of sn) / (w1 + … + wn)。


每个节点有两个加权值,自加权值和累积加权值。自加权值是属于该节点参数自身的加权值。累积加权值是一个节点的所有子节点的累积加权值和其自加权值的和。一个非底层的节点的累积加权值W =其所有子节点的加权值的和+自重的权重。所以计算加权值按实例层次树自下而上进行的。下图是一个实例层次树节点的加权值示例。

实例树上每个节点的累积加权值计算完成后,可以看到顶层的累积加权值。为了使各个区块的总权值相等,需要将顶层节点累积加权值除以N,得到目标权重G,N是要得到的分区数量。


下一步就是将不同层级的实例封装进N个权重为G的容器,我们开发了动态的装箱算法。在将一个层级的实例分配进一个容器时,如果该节点累积权值太大不能放进权重为G的容器,就考虑将这个节点拆开,将其子节点放进去;如果有的最底层自节点的权重都比G大,那么就算容器会有溢出,还是有要强制将其放入容器。


实验结果

将这种分区算法应用于多个HDL设计,并将生成的分区应用于多核HDL仿真器,实验结果如下表所示(所有的测试都是基于500万到1亿门的真实设计):

 

表中最后一列“Performance ratio using multi-core simulation” 是与单核仿真结果做对比得出的结果。可以看到在大多数情况下,都能获得较理想的结果,减少仿真时间。但是有的情况却并不太理想,这是由于分区算法在分割区块的时候考虑到了设计参数和设计案例信息,而我们权衡案例运行时间的权值可能不太准确。这表明我们需要引用更多的静态设计参数,并且调整设计案例的权值,以期望获得更好的仿真加速结果。


结论

本文提出了用于多核HDL仿真的分自动区算法,并且分区算法在分割区块的时候考虑到了设计参数和设计案例信息。对于任何的可用于多核HDL仿真的项目,这种算法都可以说是一种较好的简单初始化分区方法。

 

 


您可以在手机移动端同步关注订阅号“路科验证”。

如需转载请联系路科验证,并注明出处“路科验证”。


Automatic Partitioning for Multi-core HDL Simulation.pdf(189 KB)



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-27 04:58 , Processed in 0.019390 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部