chisel 语法

请添加图片描述


// TODO: find out the new way to have a reset signal
class KnightRider(resetSignal: Bool = null, frequ: Int)//extends Module(_reset = resetSignal) {extends Module {val io = IO(new Bundle {val led = Output(Bits(6.W))})//定义了一个枚举类型,包含两个状态goLeft和goRight,用于控制FSM。val goLeft :: goRight :: Nil = Enum(2)  //定义枚举类型val stateReg = RegInit(goLeft)val ledReg = RegInit(1.U(6.W))val tick = Module(new Tick(frequ))// Update FSM state and registers only with low frequency tickwhen(tick.io.tick === 1.U) {// State change one tick earlierwhen(ledReg(4) === 1.U) {stateReg := goRight}.elsewhen(ledReg(1) === 1.U) {stateReg := goLeft}when(stateReg === goLeft) {ledReg := ledReg << 1}.otherwise {ledReg := ledReg >> 1}}io.led := ledReg
}

= := 的区别。大体来讲,= 用来定义一个val,:= 用来连线。

reg

接下来,我们来定义寄存器register

Example 1.1.3

val r = Reg(UInt(4.W))
r := io.in
io.out := r

对应生成的Verilog代码是:

reg [3:0] r;
always @(posedge clock) beginr <= io_in;
end
assign io_out = r;

Example 1.1.3 的前两行可以简化为一行:

val r = RegNext(io.in)

这里 RegNext 表示一个寄存器,其参数为该寄存器的输入。r 会被推断为一个4-bit unsigned register,因为io.in是一个4-bit unsigned input。

更进一步,example 1.1.3可以压缩为一行代码:

io.out := RegNext(io.in)
另外,如果想在reset时初始化一个register,可以使用 RegInit:

val r = RegInit(0.U(4.W))
r := io.in

对应的Verilog代码如下:

reg [3:0] r;
always @(posedge clock) beginif (reset) beginr <= 4'h0;end else beginr <= io_in;end
end

Chisel新手教程(2)

wire reg

val data = Wire(UInt(10.W)) // This is a 10-bit wire
val dataR = Reg(UInt(10.W)) // This is a 10-bit register
val cnt = RegInit(0.U(8.W))
cnt := cnt + 1.U    // increases by 1 each clock cycle

uint

你可以对 UInt 进行比特提取操作。假设 a 是一个8bit数据,你可提取 a 的 bit1 至 bit3 生成一个新的信号。

val a = "b10010110".U
val b = a(3, 1)   // b is "b011".U

bool

Bool 表示布尔值,共有两个状态: true.B 或 false.B

val a = Wire(Bool())
a := true.B

Bool 可以被赋予 UInt 中的某一个比特

val data = Reg(UInt(7.W))
val bit0 = data(0)  // Bool
val bit2 = data(2)  // Bool

Note: 对于 UInt 信号的某一比特进行赋值是不支持的。下面的代码会导致编译报错: chisel3.internal.ChiselException: Cannot reassign to read-only …

val data = Wire(UInt(7.W))
data(2) := false.B  // Error !!  Not supported.

一种可行的替换方案是用 Vector of Bools.

val b = Wire(Vec(7, Bool()))
b(2) := someBool
data := b.asUInt

=== 等于and =/=

如需比较两个信号值是否相同或不同,用 === 和 =/=

假设 data0 和 data1 是 UInt 类型,如果 data0 等于 data1,下面的代码会设置 eq 的值为 true.B

val eq = data0 === data1  // eq is inferred as type Bool
val ne = data0 =/= data1  // ne is inferred as type Bool

Note: == is for Scala type, === is for Chisel hardware type.

Cat

Cat 可以将多个 UInt 或者 Bool 值拼成(catenate)一个新的 UInt.

val a = Wire(UInt(3.W))
val b = Wire(Bool())
a := 2.U
b := true.B
val c = Cat(4.U(3.W), b, a)  // c = "b1001010".U

Note: “b1001010”.U can also be written as “b100_1_010”.U to make it more readable. The underscore is ignored.


Chisel新手教程(3)

mux

Mux(condition, x, y)

when

when (condA) {r := x
}.elsewhen (condB) {r := y
}.otherwise {r := z
}

和 Verilog 类似,如果不定义 otherwise 的话,会认为 otherwise 为保持不变。因此要注意如果上例中 r 为 Wire 类型,不写 otherwise 的话则会生成 latch,这种情况一定要避免。

r := y
when (condA) { r := x }

Mux1H

在 chisel3.util 的package里提供了 one-hot 选择器 Mux1H。当我想实现一个 one-hot 的选择器时,我会选择用 Mux1H。


Chisel新手教程(4)

Bundle

Bundle 用来表示一组信号,例如下例中 x, y, z 三个信号组成一个 Bundle 信号 A

Example 1.0

class A extends Bundle {val x = Bool()val y = UInt(2.W)val z = UInt(4.W)
}

Directional Bundle

输入输出 Bundle 信号是有方向的,下例中 IO 接口包含一个 Input 和 Output Bundle 信号。

class Example extends Module {val io = IO(new Bundle() {val in = Input(new A)val out = Output(new A)})io.out := io.in
}

Valid & Decoupled IO

在实际工作中,我们经常会遇到数据信号携带一个 valid 指示,或者握手信号 valid/ready。Chisel 提供了 Valid 和 Decoupled 方法来给信号加入valid 或 valid/ready 信号。

例如对于开头 Example 1.0 里的 Bundle 信号 A,使用 Valid 方法可以得到 output valid 和 output A 。需要注意的是,要用 bits 来表示数据部分,也就是本例中的 A.

val outWithValid = Valid(new A)
...
val out_valid = outWithValid.valid
val out_A = outWithValid.bits     // Bundle A
val out_A_x = outWithValid.bits.x // x of Bundle A

如果需要 Input 形式的 Valid IO,可以用 Flipped 或 Input

val inWithValid = Flipped(Valid(new A))
val inWithValid = Input(Valid(new A))

Decoupled 方法可以再提供一个 input 的 ready。如下例所示:

val in = Decoupled(new A)
val out_valid = in.valid
val out_A = in.bits
in.ready := in_ready

同样,可以用 Flipped 进行方向取反操作,得到 output 的 ready 和 input 的 valid/bits

另外,Decoupled 信号还定义了一个 fire 信号。in.fire 等价于 in.valid && in.ready。

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

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

相关文章

【Linux Day15 TCP网络通讯】

TCP网络通讯 TCP编程流程 接口介绍 socket()方法是用来创建一个套接字&#xff0c;有了套接字就可以通过网络进行数据的收发。创建套接字时要指定使用的服务类型&#xff0c;使用 TCP 协议选择流式服务&#xff08;SOCK_STREAM&#xff09;。 **bind()方法是用来指定套接字使…

Quppy wise 注册教程,轻松通过欧洲银行同名转账绑定个人IBAN账号

Quppy 注册教程,轻松通过欧洲银行同名转账绑定个人IBAN账号 官网下载APP或者去香港区下载APP使用, 按照官方APP里的邮箱注册就行&#xff0c;成功后添加电话和个人信息&#xff1b;需要说明的是&#xff1a;网站所填内容请全部用真实身份填写&#xff1b;名在前&#xff0c;姓…

蓝桥杯每日一题-----数位dp

前言 今天浅谈一下数位dp的板子&#xff0c;我最初接触到数位dp的时候&#xff0c;感觉数位dp老难了&#xff0c;一直不敢写&#xff0c;最近重新看了一些数位dp&#xff0c;发现没有想象中那么难&#xff0c;把板子搞会了&#xff0c;变通也会变的灵活的多&#xff01; 引入…

列式数据库、行式数据库简介

列式数据库、行式数据库简介 1、数据准备2、行式数据库3、列式数据库4、行式、列式存储对比 常见的行式数据库有Mysql&#xff0c;DB2&#xff0c;Oracle&#xff0c;Sql-server等&#xff1b;列数据库&#xff08;Column-Based&#xff09;数据存储方式按列存储&#xff0c;常…

2024/1/30 dfs与bfs

想要了解dfs与bfs&#xff0c;就得了解队列和栈。 一、栈与队列 1.栈 栈说白了就是先入后出。把栈类比为一个容器。只有一个口&#xff0c;所以如果我们想要取出最底层也就是最先放入的元素&#xff0c;只能最后取出它。 栈基础操作有如下几种&#xff1a; push 放入pop 拿…

python 爬虫安装http请求库

我的是window环境&#xff0c;安装的python3&#xff0c;如果再linux环境&#xff1a;pip install requests 开始&#xff1a; 上面我们成功发送请求并获取到响应&#xff0c;现在需要解析html或xml获取数据&#xff0c;因此我使用现成的工具库Beautiful Soup

leetcode刷题(剑指offer) 297.二叉树的序列化和反序列化

297.二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现…

图论练习3

内容&#xff1a;过程中视条件改变边权&#xff0c;利用树状数组区间加处理 卯酉东海道 题目链接 题目大意 个点&#xff0c;条有向边&#xff0c;每条边有颜色和费用总共有种颜色若当前颜色与要走的边颜色相同&#xff0c;则花费为若当前颜色与要走的边颜色不同&#xff0c;…

shell脚本中的变量,运算符

1.脚本格式 我们一般将shell脚本写在xxx.sh文件中&#xff0c;执行的时候bash/sh xxx.sh 注意文件路径 xxx.sh文件中的第一行为 #!/usr/bin/bash 注代表我们使用的是bin文件夹下的bash解释器(此条为注释语句&#xff0c;不写也可以) 2.echo用法 相当与print 示例1&…

ASP.NET Core 自定义解压缩提供程序

写在前面 在了解ASP.NET Core 自定义请求解压缩中间件的应用时&#xff0c;依据官方文档操作下来碰到了几个问题&#xff0c;这边做个记录。 关键点就是配置 Content-Encoding&#xff0c;参数需要和代码中添加的提供程序的Key保持一致&#xff1b; builder.Services.AddRequ…

9、C语言复习

目录 1、位操作 2、define宏定义关键词 3、ifdef条件编译 4、extern变量申明 5、typedef类别别名 6、结构体 7、static关键字 1、位操作 &&#xff1a;按位与 |&#xff1a;按位或 ^&#xff1a;按位异或 ~&#xff1a;取反 <<&#xff1a;左移 >>…

【实战知识】使用Github Action + Nginx实现自动化部署

大家好啊,我是独立开发豆小匠。 先说一下背景~ 我的小程序:豆流便签,目前使用云托管部署后端服务,使用轻量级服务器部署数据库和一些中间件。 因此服务器成本:云托管 + 云服务器 云托管每周花费5元,一个月就是50,一年就是500啊,所以这期准备把云托管优化掉! 1. 需…

x-shell安装、使用以及配置cuda、cudnn和conda

x-shell安装、使用以及安装最新版本conda x-shell安装远程连接服务器conda安装和环境配置 x-shell安装 x-shell是一款终端模拟软件&#xff0c;用于在Windows界面下远程访问和使用不同系统下的服务器。免费版本下载地址&#xff1a; https://www.xshell.com/zh/free-for-home-…

【Django】如何设置支持多语种网站,中文/英文网站

首先&#xff0c;需要明确一点&#xff1a;我们要实现的中英对照翻译&#xff0c;这个翻译不是浏览器翻译的&#xff0c;也不是Django帮你翻译。这个需要你自己事先手动翻译好&#xff0c;存放在专门翻译文件中&#xff0c;Django只是事后调用而已。 第一步 新建项目后&#x…

[职场] 英语面试自我介绍 #微信#笔记#媒体

英语面试自我介绍 英语面试自我介绍1 I am very happy to introduce myself here.I was born in Liaoning Province.I graduated from Nankai University and majored in International Trade.I like music and reaing books,especially economical books.It is my honor to ap…

测试人员的自我修养

QAS:是负责检查和评估软件产品质量的专业人员&#xff0c;他们通过执行一系列测试来确保软件产品的功能、性能和安全性符合设计要求。 当产品上线后&#xff0c;有 bug&#xff1a; “测试为什么没有测试发现这个问题&#xff1f;肯定是测试的责任&#xff01;” 当产品上线…

LabVIEW CVT离合器性能测试

介绍了CVT&#xff08;连续变速器&#xff09;离合器的性能测试的一个应用。完成了一个基于LabVIEW软件平台开发的CVT离合器检测与控制系统&#xff0c;通过高效、准确的测试方法&#xff0c;确保离合器性能达到最优。 系统采用先进的硬件配合LabVIEW软件&#xff0c;实现了对…

C语言在Visual Studio 2010环境下使用<regex.h>正则表达式函数库

在Visual Studio 2010环境下&#xff0c;如果C语言想要使用<regex.h>头文件进行正则表达式匹配&#xff0c;则需要pcre3.dll这个动态链接库&#xff0c;可以去网上下载。 下载的网址是&#xff1a;Pcre for Windowspcre {whatisit}https://gnuwin32.sourceforge.net/pac…

[Python] scikit-learn中数据集模块介绍和使用案例

sklearn.datasets模块介绍 在scikit-learn中&#xff0c;可以使用sklearn.datasets模块中的函数来构建数据集。这个模块提供了用于加载和生成数据集的函数。 API Reference — scikit-learn 1.4.0 documentation 以下是一些常用的sklearn.datasets模块中的函数 load_iris() …

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于OOA-LSSVM鱼鹰算法…