001_uvm_ralgen_ug(Generating a R
生成RAL model命令:
ralgen [options] -t topname -I dir -uvm {filename.ralf}
- -t topname
RALF文件中顶层模块或者系统的名称,生成的RAL model文件名称为ral_topname.sv - -uvm
声明是UVM方法学 - -I dir(注意是i的大写,不是L的小写)
ralgen搜索源文件的可选目录列表 - filename.ralf
.ralf后缀不是必须的。对于多个文件的情况,指定顶层的RALF文件,在这个文件通过source来包含其他文件。
$VCS_HOME/doc/examples/vmm/std_lib/vmm_subenv/oc_ethernet/dual_eth.ralf
options
- -b
为声明了完整hdl_path的reg和mem生成后门访问代码 - -c a
- -c b
- -c f
-c表示coverage,上面三个依次表示“Address Map” “Register Bits” “Field Values”功能覆盖率模型 - -e
为每个抽象类生成空约束 - -f <filename>
在一个文件里声明ralgen选项
生成Ral model到多个文件
命令行选项 -F
可以生成多个独立的寄存器模型文件,一个子模块(ralf文件中的block)一个文件,这些独立的寄存器模型文件可以在子模块的验证环境中重用。
对于最顶层模块(ralf文件中最顶层的block或者system),生成一个顶层用的ral_blkname.sv文件,用`include命令将生成的子模块文件包含进来。
格式如下:
ralgen -uvm -t sys sys.ralf -F
其中顶层system sys下有几类block blk1,blk2,blk3...,会生成几个ral_block文件ral_blk1.sv,ral_blk2.sv,ral_blk3.sv...,同时生成ral_sys.sv文件,在ral_sys.sv文件中`indclude 这几个ral_block文件。
注意:即使是ralf文件中的system对应生成到ral文件中的顶层类也是继承自uvm_reg_block,这一点跟vmm不一样。
命令行选项 -P
与-F选项不同的是,生成的子模块文件名为ral_blk1_pkg.sv,ral_blk2_pkg.sv,ral_blk3_pkg.sv...顶层名为ral_sys_pkg.sv。文件是package形式。
命令行选项 -T
这个选项一定要和-F或者-P一起使用,只生成-t指定的文件。比如ralgen -uvm -t sys sys.ralf -F -T命令只会生成ral_sys.sv文件,尽管sys下有子模块,但不生成ral_blk1.sv,ral_blk2.sv...等文件。
命令行选项 +prunable
这个选项一定要和-F或者-P一起使用,对于子模块的ral_blk1.sv,ral_blk2.sv...而言,没有区别,区别在于ral_sys.sv文件中加入了RAL_PRUNE_blk1,RAL_PRUNE_blk2的宏,把关于ral_blk1,ral_blk2类相关的代码隔开了。
这么做的目的是:对于大型SoCs,顶层的一些测试可能并不需要包含所有子模块的ral_model,用宏隔开,可以灵活的修改,节省编译时间和仿真时间。
后门类
ralgen提供两种方式生成后门。前提是在ralf文件的定义里指定了后门访问的RTL路径
-
Cross-module references based backdoors(XMR's)
ralgen的-b选项生成一组write()/read()接口访问的类(扩展自uvm_reg_backdoor,bkdr后缀) -
DPI-C based
ralgen默认的后门选项。在ral_block的类中的build()里register调用add_hdl_path()
如果有bkdr类(ralgen -b),后门访问通过XMR方式,如果没有通过DPI-C方式,XMR优先级更高,DPI-C是默认方式。
命令选项-gen_vif_bkdr
-b选项生成的后门不能封装到package,因为HDL XMRs在生成的bkdr类里面,如果要想封装成package,加上-gen_vif_bkdr选项,这样会额外生成一个interface文件,HDL路径在这个interface文件里,而bkdr类中会声明interface,然后bkdr类的read,write是通过调用interface里生成的read write任务来访问的。
这个选项必须在有-b选项才可以被使用。
如果-b 和-P同时被使用,则必须也加上这个选项。