# gen_apb_file **Repository Path**: david6chen/gen_apb_file ## Basic Information - **Project Name**: gen_apb_file - **Description**: 自动产生apb 接口的外设寄存器模型,Excel寄存器描述转ralf文件 - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 11 - **Created**: 2022-01-21 - **Last Updated**: 2025-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## gen_apb_file [![Repo](https://img.shields.io/badge/Repo-gen_apb_file-green.svg "Repo")](https://github.com/wudayemen/gen_apb_file "Repo") [![Author](https://img.shields.io/badge/Author-wudayemen-blue.svg "Author")](https://github.com/wudayemen "Author") [![License](https://img.shields.io/badge/License-LGPL-orange.svg "License")](http://www.gnu.org/licenses/lgpl-3.0.html "License") [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) ## 目录 - [背景](#背景) - [描述](#描述) - [安装](#安装) - [用法](#用法) - [维护者](#维护者) - [如何贡献](#如何贡献) - [参考](#参考) - [许可证](#许可证) ## 背景 SOC芯片中绝大部分功能模块都有寄存器,处理器通过对寄存器的读写,实现对模块状态的获取和功能的配置。硬件工程师、验证工程师、软件工程师都需要与寄存器打交道,需要有一份中心化[[1]](#refer-anchor-1)且可读性强的寄存器描述文件作为依据,以制作寄存器硬件模块、寄存器验证模型、寄存器配置的头文件。而手动制作消耗时间,且容易出错。 ![gen_file](https://raw.githubusercontent.com/wudayemen/gen_apb_file/main/gen_file.PNG) ## 描述 gen_apb_file是一种开源的寄存器文件解决方案,包括中心化的寄存器描述文件(Excel格式)和相应的寄存器文件生成脚本,能够快速生成寄存器硬件模块、ralf模型、c语言头文件。主要有以下特性: - 支持APB接口类型 - 寄存器位宽可配 - 支持25种寄存器存取类型[[2]](#refer-anchor-2)(见下表) - 可生成verilog - 可生成ralf - 可生成c header - 支持多个模块 尚待改进的地方如下: - 未支持语义检查 - c header未包括域的信息 |NO |ACCESS |DESCRIPTION| |---|---|---| 1|RO|读写此域都无影响| 2|RW|会尽量写入,读取时对此域无影响| 3|RC|写入时无影响,读取时会清零| 4|RS|写入时无影响,读取时会设置所有的位| 5|WRC|尽量写入,读取时会清零| 6|WRS|尽量写入,读取时会设置所有的位| 7|WC|写入时会清零,读取时无影响| 8|WS|写入时会设置所有的位,读取时无影响| 9|WSRC|写入时会设置所有的位,读取时会清零| 10|WCRS|写入时会清零,读取时会设置所有的位| 11|W1C|写1清零,写0时无影响,读取时无影响| 12|W1S|写1设置所有的位,写0时无影响,读取时无影响| 13|W1T|写1入时会翻转,写0时无影响,读取时无影响| 14|W0C|写0清零,写1时无影响,读取时无影响| 15|W0S|写0设置所有的位,写1时无影响,读取时无影响| 16|W0T|写0入时会翻转,写1时无影响,读取时无影响| 17|W1SRC|写1设置所有的位,写0时无影响,读清零| 18|W1CRS|写1清零,写0时无影响,读设置所有位| 19|W0SRC|写0设置所有的位,写1时无影响,读清零| 20|W0CRS|写0清零,写1时无影响,读设置所有位| 21|WO|尽可能写入,读取时会出错| 22|WOC|写入时清零,读取时出错| 23|WOS|写入时设置所有位,读取时会出错| 24|W1|在复位(reset)后,第一次会尽量写入,其他写入无影响,读取时无影响| 25|WO1|在复位后,第一次会尽量写入,其他的写入无影响,读取时会出错| ## 安装 依赖python及xlrd - `sudo apt-get install python` - `pip install xlrd` ## 用法 - `python gen_apb_file.py template.xls` 注: 1. 工作簿template.xls中的名称template不会体现在生成文件中,你可以将它改成任何名称如芯片名称。 2. 工作表名称tmplmd,xuartlite[[3]](#refer-anchor-3)为功能模块的名称,运行脚本会根据每一个工作表生成_apb_cfg.v、.h,.ralf ![sheet_name](https://raw.githubusercontent.com/wudayemen/gen_apb_file/main/sheet_name.png) ## 维护者 [@wudayemen](https://www.cnblogs.com/wudayemen/) ## 如何贡献 [Open an issue](https://github.com/wudayemen/gen_apb_file/issues) or submit PRs. ## 参考
[1] [参考路科验证文章](http://blog.eetop.cn/blog-1561828-6266218.html)
[2] [参考 «UVM实战» p512]
[3] [参考Xilinx Uartlite](https://www.xilinx.com/support/documentation/ip_documentation/axi_uartlite/v2_0/pg142-axi-uartlite.pdf) ## 许可证 The gen_apb_file.py is using the LGPL license. That's for the formalities. But there are some practical statements implied by those licenses: Your freedoms are: - You can use gen_apb_file.py in your closed/commercial projects. - The generated RTL is yours (.v files) - The generated RALF is yours (.ralf files) - The generated C HEADER is yours (.h files) Your obligations (and my wish) are: - if you modify the gen_apb_file.py , please, share your improvements. Also, gen_apb_file is provided "as is", without warranty of any kind.