脚本-生成寄存器模型

又找到了新的好玩的东西,首先是寄存器信息的标准化编辑

1. 寄存器格式

image-20210804103240399

2. 思路

较为简单,按照SV代码的固定套路写入指定文件夹

  • 寄存器uvm_reg的模板

    • 将上述寄存器信息看做数据库,以每一个寄存器名称作为标识,构建一个寄存器bean,考虑到后续可能还有信息引入,将所有成员变量封装到一个字典中~

    • 字典信息首先包括reg的基本信息:name,address,access

    • 可以看到一个寄存器有多个field且每个feild都对应很多信息,在字典中添加fields项,value为列表,将每个域的字典信息存放到该列表:[{field:en,field_access:RW,。。。},{field:reserved,field_access:RO,。。。}]

    • 自此eg_item的模板构成

  • 寄存器模型uvm_reg_block的模板

    • 本质上就是把每个寄存器的信息填入,生成build方法完成每个reg的创建,调用reg的build和configure方法

3. 代码

gitee:https://gitee.com/biongd/rgmGenerate

3.1 pandas对csv的处理:

csv文件名:'0v.csv'

  • 读取csv文件,返回DataFrame类型对象

  • 去除前面几行无用信息:

    1
    2
    reader.drop(range(1,2),axis=0,inplace=True)
    reader.to_csv('0_0v.csv',index=False)
  • 保存文件,删除表头

    1
    reader.to_csv('0v.csv', header=None)

代码:

1
2
3
4
5
import pandas as pd
reader = pd.read_csv('0v.csv')
print(reader)
reader.drop(range(0,6),axis=0,inplace=True)
reader.to_csv('0v.csv', header=None)

效果:

源文件:

image-20210805215607522

处理后:

把最后一行换位reader.to_csv('0_0v.csv',index=False),就能把序号给删掉

image-20210805215542111

3.2 csv操作

读:

  • reader:按行读,输出嵌套列表,内层列表为每一行的值
1
2
3
4
5
6
7
#-*-encoding:utf-8-*-
import csv
#读取csv文件
with open("C:\\Users\\A9050031\\Desktop\\test.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
print(row)
  • DictReader:同样是按行读,但是输出的列表内,嵌套的每一行数据用字典保存

    注意:第一行数据作为字典的key,每一行的数据都是以这里的key+该行的value保存的

1
2
3
4
5
6
7
#-*-encoding:utf-8-*-
import csv
#读取csv文件
with open("C:\\Users\\A9050031\\Desktop\\test.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)