Chisel 第三章中TransitName的目的是什么?
在3中队列的实现中 对象队列返回TransitName:Chisel 第三章中TransitName的目的是什么?,chisel,Chisel,在3中队列的实现中 对象队列返回TransitName: object Queue { /** Create a queue and supply a DecoupledIO containing the product. */ @chiselName def apply[T <: Data]( enq: ReadyValidIO[T], entries: Int = 2, pipe: Boolean = false, flow:
object Queue
{
/** Create a queue and supply a DecoupledIO containing the product. */
@chiselName
def apply[T <: Data](
enq: ReadyValidIO[T],
entries: Int = 2,
pipe: Boolean = false,
flow: Boolean = false): DecoupledIO[T] = {
if (entries == 0) {
val deq = Wire(new DecoupledIO(enq.bits))
deq.valid := enq.valid
deq.bits := enq.bits
enq.ready := deq.ready
deq
} else {
require(entries > 0)
val q = Module(new Queue(chiselTypeOf(enq.bits), entries, pipe, flow))
q.io.enq.valid := enq.valid // not using <> so that override is allowed
q.io.enq.bits := enq.bits
enq.ready := q.io.enq.ready
TransitName(q.io.deq, q)
}
}
对象队列
{
/**创建一个队列并提供一个包含产品的解耦*/
@凿子名
def应用[T 0)
val q=模块(新队列(类型(enq.bits)、条目、管道、流))
q、 io.enq.valid:=enq.valid//未使用,因此允许重写
q、 io.enq.bits:=enq.bits
enq.ready:=q.io.enq.ready
TransitName(q.io.deq,q)
}
}
我无法理解TransitName中的内容,因为我无法理解其源代码的含义
在位于
TransitName(q.io.deq,q)
的行中,我认为只返回q.io.deq(而不是TransitName),它工作正常。但是为什么我们需要TransitName?TransitName
正在帮助根据用户指定的内容命名创建的队列
模块。队列
工厂在内部创建一个新的队列
对象,但只返回其IO的一部分。凿子知道如何命名IO b基于用户val的名称(或通过一些名称覆盖)。但是,凿子不知道队列的名称。为了提高下游表示(FIRRTL、Verilog)中队列的可读性,这将把q.io.deq
的名称“传输”到队列
,而不是给它一个生成的/临时名称(例如,\u T_42
)与用户名失去连接
然而,从功能的角度来看,TransitName
所做的只是返回q.io.deq
请查看以了解更多详细信息(以及一条很好的注释)。我应该补充一点,TransitName的功能现在可以通过
@scaveName
注释更好地提供