本文主要是介绍VCS的ralgen命令产生UVM寄存器模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 一、寄存器描述表格
- 二、生成 .ralf 寄存器文件
- 2.1 field
- 2.2 register
- 2.3 register block
- 2.4 system
- 三、产生UVM寄存器模型
前言
在验证时,寄存器模型是必不可少的一个环境,且在项目中可能面临着需要不断更新迭代的需求。那么如何快速建立 UVM寄存器模型 呢?采用VCS ralgen脚本的主要步骤如下:
- 中心化的寄存器描述文件,如 ods、CSV、XML等;
- 根据寄存器描述文件产生ralgen需要的 .ralf 格式的寄存器文件;
- vcs的ralgen 命令生成 UVM register modle;
我们通过脚本来解析表格,直接生成寄存器模型,也可以生成 ralf 文件,然后通过 VCS 工具中的 ralgen 产生寄存器模型。但是VCS工具提供了更可供选择的option,提供了更强大的机制,所以不妨可以试试用ralgen的方式来构建寄存器模型。下面将逐一介绍。
一、寄存器描述表格
寄存器模型应该是中心化管理的,因为不同的部门都需要一份严格的寄存器描述文档来开展工作。这里以下图路科验证提供的寄存器列表为例。
二、生成 .ralf 寄存器文件
首先我们先介绍ralf文件的内容格式。先以VCS提供的例子为参考,如下就是ralf文件中的一个register block的描述形式。
解释上图:
line | code | description |
---|---|---|
1 | b1 | 此register block的名称; |
2 | bytes 1 | 1)指定这个register block的位宽; 2)如果所有register位宽之和大于此bytes生成ralf文件时会报错; |
3 | register r | 此register的名称; |
4 | bytes 1 | 1)指定这个register的位宽; 2)如果所有field位宽之和大于此1bytes,则会报错; 3)如果没有添加bytes,那么系统会自动计算所有bits之和,然后找到 最小正整数*8 >= 所有域位宽之和。例如所有域的位宽之和是12bit,那么系统会用16bit来存储这个寄存器数据。 |
5 | field WDT_EN@'h5 | 1)域名为WDT_EN; |
6 | bits 1 | 指定这个域的位宽; |
7 | reset 'h0 | 复位值为’h0; |
8 | access rw | 该域的访问属性是RW; |
9 | enum{ …} | 在这个域的UVM代码中会声明一个enum |
下面介绍一下它们基本语法规则:
2.1 field
field 对应生成 UVM 寄存器模型中的 uvm_reg_field,如下:
对应的uvm_reg,如下:
2.2 register
ralgen支持 register 中的 field 为数组的形式,如下:
2.3 register block
类似field,ralgen 也支持 register block 中的 register 为数组的形式,如下:
2.4 system
三、产生UVM寄存器模型
有了.ralf 的寄存器描述文件后,我们通过以下命令来产生UVM寄存器模型,如下:
ralgen [option] -t topname -I dir -uvm filename.ralf
option | description |
---|---|
-t topname | 指定 ralf 文件中一个top_level的register block 或者 system 的名称; |
-uvm | 生成UVM寄存器模型; |
-o ral_model_name | 指定输出文件的名称,生成的register model文件名为ral_model_name.sv |
-I dir | 指定ralgen去搜索文件的路径; 注意:这里的 -I 是大写的 i ; |
filename.ralf | 指定 ralgen 脚本吃进去的.ralf格式的寄存器描述文件; |
-b | 为寄存器和memory指定后门访问方式,生成后门访问的代码 |
-B | 寄存器的地址以 Byte 为单位; |
-c b | 即coverage bits,生成register bits(寄存器比特位)功能覆盖率模型; |
-c f | 即coverage field,生成“Field Value”(域段值)功能覆盖率模型 |
-c a | coverage address,生成“ADDRESS MAP”(地址映射)功能覆盖率模型; 注:几种覆盖率模型也可以同时存在,如 -c af; |
👉注:这里对 ralgen 只做了最简单的介绍,ralgen还有许多的功能没有提及,待以后用到时,会继续更新…
这篇关于VCS的ralgen命令产生UVM寄存器模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!