介绍Chisel与Scala的不同与关联。
 
 
一. 层次高低
 
Chisel是使用Scala语言编写的具体代码。从抽象层次上看,Scala更高。
 
1. 语言与代码
 
Chisel是使用Scala语言编写的代码。
 
2. 语言与代码库
 
Chisel是使用Scala语言编写的代码库。
 
 
二. 范围大小
 
3. 通用语言与领域专用语言
 
Scala是一门通用语言,可用于各个领域编程。
 
Chisel使用Scala实现的领域专用语言(DSL),专门用于硬件建模使用。
 
 
三. 思维方式不同
 
4. 软件编程与硬件建模
 
Scala是一门软件编程语言,其使用基于软件编程思维;
 
Chisel是硬件模型构建语言,其使用基于硬件模型构建思维;
 
软件编程的最小单位为汇编指令;
硬件建模的最小单位为硬件模块;
 
软件编程基于指令执行;
硬件模型基于电磁传播;
 
 
四. Chisel:狭义与广义
 
5. 狭义的Chisel
 
狭义的Chisel是一个使用Scala语言实现的硬件模型构件库,其各个组成部分与硬件模型分别对应。
 
总结如下:
a. Chisel使用的UInt/SInt/Bool/Bits,描述硬件模型中使用的类型,最终落实到Wire/Reg上;
b. Chisel使用PrimOp,对应硬件模型中的各种原子操作,如加减乘除,移位等操作;
c. Chisel使用的":=",对应到硬件模型中的连接,把下游连接到上游,接收上游值的变化(电平变化);
d. Chisel使用when/elsewhen/otherwise,描述硬件模型中的选择逻辑;
 
所有的验证、转换工作都基于硬件模型进行。
 
6. 广义的Chisel
 
广义的Chisel,是一个硬件模型构建方法论(methodology)。
 
包含两个部分:
首先,实现一个硬件模型构件库,用于构建硬件模型;
其次,提高一个层次,使用Scala作为硬件模型生成器;
 
这个层次的提升极大的提高了硬件模型的构建效率。
 
硬件模型在Chisel中的叫法为:Hardware graph;
硬件模型生成器在Chisel中的叫法为电路生成器:Circuit generator;
 
电路生成器源于Verilog的generate。
由于Scala语言的函数式编程方法,而有了极大的提升。
 
 

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

  1. Chisel3 - bind - Binding

    https://mp.weixin.qq.com/s/2318e6VJ4wFGpWwBOmTikA   Chisel数据类型(Data)与Module的绑定关系,根据Data的使用方式不同,而有多种绑 ...

  2. Chisel3 - util - Valid

    https://mp.weixin.qq.com/s/L5eAwv--WzZdr-CfW2-XNA   Chisel提供的Valid接口.如果valid为置1,则表明输出的bits有效:反之,则输出无 ...

  3. Chisel3-Intellij IDEA安装Scala插件

    https://mp.weixin.qq.com/s/xTk5ucvSNuwsh8C6E362cg   后续开启RISC-V开发相关内容.   RISC-V开发推荐使用Chisel编程语言.Chise ...

  4. Chisel3 - util - OneHot

    https://mp.weixin.qq.com/s/Jsy8P3m9W2EYKwneGVekiw   独热码相关的电路生成器.   参考链接: https://github.com/freechip ...

  5. Chisel3 - util - MixedVec

    https://mp.weixin.qq.com/s/mO648yx4_ZRedXSWX4Gj2g   可以容纳不同类型的变量的向量.   参考链接: https://github.com/freec ...

  6. Chisel3 - util - Mux

    https://mp.weixin.qq.com/s/TK1mHqvDpG9fbLJyNxJp-Q   Mux相关电路生成器.   参考链接: https://github.com/freechips ...

  7. Chisel3 - util - Lookup

    https://mp.weixin.qq.com/s/g85Si6n37D9PYfR5hEoRQQ     实现一个查找逻辑.   参考链接: https://github.com/freechips ...

  8. Chisel3 - util - Math vs. CircuitMath

    https://mp.weixin.qq.com/s/8lC8vQnBdKW9C39H0QFFkA     对数相关的辅助方法,Math通过软件方法实现,CircuitMath通过硬件方法实现.   ...

  9. Chisel3 - util - LFSR16

    https://mp.weixin.qq.com/s/DSdb4tmRwDTOki7mbyuu9A     实现16位线性反馈移位寄存器.可用于生成简单的伪随机数.     ​​     ​​   参 ...

随机推荐

  1. B - Lawrence HDU - 2829 斜率dp dp转移方程不好写

    B - Lawrence HDU - 2829 这个题目我觉得很难,难在这个dp方程不会写. 看了网上的题解,看了很久才理解这个dp转移方程 dp[i][j] 表示前面1~j 位并且以 j 结尾分成了 ...

  2. Try-Catch包裹的代码异常后,竟然导致了产线事务回滚!

    导读:​一段被try-catch包裹后的代码在产线稳定运行了200天后忽然发生了异常,而这个异常竟然导致了产线事务回滚.这期间究竟发生了什么?日常在项目过程中该如何避免事务异常?就在这个时候,老板拿着 ...

  3. 你真的知道C语言里extern "C" 的作用吗?

    经常在C语言的头文件中看到下面的代码: #ifdef __cplusplus extern "C" { #endif // all of your legacy C code he ...

  4. python入门及数字、字符串类型

    目录 python开发框架 开发 1. 开发语言 2. 语言比对 3. python安装 4. Python开发IDE:pycharm ,eclipse python入门 1. 第一句Python 2 ...

  5. CF-448C Painting Fence 分治

    Painting fence 题意 乍一看以为是之前做过的一道单调队列优化的DP,不是. 也是有n块木板,每个木板宽1米,有一个高度ai,现在要把他们刷成橘色,给了你一个宽一米的刷子,你可以横着刷,或 ...

  6. python语法学习第十一天--迭代器

    迭代:类似循环,这一次的值作为下一次迭代的开始值 BIF:iter():将某个可以作为迭代器的容器变为迭代器   next():做下一次迭代 当next()到最后一个时,抛出StopIteration ...

  7. spring junit--基础配置

    spring官方文档总提示要进行SpringJunit测试必须先配置两个信息: 1.使用Spring IOC功能配置 2.配置正确的JDBC或ORM框架连接数据库 下面进行spring3和hibern ...

  8. .Net(c#)使用 Kafka 小结

    .Net(c#)使用 Kafka 小结 1.开篇 由于项目中必须使用 kafka 来作为消息组件,所以使用 kafka 有一段时间了.不得不感叹 kafka 是一个相当优秀的消息系统.下面直接对使用过 ...

  9. 这道LeetCode题究竟有什么坑点,让它的反对是点赞的9倍?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第38篇文章,我们一起来看看第65题,Valid Number. 曾经我们聊到过算法当中的一个类别--模拟题.所 ...

  10. scrapy请求发送详解

    scrapy自动发送请求 对start_urls列表中存储的起始url进行过请求的发送并没有通过手动实现,但是在parse函数中还是获取到了响应数据,这是因为爬虫文件中的爬虫类继承到了Spider父类 ...