标签: chisel

Chisel Shiftregister示例

我对scala和Chisel很新.我试图创建一个动态大小的Shiftregister示例,但我不确定以下代码是否正确.如果有人可以审查它会很好:

import Chisel._

class Shiftregister(length: Int) extends Module {
    val io = new Bundle {
        val clk        = UInt(INPUT,  1)
        val load       = UInt(INPUT,  1) // 1 read from s_data_in, 0 read from p_data_in
        val s_data_in  = UInt(INPUT,  1)
        val s_data_out = UInt(OUTPUT, 1)
        val p_data_in  = UInt(INPUT,  length)
        val p_data_out = UInt(OUTPUT, length)
    }

    val bitfield = Reg(init = UInt(length))

    when (io.load.toBool()) {
        bitfield := Cat(io.s_data_in, bitfield(length, 1))
    }
    .otherwise {
        bitfield := io.p_data_in
    }
    io.p_data_out := Reg(next = …
Run Code Online (Sandbox Code Playgroud)

scala vhdl chisel

3
推荐指数
1
解决办法
607
查看次数

凿3分配到位范围

这似乎在凿子2中有效,但现在不起作用:

class TestX extends Module
{
    val io = IO(new Bundle {
        val a = Output(UInt(width=2))
    })

    io.a(1, 0) := UInt(0)
}
Run Code Online (Sandbox Code Playgroud)

错误:[模块TestX]表达式T_4用作FEMALE,但只能用作MALE。

此更改的解决方法是什么?

chisel

3
推荐指数
1
解决办法
372
查看次数

如何从训练营示例中导入getVerilog()函数?

我不确定我是否从以下地方了解如何使用getVerilog函数:https : //github.com/freechipsproject/chisel-bootcamp/blob/master/2.1_first_module.ipynb

[error] passthrough_test.scala:18:11: not found: value getVerilog
[error]   println(getVerilog(new PassThrough(10)))
[error]           ^
[error] one error found
[error] (Test / compileIncremental) Compilation failed
[error] Total time: 1 s, completed Nov 21, 2018 1:53:02 PM
Run Code Online (Sandbox Code Playgroud)

我确实导入了chisel3._,但这似乎还不够。

chisel

3
推荐指数
1
解决办法
141
查看次数

在 CHISEL 中查找列表

我是 Scala 的新手,我一直在尝试了解 RISC-V 架构。我遇到了这段代码,我一直盯着它看几个小时,无法理解。

val csignals =                                                                                                   
  ListLookup(io.dat.inst,                                                                                       
                         List(N, BR_N  , OP1_X  ,  OP2_X  , ALU_X   , WB_X   , REN_0, MEN_0, M_X  , MT_X,  CSR.N),
           Array(       /* val  |  BR  |  op1   |   op2     |  ALU    |  wb  | rf   | mem  | mem  | mask |  csr  */
                        /* inst | type |   sel  |    sel    |   fcn   |  sel | wen  |  en  |  wr  | type |  cmd  */
              LW      -> List(Y, BR_N  , OP1_RS1, OP2_IMI …
Run Code Online (Sandbox Code Playgroud)

scala chisel riscv

2
推荐指数
1
解决办法
449
查看次数

Chisel3.功能模块Mux4

我正在学习Chisel,遵循Github上的文档

到目前为止,一切都完美无瑕.但我坚持第13章 "功能模块创建"

无法让代码工作.我在凿子模板项目的副本中创建了所有的.scala类.以下是我编写/复制以创建具有可变位宽Mux4的内容:

/ chisel-template/src/main/scala/Mux4.scala

import Chisel._

class Mux4(w: Int) extends Module {
  val io = IO(new Bundle {
        val sel = UInt(INPUT, 2)
        val in0 = UInt(INPUT, w)
        val in1 = UInt(INPUT, w)
        val in2 = UInt(INPUT, w)
        val in3 = UInt(INPUT, w)
        val out = UInt(OUTPUT, w)
  })

  io.out := Mux2(io.sel(1), 
                    Mux2(io.sel(0), io.in0, io.in1),
                    Mux2(io.sel(0), io.in2, io.in3))
}


class Mux2(w: Int) extends Module {
  val io = IO(new …
Run Code Online (Sandbox Code Playgroud)

scala module mux chisel riscv

2
推荐指数
1
解决办法
270
查看次数

Chisel 语言如何最好地使用队列?

我是凿子的新手,如果有人能解释一下:

1- 队列 2- 去耦 IO 3- 去耦 3- 有效 IO 4- 有效

这段凿子代码正确吗?


...

val a = Decoupled()
val b = Decoupled()
val c = Decoupled()
Run Code Online (Sandbox Code Playgroud)

...

val Reg_a = Reg(UInt())
val Reg_b = Reg(UInt())
Run Code Online (Sandbox Code Playgroud)

...

when(io.a.valid && io.a.ready && io.b.valid && io.b.ready && io.c.valid &&     io.c.ready)
{

  Reg_a := io.a.bits.data
  Reg_b := io.b.bits.data
}

io.c.bits := Reg_a & Reg_b
Run Code Online (Sandbox Code Playgroud)

...

Module.io.a    <>    Queue(Module_1.io.a_1)
Module.io.b    <>    Queue(Module_1.io.b_1)
Module_1.io.c_1 <>   Queue(Module.io.c)
Run Code Online (Sandbox Code Playgroud)

问候!

chisel

2
推荐指数
1
解决办法
1883
查看次数

是否可以使用scala-sbt在开发模式下发布Local?

我正在写一个图书馆包,我不想在其他(本地)项目中使用它。我是否需要重新启动命令:

$ sbt publishLocal
Run Code Online (Sandbox Code Playgroud)

每次进行修改还是有可能使其自动化?

我正在将这个Chisel模板项目用于build.sbt。

scala sbt chisel

2
推荐指数
1
解决办法
46
查看次数

如何在 Chisel 中正确定义输出 Reg

您可能知道 Verilog 中的“输出 reg”,这是非常有用的功能。
但是在 Chisel 中,我找不到如何做类似的事情。当我需要寄存器输出时,我应该这样做:

package filter

import chisel3._

class TestReg extends Module {
    val io = IO( new Bundle {
        val din  = Input(SInt(32.W))
        val ena  = Input(Bool())
        val dout = Output(SInt())
    })

    val dout = RegInit(0.S(32.W))
    when (io.ena) {
        dout := io.din + 77.S
    }
    io.dout <> dout
}
Run Code Online (Sandbox Code Playgroud)

是否有更“短”的方式来创建输出 reg?
我正在寻找的是在 IO 包中定义 Reg 并将其写入 register
类似这样的东西:

class TestReg extends Module {
    val io = IO( new Bundle {
        val din  = Input(SInt(32.W))
        val ena …
Run Code Online (Sandbox Code Playgroud)

hdl register-transfer-level chisel

2
推荐指数
1
解决办法
183
查看次数

如何将我的测试平台与 C++ 库集成到 chisel 中?

我有一个使用 peekpoketester 的凿子测试台。我有一个要在测试平台中使用的 C++ 库。有没有办法在 chisel/scala 中做到这一点?

scala chisel

2
推荐指数
1
解决办法
48
查看次数

引用未完全初始化

我有一个如下所示的模块:

class ComputationIO[T <: Data](val OperandType: T) extends Bundle {
    val data = OperandType.cloneType
}

class Computation [T <: Data] (OperandType: T) extends Module {
    val io = IO( new Bundle {
        val in = Input(new ComputationIO(OperandType))
    })
    // REST OF THE CODE HERE...
}
Run Code Online (Sandbox Code Playgroud)

而且,我正在实例化Computation以下内容:

    val compUnit  = for (i <- 0 until nParal) yield {
        val Comp =  Module(new Computation(UInt(32.W)))
        Comp
    }
Run Code Online (Sandbox Code Playgroud)

但是,虽然我传递UInt(32.W)给构造函数,但它给了我以下错误

firrtl.passes.CheckInitialization$RefNotInitializedException:Reference compUnit is not fully initialized.                                                                                                                                                           
[error]    : compUnit.io.in.OperandType …
Run Code Online (Sandbox Code Playgroud)

scala chisel

2
推荐指数
1
解决办法
65
查看次数

用凿子包装Verilog代码

是否可以将一些Verilog代码包装到凿子/标量代码中?如果是,我该怎么做?我需要在凿子中使用一些verilog模块。

谢谢

弗朗切斯科

scala verilog chisel

1
推荐指数
1
解决办法
718
查看次数

##在Chisel中的含义是什么?

我一直在网上查找##在凿子中的含义,但无法在任何地方找到它.

例如,在此代码段中:

val ways = Module(new BRAM(log2Up(conf.lines), conf.ways * line_size))
val din = Vec.fill(conf.ways) { Bits(width=line_size) }
if(conf.ways == 2) {
   ways.io.din := din(1) ## din(0)
}
Run Code Online (Sandbox Code Playgroud)

使用##表达式的if语句中的行是什么?谢谢!

expression functional-programming scala vector chisel

1
推荐指数
1
解决办法
190
查看次数

生成Verilog代码时如何在凿子中保留所有变量名

可以在verilog中明确找到凿子中的寄存器名称。
但电汇名称有时会在Verilog代码中省略号。

例如,我sjwr ,sjwaddr在verilog中找不到名称。

  val sjwr = Wire(Bool()) 
  val sjwaddr = Wire(UInt(jcnt.getWidth.W))
  sjwr    := jcnt_rdy 
  sjwaddr := jcnt
  when (sjwr) { sjBuf(sjwaddr) := sjxv }  
Run Code Online (Sandbox Code Playgroud)

当我们生成Verilog代码时,如何将所有变量名保留在凿子中。
对于wave调试很重要。

chisel

1
推荐指数
1
解决办法
172
查看次数