用 verilator 輔助數位電路設計:後記
這次開發 RSA 256 ,整體來說我覺得比 2010 年那時候順多了。
2010 年因為第一次接觸 verilog 和 FPGA,在兩個月內要衝出 RSA 256,自然也不會懂什麼 valid/ready,
現在回去看介面都是用 start 配 ready,相當於只有 i_valid 跟 o_valid,除此之外都是簡單暴力的狀態機,
放一下那時候報告畫的 state diagram 給大家笑一下,根本大雜燴什麼都攪在一起。
這次開發 RSA 256 ,整體來說我覺得比 2010 年那時候順多了。
2010 年因為第一次接觸 verilog 和 FPGA,在兩個月內要衝出 RSA 256,自然也不會懂什麼 valid/ready,
現在回去看介面都是用 start 配 ready,相當於只有 i_valid 跟 o_valid,除此之外都是簡單暴力的狀態機,
放一下那時候報告畫的 state diagram 給大家笑一下,根本大雜燴什麼都攪在一起。
上一回設定好 testbench 之後,終於可以來寫 verilog 了,這回就來看看我們怎麼用我們這套 Testbench, 搭配 verilog 的 pipeline 設計來實作 RSA256。
...準備好 C model 和 SystemC 之後,我們的主角 verilator 終於帥氣登場啦。
verilator 會做什麼呢?它的使用流程是這樣子的,它會先分析你寫的 verilog/system verilog 檔案,
然後把它轉成一個 C++ 的標頭檔與實作,裡面的 class 會模擬你寫的 verilog 的行為。
接著你寫另一個 C++ 程式,初始化 verilator 產生出來的 class,餵它 clock 和其他你想要測試的信號,
就能模擬 verilog module 在接收這些信號時的行為,詳細的使用方式,一樣請參考強者我同學 johnjohnlin 的 blog
。
用 verilator 的目的,就是要驗證 verilog 的實作是正確的,但我們又怎麼知道什麼是正確的呢?
就要準備好 C model 跟 SystemC 的實作了。
有三個月沒有寫新文了,不過沒關係,這裡不像吉他英雄頻道一樣有人會催更新。
故事是這樣子的,最近小弟的生活出現天翻地覆的變化,在忙各種搬家啦什麼的,都沒時間好好寫 code,
一月月初跨年、月中在三年的閉關之後出發去日本待了 10 天,回來月底接著過第二個年,什麼我的一月怎麼不見了???
這系列的主題要講電路驗證工具 verilator,本來這篇的標題是 在 2022 年應該要如何開發數位電路, 一直拖就拖到 2023 年,然後說真的,verilator 在取代現有的商用工具上應該還是不夠給力, 各大晶片設計公司也應該都有自己一套開發的流程(沒有的公司是做不出像樣的晶片的), 沒什麼稱做應該的理由,所以就改成現在這個標題了。
...終於來到我隱藏已久的終極目標了。
沒錯,其實我在拿到這片 FPGA,在想要做什麼的時候,經過一天得到的答案就是這個:Nand2Tetris
,
用 FPGA 真的把這顆 CPU 給做出來,前面什麼 UART、HDMI、BRAM 都不過是前菜罷了,實際上我在下很大一盤棋。
當然,因為我們用的是 verilog 的關係,我們不會真的從 nand gate 開始往上堆,而是用 verilog 內建的運算來實作,
所以 nand2tetris 第一、二章用 nand 弄出邏輯閘和加法器的部分就跳過,直接從 ALU 開始。
這次的更新比較久一點,故事是這樣子的,在試完 HDMI 之後,我花了一點時間在試著連 FPGA 版上有實體 chip 的其他裝置, 包括:SDRAM、Flash 跟 SDcard。問題是這幾個都沒那麼好連,特別是沒有 LA 的狀況下根本就是瞎子摸象, 只能用 verilator 跑跑波型,波型對了放上去不會動你也不知道是什麼問題。
...上一章我們打通了 FPGA 的開源工具鏈,接下來我們就能測試一下 icesugar-pro 有的介面,
首先實作 FPGA 還是需要有輸入輸出,否則也只是弄出一個無法互動的程式,而最簡單的輸出入介面,就當屬 UART 了。
icesugar-pro 的 github 上,也附上了一個 UART 的範例
,
會不斷對你的電腦輸出 “0” 到 “9”(然後這段 code 還有 bug XD),這篇我們就來寫一個有 tx, rx 的 UART 模組吧。
故事是這樣子的,今年的 COSCUP 投了一個 System Software 的 session , 然後該議程軌的主持人自行提供了投稿獎勵,以下 Facebook 原文:
為了鼓勵各位同學投稿、以及體驗知識有價的參與感,在跟Jserv老師討論後,我們將提供兩位 有償 徵稿名額給這邊的同學。
投稿後有獲得錄取的前兩位同學,將會獲得新台幣 2,500 元的獎勵金,以及可以配製成RISC-V核心、運行Linux的FPGA開發板乙張!
獎勵金的部分我就回絕了,畢竟有薪人士拿這個錢道義上說不過去,留給比我有才的許多學生講者比較好。
不過 FPGA 我評估之後就收下了,畢竟 FPGA 難買,之前實驗室玩的 DE2
都要破萬元(然後它竟然停產了),然後有些 project 只用軟體寫實在沒 fu,一直想弄一塊 FPGA 來玩,於是就接受了 FPGA。