本文共 1141 字,大约阅读时间需要 3 分钟。
模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出端口(output ports)输出。 在Chisel3中,模块的输入输出端口,通过IO(new Bundle{...})的形式定义,其中定义了各种类型的数据变量。在实现模块内部转换逻辑的时候,也需要使用到各种类型的数据变量。这些变量如何加入到hardware graph中呢?就是通过WireBinding和RegBinding等。 case class WireBinding(enclosure: UserModule) extends ConstrainedBinding 通过Wire()对一个变量进行Wire绑定,实例如下: object Wire extends WireFactory b. 对x进行绑定:x.bind(WireBinding(Builder.forcedUserModule)) c. 绑定的对象为WireBinding:WireBinding(Builder.forcedUserModule) d. Builder.forcedUserModule可以理解为当前模块; case class RegBinding(enclosure: UserModule) extends ConstrainedBinding b. 对reg进行绑定:reg.bind(RegBinding(Builder.forcedUserModule)) c. 绑定的对象为RegBinding: RegBinding(Builder.forcedUserModule) d. Builder.forcedUserModule可以理解为当前模块; Mem中的每一个元素,在使用时都会使用MemPortBinding进行绑定。 如:stack_mem(sp) := io.dataIn 中,stack_mem(sp)会调用方法: 转载于:https://www.cnblogs.com/wjcdx/p/10204603.html