gen_apb_file
目錄
背景
SOC芯片中絕大部分功能模塊都有寄存器,處理器通過對寄存器的讀寫,實現對模塊狀態的獲取和功能的配置。硬件工程師、驗證工程師、軟件工程師都需要與寄存器打交道,需要有一份中心化[1]且可讀性強的寄存器描述文件作為依據,以制作寄存器硬件模塊、寄存器驗證模型、寄存器配置的頭文件。而手動制作消耗時間,且容易出錯。
graph TD; 寄存器描述文件-->寄存器硬件模塊RTL; 寄存器描述文件-->寄存器驗證模型; 寄存器描述文件-->寄存器配置的頭文件;
描述
gen_apb_file是一種開源的寄存器文件解決方案,包括中心化的寄存器描述文件(Excel格式)和相應的寄存器文件生成腳本,能夠快速生成寄存器硬件模塊、ralf模型、c語言頭文件。主要有以下特性:
- 支持APB接口類型
- 寄存器位寬可配
- 支持25種寄存器存取類型[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
注:
- 工作簿template.xls中的名稱template不會體現在生成文件中,你可以將它改成任何名稱如芯片名稱。
- 工作表<sheet_name>名稱tmplmd,xuartlite[3]為功能模塊的名稱,運行腳本會根據每一個工作表生成<sheet_name>_apb_cfg.v、<sheet_name>.h,<sheet_name>.ralf
維護者
如何貢獻
Open an issue 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.