顯示具有 verilog 標籤的文章。 顯示所有文章
顯示具有 verilog 標籤的文章。 顯示所有文章

2020年5月27日 星期三

安裝 Cadence Incisive

2020/05/28 初版


Cadence Incisive 是 Cadence 新一代的 Simulator,原廠的定義是:

Multi-language simulation for testbench automation, metric-driven verification, and mixed-signal verification
(https://www.cadence.com/en_US/home/tools/system-design-and-verification/simulation-and-testbench-verification/incisive-enterprise-simulator.html)

簡單說它已經不再像以為的 Verilog XL 是以 Verilog 為主的 simulator,而是支援
多種不同的硬體描述語言。底下說明如何安裝此軟體:

1. 下載:

請至 TSRI 下載 Incisive 的壓縮檔,以目前 (2020/05/28) 為例,其檔案如下:

INCISIV_15.20.039_linux_1of6.tgz
INCISIV_15.20.039_linux_2of6.tgz
INCISIV_15.20.039_linux_3of6.tgz
INCISIV_15.20.039_linux_4of6.tgz
INCISIV_15.20.039_linux_5of6.tgz
INCISIV_15.20.039_linux_6of6.tgz


2. 解壓縮/安裝

# tar xfva INCISIV_15.20.039_linux_1of6.tgz -C /opt/EDA
# tar xfva INCISIV_15.20.039_linux_2of6.tgz -C /opt/EDA
# tar xfva INCISIV_15.20.039_linux_3of6.tgz -C /opt/EDA
# tar xfva INCISIV_15.20.039_linux_4of6.tgz -C /opt/EDA
# tar xfva INCISIV_15.20.039_linux_5of6.tgz -C /opt/EDA
# tar xfva INCISIV_15.20.039_linux_6of6.tgz -C /opt/EDA

3. 設定

在 bashrc 中設定

Incisiv_bin="/opt/EDA/INCISIV/cur/tools/bin"

export PATH=$PATH:$Incisiv_bin


####INCISIV####
export VRST_HOME=/opt/EDA/INCISIV/cur

sh $VRST_HOME/env.sh



4. 測試

Incisive 的執行檔很多,可以參考底下網址來進行測試:

https://en.wikipedia.org/wiki/NCSim


$ncverilog ha_gate.v test_ha.v

5. 故障排除

在執行 ncverilog 時會出現 timescale 的錯誤,原因是 ncverilog 比 gplcver
更嚴謹,它會檢查 timescale 語法,如果沒有在你的 verilog 程式中加上此語法的話會
顯示錯誤而不執行。

除此之外,ncverilog 在執行上沒有問題。

2020年5月13日 星期三

ModelSim 安裝流程

ModelSim 安裝流程
2020/05/14

ModelSim 是 Mentor Graphics 公司的產品,其主要功能是硬體描述語言模擬及除錯。目前 CIC 所提供的版本是 2020.1 版,下載完畢後會出現

modelsim_2020.1_linux_1of2.tgz
modelsim_2020.1_linux_1of2.tgz

這個檔案,請在 /opt/EDA 目錄中解開 modelsim 壓縮檔:

/opt/EDA_tools# tar xfva modelsim_2020.1_linux_1of2.tgz -C /opt/EDA
/opt/EDA_tools# tar xfva modelsim_2020.1_linux_2of2.tgz -C /opt/EDA

解開完畢後會出現底下目錄:

/opt/EDA/modelsim# ls -l
總計 4
drwxr-xr-x 4 root root 4096  5月 14 11:08 2020.1
lrwxrwxrwx 1 eecs eecs    7  4月 13 15:31 cur -> 2020.1/


設定 ModelSim

在 .bashrc 中新增底下設定:

Modelsimbin="/opt/EDA/modelsim/cur/modeltech/bin"

export PATH=$PATH:$Modelsimbin

export LM_LICENSE_FILE=1717@lsncku

啟動 Modelsim

打開一個新的終端機,然後執行:

$ vsim

看看有沒有出現 ModelSim 視窗。

故障排除

執行 vsim 時有底下錯誤:


$vsim
/opt/EDA/modelsim/cur/modeltech/bin/../linuxpe/vish: error while loading shared libraries: libXft.so.2: cannot open shared object file: No such file or directory

這個症狀是因為沒有 libXft.so.2 這個檔案,我們去 packages.debian.org 找的結果是這個檔案屬於 libxft2 的套件,現在問題來了,我們安裝 libxft2,然後再執行 vsim 有一模一樣的錯誤。

現在的問題出在 /opt/EDA/modelsim/cur/modeltech/bin/../linuxpe/vish,也就是
/opt/EDA/modelsim/cur/modeltech/linuxpe/vish

那麼 vish 這個檔案是什麼平台上面的 ? 請以 file 來看一下:

/opt/EDA/modelsim/cur/modeltech/linuxpe $ file vish
vish: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=778b94811c99e10e57a58de6050d652e40205fc2, stripped

我們可以看到這個檔案是 386 版,那它要配對的 libxft2 的套件是

libxft2:i386

因此請安裝 libxft2:i386 再試試看。


在 modelsim 的介面中開啟一個 verilog 檔案會出現底下訊息:

# couldn't load file "/opt/EDA/modelsim/2020.1/modeltech/linux/ScintillaTk/libScintillaTk1.14.so": libstdc++.so.6: cannot open shared object file: No such file or directory


原因是找不到 libstdc++.so.6:i386 這個檔案。

Synopsys VCS 安裝

(2020/05/14)

Synopsys VCS 是由 Synopsys 所推出的 verilog 模擬工具,目前 TSRI 所推出的最新版本為 2020.03,底下我們以此版本來進行安裝說明。

1. 下載

請下載底下檔案

vcs_2020.03_linux_1of3.tgz
vcs_2020.03_linux_2of3.tgz
vcs_2020.03_linux_3of3.tgz

2. 解壓縮/安裝

# tar xfva vcs_2020.03_linux_1of3.tgz -C /opt/EDA
# tar xfva vcs_2020.03_linux_2of3.tgz -C /opt/EDA
# tar xfva vcs_2020.03_linux_3of3.tgz -C /opt/EDA

3. 設定環境

VCS=/opt/EDA/vcs/cur/bin
export PATH=$PATH:$VCS

export LM_LICENSE_FILE=26585@lsncku
export VCS_HOME=/opt/EDA/vcs/cur
export VCS_ARCH_OVERRIDE=linux

4. 測試

$ vcs ha_gate.v test_ha.v
觀察其輸出有沒有錯誤訊息。



5. 故障排除

$ vcs ha_cont.v
/opt/EDA/vcs/cur/bin/vcs: 列 3833: dc:命令找不到
/opt/EDA/vcs/cur/bin/vcs: 列 11218: /usr/bin/time: 沒有此一檔案或目錄
/opt/EDA/vcs/cur/bin/vcs: 列 3833: dc:命令找不到

--> 安裝 dc、time 套件:apt-get install dc time

$ vcs
 ERROR : Cannot find 'vcsMsgReport' script in /bin
 Please make sure VCS_HOME is set correctly and continue..

--> 設定 VCS_HOME


$ vcs ha_cont.v
/opt/EDA/vcs/cur/bin/vcs: 列 11218: /usr/bin/time: 沒有此一檔案或目錄
CPU time: .033 seconds to compile

--> 安裝 time 套件:apt-get install time

$ vcs ha_gate.v test_ha.v
/opt/EDA/vcs/cur/linux/bin/vcs1: error while loading shared libraries: libelf.so.1: cannot open shared object file: No such file or directory
CPU time: .043 seconds to compile

--> 安裝 libelf1:i386

2013年3月11日 星期一

fpga 0311 - 針對 test fixture 的再進化


針對 test fixture 的再進化

我們剛剛寫好的 test fixture 有什麼缺點 ?

缺點1. 我們所測試出來的波形,系統無法自行判斷是正確或是錯誤的波形,得要由人類的眼睛來判斷。

缺點2. 輸入波形無法自動產生


針對缺點1之解決方式

我們使用行為模式(behavior model)來撰寫 testfixture,其目的是讓 testfixture 能自動產生 x+y 的半加器輸出,程式碼如下:

reg sumY, coutY;        // test result


// self calculate coutY, sumY
always @ ( a or b)
  begin
    {coutY, sumY} = a+b;
  end


並以此輸出來與原始 ha_gate/ha_rtl/ha_cont.v 中電路所產生之輸出作比對。

reg testok;             // 0 == error, 1 == testok;

// compare
always @ ( coutX or sumX )
begin
  if ( coutX == coutY && sumX == sumY)
    testok=1;
  else
    testok=0;
end

我們可以觀察 testok 的波形,當 testok == 1 時,我們的電路輸出與自動產生之電路輸出是一致的,萬一 testok == 0 時,兩者不一致,運算有錯,必須進行除錯。

針對缺點2之解決方式
a. 定義一個 clock 訊號源
b. 利用 clock 訊號源來產生訊號

2013年3月3日 星期日

fpga 0304 上課講義


1. 如何證明我們所寫的半加器工作正確 ?

在 simulation command 的部份,我們需要針對半加器的動作來進行完整測試,請問什麼是半加器的完整測試 ? 要判別一個半加器是否完整動作,最簡單的方法是把真值表上的每一列都模擬一次,如果輸出/入之狀態完全符合真值表,則我們可以確認此電路工作正常。

x  y | Sum   Cout
-----+-----------
0  0 |   0      0
0  1 |   1      0
1  0 |   1      0
1  1 |   0      1

將全部可能的輸入訊號都跑一次模擬並檢查模擬結果是否正確,若全部正確的話,我們可以假設電路設計是對的。

2. 如何撰寫 test fixture (測試程式)

2.1 什麼是 test fixture ?

當我們寫完 verilog 電路後,我們必須證明它是對的,因此我們要寫 test fixture 來針對我們所寫的 verilog 程式進行測試。

2.2 test fixture 的內容

一個 test fixture 就是一個 verilog module,以半加器 test fixture 為例,其語法大致如下:

module test_ha;
reg   definition  -> 暫存器定義
wire  definition  -> 線定義
other definition  -> 其它定義

half_adder ha0 () -> 呼叫我們要進行測試的電路

initial begin                   -> 開始進行波形輸入
$dumpvars;                      -> 產生 gtkwave 語法
$dumpfile("testha.dmp");        -> 將波形以 VCD 格式存在 testha.dmp 檔中,
                                   testha.dmp 可照自己的需求改名字

simulation command   模擬指令,以下特別說明!!

$dumpall;                       -> 紀錄所有訊號
$dumpflush;                     -> 必要
#10 $finish;                    -> 在 10 個時間單位後結束模擬
end                             -> 結束 initial begin
endmodule

因此一個完整的半加器 test fixture 如下,我們將其存為 test_ha.v

module test_ha;
reg a, b;
wire sumX, coutX;

half_adder ha0(a, b, sumX, coutX);

initial begin
$dumpvars;
$dumpfile("testha.dmp");

#0      a=0;
        b=0;

#10     a=0;
        b=1;

#10     a=1;
        b=0;

#10     a=1;
        b=1;


$dumpall;
$dumpflush;
#10 $finish;
end
endmodule


2.3 進行 verilog 測試模擬

請執行

cver ha_gate.v test_ha.v \Enter

理論上應該輸出如下:

GPLCVER_2.12a of 05/16/07 (Linux-elf).
Copyright (c) 1991-2007 Pragmatic C Software Corp.
  All Rights reserved.  Licensed under the GNU General Public License (GPL).
  See the 'COPYING' file for details.  NO WARRANTY provided.
Today is Mon Mar  7 11:25:30 2011.
Compiling source file "ha_gate.v"
Compiling source file "test_ha.v"
Highest level modules:
test_ha

Halted at location **test_ha.v(25) time 40 from call to $finish.

我們會發現沒有 error、沒有 warning,而且會有個檔案叫 testha.dmp,接下來就可以用 GTKwave 觀察波形了。




3. 使用 GTKwave

請執行

gtkwave testha.dmp

來載入模擬波形檔,並觀察我們所寫的變數 (reg, wire .. 之類) 的輸出,若想將目前觀察狀態留待下次載入,請選擇

File -> Write Save File

存檔為 testha.sav,下次載入 gtkwave 時請執行:

gtkwave testha.dmp testha.sav

即可載入前一次觀察狀態。




作業 1. 畫 Full Adder 的電路圖
        以 Gate Level 寫 Verilog 程式
        撰寫 test fixture,並跑模擬,可存檔檔名為 testfa.dmp
        列印波形