学习目标

  • 理解虚拟内存
  • 实现 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 缺失怎么办?

下一步

第 13 章:Tomasulo 算法

更新时间: