Chisel 连接单个模块-凿子

Chisel 连接单个模块-凿子,chisel,Chisel,您好,我有一个关于如何连接和映射两个模块之间的端口的问题,我将只描述输入和输出,而不包括每个模块的控制逻辑。第一个模块是一个简单的寄存器,其输出是第二个模块的输入,第二个模块是一个解复用器 class simpleRegister extends Module { val io = IO( new Bundle { val enable = Input(UInt(1.W)) val in = Input(UInt(8.W)) val out = Out

您好,我有一个关于如何连接和映射两个模块之间的端口的问题,我将只描述输入和输出,而不包括每个模块的控制逻辑。第一个模块是一个简单的寄存器,其输出是第二个模块的输入,第二个模块是一个解复用器

class simpleRegister extends Module {
    val io = IO( new Bundle { 
    val enable = Input(UInt(1.W))
    val in    = Input(UInt(8.W))
    val out   = Output(UInt(8.W))
    })
}

class demultiplexer extends Module {
  val io = IO(new Bundle { 
    val datain = Input(UInt(8.W))
    val dataout1 = Output(UInt(8.W))
    val dataout2 = Output(UInt(8.W)) 
  })

当我在github上阅读“接口和批量连接”时,我不确定是否应该使用什么方法。您需要构造一个顶层模块,该模块调用这两个模块并执行构造。这很直截了当

您的顶部模块将如下所示

class Top extends Module{
    //You can expose a top level IO bundle if you will
    val smplReg = Module(new simpleRegister)
    val dmux = Module(new demultiplexer)
    //connection of interest here is
    dmux.io.datain := smplReg.io.out
    //Make other connections as necessary
}

接口和大容量连接是指两个IO捆绑包具有相似字段,而不是将每个输入/输出连接到相应的输入/输出,然后将捆绑包作为一个整体进行连接。这只是优化代码的一种方法。

它现在可以编译,但是如果我尝试获取verilog表示或尝试使用内部测试仪,则会出现以下错误~~~cmd17.sc:60:类型不匹配;发现:Helper.this.TopMod required:凿毛3.core.UserModule~~~似乎我传递了错误的类型,因为它期望的是凿毛3.core.UserModule。您能给我一个更好的错误表示吗?另外,包括
凿毛3.core.UserModule
在内的错误表明您使用的是相当旧的凿毛版本(可能是
3.1.something
?),我建议升级到最新的
3.4.2
。我使用的是juypter笔记本,但现在我将切换到scastie,它现在抛出了这样一个“类Top需要是抽象的,因为类LegacyModule中的方法io类型=>凿3.Record未定义”我已经解决了我遇到的问题,这是因为我没有明确说明io的任务。我需要记住这一点