标签: chisel

从Chisel代码生成Verilog代码的最简单方法

从现有的Chisel代码生成Verilog代码的最简单方法是什么?

我是否必须创建自己的构建文件

例如,从一个独立的scala文件(AND.scala),如下所示..

import Chisel._

class AND extends Module {
  val io = IO(new Bundle {
    val a = Bool(INPUT)
    val b = Bool(INPUT)
    val out = Bool(OUTPUT)
  })
  io.out := io.a & io.b
}
Run Code Online (Sandbox Code Playgroud)

我在ubuntu 16.4下安装了完整的Chisel3工具链.

scala verilog build chisel

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

如何初始化向量寄存器?

我已经定义了这样的向量寄存器

val my_reg = Reg(Vec(n, Bits(32.W)))
Run Code Online (Sandbox Code Playgroud)

我使用来在for循环中访问该寄存器的元素my_reg(i)

现在,我想将此寄存器初始化为零,所以我将变量定义更改为此

val my_reg = Reg(Vec(n, Bits(32.W)), init = UInt(0))
Run Code Online (Sandbox Code Playgroud)

但是,当我要访问该寄存器的元素时,出现以下编译错误

chisel3.core.Data does not take parameters
my_reg(i) := io.a(i)
Run Code Online (Sandbox Code Playgroud)

如何定义向量寄存器并正确地对其进行同步初始化?

chisel

4
推荐指数
2
解决办法
870
查看次数

如何在 Chisel3 中将 UInt 转换为 SInt 值?

作为tile,如何在Chisel3中以正确的方式将UInt转换为SInt值?IG:

val opC    = RegInit(0.U(64.W))
val result = RegInit(0.U(64.W))
result := Mux(opC.toSInt > 0.S, opC, 0.U)
Run Code Online (Sandbox Code Playgroud)

chisel

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

如何在Chisel中初始化Bundle的Reg?

我为我的特定数据声明了一个捆绑包:

class RValue (val cSize: Int = 16) extends Bundle {
  val rvalue = Output(UInt(cSize.W))
  val er     = Output(UInt((cSize/2).W))
  val part   = Output(Bool()) /* set if value is partial */
}
Run Code Online (Sandbox Code Playgroud)

我想将它用作我的模块中的寄存器:

  val valueReg = Reg(new RValue(cSize))
//...
  valueReg.rvalue := 0.U
  valueReg.er := 0.U
Run Code Online (Sandbox Code Playgroud)

效果很好。但我想在 Register 声明中使用 RegInit() 对其进行初始化。是否可以 ?

  val valueReg = RegInit(new RValue(cSize), ?? ) ??
Run Code Online (Sandbox Code Playgroud)

chisel

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

Chisel应该生成verilog testbench逻辑吗?

我有以下测试代码并使用--genHarness调用chiseMain.Verilog是为线束生成的,但它不包含Tester类中的任何逻辑.对于为什么我没有得到我期望的逻辑的任何想法?我正在使用Chisel 2.10.

码:

class TestMultiPortedMem(c: MultiPortedMem) extends Tester(c) {
  var i = 0

  // Write address as data                                                                                    
  for (p <- c.io.wports) {
    poke(p.wen, 1)
    poke(p.addr, i)
    poke(p.wdata, i)
    step(1)
    i = i + 1
  }

  // Read it back                                                                                             
  i = 0
  for (p <- c.io.rports) {
    poke(p.addr, i)
    step(1)
    expect(p.rdata, i)
    i = i + 1
  }
}

object TestMem {
  def main(args: Array[String]): Unit = {
    //chiselMainTest(Array[String]("--backend", "v", "--genHarness"),                                         
    chiselMainTest(args,
      () => Module(new MultiPortedMem(1,1,1,128,32))){c => new TestMultiPortedMem(c)} …
Run Code Online (Sandbox Code Playgroud)

chisel

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

如何在凿子中获取 UInt() 的大小?

也许这很容易,但我不能简单地找到如何在 Chisel 中获取 UInt() 值的位大小?

我知道如何通过声明设置大小:

val a = UInt(INPUT, 16)
Run Code Online (Sandbox Code Playgroud)

但是要获得“a”大小,是否有类似的属性:

val size = a.?
Run Code Online (Sandbox Code Playgroud)

或者 :

val size = width(a)
Run Code Online (Sandbox Code Playgroud)

hdl chisel

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

如何将 Vec(n,Bool()) 转换为 UInt 值

作为标题,我想将 Vec(Bool()) 转换为 UInt 值。

例如

class MyModule extends Module {

  val io = IO(new Bundle {
    val in_data    = Input (Vec (3, Bool() ) 
    val result     = Output(UInt(5.W))
  })

  //how can I convert io.in_data to Uint and the assign to io.result
  //I will get io.result = 7 when in_data(1, 1, 1) 
}
Run Code Online (Sandbox Code Playgroud)

scala chisel

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

Chisel 中的 &lt;&gt; 运算符是什么?

Chisel 教程使用了似乎是<>操作符的东西,这对我来说是完全陌生的。它有什么作用?

还有,它从哪里来?这个运算符在其他 Scala 库甚至其他语言中是否有传统含义?

下面是一个使用示例,来自 Chisel Generator Bootcamp 练习,第 3.2 节:

class MyQueue extends Module {
    // Example circuit using a Queue
    val io = IO(new Bundle {
        val in = Flipped(Decoupled(UInt(8.W)))
        val out = Decoupled(UInt(8.W))
    })
    val queue = Queue(io.in, 2)  // 2-element queue
    io.out <> queue
}
Run Code Online (Sandbox Code Playgroud)

scala chisel

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

RegEnable 的向量

寻找有关如何使用 RegEnable 作为向量的示例/建议。另外,我想控制输入和使能信号成为向量中寄存器索引的函数。

首先,如何声明 RegEnable() 的 Vector,其次如何迭代它并连接输入和启用。在 RegEnable() 情况下,声明和连接是在同一语句中进行的。就像是:

for (j <- 0 until len) {
    val pipe(j) = RegEnable(in(j),en(j))    
} 
Run Code Online (Sandbox Code Playgroud)

上面的代码无法编译。& en 中还有向量或位选择

chisel

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

如何覆盖/扩展凿子信号命名

这似乎不是一件容易的事情,甚至是不可能的,但我们正在使用一种命名约定,在 verilog 中为输入/输出使用前缀或后缀“i_”或“o_”的信号。

是否有一些方法可以在 chisel 库中混淆或覆盖它?

我看到除了时钟和复位,所有信号都有“io”前缀。是否可以只使用“i”作为输入和“o”作为输出?

chisel

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

标签 统计

chisel ×10

scala ×3

build ×1

hdl ×1

verilog ×1