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

news2024/9/17 8:31:21

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 及以上。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大话设计模式解读02-策略模式

本篇文章&#xff0c;来解读《大话设计模式》的第2章——策略模式。并通过Qt和C代码实现实例代码的功能。 1 策略模式 策略模式作为一种软件设计模式&#xff0c;指对象有某个行为&#xff0c;但是在不同的场景中&#xff0c;该行为有不同的实现算法。 策略模式的特点&#…

Mysql的底层实现逻辑

Mysql5.x和Mysql8性能的差异 整体性能有所提高&#xff0c; 在非高并发场景下&#xff0c;他们2这使用区别不大&#xff0c;性能没有明显的区别。 只有高并发时&#xff0c;mysql8才体现他的优势。 2. Mysql数据存储结构Innodb逻辑结构 数据选用B树结构存储数据&#xff0…

IDEA去除代码和XML中的波浪线(黄色警告线)

通常情况下&#xff0c;IDE自带的侦测功能会帮我们提示一些错误、警告等。但这对于强迫症患者来说并不友好。以下是去除IDE代码和XML文件中的波浪线&#xff08;黄色警告线&#xff09;、拯救强迫症患者的有效方案 1、去除XML中的波浪线 2、去除代码中的波浪线 关爱强迫症患者…

QT 信号和槽 通过自定义信号和槽沟通 如何自定义槽和信号的业务,让它们自动关联 自定义信号功能

通过信号和槽机制通信&#xff0c;通信的源头和接收端之间是松耦合的&#xff1a; 源头只需要顾自己发信号就行&#xff0c;不用管谁会接收信号&#xff1b;接收端只需要关联自己感兴趣的信号&#xff0c;其他的信号都不管&#xff1b;只要源头发了信号&#xff0c;关联该信号…

C语言学习系列:GCC编译器Windows版本MinGW-w64的安装教程

本文图文分享如何安装C语言编译器——MinGW-w64。 只要看到这篇文章&#xff0c;就可以按照文中步骤正确安装MinGW-w64并使用。 一、什么是 MinGW-w64 &#xff1f; 我们知道C语言是高级语言&#xff0c;必须编译为二进制文件&#xff0c;才能为计算机运行&#xff0c;MinGW…

每日两题7

文章目录 买卖股票的最佳时机含冷冻期买卖股票的最佳时机含手续费 买卖股票的最佳时机含冷冻期 分析&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();vector<vector<int>> dp(n, vector<int>(3…

path[1][0] path[1][1:-1] [path[1][-1] 分别怎么取的

假设的输入数据 假设 path 变量如下&#xff1a; path [path, [10515194, _derivationally_related_form, 00265386, _derivationally_related_form, 00800940, _hypernym, 00798245, _derivationally_related_form, 02589576]]示例代码 为了更清楚地展示这些操作&#xff…

OSFP 1类LSA详解

概述 上图为1类LSA的实际报文结构 , 在开始之前一定需要说明 , 1类LSA是OSPF中最复杂的LSA类型 , 在LSA头部的文章中详细介绍了 LS Type / Link State ID / Adv Router 3种头部字段 , 在1类LSA的主体内容中还存在类似的字段十分的相似 , 很多网络从业者难以理解的点就在于此 , …

2- 简易版-日记写作软件(java)-涉及的技术点简述

环境&#xff1a; Ubuntu LinuxJDK1.8Eclipse 项目文件结构&#xff1a; 0. 涉及的技术点 1)view 包&#xff08;GUI&#xff09;&#xff1a; Eclipse SwingEclipse WindowBuilderJFileChooser(用于弹出文件选择对话框&#xff0c;进行文件或目录的选择)FileNameExtension…

文案策划背后的秘密 | 职场高手养成记

要想在文案策划这个行当里混&#xff0c;首先得对自己的文字功底有足够的信心&#xff0c;那种“文章独步天下”的气势不可或缺。 要是没有这份自信&#xff0c;我建议你还是另寻他路。 要想跨入文案策划的大门&#xff0c;可以从以下几个方面入手&#xff1a; 1. 学习文案基…

探索OrangePi AIpro:单板计算机的深度体验之旅

准备阶段&#xff1a;环境与资料 在开始我们的探索之旅前&#xff0c;确保您已准备好以下装备&#xff1a; OrangePi AIpro&#xff1a;我们的主角&#xff0c;一台功能强大的单板计算机。Windows 10笔记本电脑&#xff1a;作为我们的辅助工具&#xff0c;用于管理和测试。路…

NOS II - Timer定时器

NOS II-Time定时器 简单回忆NIOS II中定时器的使用。 一、定时器的框图 二、定时器寄存器的描述 定时器的寄存器都是16bit的&#xff0c; 偏移量寄存器名称R/W15bit…4bit3bit2bit1bit0bit0Status - 状态寄存器R/W - 可读可写*****runTO1Control - 控制寄存器R/W***stopsta…

VSFT匿名用户访问-设置

1、先备份配置档 cp -av /etc/vsftpd/vsftpd.conf{,_bak} 2、编辑配置档&#xff0c;修改以下参数 vim /etc/vsftpd/ vsftpd.conf anonymous_enableYES -----允许匿名用户访问 anon_upload_enableYES -----允许匿名用户上传 anon_mkdir_write_enableYES …

汇编语言作业(五)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、 实验总结 一、实验目的 1.熟悉掌握汇编语言的程序结构&#xff0c;能正确书写数据段、代码段等 2&#xff0c;利用debug功能&#xff0c;查看寄存器&#xff08;CS,IP,AX,DS..)及数据段的…

办公风云颜值背后的职场正能量

办公风云&#xff1a;颜值背后的职场正能量当我们提到职场&#xff0c;脑海中浮现的往往是严肃的面孔、忙碌的身影和堆积如山的文件。但在这个看似单调的舞台上&#xff0c;总有一些人&#xff0c;用他们的颜值和才华&#xff0c;为我们上演了一场场别开生面的“大戏”。今天&a…

【CS.OS】堆管理算法:不同的堆分配和管理算法

1000.5.CS.OS.1.3-基础-内存管理-堆管理算法-Created: 2024-06-09.Sunday10:41 文章目录 1 内存分配算法概述1.1 首次适应&#xff08;First-Fit&#xff09;1.2 最佳适应&#xff08;Best-Fit&#xff09; 2 伙伴系统&#xff08;Buddy System&#xff09; 3 总结References …

PlantSimulation导入cad图作为背景

PlantSimulation导入cad图作为背景 首先要整理cad文件&#xff0c;正常的工艺规划总图中存在较多杂乱文件&#xff0c;这些信息是不需要的&#xff0c;如果直接导入&#xff0c;会非常卡。 1、打开cad软件&#xff0c;使用layon命令打开所有的隐藏图层&#xff0c;删除不需要…

品品香·山东航空老白茶文化主题专属航班香上云端

&#xff16;月&#xff16;日&#xff0c;品品香山东航空“浓情过端午&#xff0c;白茶品品香”老白茶文化主题专属航班&#xff33;&#xff23;&#xff18;&#xff18;&#xff11;&#xff19;济南遥墙&#xff0d;成都天府顺利起飞&#xff0c;携中国老白茶标杆——晒白…

Spring Boot整合Redis实现发布/订阅功能

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

目标检测算法YOLOv9简介

YOLOv9由Chien-Yao Wang等人于2024年提出&#xff0c;论文名为&#xff1a;《YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/2402.13616 &#xff1b;源码见: https://github.com/W…