# 仿真建模

# 建模的方法

## 使用python语法进行module的定义

1. python语法用来描述module之间的关系和
2. 定义latch的存储器
3. 定义module的算法和输入输出
4. 配置一些固定的规格参数

## 针对throughput和latency的建模

1. 传递的标准信息都是 inst
2. 定义一个通用的TL（throughput latency）的Module
    1. 支持配置 thread 通道数量
    2. 处理inst的latency
    3. 处理inst的throughput：输入的通道的数量，输出的通道数量
    4. 内部stand-by的容量
3. TL可以被递归的进行组合
4. TL可以通过简单的python脚本定义输入和输出inst的转换规则
5. 激励是一种特殊的Module
6. TL可以支持自动的生成统计信息和time line图标

### 基于生产和消费的硬件模型抽象

1. 定义资源，生产，消费的抽象
2. 内置抽象功能的仿真：**容量**，**带宽throughput**，**规格**，**延迟latency**，**功耗**
3. 支持建立资源的依赖关系
4. 内置的调度算法支持：轮询、贪心、自动调度探索的算法
5. 用于仿真评估的现成运行库、工具库
6. 定义
    1. 对象的生产
    2. 对象的缓存、处理、转换、调度、流转
    3. 对象的消费
7. flow plan，Place and router 规划
    1. 完全抽象后是可以求解一个方案，但是把所有的因素都考虑进去很慢
    2. 建模抽象，不能只是一个计算器，而是要能做到抽象的抽象，怎么快速得对问题进行分析？？
    3. 建模过程：
        1. 定义工厂，生产和消费的产品以及速度，每个工厂就是一个硬件模块，并行工作
        2. 定义产品，产品可以分大小，工厂消费不同大小的产品
        3. 总线1：工厂「生产一个数据，消费一个数据」
        4. 总线2：工厂「生产一个数据，消费一个数据」
        5. 总线3：工厂「生产一个总线1，消费一个总线2」

## 微架构建模

1. 延迟模型
    1. 发送请求，固定延迟，返回请求
2. 硬件资源竞争
    1. 存储器的深度/credit/valid
    2. 地址相关的bank，读写口竞争，structure harzd
    3. RAW、WAW等 Data harzd
    4. 数据流模拟：cache line
    5. 优先级
3. 算法
    1. 调度算法

## 数字电路仿真的抽象要素Logicsim

1. 状态 Latch
2. 并行 Launch
3. 指令 Status
    1. ISA/UISA 作为module之间传递信息的抽象
    2. 记录各种状态的信息，状态信息的移动