现在hls越来越强大,hls有什么Verilog做不到的事情吗,Verilog大家认为是否会被淘汰呢,我现在一直在用Verilog做FPGA和asic,慌得一匹。。


HLS也做了很多年了,在FPGA领域甚至还有一些应用,但是在ASIC领域还主要是Verilog,而且主流的ASIC设计EDA厂商也不会很积极支持,与其说HLS替代,还不如说Chisel更有可能,不过还是面临主流EDA厂商是否积极支持问题。

Chisel这样用直接生成Verilog的方案,对于一些特定功能的IP可以使用,经过验证过的可以缩短晶元的开发周期,而且主流的EDA工具后续的开发流程也完全适用。Chisel家族也更接近硬体的设计思维方式。

Chisel在RSIC-V上风光了一把,但是对于传统的ASIC设计流程,目前各种方法学,已经非常完善了,ASIC设计更像是一种模式设计,从功能制定到最终流片及验证,完全遵循业内公认的设计方法学,晶元必然能够成功。

直接打破积累了多少年的开发流程和经验,还有前人踩过了那么多的坑。当然是很难了。要说替代,我更愿意相信是Chisel这类的HDL语言,Chisel不是未来,也至少是未来的一站。

Chisel家族还有一个叫Spinal HDL的,文档也非常完善。可以了解下。是一个工程师开发的,和高校出品的Chisel还是有些不同的,更偏向工程化思维。

Welcome to SpinalHDL』s documentation!?

spinalhdl.github.io

关于Spinal HDL我还装了下环境,跑了一个demo,发出来可以一起看下。

https://ninghechuan.com/2020/05/08/2020-5-9-SpinalHDL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/?

ninghechuan.com

看到有朋友用HLS和Verilog的比较来类比C语言和汇编语言,个人认为这样的类比不是很合理,C语言和汇编语言的关系,应该是Verilog和门级网表/手绘数字电路图来类比比较。HLS/Chisel/Spinal HDL和Verilog的关系,用Python和C语言的关系比较,是不是更形象一些?


对于HLS,个人感觉目前顶多在FPGA行业会有一定的发展,毕竟Xilinx、Intel都在大力推自家的HLS(比如Xilinx最新的VItis),但对于ASIC行业,主流肯定还是Verilog,毕竟对于ASIC开发流程而言,RTL设计周期并不长,而HLS这种东西面积和性能太不可控了(因人而异),所有的优化都依赖于编译器,生成的RTL代码万一有坑就迷茫了。

而对于Chisel、SpinalHDL,个人认为绝对是一个真正的数字电路描述的发展方向,在面积和资源与手写Verilog无差的情况下,开发效率天上地下(不到一百行代码实现一个带行缓冲期的Sobel边缘检测演算法实现,代码如伪代码一般,可读性相较于Verilog好的不止一点半点)。当然这个东西由于是基于Scala的,而且需要一点面向对象的编程基础,对于纯硬体和逻辑出身的人来讲入门有一些难度,但入门掌握后你会放弃Verilog的。有想对SpinalHDL了解的小伙伴可以关注本人公众号「似猿非猿的FPGA」。

2021.1.1追更:

趁著假期把近半年笔记整理汇总下,欢迎交流

从Verilog到SpinalHDL?

mp.weixin.qq.com


题主是不是看到这个回答害怕了:

以后hls是否会替代Verilog成为主流FPGA编程语言??

www.zhihu.com图标

这是我之前用小号的回答,也没想到会惹来这么大的争议... 别慌,这不是抢饭碗预警。先说结论:

Verilog 暂时不会被淘汰,而且也不会被 HLS 淘汰,但是我之前的答案依然成立。

对于题主的疑惑,我来澄清一下,总共三点,先说说硬体设计工作的要求,再谈谈 Verilog 会不会淘汰,然后再来和大家分享一下高层次综合(HLS)对于 Verilog 的意义。

硬体工程师的吃饭本领

从核心来说硬体设计的工作大部分是设计而不是实现。设计电路的工作,看得是工程师对电路原理的理解,比如如何设计状态机,定制内存结构,流水线和位宽优化。这些知识都是要从本科最基础的知识,电阻电容电感那些,开始积累的。在那之后,工程师才开始通过编程实现硬体结构。同理,之后模拟或者验证的工作,大多数时间和精力也是花在设计的地方。

假如有一天 Verilog 真的被淘汰了,但是硬体的设计原理是不会被淘汰的。工程师只需要再掌握一门取代它的语言就可以了,设计过程换汤不换药。就好比有一天 J 语言被淘汰了,大家都用 W 语言来写代码,对 J 语言的职业玩家来说也不算天塌下来了吧。只需要学习如何在 J 里做平时 W 里做的优化好了,优化原理是不会变的。所以很多时候学习 Verilog 其实还是在学习硬体优化,所以大家觉得难,如果对电路很熟悉,上手还是很快的。我玩了一年 VHDL 以后,学 Verilog, Chisel, HLS 的时候,电路设计的核心观念都是没有变的。晶元技术还是那个技术,底层电路都是不变的,只不过是写法变了。这一部分的重要性在量子计算到来前基本不会变。

注:本来想举例说 Python 取代 C 的,但是取代不了... 还是用简单的 J 和 W 吧。

Verilog 会被淘汰吗?

前面说了设计是硬体设计的核心,Verilog 则是实现硬体结构的手段。那么 Verilog 是否被淘汰,取决于它是否在硬体设计方面的有一个最优店。如果有一天 Verilog 在各方面都不占优,那么它就该被淘汰了。但是今天的 Verilog 没有被淘汰,说明目前还是没有语言在编写上比 Verilog 更方便,并且可以覆盖 Verilog 所有功能的。

那么 Verilog 会被淘汰吗?这要看如何定义淘汰吧,Verilog-95 不就被 Verilog 2001 淘汰了,然后 2001 被 2005 淘汰了,然后 SystemVerilog 出来了... 所幸区别不大,也被大家看成是同一种语言。【VHDL 爱好者这里还是要推一下 VHDL,最新的标准都更新到 2019 年了:VHDL-2019: The Users Standard】

据我所知,ARM 内部都是已经用 SystemVerilog 编写了(如果你觉得 SystemVerilog 不算 Verilog,那么 Verilog 已经逐渐被淘汰了),顾名思义,系统化编程,SystemVerilog 可以和验证端代码相结合,做模拟或者验证会比较方便。

未来 Verilog 能被其他非 Verilog 系的语言取代则需要两个条件:1)Verilog 标准长期不更新,功能不拓展;2)其他语言标准功能覆盖和追赶速度都超过 Verilog 本身。目前真的能说是对手的也只有 VHDL,但是还是有输有赢。

HLS 会不会是取代 Verilog 的编程语言?

高层次综合(high-level synthesis,简称 HLS)是一种可以把高级语言自动转化成底层硬体描述语言的综合手段。这里的高级语言,不单单是 C/C++,Python,也可以是其他语言,比如 Coq,Java。那么我们回到之前给出 Verilog 被淘汰的条件,目前大多数 HLS(据我所知是所有,但是我也不敢说)都不能完全覆盖 Verilog 的功能,暂时不会去威胁到 Verilog 的地位

好了,接下来我来说明一下为何我之前的答案依旧成立。Verilog 主要是作为在设计硬体的工作上的编程语言,而硬体设计,则主要分为两个方面,可编程晶元,比如 FPGA, 和完全定制化硬体,比如 ASIC。我一直很看好用现在的 HLS 替代 Verilog 在 FPGA 上编程,但是认为现阶段的 HLS 在替代 Verilog 在 ASIC 设计上的地位还有很多路要走。

此处的 FPGA 不是用于 ASIC 的测试,而是用于在云上供软体工程师进行高性能计算,比如微软的 Catapult。在云计算这一块,因为开发时间极短的原因,可以使 HLS 和手写 Verilog 在性能上的差距被忽略不计。比如我就想跑一个高级语言写的大工程,运行个几次,我不可能造一块 ASIC 晶元;我会选择租个伺服器跑,那么这个伺服器里可能不是 GPU 而是 FPGA,那么 HLS 来写就很方便。

而在 ASIC 领域,因为粒度控制不足,所以晶元面积会相对来说比手写 Verilog 大一点,性能相差无几。如今的门电路成本在晶元制造行业相较于几年前还是比较廉价的,有些厂家也愿意牺牲这部分的成本来换取更短的开发时间。随著后期计算机结构的稳定,逐渐 IP 化,这部分的差距会逐渐缩小,目前还需要时间积淀。

很多朋友用 Chisel/Bluespec 打压 HLS,我在这里小提一下。相较于 HLS,这些定制语言(domain specific language,DSL)虽然不是很完善,在学术界确实也是比较热门的工具。不过我觉得还是不至于到说晶元必然成功,这一点也在今年的 PLDI2020 的一篇论文点到了,因此它们提出了 LLHD(有机会我会另外细说)。而且最重要的一点,它们需要电路原理之外的学习成本去掌握这项语言。所以它们替代 Verilog 也不是不可能,但是 DSL 和 HLS 的出发点不一样,是可以共同存在的。


近几年是 HLS 突飞猛进的风口。机器学习的推进造成了定制硬体结构(domain specific architecture)的重要性,Google 提出了 MLIR 框架来构建一个完整的生态。而这可能将对 HLS,以及一切高性能计算相关的编译器带来革命性的变化(当然,之后也是被可能打肿脸的)。

我对未来的展望是,Verilog 的从业者十年后会主要从事单个 IP 的设计,而整个系统设计,则会是用 HLS 来完成(编译器会自动实现替换 IP)。我看到有答案把 HLS 和 Verilog 比做是 Python 和 C,我是不同意的:HLS 想要实现硬体结构必须要先生成 HDL,运行 Python 需要必须要转换成 C 语言吗?

最后,时代总是在进步的,就像你不可能拥有一台永远不会被淘汰的电脑,习惯与时俱进就好了。更何况编程语言的迭代周期是很长的,如果真的担心未来发展太快,可以考虑直接去学最新的量子计算...

打得匆忙,有问题的话欢迎大家指正,谢谢。


我很希望它被淘汰,这可能是我见过的除了汇编之外编码效率最低的语言了。从业界来看,很多工程师还是秉持著verilog或VHDL,甚至连system verilog引入的优秀特性都不愿意尝试。个人感觉业界风气不是很好。

但是取代verilog的也不会是HLS,HLS还是太局限了,很多并行性很强的硬体行为是不能用C语言这种顺序执行的模式来描述的,即便是厂商引入了非常多的pragma。试想一下用HLS写一个五级流水线的MIPS CPU……对于硬体工程师来说,pragma终究还是软约束,综合工具犯蠢的时候pragma也没用。但HLS也不是一无是处,它给软体工程师提供了一个快速上手的通道,给硬体开发人员提供了快速验证和迭代的方式。它在一些Dataflow的优化还有流水级的划分上是要比人来得细致的,因为有明确的数学模型指导。

————以下瞎扯————

Chisel以及bluespec也许是更好的选择,但是这两个我都没用过,有时间还是想学习一下的。但是Verilog距离被淘汰还远的很。这个问题可以用软体的编程语言来类比。越是高级的语言效率越低,从汇编到C到python。但是算力越来越便宜,人们越来越关注如何实现更复杂的功能而不是更快的代码。一些标准化的东西固化下来成为高级语言的基础设施。现在来看,verilog里面有些东西是可以固化的,比如乘法器和加法器。但是硅始终都还是太贵了。FPGA还好,但对于大一点的设计,FPGA也不便宜。大家还是需要去抠硬体的细节。


看应用领域,有些领域注定要求短平快,能用就行,有些领域需要电路层优化,一分钱一分钱扣成本


推荐阅读:
相关文章