制造業(yè)網(wǎng)站建設(shè)惠州自動(dòng)seo
????????Gvim寫RTL code,VCS仿真,Verdi看波形,DC做綜合下約束,Primetime做STA,Spyglass做異步時(shí)序分析。?
?????????VCS全稱Verilog Computer Simulation ,VCS是邏輯仿真EDA工具的編譯源代碼的命令。要用VCS做編譯仿真,首先得有一個(gè)RTL代碼,比如我們寫了一個(gè)全加器和全加器的testbench,總共兩個(gè).v文件 。
有了RTL文件后,如何調(diào)用VCS進(jìn)行編譯呢? 在.v文件所在的目錄下打開terminal,鍵入:
????????vcs -sverilog -debug_all full_adder.v full_adder_tb.v -l com.log
上面有很多細(xì)節(jié),一個(gè)一個(gè)講:
????????-sverilog:編譯命令選項(xiàng),識(shí)別SystemVerilog語法,如果代碼中有SV語法,則編譯的時(shí)候必須加這個(gè)選項(xiàng)。
????????-debug_all:編譯命令選項(xiàng),可以將debug的信息全部保存下來,比如波形文件。
????????-l com.log:編譯命令選項(xiàng),將編譯過程生成的日志寫入com.log文件。
????????執(zhí)行完上面這條代碼后,如果編譯沒有報(bào)錯(cuò),一切正確,那么在當(dāng)前文件夾就會(huì)生成一個(gè)simv文件,這個(gè)文件就是仿真文件,我們跑仿真就用這個(gè)文件,注意是simv不是sim。
????????當(dāng)然除了寫命令調(diào)用VCS,也可以用命令:dve & ,啟動(dòng)邏輯仿真工具VCS自帶的一個(gè)圖形化界面dve。命令中的& 表示后臺(tái)運(yùn)行dve命令,不占用當(dāng)前的 terminal。?
????????圖形化界面如果想要跑仿真,點(diǎn)擊simulate的setup選項(xiàng),然后選中編譯過后的仿真文件simv文件,就可以進(jìn)行跑仿真了。
把需要看波形的信號(hào)點(diǎn)擊,Add to wave,然后就會(huì)打開一個(gè)波形窗口。
生成的波形窗口如下,在底層的輸入命名行輸入:run,就會(huì)開始跑仿真了。
?輸入run之后,開始仿真就可以看波形了。?
按f鍵,顯示所有波形,下面的log窗口就是顯示仿真的日志。
????????上面講的操作是用界面化的DVE窗口去操作的,實(shí)際上我們都使用腳本命令的方法去操作,寫命令行編譯、寫命令行仿真、寫命令行看波形。
????????看波形命令為:dve -vpd vcdplus.vpd & ,想要看波形,我們需要在tb文件里面輸出波形文件才行,在tb中展示為:
????????????????????????????????????????initial begin
????????????????????????????????????????????$vcdpluson;
????????????????????????????????????????end?
輸出波形文件后就可以用腳本命令調(diào)用dve看波形了。
綜上,我們用VCS進(jìn)行編譯、仿真、看波形的腳本命令分別為:
????????編譯源代碼:vcs -sverilog -debug_all full_adder.v full_adder_tb.v -l com.log
????????跑仿真:./simv -l sim.log
????????看波形:dve -vpd vcdplus.vpd &
????????但事實(shí)上,如果每次編譯仿真看波形,都要用手去打這些字符的話,會(huì)很累,能不能用什么腳本命令,讓我們能夠鍵入很少的字符,就可以進(jìn)行編譯仿真看波形,甚至一條龍服務(wù)呢?有,Makefile。
????????我們用Gvim新建一個(gè)文本文件,命名為Makefile,然后如圖所示寫命令,寫命令的方式就是,寫一個(gè)隨便什么關(guān)鍵字,然后+冒號(hào)+回車,再鍵入你設(shè)置關(guān)鍵字綁定的腳本命令。比如我們上面寫的com,是用來編譯的用戶自定義關(guān)鍵字,下一行就緊跟著我們定義關(guān)鍵字所代表的代碼。注意一個(gè)細(xì)節(jié),怎么判斷我們寫的腳本是否被自定義掛件字鏈接了呢?看顏色,如果沒有連接上的話,顏色是普通的黑色,如下圖:
這就代表沒鏈接上,通常是由于縮進(jìn)問題導(dǎo)致的,這點(diǎn)需要注意。
????????還有一個(gè)細(xì)節(jié),細(xì)心的人會(huì)發(fā)現(xiàn),我們編譯的時(shí)候,沒有把文件的名字寫到com腳本連接的命令里,而是寫 -f rtl.list。這是什么意思呢,這里的rtl.list用來存放我們r(jià)tl 代碼的名字,用這種方式更方便,后續(xù)修改rtl代碼名稱也好,增減也好都好修改,我們只需要把所有rtl代碼的名字都存放到rtl.list中,生成rtl.list的命令也很簡單,只要檢索當(dāng)前目錄下所有以.v結(jié)尾的文件的文件名,然后存入rtl.list就行了,linux命令:find -name "*.v" > rtl.list
????????對于某個(gè)信號(hào),還有一些好用的快捷鍵可以實(shí)用比如圈出來的三個(gè)按鍵?
?????????它們分別是:Trace Drivers (Ctrl + D)追蹤它的驅(qū)動(dòng)、Trace Value Change ( Ctrl + Shift + D) 追蹤代碼中數(shù)值改變的位置、Trace Loads (Ctrl + Loads)追蹤它的負(fù)載。?
?
?選擇要追蹤的邊沿或者數(shù)值,可以直接追蹤。?
????????在上面已經(jīng)提到過Makefile 腳本的書寫格式,就是寫一個(gè)關(guān)鍵字加冒號(hào),然后回車輸入一行命令,輸入完后,以后要運(yùn)行這行命令就不用全部打全了,只需要在terminal界面,輸入make 關(guān)鍵字就行了。
????????比如,我們已經(jīng)在當(dāng)前文件夾下寫好了上面所示的Makefile腳本文件,然后我們也寫好了rtl代碼,并在terminal 中輸入:find -name "*.v" >rtl.list,把.v文件的相對路徑都放到了rtl.list中。這時(shí)候如果要編譯,我們只需要在terminal界面輸入:make com 回車
????????系統(tǒng)會(huì)自動(dòng)幫我們打出com關(guān)鍵字所鏈接的命令行,如圖所示:?
Makefile 腳本命令解釋:
????????vcs表示調(diào)用vcs軟件,-sverilog 表示編譯所用的規(guī)范,如果我們寫的代碼里有systemverilog就一定要有這個(gè)選項(xiàng),-debug_all 完全調(diào)試模式, -timescale = 1ns/1ps 這個(gè)在編譯的時(shí)候就寫,那么在tb里面就不用寫了,表示最小仿真時(shí)間是1ns,最小仿真精度是1ps。-f rtl.list意思是吧rtl.list里的所有文件都編譯進(jìn)去, -l com.log 意思是把編譯產(chǎn)生的編譯文件保存在com.log文件中。
????????./simv 表示運(yùn)行當(dāng)前文件夾下的simv文件,這個(gè)文件在com命令過后會(huì)生成,也就是編譯結(jié)束后會(huì)生成。-l sim.log,意思是把仿真產(chǎn)生的仿真信息都存儲(chǔ)在sim.log文本文件中。?
????????把以后綴“.vpd”、“.log”、“.key”、“.vdb”的文件刪掉,把csrc文件刪掉,把sim開頭的文件刪掉,把DVEfiles文件刪掉。刪掉運(yùn)行verdi軟件產(chǎn)生的一些附屬文件。
????????這里寫的是設(shè)計(jì)的一些VCS操作,實(shí)際上如果是做驗(yàn)證的話,還會(huì)有更多的一些操作,比如收覆蓋率,仿真給隨機(jī)種子等。