参考ARMVIP验证手册中4.5APB watchdog,这一章节是对apb_watchdog及其寄存器信息进行简单的了解,方便后续搭建环境及功能测试。
1.1 模块结构及状态机
APB watchdog是一个从reload register初始化的32位向下计数器。因此它的初始化值就是0xFFFF_FFFF
这个中断信号WDOGINT反应到端口上不只是一个输出,表明的是一个拉起的状态
如果没有reprogram,那么计数器就会一直减小到一个programmed value,此时会产生一个中断信号(可以理解为处理器中中断的一个表示信号);
当有一个使能信号以后,在CLK信号的上升沿,就会使得寄存器的值-1。
当计数器的值到达0以后,watchdog的monitor就会监测中断信号并且拉到一个reset的信号,计数器就停止了;
到了下一次clk时,watchdog重新reload;
如果计数器到达了0以后,中断信号还没有被清除的话,那么watchdog就会拉起来一个reset信号。
【注】:对于以上功能描述的部分如果有疑虑,可以观察波形来方便对功能进行更好的理解。
1.2 寄存器
在这里我们需要知道寄存器就是我们的功能窗口,通过对寄存器写入不同的信息,映射到的寄存器是不同的,得到的功能也是不一样的。
可以看到其中有一些1位宽的状态寄存器。 load:表示从什么数开始减; value:表示当前计数器的数值; Control:控制寄存器,2bit,其他是保留位
1.2.1 Control register
INTEN:控制中断信号是否要拉高,设置成高来使得计数器和中断工作,设置成低使得计数器和中断不工作。 RESEN:控制rest信号是否拉高。 这两部分组合在一起组成了控制寄存器,按照语义的意思来看,这两根信号线应当是分离的,它们的默认初始值是0。
1.2.2 Clear interrupt & Raw interrupt register
Clear intgerrupt reg:用来清除中断这个信号线。 Raw interrupt status reg:Raw的解释:内部的信号是否有真实触发,有时候可能会出现端口掩盖住但是内部真实触发的情况。它灰盒interrupt信号与在一起,一起创建一个在端口上被mask掉的信号。
在经过外部的配置以后,加上内部的信号,最终可以表现成一个外部的status的寄存器。
1.2.3 Lock register
通过这样的一个lock寄存器可以防止外部软件对它功能的修改。
其中0x1ACCE551就是一个密钥的功能,通过它来打开或者关闭对其他寄存器权限的访问,反应出来的值就是1bit的0和1。相当于内部包含了一个序列监测器,针对一个特定的序列,有一个寄存器进行监测。
1.2.4 Integration Test Control register
通过这样一个Test Control reg可以避开apb watchdog中的一些逻辑,直接对它在外部的端口进行控制,也就是直接控制interrupt信号。 集成性的测试:不Care内部的功能,但是care端口的跳转,所以通过外部的寄存器可以控制watch dog基本的一些功能而不看内部的功能。
- 以上就是大部分的寄存器,需要注意的是还有一些寄存器是8bit的,但是apb是32bit的,这样亦可。
- 而这样的一些RO的寄存器,它的ID代表了SPEC的版本,当我们读取到ID以后可以进行比较,进而进一步确认IP和小版本是否一致,避免了拿到的SPEC跟design对接不了的问题。
Reference & thanks
http://rockeric.com/