Chisel3 - Chisel vs. Scala】的更多相关文章

https://mp.weixin.qq.com/s/mTmXXBzSizgiigFYVQXKpw     介绍Chisel与Scala的不同与关联.   ​​   一. 层次高低   Chisel是使用Scala语言编写的具体代码.从抽象层次上看,Scala更高.   1. 语言与代码   Chisel是使用Scala语言编写的代码.   2. 语言与代码库   Chisel是使用Scala语言编写的代码库.     二. 范围大小   3. 通用语言与领域专用语言   Scala是一门通用语…
https://mp.weixin.qq.com/s/2318e6VJ4wFGpWwBOmTikA   Chisel数据类型(Data)与Module的绑定关系,根据Data的使用方式不同,而有多种绑定类型.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/chiselFrontend/src/main/scala/chisel3/core/Binding.scala   1. Binding   类型继承图如下:…
https://mp.weixin.qq.com/s/L5eAwv--WzZdr-CfW2-XNA   Chisel提供的Valid接口.如果valid为置1,则表明输出的bits有效:反之,则输出无效.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Valid.scala   ​​   1. Valid是一组用户自定义的输入输出接口   类的声明如下: cl…
https://mp.weixin.qq.com/s/xTk5ucvSNuwsh8C6E362cg   后续开启RISC-V开发相关内容.   RISC-V开发推荐使用Chisel编程语言.Chisel即Constructing Hardware in a Scala Embedded Language: Chisel is an open-source hardware construction language developed at UC Berkeley that supports a…
https://mp.weixin.qq.com/s/Jsy8P3m9W2EYKwneGVekiw   独热码相关的电路生成器.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/OneHot.scala     1. PriorityEncoderOH   1) Seq.tabulate(n)(f)   ​​ 相当于把0到n-1逐个带入函数f,把每一次计算得出的…
https://mp.weixin.qq.com/s/mO648yx4_ZRedXSWX4Gj2g   可以容纳不同类型的变量的向量.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/MixedVec.scala     1. MixedVec类   ​​   1) 继承自Record   ​​   2) 实现基本方法 ​​ 其中,:= 为批量连接方法(Stro…
https://mp.weixin.qq.com/s/TK1mHqvDpG9fbLJyNxJp-Q   Mux相关电路生成器.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Mux.scala     1. MuxCase   ​​   按在mapping中的顺序为优先顺序,若前一个元素的Bool为真,则返回该元素的T:否则,看下一个元素.若所有元素的Bool…
https://mp.weixin.qq.com/s/g85Si6n37D9PYfR5hEoRQQ     实现一个查找逻辑.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Lookup.scala     1. Lookup   ​​ 各个参数如下: 1) addr: 要查找对象的地址: 2) default: 若没有查到,则使用这个默认值返回: 3) ma…
https://mp.weixin.qq.com/s/8lC8vQnBdKW9C39H0QFFkA     对数相关的辅助方法,Math通过软件方法实现,CircuitMath通过硬件方法实现.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Math.scala https://github.com/freechipsproject/chisel3/blob/…
https://mp.weixin.qq.com/s/DSdb4tmRwDTOki7mbyuu9A     实现16位线性反馈移位寄存器.可用于生成简单的伪随机数.     ​​     ​​   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/LFSR.scala     1. LFSR16   Generates a 16-bit linear feedback…
https://mp.weixin.qq.com/s/MQzX1Ned35ztz0vusPdkdQ   比特相关的操作.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Bitwise.scala   1. Fill   把一个UInt重复n次:   a. 用法   ​​   b. 实现   ​​   根据重复的次数n,分为5中情况.   这里看最后一种情况:…
https://mp.weixin.qq.com/s/80Q8j-OSMtgh5a92pI-MZA   使用value和mask来描述一个比特模式,即:value = bits & mask.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/BitPat.scala     1. BitPat   ​​   a. 使用方法   ​​   b. 两个数据成员:va…
https://mp.weixin.qq.com/s/5oAwH3scumARzPidRBfG2w     带锁多入单出仲裁器,输出会被锁定指定的时钟周期.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Arbiter.scala     1. LockingArbiterLike   ​​   LockingArbiterLike是一个抽象类(图标中带白色虚…
https://mp.weixin.qq.com/s/GcNIFkHfa0gW0HKkKvHZEQ     循环优先级(Round Robin)仲裁器.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Arbiter.scala   RRArbiter是一个仲裁器,只是使用RR的逻辑实现优先级.grant是优先级逻辑的结果,所以实现RRArbiter与严格优先级…
https://mp.weixin.qq.com/s/7Y23gV6yPvtmvKHTo2I8mw   基于ReadyValid接口实现的多入单出仲裁器.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Arbiter.scala     1. ArbiterIO   ​​ ArbiterIO包含如下接口: a. in   Arbiter的n个输入接口,每个接口…
https://mp.weixin.qq.com/s/vlyOIsQxR6bCqDDMtRQLLg   实现队列模块,先入先出(FIFO).   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Decoupled.scala     1. QueueIO   ​​ 队列(Queue )输入输出接口,entries为队列的容量.这些接口的方向都是从队列的角度来定义的.…
https://mp.weixin.qq.com/s/g7Q9ChxHbAQGkbMmOymh-g   ReadyValid通信接口.通信的双方为数据的生产者(Producer)和消费者(Consumer).   通信协议: 1. Producer有数据要发送,则把Valid位置位为1: 2. Consumer准备好接收了,则把Ready为置位为1: 3. Producer发现Ready为1后,开始发送数据: 4. Producer发送完成后,把Valid置位为0: 5. 不排除Producer…
https://mp.weixin.qq.com/s/WeFesE8k0ORxlaNfLvDzgg   流水线,用于添加延迟.   参考链接: https://github.com/freechipsproject/chisel3/blob/master/src/main/scala/chisel3/util/Valid.scala   ​​   1. Pipe object提供了三个工厂方法   ​​ 最基本的方法签名如下: def apply[T <: Data](enqValid: Boo…
https://mp.weixin.qq.com/s/j8mt_qvwliKIKtlN6JcyqQ   介绍Intellij IDEA安装Scala插件后,如何在阅读和编码两方面助益开发者.     1. 语言专家   Scala是一门多范式编程语言,在支持面向对象编程的同时,也支持函数式语法.再加上隐式规则和宏等特性,以及众多的语法糖.使得Scala的学习曲线异常陡峭.   除了语言规范.教程图书.网络资料之外,一个强大的能够智能提示补全.时时检查提醒的编辑器或者IDE,可以极大的提高学习速度…
https://mp.weixin.qq.com/s/rI-CJM6GyI6EUHPZ3uYiFg   如同Verilog中的众多运算符,Chisel也针对自身的数据类型,提供了很多运算符.   Chisel语言内嵌于Scala.在Scala中,基本上所有的运算符都被当做一般的字符,可以作为命名符号(identifier)的一部分.并且Scala支持省略函数调用时,括在参数两边的括号.所以Scala中定义运算符重载很简单,可以很大的提高代码的可读性.     1. 运算符   参考链接: htt…
https://mp.weixin.qq.com/s/uiW4k4DeguvYsG8LhHk2Ug 介绍Chisel3中基本数据类型的字面量的写法,及其背后的实现机制,也就是Scala隐式规则.   参考链接: https://github.com/freechipsproject/chisel3/wiki/Datatypes-in-Chisel   ​​   1. 位宽字面量(literal)   8.W,即位宽为8,类型为Width   2. 有符号数字面量   8.S,即大小为8的有符号数…
https://mp.weixin.qq.com/s/KqyklKrPLtPm38sftMYlHA   1. 使用Maven获取库   Chisel相关的库基本上都可以使用Maven获取到(https://mvnrepository.com/artifact/edu.berkeley.cs):   ​​   其中Chisel Iotesters是用来进行验证的库,可以看到各个版本及其发布日期: ​​   随便打开一个版本: ​​ 可以看到该版本的基本信息,点击jar可以直接下载库的jar包.下面…
https://mp.weixin.qq.com/s/gssjiiPW6zUzKwCFZdNduw   1. 使用Intellij IDEA创建Scala项目   Chisel项目,就是构建Scala项目.Intellij IDEA支持使用Maven等多种方式构建Scala项目:   ​​   ​​   这里选择Maven和IDEA,都可以很方便的构建项目.尤其是使用IDEA构建项目,不需要额外的下载,直接编写Scala代码,即可完成编译运行.   很遗憾的是,Chisel3的库对sbt有依赖(…
下面内容根据2015-7-10版的Chisel 2.2 Tutorial整理 port就是硬件单元对外的接口,须要指明方向(输入还是输出).一个port声明的样例例如以下: class Decoupled extends Bundle{ val ready = Bool(OUTPUT) val data = UInt(INPUT, 32) val valid = Bool(INPUT) } INPUT.OUTPUT指定方向,后面指出宽度.对于Bool类型.其宽度就是1,所以不须要明白指出.除了上…
1 What is Chisel?      Chisel(Constructing Hardware In a Scala Embedded Language)是一种嵌入在高级编程语言Scala的硬件构建语言. Chisel是由伯克利大学发布的一种开源硬件构建语言,建立在Scala语言之上,是Scala特定领域语言的一个应用,具有高度参数化的生成器(highly parameterized generators),可以支持高级硬件设计. Chisel实际上只是一些特殊的类定义,预定义对象的集合…
Chisel是由伯克利大学公布的一种开源硬件构建语言,建立在Scala语言之上,是Scala特定领域语言的一个应用,具有高度參数化的生成器(highly parameterized generators),能够支持高级硬件设计. 其特点例如以下,部分特点找不到合适的中文表述.临时没有翻译,哪位童靴有合适的翻译能够及时说说啊. Hardware construction language (not C to Gates):硬件构建语言 Embedded in the Scala programmi…
https://mp.weixin.qq.com/s/zwrG1MfUzXwtik7jotpQsA   介绍Intellij IDEA中的一个去除Scala语法糖的功能.     ​​   1. 去除语法糖   Scala包含了太多的语法糖,在实现了代码写法比较简洁的同时,也某种程度上降低了代码的可阅读性.   比如变量类型推断.为了知道变量的类型,而不得不去阅读为该变量赋值的代码.为了知道方法的返回值类型,而不得不去看方法的实现.   这个问题可以通过Intellij IDEA添加type a…
https://mp.weixin.qq.com/s/THqyhoLbbuXXAtdQXRQDdA   介绍构建硬件模型的Builder.   1. DynamicContext   ​​ 动态上下文,供构建硬件模型时,存放上下文状态信息.     2. Builder   ​​   Builder使用DynamicContext存储数据.供其他类获取和存储信息使用.   3. ClockAndReset   这里以clock和reset为例.   1) DynamicContext中,定义了c…
https://mp.weixin.qq.com/s/YGTXky4wff7LXUphUxISQg   介绍创建模块判断逻辑的when命令.   1. when/elsewhen/otherwise   伴生对象when中的工厂方法,会创建一个WhenContext: ​​   WhenContext含有方法elsewhen/otherwise: ​​ 他们又各自创建一个新的WhenContext.   WhenContext的构造方法在类体中: ​​   when(cond){...}   a…
https://mp.weixin.qq.com/s/ENJVkz88sGgyODRNCu9jhQ   介绍Data类中的binding的定义和用法.   Binding stores information about this node's position in the hardware graph. This information is supplemental (more than is necessary to generate FIRRTL) and is used to per…