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


    Chisel模板链接如下:

    链接: https://pan.baidu.com/s/1DNDKpz5VnTxPgoZBBOd-Ww?pwd=revg 提取码: revg
    以下使用sbt作为构建工具

    多项目构建的基本概念

    多项目构建
    大型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来定义子项目。例如:

    lazy val core = project
    // 这里可以为core项目添加特定的设置和依赖
    
    • 1
    • 2

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

    编译和测试

    在根目录下执行compile或test会影响所有聚合的子项目。
    也可以单独编译或测试特定的子项目,例如使用core/compile或utils/test。

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

    目录结构示例

    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的测试代码
              ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    build.sbt 示例

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

    // 根项目设置
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    项目元设置

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

    sbt.version=1.5.5
    
    • 1

    project/plugins.sbt

    addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.7.1")
    
    • 1

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

    常见Chisel命令

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

        sbt compile:编译项目中的所有源文件。
        sbt project_name/compile:仅编译指定的子项目。
    
    • 1
    • 2

    运行测试

        sbt test:运行所有测试用例。
        sbt project_name/test:仅运行指定子项目的测试用例。
    
    • 1
    • 2

    清理

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

    打包

        sbt package:打包项目,通常是生成JAR文件。
    
    • 1

    运行项目

        sbt run:编译并运行项目的主程序。
        sbt "run-main ClassName":编译并运行指定的主类。
    
    • 1
    • 2

    控制台

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

    重新加载SBT配置

        sbt reload:当你更改了build.sbt或其他构建文件后,重新加载配置。
    
    • 1
  • 相关阅读:
    java计算机毕业设计-民宿管理系统-演示录像2020源程序+mysql+系统+lw文档+远程调试
    项目1-PM2.5预测
    【从入门到起飞】JavaAPI—BigInteger,BigDecimal的使用方法
    绘制第一个三角形
    .NET餐厅管理系统管理员添加编辑页面前端
    代码随想录 动态规划Ⅶ
    MyBatis的各种查询功能
    全网独家·首发2022年100家公司真实的面试题笔试题汇总
    2023年09月青少年软件编程C语言一级真题答案——持续更新.....
    住宅代理IP在网络攻击中的作用
  • 原文地址:https://blog.csdn.net/weixin_46538207/article/details/134480135