该论文一经发表,就得到了半导体业界的广泛关注,我们认为,该论文中提出的方法有其历史渊源,但是团队提出了对于已有方法的一种从数学角度来看很优美的改进,从而能够让基于机器学习的自动芯片设计成为现实。
首先,我们回顾一下现有的数字芯片设计流程。主流的芯片设计流程是,芯片设计师首先描述数字逻辑设计,而EDA工具软件则把这样的电路描述映射到完全等价的数字逻辑电路。在这个过程中,整个数字逻辑或者是用Verilog等硬件描述语言来描述(常常是芯片设计师使用的描述方法),或者是使用等价的布尔逻辑图的形式来描述(常见于一些EDA软件的内部优化过程中)。布尔逻辑图和硬件设计语言两者是等价的,其特点就是能够完全描述数字逻辑。例如,如果是一个简单的有n比特输入的组合逻辑,那么在描述中就需要能够生成一张布尔逻辑表格(真值表),该表格需要能覆盖所有2^n种输入比特组合的对应输出。而对于时序逻辑,则还需要考虑内部状态比特,需要的表格就更大了。
与之相对应的是,基于机器学习的自动设计关注的问题是:如果我们只给出真值表的一部分,能否同样可以生成正确的数字逻辑?举例来说,该论文中针对的CPU自动生成的问题,其中有1798个输入和1826个输出,在这种情况下如果直接使用真值表需要(2^1798)*1826大小的真值表,这样大的真值表基本上是不可能在合理的时间内生成的,而且也没有可行的算法来处理如此大的真值表。对此,论文提出的观点是,可以使用一种新的算法,该算法可以只使用真值表的一小部分来训练,就能够生成自动推理出真值表的其他部分,并且保证有很高的准确度。因此,设计流程就变成了:用户提供一个芯片逻辑真值表的一部分(需要是高质量数据,能够抓住电路逻辑的主要特点),机器学习算法根据这个逻辑真值表自动推理并补全真值表的其他部分,并且把该完整真值表送到传统的EDA工具里去做逻辑综合和物理设计。因此,电路设计流程也就由大量人工参与逻辑设计迭代(下图a)变成了用户提供一个输入输出数据集,AI直接综合出逻辑和电路(下图b)。
为了实现这样的功能,论文提出了BSD算法。BSD算法的本质是一种动态图算法:对于任意的逻辑,它首先生成一个初始的图(例如,无论输入如何输出都是0);然后随着用户提供更多的输入输出数据(即提供真值表的一部分),BSD的图会随之更新(添加更多边和节点),从而让BSD对应的逻辑能够满足用户提供的真值表。例如,在一比特加法器的例子中,一开始的BSD逻辑图对应的是一个输出永远是0的简单逻辑,但是随着用户给出更多的输入输出的数据,BSD图也在不断地修正,最后当用户给出足够多的数据时(不一定需要给出真值表的全部),BSD就收敛到了正确的一比特加法器逻辑。