## 开天辟地的篇章
PA0 [[系统基础环境配置.mdx]] 👉 PA1↗ 记录时间:🍅
一些随便记录的东西
状态机
计算机可以分为两部分, 时序逻辑部件, 组合逻辑部件。 在每个时钟周期到来的时候, 计算机根据当前时序逻辑部件的状态, 在组合逻辑部件的作用下, 计算出并转移到下一时钟周期的新状态. 0和1两种状态 如果有50个byte,那就有N=2的50次方种状态
被逗笑的地方
![[Pasted image 20250719143612.png]]
![[Pasted image 20250719163659.png]] 一开始:不就小小PA吗… 后来…:为什么要用这么变态的PA来折磨自己
NEMU
是什么?Nanking University EMUlator 南大的emulator 模拟器
ISA
是什么? Instruction Set Architecture 指令集架构
Kconfig
保证不同ISA,运行结果正常。 .config 生成(CONFIG_X86=y) conf生成: autoconf.h 控制哪些源代码被编译 auto.conf 控制哪些文件参与编译(控制Makefile的源文件和变量)
Monitor
(监视器) 读入客户程序 调试器
nemu
├── configs # 预先提供的一些配置文件
├── include # 存放全局使用的头文件
│ ├── common.h # 公用的头文件
│ ├── config # 配置系统生成的头文件, 用于维护配置选项更新的时间戳
│ ├── cpu
│ │ ├── cpu.h
│ │ ├── decode.h # 译码相关
│ │ ├── difftest.h
│ │ └── ifetch.h # 取指相关
│ ├── debug.h # 一些方便调试用的宏
│ ├── device # 设备相关
│ ├── difftest-def.h
│ ├── generated
│ │ └── autoconf.h # 配置系统生成的头文件, 用于根据配置信息定义相关的宏
│ ├── isa.h # ISA相关
│ ├── macro.h # 一些方便的宏定义
│ ├── memory # 访问内存相关
│ └── utils.h
├── Kconfig # 配置信息管理的规则
├── Makefile # Makefile构建脚本
├── README.md
├── resource # 一些辅助资源
├── scripts # Makefile构建脚本
│ ├── build.mk
│ ├── config.mk
│ ├── git.mk # git版本控制相关
│ └── native.mk
├── src # 源文件
│ ├── cpu
│ │ └── cpu-exec.c # 指令执行的主循环
│ ├── device # 设备相关
│ ├── engine
│ │ └── interpreter # 解释器的实现
│ ├── filelist.mk
│ ├── isa # ISA相关的实现
│ │ ├── mips32
│ │ ├── riscv32
│ │ ├── riscv64
│ │ └── x86
│ ├── memory # 内存访问的实现
│ ├── monitor
│ │ ├── monitor.c
│ │ └── sdb # 简易调试器
│ │ ├── expr.c # 表达式求值的实现
│ │ ├── sdb.c # 简易调试器的命令处理
│ │ └── watchpoint.c # 监视点的实现
│ ├── nemu-main.c # 你知道的...
│ └── utils # 一些公共的功能
│ ├── log.c # 日志文件相关
│ ├── rand.c
│ ├── state.c
│ └── timer.c
└── tools # 一些工具
├── fixdep # 依赖修复, 配合配置系统进行使用
├── gen-expr
├── kconfig # 配置系统
├── kvm-diff
├── qemu-diff
└── spike-diff
NEMU ISA相关的API说明文档
https://nju-projectn.github.io/ics-pa-gitbook/ics2024/nemu-isa-api.html↗
Thanks for reading!