👉有关python的基础知识请看:python入门学习
下面关于一些Python处理文件的脚本。
一、解析CSV文件产生Systemverilog代码
csv库中常用的方法,包括:
方法 | 描述 |
---|---|
reader( ) | 返回一个列表对象,逐行读csv文件。默认每一行读取一个字符串组成的列表 |
csv.DictReader( ) | 返回一个字典对象,逐行读取文件。以第一行为每一列的key值, |
对象.write( ) | 向文件中写入 |
从一个最简单的解析csv文件的脚本开始。
import csv #导入Python标准库
sourceFile = open('exe.csv') #打开目标CSV文件
data = csv.DictReader(sourceFile ) #读取数据,产生一个字典对象
destinFile = open('exe.sv','w') #写入的文件,如不存在则创建
for i in data: #将文件中的内容一行一行的输入到sv文件中
destinFile.write(i+'\n')
比如解析下面这个Excel,产生一个transaction,该怎么操作?
NAME | FIELD | DESCRIPTION | WIDTH |
---|---|---|---|
status | enable | data transfer build | 1 |
valid | data transfer success | 1 | |
data | 8 | ||
address | data address | 4 |
import csv #导入Python标准库
sourceFile = open('status.csv') #打开目标CSV文件
data = csv.DictReader(sourceFile ) #读取数据,产生一个字典对象
destinFile = open('status_transaction.sv','w') #写入的文件,如不存在则创建
#------文件开头----
destinFile.write('class '+ data['NAME'] +'_transaction extends uvm_sequence_item;\n')
#-----声明变量-----
for i in data: #将文件中的内容一行一行的输入到sv文件中
destinFile.write('\trand bit [%s:0]' % str(int(i['WIDTH'])-1) + i['FIELD']+'; // '+i['DESCRIPTION']+'\n')
#----域自动化-----
destinFile.write('\n\t`uvm_object_utils_begin(%s_transaction)' % data['NAME'])
for i in data:
destinFile.write('\n\t\t`uvm_field_int(%s,UVM_ALL_ON)' % i['FIELD'])
destinFile.write('\n\t`uvm_object_utils_end\n\n')
#----构造函数-----
destinFile.write('\tfunction new(string name = "%_transaction");' % data['NAME'])
destinFile.write('''
super.new(name);
endfunction
endclass
'''
【持续更新…】