Chisel教程

您所在的位置:网站首页 clock怎么拆分记忆 Chisel教程

Chisel教程

2024-07-12 13:55| 来源: 网络整理| 查看: 265

时序逻辑 动机

我们是不可能写出一个不包含状态的有意义的数字逻辑电路的!

我们是不可能写出一个不包含状态的有意义的数字逻辑电路的!

我们是不可能写出一个不包含状态的有意义的数字逻辑电路的!

重要的话说三遍!

因为不存储中间结果就几乎啥也干不了。

这一节会描述如何用Chisel表达一般的时序逻辑,到了本节的最后,你应该就具备用Chisel实现并测试一个移位寄存器的能力了。

需要强调的是本节可能不会太震撼,因为Chisel的强大并不体现在时序逻辑模式,而是在设计的参数化上。之前已经演示了这个能力,现在必须要学习一下时序模式有哪些。因此,本节会展示Chisel比Verilog干得漂亮的地方,只需要学点语法就行了。

寄存器(Register)

Chisel中基本的有状态元素是寄存器,符号为Reg。Reg会保持它的输出值直到它时钟的上升沿,在上升沿又接受新的数据作为输入。默认地,每个Chisel模块都有一个隐式的时钟,在设计中被每个寄存器使用。这就节省了每次都要在代码中指定相同的时钟信号的时间。

寄存器的使用

下面的代码实现了一个模块,它接受一个输入,然后给输入加1并连接到一个寄存器的输入上。

注意:隐式时钟可以被多时钟设计覆盖,可以看后面附录中的例子。

// MyModule.scala import chisel3._ import chisel3.util._ class MyModule extends Module { val io = IO(new Bundle { val in = Input(UInt(12.W)) val out = Output(UInt(12.W)) }) val register = Reg(UInt(12.W)) register := io.in + 1.U io.out := register } object MyModule extends App { println(getVerilogString(new MyModule)) } // MyModuleTest.scala import chisel3._ import chiseltest._ import org.scalatest.flatspec.AnyFlatSpec class MyModuleTest extends AnyFlatSpec with ChiselScalatestTester { behavior of "MyModule" it should "get right results" in { test(new MyModule) { c => for (i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3