在FPGA工程开发过程中,通常会面临大量寄存器的管理与维护,尤其是在与软件进行相应的更新同步时会变得繁琐且耗时。在这里我想介绍一个优秀的GitHub项目,它可以根据人类可读的寄存器映射规范(代码、配置文件或者EXCEL)自动生成与配置寄存器、状态寄存器相关的源代码,例如HDL代码、UVM寄存器模型、C头文件和Wiki文档等,从而方便项目管理与同步。
RgGen, https://github.com/rggen/rggen 是一种用于ASIC/IP/FPGA/RTL的代码生成工具,它具有以下特点:
- 寄存器映射规范以可读的格式编写,如Ruby,YAML,JSON,TOML或电子表格(XLSX、XLS、ODS、CSV)
- 支持标准总线协议AMBA APB,AXI4-Lite,Wishbone
- 支持多种输出格式
- SystemVerilog,Verilog,VHDL
- UVM寄存器模型
- C头文件
- 用Markdown编写的寄存器映射文档
RgGen的安装
RgGen的运行需要至少Ruby3.0环境,通常有三种方式可以进行Ruby安装,这里以Ubuntu为例。
- 如果是Ubuntu22.04或者之后的版本,可以直接安装
sudo apt install ruby-full
,Ruby安装完成后,您可以使用ruby --version
命令检查版本。
在Ruby安装完成后最后使用sudo gem install rggen
安装RgGen。由于对verilog和VHDL的支持不是默认安装,还需执行:
$ sudo gem install rggen-verilog
$ sudo gem install rggen-vhdl
对于老版本的Ubuntu,可以选择多种方式安装ruby,这里仅以rbenv方式进行描述。
- 通过rbenv安装ruby。
首先使用以下命令安装 Ruby 所需的依赖项和库:
sudo apt install git curl autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev
然后使用rbenv-installer脚本可以系统上安装rbenv。
使用curl:
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
或者,使用wget:
wget -q https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer -O- | bash
参考https://github.com/rbenv/rbenv-installer
完成后更新PATH环境:
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
Rbnev 安装完成后,即可使用命令rbenv install -l
列出 Ruby 版本,然后使用类似rbenv install 3.3.0
的指令安装最新版本的 Ruby。如果需要将安装的 Ruby 版本设置为全局版本,可以执行命令rbenv global 3.3.0
如果要确认Ruby 的版本,可以使用以下命令ruby --version
在Ruby安装完成后最后使用sudo gem install rggen
安装RgGen。由于对verilog和VHDL的支持不是默认安装,还需执行:
$ sudo gem install rggen-verilog
$ sudo gem install rggen-vhdl
- 使用docker直接使用RgGen,该方法只需安装docker,无需ruby的额外安装。
docker的安装参考phoenixnap.com/kb/install-docker-on-ubuntu-20-04,
使用docker运行RgGen的流程参考这里https://hub.docker.com/r/rggendev/rggen-docker,后面的叙述将不再以docker方式为例。