×

scala

Chisel教程——08.Chisel参数化生成器(从Scala讲起)(chisel教程汇总)

枫叶?飘飘 枫叶?飘飘 发表于2024-06-29 浏览4607 评论0
Chisel参数化生成器(从Scala讲起) 动机 要想使得Chisel模块成为代码生成器,就必须要有一些东西来告诉生成器如何执行这个工作。这一节会介绍模块的参数化,涉及多种方法和Scala语言特性。参数传递实现的丰富会直接传递到生成的电路的丰富。参数应该提供有用的默认值、容易设置,且不会设置成非法或无意义的值。对于更复杂的系统,如果能够以一种不影响其他模块用法的方法在局部重载,那就很有用。 参数传递 Chisel为写硬件生成器提供了强大的构造。生成器是接受一些电路参数并生成一个电

架构

GPGPU 架构(gpgpu架构)

田小会 田小会 发表于2024-06-28 浏览5595 评论0
前言 本文章来自general-purpose graphics processor units architecture intro 首先GPGPU从传统上来说用于处理图形计算,但是随着时代的发展,GPGPU越来越用于其他的场景,比如高性能计算,比如人工智能领域,所以本不涉及图形层次 如果我们将苹果A8处理器拆出来看,会发现A8处理器的GPU区域已经大于CPU的区域,它不仅仅作图形运算,还做SIMD等类型的workload 进几十年来,一些computing system

scala

Chisel教程——01.Scala介绍(chisel scala)

dsadsa012 dsadsa012 发表于2024-06-21 浏览5948 评论0
Scala介绍 什么是Scala Scala是一种支持通用编程范式的编程语言,选择Scala作为硬件开发语言的原因如下: 它是托管嵌入式DSL的一种很好的的语言; 它具有强大而优雅的库,用于处理各种数据集合; 有严格的类型系统,有助于在开发周期的早期(即,编译时)捕获一大类错误; 具有强大的表达和传递功能功能的方式; Chisel比Chipel、Chijel和Chicel更顺口。(这里是一个梗,Chisel全程为Constructing Hardware in a Scala Emb

scala

Chisel教程——07.详解ChiselTest

欢乐多多 欢乐多多 发表于2024-06-21 浏览6702 评论0
详解ChiselTest 动机 Chisel团队给测试框架做了很多工作,ChiselTest提供了以下改进: 既可以进行单元测试也可以进行系统集成测试; 为可组合的抽象和分层设计; 高度可用,通过让单元测试更简单、更无痛(避免样板(boilerplate)和其他没意义的事情)和更有用来鼓励单元测试; 还有以下计划: 具备面向多种后端和模拟器的能力(如果测试向量不是静态的,或者使用有限的测试构建API子集,则可能需要在综合时链接到Scala); 将会包含在基础的Chisel3中

scala

Chisel教程——06.阶段性汇总:实现一个FIR滤波器(Chisel实现4-bit的FIR滤波器和参数化FIR滤波器)

和煦的糖果风 和煦的糖果风 发表于2024-06-20 浏览5426 评论0
阶段性汇总:实现一个FIR滤波器 动机 截至目前,我们已经掌握了Chisel的基础,这一节尝试用前面所学构建一个FIR(Finite Impulse Response,有限脉冲相应)滤波器模块。 FIR滤波器在数字信号处理中十分常见,在后续学习中也会经常出现,所以必须掌握。 这里先贴上百度百科对FIR滤波器的定义: FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任[

scala

Chisel教程——03.Chisel中的组合逻辑(结尾附上Chisel3 Cheat Sheet)

asdas asdas 发表于2024-06-14 浏览6603 评论0
Chisel组合逻辑 这一节将会介绍如何使用Chisel组件来实现组合逻辑。 本节将会演示三种基本的Chisel类型(UInt,无符号整数;SInt,有符号整数;Bool,布尔值)可以如何连接和操作。 需要注意的是所有的Chisel变量都声明为Scala的val,绝对不要用Scala中的var来实现硬件构造,因为构造本身在定义后就不会变化了,只有它的值可以在硬件上运行时变化。连线可以用于参数化的类型。 常见运算符 加法实现 首先构造一个Module,这个就不详细介绍了: im

scala

吃透Chisel语言.05.Chisel基础(二)——组合电路与运算符

ohblue ohblue 发表于2024-06-13 浏览4938 评论0
Chisel基础(二)——组合电路与运算符 组合逻辑电路从数学的角度来讲,就是用布尔代数的操作符来描述的数字逻辑电路,也就是一系列布尔代数运算符的组合。Chisel中,这些布尔代数的操作符跟C、Java、Scala以及其他编程语言中定义的是类似的,比如,&是按位与操作符,|是按位或操作符。这一部分就详细介绍Chisel中基本的位运算符、算术运算符、逻辑运算符、比较运算符等,以及Chisel中的一个高阶组合电路运算符——多路选择器。 一个简单组合逻辑电路的例子 下面这一行代码,定

scala

Chisel速成——跟着这个Chisel教程来就行了(已完结)(chisel教程汇总)

田小会 田小会 发表于2024-06-12 浏览5984 评论0
本系列是基础的Chisel教程系列,基于官方的Chisel-Bootcamp,结合了很多Scala的知识,中间补充自己在探索过程中的思考,还会补充一些其他Chisel相关内容,这一系列的目标是基本掌握Chisel语言,为后续设计实现CPU打下坚实基础! 目前本系列已经完结,全部内容收录在专栏Chisel速成班教程,目录如下: Chisel教程——00.ex.scala metals插件(VS Code)、sbt和coursier换国内源 Chisel教程——01.Scala介绍 Chis

scala

Chisel教程——11.用Scala的高阶函数让Chisel代码更优雅(chisel和scala)

站住别动我要抱你q 站住别动我要抱你q 发表于2024-05-27 浏览4802 评论0
用Scala的高阶函数让Chisel代码更优雅 动机 前面模块中讨厌的for循环很冗长,破坏了函数式编程的目的,这一篇将会介绍高阶函数,让我们写生成器的时候更快。 FIR的卷积操作居然一行代码就能实现? 前面我们写了FIR过滤器的实现,其中的卷积部分是这么写的: val muls = Wire(Vec(length, UInt(8.W))) for(i <- 0 until length) { if(i == 0) muls(i) := io.in * io.const