我对奇塞尔高密度脂蛋白( Chisel )很陌生。我有个关于Vec任务的问题。假设我有一个Vec有n个元素,并且每个元素都有w位SInt,
我如何分配一系列元素,假设我有两个Vec:a = Vec(10, SInt(width=8)),我有b = Vec(3, SInt(width=8)),我如何分配b := a(2:4)?
我知道我可以在for循环中完成它,还有什么更优雅的方法可以做到吗?我没有在上面找到任何示例代码或材料
发布于 2016-11-13 12:28:28
好像你在找一个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()}
}发布于 2016-09-15 16:46:05
对于(i <- 3至8) { my_vec(i) := something_at_index(i) }
https://stackoverflow.com/questions/39511343
复制相似问题