一生一芯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.…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
