首页 > 其他分享 >[chisel]马上要火的硬件语言,快来了解一下优缺点

[chisel]马上要火的硬件语言,快来了解一下优缺点

时间:2024-06-10 17:30:43浏览次数:15  
标签:Counter led scala Chisel 要火 Scala 优缺点 chisel counterWrap

Chisel是什么?

Chisel的全称为Constructing Hardware In a Scala Embedded Language,是一个基于Scala的DSL(Domain Specific Language,特定领域专用语言)。2012年,加州大学伯克利分校(UC Berkeley)的Jonathan Bachrach等人在计算机体系结构会议DAC(Design Automation Conference)上发表了文章Chisel: Constructing Hardware in a Scala Embedded Language,对Chisel语言进行了详细的描述,参考Chisel的官方网站(https://www.chisel-lang.org/)描述:

The Constructing Hardware in a Scala Embedded Language (Chisel) is an open-source hardware description language (HDL) used to describe digital electronics and circuits at the register-transfer level that facilitates advanced circuit generation and design reuse for both ASIC and FPGA digital logic designs.

Chisel adds hardware construction primitives to the Scala programming language, providing designers with the power of a modern programming language to write complex, parameterizable circuit generators that produce synthesizable Verilog. This generator methodology enables the creation of re-usable components and libraries, such as the FIFO queue and arbiters in the Chisel Standard Library, raising the level of abstraction in design while retaining fine-grained control.

大致翻译如下:Chisel是一种开源,在RTL级别描述数字电子电路的硬件描述语言,能方便ASIC和FPGA的高级电路生成和设计重用。

Chisel将硬件构造原语添加到Scala编程语言中,为设计者提供了现代编程语言的能力,可以编写复杂的、可参数化的电路生成器,从而生成可综合的Verilog。这种生成器方法能够创建可重用的组件和库,例如Chisel标准库中的FIFO队列和仲裁器,从而提高设计中的抽象级别,同时保持精细的控制。

2,Chisel有什么优点?

1)拥有强大而优雅的库,包含各种数据集合。

2)具有严格的类型系统,有助于在开发周期的早期(编译时)捕获大量错误。例如代码整合时模块端口连接只需要一行语句就可以自动完成;在verilog中常见的位宽连线问题,在Chisel中可以不用申明位宽,编译器在编译过程中会自动推断其位宽,避免人为错误。

3)具有面向对象和强大的函数式编程方式。

3,Chisel如何工作?

目前Chisel需要先转换成verilog,大致流程大致如下:

1)Chisel编译器,首先将Chisel代码转换成AST中间数据;

2)Firrtl编译器,再将AST数据转换成Firrtl代码;

3)Firrtl编译器,将Firrtl代码转换成最终的Verilog代码。

以下是官网提供的一个例子:

import chisel3._

import chisel3.util._

class Blinky(freq: Int, startOn: Boolean = false) extends Module {

val io = IO(new Bundle {

val led0 = Output(Bool())

})

// Blink LED every second using Chisel built-in util.Counter

val led = RegInit(startOn.B)

val (_, counterWrap) = Counter(true.B, freq / 2)

when(counterWrap) {

led := ~led

}

io.led0 := led

}

object Main extends App {

// These lines generate the Verilog output

println(

new (chisel3.stage.ChiselStage).emitVerilog(

new Blinky(1000),

Array(

"--emission-options=disableMemRandomization,disableRegisterRandomization"

)

)

)

}

编译后,生成的verilog代码是这样的:

module Blinky(

input clock,

input reset,

output io_led0

);

reg led; // @[main.scala 11:20]

reg [8:0] counterWrap_value; // @[Counter.scala 62:40]

wire counterWrap_wrap_wrap = counterWrap_value == 9'h1f3; // @[Counter.scala 74:24]

wire [8:0] _counterWrap_wrap_value_T_1 = counterWrap_value + 9'h1; // @[Counter.scala 78:24]

assign io_led0 = led; // @[main.scala 16:11]

always @(posedge clock) begin

if (reset) begin // @[main.scala 11:20]

led <= 1'h0; // @[main.scala 11:20]

end else if (counterWrap_wrap_wrap) begin // @[main.scala 13:21]

led <= ~led; // @[main.scala 14:9]

end

if (reset) begin // @[Counter.scala 62:40]

counterWrap_value <= 9'h0; // @[Counter.scala 62:40]

end else if (counterWrap_wrap_wrap) begin // @[Counter.scala 88:20]

counterWrap_value <= 9'h0; // @[Counter.scala 88:28]

end else begin

counterWrap_value <= _counterWrap_wrap_value_T_1; // @[Counter.scala 78:15]

end

end

endmodule

4,搅局者Chisel语言为何难以推广?

之所以将Chisel语言定位为硬件描述语言(HDL)的搅局者,是因为Chisel已经在RISC-V上有很多应用,例如国内的香山开源处理器就是用Chisel编写的。然而,Chisel在工业界却难觅踪影,了解者甚少,还没有被工业界接受,笔者认为有以下几点原因:

1)Chisel本质上还是Scala语言,因此要学习Chisel,需要具备Scala语言的基础,而scala是一门相对较难的语言。对广大前端电路设计者,如果没有面向对象编程基础和函数式编程经验,学起来会非常吃力,也很难在短期之内掌握;

2)Chisel需要先转换成verilog,而转换后的verilog信号名有大量的命名替换(Chisel源码修改后原来的名称可能发生变化),这会给问题定位和代码覆盖率收集带来很多障碍。这一缺点几乎是致命的。

3)主流的EDA工具对Chisel还不支持,例如常见的仿真工具VCS,Xcelium,综合工具DC,GENUS等都不支持。

4)还有一点是个人使用的感受:Chisel采用sbt工具构建,而sbt每次检查依赖库时速度较慢;对硬件要求高,可能需要专门的服务器,例如,开源的香山开源处理器,开发环境建议内存最低 32G,推荐 64G 及以上。

标签:Counter,led,scala,Chisel,要火,Scala,优缺点,chisel,counterWrap
From: https://blog.csdn.net/sqqwm/article/details/138918658

相关文章

  • k-means聚类模型的优缺点
    一、k-means聚类模型的优点        1.简单高效:k-means算法思想简单直观,易于实现。它通过迭代计算样本点与聚类中心之间的距离,并不断调整聚类中心的位置,直至满足终止条件。由于其计算过程相对直接,所以具有较高的执行效率。        2.空间划分明确:k-means算......
  • 【纯干货】深度学习各算法的优缺点和适用场景!建议收藏。(上篇)
    ..纯 干 货.目录前馈神经网络1、梯度下降(GradientDescent)2、随机梯度下降(StochasticGradientDescent,SGD)3、小批量梯度下降(Mini-batchGradientDescent)4、动量(Momentum)5、AdaGrad、RMSprop、Adam等自适应学习率算法卷积神经网络1、LeNet-52、AlexNet3、V......
  • 动态IP与静态IP的优缺点
    在网络连接中,使用动态和静态IP地址取决于连接的性质和要求。静态IP地址通常更适合企业相关服务,而动态IP地址更适合家庭网络。让我们来看看动态IP与静态IP的优缺点。1.静态IP的优点:更好的DNS支持:静态IP地址在网络中保持不变,这使得使用DNS服务器更易于设置和......
  • 全固态锂电池组成及优缺点介绍
    全固态锂电池组成及优缺点介绍根据近期流传的技术趋势预测,全固态锂电池,可能在2030 年之前实现固态电解质技术突破,单体能量密度超过500Wh/kg的目标,并且达到量产能力。今天关注一下全   固态电解质锂电池。1、锂电池的种类锂电池的分类方法比较多,可以按照正极材料类......
  • 美团一面:什么是CAS?有什么优缺点?我说我只用过AtomicInteger。。。。
    引言传统的并发控制手段,如使用synchronized关键字或者ReentrantLock等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换、锁竞争导致的线程阻塞等。而此时就出现了一种乐观锁的策略,以其非阻塞、轻量级的特点,在某些场合下能更好地提升并发性能,其......
  • 【LInux内核中IO多路复用 背景+原理+直白总结+优缺点】EPoll篇 及大总结
    Linux内核中的epoll多路复用原理是基于事件驱动的一种高效I/O处理机制,它主要用于监视多个文件描述符(filedescriptors,简称fd)的状态并进行事件驱动的I/O操作。epoll相比传统的select和poll机制,在处理大量并发连接时具有更高的效率和更低的资源消耗。以下是epoll多路复用原理......
  • RxJava和LiveData两者优缺点的详细分析
    RxJava和LiveData两者优缺点的详细分析RxJava和LiveData都是用于处理异步数据流的工具,但它们各自有不同的特点和适用场景。下面是对两者优缺点的详细分析以及如何选择和使用的建议:RxJava优点:功能强大:RxJava提供了丰富的操作符,能够轻松实现复杂的数据流操作。灵活性高:可以用......
  • Android 关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍
    Android关于MVP、MVC、MVVM原理、使用方法、优缺点以及共同之处与不同之处详细介绍Android应用程序的设计模式,常见的三种模式是MVP(Model-View-Presenter)、MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)。它们在设计和组织Android应用程序中起着不同的作用,都......
  • 【chisel】chisel中for (i <- 0 until N-2) {} 的用法,表示什么?
    在Chisel中,for(i<-0untilN-2){}是一个for循环的语法,它表示从0开始到N-2的整数(不包括N-2),并对每个整数i执行大括号{}内的代码块。这里的until是Scala语言的一个关键字,用于生成一个从起始值到结束值之前的所有整数的序列。在Chisel中,Scala的这个特性......
  • Nginx-01-为什么使用 Nginx? nginx 的优缺点
    为什么要选择nginx,和其他常见的负载均衡库对比有什么优缺点?选择Nginx作为负载均衡器有很多原因,主要包括其性能、灵活性和广泛的功能。Nginx的优点高性能和低资源占用:Nginx以其高性能和低资源占用著称。它可以处理大量的并发连接,适用于高流量网站。灵活的配置:Ngi......