Skip to main content

抽象建模的方法

芯片设计各个层级的信息(Stage)

  1. 架构设计
    1. ISA设计
    2. Memory、Cache的存储系统设计
    3. 1D/2D,DMA,等关键性能相关Feature的规格和行为设计
  2. 微架构设计
    1. 指令通道的拆分和调度的方法和拆解
    2. UISA设计
    3. 规格的设计
      1. bank的数量
      2. 读写口的数量
      3. 各级buffer的深度和竞争
  3. 按照Arch的设计,完成了所有微架构设计,形成微架构的Design Spec
  4. 按照Spec定义完成coding的RTL
    1. 完成流水线的切分
  5. PPA优化后的RTL

硬件流水建模表达的方式

  1. 按照流水线的pipeline切分来建模(竖向切分)
    1. 每一级流水线是一个或这个多个module
    2. 一个module里面可能包含多个feature spec定义的功能
    3. 需要信息 stage4
    4. 和RTL实际的效果比较接近
  2. 按照一个功能的需求来拆分(横向切分)
    1. 一个module可能包含多级流水线
    2. 一级流水可能包含多个module
    3. 需要信息 stage2/stage3
    4. 按照微架构要求来设计
      1. 指令发射的带宽
      2. L1访问的带宽限制和Latency
    5. 按照规格的设计来建模
      1. bank的数量限制
      2. 读写口的数量限制
      3. 各级buffer的深度和竞争
    6. 和架构、微架构的理论设计比较接近
  3. 混合以上两种

通用的架构层级(功能模型)的建模抽象方法

  1. 把功能模型表达成唯一的一个大的循环体
  2. 等价于只有一级流水线的微架构,就是一个最简单的module
  3. 每次循环表示执行一次功能
    1. 模块的输入输出是latch抽象的数据结构
    2. 每次执行都需要从input get,执行功能后,set output
  4. 前后两次循环执行之间保证顺序

架构和微架构的统一建模设计

  1. ISA DSL
    1. ISA仿真的实现
      1. 每次循环执行一条指令
      2. 不同的指令执行不同的功能
      3. 前后两次之间完全独立,保序
    2. ISA的功能定义采用DSL定义和打包,便于仿真和RTL工程统一
    3. ISA足够稳定和简单,很容易被拆分成固定的几个operator:读写寄存器、读写存储器
    4. 对指令定义的方式进行封装成通用的接口
    5. 功能模型通过构建一个由operator组成的**“计算图”**进行表达微架构可以识别每个operator的执行条件,控制每个operator的执行时机
  2. DTE
    1. 定义DTE的OP作为功能的基本拆分
    2. 每次循环完成一个OP
    3. 前后两次之间完全独立,保顺

对微架构的资源进行抽象

  1. 从微架构的设计层面建模,而不是实现层面(RTL)
  2. 微架构的硬件资源的抽象
    1. 存储器的读写口、Bank、发射带宽、接收buffer深度
    2. Credit资源
  3. 定义operator的微架构行为
    1. 获取微架构资源
    2. 计算、处理、算法
    3. 持续通过1和2表达整个计算图
  4. 把微架构的竞争、资源进行抽象后,剩下的就是带宽(throughput)和延迟模型(latency)

在功能模型上使用微架构的资源

  1. 在定义功能模型的时候,可以通过使用已经定义的微架构资源Operator来表达功能模型
  2. 运行引擎会自动trace功能模型的Operator组成计算图给微架构进行建模
  3. 可以使用通用的TL(Throughput&Latency)模型来运行功能模型,从而对功能进行性能建模
class module(): # 表示一个复杂状态机
  input # 输入的latch
  output # 输出的latch
  local logic # 本地的状态信息
  def Pipeline(): # 流水线:状态机的转换逻辑,本质上是一个计算图
    Delay(1)
    input.get()
    input.get()
    MicroArch_Operator1()
    MicroArch_Operator2()
    output.set()
    input.get() 
    MicroArch_Operator3()
    output.set()

总结

  1. 芯片的设计建模可以拆分成3个层面的表达
    1. 架构、算法、指令的表达
    2. 硬件微架构的资源限制
    3. 硬件的固定规格和延迟
  2. 不用层面的表达可以被整合成一个