扩展ROM(OPROM)

理解ROM地址解码与扩展
本文介绍了如何扩展ROM,重点在于启用ROM地址解码器的条件及其在命令寄存器中的设置。内容包括比特0的作用,比特[31:11]用于设定ROM起始地址,以及程序员如何通过设置比特17分配128K存储空间给ROM,并确保地址对齐。
如果功能卡中需要嵌入扩展Rom(Oprom),该PCI寄存器必须实现。许多PCI功能都嵌入了设备ROM,它包含了该功能的设备驱动程序。扩展Rom的起始存储器地址及其大小均在扩展Rom基址寄存器中定义,而扩展Rom基址寄存器位于配置头区域的双字12中。如图1-1所示,系统一加电,就必须立即自动配置系统,以便每个功能的IO和存储器解码器能识别出相互排斥的地址范围。因此,配置软件必须能检测到一个扩展Rom需要多大的存储空间。除此之外,为了在不冲突的地址范围中确立其ROM的位置,系统必须能够编程控制Rom的地址解码器。

   

 
 
 
 
 
 
 

图 1-1 扩展Rom基址寄存器
当启动配置程序检测到某功能已经实现了扩展Rom基址寄存器时(通常向它写全“1”并回读),必须立即检查ROM的前两个位置,核对其扩展Rom的签名,确定其是否真的安装了ROM(也就是说,ROM插座可能是空的)。如果安装了,配置程序必须映射(Shadow)Rom,并执行其初始化代码。
扩展Rom基址寄存器的格式如图1-1所示:

l        比特0为1,表示启用该功能的ROM地址解码器(假设命令寄存器中的存储空间比特也设定为1)。

l        比特[10:1]保留。

l        比特[31:11]用于指定ROM的起始地址(这个地址是根据ROM的大小来分割的)。

例如,假设程序员写0xFFFFFFFE到扩展Rom基址寄存器(即清除0比特-扩展ROM允许,防止在分配起始存储地之前启用ROM地址解码器),随后读取该寄存器,结果值若为0xFFFE0000,则说明了以下问题:

l        比特0的值为0,这说明ROM地址解码器当前已禁用。

l        比特[10:1]保留。

l        在基址寄存器字段(即比特[31:11])中,比特17是程序员可将其设为1的最低有效比特。该比特的二进制权值为128K,这说明ROM解码器需要将128K的存储空间分配给ROM。然后程序员写一个32比特的起始地址到该寄存器,将ROM起始地址指定到一个大小为128KB的地址边界上。

命令寄存器中的存储空间比特要优先于扩展ROM允许比特。仅当存储器空间比特(在它的命令寄存器中)和扩展ROM允许比特(在它的扩展ROM基址寄存器中)同时设定为1时,该功能的扩展ROM才应对存储器访问做出响应。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值