IEEE1735 簡介
在上篇講 Silicon IP 的文 我們稍微提到過 IEEE1735 ,不過後來我發現 IEEE1735 的原理可以講得更深入一些,主要是多解釋一些 IEEE1735 會對 HDL 檔案造成的影響。
...在上篇講 Silicon IP 的文 我們稍微提到過 IEEE1735 ,不過後來我發現 IEEE1735 的原理可以講得更深入一些,主要是多解釋一些 IEEE1735 會對 HDL 檔案造成的影響。
...故事是這樣子的,早年我寫 verilog 文章 的時候, 以及直到最近如果我要做簡單的模擬,都是用 iverilog 當例子,但卻有以下兩點致命傷:
故事是這樣子的,在實作硬體的時候,verilog 大多是第一選擇(至少在亞洲區跟美洲區是這樣,VHDL那是另一個故事了), 而 verilog 作為古老的硬體設計語言,從各角度上來看都不足以稱為一款足夠現代的語言,整體的撰寫邏輯上仍然相當不抽象, 即便是細微的修改都可能導致大量的修正工作,即便透過 SystemVerilog 引入些許改進, 受限於開發工具(特別是開源相關的工具)與標準的匱乏,許多有用的功能仍然相當受限。
...這次開發 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 跑跑波型,波型對了放上去不會動你也不知道是什麼問題。
...