下面是对Blackbox模块的具体实现进行说明。
4、Blackbox
代码如下:
class BlackBoxExample(opcodes: OpcodeSet, blackBoxFile: String)(implicit p: Parameters)
extends LazyRoCC(opcodes) {
override lazy val module = new BlackBoxExampleModuleImp(this, blackBoxFile)
}
类BlackBoxExample,需要输入opcodes和blackBoxFile参数,里面使用new创建BlackBoxExampleModuleImp的对象。
BlackBoxExampleModuleImp类中混入LazyRoCCModuleImp和HasCoreParameters。
声明blackbox值,其中roccIo等于LazyRoCCModuleImp的io,例化blackbox模块,使用"/vsrc/$blackBoxFile.v"作为RTL例化文件,Map()中的是parameter的值,blackbox中的io是连线的名称,用于连接BlackBoxExample端口信号和例化模块blackbox的端口信号,同时加入blackbox.clock和blackbox.reset信号。
"/vsrc/$blackBoxFile.v"文件在以下路径:
/rocket-chip/src/main/resources/vsrc/RoccBlackBox.v
class BlackBoxExampleModuleImp(outer: BlackBoxExample, blackBoxFile: String)(implicit p: Parameters)
extends LazyRoCCModuleImp(outer)
with HasCoreParameters {
val blackbox = {
val roccIo = io
Module(
new BlackBox( Map( "xLen" -> IntParam(xLen),
"PRV_SZ" -> IntParam(PRV.SZ),
"coreMaxAddrBits" -> IntParam(coreMaxAddrBits),
"dcacheReqTagBits" -> IntParam(roccIo.mem.req.bits.tag.getWidth),
"M_SZ" -> IntParam(M_SZ),
"mem_req_bits_size_width" -> IntParam(roccIo.mem.req.bits.size.getWidth),
"coreDataBits" -> IntParam(coreDataBits),
"coreDataBytes" -> IntParam(coreDataBytes),
"paddrBits" -> IntParam(paddrBits),
"FPConstants_RM_SZ" -> IntParam(FPConstants.RM_SZ),
"fLen" -> IntParam(fLen),
"FPConstants_FLAGS_SZ" -> IntParam(FPConstants.FLAGS_SZ)
) ) with HasBlackBoxResource {
val io = IO( new Bundle {
val clock = Input(

本文详细介绍了RoCC架构中的Blackbox模块实现细节,包括BlackBoxExample类的参数输入及对象创建过程,以及BlackBoxExampleModuleImp类如何混入特定特质并配置参数。通过具体的RTL代码示例解释了BlackBox模块的工作原理及其与外部信号的交互方式。
最低0.47元/天 解锁文章
3230

被折叠的 条评论
为什么被折叠?



