本帖最后由 電子愛好者沒錯 于 2023-8-22 20:31 編輯
FPGA 開發專題 | 手把手教你用 VScode 搭建輕量級 Verilog 仿真環境 | 真保姆級目錄:
- 零、寫在前面
- 一、來瞅瞅我的實現方案
- 二、代碼高亮和語法檢查——環境準備
- 2.1 VScode 及相關插件安裝
- 2.2 iverilog/make 安裝
- 三、一個腳本搞定一切!編譯、RTL 時序仿真全過程!
- 3.1 腳本實現原理
- 3.2 項目演示:帶你實現一個全加器
1599968458_904071.jpg (372.74 KB, 下載次數: 20)
下載附件
2023-8-22 19:16 上傳
 圖:雷元素客晴
全文共 3360 字,閱讀大約需要 5 分鐘 只要附著雷元素力,刻晴的發簪就能化為一柄銳利無比的小刀。 刻晴的三點養成日記:超載反應造成的是火元素傷害,超導反應造成冰元素傷害、且降低的是物理防御 利用元素反應造成的傷害,雷、冰、火三種史萊姆都會對應免疫 觸發元素反應造成的傷害,只吃元素精通加成,并不享受攻擊力的加成
刻晴這種如此可愛的角色,養成不易,也要搭配特殊的陣容,來發揮她的最佳效果。FPGA 的開發也是這樣,各種仿真軟件陣容過于繁復,往往我的需求是寫 verilog/VHDL 代碼并仿真時序,并不想安裝各個廠家(如 Quartus,Vivado)的軟件,有沒有一種輕量、高顏值、簡單好用、功能強大且免費的仿真環境呢?
本篇作為保姆級教程,將會手把手帶你配置 FPGA 輕量級開發環境和使用我的腳本!該方案支持 windows 和 linux 系統。 本文首發于在下石同學 未經授權 不得轉載
文 | 在下石同學
零、寫在前面
FPGA 開發離不開各種仿真,尤其是 RTL 級這種最基本的邏輯功能性仿真,對 FPGA 及開發流程還不了解的童鞋請看我的往期文章: 往期文章鏈接
盡管現在許多 FPGA 廠家的軟件功能都很齊全,但是代碼編輯界面還保留著上世紀的風格,特別是有些仿真工具入門門檻較高,安裝起來也比較麻煩,FPGA 開發中的大多數時間都花費在 verilog/VHDL 代碼編寫和 RTL 仿真上,往往我的需求是寫 verilog/VHDL 代碼并仿真時序,并不想安裝各個廠家(如 Quartus,Vivado)的軟件,有沒有一種輕量、高顏值、簡單好用、功能強大且免費的仿真環境呢?
答案是使用 iverilog !
為什么要用 iverilog ?實際上 VHDL/Verilog 仿真多使用 Modelsim 這種專業軟件,但是 iverilog 足夠輕量,并且用作科研和開發完全不用擔心版權的問題,然而 iverilog 開發需要用戶使用一些腳本和命令行,這一點就勸退了大部分初學者,所以我這里就對該部分進行封裝,確保大家只需要簡單的幾條指令就可以實現絕大多數的 FPGA 的 RTL 級仿真工作,同時配備 Vscode 的語法高亮和代碼檢查。 授人以魚不如授人以漁,同時也帶領大家了解我的方案細節和底層,幫助大家更好了解 iverilog 編譯和仿真過程都經歷了什么。
一、來瞅瞅我的實現方案 整個方案實現的過程并不復雜,可以類比我們在小學一年級就學過的 C/C++ 編譯過程,如下圖所示,VScode 作為工程組織和寫代碼的工具,通過安裝插件支持 Verilog/VHDL 的語法高亮、關鍵詞提示、語法檢查等, Verilog/VHDL 的文件都以 *.v 作為后綴。注意看圖中虛線包圍的部分,所有的 *.v 文件通過 iverilog 工具完成編譯生成 *.out 文件,再通過vvp 工具運行*.out 文件,就可生成*.vcd 波形文件,最后使用gtkwave工具查看波形文件,至此,整個編譯到波形查看的過程就完成了,如圖中虛線部分所示。 可以看到,編譯的過程稍微有些許繁瑣,為了簡化這個過程,我使用了make工具,通過編寫makefile文件來控制整個編譯的過程,熟悉 linux 下 C/C++ 開發的同學對make 應該非常熟悉,不熟悉的同學可以自行搜索,文末我也會放置相關的參考鏈接。通過make來實現虛線框的過程,這樣用戶再也不用考慮編譯過程的細節了,一條指令搞定所有! D:\Xzhao\Documents\OfficialAccounts\Article\2023.07.01\photos\Snipaste_2023-07-02_14-24-23.png圖:FPGA 開發輕量級環境搭建 二、代碼高亮和語法檢查——環境準備 2.1 VScode 及相關插件安裝首先安裝 VScode (Visual Studio Code) ,安裝具體可參考官網Visual Studio Code - Code Editing. Redefined  點擊插件擴展,快捷鍵Ctrl+Shift+X,在目錄欄里搜索,即可找到對應的插件,點擊插件上的install即可完成安裝,如下圖所示:  VScode 下幾款插件推薦安裝: - Chinese (Simplified):更改系統語言為中文
- Verilog HDL:提供語法高亮
- Verilog_Testbench:testbench使用自動實例化
- Verilog-HDL/SystemVerilog/Bluespec SystemVerilog:提供語法高亮和檢查
我們點擊每一個插件,可以在頁面下看到關于使用及詳細介紹,如下圖: 2.2 iverilog/make 安裝這里我們需要安裝三個軟件(所有的安裝鏈接附在文末): - iverilog:VHDL/Verilog 的編譯器,提供整個編譯、鏈接、生成波形文件,是我們的主角
- make:管理代碼工程及解決相關依賴的自動化腳本工具,搞C/C++開發的同學應該非常熟悉了
linux 操作系統下安裝 iverilog/make: # 安裝 iverilog/make
$sudo apt-get install iverilog
$sudo apt-get install gtkwave
$sudo apt-get install make
# 驗證安裝:打印版本信息
$iverilog -v
$make -v
windows 系統安裝 iverilog/make: 到 iverilog 官網下載安裝包,http://bleyer.org/icarus/,根據自己電腦系統,我這里選 x64:  安裝的時候記住自己的安裝路徑,安裝完畢,我們將安裝路徑里的bin和gtkwave\bin添加到環境變量 path 中:    需要測試一下 iverilog 環境變量有沒有添加成功,我們按下 WIN+R按鍵,調出運行窗口,輸入cmd,打開命令行:  在命令行里,我們輸入 iverilog -v,輸出如下:  可以看到 iverilog 打印的版本信息,表明安裝成功了! windows 安裝 make 工具稍微麻煩一點,需要先安裝 mingw。 下載 mingw 并安裝:https://sourceforge.net/projects ... wnload?source=files  添加MinGW\bin到系統的環境變量 path 中:  打開MinGW\bin路徑,找到mingw32-make.exe,將該文件復制一份,同時改名為make.exe:  同樣的,我們在命令行輸入 make -v,看到打印的版本信息,也說明安裝成功。  至此,軟件安裝及環境配置完畢,接下來是如何建立功能并完成編譯和時序仿真,讓我們再回到第一節,復習一下下面這張圖:  這個過程雖然比較麻煩,但是別擔心,我們用一個makefile腳本搞定全過程,只需要三條指令哦! 三、一個腳本搞定一切!編譯、RTL 時序仿真全過程! 3.1 腳本實現原理用戶只需要編寫makefile文件來組織工程文件的相互依賴關系和編譯過程,最后使用make工具即可實現編譯和運行,下面貼出我的makefile: # ------------------------------------------------
# Generic Makefile (based on iverilog)
# @Author : sudo
# ChangeLog :
# 2023-03-22 - creat this project
# 2023-03-22 - first version
# ------------------------------------------------
######################################
# target
######################################
TARGET = vout #######################################
# paths
#######################################
# Build path
BUILD_DIR = build ######################################
# source
######################################
# V sources
V_SOURCES = \
./full_adder_tb.v \
./full_adder.v \
./half_adder.v # # V includes
# V_INCLUDES = \
# -Itest/full_adder #######################################
# binaries
#######################################
PREFIX =
# The iverilog compiler bin path can be either defined in make command via VCC_PATH variable (> make VCC_PATH=xxx)
# either it can be added to the PATH environment variable. ifdef VCC_PATH
CC = $(VCC)/$(PREFIX)iverilog
VP = $(VCC)/$(PREFIX)vvp
else
CC = $(PREFIX)iverilog
VP = $(PREFIX)vvp
endif # default action: build all
all:wave.vcd wave.vcd:$(BUILD_DIR)/$(TARGET).out | $(BUILD_DIR)
@$(VP) -n $^
@echo ---------------------------------------
@echo build finished...
@echo "use <make plot> for plot the waveform"
@echo "use <make clean> for clean"
@echo "use <make> for build again" $(BUILD_DIR)/$(TARGET).out:$(V_SOURCES) | $(BUILD_DIR)
@$(CC) -o $@ $(V_SOURCES) $(BUILD_DIR):
@mkdir $@ .PHONY:plot
.PHONY:clean # windows
clean:
@del wave.vcd
@rmdir /Q /S $(BUILD_DIR) # linux & mac
#clean:
# rm Rf wave.vcd $(BUILD_DIR)/*.out plot:
@gtkwave wave.vcd
用戶指令只有三條: - make:完成整個編譯過程并生成波形圖文件
- make clean:清理所有的編譯生成文件
- make plot:繪制波形圖
整個makefile的內容大家可以根據自己的興趣研究,不懂也完全沒有關系,以后寫代碼的時候,只需要把我這個文件放在工程目錄的頂層,只需要記住這三條指令,我們就可以愉快的玩耍了!
3.2 項目演示:帶你實現一個全加器這里通過實現一個簡單的全加器,來演示整個環境如何使用。 首先新建一個文件夾full_adder,使用 VScode 打開,在該文件夾中新建三個文件half_adder.v、full_adder.v、full_adder_tb.v:  half_adder.v文件內容:
編寫test_bench tb_full_adder.v文件內容:
`timescale 1ns/1nsmodule full_adder_tb();reg in1,in2,cin;wire cout,sum;initial begin in1=1'b0; in2=1'b0; cin=1'b0;endalways #10 in1={$random}%2;always #10 in2={$random}%2;always #10 cin={$random}%2;initial begin forever begin #10; if($time>1000)$finish; endendinitial begin $display("hello, 在下石同學!"); $display("hello, 在下石同學!"); $display("hello, 在下石同學!"); // $dumpfile("wave.lxt"); // 指定用作dumpfile的文件 $dumpfile("wave.vcd"); // 指定用作dumpfile的文件 $dumpvars; // dump all varsendfull_adder u_full_adder( .in1 ( in1 ), .in2 ( in2 ), .cin ( cin ), .sum ( sum ), .cout ( cout ));endmodule
全加器是一個比較簡單的例子,但是我依舊按照一般工程采用自頂向下的設計方法,將一個全加器的實現分成兩個 module,full_adder作為頂層模塊調用half_adder,畢竟這樣更具有普適性。
在tb_full_adder.v中,使用 $dumpfile("wave.vcd")指定仿真波形文件類型,同時向控制臺打印hello, 在下石同學!字符串。 我們編寫*.v代碼文件后,把makefile文件放在目錄頂層,然后打開該文件,找到文中V_SOURCES,在后面添加你編寫的所有*.v文件的相對路徑,本示例編寫了三個文件:full_adder_tb.v、full_adder.v、half_adder.v,將這三個文件路徑添加進去,\符號代表換行符,最后一行不需要添加,如下所示:
# V sources
V_SOURCES = \
./full_adder_tb.v \
./full_adder.v \
./half_adder.v
每次編寫完自己的 verilog/HDL 代碼后,只需要在makefile中添加V_SOURCES就可以了,其他地方不用動,然后在makefile所在的路徑打開命令行,輸入指令make:  我們可以看到,代碼編譯成功,并且成功運行 full_adder_tb.v文件中的 $display("hello, 在下石同學!");語句,向控制臺打印hello, 在下石同學!這一串字符。 同時,我們查看發現項目多了一個build文件夾和名為wave.vcd的波形文件,這都是編譯過程生成的文件。  項目編譯就完成了,要查看 RTL仿真波形圖,我們只需要接著在命令行輸入指令make plot:  屏幕中立刻彈出 RTL 仿真波形圖,我們可以點擊查看:  我們在命令行輸入指令make clean,可將編譯生成的文件全部刪除掉,方便下一次重新編譯。 我們記住用戶的三條指令: - make:完成整個編譯過程并生成波形圖文件
- make clean:清理所有的編譯生成文件
- make plot:繪制波形圖
**到此為止,我們就可以愉快的進行 verilog/VHDL 代碼仿真啦! ** 該項目源碼我已經上傳到我的 github 倉庫上面啦,大家可以直接下載: github URL:https://github.com/nezhajun/full_adder 安裝了git的小伙伴也可以使用git clone下載: $git clone https://github.com/nezhajun/full_adder.git
文中涉及相關軟件工具下載鏈接和參考:
|