对于芯片而言,有两种“存储器”,或者记录了芯片的运行状态,或者缓存了数据。前者使用寄存器实现,后者使用RAM实现。
对于寄存器,有如下事实存在:
1. 寄存器是有宽度的,通常32bit,寄存器往往从逻辑意义上被分为多个field,各域的width和location随意.
2.寄存器被统一编址,每个寄存器都被设置为固顶的某一个值
3.寄存器有属性区别,例如,寄存器A可以至此回读写,但寄存器B只能读不能写,寄存器的属性组合多达25种。
4.寄存器在module中,是通过顶层端口接入逻辑设计内部,在chip级则是通过BUS进行。
5.寄存器从设备级viewer看,复位后需要保持某一特定状态
6.在全片下,需要确定一件事。即,代码实现,寄存器配置表格两者的一致性。以保证后续用户可以根据表格完成对寄存器进行正确配置和读取。
7.从行为上看,对于寄存器的确认可以分为两个阶段,一是寄存器静态扫描,二是寄存器动态扫描。
寄存器静态扫描:在芯片数据通路未发包的情况下,对寄存器的配置通路(BUS)和寄存器本身进行读写确认。
寄存器动态扫描:修改寄存器的数值,以便改变芯片的配置,然后发包,以确认数据包的行为是符合配置场景的。
通常,我们在CHIP级使用RAL的方式实现静态扫描,在模块级完成寄存器动态扫描