地址过滤窗口

地址过滤窗口

LS232IP为提升性能采用了推测执行技术,因此位于错误推测路径上的取指操作和取数操作都可能产生程序员不可控的处理器接口总线访问地址。另一方面,在一些系统中,存在一些设备包含有会引起系统死机的地址空洞。当错误推测路径引发的不可控地址恰好落在这些地址空洞的范围内,就会引起系统的死机。为解决该问题,LS232IP提供了地址过滤窗口机制。该机制保证落在地址过滤窗口内的地址访问永远不会出现在处理器接口总线上。

现介绍地址过滤窗口的具体工作机制。LS232IP可最多配置4个地址过滤窗口,依次称作0号、1号、2号、3号地址过滤窗口。每个地址过滤窗口包含3个域,第1个域为使能域,用于该地址过滤窗口过滤功能的开启或关闭;第2个域为窗口基址(base address),记录的是过滤窗口的起始地址,特别注意的是这里记录的地址是物理地址;第3个域为过滤掩码(mask),用于控制地址窗口的大小。 例如64K字节大小的窗口,其过滤掩码为32'hFFFF_0000。需要注意的是窗口的大小必须为2的n次方字节(n的取指范围从8到31,包括8和31),同时地址过滤窗口的起始地址仅从窗口边界开始计算。再以64K字节大小的窗口为例,如果软件将窗口基址设为32'h0001ABCD,处理器将视该窗口的范围为32'h00010000~32'h0001FFFF。

地址过滤窗口的使能通过CP0第22,select 7号寄存器的[3:0]位控制,第i位对应第i个过滤窗口的使能(i=0,1,2,3),为1表示开启,为0表示关闭。地址过滤窗口的其他域按照0号窗口的基址、0号窗口的掩码、1号窗口的基址、……、3号窗口的掩码的顺序组织成一个数组,即0号窗口的基址为数组的第0个元素,0号窗口的掩码为数组的第1个元素,……余下各项可依次类推。对地址过滤窗口非使能控制域的访问即通过对该数组各元素的读写完成。其中,读操作的执行顺序是,先向CP0第22,select 5号寄存器写入需访问元素的数组下标,再读取CP0第22,select 6号寄存器,取回内容即为指定数组项的内容。写操作的执行顺序类似,区别在于当数组下标写入CP0第22,select 5号寄存器后,需要将写入的内容写入到CP0第22,select 6号寄存器。下面给出一段设置第N个地址过滤�
 ��口的�
��考代码,代码中N、BASE和MASK均为常数,代表窗口号,窗口的基址,窗口的掩码。

li             a1, 2×N                #设置N号窗口的基址

mtc0        a1, $22, 5            #

li             t0, BASE               #

mtc0        t0, $22, 6             #

li             a1, 2×N+1           #设置N号窗口的掩码

mtc0        a1, $22, 5            #

li             t0, MASK              #

mtc0        t0, $22, 6             #

mfc0        t0, $22, 7

li             t1, 1                     #这里可以直接将第N位置为1

sll            t1, t1, N               #

or            t0, t0, t1              #

mtc0       t0, $22, 7             #使能N号过滤窗口

我们的芯片5,6,7改成5,4,7

cpu内部挡cache访问的窗口,只挡cache读,不影响其他操作,因此汪文祥建议用一个窗口将寄存器空间全盖住,代码如下:
下面代码是将0x10000000-0x1fffffff禁止取指代码。

asm("mtc0 %0,$22,5;mtc0 %1, $22, 4; mtc0 %2, $22, 5;mtc0 %3, $22, 4;mtc0 %4,$22,7"::"r"(0),"r"(0x10000000),"r"(1),"r"(0xf0000000),"r"(1));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值