[UVM] ral test 测项分析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lbt_dvshare/article/details/96589488

在module /chip 中要访问寄存器,就要用到ral model ,对寄存器的测试包含哪些内容呢?

  • 检测register复位值是否正确
  • 检测寄存器的类型是否和ralf file中规定的一致 (RO/WR/W1C...)
  • bit cross test(检测同一register 和不同register的bit之间是否有粘连

生成ral model

    ralgen -uvm  -l sv  -t  <tb_name>  -o  <ral_model_name>  <ralf_all_file_name>.ralf

     如果需要generate出backdoor Access的代碼,需要加-b這個option,如果需要收Coverage,需要添加-c baF這個option。上面的command中,<ralf_all_file_name>.ralf為input文件,是需要驗的所有RALF檔案構成的一個文件,格式如下:


source ./module_1_name.ralf
source ./moduel_2_name.ralf
 
system ralf_name {
  bytes 4;
  block module_1_name_reg_blk = module_1_name_reg_blk @ 'h25CB0000;
  block module_2_name_reg_blk = module_2_name_reg_blk @ 'h25CC0000;   
}


 


1. 拿到ralf 中所有reg

uvm_reg_map    maps[$];
uvm_reg_map    map[$];
uvm_reg        regs[$];
uvm_reg_field  fields[$];
uvm_reg        single_reg;

maps.delete();
model.get_maps(maps);

foreach(maps[j])begin
  maps[j].get_registers(regs);
end

foreach(regs[ii])begin
  regs[ii].get_maps(map);
  regs[ii].get_fields(fields);
end

检测register的类型:

 RO: 

  1. 拿到field的期望值保存
  2. 把期望值取反写入该field
  3. check 值是否改变

 RW:

  1. 拿到field的期望值保存   
  2.  把期望值取反写入该field
  3. 读该register check 值是否改变
  4. 重复step2-3 

 RC(读之后就会清零该寄存器, W0/W1无影响)

      1. front door to write all 0 value into this field 

      2. front door to read,   expect read back default from this field  证明W0无影响

      3. front door to read again, expect read back all 0 from this field 证明R会清零(前提是default value不是全0)

      4. front door to write all 1 value into this field   ->   W1

      5.front door to read, expect read back all 0       证明上面W1无影响

      上面步骤有个问题:如果default就是0,那么不清楚是否是R清零的,所以需要后门写1进去

      6.back door to write all 1 value into this field   后门写入1

      7.back door to read all 1 value into this field       确认一下后门是否写入

      8.front door to write all 0 value into this field   W0

      9.front door to read back ,  证明W0无影响 (W1上面有了)

     10.front door to read again,     证明R会清零

 

W1C(写1清零,写0无影响,读无影响)

     1. front door to write all 1

     2. front door to read     ->      证明写1会清零

    上面不完善,如果rst值就是0,那么没办法判断是写清零还是初始为0所以需要后门操作

     3. back door to write all 1 value

     4. front door to read all 1

     5.front door to read all 1 value   证明没有RC

     6.front door to write all 0

     7.front door to read all 1     证明写0无影响

     8.front door to write all 1

     9.front door to read all 0       证明写1会清零


bit cross test

      对以下序列进行读写(采用二分法进行check)

      1111_1111_0000_0000      //可以判断对前8bit写0/1会不会影响后8bit

      0000_0000_1111_1111

      1111_0000_1111_0000

      0000_1111_0000_1111

      1100_1100_1100_1100

      0011_0011_0011_0011

      1010_1010_1010_1010

      0101_0101_0101_0101

      这种方法,对于第6个bit写1同时误把第11个bit写0验证不到;但在前一个测试类型中,已经有过全写入ffff和0000了。

 

检测相邻register是否有粘连

         将所有的reg存在一个数组中,Shuffle :相邻的reg并不是地址上相邻的,增加随机性

         Order=1:读写操作完一个reg后,再读写操作下一个,看看上面读写操作有没有改变下面这个的值

         Order=0:先下后上。

猜你喜欢

转载自blog.csdn.net/lbt_dvshare/article/details/96589488