文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>LoongsonTLB编程知识[跟新中...]

LoongsonTLB编程知识[跟新中...]

时间:2009-08-12  来源:废墟

<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Chuhb%5CLOCALS%7E1%5CTemp%5C5%5Cmsohtml1%5C01%5Cclip_filelist.xml"><link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5Chuhb%5CLOCALS%7E1%5CTemp%5C5%5Cmsohtml1%5C01%5Cclip_editdata.mso"><style> </style>

 

 

 

TLB编程手册... 1

TLB表项介绍... 1

各字段的含义说明如下:... 1

与TLB管理相关的几个CP0寄存器... 3

TLB指令介绍... 3

 

TLB编程手册

TLB表项介绍

下图是TLB Entry的组织形式

 

注意到是这个组织形式是隐形的,对于我们用户来说只可通过CP0寄存器以及tlb指令来影响他的值。

各字段的含义说明如下:

1:Mask值是指page size大小的掩码。

该值有PageMask寄存器指定点

Mask值代表每页使用多大的,下表是对应页需写入的mask值。

比如使用64K页,可以向PageMask寄存器写入0x0001E000。

 

2.R,VPN2,ASID 由Entryhi寄存器指定的

 

R………区域:(00->用户,01->管理,11->核心)用户匹配虚地址63:62 位。

VPN2….区域:虚页号除2(映射2 个页)。

ASID….区域: 地址空间ID 域。一个8 位域,用于让多个进程共享TLB;对于与其它进程同样的虚页号,每个进程有不同的映射。所以允许256个进程同时映射到tlb表项,多余的肯定是要交换出去了。

Fill…….保留。读为0,写忽略。

0………保留。写入必须是0,读时返回0。

 

3. G,PFN,C,D,V 由EntryLo0,EntryLo1寄存器指定

EnteryLo0指定偶数页框,EntryLo1指定奇数页框

PFN…页框号;物理地址的高位。

C…….指定TLB 页的一致性属性;见表3-2。

D…….脏位。如该位值设置为1,则对应的页标记为脏,因而可写。该位实际上是写保护位,软件可用此位保护数据的改动。

V…….有效位。该位设置表示TLB 表项是有效的;否则,将产生TLBL/TLBS 失效。

G…….全局位。如果Lo0 和Lo1 中对应的位都设置为1,则在TLB 查找时处理器忽略ASID。

0……..保留。写入必须是0,读时返回0。

每个表

Loongson2F提供64个表项,每个表项可以映射奇偶两个页面。故可以映射的页面数为64×2=128个页,   VPN2代表虚页号除2,虚页号通过Offset来求得的了。

PFN代表了物理地址的39:12,注意这里没有用offset来求得。通过上面的的分析VPN2=(viraddr & ~(PageSize-1) ) /2  相当于 viraddr & (~(PageSize-1) <<1 ), 而PFN=((phyaddr >>12 ) <<6 相当于(phyaddr & ~(0xFFF) ) >> 6

 

所以EntryHi寄存器值一般为write_c0_entryhi(viraddr & (~(PageSize-1) <<1 ) | asid)  asid 可以从entryhi中先读取出来的。EntryLo0值write_c0_engrylo0((phyaddr & ~(0xFFF) ) >> 6 | 其它6bit的定义) EntryLo1相似的操作!

 

表项索引由index寄存器记录,random寄存器随机表项为只读的

Wired 寄存器是一个可读/写的寄存器,该寄存器的值指定了TLB中固定表项与随机表项之间的界限。Wired 表项是固定的、不可替换的表项,这些表项的内容不会被TLB写操作修改。而随机表项的内容可以被修改。是不是说这些表项不能通过tlbwr修改,但是可以通过tlbwi进行修改呢?不是这样的,其意思是通过tlb写入了有效的tlb  entry,这时发生tlb miss的时候不会替换到wired表示的这些表项的,也就是即使设置其为63,也可以通过显示的进行写入的!

 

如果实现嵌入式单个系统 直接进行固定映射到话是否可以呢?

 

TLB管理相关的几个CP0寄存器

EntryHi

EntryLo0

EntryLo1

Index

random

wired

TLB指令介绍

TLBP

将内容与EntryHi 寄存器内容相同的TLB 表项的地址送入Index 寄存器。如果没

有TLB 表项与EntryHi 寄存器的内容相同,Index 寄存器的最高位置为1。

 

TLBR

将从TLB 中读出的G 位(控制ASID 匹配)写入EntryLo0 和EntryLo1 寄存器。

将Index 寄存器索引的TLB 表项的内容送入EntryHi 和EntryLo 寄存器。如果Index寄存器的值大于处理器中的TLB 表项数,则该操作无效。

 

TLBWI

用EntryLo0 和EntryLo1 寄存器的G 位相与的值设置TLB 的G 位。用EntryHi

和EntryLo 寄存器的内容设置Index 索引的TLB 表项。如果TLB Index 寄存器的值大于处理器中的TLB 表项数,则该操作无效。

 

TLBWR

用EntryLo0 和EntryLo1 寄存器的G 位相与的值设置TLB 的G 位。用EntryHi

和EntryLo 寄存器的内容设置TLB Random 寄存器索引的TLB 表项。

相关阅读 更多 +
排行榜 更多 +
Event Horizon

Event Horizon

飞行射击 下载
Counter Terrorist Sniper Shoot

Counter Terrorist Sniper Shoot

飞行射击 下载
Special Agent

Special Agent

飞行射击 下载