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

Chisel中<>操作符的连接方向及Decoupled接口下Queue连接机制

Chisel <>操作符在Queue接口连接中的工作逻辑

Chisel的<>是方向感知的逐字段自动连接操作符,它不会死板匹配外层Bundle的Flipped属性,只会逐字段匹配同名信号,自动判断驱动关系完成连接,核心逻辑和该场景下的具体连接过程如下:

1. 先明确两个连接对象的字段方向

首先我们拆分连接两侧的三个信号的方向属性(方向是相对于端口所属模块定义的):

  • 左侧out:是定义的QueueModule的输出端口,类型为无Flipped的DecoupledIO:
    • out.bits:QueueModule的Output端口,需要被内部逻辑驱动
    • out.valid:QueueModule的Output端口,需要被内部逻辑驱动
    • out.ready:QueueModule的Input端口,由外部消费者驱动,可作为内部逻辑的信号源
  • 右侧Queue(in, entries)返回的q.io.deq:是内部实例化的Queue子模块的出队端口,类型同样为无Flipped的DecoupledIO:
    • q.io.deq.bits:Queue子模块的Output端口,可作为父模块的信号源
    • q.io.deq.valid:Queue子模块的Output端口,可作为父模块的信号源
    • q.io.deq.ready:Queue子模块的Input端口,需要被父模块逻辑驱动

2. <>的逐字段连接过程

操作符会自动匹配每对同名字段,根据驱动源和被驱动端的属性生成连接:

  • bits字段:内部Queue输出的q.io.deq.bits作为驱动源,连接到需要被赋值的out.bits,等价于out.bits := q.io.deq.bits
  • valid字段:内部Queue输出的q.io.deq.valid作为驱动源,连接到需要被赋值的out.valid,等价于out.valid := q.io.deq.valid
  • ready字段:外部输入的out.ready作为驱动源,连接到需要被赋值的Queue输入端口q.io.deq.ready,等价于q.io.deq.ready := out.ready

3. 常见误区说明

之前认为“两个接口方向完全一致无法双向连接”是对Decoupled接口方向的误解:外层Bundle的Flipped属性只是批量定义内部子字段方向的语法糖,<>操作符根本不关心外层Bundle的方向标识,只会逐字段判断驱动关系,只要每对同名字段有且仅有一个合法驱动源,就可以完成正确连接。

内容的提问来源于stack exchange,提问作者Yeung Yann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:48:02