一生一芯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.…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
