[读书日志]从零开始学习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,网上教程很多,在这里不多说明了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工厂模式与抽象工厂模式在Unity中的实际应用案例

一、实验目的 实践工厂模式和抽象工厂模式的实际应用。 创建一个小型的游戏场景,通过应用这些设计模式提升游戏的趣味性和可扩展性。 掌握在复杂场景中管理和使用不同类型的对象。 比较在实际游戏开发中不同设计模式的实际效果和应用场景。 学习如何进行简单的性…

vue3+Echarts+ts实现甘特图

项目场景&#xff1a; vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…

[Linux]redis5.0.x升级至7.x完整操作流程

1. 从官网下载最新版redis&#xff1a; 官网地址&#xff1a;https://redis.io/download 注&#xff1a;下载需要的登录&#xff0c;如果选择使用github账号登录&#xff0c;那么需要提前在github账号中取消勾选“Keep my email addresses private”&#xff08;隐藏我的邮箱…

android 外挂modem模块实现Telephony相关功能(上网,发短信,打电话)

一.背景 当前模块不支持Telephony相关的功能,例如上网、发短信等功能,就需要外挂另一个模块实现此功能,这就是外挂modem模块实现Telephony功能,此篇主要就是说实现外挂modem模块功能中的Framework层实现逻辑,如下流程是在Android 13中实现的外挂pcie模块的流程 二.ril库相…

倍思氮化镓充电器分享:Super GaN伸缩线快充35W

快节奏的时代,在旅游、办公等场景下,一款高效、便捷的充电器可以让我们的生活更便捷、高效。今天就给大家推荐一款倍思氮化镓充电器——Super GaN伸缩线快充35W。它具备多重亮点,可以满足我们在许多场景下的充电需求,成为我们的得力助手。 倍思氮化镓Super GaN伸缩线快充35W的亮…

若依前后端分离项目部署(使用docker)

文章目录 一、搭建后端1.1 搭建流程&#xff1a;1.2 后端零件:1.2.1 mysql容器创建&#xff1a;1.2.2 redis容器创建&#xff1a;1.2.3 Dockerfile内容&#xff1a;1.2.4 构建项目镜像&#xff1a;1.2.5 创建后端容器&#xff1a; 二、前端搭建&#xff1a;2.1 搭建流程&#x…

STM32驱动NRF24L01

一、NRF24L01的相关介绍 1.2 引脚的介绍 关于SPI的引脚就不再说了&#xff0c;这里介绍其余的两个引脚&#xff1a; CE 模块控制引脚&#xff1a;芯片开启信号&#xff0c;激活RX或TX模式 IRQ 模块中断信号输出引脚&#xff1a;其低电平有效&#xff0c;也就是中断时变为低电平…

OneOS操作系统入门-驱动-03:I2C总线及驱动

一、I2C总线 1.1、I2C总线简介 IIC(Inter-Integrated Circuit) 总线是一种由 PHILIPS 公司开发的两线式串行总线&#xff0c;用于连接微控制器以及其外围设备。它是由数据线 SDA 和时钟线 SCL 构成的串行总线&#xff0c;可发送和接收数据&#xff0c;在 CPU 与被控 IC…

【可实战】Bug的判定标准、分类、优先级、定位方法、提交Bug(包含常见面试题)

一、Bug相关概念 &#xff08;一&#xff09;bug判定标准 &#xff08;二&#xff09;常见 Bug 分类 &#xff08;三&#xff09;bug优先级 1.bug严重程度与优先级的关系 有些很严重的Bug&#xff0c;只在极端的条件下才出现&#xff0c;用户碰到的概率很低&#xff0c;这种情…

nginx学习之路-nginx配置https服务器

文章目录 1. 生成证书2. 配置证书1. 拷贝证书文件2. 修改conf/nginx.conf文件内容 3. 查看效果1. 重载配置2. 访问 1. 生成证书 在linux系统下执行&#xff0c;使用openssl命令。&#xff08;windows环境也可以使用cmder&#xff09; # 1. 生成私钥 server2025.key(无密码保护…

【mybatis】Mybatis整体架构解析

从本篇开始我们开始学习mybatis的系列源码&#xff0c;主要的主题可能就是四个方面 从整体把握mybatis系统架构通过一个查询SQL 源码解析核心流程mybatis的缓存机制-源码级别mybatis的插件机制-源码级别spring是如何整合的mybatis框架的 1.整体架构 上述是mybatis的源码&…

DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义

摘要&#xff1a; 在本文中&#xff0c;我们提出了一种新的端到端模型&#xff0c;称为双鉴别条件生成对抗网络&#xff08;DDcGAN&#xff09;&#xff0c;用于融合不同分辨率的红外和可见光图像。我们的方法建立了一个生成器和两个鉴别器之间的对抗博弈。生成器的目的是基于特…

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署及常用命令 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台&#xff1b;我这里是安装的其他开…

计算机网络-数据链路层(CSMA/CD协议,CSMA/CA协议)

2.2 ppp协议 点对点协议ppp是目前使用最广泛的点对点数据链路层协议。 2.3 媒体接入控制基本概念 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用&#xff0c;即媒体接入控制MAC。 2.3.1 静态划分信道 频分复用 时分复用 波分复用 码分复…

富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)

文章目录 一、IDE&#xff08;集成开发环境&#xff09;二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片&#xff0c;其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍&#xff0c;包括IDE&#xff08;集成开…

Oracle数据库如何找到 Top Hard Parsing SQL 语句?

有一个数据库应用程序存在过多的解析问题&#xff0c;因此需要找到产生大量硬解析的主要语句。 什么是硬解析 Oracle数据库中的硬解析&#xff08;Hard Parse&#xff09;是指在执行SQL语句时&#xff0c;数据库需要重新解析该SQL语句&#xff0c;并创建新的执行计划的过程。这…

从零开始开发纯血鸿蒙应用之实现起始页

从零开始开发纯血鸿蒙应用 一、前言二、主要页面三、应用起始页四、MainPageContent 实现1、一级结构2、二级结构2.1、EmptyContent2.2、FileListContent2.2.1、ViewAction&#xff1a;2.2.2、EditAction2.2.3、DeleteAction2.2.4、ShareAction 五、载入起始页的时机五、总结 一…

5G NTN(七) 高层(1)

说明&#xff1a;本专题主要基于3GPP协议38.821 目录 1. Idle态移动性增强 1.1 TA问题 1.1.1 TA的大小 1.1.2 针对NTN LEO的移动TA&#xff0c;场景C2和D2 1.1.3 针对NTN LEO的固定TA&#xff0c;场景C2和D2 1.1.3.1 方法1&#xff1a;当UE位置信息无法获取的时候 1.1.…

Spring Cloud微服务多模块架构:父子工程搭建实践

一、前言 在现代微服务架构中&#xff0c;Spring Cloud 提供了一整套工具和技术栈来简化分布式系统的开发。为了更好地组织和管理复杂的微服务项目&#xff0c;使用 Maven 多模块&#xff08;父子工程&#xff09; 是一种高效的方法。 ‍ 父子工程 是 Maven 中的一种项目结构…

PDF2Audio - 阅读 PDF 的新方式

1000 Stars 127 Forks 10 Issues 0 贡献者 Apache-2.0 License Python 语言 代码: GitHub - lamm-mit/PDF2Audio 更多AI开源软件&#xff1a;AI开源 - 小众AI PDF2Audio&#xff0c;它将彻底改变我们阅读和理解 PDF 文件的方式。我们不再需要盯着屏幕&#xff0c;而是让信息以声…