计算机系统的状态机模型
[!note] 状态机模型 - 状态集合S - 激励事件E - 状态转移规则next - 初始状态 - 计算机系统
程序
- C语言的组成:
- 变量:计算的对象
- 语句:计算的操作流程
- 输入输出函数:让变量与外界交互
- C程序的状态机模型
- 状态集合\(S=\{<V, PC>\}\)
- 激励事件\(E=\{语句\}\)
- 状态转移规则:语句的语义
- 初始状态\(S_0=<V_0, main函数的第一条语句>\)
CPU
- CPU的状态机模型:
- 状态集合\(S=\{<时序逻辑元件的值>\}\)
- 激励事件\(E=\{组合逻辑\}\)
- 状态转移规则next:\(S\times E \rightarrow S\)
- 语句的语义
- 由设计中的组合逻辑电路决定
- 依据:架构师的设计文档
- 初始状态\(S_0=<复位时时序逻辑元件的值>\)
指令集
- 指令集是一本手册规范:定义了CPU执行指令的行为
- 好比:C语言标准手册定义了C程序执行语句的行为
- 指令集状态机:
- 状态机和\(S=\{<R,M>\}\)
- R寄存器
- M内存
- 激励事件\(E=\{指令\}\)
- 状态转移规则next:\(S\times E \rightarrow S\)
- 初始状态\(S_0=<R_0, M_0>\)
- 状态机和\(S=\{<R,M>\}\)
程序如何在计算机上运行
编译
- 编译器的工作:将C程序的状态机\(S_C\)翻译为指令集的状态机\(S_{ISA}\)
- \(s_{compile}: \left\{ PC_{c},v_{1},v_{2},v_{3}, \ldots \right\} \rightarrow \left\{ R,M \right\}\)
- \(e_{compile}: \{语句\} \rightarrow \{指令序列\}\)
- \(next:S\times E \rightarrow S\)使得
CPU结构设计
- CPU结构设计的工作:根据指令集的状态机\(R_{ISA}\)用电路实现CPU的状态机\(S_{CPU}\)
- \(S_{arch}:\{R,M\}\rightarrow \{时序逻辑电路\}\)
- \(e_{arch}:\{E\}\rightarrow \{时序逻辑电路\}\)
程序如何在计算机上运行
- 结构设计:根据指令集手册的功能描述,画一张CPU的电路图
- RTL设计:用RTL代码描述CPU电路图
- 后端物理设计:根据RTL代码生成版图文件
- 制造生产:根据版图文件生产芯片
- 软件编程:编写程序
- 编译:将程序翻译成指令集手册中描述的指令序列
- 程序在CPU上执行->指令序列控制CPU芯片电路进行状态转移
- 使得三个状态机产生联系:\(S_C\sim S_{isa}\sim S_{cpu}\)
总结
\(\(\begin{array}{cccc} & \text { 程序 } & \text { 抽象计算机 } & \text { CPU } \\ \hline \text { 状态 } & \{<V, P C>\} & \{<R, M>\} & \text { \{时序逻辑电路 } \\ \hline \text { 状态转移规则 } & \text { C语言语句的语义 } & \text { 指令的语义 } & \text { 组合逻辑电路 } \\ \hline \mathrm{FM} & \text { C语言标准手册 } & \text { 指令集手册 } & \text { 架构设计文档 } \end{array}\)\) - 程序编译:将语句翻译成语义等价的指令序列 - 结构设计:按照指令语义设计行为等价的登录 - 程序运行:指令序列驱动电路进行状态转移