当前位置: 首页 > news >正文

[读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)

简介:从20世纪90年代开始,利用硬件描述语言和综合技术设计实现复杂数字系统的方法已经在集成电路设计领域得到普及。随着集成电路集成度的不断提高,传统硬件描述语言和设计方法的开发效率低下的问题越来越明显。近年来逐渐崭露头角的敏捷化设计方法将把集成电路设计带入一个新的阶段。与此同时,集成电路设计也需要一种适应敏捷化设计方法的新型硬件开发语言。本书从实用性和先进性出发,较全面地介绍新型硬件开发语言Chisel和数字系统敏捷化设计方法。全书分两篇。第一篇共10章,主要内容包括Chisel语言简介、Chisel的数据类型、Chisel的模块与硬件类型、Chisel常用的硬件原语、如何将Chisel代码转换生成Verilog HDL代码及基本测试方法、Chisel的黑盒、用Chisel实现多时钟域设计、Chisel的函数应用及其他议题等。第二篇共9章,介绍编写Chisel需要掌握的Scala语言编程基础知识。读者可以根据自身情况,跳过第二篇Scala基础部分,直接学习Chisel的硬件开发功能。本书提供配套的课后练习参考答案、仿真程序代码等。本书可作为集成电路科学与工程、电子信息类、计算机类等相关专业的高年级本科生及研究生的教学用书,也可供从事集成电路设计的工程人员和EDA专业人员学习、参考。

0.为什么选择本书

进一步学习CPU时,我们发现很多资源都是使用chisel语言设计的,仅仅使用verilog也许很难支撑我们的进阶学习。因此,学习一门更加有利于快速实现的语言是有必要的。本书是市面上唯一一本成体系地讲解Chisel和Scala地书籍,具有很强的参考价值。由于笔者自己之前并没有java和scala基础,所以这个学习路径势必是比较陡峭的,所以我的学习思路可以适应零基础的入门学习路线。从零开始的Chisel,从这里开始!

1.Scala与Chisel入门概述

本章主要解决的就是一个问题,Chisel为什么选择Scala,以及我们为什么选择Chisel。对于笔者这样的电子专业的小白来说,并没有学习过java,使用的编程语言大多数是C和Python,C++使用都很少。所以固然,也没有听说过Scala。

Why Scala?

  • Scala基于JVM(Java虚拟机)运行,其语法更强大,形式更简单,代码量更少。

  • Scala是面向对象的函数式语言,C/C++、Python,Java都是指令式编程。

  • Scala是一门可以自由伸缩的语言,能够裁剪已有的系统类库,也可以扩展自定义库。它的学习曲线并不平滑,而是阶梯式的。

  • Scala由于其强大语法特性,成为了一种优秀的“宿主”语言,可以便捷地开发出一门新语言。

  • Scala比Python更简洁,抽象程度比C++更高。

看到这些特性,笔者简直是已经按耐不住一探究竟的狂热心情,这么好的语言我之前怎么没学习过!

Why Chisel?

verilog诞生的历史悠久,它是C语言时代的产物。随着软件各种语言开发效率的巨大进步,硬件开发语言显得无法跟上潮流。关于这个问题的讨论并非近年才开始,而是早已持续数年。主张改进verilog的一派开发了systemverilog,但它仍有很多不足,主要应用于验证领域。主张重构新语言的C++派开发了systemC,但它并没有受到广泛的支持。主张Java的一派直到近年才推出了Chisel,它推动了硬件设计的敏捷开发。它可以通过Firrtl编译器转换为Verilog HDL或VHDL,它实际上仍然会生成verilog代码,借助verilog间接生成电路,因此不存在EDA方面的限制。

Chisel为硬件电路设计引入了面向对象特性,减少了很多不必要的语法,改进了有瑕疵的语法。它生成的verilog都是可综合的,消除了一些歧义语法,利用模式匹配、特质混入、类继承等特性能够快速改变电路结构。

由于Chisel是建构在Scala之上的,因此本书安排了前后两部分内容,第一部分介绍Chisel的语法与实战,第二部分介绍Scala的语法与实战。由于我们是零基础入门,所以需要首先学习Scala的语法。我们从第二部分开始学习。

2.Scala语言编程基础

2.1 Scala的运行

为了更遍历地使用Scala和各种编译链,我们最好在Linux环境下进行学习。这里我使用Windows11的Ubuntu子系统进行学习,使用虚拟机也可以。关于如何在Windows11上运行Ubuntu子系统,可以查阅其他资料,在这里不赘述。

环境:ARM64 Windows11 MatebookEGo Snapdragon (TM) 8cx Gen 3 @ 3.0 GHz 3.00 GHz Ubuntu22.04 WSL2

官方网站:Install | The Scala Programming Language

以我的执行环境为例,介绍安装过程:

首先需要安装java环境,我的ubuntu中没有自带java环境。

sudo apt install default-jdk

之后执行这条指令:

curl -fL https://github.com/VirtusLab/coursier-m1/releases/latest/download/cs-aarch64-pc-linux.gz | gzip -d > cs && chmod +x cs && ./cs setupsudo apt install default-jdk

这时scala已经被成功安装,但我们需要重启Ubuntu,对我而言我重启了命令行。之后我们用下面的语句测试:

scala -version

如果能正确显示版本号,没有WARNNING则说明已经安装完成。这时直接输入scala便可进入scala编译器,可以开始执行程序了。

jia@J-MateBookEGo:~$ scala
Welcome to Scala 3.6.2 (21.0.5, Java OpenJDK 64-Bit Server VM).
Type in expressions for evaluation. Or try :help.
​
scala> 1+2
val res0: Int = 3

如果我们希望使用图形化界面编程,可以安装IDEA,网上教程很多,在这里不多说明了。

相关文章:

[读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)

简介:从20世纪90年代开始,利用硬件描述语言和综合技术设计实现复杂数字系统的方法已经在集成电路设计领域得到普及。随着集成电路集成度的不断提高,传统硬件描述语言和设计方法的开发效率低下的问题越来越明显。近年来逐渐崭露头角的敏捷化设…...

二、用例图

二、用例图 (一)、用例图的基本概念 1、用例图的定义: 用例图是表示一个系统中用例与参与者关系之间的图。它描述了系统中相关的用户和系统对不同用户提供的功能和服务。 用例图相当于从用户的视角来描述和建模整个系统,分析系统的功能与…...

LWIP之一:使用STM32CubeMX搭建基于FreeRTOS的LWIP工程并分析协议栈初始化过程

工程搭建及LWIP协议栈初始化过程 一、使用STM32CubeMX快速生成工程二、修改测试三、LWIP协议栈初始化过程分析3.1 tcpip_init()3.1.1 lwip_init()3.1.1.1 sys_init()3.1.1.2 mem_init()3.1.1.3 memp_init()3.1.1.4 netif_init()3.1.1.5 udp_init()3.1.1.6 tcp_init()3.1.1.7 ig…...

个性化电影推荐系统|Java|SSM|JSP|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...

UE5AI感知组件

官方解释: AI感知系统为Pawn提供了一种从环境中接收数据的方式,例如噪音的来源、AI是否遭到破坏、或AI是否看到了什么。 AI感知组件(AIPerception Component)是用于实现游戏中的非玩家角色(NPC)对环境和其…...

每日一学——日志管理工具(ELK Stack)

5.1 ELK Stack 5.1.1 Elasticsearch索引机制 嘿,小伙伴们!今天我们要聊聊ELK Stack——一套由Elasticsearch、Logstash和Kibana组成的强大日志管理工具集。通过这套工具,我们可以轻松地收集、存储、搜索和可视化日志数据。首先,…...

“智能筛查新助手:AI智能筛查分析软件系统如何改变我们的生活

嘿,朋友们!今天咱们来聊聊一个特别厉害的工具——AI智能筛查分析软件系统。想象一下,如果你有一个超级聪明的小助手,不仅能帮你快速找出问题的关键所在,还能提供精准的解决方案,是不是感觉工作和生活都变得…...

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近,DeepSeek v3(一个MoE模型,拥有671B参数,其中37B参数被激活)模型全球爆火。 作为一款能与Claude 3.5 Sonnet,GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源,还放出一份扎实的技术…...

linux-centos-安装miniconda3

参考: 最新保姆级Linux下安装与使用conda:从下载配置到使用全流程_linux conda-CSDN博客 https://blog.csdn.net/qq_51566832/article/details/144113661 Linux上删除Anaconda或Miniconda的步骤_linux 删除anaconda-CSDN博客 https://blog.csdn.net/m0_…...

html+css+js网页设计 美食 好厨艺西餐美食企业网站模板6个页面

htmlcssjs网页设计 美食 好厨艺西餐美食企业网站模板6个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 …...

QT-窗口嵌入外部exe

窗口类&#xff1a; #pragma once #include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QProcess> #include <QTimer> #include <QDebug> #include <Windows.h> #include <QWindow> #include <…...

C#中使用系统默认应用程序打开文件

有时您可能希望程序使用默认应用程序打开文件。 例如&#xff0c;您可能希望显示 PDF 文件、网页或互联网上的 URL。 System.Diagnostics.Process类的Start方法启动系统与文件关联的应用程序。 例如&#xff0c;如果文件扩展名为.txt&#xff0c;则系统会在 NotePad、WordPa…...

如何在 Ubuntu 22.04 上配置 Logrotate 高级教程

简介 本教程将教你如何在 Ubuntu 22.04 上进行 Logrotate 的高级配置。 日志管理对于维护系统性能和确保你的日志不会占用太多磁盘空间至关重要。在 Ubuntu 上&#xff0c;logrotate 是一个强大的工具&#xff0c;它可以通过轮转、压缩和删除旧日志来自动管理日志文件。在本教…...

java项目之校园管理系统的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; springboot校园…...

关于 webservice 日志中 源IP是node IP的问题,是否能解决换成 真实的客户端IP呢

本篇目录 1. 问题背景2. 部署gitlab 17.52.1 添加repo源2.2 添加repo源 下载17.5.0的charts包2.3 修改values文件2.3.1 hosts修改如下2.3.2 appConfig修改如下2.3.3 gitlab下的sidekiq配置2.3.4 certmanager修改如下2.3.5 nginx-ingress修改如下2.3.6 <可选> prometheus修…...

Serializable接口

最近写项目的时候&#xff0c;发现有一些类要实现Serializable接口&#xff0c;一开始只是粗略的知道实现了Serializable接口&#xff0c;这个类的对象可以被序列化&#xff0c;但我比较轴&#xff0c;想知道这个接口到底有什么作用。 我点开这个接口发现什么方法都没有实现&am…...

如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈

如何操作github&#xff0c;gitee&#xff0c;gitcode三个git平台建立镜像仓库机制&#xff0c;这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈 问题背景 由于我司最早期19年使用的是gitee&#xff0c;因此大部分仓库都在gitee有几百个库的代码&#xff0c;…...

【HDU】1089 A+B for Input-Output Practice (I)

1089 AB for Input-Output Practice (I):以EOF结尾的输入 Problem Description Your task is to Calculate a b. Too easy?! Of course! I specially designed the problem for acm beginners. You must have found that some problems have the same titles with this one,…...

lua库介绍:数据处理与操作工具库 - leo

leo库简介 leo 模块的创作初衷旨在简化数据处理的复杂流程&#xff0c;提高代码的可读性和执行效率&#xff0c;希望leo 模块都能为你提供一系列便捷的工具函数&#xff0c;涵盖因子编码、多维数组创建、数据框构建、列表管理以及管道操作等功能。 要使用 Leo 模块&#xff0c;…...

逆向入门(1)C篇-正儿巴经的第1个实验

接触了这么久&#xff0c;第一次不是使用CV大法编写程序&#xff0c;认认真真的重头开始学习&#xff0c;记录一下找调试的感觉。 第一段代码&#xff0c;重温原码&#xff0c;反码和补码。 #include "stdafx.h"int main(int argc, char* argv[]) {char x -7;print…...

百度网盘直链解析工具:告别龟速下载的终极解决方案

百度网盘直链解析工具&#xff1a;告别龟速下载的终极解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘非会员的下载速度而烦恼吗&#xff1f;每天面对几…...

CLIP-GmP-ViT-L-14案例展示:多模态广告创意与目标人群标签匹配

CLIP-GmP-ViT-L-14案例展示&#xff1a;多模态广告创意与目标人群标签匹配 1. 模型效果惊艳展示 CLIP-GmP-ViT-L-14模型在广告创意与人群匹配领域展现出惊人的准确度。这个经过几何参数化微调的视觉语言模型&#xff0c;能够精准理解图片内容和文本描述的深层关联&#xff0c…...

我用AI Agent 10分钟搞定了CSDN自动发布,再也不用手动写博客了

说实话&#xff0c;我之前最烦的就是写CSDN博客。每次写完要排版、加标签、手动上传图片&#xff0c;折腾半天才能发布。直到最近我用AI Agent做了个自动发布流程&#xff0c;现在10分钟就能搞定从写作到发布全流程&#xff0c;真香。 背景&#xff1a;手动发布有多折磨人 我之…...

Gemma-3-12b-it部署教程:bf16精度加载失败排查与CUDA版本兼容清单

Gemma-3-12b-it部署教程&#xff1a;bf16精度加载失败排查与CUDA版本兼容清单 1. 项目概述 Gemma-3-12b-it是基于Google Gemma-3-12b-it大模型开发的本地多模态交互工具&#xff0c;专为图文混合交互场景优化。该工具通过多项技术创新解决了12B大模型在本地部署中的性能瓶颈&…...

中频电炉倾倒机械系统设计(说明书+CAD+SolidWorks)

中频电炉作为金属熔炼的核心设备&#xff0c;其倾倒机械系统的设计直接关系到熔炼效率与操作安全。该系统通过机械结构与动力传输的精准配合&#xff0c;实现炉体平稳倾转与精准定位&#xff0c;确保高温金属液按预设角度流入模具或浇包。设计过程中需重点解决动力传递效率、结…...

告别窗口遮挡烦恼:3种方法让PinWin成为你的桌面效率助手

告别窗口遮挡烦恼&#xff1a;3种方法让PinWin成为你的桌面效率助手 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 你是否经常在写代码时需要参考文档&#xff0c;却频繁被其他窗口遮…...

CSS如何实现根据滚动进度触发的过渡效果_配合JS修改类名触发transition

滚动进度需通过JS检测并切换CSS类名来触发transition&#xff0c;不能直接绑定scrollY&#xff1b;必须显式定义初始状态、避免内联样式覆盖、合理节流并处理渲染时机问题。滚动进度如何映射到 CSS transition 的触发点CSS 本身不能直接读取滚动位置&#xff0c;transition 也不…...

接口自动化测试流程、工具及其实践详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口自动化测试简介接口自动化测试是指通过编写脚本或使用自动化工具&#xff0c;对软件系统的接口进行测试的过程。接口测试是软件测试中的一种重要测试类型…...

Python 匿名函数 lambda 基础语法与场景

文章目录前言一、先搞懂&#xff1a;lambda 到底是个啥&#xff1f;1.1 匿名函数&#xff0c;名字都懒得取的“临时工”1.2 lambda 和普通函数的核心区别二、lambda 基础语法全拆解2.1 无参数 lambda2.2 单个参数2.5 支持条件表达式三、lambda 为什么存在&#xff1f;核心使用场…...

3个技巧快速掌握libwdi:Windows USB驱动安装的智能助手

3个技巧快速掌握libwdi&#xff1a;Windows USB驱动安装的智能助手 【免费下载链接】libwdi Windows Driver Installer library for USB devices 项目地址: https://gitcode.com/gh_mirrors/li/libwdi 你是否曾经遇到过这样的困扰&#xff1f;在Windows系统上连接USB设…...