一生一芯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或其他构建文件后,重新加载配置。
相关文章:
一生一芯18——Chisel模板与Chisel工程构建
Chisel模板链接如下: 链接: https://pan.baidu.com/s/1DNDKpz5VnTxPgoZBBOd-Ww?pwdrevg 提取码: revg Chisel转Verilog模板如下: 链接: https://pan.baidu.com/s/1T9JQL5BccxqI4bscfU-JyA?pwd7rw2 提取码: 7rw2 以下使用sbt作为构建工具 Chisel项目构…...
ES6 class类
基本介绍 1. constructor constructor()方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。 一个类必须有constructor()方法,如果没有显式定义,一个空的constructor()方法会被默认添加。如: class Po…...
Java的IO流-打印流
打印流 PrintStream public void println()自动换行 PrintWriter package com.itheima.println;import java.io.FileInputStream; import java.io.PrintStream; import java.io.PrintWriter;public class Test2 {public static void main(String[] arg…...
如何使用$APPEALS法,分析用户期待?
$APPEALS分析法是一种用于分析用户期待和需求的方法,它可以帮助企业全方位多角度地了解客户对产品的期望,有助于企业多维度有侧重地调整市场规划和产品改进策略,帮助企业打造优势产品,提高市场竞争力。 下面是使用$APPEALS分析法来…...
南京工程学院数据结构考试纲要
...
C++中将 sizeof() 用于类
C中将 sizeof() 用于类 您知道,通过使用关键字 class 声明自定义类型,可封装数据属性和使用数据的方法。运算符 sizeof( )用于确定指定类型需要多少内存,单位为字节。这个运算符也可用于类,在这种情况下,它将指出类声…...
Android studio访问选程https接口(.crt handshake)
如果服务器是https的,访问受限怎么办?有两种方法,一种是接受一切证书个人官方正式非正式,当然这样就牺牲了安全性,网上方法很多,我现在教大家如何去验证crt文件 首先服务器是https的,必然有几个…...
设计模式(一)-设计原则(1)
六大设计原则 1、单一职责原则 特点: 类和方法属性等,都应当遵守单一职责。尽可能保持统一性,单一性。 含义: (1)统一性,定义一个模块就必须要符合所有对象的行为特征。比如声明一个 Animal 类…...
Linux|僵死进程
1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进程先于父进程结束,并且父进程没有获取…...
JDY蓝牙注意事项
波特率设置:9600,不接受115200,或者38400. 不同于WiFi测试,jdy蓝牙不接受AT"指令,可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用,不知道是不是生产的公司不一样...
服务器IPMI管理操作
简介:智能平台管理界面(IPMI,Intelligent Platform Management Interface)是管理基于 Intel 结构的企业系统中所使用的外围设备采用的一种工业标准,用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作状…...
自动驾驶学习笔记(九)——车辆控制
#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 控制器设计 比例积分微分控制 线性…...
HTML5学习系列之项目实战1
HTML5学习系列之项目实战1 前言代码记录问题总结 前言 学习记录 代码 <div id"player"><audio id"musicbox"></audio><div id"controls" class"clearfix controls"><div id"play" class"…...
git 提交成了LFS格式,如何恢复
平常习惯使用sourceTree提交代码,某次打开时弹出了一个【是否要使用LFS提交】的确认弹窗,当时不知道LFS是什么就点了确认,后续提交时代码全变成了这个样子 因为是初始化的项目首次提交,将近四百个文件全被格式化成了这个样子&…...
【ISP图像处理】Demosaic去马赛克概念介绍以及相关方法整理
1. 基本定义 使用彩色滤光器阵列(CFA)的数码相机需要一个去马赛克程序来形成完整的RGB图像。一般的相机传感器都是采用彩色滤光片阵列(CFA)放置在光感测单元上,在每个像素处仅捕获三种原色成分中的一种。 去马赛克方法主要关注于复原非常规区域,比如边缘…...
单图像3D重建AI算法综述【2023】
计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…...
three.js相机调用reset方法复原但无法完全复原
目录 一、问题 二、原因 三、总结 一、问题 需求:经过多次旋转、平移等变换后,希望恢复到初次渲染的角度、位置。结果发现: three.js oribtControls调用 一次reset方法 无法完全复原;需要多次调用后才能复原。 this.orbitControls.reset…...
前端为什么要工程化
前端为什么要工程化 文章目录 前端为什么要工程化传统开发的弊端一个常见的案例更多问题 工程化带来的优势开发层面的优势团队协作的优势统一的项目结构统一的代码风格可复用的模块和组件代码健壮性有保障团队开发效率高 求职竞争上的优势 现在前端的工作与以前的前端开发已经完…...
软件测试/测试开发/人工智能丨视觉与图像识别自动化测试
视觉与图像识别在软件自动化测试领域中的应用是越来越重要的一项技术,它使得测试可以更全面、准确地模拟用户对图形用户界面(GUI)的交互。以下是视觉与图像识别在软件自动化测试中的主要应用: 1. 自动化 GUI 测试 视觉与图像识别…...
nvm的下载与使用
1.如果已经安装nodejs , 先卸载nodejs; 从控制面板中 卸载程序 卸载nodejs win r打开cmd ,管理员运行 where node 查看是否删除干净nodejs 2.下载nvm 从github 下载nvm , 下载nvm 3.nvm 和node安装路径最好写在同一个路径下 ,如D盘 ,D\a\nvm , D\a\nodejs 4.…...
对比直接使用官方API体验Taotoken在稳定接入上的优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用官方API体验Taotoken在稳定接入上的优势 在长期将大模型能力集成到生产系统的实践中,开发者通常会面临一个…...
Bebas Neue:现代几何字体的开源革命与专业应用指南
Bebas Neue:现代几何字体的开源革命与专业应用指南 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue Bebas Neue 是一款备受全球设计师推崇的开源几何字体,以其简洁有力的线条和卓越的视觉冲…...
终极指南:如何用Word Checker轻松实现中英文拼写自动纠正
终极指南:如何用Word Checker轻松实现中英文拼写自动纠正 【免费下载链接】word-checker 🇨🇳🇬🇧Chinese and English word spelling corrector.(中文易错别字检测,中文拼写检测纠正。英文单词拼写校验工具…...
COMET:基于深度学习的翻译质量评估技术革命
COMET:基于深度学习的翻译质量评估技术革命 【免费下载链接】COMET A Neural Framework for MT Evaluation 项目地址: https://gitcode.com/gh_mirrors/com/COMET 在机器翻译技术快速发展的今天,翻译质量评估已成为连接技术研发与实际应用的关键…...
构建企业内部知识问答Agent时如何借助Taotoken降低模型依赖风险
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 构建企业内部知识问答Agent时如何借助Taotoken降低模型依赖风险 应用场景类,企业在开发基于大模型的内部分析Agent时&a…...
Mac NTFS读写终极指南:Free NTFS for Mac完整解决方案
Mac NTFS读写终极指南:Free NTFS for Mac完整解决方案 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management fo…...
Navicat16/17 Mac版试用期终极重置指南:三种自动化方案实现无限免费使用
Navicat16/17 Mac版试用期终极重置指南:三种自动化方案实现无限免费使用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_ma…...
【云计算学习之路】学习Centos7系统:服务搭建(NFS)
文章目录【云计算学习之路】学习Centos7系统:服务搭建(NFS)前言一、NFS 核心原理与架构1.1 NFS 服务简介1.2 NFS 核心依赖与守护进程、端口机制1.2.1 基础依赖组件1.2.2 NFS 核心守护进程1.2.3 核心通信端口规则1.3 NFS 完整工作流程(附原理图解)1.4 常用…...
Gemini 1.5、Sora与V-JEPA:AI工程水位线的三大坐标轴
1. 这份AI Newsletter到底在讲什么?为什么它值得你花5分钟读完“Towards AI”这个名称,对很多刚接触AI内容生态的朋友来说可能有点陌生——它不是某个大厂的官方号,也不是某位顶流KOL的个人频道,而是一个由一线工程师、研究员和产…...
ESP32/ESP8266固件备份全攻略:esptool与flash_download_tool实战详解
1. 项目概述:为什么我们需要备份ESP32/8266的固件? 在嵌入式开发或者物联网项目中,ESP32和ESP8266这两款芯片的应用已经非常普遍了。无论是做智能家居、数据采集还是各种DIY小玩意儿,我们经常会在上面编写和烧录固件。但不知道你…...
