Chisel Tutorial(九)——状态单元
来源:互联网 发布:超级基因优化液排雷 编辑:程序博客网 时间:2024/05/20 05:29
以下内容依据2015-7-10版的Chisel 2.2 Tutorial整理
Chisel支持的最简单的状态单元就是上升沿触发的寄存器,可以使用如下方式例化:
val reg = Reg(next = in)
上述代码形成的电路就是:将输入赋值给输出,但是输出比输入延后一个时钟周期。此处没有申明变量reg的数据类型,Chisel会自动从输入变量in推测reg的类型。在Chisel中,clock、reset都是全局信号,不需要显示声明。
使用寄存器可以组成许多有用的电路,如下是一个上升沿检测电路的代码,输入是一个boolean变量,如果检测到上升沿,那么输出true:
def risingedge(x: Bool) = x && !Reg(next = x)
如下是一个计数器的代码,计数到最大值,然后从0开始重新计数:
def counter(max: UInt) = { val x = Reg(init = UInt(0, max.getWidth)) x := Mux(x === max, UInt(0), x + UInt(1)) x}
寄存器x初始值为0,宽度是max.getWidth,当全局信号reset有效的时候,x就被初始化为0。利用计数器可以搭建许多电路,如下是一个脉冲发生电路,每n个周期产生一个脉冲:
def pulse(n: UInt) = counter(n - UInt(1)) === UInt(0)
进一步,可以组成方波发生器,如下:
def toggle(p: Bool) = { val x = Reg(init = Bool(true)) x := mux(p, !x, x) x}def squareWave(period: UInt) = toggle(pulse(period/2))
0 0
- Chisel Tutorial(九)——状态单元
- Chisel Tutorial(一)——Chisel介绍
- Chisel Tutorial(二)——Chisel的数据类型
- Chisel Tutorial(四)——函数
- Chisel Tutorial(六)——端口
- Chisel Tutorial(七)——模块
- Chisel Tutorial(三)——组合电路
- Chisel Tutorial(五)——Bundles与Vecs
- Chisel Tutorial(八)——运行与测试
- QT开发(九)——QT单元组件
- 解读The Python Tutorial(九)——类
- chisel
- iOS开发之LLDB — Chisel插件的安装说明
- Chisel实验笔记(一)
- Chisel实验笔记(二)
- Chisel实验笔记(三)
- Chisel实验笔记(四)
- Chisel 专题(一) 安装
- 黑马程序员--UDP通信
- UVA 12931 Common Area
- 二分图多重匹配问题
- layout
- Android ViewPager多页面滑动切换以及动画效果
- Chisel Tutorial(九)——状态单元
- ACM —— 1009 Edge Detection
- Android异步更新UI的四种方式
- hadoop搭建环境(1)
- java 动态代理实现
- 【Unity3D】夏日大作战Jumper~
- 关于JS 中的 substring() ;substr();slice();粗浅认识
- 黑马程序员_java03_异常
- bzoj-3680 吊打XXX