常见问题
与人工编写的 VHDL/Verilog 相比,SpinalHDL 生成的 RTL 的开销是多少?
开销为零。 SpinalHDL 生成与人类编写的 VHDL/Verilog 中相同的 HDL 构造,在最终实现中不存在额外的实例化工件,这也取决于你的使用方法。这使得在将生成的 HDL 与手写 HDL 进行比较时的开销为零。
由于Scala/SpinalHDL语言强大的表达能力,对于给定的复杂硬件设计来说,设计更加简洁,并且具有很强的类型安全性,强大的HDL安全范式导致更少的代码行,能够以更少的错误实现更多的功能。
SpinalHDL 不采用 HLS 方法,本身也不是 HLS 解决方案。其目标不是将任意代码转换为 RTL,而是通过提高抽象级别、增加代码重用能力来提供一种功能强大的语言来描述 RTL。
如果 SpinalHDL 将来没有支持了怎么办?
这个问题有两个方面:
SpinalHDL 生成 VHDL/Verilog 文件,这意味着 SpinalHDL 仍将在未来几十年内得到所有 EDA 工具的支持。
如果 SpinalHDL 中存在错误并且不再支持修复它,这也不是致命的情况,因为 SpinalHDL 编译器是完全开源的。对于简单的问题,您也许可以在几个小时内自行解决问题。
考虑一下商业 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.sbt
或 build.sc
中指定的 SpinalHDL 版本:应将其设置为 dev
而不是版本号。
val spinalVersion = "1.7.3"
// becomes
val spinalVersion = "dev"
备注
无论您之前签出哪个分支,这里总是 dev
。