BOOMのTLBに関してその仕様と動作を調査する。SonicBOOMのTLBは以下の場所に定義されている。
chipyard/generators/boom/src/main/scala/lsu/tlb.scala
このNBDTLBがそれに相当する。NBDというのはNonBlockingの意味だと思う。
class NBDTLB(instruction: Boolean, lgMaxSize: Int, cfg: TLBConfig)(implicit edge: TLEdgeOut, p: Parameters) extends BoomModule()(p) { require(!instruction) val io = IO(new Bundle { val req = Flipped(Vec(memWidth, Decoupled(new TLBReq(lgMaxSize)))) val miss_rdy = Output(Bool()) val resp = Output(Vec(memWidth, new TLBResp)) val sfence = Input(Valid(new SFenceReq)) val ptw = new TLBPTWIO val kill = Input(Bool()) })


インタフェースをまとめる。
req = Flipped(Vec(memWidth, Decoupled(new TLBReq(lgMaxSize)))):TLBアクセスのリクエストを受け付けるvalidreadyTLBReq(lgMaxSize):vaddr = UInt(width = vaddrBitsExtended):変換対象となる仮想アドレスpassthrough = Bool():あまり使用用途が分からないが、アドレスをそのままパススルーしたいときに使用する。size = UInt(width = log2Ceil(lgMaxSize + 1))対象となるアドレスサイズ。TLBのエントリサイズcmd = Bits(width = M_SZ):読み込み・書き込みなどのメモリリクエストの種類を示す。
miss_rdy = Output(Bool()):TLBアクセスが実行中に1となる。resp = Output(Vec(memWidth, new TLBResp)):TLBアクセスに対するレスポンスを出力する。TLBRespmiss: Bool:TLBエントリにヒットせずPTWが発生したことを示すpaddr: UInt(width = paddrBits):変換後の物理アドレスpf: TLBExceptions:Page Faultを示す(ものと思われる)ld: Bool/st: Bool/inst: Bool:ロード・ストア・命令フェッチのどれに対するエラー化を示す。
ae: TLBExceptions:Access Errorを示す(ものと思われる)ld: Bool/st: Bool/inst: Bool
ma: TLBExceptions:Misaligned Acccesを示す(ものと思われる)ld: Bool/st: Bool/inst: Bool
cacheable: Bool:Cachable領域へのアクセスかどうかを示すmust_alloc: Bool:TLBエントリへのAllocationをしなければならないprefetchable: Bool:プリフェッチ可能なアドレスかどうかを示す。
ptw = new TLBPTWIO:ページテーブルウォークを行うためのインタフェースreq = Decoupled(Valid(new PTWReq)):PTWのリクエスト信号validaddr = UInt(width = vpnBits):変換対象となる仮想アドレスのVPNビット
resp = Valid(new PTWResp).flip:PTWのレスポンス信号ae = Bool():Access Error(と思われる)pte = new PTE:Paget Table Entry、ページテーブルエントリppn: UInt(width = 54)reserved_for_software: Bits(width = 2)d: Boola: Boolg: Boolu: Boolx: Boolw: Boolr: Boolv: Bool
level = UInt(width = log2Ceil(pgLevels)):変換時のレベルfragmented_superpage = Bool()homogeneous = Bool()
ptbr = new PTBR().asInput:PTBR(おそらくSATPのことだと思われる)の信号status = new MStatus().asInput:MSTATUSシステムレジスタの情報pmp = Vec(nPMPs, new PMP).asInput:PMPの情報customCSRs = coreParams.customCSRs.asInput:カスタムCSRの情報
kill = Input(Bool()):処理を殺すための使用する