第 12 章:TLB 和虚拟内存
学习目标
- 理解虚拟内存
- 实现 TLB
- 处理页表转换
12.1 思考:为什么需要虚拟内存?
每个程序都认为自己独占内存!
程序 A: 0x1000 → 物理地址 0x10000
程序 B: 0x1000 → 物理地址 0x20000
12.2 地址转换
虚拟地址 → 页表 → 物理地址
页表查询很慢,需要访问内存!
解决方案:TLB(Translation Lookaside Buffer)
12.3 TLB 实现
reg [19:0] tlb_vpn [15:0]; // 虚拟页号
reg [19:0] tlb_ppn [15:0]; // 物理页号
reg tlb_valid [15:0];
wire [19:0] vpn = vaddr[31:12];
wire tlb_hit = tlb_valid[i] && (tlb_vpn[i] == vpn);
wire [31:0] paddr = {tlb_ppn[i], vaddr[11:0]};
思考:TLB 缺失怎么办?