本帖最后由 電子愛好者沒錯 于 2023-8-22 20:31 編輯
FPGA 開發(fā)專題 | 手把手教你用 VScode 搭建輕量級 Verilog 仿真環(huán)境 | 真保姆級目錄:
- 零、寫在前面
- 一、來瞅瞅我的實現(xiàn)方案
- 二、代碼高亮和語法檢查——環(huán)境準備
- 2.1 VScode 及相關(guān)插件安裝
- 2.2 iverilog/make 安裝
- 三、一個腳本搞定一切!編譯、RTL 時序仿真全過程!
- 3.1 腳本實現(xiàn)原理
- 3.2 項目演示:帶你實現(xiàn)一個全加器
1599968458_904071.jpg (372.74 KB, 下載次數(shù): 20)
下載附件
2023-8-22 19:16 上傳
 圖:雷元素客晴
全文共 3360 字,閱讀大約需要 5 分鐘 只要附著雷元素力,刻晴的發(fā)簪就能化為一柄銳利無比的小刀。 刻晴的三點養(yǎng)成日記:超載反應(yīng)造成的是火元素傷害,超導反應(yīng)造成冰元素傷害、且降低的是物理防御 利用元素反應(yīng)造成的傷害,雷、冰、火三種史萊姆都會對應(yīng)免疫 觸發(fā)元素反應(yīng)造成的傷害,只吃元素精通加成,并不享受攻擊力的加成
刻晴這種如此可愛的角色,養(yǎng)成不易,也要搭配特殊的陣容,來發(fā)揮她的最佳效果。FPGA 的開發(fā)也是這樣,各種仿真軟件陣容過于繁復,往往我的需求是寫 verilog/VHDL 代碼并仿真時序,并不想安裝各個廠家(如 Quartus,Vivado)的軟件,有沒有一種輕量、高顏值、簡單好用、功能強大且免費的仿真環(huán)境呢?
本篇作為保姆級教程,將會手把手帶你配置 FPGA 輕量級開發(fā)環(huán)境和使用我的腳本!該方案支持 windows 和 linux 系統(tǒng)。 本文首發(fā)于在下石同學 未經(jīng)授權(quán) 不得轉(zhuǎn)載
文 | 在下石同學
零、寫在前面
FPGA 開發(fā)離不開各種仿真,尤其是 RTL 級這種最基本的邏輯功能性仿真,對 FPGA 及開發(fā)流程還不了解的童鞋請看我的往期文章: 往期文章鏈接
盡管現(xiàn)在許多 FPGA 廠家的軟件功能都很齊全,但是代碼編輯界面還保留著上世紀的風格,特別是有些仿真工具入門門檻較高,安裝起來也比較麻煩,F(xiàn)PGA 開發(fā)中的大多數(shù)時間都花費在 verilog/VHDL 代碼編寫和 RTL 仿真上,往往我的需求是寫 verilog/VHDL 代碼并仿真時序,并不想安裝各個廠家(如 Quartus,Vivado)的軟件,有沒有一種輕量、高顏值、簡單好用、功能強大且免費的仿真環(huán)境呢?
答案是使用 iverilog !
為什么要用 iverilog ?實際上 VHDL/Verilog 仿真多使用 Modelsim 這種專業(yè)軟件,但是 iverilog 足夠輕量,并且用作科研和開發(fā)完全不用擔心版權(quán)的問題,然而 iverilog 開發(fā)需要用戶使用一些腳本和命令行,這一點就勸退了大部分初學者,所以我這里就對該部分進行封裝,確保大家只需要簡單的幾條指令就可以實現(xiàn)絕大多數(shù)的 FPGA 的 RTL 級仿真工作,同時配備 Vscode 的語法高亮和代碼檢查。 授人以魚不如授人以漁,同時也帶領(lǐng)大家了解我的方案細節(jié)和底層,幫助大家更好了解 iverilog 編譯和仿真過程都經(jīng)歷了什么。
一、來瞅瞅我的實現(xiàn)方案 整個方案實現(xiàn)的過程并不復雜,可以類比我們在小學一年級就學過的 C/C++ 編譯過程,如下圖所示,VScode 作為工程組織和寫代碼的工具,通過安裝插件支持 Verilog/VHDL 的語法高亮、關(guān)鍵詞提示、語法檢查等, Verilog/VHDL 的文件都以 *.v 作為后綴。注意看圖中虛線包圍的部分,所有的 *.v 文件通過 iverilog 工具完成編譯生成 *.out 文件,再通過vvp 工具運行*.out 文件,就可生成*.vcd 波形文件,最后使用gtkwave工具查看波形文件,至此,整個編譯到波形查看的過程就完成了,如圖中虛線部分所示。 可以看到,編譯的過程稍微有些許繁瑣,為了簡化這個過程,我使用了make工具,通過編寫makefile文件來控制整個編譯的過程,熟悉 linux 下 C/C++ 開發(fā)的同學對make 應(yīng)該非常熟悉,不熟悉的同學可以自行搜索,文末我也會放置相關(guān)的參考鏈接。通過make來實現(xiàn)虛線框的過程,這樣用戶再也不用考慮編譯過程的細節(jié)了,一條指令搞定所有! D:\Xzhao\Documents\OfficialAccounts\Article\2023.07.01\photos\Snipaste_2023-07-02_14-24-23.png圖:FPGA 開發(fā)輕量級環(huán)境搭建 二、代碼高亮和語法檢查——環(huán)境準備 2.1 VScode 及相關(guān)插件安裝首先安裝 VScode (Visual Studio Code) ,安裝具體可參考官網(wǎng)Visual Studio Code - Code Editing. Redefined  點擊插件擴展,快捷鍵Ctrl+Shift+X,在目錄欄里搜索,即可找到對應(yīng)的插件,點擊插件上的install即可完成安裝,如下圖所示:  VScode 下幾款插件推薦安裝: - Chinese (Simplified):更改系統(tǒng)語言為中文
- Verilog HDL:提供語法高亮
- Verilog_Testbench:testbench使用自動實例化
- Verilog-HDL/SystemVerilog/Bluespec SystemVerilog:提供語法高亮和檢查
我們點擊每一個插件,可以在頁面下看到關(guān)于使用及詳細介紹,如下圖: 2.2 iverilog/make 安裝這里我們需要安裝三個軟件(所有的安裝鏈接附在文末): - iverilog:VHDL/Verilog 的編譯器,提供整個編譯、鏈接、生成波形文件,是我們的主角
- make:管理代碼工程及解決相關(guān)依賴的自動化腳本工具,搞C/C++開發(fā)的同學應(yīng)該非常熟悉了
linux 操作系統(tǒng)下安裝 iverilog/make: # 安裝 iverilog/make
$sudo apt-get install iverilog
$sudo apt-get install gtkwave
$sudo apt-get install make
# 驗證安裝:打印版本信息
$iverilog -v
$make -v
windows 系統(tǒng)安裝 iverilog/make: 到 iverilog 官網(wǎng)下載安裝包,http://bleyer.org/icarus/,根據(jù)自己電腦系統(tǒng),我這里選 x64:  安裝的時候記住自己的安裝路徑,安裝完畢,我們將安裝路徑里的bin和gtkwave\bin添加到環(huán)境變量 path 中:    需要測試一下 iverilog 環(huán)境變量有沒有添加成功,我們按下 WIN+R按鍵,調(diào)出運行窗口,輸入cmd,打開命令行:  在命令行里,我們輸入 iverilog -v,輸出如下:  可以看到 iverilog 打印的版本信息,表明安裝成功了! windows 安裝 make 工具稍微麻煩一點,需要先安裝 mingw。 下載 mingw 并安裝:https://sourceforge.net/projects ... wnload?source=files  添加MinGW\bin到系統(tǒng)的環(huán)境變量 path 中:  打開MinGW\bin路徑,找到mingw32-make.exe,將該文件復制一份,同時改名為make.exe:  同樣的,我們在命令行輸入 make -v,看到打印的版本信息,也說明安裝成功。  至此,軟件安裝及環(huán)境配置完畢,接下來是如何建立功能并完成編譯和時序仿真,讓我們再回到第一節(jié),復習一下下面這張圖:  這個過程雖然比較麻煩,但是別擔心,我們用一個makefile腳本搞定全過程,只需要三條指令哦! 三、一個腳本搞定一切!編譯、RTL 時序仿真全過程! 3.1 腳本實現(xiàn)原理用戶只需要編寫makefile文件來組織工程文件的相互依賴關(guān)系和編譯過程,最后使用make工具即可實現(xiàn)編譯和運行,下面貼出我的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的內(nèi)容大家可以根據(jù)自己的興趣研究,不懂也完全沒有關(guān)系,以后寫代碼的時候,只需要把我這個文件放在工程目錄的頂層,只需要記住這三條指令,我們就可以愉快的玩耍了!
3.2 項目演示:帶你實現(xiàn)一個全加器這里通過實現(xiàn)一個簡單的全加器,來演示整個環(huán)境如何使用。 首先新建一個文件夾full_adder,使用 VScode 打開,在該文件夾中新建三個文件half_adder.v、full_adder.v、full_adder_tb.v:  half_adder.v文件內(nèi)容:
編寫test_bench tb_full_adder.v文件內(nèi)容:
`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
全加器是一個比較簡單的例子,但是我依舊按照一般工程采用自頂向下的設(shè)計方法,將一個全加器的實現(xiàn)分成兩個 module,full_adder作為頂層模塊調(diào)用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, 在下石同學!這一串字符。 同時,我們查看發(fā)現(xiàn)項目多了一個build文件夾和名為wave.vcd的波形文件,這都是編譯過程生成的文件。  項目編譯就完成了,要查看 RTL仿真波形圖,我們只需要接著在命令行輸入指令make plot:  屏幕中立刻彈出 RTL 仿真波形圖,我們可以點擊查看:  我們在命令行輸入指令make clean,可將編譯生成的文件全部刪除掉,方便下一次重新編譯。 我們記住用戶的三條指令: - make:完成整個編譯過程并生成波形圖文件
- make clean:清理所有的編譯生成文件
- make plot:繪制波形圖
**到此為止,我們就可以愉快的進行 verilog/VHDL 代碼仿真啦! ** 該項目源碼我已經(jīng)上傳到我的 github 倉庫上面啦,大家可以直接下載: github URL:https://github.com/nezhajun/full_adder 安裝了git的小伙伴也可以使用git clone下載: $git clone https://github.com/nezhajun/full_adder.git
文中涉及相關(guān)軟件工具下載鏈接和參考:
|