吹拉弹唱


  • Home
  • Archive
  • Categories
  • Tags
  • Books
  •  

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo

机器学习系统 1-3 - 后端硬件描述语言

Posted at 2021-01-14Updated at 2021-01-14 机器学习  机器学习 FPGA 

语言只是手段,不是目的。自然语言如此,软件编程语言如此,硬件描述语言也如此。

软件编程语言定义了一系列面向人类可读性的字符语法。人类使用软件编程语言编写描述机器如何处理信息的步骤的文本,简称为软件代码。使用编译软件使用指定指令集翻译成机器具体处理信息的指令,简称为程序。🤓

类似的,在硬件设计中,硬件的结构决定了功能,因此也需要借助一种文本描述硬件结构,得名硬件(结构)描述语言。

软件代码可以直接编译成程序运行,也可以直接和测试框架一起编译运行,测试功能正确性。

而硬件描述语言(HDL,Hardware Description Language)——其中对应硬件结构(可综合)的合法语法——只是对硬件的结构描述,需要使用仿真器(Emulator)构造硬件结构。

通常高效的仿真器会将硬件代码等价映射成软件代码(比如C++)编译后运行,提高仿真效率。

就可综合语法部分看,HDL乏像软件语言中的抽象模型,以用于代码复用。但是HDL中的寄存器、线以及模型足以描述任何复杂的硬件。可以利用软件工具管理生成代码,减少一部分coding的工作量。

比如使用脚本(Perl或者Python)管理模块,辅助连线,或者借用软件的OOP(Object Oriented Programming)模型,套壳做DSL(Domain Specific Language)(比如Chisel套在Scala里),借助套壳语言的语法和抽象简化硬件编码工作。

除了可综合语法,HDL中还引入了测试语法用来提供仿真激励。为了改进HDL的测试方面的短板,更多语法和抽象被引入进来,以至于可以被称为一门新的语言(比如System Verilog1)。

有趣的是,System Verilog可以被看作天然的并行语言,引入不少并发机制,比如channel,GoLang的并发机制里也有channel。

硬件开发的主要工作量并不在前端编码(主要包括编写Verilog并做功能仿真),占大头的是仿真测试和优化。在一些非自主开发IP的流程中,前端的工作基本就是把买来的IP(比如ARM)集成连线,写一些胶水逻辑。在一些自主IP定制的流程中,比如RISC-V,主要的功能还是在拓展指令集,然后接着大量测试和优化。

我曾经试图发明一门新的语言,使用现代语言的语法来改进Verilog。写好了词法Parser,拿到了AST,做了一些类型推断以及代码优化工作,可以生成Verilog。然而如果要用于生产,开发工作量是不小的。最终只是作为一个toy项目,帮我熟悉了一些编译器的知识。

现在回过头来看,如果考虑写一门HDL的话,需要考虑几点:

  • 是否可以适配已有工业流程?通常是生成Verilog和其他EDA流程对接。
  • 是否可以做到和Verilog可综合语法完全等价?需要形式化验证以及实际项目支持(比如Chisel傍上了RISC-V)。
  • 是否支持其他blackbox(加密IP网表,VHDL,Verilog,SystemVerilog仿真模型)联合仿真?
  • 是否能在保证仿真结果精度准确的情况下,提高仿真效率?只能粗粒度功能仿真就很鸡肋。
  • 是否可以引入稳定的自动优化?怀疑是否又必要,后期优化的时候基本会扣每个寄存器,后端流程也有大量优化。
  • 是否易学?过多的引入严格的抽象概念会大幅提高语言学习难度(用软件语言的角度类比,学go,可能3天上手写工程,学rust,学一个月可能还经常卡在工程编译上),HDL依赖惯性可能比软件语言要大的多。

软件语言的迭代,引入了新的编程模型,新的内存管理机制,新的并行模型等等,实实在在地带来了极大的收益,大幅提高了并发性能,大幅减少了代码量,大幅降低了运行时排错的成本等等。

最终决定新语言是否会被大规模使用的核心还是:开发学习使用新语言引入的成本是否带来了足够的生产力收益。

HDL的核心功能还是描述硬件结构。

如果高层语言可以直接生成Verilog,要么是面向FPGA的HLS2(High Level Synthesis),面向软件工程师的硬件加速,根本不关心生成的代码,生成的代码也不可读。

要么是面向芯片的设计流程,语言本身最好能和硬件资源一一对应,所见即所得,否则就要生成可读的代码,让工程师检查。不过工程师既然都要人肉检查生成的代码了,再套一层壳就比较鸡肋了。

HDL已经深深嵌入到整个芯片设计流程中,前端和后端都能统一,EDA工具掌管着优化,VCS和Verdi已经是测试的标准工具。相比软件语言,HDL是一个非常细分且小众的DSL。

也许,之后会有新的HDL成为事实的工业界标准,但应该会是一个漫长的过程。


  • [1] System Verilog
  • [2] High-level synthesis

Share 

 Previous post: 机器学习系统 1-4 - 后端硬件验证 Next post: 机器学习系统 1-2 - 后端硬件指令集 

© 2022 Kleon

Theme Typography by Makito

Proudly published with Hexo