凿子hdl矢量范围分配

时间:2016-09-15 12:42:18

标签: chisel

我是Chisel HDL的新手。我有关于Vec任务的问题。假设我有一个Vec有n个元素,每个元素都有w-bit SInt,

我如何分配一系列元素,让我们说我有两个Vec:a = Vec(10, SInt(width=8)),我有b = Vec(3, SInt(width=8)),我该如何分配b := a(2:4)

我知道我可以在for循环中完成它,有没有更优雅的方法呢?我还没有找到任何示例代码或材料

2 个答案:

答案 0 :(得分:1)

for(i< - 3 to 8){my_vec(i):= something_at_index(i)}

答案 1 :(得分:1)

似乎你正在寻找Vec中的切片功能。瞥了一眼 Vec课我找不到这样的功能。

所以简短的回答是否定的,没有优雅的方法来开箱即用。

第二个最优雅的事情是放置这样的功能 在你的项目的util库中并尝试最终 将此功能升级为。

在Chisel3中实现它可能看起来像这样:

class FooTester extends BasicTester {
  def slice[T <: Data](someVec: Vec[T], startIndex: Int, endIndex: Int) : Vec[T] = {
    Vec( for (i <- startIndex to endIndex) yield someVec(i) )
  }

  // An initialized Vec
  val a = Vec(
    Range(0, 10)
      .map(SInt(_, width=8))
  )

  // A declared Vec
  val b = Wire(Vec(3, SInt(width=8)))

  b := slice(a, 2, 4)

  assert(b(1) === SInt(3, width=8))

  when(Counter(10).inc()) {stop()}
}