一生一芯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项目构建介绍

  • 多项目构建的基本概念
  • 项目结构和目录布局
    • 根项目目录 (my-project/)
    • 子项目目录
      • 定义子项目
      • 编译和测试
    • 目录结构示例
    • build.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来定义子项目。例如:

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

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

编译和测试

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

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

目录结构示例

MyProject/                    <- 根项目目录build.sbt                    <- 根项目的构建定义文件project/                     <- 包含项目元设置的目录build.propertiesplugins.sbtCoreModule/                  <- 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文件定义了项目的结构和设置

// 根项目设置
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

sbt.version=1.5.5

project/plugins.sbt

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或其他构建文件后,重新加载配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据

Google DeepMind日前悄然宣布了其人工智能研究的重大进展&#xff0c;推出了一款名为“Mirasol3B”的新型自回归模型&#xff0c;旨在提升对长视频输入的理解能力。该新模型展示了一种颠覆性的多模态学习方法&#xff0c;以更综合和高效的方式处理音频、视频和文本数据。 Googl…

MATLAB 模糊设计器 构建 模糊系统

系列文章目录 文章目录 系列文章目录前言一、创建 FIS 结构二、定义输入变量三、定义输出变量四、定义成员函数五、定义规则库六、设计分析七、存储和修改设计八、导出 FIS总结 前言 本例演示如何使用 Fuzzy Logic Designer 应用程序交互式创建 1 型 Mamdani 模糊推理系统&…

在线文档频繁故障不稳定,其实可以自己搭一个Etherpad在线文档

正文共&#xff1a;1116 字 20 图&#xff0c;预估阅读时间&#xff1a;2 分钟 最近某头部云厂商多次出现故障&#xff0c;导致在线文档使用受限&#xff0c;虽说影响不大&#xff0c;但我们有必要考虑一下是否有备用方案。 在自己搭建在线文档方面&#xff0c;我们之前测试过部…

Flutter打包iOS过程中pod访问github失败

问题描述 执行Flutter打包iOS命令出现如下错误&#xff1a; # flutter build ios ...Error output from CocoaPods: ↳Cloning into /var/folders/q8/sd0qtp6d69b30yt6gsh1jrg40000gq/T/d20231116-58127-8g2zje...fatal: unable to access https://github.com/ccgus/fmdb.git…

[Jenkins] 物理机 安装 Jenkins

这里介绍Linux CentOS系统直接Yum 安装 Jenkins&#xff0c;不同系统之间类似&#xff0c;操作命令差异&#xff0c;如&#xff1a;Ubuntu用apt&#xff1b; 0、安装 Jenkins Jenkins是一个基于Java语言开发的持续构建工具平台&#xff0c;主要用于持续、自动的构建/测试你的软…

uniapp基础学习笔记01

文章目录 本博客根据黑马教程学习uniapp一、技术架构二、创建项目2.1 Hbuilder创建2.2 插件安装2.3 微信开发者工具配置与运行2.3.1 简单修改基础页面 2.4 pages.json和tabBar2.4.1 pages.json与tabBar配置2.4.2 案例 3.1 通过命令行创建项目3.2 命令行运行项目3.2.1 命令行总结…

C#装箱与拆箱详解

装箱和拆箱是C#语言中非常重要的两个概念。在C#中&#xff0c;值类型&#xff08;如int&#xff0c;double&#xff0c;struct等&#xff09;和引用类型&#xff08;如class&#xff0c;interface等&#xff09;是两种完全不同的数据类型。而装箱和拆箱就是这两种类型之间转换的…

五、Linux目录结构

1.基本介绍 1.Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录"r/"&#xff0c;然后在此目录下再创建其他的目录。 2.深刻理解linux树状文件目录是非常重要的 3.记住一句经典的话&#xff1a;在Linux世界里&#xff0c;一切皆文件…

android jni通过反射打印java类的所有方法

如果让你在jni层&#xff0c;找到一个目标函数&#xff0c;你应该怎么做&#xff1f; 1.找到目标类&#xff0c;然后打印所有的方法&#xff0c;然后通过方法返回值&#xff0c;方法参数&#xff0c;方法修饰符来确定我们要找的目标函数代码如下 #include <jni.h> #incl…

某60区块链安全之整数溢出漏洞实战学习记录

区块链安全 文章目录 区块链安全整数溢出漏洞实战实验目的实验环境实验工具实验原理攻击过程分析合约源代码漏洞EXP利用 整数溢出漏洞实战 实验目的 学会使用python3的web3模块 学会以太坊整数溢出漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理…

英文公司库

beigene 百济神州

6.3 Map接口

Map接口是一种双列集合&#xff0c;它的每个元素都包含一个键对象Key和值对象Value&#xff0c;键和值对象之间存在一种对应关系&#xff0c;称为映射。Map中键对象Key不允许重复&#xff0c;访问Map集合中的元素时&#xff0c;只要指定了Key&#xff0c;就能找到对应的Value。…

如何查看 class 文件的编译器版本

文章目录 原理分析解决方案其它解决方案javap 命令行工具 在平时的 Java 开发中&#xff0c;有时候我们需要知道某个 class 文件是由哪个版本的 Java 编译器编译生成的 原理分析 class 文件&#xff0c;即字节码文件&#xff0c;它有特定的二进制格式&#xff0c;这种格式是由…

十三、Linux文件目录指令

pwd 指令 基本语法&#xff1a;pwd &#xff08;功能描述&#xff1a;显示当前工作目录的绝对路径&#xff09; 应用实例&#xff1a;案例&#xff1a;显示当前工作目录的绝对路径 ls 指令 基本语法&#xff1a;ls 【选项】【目录或是文件】 常用选项 -a &#xff1a;显示当…

Qt调起Mac“系统设置”面板

mac系统设置相关字段&#xff1a; Accessibility 面板相关 项目 URL Scheme Main x-apple.systempreferences:com.apple.preference.universalaccess Display x-apple.systempreferences:com.apple.preference.universalaccess?Seeing_Display Zoom x-apple.systempreference…

趣学python编程 (三、计算机基础知识)

如果不了解些计算机的基础知识上来就编程&#xff0c;往往容易“不识庐山真面目&#xff0c;只缘身在此山中”。因此对于计算机的一些基础知识&#xff0c;在开始编程前&#xff0c;需要理解和掌握。 计算机软件系统 计算机软件是控制计算机实现用户需求的计算机操作以及管理计…

通过接口抓取公众号信息并群发

总体步骤 通过非官方接口&#xff0c;登陆公众号获取cookie、token通过token拼接需要的参数&#xff0c;请求被抓取的公众号列表数据通过列表数据获取文章内容解析文章内容并通过官方接口创建草稿通过非官方接口群发创建的草稿(非认证用户&#xff0c;已认证用户可以通过官方接…

[Linux] PXE批量装机

一、PXE批量装机简介 1.1 常见的三种系统安装方式 u启动安装&#xff1a;在U盘中下载相关的安装系统及镜像文件&#xff0c;u盘插机安装 光驱安装&#xff1a;将带有所需系统的光盘放进电脑服务器中&#xff0c;按照官方引导装机 网络下载安装&#xff1a;在网上下载相关镜…

elementui 实现树形控件单选

实现&#xff1a; <!--author: itmacydesc: 树节点单选 --> <template><div class"about"><el-tree :data"data"ref"tree":props"defaultProps"node-key"id"show-checkboxcheck-strictlycheck-change…

【如何将任何直流电机变成伺服电机】

【如何将任何直流电机变成伺服电机】 1 前沿2 伺服电机工作原理3 如何制作定制伺服电机4 AS5600 编码器 – 磁性旋转位置传感器5 定制伺服电机电路图6 PCB设计7 自定义伺服3D模型8 定制伺服齿轮箱的 3D 打印零件9 对控制器进行编程9.1 引导加载程序刻录9.2 代码上传9.3 源代码9…