一、寄存器模型概览
- 寄存器是模块之间互相交谈的窗口,一方面可以通过读出寄存器的状态,另外一方面也可以通过配置寄存器,使得寄存器工作在一定的模式下。在验证的过程中,寄存器的验证也排在了验证清单的前列,只为只有首先保证寄存器的功能正确。
- 硬件中的各个功能模块可以由处理器来配置功能以及访问状态,而与处理器的对话即是通过寄存器的读写来实现的。
- 寄存器的硬件实现是通过触发器,而每一个比特位的触发器都对应着寄存器的功能描述。一个寄存器一般由32个比特位构成,将单个寄存器拆分之后,又可以分为多个域(field),不同的域往往代表着某一项独立的功能。单个的域可能有多个比特位构成,也可能由单一比特位构成,这取决于该域的功能模式可配置的数量。而不同的域,对于外部的读写而言,又大致可以分为WO(只写),RO(只读)和RW(读写),除了这些常见的操作属性以外,还有一些特殊行为(quirky)的寄存器,例如读后擦除模式(clean-on-read,RC),只写一次模式(write-one-to-set,W1S)。
对于MCDF的寄存器模块描述,将0x00功能寄存器和0x10状态寄存器位用图来表示。
通常来讲,一个寄存器有32位宽,寄存器按照地址索引的关系是按字对齐的,上图中的寄存器有多个域,每个域的属性也可以不相同,reserved域表示的是该域所包含的比特位暂时保留以作日后功能的扩展使用,而对保留域的读写不起任何作用,即无法写入而且读出值也是它的复位值。上面的这些寄存器按照地址排列,即可构成寄存器列表,称之为寄存器块,实际上,寄存器块除了包含寄存器,也可以包含存储器,因为它们的属性都近乎读写功能,以及表示为同外界通信的接口。
如果将这些寄存器有机的组合在一起,MCDF的寄存器功能模块即可由这样一个register block来表示:
上面的图中除了包含了DUT的寄存器模块(由硬件实现),还有属于验证环境的寄存器模型。这两个模块包含的寄存器信息是高度一致的,属于验证环境的寄存器模型也可以抽象出一个