BLOG

Record, summarize, and improve.

gem5建模

gem5 可以模拟多种计算机体系结构,包括处理器、内存、缓存、互连网络等,以及它们之间的相互作用。以下是 gem5 主要模拟的内容:

  1. 处理器架构: gem5 可以模拟多种处理器架构,包括 x86、ARM、RISC-V 等。这些处理器可以是单核或多核的,gem5 支持不同的指令集和微架构特性。
  2. 内存层次结构: gem5 可以模拟处理器的缓存层次结构,包括 L1、L2、L3 缓存等。研究者可以使用 gem5 来评估不同的缓存策略、一致性协议和内存访问模式。
  3. 内存系统: gem5 支持对内存系统的建模,包括主内存、内存控制器和内存总线。这使得用户可以研究内存性能、带宽、延迟等方面的影响。
  4. 互连网络: 在多核系统中,gem5 允许对处理器之间的互连网络进行建模,以研究通信延迟、带宽以及网络拓扑结构的影响。
  5. 功耗和能耗: gem5 可以模拟处理器和系统的功耗和能耗,帮助研究者评估不同的能源管理策略和优化方法。
  6. 指令级仿真: gem5 支持指令级的仿真,可以用于执行特定的程序,以便分析程序的行为、性能和资源使用情况。
  7. 系统性能评估: gem5 提供了丰富的性能度量和统计信息,帮助研究者评估不同的硬件和软件配置对系统性能的影响。

  1. 架构设计,先实现具体的DMA controller类(考虑DMA controller关联的其他模块),之后实现python脚本的调用,
  2. 实现具体的指令

class AddrMapper : public SimObject

  • class AddrMapperSenderState : public Packet::SenderState
  • class MapperRequestPort : public RequestPort
  • class MapperResponsePort : public ResponsePort

class StcSysDMA : public BasicPioDevice

  • dma_desc_t
  • StcSysDMAChannel

control bus

data bus

DMA建模

Image in a image block
  • DMA负责在LLB和DDR之间进行数据传输。
  • 每个bank有两个DMA控制器,每个控制器有两个独立channel。
  • DMA控制器通过noc网络访问DDR和LLB。
  • LLB0和LLB1通过地址进行区分,原则上不建议单次DMA transfer中访问多个LLB。

LLB→DDR

DDR→LLB

DDR→DDR

LLB→LLB

Image in a image block
  • 一个controller有两个DMAchannel
  • 每个channel结构如上图
    • channel内有一个读port,一个写port
    • 读取的数据放入缓冲FIFO中,FIFO大小为80*64byte, 写port从FIFO中读取数据写入目标内存
    • 两个port如果访问内存地址为512bit对齐,则使能burst

gem5中的类

  • class StcSysDMA:
    • 定义DMA controller用到的全部寄存器。
    • 定义DMA channel的结构struct StcSysDMAChannel,以及实现控制器内多个DMA channel。
    • 实现read(); write()方法,实现了目标软件读写寄存器时对应的硬件响应。
  • struct StcSysDMAChannel:
    • 定义channel的读写port
    • 定义channel的状态机
    • 定义并实现读写FIFO的控制逻辑
    • 实现start(); prepare(); copy(); finish();方法
  • class FifoBuffer
    • 实现了FIFO对读写数据的空间限制
    • 将读写数据操作隔离,根据读写各自数据包大小发送请求
classDiagram
class StcSysDMA{
		channel_<StcSysDMAChannel>[]
		dma regs
}
class StcSysDMAChannel{
    rport<MasterPort>
    wport<MasterPort>
    fifoBuffer
}
class MasterPort
class FifoBuffer

StcSysDMA --|> StcSysDMAChannel : channel
StcSysDMAChannel --|> MasterPort : rport / wport
StcSysDMAChannel --|> FifoBuffer : fifoBuffer

read

sequenceDiagram
readAction->>Read_transmitList:push List
Read_transmitList->>fifoQueue:sendReadRequest
fifoQueue->>fillMark:recvReadResponse
fillMark->>fillMark:generateWriteRequest
fillMark->>Read_transmitList:pop List

write

sequenceDiagram
writeAction->>Write_transmitList:push List
Write_transmitList->>fillMark:check writeRequest
fillMark->>Write_transmitList:sendWriteRequest
Write_transmitList->>Write_transmitList:recvWriteResponse
Write_transmitList->>Write_transmitList:pop List

DMA从传输事务包含一系列的给定数目的数据传输序列。传输的数目可以通过软件编程,8位,16位或32位。

每一次DMA传输包含3个操作

  • 通过 DMA_SxPAR 或 DMA_SxM0AR 寄存器寻址,从外设数据寄存器或存储器单元中加载数据。
  • 通过 DMA_SxPAR 或 DMA_SxM0AR 寄存器寻址,将加载的数据存储到外设数据寄存器或存储器单元
  • DMA_SxNDTR 计数器在数据存储结束后递减,该计数器中包含仍需执行的事务数

在产生事件后,外设会向 DMA 控制器发送请求信号。 DMA 控制器根据通道优先级处理该请求。只要 DMA 控制器访问外设, DMA 控制器就会向外设发送确认信号。外设获得 DMA 控制器的确认信号后,便会立即释放其请求。一旦外设使请求失效, DMA 控制器就会释放确认信号。如果有更多请求,外设可以启动下一个事务

背景

建模是一个手段,不是目的,用于

  • 架构探索
  • 性能优化

建模的两大派系

  • systemc,需要自己打造组件库,运算较慢
  • gem5,

建模分类

  • 功能建模,简单、基础
    • 硬件验证,需求>IC设计(IC设计就是一个建模的过程)
    • 架构探索,核心竞争力之一,更具有持续性
  • 性能建模

NPC:核内sram

LLB:多核共享sram

GDDR6

标量→向量→矩阵

custom vme

custom_bc mme

tcp mte