一生一芯18——Chisel模板与Chisel工程构建

Chisel模板链接如下:

链接: https://pan.baidu.com/s/1DNDKpz5VnTxPgoZBBOd-Ww?pwd=revg 提取码: revg

Chisel转Verilog模板如下:

链接: https://pan.baidu.com/s/1T9JQL5BccxqI4bscfU-JyA?pwd=7rw2 提取码: 7rw2

以下使用sbt作为构建工具

Chisel项目构建介绍

多项目构建的基本概念

多项目构建

大型Scala项目通常由多个较小的模块或子项目组成。在SBT中,这些子项目可以单独管理,每个都有自己的源代码、资源、依赖和构建设置。

聚合(Aggregation)

这是一种将多个子项目组合到一起的方式。在一个聚合项目中,执行SBT任务(如编译、测试)时,这些任务会在所有聚合的子项目中执行。

依赖(Dependency)

如果一个项目依赖于另一个项目,它可以使用后者的代码。依赖关系用于代码共享和重用。

项目结构和目录布局

假设有一个名为my-project的根项目,它包含了三个子项目:core、utils和api。

根项目目录 (my-project/)

包含整个项目的配置文件build.sbt和子项目目录。

构建定义文件 (build.sbt):位于根目录下,定义了项目的基本设置,子项目的定义,以及子项目间的聚合和依赖关系。

子项目目录

每个子项目(如core、utils和api)都有自己的目录,包含各自的源代码和测试代码。

例如,core/目录下会有src/main/scala/和src/test/scala/,分别用于存放主要代码和测试代码。

定义子项目

在build.sbt中,使用Scala的lazy val来定义子项目。例如:

scala 复制代码
lazy val core = project
// 这里可以为core项目添加特定的设置和依赖

这种定义方式使得每个子项目可以有自己的设置和依赖,而且可以独立于其他项目进行编译和测试。

编译和测试

在根目录下执行compile或test会影响所有聚合的子项目。

也可以单独编译或测试特定的子项目,例如使用core/compile或utils/test。

通过这种方式,SBT提供了一个强大且灵活的机制来处理大型、多模块的Scala项目。它不仅有助于保持代码的组织和清晰性,还支持复杂项目的高效构建和测试。

目录结构示例

cs 复制代码
MyProject/                    <- 根项目目录
  build.sbt                    <- 根项目的构建定义文件
  project/                     <- 包含项目元设置的目录
    build.properties
    plugins.sbt
  CoreModule/                  <- CoreModule子项目目录
    src/
      main/
        scala/                 <- CoreModule的Scala源代码
          ...
      test/
        scala/                 <- CoreModule的测试代码
          ...
  UtilsModule/                 <- UtilsModule子项目目录
    src/
      main/
        scala/                 <- UtilsModule的Scala源代码
          ...
      test/
        scala/                 <- UtilsModule的测试代码
          ...
  ApiModule/                   <- ApiModule子项目目录
    src/
      main/
        scala/                 <- ApiModule的Scala源代码
          ...
      test/
        scala/                 <- ApiModule的测试代码
          ...

build.sbt 示例

在根项目目录MyProject中的build.sbt文件定义了项目的结构和设置

scala 复制代码
// 根项目设置
lazy val root = (project in file("."))
  .aggregate(coreModule, utilsModule, apiModule)

// CoreModule子项目
lazy val coreModule = (project in file("CoreModule"))
  .settings(
    name := "CoreModule",
    scalaVersion := "2.13.8",
    // CoreModule特定的依赖和设置
  )

// UtilsModule子项目
lazy val utilsModule = (project in file("UtilsModule"))
  .settings(
    name := "UtilsModule",
    scalaVersion := "2.13.8",
    // UtilsModule特定的依赖和设置
  )

// ApiModule子项目
lazy val apiModule = (project in file("ApiModule"))
  .settings(
    name := "ApiModule",
    scalaVersion := "2.13.8",
    // ApiModule特定的依赖和设置
  )
  .dependsOn(coreModule, utilsModule) // ApiModule依赖于CoreModule和UtilsModule

项目元设置

在project目录中,你通常会有一些元设置文件,如build.properties和plugins.sbt,用于指定SBT版本和项目插件。
project/build.properties

scala 复制代码
sbt.version=1.5.5

project/plugins.sbt

scala 复制代码
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.7.1")

通过这种组织方式,每个子项目都可以拥有独立的源代码、资源文件和测试代码,同时仍然可以通过根项目统一管理。这种结构非常适合大型项目或那些需要模块化组织代码的项目。

常见Chisel命令

在使用SBT进行Scala或Chisel项目的编译和仿真时,有一系列的命令和编写方式用于不同的操作。以下是一些常用的SBT命令及其用途:

常见SBT命令
编译

复制代码
    sbt compile:编译项目中的所有源文件。
    sbt project_name/compile:仅编译指定的子项目。

运行测试

复制代码
    sbt test:运行所有测试用例。
    sbt project_name/test:仅运行指定子项目的测试用例。

清理

复制代码
    sbt clean:清理编译生成的文件(通常是target目录中的内容)。

打包

复制代码
    sbt package:打包项目,通常是生成JAR文件。

运行项目

复制代码
    sbt run:编译并运行项目的主程序。
    sbt "run-main ClassName":编译并运行指定的主类。

控制台

复制代码
    sbt console:启动一个带有项目依赖和类路径的Scala REPL(交互式环境)。

重新加载SBT配置

复制代码
    sbt reload:当你更改了build.sbt或其他构建文件后,重新加载配置。
相关推荐
Thomas21432 天前
Java scala 数组 链表
java·链表·scala
江畔柳前堤3 天前
消息队列:从直觉到精通的完整认知地图
开发语言·人工智能·算法·机器学习·ruby on rails·scala
hopsky17 天前
《Scala 学习手册》核心内容详解
人工智能·学习·scala
abcy0712131 个月前
scala playframework 搭建与新建controller教程
scala
lpfasd1231 个月前
编程语言榜单变迁分析
开发语言·后端·scala
戮漠summer2 个月前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
醉熏的石头2 个月前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
Irene19912 个月前
Scala、Java、Python、JavaScript 的核心特性和应用场景(Python 的“单机“局限性:GIL 机制导致的多核并行缺陷)
java·javascript·python·scala
李白的天不白3 个月前
确认 Nginx 配置文件是否真的生效
scala
醉颜凉3 个月前
Scala自定义Monad实战:从理论到应用的完整指南
大数据·算法·scala