Chisel 用“凿”凿出部分散装接头<&燃气轮机&引用;操作人员

Chisel 用“凿”凿出部分散装接头<&燃气轮机&引用;操作人员,chisel,Chisel,我有麻烦做部分批量连接。 我在书中看到(4.3批量连接)。 允许使用部分匹配的信号连接两个线束 我目前正在研究3.2。而且它似乎不起作用,在兴高采烈的时候 报告 凿岩3.internal.凿岩异常:左侧(匿名捆绑包(获取中的IO))和源(匿名捆绑包(解码中的IO))之间的连接失败@。regB:左侧记录缺失字段(regB)。 这是在某个版本中更改的吗 如果更改了,现在如何进行部分连接 这是测试代码(不要介意模块,它只是为了防止信号优化): 类获取扩展模块{ val io=io(新捆绑){ val

我有麻烦做部分批量连接。 我在书中看到(4.3批量连接)。 允许使用部分匹配的信号连接两个线束

我目前正在研究3.2。而且它似乎不起作用,在兴高采烈的时候 报告
凿岩3.internal.凿岩异常:左侧(匿名捆绑包(获取中的IO))和源(匿名捆绑包(解码中的IO))之间的连接失败@。regB:左侧记录缺失字段(regB)。

这是在某个版本中更改的吗

如果更改了,现在如何进行部分连接

这是测试代码(不要介意模块,它只是为了防止信号优化):

类获取扩展模块{
val io=io(新捆绑){
val instr=输出(UInt(32.W))
val pc=输出(UInt(32.W))
})
val r=RegInit(0.U(32.W))
r:=r+1.U
io.pc:=r
io.instr:=r+1.U
}
类解码扩展模块{
val io=io(新捆绑){
val instr=输入(UInt(32.W))
val pc=输入(UInt(32.W))
val aluOp=输出(UInt(5.W))
val regA=输出(UInt(32.W))
val regB=输出(UInt(32.W))
})
io.ALOUP:=io.pc
io.regA:=io.instr
io.regB:=io.instr
}
类执行扩展模块{
val io=io(新捆绑){
val ALOUP=输入(UInt(5.W))
val regA=输入(UInt(32.W))
val regB=输入(UInt(32.W))
val结果=输出(UInt(32.W))
})
io.result:=io.regA
当(io.ALOUP>10.U){
io.result:=io.regB
}
}
objectmain{
def main(参数:数组[字符串]):单位={
执行(数组(“”,()=>新模块{
val io=io(新捆绑){
val结果=输出(UInt(32.W))
})
val fetch=模块(新fetch())
val decode=模块(新decode())
val execute=模块(新执行)
fetch.io decode.io
decode.io执行.io
io execute.io
})
}
}

我想给出一个更详细的答案,包括要解决的选项,但目前没有时间。简而言之,这是故意删除的。在使用凿子进行多年硬件设计的过程中,我们发现难以调试错误的第一个原因是当我们重构一个块,将一个字段添加到一个包中,然后该块的其他一些用户将不知道添加的内容,并且会使Verilog无法工作。请注意我正在编写的关于差异和迁移策略的文档。我们编写不需要此功能的代码的方式是通过组合。如果一个捆绑包中有字段要连接到另一个捆绑包中的相同字段,通常最好创建一个包含这些字段的新捆绑包,并在其他每个捆绑包中实例化新捆绑包。然后你就可以连接子字段了。@JackKoenig嗨,也许你可以详细介绍一下
合成方法?如果我们仍然希望将
获取
解码
解码
执行
执行
执行
io
的相应端口连接在一起,我们如何解决这种情况?