Open FPGA 系列 - Nand2Tetris

終於來到我隱藏已久的終極目標了。 沒錯,其實我在拿到這片 FPGA,在想要做什麼的時候,經過一天得到的答案就是這個:Nand2Tetris, 用 FPGA 真的把這顆 CPU 給做出來,前面什麼 UART、HDMI、BRAM 都不過是前菜罷了,實際上我在下很大一盤棋
當然,因為我們用的是 verilog 的關係,我們不會真的從 nand gate 開始往上堆,而是用 verilog 內建的運算來實作, 所以 nand2tetris 第一、二章用 nand 弄出邏輯閘和加法器的部分就跳過,直接從 ALU 開始。

...

Open FPGA 系列 - Block RAM

這次的更新比較久一點,故事是這樣子的,在試完 HDMI 之後,我花了一點時間在試著連 FPGA 版上有實體 chip 的其他裝置, 包括:SDRAM、Flash 跟 SDcard。問題是這幾個都沒那麼好連,特別是沒有 LA 的狀況下根本就是瞎子摸象, 只能用 verilator 跑跑波型,波型對了放上去不會動你也不知道是什麼問題。

...

Open FPGA 系列 - HDMI

上回我們實作了 UART 的輸入輸出,這回就來挑戰板子上有附的另一個介面:HDMI,這個實作出來我們就有影像輸出可以用了呢。
不過因為 HDMI 的難度比起來上升了一個層次,這次我是直接用 icesugar-pro 的範例程式碼改寫, TMDS 的部分則有參考網路上的 encoder

...

Open FPGA 系列 - UART

上一章我們打通了 FPGA 的開源工具鏈,接下來我們就能測試一下 icesugar-pro 有的介面, 首先實作 FPGA 還是需要有輸入輸出,否則也只是弄出一個無法互動的程式,而最簡單的輸出入介面,就當屬 UART 了。
icesugar-pro 的 github 上,也附上了一個 UART 的範例, 會不斷對你的電腦輸出 “0” 到 “9”(然後這段 code 還有 bug XD),這篇我們就來寫一個有 tx, rx 的 UART 模組吧。

...

Open FPGA 系列 - blink led

故事是這樣子的,今年的 COSCUP 投了一個 System Software 的 session , 然後該議程軌的主持人自行提供了投稿獎勵,以下 Facebook 原文:

為了鼓勵各位同學投稿、以及體驗知識有價的參與感,在跟Jserv老師討論後,我們將提供兩位 有償 徵稿名額給這邊的同學。
投稿後有獲得錄取的前兩位同學,將會獲得新台幣 2,500 元的獎勵金,以及可以配製成RISC-V核心、運行Linux的FPGA開發板乙張!

獎勵金的部分我就回絕了,畢竟有薪人士拿這個錢道義上說不過去,留給比我有才的許多學生講者比較好。
不過 FPGA 我評估之後就收下了,畢竟 FPGA 難買,之前實驗室玩的 DE2 都要破萬元(然後它竟然停產了),然後有些 project 只用軟體寫實在沒 fu,一直想弄一塊 FPGA 來玩,於是就接受了 FPGA。

...

數位電路之後,verilog系列文4:寫 testbench

testbench是verilog另一個很好用的功能,一般來說,如果設計的電路是要完成某個特定的演算法,比如我們在實驗中要實作256bits的montgomery algorithm,把電路透過quartus合成、燒進FPGA執行,透過Logic analyser分析行為實在太曠日費時(那時寫的不好,合成一次就要30分鐘= =)。
這時候testbench出現了,testbench提供了一個方式,讓我們能利用軟體模擬電路的行為,看看電路的反應,每次模擬只需要幾秒鐘,就可以得到電路的行為。

...

數位電路之後,verilog系列文3:寫一個module

在上一篇裡面,我們談過了verilog 三大塊的寫法,以及常見的verilog錯誤,那現在就來看看,一個verilog module的構成,
其實一個module,就好像在寫一個完整的電路,有哪些input, output,要有多少個register,之間的接線,甚至要包住其他的module,是一塊很完整的block。

...

數位電路之後,verilog系列文2:常見的 verilog 譔寫錯誤

感謝鄭為中大神的提醒,要寫這篇verilog常見錯誤文,也感謝鄭為中大神對我 verilog 觀念的澄清:)

譔寫verilog最常見的錯誤,當然就是syntax error……= =
當然這裡不討論這些,雖然他們很常出現,像忘了加分號、拼錯字之類的,我們延續上一篇對verilog結構的討論,再來看看,寫得不好的verilog code會造成怎麼樣硬體上的後果,與上一篇結構問題相同,需要轉成硬體的結果造成這個verilog獨有的錯誤。

...

數位電路之後,verilog 系列文1:談談 verilog 三大塊的架構

常說「寫verilog一定要有硬體的思維」,這是因為verilog,亦或VHDL的用意,最終都是要轉成硬體上的 register 和 combination circuit, 我自己的寫verilog比較不像在寫一般的程式語言,可以宣告各個變數、作運算,然後輸出結果; verilog會不斷宣告module、register跟combinational circuit與其中的接線,結合成一個完整的電路。

...