开发环境的搭建参考SpinalHDL 开发环境搭建一步到位(图文版) - 极术社区 - 连接开发者与智能计算生态就可以了,so detail.
重点在于sbt切换为国内源,可以参考如下链接Windows上安装java8、scala2.11.12、sbt1.3.12和IntelliJ IDEA的SpinalHDL环境并跑通VexRiscv_45coding的博客-CSDN博客_scala 2.11.12 idea和
Windows上安装java8、scala2.11.12、sbt1.3.12和IntelliJ IDEA的SpinalHDL环境并跑通VexRiscv_45coding的博客-CSDN博客_scala 2.11.12 idea
重点说明下sbt切换国内源的问题:
(1)sbt安装目录/conf目录下sbtconfig.txt修改如下:
-Dsbt.log.format=true
-Dfile.encoding=UTF8
-Dsbt.override.build.repos=true
(2)在C:\Users\用户名\.sbt目录下添加repositories文件,并添加如下内容:
[repositories]
local
huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
maven-central: https://repo1.maven.org/maven2/
sbt-releases-repo: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
主要实现huaweicloud作为国内源。
scala工程采用sbt工具构建工程时,必须包含build.sbt文件。在spinalhdl工程中,build.sbt文件中增加spinalhdl库文件路径等内容,其典型文件内容举例如下:
name := "SpinalTemplateSbt"
ThisBuild / version := "1.0"
ThisBuild / scalaVersion := "2.11.12"
val spinalVersion = "1.8.0"
val spinalCore = "com.github.spinalhdl" %% "spinalhdl-core" % spinalVersion
val spinalLib = "com.github.spinalhdl" %% "spinalhdl-lib" % spinalVersion
val spinalIdslPlugin = compilerPlugin("com.github.spinalhdl" %% "spinalhdl-idsl-plugin" % spinalVersion)
lazy val SpinalTemplateSbt = (project in file("."))
.settings(
name := "SpinalTemplateSbt",
libraryDependencies ++= Seq(spinalCore, spinalLib, spinalIdslPlugin)
)
fork := true
其中verision为build.sbt的版本号,一般不需要修改;
scalaVersion为2.11.12,目前SpinalHDL只支持2.13.x、2.12.x和2.11.x的Scala版本,暂不支持Scala3,推荐使用Scala 2.11.12;
spinalVersion为1.10.1,目前SpinalHDL的最新版本。
fork := true,这句话是为了实现仿真所增加的内容,不使用仿真时该语句可不添加。
其中spinalVersion可以设置为latest.release,保证每次使用都采用最新版本。
当然也可以不指定版本,每次都使用最近的SpinalHDL版本,build.sbt可以做如下的修改。
name := "SpinalDemo"
version := "0.1.0"
scalaVersion := "2.11.12"
libraryDependencies ++= Seq(
"com.github.spinalhdl" % "spinalhdl-core_2.11" % "latest.release",
"com.github.spinalhdl" % "spinalhdl-lib_2.11" % "latest.release",
compilerPlugin("com.github.spinalhdl" % "spinalhdl-idsl-plugin_2.11" % "latest.release")
)
fork := true
以一个简单的例子做说明吧。
// import spinalhdl core library
import spinal.core._
// Component = module in verilog
class Demo01 extends Component {
val a = Reg(UInt(8 bits))
}
object Demo01 {
def main (args: Array[String]): Unit = {
SpinalVerilog(new Demo01)
SpinalConfig(genVhdlPkg = false).generateVhdl(new Demo01)
}
}
上述例子中实现一个位宽为8 bit的寄存器的声明。
其中
import spinal.core._
导入SpinalHDL的核心库;
继承自Component组件的module_xxx类定义了一个类似verilog中module的模块,内部为module的具体的实现,这里暂时不做具体的阐述;
// Component = module in verilog
class module_xxx extends Component {
val a = Reg(UInt(8 bits))
}
最后object对象定义的main函数为scala语言的入口函数,SpinalVerilog语句实现了将Scala语句转换为Verilog语句的功能。
object module_xxx {
def main (args: Array[String]): Unit = {
SpinalVerilog(new module_xxx)
}
}
这样就可以使用SpinalHDL进行愉快的玩耍了。