Max WellPERSONAL NOTES
工作技术 / NOC & TRANSACTION HANDLING

FlexNoC NIU 的六步事务处理

沿一条请求路径,理解事务为什么被打包、切分与对齐,以及响应如何恢复原来的语义。

发布于 2026-10-09基于 FlexNoC 5.5.0-1 文档主线:Step 1–6 · pp.16–22

先把 socket 请求归一化为 generic transaction,再按目标能力切分和对齐。响应侧恢复数据与状态;内部切分通常对 socket 隐藏。

本文目录 / CONTENTS
NIU 六步请求路径与响应恢复请求从发起端经过 Step 1 至 Step 6 到达目标端。Step 4 的 fragment 按各子规则重新检查。响应返回发起端,必要时重组数据并恢复协议表示。请求 → 先归一化,再按目标能力切分与对齐InitiatorsocketSpecific Initiator NIUStep 1 → 2 → 3Generic Initiator NIUStep 4 · decode / splitNoC transportrequest packetTarget NIUGeneric:Step 5Specific:Step 6fragment / remainder 按规则重入→ Target socket适用时继续 Step 7Initiator NIU · response processing匹配 context · 必要时重组 · 恢复协议Target responsedata / status← NoC responseStep 1–3:Specific Initiator Step 4:Generic Initiator Step 5:Generic Target Step 6:Specific Target
按 NIU 位置阅读六步。内部 fragment 数量通常不等于 socket 看到的事务数量。依据:pp.16–22、57、62–63。

01请求路径与基本概念

阅读范围与来源标记

本文沿请求路径说明六步处理。每一步都回答三个问题:在哪里发生,什么条件触发,地址、长度或数据表示如何变化。原文事实、推导和教学例子分别标记。

Document原文原文直接规定的行为,或原文例子直接给出的数值。
Interpretation推导基于一个或多个原文规则做的教学推导,不冒充 Arteris 原文。
Not specified未明确Document does not explicitly specify:原文未公开足够细节,报告不补造内部实现。
Teaching example教学例子为说明规则而构造的数值或组合;原文没有给出该组合。
范围

本章主线是 INCR / WRAP transaction。FIXED、2D、exclusive / atomic 等特殊 transaction 受额外限制,不能机械套用本文的通用 split 规则。[p.16, 28–34]

Step 7 边界

原文在 Step 6 之后还有 Step 7 “Burst splitting or SRMD→MRMD conversion”(p.22)。本文以 Step 1–6 为主线:APB、AHB、MRMD OCP,或不支持当前 burst type 的 target 仍可能继续执行 Step 7,因此 Step 6 不是所有 target protocol 的绝对终点。

核心结论(据下文归纳)

  1. 绝大多数正常 transaction 在 Step 1–3 不变,直接 1:1 映射到 generic interface。Step 4 仍会对每个 transaction 做 address decode,通常结果是 1 个 target、无切分。
  2. Step 4 是 target 相关切分的核心:每个 remainder 都必须重新进入 Step 4,而不是只检查一次。
  3. Step 5 只对 WRAP 且 target 数据宽度大于 initiator 的情况做起始地址对齐;Step 6 决定 socket 的 word 编码与 write byte enable。
  4. split 通常是 NIU 内部行为:response 侧做 reassemble / aggregate,socket 看到的仍是原 transaction。reassembly(拼数据)与 reorder(排顺序)是两件事。

六步处理总览

六步按发生位置分为三段:specific NIU 的步骤通常只适用于部分 protocol;generic NIU 的步骤面向所有 protocol。多个适用步骤按顺序发生。

↺ Step 4 切出的 fragment / remainder 重新进入 Step 4(0..N 个 fragment)
STEP 1

Narrow burst packing

Specific Initiator NIU · AHB / AXI

ASIZE 小于 initiator word 的 multi-beat burst,整理为 precise byte range 与按 word 组织的数据。SIZE / LEN 不再原样传递。

STEP 2

Splitting into precise bursts

Specific Initiator NIU · AHB / OCP(burstprecise = 0)

把第一个 request phase 无法确定长度的 imprecise burst,切成长度已承诺的 precise fragments。

STEP 3

MRMD → SRMD

Specific Initiator NIU · AHB / OCP(burstsinglereq = 0)

保留第一个 request phase,丢弃后续 request phase;全部 data word 保留。

STEP 4

Address decode + target-based split

Generic Initiator NIU · 所有 transaction

选中 target,并按 maxWrap、burst_aligned、minInterleaveSize(read)、crossBoundary、maximum burst 递归切分;remainder 重入 Step 4。

STEP 5

Wrapping burst alignment

Generic Target NIU · 所有 protocol(仅 WRAP)

target 数据宽度大于 initiator 时,把 WRAP 的起始地址对齐到 target word。

STEP 6

Word alignment

Specific Target NIU · word-aligned protocol

生成 socket 能表达的 word 表示;write 用 byte enable 屏蔽无效 byte。AXI 可保留 unaligned start。

transaction 经 NoC 后,请求内容通常与 Step 4 输出相同。security firewall 或 power disconnect unit 可以阻止 transaction 到达 target,但 fabric 本身不再做本章所述的 burst 变换。[p.21]

每一步最关心哪种“宽度”

Step主要宽度输入宽度如何影响结果
1Initiator socket word widthASIZE < word width 才是 narrow;packing 按 initiator word 边界组织数据。
2Initiator word widthrdSplit / wrSplit 以 AHB word 为单位;read prefetch 与 write padding 也以 word 计。
3Initiator word width决定 MRMD 多个 request / data phase 合成的 byte length。
4Target word width + target maximum bytes判断 transaction 实际占用多少 target word;unaligned transaction 可能因占用额外 target word 而 split。
5Initiator width 与 target width 的比较仅在 target word 比 initiator word 更宽时,对 WRAP 做起始地址 realignment。
6Target socket word width决定 start alignment、last-transfer rounding 与 byte-enable mask。

四个基本概念

Narrow 不是普通 width conversion

narrow 指同一个 initiator interface 上,单个 transfer 的 ASIZE 小于该 interface 的 word width(例如 32-bit 接口上的 1-B beat)。它不是“32-bit initiator 接 64-bit target”这种端到端 datapath 宽度转换:前者在 Step 1 处理,后者主要在 Step 4–6 暴露影响。[pp.10–11, 16–17]

Precise 与 imprecise

  • Precise burst:看完第一个 request phase(以及已发生的 Step 1)就能确定 transaction 的最终 byte range / transfer count。
  • Imprecise burst:第一个 request phase 不能承诺最终长度;后续可能提前结束,或 protocol 本身逐步给出长度。

AHB 非 exclusive 的 undefined-length INCR、useEarlyBurstTermination = True 时的 AHB burst,以及 burstprecise = 0 的多-word OCP burst,属于 imprecise。[p.17]

MRMD 与 SRMD

  • MRMD(Multiple Request Multiple Data):burst 内每个 data word 都有对应 request phase。
  • SRMD(Single Request Multiple Data):一个 request 描述整个 burst,后接多个 data word。

FlexNoC generic interface 原生是 precise、byte-oriented、SRMD(p.10);AHB,以及 burstsinglereq = 0 的 OCP,需要在 specific initiator NIU 归一化。[pp.10, 18, 186, 189, 193]

Length、beats 与 occupied target words 不是同一个量

  • Length:有效 byte range。
  • beats:某个 protocol interface 上的 transfer 次数。
  • occupied target words:该 byte range 覆盖的 target word 数。

同一个 128-B transaction,若从 target word 中间开始,可能占 5 个 32-B target word,而不是 4 个。这正是 Step 4E 的关键(见 Step 4E)。[pp.19–20]

02发起端:归一化请求

Step 1 · 打包 narrow burst

把 socket 上多-beat 的 narrow transaction 转成 generic interface 可统一处理的 precise byte range 与按 word 组织的数据,而不是把 narrow burst 原样送到 target。

发生位置

AHB / AXI socketnarrow burst
→
Specific Initiator NIUStep 1
→
Generic Initiator NIUprecise generic representation

依据:pp.16–17,“Step 1: Narrow burst packing”。

适用条件

ProtocolAHB、AXI
Narrow 判定ASIZE < initiator socket word width
Burst主要讨论 multi-beat INCR。splitNonModifiableNarrow 对 WRAP 没有影响(原文 NOTE)。
Read / Write均可;write data 同时携带有效 byte 信息。
Precise / imprecise通常 packing;imprecise 且 non-cacheable 等例外时,按 beat 拆成 precise request。
前置能力minNarrowBurstSize ≠ None。否则 narrow multi-beat 不受支持:RTL 仿真可能 assertion,硬件行为不可预测。

依据:pp.16–17;AHB / AXI 的 minNarrowBurstSize 说明(pp.105, 127, 135–136)。

关键配置

参数配置层级控制内容取值 / 触发
minNarrowBurstSizeSpecification → Interface → NIU → conversion允许的最小 narrow size(原文以 HSIZE 表述;AHB、AXI 共用)None:禁用 narrow multi-beat(single-beat partial access 仍支持);非 None:支持从该最小 size 起的 narrow multi-beat
forceCacheable同上,AHB 专用强制按 cacheable 规则处理 AHB transaction,影响 narrow / imprecise 的拆分方式True:忽略 HPROT 的 cacheable 区分;False:使用 HPROT[3]
splitNonModifiableNarrow同上,AXI 专用把 non-modifiable narrow INCR 拆成单 beat,避免 target 读 word 取整True 且 AxCACHE[1] = 0、AxLEN > 0、2^AxSIZE < initiator word bytes 时触发;AxSIZE 是字节数的 log₂ 编码,不影响 WRAP
forceSplitNarrow同上,AXI 专用强制 narrow burst 拆成 single-word transaction;原文将其与 data placeholder 上的 word ECC 关联True(ECC 支持所需)

Step 1 的概要行把 minNarrowBurstSize 与 forceCacheable 并列,但 protocol-specific 章节只为 AHB 定义 forceCacheable。本文不把它套到 AXI。[pp.16, 100–105, 127, 135–136]

转换前后原文例子

字段转换前:socket转换后:Step 1:generic-facing
Address0x10x1
Transfer size1 B per beatprecise byte range;socket SIZE 不再原样传递
Beat count / length8 beatsLength = 8 B
Burst typeINCRINCR
Request count一个 AHB burst,含多个 AHB address phase通常 1 个 precise generic transaction
Data words8 个 narrow beat覆盖 3 个 4-B generic word
Target尚未 decode尚未 decode
Splitting无本例无;例外条件可按 beat split

依据:p.17,Step 1 example(32-bit AHB,cacheable / bufferable,ADDR = 0x1,8 beats,每 beat 1 B)。

可视化:8 × 1-B 如何覆盖三个 32-bit word 容器教学展开

word @0x0
0x0–
0x1B0
0x2B1
0x3B2
有效掩码 1110(MSB = 0x3)
word @0x4
0x4B3
0x5B4
0x6B5
0x7B6
有效掩码 1111
word @0x8
0x8B7
0x9–
0xA–
0xB–
有效掩码 0001(MSB = 0xB)

有效 payload 为 8 B(0x1–0x8),覆盖 3 个 word 容器(0x0、0x4、0x8)。packing 不会把有效 byte 数变成 12 B:0x0 与 0x9–0xB 不是原 transaction 的有效 byte。

依据:原文只给出 start、length 与“三个 data words”,未逐 bit 展示 mask;本图的掩码展开为推导。[pp.10, 17]

数值例子

展开数值过程
输入(原文例子)
  protocol         = AHB, 32-bit(word = 4 B)
  ADDR             = 0x1,   SIZE = 1 B,   LEN = 8 beats
  有效范围         = 0x1 .. 0x8(8 B)

Step 1 之后
  generic Addr     = 0x1
  generic Length   = 8 B
  覆盖的 word      = @0x0, @0x4, @0x8
  fragment 数      = 1(本 cacheable / bufferable 例子)

计算(推导)
  word 数 = floor(0x8 / 4) − floor(0x1 / 4) + 1 = 2 − 0 + 1 = 3

generic interface 用 byte address + byte length 表达有效范围;word 容器数由首尾有效 byte 所在 word 的索引差加 1 决定。推导

保持原状的条件

  • ASIZE == initiator word width:不是 narrow,Step 1 bypass。
  • single-beat partial access 不属于这里的 multi-beat packing:即使 minNarrowBurstSize = None,原文仍说明 single-beat partial access 可保持支持。[pp.105, 135]
  • AXI non-modifiable narrow 且 splitNonModifiableNarrow = True:不走普通 packing 路径,而按 beat 拆分。[p.135]

设计意义

它把 AHB / AXI 的 narrow 语义归一化为 generic interface 的 precise byte 语义,使后续的 decode、boundary、target capability 与 response processing 不必理解每种 socket 的 narrow 编码。它不是普通 datapath width conversion;真正的 initiator / target 宽度差异在 Step 4–6 才参与决策。

Step 2 · 形成 precise burst

把“第一个 request phase 尚不知道最终长度”的 imprecise burst 切成长度已承诺的 precise fragments,后续 generic NIU 才能安全地 decode、分配 context、packetize 并接收 response。

发生位置

AHB / OCP socketimprecise burst
→
Specific Initiator NIUStep 2:限定 stream,生成 precise F0、F1 …
→
Generic Initiator NIUprecise fragments

依据:p.17,“Step 2: Splitting into precise bursts”。

适用条件

Protocol / 类型触发条件结果
AHBnon-exclusive undefined-length INCR以 rdSplit / wrSplit 为上限形成 precise fragments
AHB任意 defined-length burst,且 useEarlyBurstTermination = True因可能提前终止而按 imprecise 路径处理
OCPMBurstLength > 1 且 burstprecise = 0按 2-word fragment 拆分,最后可剩 1 个 word。原文例子:4 个 word、MBurstLength = 3,3,3,1 → 两个 2-word fragment。
Readcacheable AHB INCR允许 prefetch 到 rdSplit 边界,未请求的数据被丢弃。narrow INCR 为例外,按两拍一组拆分。
Writecacheable AHB INCR不足 wrSplit 的尾部以 BE = 0 padding,不写入无效 byte
Non-cacheable依 AHB NIU 参数可按 word 或 single beat 拆分;non-cacheable 事务不做 prefetch

依据:pp.17, 25, 101–105, 193。

关键配置

参数层级控制内容取值 / 条件
useEarlyBurstTerminationSpecification → Interface → NIU → conversionAHB defined-length burst 是否允许提前终止;undefined INCR 本来就可随时结束Boolean(只对 defined-length 生效)
forceCacheable同上是否把所有 AHB transaction 按 cacheable 路径处理Boolean
rdSplitArchitecture → Datapath NIU → NIUcacheable non-narrow AHB INCR read 的 split 粒度(word 数)1, 2, 4, 8, 16, 32 words
wrSplit同上cacheable non-narrow AHB INCR write 的 split / padding 粒度(word 数)1, 2, 4, 8, 16, 32 words
burstpreciseOCP protocol Burst 参数OCP burst length 是否 precise0 触发 imprecise split;target 侧 OCP burst 始终 precise

转换前后地址 0x100 为教学设定

数值来自原文(rdSplit = 4,32-bit AHB,实际发出 5 个 word);起始地址 0x100 为教学设定。

字段转换前转换后:Step 2
Address0x100F0 = 0x100;F1 = 0x110
Known length at first phase未知每个 fragment = 4 words = 16 B
Requested words5仍只有 W0–W4 属于 initiator request
Target-fetched words尚未确定8 个 word(F0 的 4 个 + F1 的 4 个)
Returned to initiator5 个 word5 个 word;多取的 3 个 word 由 NIU 丢弃,不暴露为额外 AHB transfer
Request count1 个 imprecise burst stream2 个 precise generic request

可视化:precise / imprecise 与 read prefetch

initiator 请求(5 words = 20 B)F0(4 words)F1(4 words)返回 initiatorNIU 丢弃(3 words)

原文:rdSplit = 4 时,5-word cacheable INCR read 被拆成两个 4-word transaction,共取回 8 个 word。[p.17]

数值例子

展开数值过程
输入
  protocol   = AHB, 32-bit(word = 4 B)
  ADDR       = 0x100
  HBURST     = INCR(undefined length)
  actual     = 5 words(W0–W4)
  rdSplit    = 4 words

Fragment 0
  ADDR       = 0x100
  Length     = 16 B(0x100..0x10F)

Fragment 1
  ADDR       = 0x110
  Length     = 16 B(0x110..0x11F)
  requested  = 第一个 word(0x110..0x113)
  prefetched = 其余 3 个 word,响应被丢弃

字节统计
  requested  = 5 × 4 = 20 B
  prefetched = 8 × 4 = 32 B
  returned   = 20 B

依据:原文直接给出“5 words → 两个 4-word transaction,共 8 words”;AHB 章节补充说明多余 prefetch 数据被丢弃。[pp.17, 101]

写入的对称情况不是“读回来再丢”:若 5-word write 使用 wrSplit = 4,F1 的后 3 个 word 以 byte enable 0 padding,target-facing 表示占 4 个 word,但只有第一个 word 有效。推导依据 pp.17, 102, 105。

保持原状的条件

  • AHB SINGLE、INCR4/8/16、WRAP4/8/16,且 useEarlyBurstTermination = False:长度从第一个 phase 已知,通常 bypass。
  • OCP burstprecise = 1,或单-word transaction:bypass。
  • AXI burst 本身是 precise,不进入 Step 2。

设计意义

generic NIU 必须在发出 request packet 时就知道 byte range,才能做 address decode、split、buffer / context 记账。Step 2 用有限的 precise window 隔离了 AHB / OCP 的“长度以后才知道”问题;代价是 read 可能 prefetch,write 可能以 BE = 0 padding。

Step 3 · MRMD 转为 SRMD

把“每个 data word 都带 request phase”的 socket protocol 归一化为 generic interface 的“一个 request + 多个 data word”。

发生位置

AHB 或 OCP(MRMD)socket逐 word 的 request phase
→
Specific Initiator NIUStep 3:去掉 request phase 1..N−1,保留全部 data / response 语义
→
Generic SRMD interface一个 request + N 个 data

依据:p.18,“Step 3: MRMD to SRMD conversion”。

适用条件

  • AHB 多-word transaction,且在 Step 1 / 2 之后仍是 burst。
  • OCP 且静态 burstsinglereq = 0(MRMD),Step 1 / 2 之后仍是多-word burst。
  • read 与 write 都涉及 request 表示:write data word 保留;read data 仍按原 transaction 返回。
  • 若 Step 1 / 2 已把 transaction 化为 single-word fragment,则没有多余的 request phase 可丢,Step 3 实质 bypass。

关键配置

Item路径含义
burstsinglereq_tieOCP protocol configuration0 = MRMD,1 = SRMD;原文说明该信号只支持 tie-off,不作为动态 socket 信号出现
FlexNoC 转换参数不适用Step 3 没有单独开关,是 generic SRMD 契约要求的 protocol 转换

依据:pp.18, 186, 189, 193。

转换前后原文例子

字段转换前:32-bit AHB INCR4转换后:Step 3
Request phases41
First addressA0A0
Later addressesA0+4、A0+8、A0+12不再作为独立 generic request phase
Length4 × 4 B16 B
Data wordsD0、D1、D2、D3D0、D1、D2、D3,全部保留
Splitting无无;这是 representation conversion

可视化:MRMD 与 SRMD

MRMD(socket 侧)· 每个 data word 都有 request phase
A0 · NONSEQ
A0+4 · SEQ
A0+8 · SEQ
A0+C · SEQ
D0
D1
D2
D3
SRMD(generic 侧)· 一个 request 描述整个 burst
request:Addr = A0 · Length = 16 B · Burst = INCR
D0
D1
D2
D3

“later request phases are dropped”只表示它们不再被编码为 generic request;不表示后续 data 或有效地址范围被丢弃。[p.18]

数值例子

展开数值过程
输入(原文例子)
  AHB word width = 4 B
  HBURST         = INCR4
  ADDR           = 0x200
  phases         = 0x200, 0x204, 0x208, 0x20C

输出(generic)
  Addr           = 0x200
  Length         = 4 × 4 B = 16 B
  requests       = 1
  data words     = 4

依据:p.18。原文例子:32-bit AHB 无 early burst termination 时,INCR4 结果为单个 request phase,地址为首拍地址,长度 16 B。

保持原状的条件

  • AXI burst 已经是单地址 request + 多个 data / response beat,Step 3 bypass。
  • OCP burstsinglereq = 1 已是 SRMD,bypass。
  • single-word fragment 没有后续 request phase,bypass。

设计意义

SRMD 是 protocol-independent 的 transaction 表示。把 MRMD 的差异收敛在 specific NIU 中之后,Step 4 只需处理一个 byte range,不必理解 AHB 的 NONSEQ / SEQ 或 OCP 的多 request framing。

03Step 4:按目标能力切分

Step 4 · 地址译码与目标相关切分

前三步统一请求表示。Step 4 选择 target,并检查目标能够接受的地址范围、burst 类型与长度。条件不满足时,NIU 将请求切成 fragment。

每个 fragment 都要满足 mapping、目标边界、burst 能力、读响应交织粒度和 target word 占用量的限制。切出的 fragment 或 remainder 按各子规则重新检查。

发生位置与判断顺序

Generic Initiator NIU所有 transaction 都做 address decode
→
4A → 4B → 4C → 4D → 4E概念优先级(硬件可并行实现)
→
packetize或 fragment 重入 Step 4

依据:pp.18–20,“Step 4: Address decoding and target-based splitting”。原文说明硬件可以并行实现这些判断以缩短 critical path,但列出的顺序代表概念优先级。

适用条件

  • 所有 transaction 都经过 address decode;未映射的地址返回 DEC 错误。
  • INCR / WRAP 使用本节完整流程;read 与 write 都受 decode、boundary 与 maximum burst 限制。
  • minInterleaveSize 子规则(4C)只针对 read burst。
  • FIXED、2D、exclusive / locked 等特殊类型不能自由 split;非法 split 会生成 in-band error。[pp.18–19, 28–34, 40–41]

关键配置

参数 / 输入配置层级控制内容
Address map / mappingSpecification → Mappingstarget 选择、mapping size、enclosed mapping;address modifier(如 address space / mode)参与 decode
maxWrapSpecification → Interface → NIU → generic → Bursttarget 可生成 / 接受的最大 WRAP 字节数;设为 None 的用法见 Step 4A
useBurstAlign同上为 True 时,INCR burst 的地址按其长度(2 的幂)对齐
OCP burst_alignedOCP protocol Burst 参数组OCP target 是否只接受自然对齐的 INCR burst
minInterleaveSizeSpecification → Interface → NIU → generic → Orderingread response 交织粒度:0 不交织;wData/8 为 word(默认);或 wData/8 的更大 2 的幂
crossBoundarySpecification → Interface → NIU → generic → Burstburst 不得跨越的 2 的幂字节边界
wLen1同上最大 transfer size = 2^wLen1 字节(p.18 的概要行写作 wLen,正文与参数定义使用 wLen1)
Per initiator-target split limitArchitecture → Datapath NIU → Splitting可进一步压低某个 initiator–target pair 的 burst 字节上限
Reorder read-data buffer limitArchitecture → Datapath NIU → NIU配有 reorder buffer 时,read fragment 不能超过相关 read data buffer 的容量

依据:pp.18–20, 47–52, 62–63, 69。p.19 使用 nBytePerReadDataBuffer,p.63 的 reorder buffer 段落使用 nBytePerReadBuffer(参数定义见 p.69)。原文未说明两者是否为 alias,本文保留两种拼写。

转换前后(通用)

字段Before Step 4转换后:Step 4
Addressglobal generic address每个 fragment 的 address;target NIU 之后还会生成 local target address
Length一个 precise byte length1..N 个 fragment 长度;总有效 byte range 保持一致(非法 / 错误路径除外)
BurstINCR / WRAP可保持;WRAP 也可能先转为两个 INCR fragment
Target未 decode每个 fragment 有确定的 target mapping / route;跨 mapping 时可落到不同 target
Request count11..N
Data一个 logical transaction按 fragment range 分配;write BE 与 read reassembly 保持原有效 byte 语义
Re-entry不适用remainder 或两侧 fragment 按各子规则重新进入 Step 4

决策流:Step 4 的判断顺序

Generic transaction(precise byte range,INCR 或 WRAP)
DECAddress decode:命中 mapping → 取得 target mapping 与 target 能力。
未映射 → 标记 ERR(DEC);访问类型不符 → ERR(UNS)
4AmaxWrap:WRAP 起点未按整个 WRAP 长度对齐,且长度超过 target maxWrap?
是 → 两段 INCR fragment,各自重入 Step 4
4Bburst_aligned:不满足“length 为 2 的幂且 start 对齐 length”?
是 → 对齐的第一段 + remainder,重入 Step 4
4CminInterleaveSize(仅 read):minInterleaveSize > wData/8,且 size 超过粒度、start 未对齐?
是 → 两段 INCR;第一段终点按 INCR / WRAP 的子规则确定(余下部分不再因 4C 切分)
4DcrossBoundary:首字节与末字节不在同一个 effective boundary 段内?
是 → 到边界的第一段 + remainder,重入 Step 4
4Emaximum burst / occupied words:覆盖的 target word × word 字节 > max burst?
是 → 能放入的前缀 + remainder,重入 Step 4
全部满足 → packetize 到所选 target

依据:pp.18–20(五项子规则的顺序与重入规则);decode 错误代码见 pp.38–41。4C 的条件为依原文 read 子规则整理的判断表述。

Step 4A – maxWrap

为什么需要

WRAP burst 的地址会在 wrap window 末端回到 base。若 target 不支持这么大的 WRAP,FlexNoC 先把它拆成两个线性的 INCR range,使 target 不必理解原始的大 WRAP。[p.18]

可视化

F1 · 4 B
F0 · INCR 0x04–0x3F · 60 B
0x000x040x40

原始访问顺序(WRAP):0x04 → … → 0x3F → 0x00 → … → 0x03。拆分后两段都是 INCR,且都重新执行 Step 4(它们仍可能遇到 mapping boundary、crossBoundary、burst alignment 或 maximum burst 限制)。[p.18]

转换前后

字段转换前Fragment 0Fragment 1
BurstWRAPINCRINCR
Start0x040x040x00
Length64 B60 B4 B
Address coverage0x04..0x3F,然后 0x00..0x030x04..0x3F0x00..0x03
Re-enter Step 4–yesyes

依据:p.18 原文例子(64-B WRAP 从 0x4 开始,target maxWrap = 32 → INCR 0x4 + 60 B,再 INCR 0x0 + 4 B)。

不切分的条件

  • INCR transaction:不适用。
  • WRAP size ≤ target maxWrap:不因 4A 切分。
  • start 已按整个 WRAP size 对齐:原文把这种情况视为 INCR,不属于本规则描述的“两段 wrap”。[p.18]
配置注意:maxWrap 的 None 用法
  • 把 target 侧的 maxWrap 设为 None 时,initiator NIU 把发往该 target 的 wrapping burst 转为 INCR fragment;实际长度由原始 WRAP 范围与后续 Step 4 约束决定。原文 TIP 建议按系统 cache line 大小设置 maxWrap(通常 64 或 128 B),这不是 None 情形的固定切分长度。
  • IMPORTANT:initiator 侧的 maxWrap 不得设为 None,若对应 IP 可能发出 WRAP。
  • target 侧 maxWrap 不得大于其所连接 initiator 的最大 maxWrap 设置。

依据:maxWrap 参数说明(pp.48–49)。

Step 4B – burst alignment

为什么需要

某些 OCP target 只接受“length 为 2 的幂,且 start address 对齐到该 length”的 INCR burst。任意 byte range 必须分解为这种自然对齐块。[p.18;OCP burst_aligned 见 p.190]

可视化

0x04–0x07 · 4 B
0x08–0x0F · 8 B
0x10–0x13 · 4 B
0x040x080x100x14

16 B 从 0x04 开始:第一轮(原文)得到 4 B + 12 B;12 B 的第二段(0x08 起)会再次被拆分。第二轮(推导)得到 8 B + 4 B,最终为 4 + 8 + 4。推导

数值例子与递归拆分

展开数值过程
输入:Addr = 0x04,Length = 16 B
  16 B 对齐要求 start 的低 4 位为 0000
  0x04 不满足(低 4 位为 0100)

第一轮(原文)
  F0 = 0x04 + 4 B      (4 为 2 的幂,0x04 对齐到 4)
  R  = 0x08 + 12 B     → 重入 Step 4

第二轮(推导:对 R 再次应用同一规则)
  F1 = 0x08 + 8 B      (0x08 对齐到 8)
  F2 = 0x10 + 4 B      (0x10 对齐到 4)

最终:[0x04..0x07] [0x08..0x0F] [0x10..0x13] = 4 B + 8 B + 4 B

依据:原文直接给出第一轮 4 B + 12 B,并明确第二个 fragment 会再次被本步骤拆分;第二轮为依同一规则的推导。[p.18]

转换前后

字段转换前Final fragments
Address0x040x04、0x08、0x10
Length16 B4 B、8 B、4 B
BurstINCRINCR × 3
Request count13
Re-entry–remainder 反复重入 Step 4

不切分的条件

若 Length 是 2 的幂且 Address % Length == 0,或 target 不要求 burst-aligned,则 4B 不改变 transaction。

Step 4C – minInterleaveSize

为什么需要

minInterleaveSize 描述 target 的 read response 交织粒度(以字节计)。它不是 target data word 宽度,也不是普通的 maximum burst size。当 target 的 minInterleaveSize 大于 wData/8,且 read burst 比该粒度更大、start 又未对齐时,initiator generic NIU 先把开头切到下一个 interleave 边界,避免一个 fragment 从粒度中间跨入下一个粒度。[pp.18–19, 51–52]

上述“切到下一个 interleave 边界”针对 INCR;WRAP 使用下文的单独规则。FlexNoC 5.5.0-1 参数定义把多-word interleave 支持限定在 AXI / ACE-Lite target NIU,因此本节 16-B datapath、64-B interleave 的教学例子假定 target 为 AXI / ACE-Lite。[pp.51–52]

可视化:16-B datapath,64-B interleave,读 0x30 + 96 B

F0 · 16 B
F1 · 80 B(0x40–0x8F,内含 0x80 粒度边界)
0x300x400x800x90

教学例子(依 pp.18–19 的约束构造):target datapath 16 B,minInterleaveSize 64 B,read Addr = 0x30,Length = 96 B(0x30..0x8F)。F1 内部的 0x80 是粒度边界,但 4C 只切一次,因此 F1 不会再被 4C 切分。教学例子

数值例子

展开数值过程
target datapath      = 16 B      (wData/8)
target minInterleave = 64 B      (> 16 B,满足 4C 条件)
read Addr            = 0x30      (未对齐到 64 B)
read Length          = 96 B      (0x30..0x8F,大于 64 B)

F0 = 0x30..0x3F = 16 B     (到下一个 0x40 边界为止)
F1 = 0x40..0x8F = 80 B     (重入 Step 4,不再因 4C 切分)

INCR 与 WRAP 的差异

  • INCR:第一段从 initial address 到下一个 minInterleaveSize 边界,其余为 remainder。
  • WRAP:第一段从 initial address 到 wrapping burst address(即 wrap 发生处),其余按 wrapped 地址顺序处理。原文没有给出 WRAP 的数值例子,本文不虚构 fragment 长度公式。[pp.18–19]

转换前后

字段转换前After 4C
TypeRead INCRRead INCR fragment
Addr / Length0x30 / 96 B0x30 / 16 B;0x40 / 80 B
Target word16 B不变
Interleave granularity64 B不变;不是 word 宽度
Re-entry–F1 重入 Step 4,但不再因 4C 切分

不切分的条件

  • write transaction:原文本小节只定义 read burst 的切分。
  • size ≤ minInterleaveSize。
  • start 已对齐 minInterleaveSize。
  • minInterleaveSize ≤ target word bytes:不满足“大于 datapath”的条件。

Step 4D – crossBoundary

为什么需要

保证每个 fragment 全部位于同一个合法的 protocol / mapping 段内。有效 boundary 取以下值中的最小者:target protocol boundary(AXI 为 4 KB,AHB 为 1 KB)、target generic crossBoundary、匹配 mapping 的大小、匹配 mapping 内最小 enclosed mapping 的大小。[p.19]

可视化

F0 · 0x3F0–0x3FF · 16 B
F1 · 0x400–0x40F · 16 B
0x3F00x400(1-KB 边界)0x410

原文例子:AXI initiator 发起,AHB target。AXI 的 protocol boundary 为 4 KB,AHB target 的 boundary 为 1 KB;有效 boundary 取较小的 1 KB,所以在 0x400 处切分。F1 重新进入 Step 4。[p.19]

数值例子

展开数值过程
Input: Addr = 0x3F0, Length = 32 B, effective boundary = 0x400
  0x3F0 + 32 B = 0x410,覆盖 0x3F0..0x40F

F0 = 0x3F0..0x3FF = 16 B
F1 = 0x400..0x40F = 16 B(重入 Step 4)

crossBoundary 与 maximum burst length 不是同一个约束

配置保证什么不保证什么
crossBoundary = 64 B每个 fragment 都留在一个 64-B 对齐的窗口内fragment 不一定正好 64 B
wLen1 = 6(最大 64 B)每个 fragment 的 length ≤ 64 Bfragment 不跨越 64-B 地址边界
wLen1 = 6 only:一个 64-B burst 0x30–0x6F(长度合法,但跨越 0x40)
F0 · 0x30–0x3F · 16 B
F1 · 0x40–0x6F · 48 B
0x300x40(crossBoundary = 64 B)0x70

降低 crossBoundary 会间接限制最大 fragment 尺寸,但“地址窗口约束”与“长度上限”不是同一个语义。[pp.20–21]

不切分的条件

若首字节与末字节落在同一个 effective boundary 对齐段内,4D 不切分。

Step 4E – target maximum burst size

为什么需要

target 的限制不仅是“有效 byte 不超过多少”,还包括“这些 byte 实际占用多少 target word”。起始地址不对齐时,N 个 byte 可能占用 ceil((offset + N) / target_word_bytes) 个 word,从而超过 target 在一个 burst 中能承载的 word 数。[pp.19–20]

Maximum 的来源与切分规则

  1. target mapping 的 maximum burst bytes 取以下限制的最小值(2 的幂):2^(target wLen1);该 initiator–target pair 在 Architecture → Datapath NIU → Splitting 中的字节上限;配有 reorder buffer 时的 read data buffer 上限(nBytePerReadDataBuffer)。
  2. 超限时,第一个 fragment 保持原起点,大小不超过 2^wLen1 字节,且其数据能放入 2^wLen1 / (wData/8) 个 target word;余下部分作为 remainder 重入 Step 4。

依据:pp.19–20, 50, 62–63。第 2 条中“能放入多少个 word”的限制,正是 Example 2 得到 112 B + 16 B 的依据。

可视化 1:Example 1 – 64-bit target,32-B maximum

F0 · 0x10–0x2F
F1 · 0x30–0x4F
F2 · 0x50–0x6F
F3 · 0x70–0x8F
0x100x300x500x700x90

原文例子:128 B 从 0x10 开始,目标为 64-bit 宽(8-B word,共 16 个 word);target 每个 burst 最多 32 B(4 个 word),因此恰好切成 4 个 fragment,起点分别为 0x10、0x30、0x50、0x70。[p.20]

可视化 2:Example 2 – 256-bit target,字节长度未超限,但占用的 word 超限

F0 = 0x10..0x7F(112 B,占 word0–word3);F1 = 0x80..0x8F(16 B,占 word4)。128 B 正好等于 target 的 maximum,但起点未对齐,占用了 5 个 32-B word,超过 4 个 word 的能力。[p.20]

展开数值过程
offset in first target word = 0x10 − 0x00 = 16 B
capacity through four words = 4 × 32 − 16 = 112 B   (F0)
remaining                   = 128 − 112   = 16 B    (F1)

不切分的条件

若覆盖的 target word 数 × word 字节数不超过 target mapping 的 maximum burst bytes,4E 不切分。对齐的起始地址通常更容易满足,但仍要检查 length 上限。

综合数值例子

下文的 Case C 给出一次 crossBoundary 切分之后又被 maximum burst 连续切分的完整递归树。关键原则是:每个 remainder 都按规则重新进入 Step 4,而不是只检查一次。[pp.18–20]

什么时候 Step 4 基本 1:1 pass-through

  • address decode 到唯一 target;
  • transaction 不跨越 protocol、generic 或 mapping boundary;
  • WRAP 在 target maxWrap 之内;
  • target 不要求额外的 burst alignment,或 transaction 已满足;
  • read interleave 条件不触发;
  • target-word occupancy 不超过 burst / data-buffer 限制。

设计意义

Step 4 把“initiator 发得出来”与“target 接得住”解耦:不同 protocol、不同 width、不同 address map、cache-line / DRAM-page boundary、QoS 仲裁粒度,都可以在 initiator generic NIU 转换为 target 可执行的 fragment。它也是 security 与可预测 decode 的边界:跨 mapping 的 request 不会沿用初始 mapping 的 security 属性去访问另一个 mapping。[pp.20–21]

04目标端:对齐与完整示例

Step 5 · 对齐 WRAP 起点

在 request 经 NoC 到达 target 之后,把 WRAP 的起始位置对齐到 target data word,解决 target 比 initiator 更宽时的 WRAP word framing 差异。

发生位置

Initiator Generic NIUStep 4 输出
→
request packet transport内容通常不变
→
Target Generic NIUStep 5:WRAP 对齐 · 分配 context
→
Target Specific NIUStep 6

依据:p.21;pp.73–75。Step 5 发生在 target generic NIU,不在 initiator 侧,也不在 fabric switch 中。

适用条件

条件是否转换
INCR否
WRAP,且 target word ≤ initiator word否(原文 NOTE:仅在 target data word 比 initiator data word 宽时适用)
WRAP,且 target word > initiator word可能:起始地址对齐到 target wrapAlign(约束为 target word 宽度)
Readrequest 对齐后,response data 需要反向对齐;需要 nRdWrapAligner 存储
Writewrite data 与对齐后的 request framing 保持一致(推导)

依据:pp.21, 74–75, 81。

关键配置

参数层级含义
wrapAlignSpecification → Interface → NIU → generic → Burst所有 wrapping burst 边界的最小对齐(字节);取值 None 或 0–128。Step 5 原文拼写为 WrapAlign,且约束为 target word 宽度。
target wDataSpecification → Interface → NIU → generictarget word 宽度;Step 5 的对齐粒度受其约束
nRdWrapAlignerArchitecture → Datapath NIU → NIU可同时挂起的、未按 target word 对齐的 WRAP read 数(默认 1,取值 1–4);每个需要临时存一个 data word

依据:pp.21, 48–49, 81。

maxWrap 与 Step 5 的关系

若 target 的 maxWrap 不超过 target 数据宽度,target 把 initiator 的 WRAP 当作 INCR 处理,不需要 wrap aligner 硬件;若 maxWrap 超过 target 数据宽度,且连接的 initiator 数据宽度更小,则至少需要一个 wrap aligner。[maxWrap 参数说明,pp.48–49]

转换前后

字段Before Step 5转换后:Step 5
BurstWRAPWRAP
Logical byte set不变不变
Initial addressinitiator 视角下的 WRAP 起点target 更宽时,对齐到 target wrapAlign
Data orderinitiator word framingtarget word framing;read response 之后再做逆对齐
Fragment count不变不变;Step 5 是对齐,不是 Step 4 的切分

可视化:32-bit initiator → 64-bit target 的 WRAP推导

target word @0x00(0x00–0x07)
target word @0x08(0x08–0x0F)· initiator 起点 0x0C
0x000x080x10
initiator 访问顺序:0x0C→0x00→0x04→0x08
target framing 起点:word @0x08→ wrap →word @0x00

推导例子:initiator word 4 B,WRAP4 总长 16 B,起点 0x0C;target word 8 B,wrapAlign = 8 B。原文确定了转换方向、target 更宽的条件、按 target word 对齐,以及 read data 需要临时存储与逆对齐;它没有给出逐 byte 的 RTL 重排。[pp.21, 74–75, 81]

数值例子教学例子

展开数值过程
Input to target generic NIU
  initiator word = 4 B
  target word    = 8 B
  WRAP length    = 16 B
  initial Addr   = 0x0C

转换后:Step 5
  target framing start = 0x08(8-B 对齐)
  wrap window          = 0x00..0x0F
  fragment count       = 不变

依据:原文 Step 5 文本没有数值例子(见文末歧义表第 7 条)。

保持原状的条件

  • INCR transaction。
  • target word 宽度不大于 initiator word 宽度。
  • WRAP start 已满足 target wrapAlign。
  • target maxWrap 不超过 target 数据宽度:WRAP 由 target 当作 INCR 处理,无需 wrap aligner(见上方提示)。
  • Step 4 已因 maxWrap 不足或为 None 而把 WRAP 转为 INCR fragment。

设计意义

只有 target 侧最终知道本地 target word framing 与 response 行为,因此 WRAP alignment 放在 transport 之后。推导若放在 initiator 侧,会过早绑定 target 的宽度,也不利于同一个 initiator 访问不同宽度的 target。

Step 6 · 对齐 target word

把 generic 的 byte-range transaction 转换为 target protocol 能表达的 word-aligned request,同时用 byte enable 保证“只有原有效 byte 被写入”。

发生位置

Target Generic NIUbyte address + byte length
→
Target Specific NIUStep 6:知道 AXI / OCP / AHB 的规则
→
Target socketprotocol address,SIZE / LEN / BE

必须等到 target specific NIU:AXI 允许 unaligned start,而 OCP 等 protocol 可能要求 word-aligned start;同一个 generic byte range 的合法 socket 编码并不相同。[pp.21–22]

适用条件

方面AXIOCP / word-aligned protocol
Start address可保留 unaligned start对齐(align down)到 target word 边界
Multi-beat sizeAMBA NIU 对多拍 transaction 使用 SIZE = word依 target protocol 的 word 表示
Last transfer可能取整到完整 target word若 length 必须是 word 数,则取整
Write validityWSTRB / byte enableMByteEn / MDataByteEn 等(支持时)屏蔽无效 byte
Read partialtarget 可被要求读取所在的 enclosing word / sub-wordresponse 路径只恢复原 transaction 所需的语义

依据:pp.21–22, 26–27, 185, 200–201。

关键配置

Step 6 本身没有统一开关。行为来自 target protocol 与该 socket 的 byte-enable 能力,例如 OCP byteen / mdatabyteen、AHB useBe。若 target 不支持相应的 byte-enable 模式,specific NIU 可能进一步 split 或报错,这属于 protocol-specific 的后续处理。[pp.21–22, 27, 107–110, 200–201]

转换前后原文例子

原文例子:32-bit AXI initiator 发出 cacheable RD narrow burst,4 beats × 1 B,从 0x1 开始、结束于 0x4,目标为 32-bit AXI target。

字段Socket(narrow RD)Target-facing:AXI targetTarget-facing:OCP target(原文提及的替代情形)
Start address0x10x1(保持)0x0(改为 word 对齐)
Beats4 × 1 B2 × 4 B(SIZE = word)原文未展开
End of burst0x4取整到 0x7原文未单列
Write(若为 WR)的 BE–0x5–0x7 的 BE 为 00x0 的 BE 为 0

依据:p.22,Step 6 原文例子。

可视化:word 对齐与 byte enable教学例子

32-bit 对齐 target,WR,Addr = 0x1,Length = 6 B(有效 byte 为 0x1–0x6)。

word @0x0 · 4 B
0x0x
0x1B0
0x2B1
0x3B2
BE[3:0] = 1110
word @0x4 · 4 B
0x4B3
0x5B4
0x6B5
0x7x
BE[3:0] = 0111

representation 扩大到 0x0–0x7(8-B container),但实际有效 byte 仍是 0x1–0x6(6 B)。灰色 x 为 BE = 0 的位置,不写入。BE[3:0] 的最高位对应该 word 中地址最高的 byte。

数值例子教学例子

展开数值过程
输入(generic transaction)
  opcode      = WR
  Addr        = 0x1
  Length      = 6 B
  target word = 4 B

Target request word 0
  Addr        = 0x0
  Data bytes  = [x, B0, B1, B2]
  BE[3:0]     = 1110

Target request word 1
  Addr        = 0x4
  Data bytes  = [B3, B4, B5, x]
  BE[3:0]     = 0111

推导:BE bit 0 对应该 word 的最低 byte 地址。原文规定了首尾取整规则与 write BE 保留有效 byte;本例是这些规则的直接数值展开。[pp.21–22, 26–27]

保持原状的条件

  • target protocol 允许当前的 unaligned address,且 length / size 可直接表达:AXI 是原文给出的 start-address 例外。
  • start 已 word 对齐,且 length 是完整的 target word 数。
  • transaction 只占一个 target word,且 protocol 编码与 BE 已能直接表达:可能只改变编码,不扩大有效 byte 集合。

设计意义

  1. transaction representation 被对齐 / 取整:target 看到的是 word container。
  2. 实际有效 byte 被访问:write BE 决定哪些 byte 真正写入。

扩大 representation 不等于多写数据。若 target 不支持 BE,则要参考 target-specific 的 partial-access 规则,可能进一步 split 或报错,不能假设无效 byte 会自动安全。[pp.22, 26–27]

一个端到端例子

为什么不让一个 transaction 强行触发全部六步

  • Step 2 / 3 针对 AHB / OCP initiator 的 imprecise / MRMD;AXI initiator 通常直接 bypass。
  • Step 5 只处理 WRAP;Step 4 的 crossBoundary + maximum burst 更适合用 INCR 来说明。
  • AXI 协议要求 burst 不跨越 4 KB 边界,原文 p.19 也把 AXI 的 protocol boundary 取为 4 KB。把 AXI burst 构造为跨 4 KB,属于非法输入,不能用来换取“全部触发”。

因此本例选择合法的 AXI narrow INCR write,触发 Step 1、Step 4 与 Step 6;Step 2、3、5 明确 bypass。教学例子

Configuration

Initiator socketAXI;data width 128 bit = 16 B;narrow support enabled
Input writeAddr = 0x34;AxSIZE = 2(每 beat 2² = 4 B);AxLEN + 1 = 20 beats;Burst = INCR;有效范围 0x34..0x83 = 80 B。假定 AxCACHE[1] = 1、forceSplitNarrow = False、所有 payload byte 的 WSTRB 有效,且其余 mapping / target 约束不追加切分。
Target socketOCP SRMD;data width 256 bit = 32 B;INCR 支持;write byte enable 支持;crossBoundary = 64 B;maximum burst = 64 B

该 AXI burst 没有跨越 4 KB 边界,且每个 4-B beat 自身对齐,因此输入合法。

逐步可视化

① AXI socket · 20 × 4-B beat · 0x34–0x83(80 B)
0x34 至 0x83 · 80 B(20 个 4-B beat)
② Step 1 后 · generic 16-B word 容器(6 个)· 有效范围不变
@0x30
@0x40
@0x50
@0x60
@0x70
@0x80
③ Step 4 后 · 三个 fragment(边界 0x40、0x80)
F0 · 12 B
F1 · 0x40–0x7F · 64 B
F2
0x340x400x800x84
④ Step 6 后 · OCP 32-B target word(深色 = 有效 byte,浅色 = 容器中的无效部分)
T0 · word @0x20(32 B)· 单-word INCR
地址从左到右递增;高 12 B 有效(0x34–0x3F)
T1 · word @0x40 + @0x60(64 B)· 2-word INCR
有效 64 B(0x40–0x7F)
T2 · word @0x80(32 B)· 单-word INCR
低 4 B 有效(0x80–0x83)

规则依据分别来自 Step 1、Step 4D / 4E、Step 6 与 partial access / byte enable 章节;原文没有给出这一组合的数值例子。教学例子

流水表

StageAddressLength / validSize / wordBurst# fragments / requestsData beats / words说明
Socket input0x3480 B4-B narrow beat on 16-B AXIINCR120 beats合法的 AXI narrow burst
转换后:Step 10x3480 B16-B generic word 容器INCR1跨 6 个 wordnarrow 已打包;有效范围不变
转换后:Step 2同上同上同上同上1同上AXI 已 precise,bypass
转换后:Step 3同上同上同上同上1同上AXI 已是单 request,bypass
转换后:Step 40x34;0x40;0x8012 B;64 B;4 B已考虑 target 能力INCR × 33逻辑 fragment在 64-B 窗口处切分;max 64 B 也满足
转换后:Step 5同上同上同上INCR × 33同上非 WRAP,bypass
转换后:Step 60x20;0x40;0x8032-B 容器;64 B;32-B 容器32-B OCP wordINCR;MBurstLength = 1、2、131 + 2 + 1 = 4BE 保留 12 + 64 + 4 个有效 byte
Target socket同 Step 6精确 80 个 byte enabled256-bit同上34没有多写 byte

推导:Step 6 的 32-bit BE 掩码可写为 T0 @0x20:BE[31:0] = 0xFFF00000(0x34..0x3F);T1 @0x40:0xFFFFFFFF;T1 @0x60:0xFFFFFFFF;T2 @0x80:0x0000000F(0x80..0x83)。原文没有给出这一组合例子。[pp.16–22, 26–27]

三个典型场景

Case A – 普通 AXI INCR:大多数 transaction 不会被大改 教学例子

AXI64 initiator → AXI64 target:Addr = 0x100,8 beats × 8 B,Length = 64 B,INCR;target maximum burst ≥ 64 B,且无 mapping / boundary crossing。

Step 1 bypass(不是 narrow) Step 2 bypass(AXI precise) Step 3 bypass(单 request) Step 4 decode,1 target,无切分 Step 5 bypass(INCR) Step 6 已对齐,AXI 表示不变

结果:1 个 socket transaction → 1 个 target transaction。这对应原文 “most transactions are not altered during steps 1 to 3” 的正常路径;Step 4 仍执行 decode,只是结果为 1:1。[p.16]

Case B – 非对齐 WRAP + 宽度转换 教学例子

AXI32 initiator 发出 WRAP4:4-B beat,start = 0x0C,total = 16 B;target 为 OCP64。

Step 1 bypass(SIZE = initiator word) Step 2 / 3 bypass Step 4:target 支持 16-B WRAP,不切分 Step 5:起点 framing 到 0x08 Step 6:起点已 8-B 对齐

target 顺序:word @0x08 → wrap → word @0x00。Step 5 做与 width 相关的 WRAP framing;Step 6 检查 target protocol 编码,但在这个例子里不再追加变化。[pp.21, 73–75]

Case C – crossBoundary + maximum burst 连续切分 教学例子

输入 INCR:Addr = 0x70,Length = 160 B(0x70..0x10F),crossBoundary = 128 B(边界 0x80、0x100),max burst = 64 B。

  1. Step 4D(第一次):F0 = 0x70 + 16 B(到 0x80);R0 = 0x80 + 144 B,重入。
  2. Step 4D(对 R0):F1 = 0x80 + 128 B(到 0x100);R1 = 0x100 + 16 B,重入。
  3. Step 4E(对 F1):F1a = 0x80 + 64 B;F1b = 0xC0 + 64 B。
F0 · 16 B
F1a · 64 B
F1b · 64 B
R1
0x700x800xC00x1000x110

Interpretation(推导):该数值组合是教学例子;递归行为、boundary 优先的概念顺序与 remainder 重入来自原文 Step 4。[pp.18–20]

05响应恢复与工程参考

切分后的响应恢复

总流程

原 transaction T0socket request
→
F0 / F1 / F2 …request fragment
→
target / error pathR0 / R1 / R2 …(response)
Generic Initiator NIU匹配 pending context;必要时 reassemble;恢复 word / data 顺序;汇总 response status
→
Specific Initiator NIU转换为 AXI / AHB / OCP socket response;协议需要时 SRMD → MRMD
→
T0 的 responsesocket 只看到原 transaction

依据:pp.42, 57, 62–63, 74–75, 206–207。

Split 对 initiator 是否可见

通常 split 是 NIU 内部行为:socket initiator 仍看到原 transaction 的 protocol-level completion / data stream,而不是 Step 4 的 fragment 列表。特例是 protocol 本身的逐 transfer response framing,或 early response policy;但不能把 packet / fragment 数直接当作 socket transaction 数。[pp.57, 61, 206–207]

Transaction ID / context 的作用

  • initiator generic NIU 跟踪 pending transaction,以及 flow / sequence / route 的顺序关系。
  • target generic NIU 为通过 request-processing 阶段的 transaction 分配 context,用于 response 的 header / context 查找。
  • reorder buffer 在分配 buffer 时为 request 分配唯一的 sequence ID,并按 socket ordering 要求重新发出 response。[pp.62–63]
  • data reassembly buffer 专门处理小于 initiator datapath word 的 read response fragment。

Not specified原文没有公开 Step 4 fragment 与原 transaction 关联所用的全部内部 RTL 字段名。因此本文只使用“transaction context / flow / sequence / route bookkeeping”,不发明私有标识符。[pp.56–57, 62–63, 73–75]

Read data 如何恢复

若 split fragment 小于 initiator wData,或 target 可以在更细的粒度上交织 response,initiator NIU 需要 reassembly buffer,把 response fragment 拼成 initiator word。buffer 数量由 nReassemblyBuffer 决定,分配策略由 reassemblyBufferAllocation 决定(None / Per transaction / Per OrderId);每个 pending transaction 最多一个 data reassembly buffer。[pp.57, 62]

WRAP 在 Step 5 realign 之后,target generic NIU 的 response 路径还要用临时存储做 read data 的逆对齐;nRdWrapAligner 限制可同时挂起的这类 read 数量。[pp.74–75, 81]

Write response 如何恢复

  • 对没有 early response 的 SRMD write:若任一 split fragment 报错,原 socket write response 为 error;若各 fragment 的 error code 不同,采用最先收到的 error code。[p.42]
  • target specific NIU 把一个 generic transaction 继续拆成 MRMD 时,会聚合 target 的 write status,在最后一个 response 到达后再向 generic NIU 发出 write response。[pp.22, 42]
  • Early-responded write 是例外:socket 已经提前得到 completion,之后到达的 NoC / target error 不能再作为该 socket response 上报。[p.42]

Read error 如何聚合

read error status 以 initiator response word 为粒度聚合:若某个 request 或 fragment 报错,与之关联的 response word 都报告 error;同一个 initiator word 收到不同 error code 时,使用最先收到的 code。发生 error 时 read data 的值不保证。[p.42,“In-band error aggregation and reporting”]

Reassembly 与 reorder buffer 不要混为一谈

机制主要问题典型资源
Response reassemblyfragment 小于 initiator word,需拼回完整 word / byte 顺序nReassemblyBuffer、reassemblyBufferAllocation
Reorder buffertarget 的 response 可能乱序,但 socket 要求按 protocol ordering 发回read / write buffer、unique sequence ID、nBytePerReadBuffer

两者可能同时存在:一个解决“拼数据”,另一个解决“发出顺序”。[pp.57, 62–63]

六步处理速查

Step典型 triggerAddressLengthBurst type# requestsRead / Write 差异
1 Narrow packingASIZE < initiator wordstart 保持beats × ASIZE → byte length通常保持通常 1;例外按 beat splitwrite 保留 BE;read 之后可能取整
2 Precise splitimprecise AHB / OCP各 fragment 地址依次后移(按 split 粒度)固定到 split 粒度通常 INCR增加read prefetch;write BE = 0 padding
3 MRMD → SRMDAHB / OCP MRMD 多-wordfirst address 保持汇总总 bytes保持request phase 减为 1data word 全部保留
4 Target splitdecode / wrap / align / boundary / maxfragment 起点改变分割WRAP 可转 INCR1 → NminInterleaveSize 规则专指 read;其余多数读写相同
5 WRAP aligntarget 更宽 + WRAP对齐到 target word保持WRAP保持read 需要逆对齐 buffer;write data 同步旋转
6 Word aligntarget protocol 要求可 align down可 round up依 target 编码通常保持;后续 Step 7 可再变write 用 BE 屏蔽;read 可能扩大 target 侧的 read 表示

常见误解

误解正确说法
narrow packing 就是 initiator / target width conversion它先解决同一 initiator interface 上 ASIZE < word width 的 narrow 表示;target 宽度在 Step 4–6 才参与。
crossBoundary = 64 等价于 wLen1 = 6前者限制 64-B 对齐的地址窗口;后者只限制 length ≤ 64 B。
Step 6 round 到两个 word 就会多写 bytewrite BE 可以让 container 外围的 byte 无效;representation 扩大不等于有效写入扩大。
split 一次后就结束多个子规则明确要求 remainder / fragment 重新进入 Step 4。
128-B request、target max 128 B,所以一定不 split若起始地址不对齐,可能占 5 个 target word,超过 4-word 能力。
minInterleaveSize 就是 target word width它是 response interleave 粒度,可以是 word、0,或 word 的更大 2 的幂倍数。
split fragment 数就是 initiator 看到的 transaction 数NIU 在 response 路径上 reassemble / aggregate,通常对 socket 隐藏内部 fragmentation。
Step 6 是所有 target 的最后一步原文 p.22 还有 Step 7;burstless / MRMD / limited-burst target 可以继续转换。

文档歧义与未明确项

#位置原文现象本文处理
1p.17Step 1 的说明写作 “Step 5: Word alignment”,但链接与标题指向 Step 6(p.21)使用 Step 6(与实际标题一致)
2p.18Step 4 概要行写 wLen,正文与参数定义使用 wLen1使用 wLen1 作为字节上限参数
3p.19 / p.63 / p.69nBytePerReadDataBuffer(p.19)与 nBytePerReadBuffer(p.63 使用,p.69 定义)拼写不同Not specified:原文未说明是否为 alias;两种拼写都保留并标注
4p.16forceCacheable 与 AHB / AXI 一并列在 Step 1 概要中,但 protocol-specific 参数只为 AHB 定义只按 AHB 处理,不套到 AXI
5p.21 / p.48Step 5 写作 WrapAlign,参数定义写作 wrapAlign使用 wrapAlign;引用 Step 5 原文时保留 WrapAlign
6p.22Step 6 之后还有 Step 7(Burst splitting / SRMD → MRMD)报告范围以 Step 1–6 为主线,并在开头披露 Step 7 边界
7Step 5原文没有 Step 5 的数值例子32 → 64-bit WRAP 图标为 Interpretation,数值为教学例子
8Step 4原文未公开 Step 4 fragment 与 parent transaction 的完整内部 context 字段名Not specified:不以 RTL 常识补造字段名

来源:Arteris《NIU Transaction Handling》,FlexNoC 5.5.0-1。文内页码指向该版本。本文按用户提供的工程教程整理;推导与教学例子均保留标记,不构成 RTL 或运行时证明。

数值示例