CentOS 7 - iverilog & gtkwave 使用 (putty 遠端使用 gtkwave 問題解決)

本篇會介紹簡單的 iverilog 和 gtkwave 的使用

如果還沒安裝的可以先參考這篇安裝: 

CentOS 7 - RISC-V CPU Core 環境安裝 (tinyriscv) + iverilog & gtkwave 安裝


簡單來說

iverilog 就是可以編譯你的 verilog code 的程式

gtkwave 則是可以幫你顯示出波形圖的程式

它的特色在於輕量,也很適合新手先拿來玩玩


---iverilog 使用---


我們可以先簡單寫個測試的程式

一個 verilog 的檔案 + 一個 testbench 檔案


建立資料夾(名字隨便取)


mkdir verilog_test && cd verilog_test


建立 verilog 檔案


vim test.v


// sum = a + b

module test(

        input [3:0] a,

        input [3:0] b,

        output [3:0] sum,

        output carry_out

);

assign {carry_out, sum} = a + b;


endmodule


建立 testbench 檔案


vim test_tb.v


module test_tb();


        //input

        reg [3:0] a;

        reg [3:0] b;


        //output

        wire [3:0] sum;

        wire carry_out;


        test test1(a, b, sum, carry_out);


        initial begin

        #50 a = 4'b0001; b = 4'b0001;

        #50 a = 4'b0001; b = 4'b0010;

        #50 a = 4'b0001; b = 4'b0011;

        #50 a = 4'b0001; b = 4'b0100;

        #50 a = 4'b0010; b = 4'b0001;

        #50 a = 4'b0011; b = 4'b0001;

        #50 a = 4'b0100; b = 4'b0001;

        end


        initial #1000 $finish;


        initial begin

                $monitor("a = %b, b = %b, sum = %b, carry_out = %b", a, b, sum, carry_out);

                $dumpfile("wave.vcd");

                $dumpvars(0, test_tb);

        end

endmodule


執行 iverilog 來編譯


iverilog -o wave test.v  test_tb.v


使用 vvp 來產生 vcd 波形圖


vvp wave


這樣就會產生 wave.vcd

同時也可以看到文字介面的波形圖了!









好了,接著要進入到重頭戲 gtkwave 了!


--- gtkwave 使用---


利用 gtkwave 顯示波形圖


gtkwave wave.vcd &


結果出錯了

Could not initialize GTK!  Is DISPLAY env var/xhost set?


不過這裡要說明一下

其實如果你是直接在你面前的電腦上執行的話

是不會出錯的

所以下面的東西都可以直接跳過了!


但是我是 透過 ssh 遠端進入 server 來執行

所以會有問題!

因此就必須要先解決如何 用 ssh 的方式開啟遠端主機上的畫面 了!


恭喜我自己經過多次努力,最後還是把問題解決了

但才發現原來是自己網路觀念太弱 XD

其實沒有很難

只是沒有去聯想一些網路的基本觀念的話

根本就不會想到要這樣做


---懶得看的可以先跳過,直接到使用的部分---

簡單不負責解釋一下

你現在是連線到一台遠端主機 (不在你面前) 上

而你想在本地主機 (在你面前) 上顯示出遠端主機上軟體的 GUI 畫面

你會先連到遠端主機上去下指令

也就是下指令告訴遠端主機說

"請幫我開啟 XXX 程式!"

例如現在要開啟的就是 gtkwave 的 GUI

然後遠端主機會負責送出顯示圖形的指令

就會送給被指定的主機

所以遠端主機此時會

"好的!我會送出開啟 XXX 程式的指令給指定主機!"

所以當你沒指定的時候,就會在遠端主機上開啟畫面

但這不是我們要的

因此我們必須指定要給誰?

當然是給我們眼前的這台本地主機啊!

(因此你必須知道現在你自己的 IP 是多少,沒有收件人是空白的道理吧)

但是你以為知道自己的 IP 就可以讓遠端主機寄送東西進來了嗎!

當然是不行!不然網路世界應該會大亂 (?)

所以我們自己在本地主機上也必須要特別開啟"收信"功能

才能夠讓遠端主機順利發送開啟 GUI 的指令進來本地主機


 ---GTKwave + ssh使用---

假設你有

(遠端主機: 不在你面前的遠端電腦)

(本地主機: 在你面前,你正在使用的電腦)

遠端主機: CentOS, IP: xx.xx.xx.xx(就是你 ssh 進去的那個 ip)

本地主機: Windows, IP: yy.yy.yy.yy(可以開 command line 打 ipconfig 看你的 ipv4 address 是多少)

CentOS 上要安裝 xauth


yum install -y xauth


Windows 上要安裝 putty 和 Xming Server

putty

Xming X Server for Windows

putty 怎麼裝應該很簡單

Xming Server 的安裝讓我偷懶一下

請參考網站 Windows上的 X Server連線工具 - Xming X Server(xming)


putty 進去後直接打

gtkwave wave.vcd &


畫面就出來了!













咦怎麼什麼都沒有?

不要怕!

先點視窗左邊的 SST 下方的 + 號













就會跑出下面的東西!然後點他













就會跑出下面的線路們














然後按 insert 把他們都加到右邊去















訊號就都出來了!

然後隨便拉到你剛有設定訊號值的範圍

就可以看到結果囉!














淚流滿面啊!

還有順便提提上次我在裝 gtkwave 把 server 搞壞的經驗

請不要隨便刪掉 /usr/lib 或 /lib 裡面的檔案啊!

還有新手不要隨便在 CentOS 7 上 裝 xz-utilities (我到現在還是不敢裝...)

就是因為在解他產生的 bug 時

看別人教學,害我去刪那些 library 的

然後 server 就整個炸了害我要重灌 (?

或是如果有人知道該怎麼裝不會出問題也可以告訴我> <


ref:

[Day8]testbench 1/3

軟體短訊:開源波型顯示軟體 - GTKWave

icarus verilog

Windows上的 X Server連線工具 - Xming X Server(xming)

留言

這個網誌中的熱門文章

Formal Verification(正規驗證)介紹和如何使用 SVA(System Verilog Assertion) 做驗證

Quartus Qsys + Nios II 入門使用

Quartus Qsys + Nios II + SDRAM 進階使用