COSCUP 2023

RSA256:用 verilator 驗證與測試的硬體模組
2023-07-30, 14:15–14:45 (Asia/Taipei), TR 412-1
Language: Traditional Chinese (Taiwan)

我們打造了 RSA256 這個專案,展示一套開發硬體時的標準流程,依序開發 C model 、SystemC model、再到 verilog module,並開發 Verilator 驗證框架,使每個階段間都能夠交互驗證,加速硬體開發的平行化與正確性。


硬體開發由於 Verilog/System Verilog 本身語言的缺陷,設計上很容易形成難以重複利用的一次性程式,因此我們使用 SystemC 先建立軟體模型確定單一模組的功能,再轉換為 Verilog 就能平行化以及更踏實。
本專案基於 Verilator 這款開源硬體工具中可稱為頂尖的驗證工具,也是少數功能豐富度與效能可以和商用工具一較高下的開源EDA。Verilator 會將 verilog module 轉成一個 C++ Class 或是 SystemC Class,我們就能撰寫執行檔讀寫這個 Class,來模擬出 verilog 執行時的行為。

本專案的貢獻包括以下幾個元素: * 用 C++ 實作了 vint 資料型態,模擬 verilog 的任意寬度整數運算行為 * 基於 vint 寫了 $bits 以及 {a, b} 等 verilog slice 語法 * 實作連接 verilog 通用的 handshake 介面的輸入/輸出以便寫入、讀出資料,並且能套用不同的機率參數。 * 建立一整套測試的框架,讓使用者只需要關注測試用的資料,就能快速複製測試到不同的 verilog 模組上,驗證設計的正確性。 * verilog 資料結構 serialize 成檔案當成 unit test。
透過這套框架,我們實作了 256 bits 的 RSA 演算法核心,每個模組都有對應的模型以及 verilator 的驗證。


Difficulty

Beginner

Target Audience

Verilog engineers

大學修了電路可是出社會之後都在軟體公司寫軟體,最近換公司碰到許久沒碰的硬體,只覺得硬體好難,跟大學一樣都靠同學罩我 QAQ