1.前门如下:
1)无论读写,寄存器模型都会通过sequence 产生一个uvm_reg_bus_op 的变量:
此变量中的信息要经过一个adapter 转换后交给bus_sequencer,随后交给bus_driver,实现前门操作。
2.adapter:
1)定义好两个函数,reg2bus,寄存器模型通过sequence 发出的uvm_reg_bus_op 型的变量转换成bus_sequencer 能够接受的形式。
2)bus2reg:当监测到总线上有操作时,将收集的transaction 转换成寄存器模型能够接受的形式,以便寄存器模型能够更新相应的寄存器的值。
3)读操作是,bus_driver 能够获得要读取的值,将此值放入从bus_sequencer获得的bus_transaction中,那么bus_transaction就会有读取的值,经过adapter 的bus2reg传递,最终被寄存器模型获取。由于没有实际的transaction 传递,所以虚线。
3.在base中加入寄存器模型:
1)要使用寄存器模型,至少需要在base_test 中定义两个变量,reg_model 和reg_sqr_adapter。
2)调用configure:第一个是parent block,由于是最顶层的reg_block,因此写null;第二个是后面路径。
3)build:将所有寄存器例化。
4)local_model调用后,reg_model就不能再加入新的寄存器。
5)reset:如果不调用,默认都是0;调用后,都将变为复位值。
6)前门都是由uvm_reg_map完成,因此在connect_phase中,使用set_sequencer 将adapter 和bus_sequencer 告诉reg_model的 default_map。
7)将default_map 设置为自动预测状态。