發表文章

目前顯示的是 3月 1, 2020的文章

[Env] Icarus Verilog(iverilog) + gtkwave 安裝與環境建立

圖片
最近閒暇時間,我要開始使用 Intel 的 FPGA (DE2-115 VEEK-MT)來做一些小遊戲來玩玩。 在這之前我想先測試一些簡單的範例程式,例如顯示一些字在我買的 FPGA 螢幕上。 目前我要做的事為: 先建立一個模擬環境來寫 Verilog 以及 Testbench。 在我們的模擬環境測試一些簡單的小程式。 然後把簡單的小程式燒錄進 FPGA。 本篇文章要記錄的事情,就是如何做到上述第一步驟: 建立一個模擬環境 。 Let's Go! 我的工作環境主要都在 Linux,我使用的作業系統為 Elementary OS。 首先可以安裝一套免費的 Verilog 模擬器 Icarus Verilog: 官方網站在此 安裝方法很簡單,輸入以下指令: sudo apt-get install iverilog 接著我們要有一個可以看數位訊號波形的免費軟體,叫做 gtkwave,安裝一下: sudo apt-get install gtkwave 接著安裝 Verilator,這個軟體也是個免費的 Verilog 模擬器,但是我安裝 Verilator 目的為使用 Verilator 內建的 verilog lint 功能。lint 就是語法檢查,lint 可以讓 Verilog 內一些潛在的危險語法被偵測出來,例如 bit overflow 造成的運算錯誤。 sudo apt-get install verilator 安裝好以上三個免費工具之後,首先要練習將一個程式專案的資料夾結構整理好。 我習慣將一個程式專案用以下的資料夾結構組織起來: ├── build ├── doc └── src ├── bench └── rtl build:編譯程式的地方,以及放編譯出來的執行檔和 log,以及跑 lint 和放波形都在 build 資料夾內操作。 doc:放一些文件筆記。 quartus:放 Quartus 專案的地方。我的 FPGA 買的是 Intel(Altera) 公司的,因此使用的 FPGA 專案建置軟體是 Quartus。 src:放源碼的地方,分成兩個資料夾,一個放 Testbench 類的檔案,另一個放 rtl code 檔案。(即 v...

[Tools] Verilog-mode 用法整理 (usage collections)

上一篇文章 已經說明如何安裝 Verilog-mode 在 Vim 內。 以下主要把常用的 Verilog-mode 自動接線技巧做整理。 1.   最基本的 verilog 自動接線使用方法如下: module a(/*autoarg*/); input a,b; output c; endmodule 也就是在小括號內,輸入 /*autoarg*/ 關鍵字,通過 Verilog-mode 處理後,a, b, c 會自動貼到小括號內的 port 上: module a(/*autoarg*/    // Outputs    c,    // Inputs    a, b    ); input a, b; output c; endmodule 其實這一直是我覺得 Verilog 語法比較多餘的地方,因為已經宣告成 IO 的訊號,再貼一次到小括號內,似乎增加 code 長度,顯得多餘。一般的程式語言,函式的 argument 都只宣告一次而已。 2.   宣告 instance,也能自動接線,使用的關鍵字為 /*autoinst*/: module test; a a_inst(/*autoinst*/); endmodule 自動接線結果: module test; a a_inst(/*autoinst*/ // Outputs .c (c), // Inputs .a (a), .b (b)); endmodule 以上兩個就是最常用的自動接線。 3.   自動宣告 input 和 output: 假如在上述 test.v 內開頭寫: /*autoinput*/ /*autooutput*/ 則 Verilog-mode 處理結果: module test; /*autoinput*/ // Beginning of automatic inputs (from unused autoinst inputs) input a; // To a_inst of a.v input b; ...