硬件设计中的HLS和MBD方法学

最初的BMD

基于模型的设计(MBD)天生就与硬件很亲近,因为不论是晶体管级别,逻辑门级别,SoC级别还是PCB级别,硬件都是由较低级别的多个实体(即模型)按照一定的拓扑结构摆放和连接,从而构成特定的功能。硬件设计首先采用图形输入(模型设计的基本形态)是很自然而然的事情。这一设计方法仍然主导着PCB电路设计,一些FPGA软件也还保留着这一“原始”的输入方法。就算是HDL(硬件描述语言)设计方法成为主导后,工程师也还是喜欢用Verdi之类的工具将HDL设计转换成模型化、层次化的视图来进行调试和分析。

HDL出现

数字系统规模越来越大后,基于逻辑门的电路复杂度已经远远超出了人力之所及,必须要把一部分设计工作交由计算机来辅助完成。于是就发明了人类和机器都可以“理解”的硬件描述语言(HDL),人们用HDL宏观而抽象地描述电路功能,计算机把HDL综合成微观而具体的电路结构。为了迁就计算机,人们放弃了更符合人性的MBD方法。

误入歧途HLS

基于模型的方法之所以失效,是因为门级模型的抽象级别太低了,人们无法在这一级别上掌控硬件系统设计的复杂度。HDL提高了抽象级别,从而降低了硬件系统在人力面前的复杂度,让设计又变得可控起来。然而,随着电路系统规模的进一步增加,HDL级别的复杂度也开始逐渐失控,解决方法只有再提高抽象级别一途,这就是HLS诞生的背景,然而似乎一开始HLS就走入了歧途。

HLS使用抽象级别更高的编程语言C/C++来设计硬件,然而面向软件开发的C/C++和面向硬件描述的HDL有着很大的区别,为了使得HLS编码具有可综合性,必须要在C/C++语言上增加非常多的编码准则,这些准则的描述文档会多达数百页,使用者熟练掌握它们的学习成本非常高。
设计流程上的工程师都不太喜欢HLS,对于算法工程师过多的编码准则会束缚住他们的创新能力,他们更喜欢用灵活度非常高的语言来探索各种算法可能;对于硬件工程师而言,HLS比HDL更复杂,更不容易掌握和把控。

HLS设计所综合出来的电路特性(时序,面积和功耗)很大程度取决于HLS工具的“智慧”,设计者所能控制影响的范围比较小,当HLS编码不能顺利综合成硬件,或者综合结果不满足性能要求时,优化的过程会变得很痛苦。

软件中的MBD

回过头再来看基于模型的设计,赫然发现原本与硬件更亲近的设计方法居然被嵌入式软件开发所重视和推崇。而硬件设计本身却走向了HLS这一更“软件”的方式,这还真是一个非常有趣的现象。
嵌入式软件开发领域中,基于模型设计方法学的发展驱动力和带来的好处,同样适用于硬件设计。

为什么要基于模型设计?
硬件设计中的HLS和MBD方法学

MBD vs HLS

除了MBD固有的优点外,MBD在硬件设计上相对HLS还有以下优点:
硬件设计中的HLS和MBD方法学