在 CLI (命令行)中结合 SBT 使用 Spinal

首先,在 template (提前下载)的根目录中打开一个终端。

可以直接从终端执行命令:

sbt "firstCommand with arguments" "secondCommand with more arguments"

但是 sbt 有一个相当长的启动时间,所以我们建议使用它的交互模式:

sbt

现在 sbt 会显示提示。让我们从 Scala 编译开始。它将获取依赖项,因此第一次运行可能需要一些时间:

compile

实际上,您永远不会仅使用 compile 命令,因为它会在需要时自动完成。与后续的构建相比,第一次构建时间将花费较长时间,因为 sbt 工具需要从冷启动构建整个项目,后续构建则尽可能使用增量构建。 sbt 支持交互式 shell 内的自动补全,以帮助发现和使用可用命令。您可以使用 sbt shell 或者 sbt (不带参数)命令启动交互式 shell。

要运行特定的 HDL 代码生成或仿真,命令是 runMain。因此,如果您输入 runMain、空格和tab,您应该得到以下结果:

sbt:SpinalTemplateSbt> runMain
   ;                               projectname.MyTopLevelVerilog
   projectname.MyTopLevelFormal    projectname.MyTopLevelVhdl
   projectname.MyTopLevelSim

自动补全功能会建议所有可以运行的内容。这是一个生成 Verilog 代码的例子:

runMain projectname.MyTopLevelVerilog

查看目录./hw/gen/:有一个新的 MyTopLevel.v 文件!

现在在命令的开头添加一个 ~

~ runMain projectname.MyTopLevelVerilog

它打印出这个:

 sbt:SpinalTemplateSbt> ~ runMain mylib.MyTopLevelVerilog
 [info] running (fork) mylib.MyTopLevelVerilog
 [info] [Runtime] SpinalHDL v1.7.3    git head : aeaeece704fe43c766e0d36a93f2ecbb8a9f2003
 [info] [Runtime] JVM max memory : 3968,0MiB
 [info] [Runtime] Current date : 2022.11.17 21:35:10
 [info] running (fork) projectname.MyTopLevelVerilog
 [info] [Runtime] SpinalHDL v1.9.3    git head : 029104c77a54c53f1edda327a3bea333f7d65fd9
 [info] [Runtime] JVM max memory : 4096.0MiB
 [info] [Runtime] Current date : 2023.10.05 19:30:19
 [info] [Progress] at 0.000 : Elaborate components
 [info] [Progress] at 0.508 : Checks and transforms
 [info] [Progress] at 0.560 : Generate Verilog
[info] [Done] at 0.603
[success] Total time: 1 s, completed Oct 5, 2023, 7:30:19 PM
[info] 1. Monitoring source files for projectname/runMain projectname.MyTopLevelVerilog...
[info]    Press <enter> to interrupt or '?' for more options.

所以现在,每次保存源文件时,它都会重新生成 MyTopLevel.v。为此,它会自动编译源文件并执行 lint 检查。这样,当您编辑源文件时,您几乎可以实时在终端上打印错误。

您可以按 Enter 停止自动生成,然后按 Ctrl-D 退出 sbt

也可以直接从终端启动它,而不使用 sbt 的交互式提示:

sbt "~ runMain mylib.MyTopLevelVerilog"

现在您可以使用您的环境了,让我们探索一下代码: 一个简单的例子