☰
香山 XSNoCTop:3 个机制让多核互联不卡壳
2026/9/28 2:40:41 网站建设 项目流程

香山 XSNoCTop:3 个机制让多核互联不卡壳

【免费下载链接】XiangShanOpen-source high-performance RISC-V processor项目地址: https://gitcode.com/GitHub_Trending/xia/XiangShan

香山处理器的 XSNoCTop 位于 核心+L2、L3 共享缓存与外设之间,负责把一致性流量、IO 流量和低功耗管理统一收口。

核心数从 4 翻到 16 时,共享总线形态最先卡壳:所有核的 L2 读写请求在同一条信道排队,核越多延迟越高。XSNoCTop 把单一共享信道换成按目的地路由的节点网络,每路流量各走各的链路,互不阻塞。

一张图看懂 XSNoCTop 的数据流

XSNoCTop(生成模块名为 XSTop)用一串 trait 拼装:HasXSTile 挂上核心与 L2,HasXSTileCHIImp 打开核侧 CHI(AMBA 5 一致性总线)接口,HasSeperatedBusOpt 提供 AXI 或 TileLink(另一种开放总线协议)的外设独立总线,HasIMSIC、HasTraceIO、HasClintTimeImp、HasCoreLowPowerImp 分别接管中断、trace、时间信号与低功耗。L3 采用 OpenLLC(外挂式开放 L3)形态,核侧全部走 CHI 接入。对外则主要暴露核侧 CHI 口 io_chi、独立总线口 io_sepbus、IMSIC AXI4 口和低功耗握手 io。

数据面理清后,核与 SoC 之间的信号未必同频,跨时钟域的问题绕不开。

跨时钟域异步桥:配置项与生效条件

核心与外设总线不在同一时钟频率下,信号直连会产生亚稳态。XSNoCTop 的解法是在时钟域边界插一层握手异步桥:配置项EnableCHIAsyncBridge开启时,HasXSTileCHIImp 在核侧 CHI 外例化一级 CHIAsyncBridgeSink,两侧各自跑频、独立管理复位;外设独立总线则经 TLAsyncCrossingSink 做同样的异步穿越。说白了,相当于在时钟域边界放一个三级同步 FIFO,信号在目的时钟重新采样后才可用。

配置项默认值作用
EnableCHIAsyncBridgeSome(depth=16, sync=3)核侧 CHI 插入异步桥
SeperateBusNONE / TL / AXI独立总线协议选择
WFIClockGatefalseWFI 期间时钟门控
UsePrivateClintfalse定时器中断来源

这些配置项与 require 约束都集中在 SoC.scala:ZhuJiang 封闭式 LLC 不支持异步桥,UsePrivateClint 为 true 时要求 SeperateBus 不能是 NONE。时钟域跨过去之后,控制面还得决定核什么时候能睡、怎么睡下去。

⚡ 低功耗状态机:7 个跳转与唤醒条件

下电流程有严格次序:先冲刷 L2 防止脏数据丢失,再等核进入 WFI(低功耗等待指令),然后逐步与 SoC 握手,任何一步未完成流程都停在原地。实现在 HasCoreLowPowerImp:lpStateNext 定义了 7 个状态 sIDLE → sL2FLUSH → sWAITWFI → sEXITCO → sWAITQ → sQREQ → sPOFFREQ,每个跳转都有明确条件(l2_flush_done、isWFI、syscoreq/syscoack、QACTIVE/QACCEPTn),跨域输入统一经三级移位寄存器同步,走到 sPOFFREQ 才拉高 o_cpu_no_op 告知 SoC 可以下电。WFI 一侧另有 4 状态 WfiStateNext(sNORMAL→sGCLOCK→sAWAKE/sFLITWAKE),开启 WFIClockGate 后,msip、mtip、meip、seip、nmi、debug、msi 等 8 路中断源都能解除门控把核叫醒。跳转条件逐条列在 LowPowerState.scala。

IMSIC 中断唤醒、trace 接口与时间信号穿越

  • HasIMSIC 接入 imsic_bus_top(RISC-V AIA 标准中断控制器),MSI 经 msiInfo 握手直连核心,不占总线流量;msi_info_vld 同时列入 WFI 唤醒源,低功耗核可被中断叫醒。
  • HasTraceIO 把核心的指令 trace(iaddr、iretire、trap cause 等)以 traceCoreInterface 暴露给外部编码器,排查互联问题不必逐段翻波形。
  • SoC 的 64 位时间信号在开启 EnableClintAsyncBridge 时经 AsyncQueueSource 穿越时钟域,机制与 CHI 异步桥同源。

跟着 trait 读

  • XSNoCTop.scala:从第 473 行的 class XSNoCTop 定义进入,混入的每个 trait 对应前文一个机制——HasXSTileCHIImp 是 CHI 数据面,HasSeperatedBusOpt 是独立总线,HasCoreLowPowerImp 是低功耗状态机。
  • LowPowerState.scala:lpStateNext 与 WfiStateNext 两个函数逐条列出跳转条件,适合对照状态机验证。
  • SoC.scala:SoCParams 各配置项的默认值与互斥约束,理解为什么某些组合作为非法配置。
  • Default.yml:项目实际生效的开关(如 EnableCHIAsyncBridge: true),读完代码后核对落点。

用分布式一致性换来了并行数据通路,代价是 7 步下电握手与更多配置项;当前仅支持 OpenLLC,ZhuJiang 需关闭异步桥。把 Default.yml 里 WFIClockGate 改为 true 跑一次仿真,观察 WFI 期间 cpuClockEn 的门控窗口,就能直观看到这套机制在波形上的表现。

【免费下载链接】XiangShanOpen-source high-performance RISC-V processor项目地址: https://gitcode.com/GitHub_Trending/xia/XiangShan

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询