硬件设备使用MMIO将其寄存器暴露给CPU端。并且有很多类型的寄存器(在一些硬件手册/设备驱动程序中编写),用于不同的用途。这些硬件设备如何检查寄存器访问权限?
我使用
busybox devmem
在开发板上进行了测试,有一些MMIO寄存器(DEVICE_ID
、DEVICE_FEATURE
等)无法从CPU端写入。我想知道硬件如何实现该寄存器的只读/只写权限?
以计时器为例,假设我将其设计为用于读取当前计数的寄存器是只读的(操纵开始或翻转计数等,我已经通过其他寄存器/机制实现了)。
我有一个控制寄存器,可以启用或禁用计数器。
0x00 bit[0] = 0 for disable 1 for enable
0x04 read only current count
一些寄存器采用伪语言
reg timer_count[7:0]
reg enable[1]
...
for each clock cycle
if(enable) timer_count = timer_count + 1
//assume processor side bus decodes the full address and aims it ultimately
//at this peripheral through other buses
if(bus_enable)
{
if(bus_cycle_write)
{
if(address == 0x00)
enable = bus_write_data[0]
}
else //read
{
if(address = 0x00)
bus_read_data = {7b0,enable}
if(address = 0x04)
bus_read_data = timer_count
}
}
但使用真实 HDL 的真实语法。 没有魔法,没有神秘。 我可以完成你的整个问题并制作一份 WO 和一份 RO
if(bus_enable)
{
if(bus_cycle_write)
{
if(address == 0x00)
enable = bus_write_data[0]
}
else //read
{
if(address = 0x04)
bus_read_data = timer_count
}
}
控制寄存器只能写入,定时器计数寄存器只能读取。 没有到控制寄存器的读取路径,也没有到定时器计数寄存器的写入路径。