【日拱一卒,脚踏实地】如何使用python3脚本生成rtl代码

一 基本思想

通过脚本生成代码,主要用来解决多次重复例化或多次重复逻辑的情况,从而达到节约人力以及降低错误率的目的。
其基本思想为,想法获取不同的变量,并将其代入到固定的模板中。

二 表格生成法

通过表格收集不同的变量,可以更加直观、便捷,方便后期代码的迭代更新。
以寄存器表单生成rtl代码为例,步骤如下:

1 创建xlsx表格

在表格中罗列出所需要关心的变量,如下表所示:

addr_offsetregister_namesw_attrhw_attrbitfield_namebit_widthdefaultdescription
0x1000reg_dummyrwr27:0reg_dummy_inst28100_0000the register is an example
0x1000reg_dummyrwr3:0reserve4reservereserve

接下来,我们就要使用脚本来获取这些变量。

2 python3脚本获取xlsx表格内容

使用python3处理xlsx表格,首先需要调用openpyxl或者xlrd模块,其使用方法与手动操作Excel文件一样,即先打开工作薄(workbook),再选择工作表(sheet),最后操作单元格(cell)。
具体代码如下:

import openpyxl
#1 选择工作薄
wb = openpyxl.load_workbook('example.xlsx')

#2 选择工作表
ws = wb['Sheet1'] #获取工作簿中表名为Sheet1的工作表对象

#操作工作表
max_row = ws.max_row #获取Sheet1工作表中行数
ws[f'B{1}'].value #获取工作表Sheet1中第1行,第B列中的数据

#3 操作单元格
ws[f'B{1}'] #获取工作表Sheet1中第1行,第B列中的单元格,注意不是数据

或者

import xlrd
#1 选择工作薄
wb = xlrd.open_workbook('example.xls') #假设该工作簿中共有2张工作表,分别命名为Sheet1和Sheet2
#or
wb = xlrd2.open_workbook('example.xlsx')

#2 选择工作表
s_names = wb.sheet_names() #获取工作簿中所有工作表的表名
print(s_names) #结果为['Sheet1','Sheet2']
all_sheets = wb.sheets() #获取工作簿中所有工作表对应的工作表对象
sheet_1 = wb.sheet_by_name('Sheet1') #获取工作簿中表名为Sheet1的工作表对象
sheet_2 = wb.sheet_by_index(1) #获取工作簿中第2张工作表对象

#操作工作表
sheet_1.nrows #获取工作表Sheet1中的行数
sheet_1.ncols #获取工作表Sheet1中的列数
sheet_1.row_values(1) #获取工作表Sheet1中第二行中的所有数据,结果以列表的形式返回
sheet_1.col_values(0) #获取工作表Sheet1中第一列中的所有数据,结果以列表的形式返回

#使用列获取的方式,获取整个Sheet1表格
for i in range(sheet_1.ncols):
	print(sheet_1.col_values(i))

#3 操作单元格
sheet_1.row(1) #获取工作表Sheet1中第二行中的所有单元格,注意不是数据,虽是列表,但类似于字典[text:'row1.value0',text:'row1.value1',...,text:'row1.value*']
sheet_1.col(0) #获取工作表Sheet1中第一列中的所有单元格,注意不是数据,虽是列表,但类似于字典[text:'col0.value0',text:'col0.value1',...,text:'col0.value*']
sheet_1.cell(1,0) #获取工作表Sheet1中第二行,第一列中的单元格
#单元格.value --可以获取指定单元格中的值

以上就是获取Excel文件内容的所有相关操作,总的来说比较简单,相比openpyxl,xlrd可以以行为单位或者以列为单位获取工作表中的内容。

3 python3脚本生成rtl代码

获取完所有变量后,就可以通过操作列表的方式,填如对应的变量,最后输出rtl文件。
举例说明如下:

# generate verilog RTL code
rtl_file = []
rtl_file.append("module example_top (\n")
rtl_file.append("intput		clk		,\n")
rtl_file.append("intput		rst_n	,\n")
...
rtl_file.append("output		Q		);\n")
... #main code
rtl_file.append("assign Q = %s;\n" %(sheet_1.cell(1,0).value)) #填入对应的变量

fp = open("example_top.v",'w') #创建文件名为example_top.v的rtl
#将列表rtl_file填入创建的文件中
for i in range(len(rtl_file)):
	fp.write(spec_file[i])
fp.close()
print("example_top.v is generated sucessfully!")

至此,就完成了使用表格产生rtl文件的全过程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 1.1前言 1、由于最近工作一直用Oracle,故对Oracle数据库研究为对象。 2、根据工作业务需求实际情况进行功能研发。为什么要开发呢?因为在数据库升级或者迁移的时候,为了保证不同环境不同数据库数据保持同步,故数据库SQL脚本非常作用。比如:数据库主脚本,副脚本,增量脚本。 3、 什么是主脚本、副脚本、增量脚本呢? 3.1、主脚本指数据库表或存储过程,视图脚本,序列等脚本。 3.2、副脚本指必须执行主脚本之后才执行的脚本。换句话说在没执行主键脚本的情况下,副脚本执行之后会回滚事务失败。 3.3、增量脚本指在执行主脚本或副脚本之后,根据需求对某个表添加/修改约束(主外键约束,长度约束等),添加/修改字段/添加数据等情况对数据库结构改变处理的一种行为脚本。 1.2作用 1、 快速产出自定义规则需要的SQL脚本。 2、减少人工编写SQL脚本出错率问题,完全通过程序检测SQL准确性。 3、帮助开发人员提高SQL编写效率,减少人工编写SQL开发成本问题。 4、帮助开发人员节约时间,同时避免繁琐不必要编写SQL的工作。 二、实现方式与原理 2.1实现方式 1、实现方式分:正向与逆向实现。什么是正向与逆行呢【是否有鸡还是有蛋,先后道理同等】 2、正向方式:首先把设计好数据库表文档,把所有表的字段属性配置到EXCEL或者CSV格式的文件通过JXL/POI技术去读取文件的字段,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 3、逆向方式:首先有数据库表,然后通过ORM持久化技术连接数据库再读取表的字段等属性出来,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 2.2原理 对数据库软件内置核心表或视图查询出来存储用户行为表结构所有属性信息,对此属性结构信息进行分析与组装所需要SQL脚本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值