You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chisel3中Flipped()的功能是什么?附Generator-Bootcamp代码示例

解答:Chisel中Flipped的功能

我来帮你彻底搞懂Chisel里Flipped的作用,刚好对这个机制很熟悉!

首先得先回忆下Decoupled接口的默认行为:Chisel的Decoupled是标准的AXI-style握手接口,默认是主设备(Master)视角——也就是说,默认情况下:

  • valid信号是模块的输出(由当前模块驱动,告诉对方“我有数据要发”)
  • ready信号是模块的输入(由外部模块驱动,告诉当前模块“我准备好接收了”)
  • 数据信号(这里是UInt(8.W))是模块的输出

而Flipped的核心作用就是翻转整个接口的方向,把主设备视角的接口转换成从设备(Slave)视角,反过来也一样。

结合你给出的代码片段:

val io = IO(new Bundle { 
  val in = Flipped(Decoupled(UInt(8.W))) 
  val out = Decoupled(UInt(8.W)) 
})
  • out是默认的Decoupled接口:你的模块是主设备,负责驱动out.valid和out.bits,等待外部的out.ready信号来完成握手。
  • in加了Flipped之后:你的模块变成了从设备——外部模块会驱动in.valid和in.bits,而你的模块需要驱动in.ready来告诉外部“我已经准备好接收数据了”。

再拓展一下,Flipped不是只能用在Decoupled上,它是一个通用的接口方向翻转工具:任何自定义的Bundle或者接口,只要用Flipped包裹,所有内部端口的方向都会被反转。比如你自己定义一个带读写信号的Bundle,用Flipped之后,原来的输入会变成输出,输出变成输入,这样在模块互连时能省去手动调整每个端口方向的麻烦。

内容的提问来源于stack exchange,提问作者Po-wei Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:41:52