UVM验证平台搭建一:reg model 生成
一、概述
在做验证时,寄存器模型是验证平台中必不可少的,而且项目更新,寄存器也需要跟着进行更新,所以需要快速的生成UVM寄存器模型,本文采用VCS中的ralgen来实现:
1.根据spec中寄存器的描述,用ods、CSV、XML等来描述寄存器信息;
2.根据寄存器描述文件通过脚本批量生成.ralf格式的寄存器文件;
3.通过VCS中的ralgen命令生成UVM register model。
本文通过表格来描述寄存器的相关信息,然后通过python写好的脚本,来解析该表格生成ralf文件。最后通过ralgen命令读取ralf文件生成验证平台需要的寄存器模型。下面以spi模块为例,介绍寄存器生成的过程。
二、寄存器描述表格
- 寄存器名称、地址和复位值的描述
reg_name | reg_addr | reg_rst |
---|---|---|
spi_cr1 | 0 | 0000 |
spi_cr2 | 4 | 0700 |
spi_sr | 8 | 0002 |
spi_dr | c | 0000 |
spi_crcpr | 10 | 0007 |
spi_rxcrcr | 14 | 0000 |
spi_txcrcr | 18 | 0000 |
spi_i2scfgr | 1c | 0000 |
spi_i2spr | 20 | 0000 |
- spi_cr1寄存器总各个bit位的描述
spec中spi_cr1寄存器各位的信息:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
bidimode | bidioe | crcen | crcnext | dff | rxonly | ssm | ssi | lsbfirst | spe | br[2] | br[1] | br[0] | mstr | cpol | cpha |
rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw | rw |
通过表格来描述spi_cr1寄存器的bit位信息如下(其他寄存器类似):
bit_name | bit_site | bit_width | bit_access |
---|---|---|---|
cpha | 0 | 1 | rw |
cpol | 1 | 1 | rw |
mstr | 2 | 1 | rw |
br | 3 | 3 | rw |
spe | 6 | 1 | rw |
lsbfirst | 7 | 1 | rw |
ssi | 8 | 1 | rw |
ssm | 9 | 1 | rw |
rxonly | 10 | 1 | rw |
crcl | 11 | 1 | rw |
crcnext | 12 | 1 | rw |
crcen | 13 | 1 | rw |
bidioe | 14 | 1 | rw |
bidimode | 15 | 1 | rw |
三、生成.ralf寄存器文件
通过实现写好的python脚本,读取寄存器描述表格,生成.ralf文件。
部分.ralf结果如下:
具体.ralf文件格式以及其他option请参考ralf user guide
四、ralgen生成寄存器模型
生成RAL model命令:
ralgen [option] -t topname -I dir -uvm {filename.ralf}
-
-t topname
RALF文件中顶层模块或者系统的名称,生成的RAL model文件名称为ral_topname.sv -
-uvm
声明是UVM方法学 -
-I dir
realgen搜索源文件的可选目录列表 -
filename.ralf
.ralf后缀不是必须的
最后通过ralgen命令生成的spi_reg_model文件,部分内容如下:
生成寄存器模型后就可以集成到验证环境中,使用了!后续如果项目更新只要更新下表格中的寄存器描述信息,然后直接运行脚本,就可以直接快速生成新的寄存器模型。
相关参考文档:
ralf和ralgen参考文档