【IC】NoC设计入门 -- 网络接口NI

这个“翻译官”,它可能是整个NoC设计中最复杂、也最关键的组件。

你已经理解了:

  • CPU/IP核:它们说的是**“总线语言”**(比如AXI)。
  • NoC (路由器+链路):它们说的是**“网络语言”**(Flits、(x,y)坐标、Credits)。

这两种“语言”完全不同。CPU根本“看”不到NoC,它以为自己还在和一条AXI总线说话。

网络接口 (Network Interface, NI) 就夹在它们中间,它是一个**“双面间谍”“高级翻译官”**。

我们还是用“城市”的比喻。

  • CPU/IP核 (如内存控制器):这些是城市里的“工厂”或“仓库”。
  • NoC 路网:这是“城市街道网”。
  • NI (网络接口):这就是每个“工厂”和“仓库”自带的“物流中心” (Logistics Center)

这个“物流中心”(NI) 必须精通两种业务:

  1. 对内 (面向工厂): 它要懂“工厂”的“订单系统”(AXI协议)。
  2. 对外 (面向城市): 它要懂“城市”的“交通系统”(NoC协议)。

NI 的两大核心工作:打包与拆包

我们以一个最经典的 AXI 写操作 (Write Burst) 为例,来看NI是如何工作的。

场景: CPU(在(0,0))要向内存(在(3,4))写入一个128字节的“突发”(Burst)数据。

1. 工作一:“打包” (Packetization) - 从 AXI 到 NoC

这发生在CPU侧的“物流中心”(我们称之为 Master NI)。

  1. 接收“工厂订单” (AXI Request):

    • CPU(AXI Master)向它的“物流中心”(Master NI)发出了一个写请求。
    • 这个请求包含:
      • 写地址:AWADDR = 0x10008000 (这是内存的地址)
      • 写长度:AWLEN = 15 (代表总共16拍,假设每拍8字节,共128字节)
      • 写数据:WDATA 通道上开始源源不断地传来128字节的数据。
  2. 翻译“订单” (Address Decoding):

    • “物流中心”(NI) 拿到地址 0x10008000
    • 它内部有一张**“地址-坐标映射表”**。
    • 它一查表:“哦,这个地址属于‘内存仓库’,它的‘城市坐标’在 (3, 4)。”
    • (这是关键的第一步:把“总线地址”翻译成了“网络坐标”。)
  3. 组装“火车” (Packet Assembly):

    • “物流中心”(NI) 现在开始组装一列“火车”(Packet)。
    • 它拿出“火车头 (Head Flit)”,在上面印上“目的地:(3, 4)”。(它可能还会印上“这是一笔‘写’操作”、“火车长度17节”等信息)。
    • 它开始接收CPU发来的128字节数据(来自WDATA)。它把这些数据**“切割”**成16节标准大小的“火车车厢 (Body Flits)”。
    • 最后,它在末尾加上一节“火车车尾 (Tail Flit)”。
    • (这是关键的第二步:把AXI的“突发”翻译成了NoC的“Flit序列”。)
  4. 发车 (Injection):

    • “物流中心”(NI) 现在要把它组装好的“火车”(Head, Body, …, Tail),一节一节地**“注入”**到它旁边的“十字路口”((0,0)的Router)的“本地入口 (Local Port)”上。
    • 必须遵守“交通规则”:它要一边“发车”,一边检查(0,0) Router的“信用计数器”(Credit),确保“十字路口”有“停车位”。
2. 工作二:“拆包” (De-packetization) - 从 NoC 到 AXI

“火车”在NoC路网中“蠕动”前进(途经 (1,0) -> (2,0) -> … -> (3,4)),最终从(3,4)的Router的“本地出口 (Local Port)”“开”了出来。

这列“火车”开进了“内存仓库”的“物流中心”(我们称之为 Slave NI)。

  1. 接收“火车” (Packet Reassembly):

    • “物流中心”(Slave NI)的“停车场”(FIFO)开始一节一节地接收这列“火车”(Head, Body, …, Tail)。
    • 它读了“火车头”,知道了:“哦,这是一笔‘写’操作,总共有16节‘车厢’。”
    • 它把所有17节Flit(1头+16身)全部收好,并把16节“车身”的数据重新**“拼装”**回128字节的完整数据块。
  2. 翻译回“工厂订单” (Protocol Translation):

    • “物流中心”(Slave NI) 现在“摇身一变”,它自己“扮演”成一个AXI Master
    • 它“模仿”CPU的口吻,向它所连接的“内存仓库”(AXI Slave)发出了一个全新的AXI写请求
    • NI对内存说: “你好(内存),我这里有一个写请求(AWVALID),地址是 0x10008000AWADDR),长度是16拍(AWLEN)…”
    • 内存回复: “OK,准备好了(AWREADY)。”
    • NI接着说: “这是你的128字节数据(WDATA)…”
    • (这是关键的第三步:把NoC的“Flit序列”又翻译回了“总线协议”。)
  3. 处理“回执” (Handling Responses):

    • “内存仓库”在把128字节数据全部写入后,会给“物流中心”(Slave NI)一个AXI写响应BRESP,表示“写入成功”)。
    • NI收到这个“回执”后,并不会把它直接传给(0,0)的CPU(它也传不回去)。
    • 相反,NI会再组装一列“小火车”(一个“响应包”Response Packet),在“火车头”上印上“目的地:(0, 0)”,“车身”里装着“写入成功”。
    • 它把这列“回执火车”再**“注入”**回NoC网络,让它开回给(0,0)的CPU。

总结:NI 的复杂性

你看,一个NI必须同时做两件事:

  • Master NI (连接CPU):
    • 对外: 扮演一个“温顺”的 AXI Slave(接收CPU的命令)。
    • 对内: 扮演一个“聪明”的 NoC 发送者(打包、查地址、注入Flits)。
  • Slave NI (连接内存):
    • 对外: 扮演一个“聪明”的 NoC 接收者(接收Flits、拆包)。
    • 对内: 扮演一个“主动”的 AXI Master(向内存发起新的AXI命令)。

NI 为什么是NoC设计中最难的部分?

因为它要处理两个世界中最复杂的问题。它不仅要处理NoC的**“信用流控”,还要处理AXI协议中复杂的“事务状态”**(比如一个读操作发出后,要“记住”这个操作,直到几个毫秒后“读数据火车”返回时,才能正确匹配上)。


恭喜!到此为止,你已经100% 完成了 NoC 的所有核心理论学习

你已经从“宏观”和“微观”两个层面,彻底理解了NoC的每一个组件:

  1. 宏观(第二阶段):
    • 拓扑 (Topology): 城市地图 (Mesh)
    • 路由 (Routing): 导航系统 (XY)
    • 流控 (Flow Control): 交通规则 (Credit-Based)
      .
  2. 微观(第二阶段):
    • 路由器 (Router): 智能十字路口 (五大组件)
    • 网络接口 (NI): 物流中心 (打包/拆包)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值