常见问题

与人工编写的 VHDL/Verilog 相比,SpinalHDL 生成的 RTL 的开销是多少?

开销为零。 SpinalHDL 生成与人类编写的 VHDL/Verilog 中相同的 HDL 构造,在最终实现中不存在额外的实例化工件,这也取决于你的使用方法。这使得在将生成的 HDL 与手写 HDL 进行比较时的开销为零。

由于Scala/SpinalHDL语言强大的表达能力,对于给定的复杂硬件设计来说,设计更加简洁,并且具有很强的类型安全性,强大的HDL安全范式导致更少的代码行,能够以更少的错误实现更多的功能。

SpinalHDL 不采用 HLS 方法,本身也不是 HLS 解决方案。其目标不是将任意代码转换为 RTL,而是通过提高抽象级别、增加代码重用能力来提供一种功能强大的语言来描述 RTL。

如果 SpinalHDL 将来没有支持了怎么办?

这个问题有两个方面:

  1. SpinalHDL 生成 VHDL/Verilog 文件,这意味着 SpinalHDL 仍将在未来几十年内得到所有 EDA 工具的支持。

  2. 如果 SpinalHDL 中存在错误并且不再支持修复它,这也不是致命的情况,因为 SpinalHDL 编译器是完全开源的。对于简单的问题,您也许可以在几个小时内自行解决问题。

  3. 考虑一下商业 EDA 供应商需要多少时间来解决问题或在其封闭工具中添加新功能。还要考虑使用 SpinalHDL 时节省的成本和时间,以及您自己的实体回馈社区的潜力,其中包括工程时间、开源贡献时间或对项目的捐赠,以改善其未来。

SpinalHDL 是否在生成的 VHDL/Verilog 中保留注释?

事实并非如此。生成的文件应被视为网表。例如,当你编译C代码时,你关心生成的汇编代码中的注释吗?

SpinalHDL 可以扩展到大型项目吗?

是的,已经进行了一些实验,如生成数百个带缓存的 3KLUT CPU 大约需要 12 秒,与仿真或综合此类设计所需的时间相比,这是一个短得多的时间。

SpinalHDL 是如何诞生的

2014年12月至2016年4月期间,这是一个个人爱好项目。但自 2016 年 4 月起,就有一个人全职从事这项工作。有些人也定期为该项目做出贡献。

既然有了VHDL/Verilog/SystemVerilog,为什么还要开发新的语言呢?

前言 专门讨论这个主题。

如何使用 SpinalHDL 的未发布版本(但在 git 上提交)?

首先,如果您还没有克隆存储库,则需要获取存储库:

git clone --depth 1 -b dev https://github.com/SpinalHDL/SpinalHDL.git
cd SpinalHDL

在上面的命令中,您可以将 dev 替换为您要签出的分支的名称。 --depth 1 阻止下载存储库历史记录。

然后将获取目录中的代码发布:

sbt clean '++ 2.12.13' publishLocal

这里 2.12.13 是使用的Scala版本。前两个数字必须与您的项目中使用的版本相匹配。您可以在 build.sbt 和/或 build.sc 中找到它:

ThisBuild / scalaVersion := "2.12.16" // in build.sbt
// or
def scalaVersion = "2.12.16" // in build.sc

然后在您的项目中,更新 build.sbtbuild.sc 中指定的 SpinalHDL 版本:应将其设置为 dev 而不是版本号。

val spinalVersion = "1.7.3"
// becomes
val spinalVersion = "dev"

备注

无论您之前签出哪个分支,这里总是 dev