打开微信,使用扫一扫进入页面后,点击右上角菜单,
点击“发送给朋友”或“分享到朋友圈”完成分享
上一篇说到,做ESL是为了提前释放芯片在架构上的性能风险。
那么,到本篇,我们来聊聊ESL具体是如何操作的。
当我们从架构师手中,拿到我们的任务书——specification,我们常常称之为spec文档的时候,我们也就知道了我们整个芯片的目标是什么了。比如,算力、峰值功耗、面积、各种feature等等。前端设计工程师会拿着spec文档来做详细的模块拆分和详细设计,那我们ESL工程师拿来干什么呢?有两个主要的关注点,我们一点点展开来说。
(我们还是围绕芯片的三个主要指标来说,即PPA,performance性能、power功耗、area面积)
一、具体的RTL实现策略
小到一个函数、大到一个模块、系统,只定下了规格,从规格到实现仍然一千万种实现方法。那么选用哪种实现方法,可以得到最优的PPA呢?power和area一般由RTL设计的同事来评估,我们则更关注performance。不同的实现方法,哪种性能更好,该如何在面积和功耗中取舍,是我们需要关注的。
二、待探索的性能参数
从底层每一个模块,自底向上,有各种参数需要我们操心。fifo深度和宽度、寄存器个数、RAM大小、端口个数等等等等,每个参数的选择都不是简单地拍脑袋就能定下的,都是跟PPA密切挂钩的。那么如何在有限的power和area限制下,得到更好的性能,跟每个参数的选择都是息息相关的。
说完了以上两个关注点,那么我们来谈谈怎么实现。当目标确定了,实现的方法其实殊途同归。
ESL会用高级语言(这里的高级是指相对于RTL),如C/C++、SystemC、Python等,来实现硬件的功能,并附加上性能数据。这样一个Model就建立起来了。那么选择不同的策略,或者各种配置参数还不是手到擒来?
(具体的建模思想和方法,我这里就不深入介绍了,因为考虑到本系列偏向科普性质,如果大家想深入探讨,我再补充。)
如果大家同时写过RTL和C++,那么就一定知道高级语言被称为高级语言,还是有他的道理的!调试方便快捷,可以大幅缩短试错时间,和ESL的思想正好match。所以也可以说建模就是用软件编程语言,来实现了硬件系统。在建模的基础上,输出满足PPA要求的策略和性能参数,就是ESL的工作核心。
科普的内容,说得差不多了,下一篇可能看大家想交流哪些方面,我们再展开介绍。
热门帖子
精华帖子