0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于PFGA的脫離Vivado單獨(dú)建仿真環(huán)境工程

電子設(shè)計(jì) ? 來(lái)源:網(wǎng)絡(luò)交換FPGA ? 作者:網(wǎng)絡(luò)交換FPGA ? 2020-12-03 12:53 ? 次閱讀

FPGA樣機(jī)和做芯片的思路其實(shí)是有差異的。為了追求好的性能,節(jié)省成本,降低功耗(PPA),芯片設(shè)計(jì)者往往把事情做到極致,去做驗(yàn)證時(shí)把各種覆蓋率盡可能做到100%,把每個(gè)模塊電路結(jié)構(gòu)優(yōu)化到面積最小,通過(guò)Power Gating和Clock Gating等技術(shù)把功耗降到最低,爭(zhēng)取把每次流片(燒錢(qián))的風(fēng)險(xiǎn)降到最低;相比芯片設(shè)計(jì)流程,F(xiàn)PGA樣機(jī)的開(kāi)發(fā)人員往往不太注重上述要求,雖然有著與做芯片相同的目標(biāo)和追求,但往往因?yàn)镕PGA的可編程性,即便后續(xù)發(fā)現(xiàn)問(wèn)題,也可以通過(guò)修改代碼再次燒寫(xiě)bit文件的方式來(lái)彌補(bǔ),出錯(cuò)成本相對(duì)低了很多。但如果按照做芯片的方式來(lái)做FPGA樣機(jī),肯定會(huì)帶來(lái)更好的結(jié)果,甚至可以大幅度的降低FPGA開(kāi)發(fā)時(shí)間。在這個(gè)過(guò)程中,就需要把常規(guī)的做FPGA的方式進(jìn)行修正,比如經(jīng)常采用的跟FPGA編譯工具聯(lián)合仿真的辦法就不太適合做芯片的驗(yàn)證了。本文就探討如何把Vivado與ModelSim聯(lián)合仿真修改為單獨(dú)采用ModelSim進(jìn)行仿真。

在本公眾號(hào)上一篇文章(【干貨】推薦一款FPGA仿真調(diào)試?guó)B槍換炮的工具!)中就曾提到,隔行如隔山,做芯片的人永遠(yuǎn)無(wú)法理解只做FPGA樣機(jī)的人在某些情況下不做仿真就直接上板的做法,非芯片設(shè)計(jì)出身只做FPGA樣機(jī)的人也不知道這個(gè)世界上還存在更為高效的Verilog或VHDL語(yǔ)言的仿真工具和仿真方法,也不理解為了把一個(gè)芯片做到極致,必須嚴(yán)格要求代碼規(guī)范的做法。為了能夠使用上一篇文章中高效的Verdi或者SimVision仿真調(diào)試工具,脫離Vivado等仿真工具單獨(dú)搭建仿真環(huán)境的就成為比較急迫的需求了。

本公眾號(hào)之前也曾經(jīng)發(fā)布過(guò)一篇相關(guān)的文章,用Modelsim獨(dú)立仿真帶Vivado IP核的仿真工程,也是實(shí)現(xiàn)采用ModelSim單獨(dú)搭建仿真環(huán)境的一種方法,但文中所述方法仍未徹底擺脫Vivado的環(huán)境,適用的場(chǎng)景也受到限制,某些工程中還會(huì)出錯(cuò)。因此,本文從最原始文件搭建仿真環(huán)境的思路出發(fā),嘗試著研究脫離Vivado單獨(dú)建仿真環(huán)境的過(guò)程中都會(huì)遇到什么問(wèn)題,采用什么樣的方法比較容易解決,筆者試了好幾個(gè)工程,總結(jié)出一套相對(duì)完善的解決思路,來(lái)分享給大家。

FPGA開(kāi)發(fā)最不理解的芯片設(shè)計(jì)中的操作

1、做芯片的仿真最后都不用圖形界面
與剛開(kāi)始做FPGA開(kāi)發(fā)時(shí)都在圖形界面下操作的仿真方法不同,做大規(guī)模芯片設(shè)計(jì)時(shí)的仿真常常不調(diào)用圖形界面,都是采用命令行的形式做的仿真。

上圖就是采用簡(jiǎn)單的windows下的批處理調(diào)用modelsim進(jìn)行的一個(gè)仿真過(guò)程,這個(gè)簡(jiǎn)單的批處理,就是腳本。也是本文最終要實(shí)現(xiàn)的目標(biāo)。

set PROJECT_PATH=%cd%
::vsim  -do  sim.do
vsim -c -do  sim.do  

腳本,是芯片設(shè)計(jì)人員必須要掌握的基本技能。在芯片設(shè)計(jì)的各個(gè)階段,腳本的作用是非常巨大的。代碼仿真,可以使用腳本來(lái)進(jìn)行仿真環(huán)境的搭建,綜合的約束文件,必須采用腳本來(lái)提前對(duì)綜合過(guò)程中的各種要求進(jìn)行說(shuō)明,后端就更不用說(shuō)了。因?yàn)檎麄€(gè)芯片的設(shè)計(jì)流程,每個(gè)流程的所有中間信息都是靠文本來(lái)儲(chǔ)存的,RTL代碼,netlist,后端的顏色文件,流片用的GDSII等等,對(duì)文本進(jìn)行隨意的操作處理就是一名IC設(shè)計(jì)人員的基本技能。

如下圖就是一個(gè)簡(jiǎn)單的采用NCVerilog進(jìn)行仿真的腳本。

#!/bin/sh
echo "/`include /"../testcase166/$1.v/"" > testcase.v
sed "s///wave.shm///wave$1.shm/g" ../testbench/testbench.v > testbench.tmp
cp ../testbench/testbench.v ../testbench/testbench.bak
cp testbench.tmp ../testbench/testbench.v
rm -f testbench.tmp

ncverilog -f ../filelist/filelist.v +access+rwc  -l ../log/log/$1.log

mv ../testbench/testbench.bak ../testbench/testbench.v

rm -f testcase
~

而下圖則是一個(gè)采用TCL語(yǔ)言描述的Design Complier綜合腳本的開(kāi)頭部分。

sh date
remove_design -designs 
##########################
#set library             #
##########################
set search_path [list /tools/lib/smic25/feview_s/version1/STD/Synopsys /
                      /tools/lib/smic25/feview_s/version1/STD/Symbol/synopsys]
set target_library  { smic25_tt.db }
set link_library    { smic25_tt.db  }
set symbol_library  { smic25.sdb }


##########################
#Paths    variables      #
##########################
     set main_dir ../..

     set RTL_ROOT_PATH $main_dir/hdl
     set NETLIST_PATH  $main_dir/sim/syn/netlist
     set RPT_PATH      $main_dir/sim/syn/log
     set DB_PATH       $main_dir/sim/syn/db
     set SDF_PATH      $main_dir/sim/syn/sdf

##########################
#void warning Info       #
##########################
suppress_message  VER-130
suppress_message  VER-129
suppress_message  VER-318
suppress_message  ELAB-311
suppress_message  VER-936


################################
#read&link&Check design#
################################

2、做芯片的仿真最后都不看波形

在做芯片仿真時(shí),無(wú)論是采用自己搭建的簡(jiǎn)單仿真環(huán)境還是UVM的仿真環(huán)境,最后的形式常常是把所有的testcase都集中到仿真環(huán)境中,只需敲一個(gè)命令,回車(chē),所有的testcase就能夠全部運(yùn)行下去。而仿真過(guò)程的錯(cuò)誤,也都被記錄到log文件中,無(wú)論是運(yùn)行的對(duì)與錯(cuò),都可以在log文件中看到。如下圖就是所有的testcase截圖,每個(gè)case運(yùn)行的結(jié)果也會(huì)保存到另外一個(gè)log目錄下。

而FPGA開(kāi)發(fā)人員,則不會(huì)去建立如此完善的仿真環(huán)境,往往是簡(jiǎn)單的搭建一個(gè)某種功能模式下的仿真環(huán)境仿一下過(guò)了,就上板了。

采用ModelSim單獨(dú)仿真

1、整理RTL代碼及仿真代碼

如果要用ModelSim單獨(dú)仿真,并且需要搭建類(lèi)似于上面描述的采用腳本形式來(lái)仿真的仿真環(huán)境,那么第一步就需要從Vivado工程中把相應(yīng)的Verilog代碼整理出來(lái)。

Vivado跟Quartus在仿真時(shí)采用的思路是不一樣的,對(duì)于Quartus而言,你可以很容易就能脫離開(kāi)Quartus單獨(dú)搭建一個(gè)ModelSim或者VCS的仿真環(huán)境,因?yàn)镼uartus所有的IP核或者原語(yǔ)庫(kù)之類(lèi)的內(nèi)容全部都是以verilog或者VHDL文件存儲(chǔ)的,建仿真環(huán)境時(shí),只需要到Quartus的安裝路徑下找一個(gè)叫EDA的目錄下找sim_lib的子目錄下找相應(yīng)的.v文件添加到仿真工程里就可以了,常見(jiàn)的庫(kù)文件主要有三個(gè),220model.v,altera_mf.v和cyclone_atoms.v(或者是別的FPGA型號(hào))。見(jiàn)本公眾號(hào)之前的文章有詳細(xì)描述:用Quartus II和ModelSim做后仿真(時(shí)序仿真)。

在Vivado中也有類(lèi)似于Quartus中的庫(kù)文件,在Vivado工程目錄下,如下圖所示。

然后,整體拷貝ip文件夾到自己想搭建的modesim仿真環(huán)境目錄下:

上圖中rtl文件夾就是自己原來(lái)的設(shè)計(jì)文件,tb則是一些仿真用的.v文件。

2、編寫(xiě)腳本sim.do文件

一個(gè)比較簡(jiǎn)單的modelsim腳本文件如下。

vlib work
vlog -f  ./rtl.f
vsim -novopt work.tb_crossbar_top
do wave.do
run 10us

上面的腳本的具體含義,大家都可以百度搜索找到。需要說(shuō)明的是所有工程中的文件的路徑是需要寫(xiě)到一個(gè)rtl.f的文件夾下的,具體源代碼可以參考本公眾號(hào)之前的文章:如何快速生成Verilog代碼文件列表?(內(nèi)附開(kāi)源C代碼),需要注意的是,生成的文件路徑地址中的斜杠與modelsim腳本中要求的斜杠剛好相反,可以直接采用文本編輯器替換掉,也可以添加以下子函數(shù)到C代碼中簡(jiǎn)單修改一下。

void xiegang(char* s)
{
int i,j,k;
char buf[800]=" ";
char buf1[800]=" ";
memset(buf,0,800);
memset(buf1,0,800);

strcpy(buf,s);
strcpy(buf1,s);

for(i=0;i {
if(buf[i]=='//')
{
buf1[i]='/';
}
}

strcpy(s,buf1);
}

上面的C代碼實(shí)現(xiàn)文件列表的程序,其實(shí)也是腳本。

3、注意事項(xiàng)

在實(shí)現(xiàn)的過(guò)程中,發(fā)現(xiàn)Vivado并沒(méi)有把所有用到的庫(kù)文件都寫(xiě)成.v的形式,而是以編譯庫(kù)的形式存在。這樣就需要在仿真時(shí)把對(duì)應(yīng)的庫(kù)文件包含進(jìn)去。上面的腳本需要修改為:

vlib work
vlog -f  ./rtl.f
#vsim -novopt work.tb_crossbar_top
vsim -gui work.tb_crossbar_top -voptargs="+acc" -L C:/modeltech64_10.5/vivado_17_2/simprims_ver -L C:/modeltech64_10.5/vivado_17_2/unisims_ver 
do wave.do
run 10us

C:/modeltech64_10.5/vivado_17_2/simprims_ver

C:/modeltech64_10.5/vivado_17_2/unisims_ver

兩個(gè)庫(kù)都是Vivado與ModelSim聯(lián)合仿真時(shí)ModelSim預(yù)先編譯好的仿真庫(kù),這里面很多都是FPGA上用到的BUFG、PLL等內(nèi)容。但添加完這些庫(kù)文件后,還是有錯(cuò)誤,具體如下:

經(jīng)過(guò)上網(wǎng)查找原因,發(fā)現(xiàn)這是xilinx全局復(fù)位的模塊。該模塊在C:/Xilinx/Vivado/2015.1/data/verilog/src路徑其實(shí)在上面Error提示的一部分。

于是,自己copy一份glbl.v到當(dāng)前工程,進(jìn)行編譯。

但還是彈出相同的錯(cuò)誤提示。

最后,在tb.v中添加該模塊的調(diào)用才最終解決問(wèn)題。

在筆者嘗試多個(gè)工程之后,發(fā)現(xiàn)找Vivado 對(duì)應(yīng)的庫(kù)實(shí)在是太麻煩了,那么多的編譯出來(lái)的庫(kù),每個(gè)庫(kù)也找不到具體解釋含義的說(shuō)明文檔。無(wú)奈之下,想到了徹底擺脫Vivado的終極解決方案。

出現(xiàn)了找不到某個(gè)模塊定義的錯(cuò)誤之后,就需要嘗試著去添加上圖中不知道含義的庫(kù)看能不能解決問(wèn)題,一個(gè)一個(gè)的試,一個(gè)一個(gè)的試,試到懷疑人生。

終極方案

這個(gè)終極解決方案就是采用ASIC的思路來(lái)替換掉所有的IP。如果考慮最后要做ASIC,那么就需要把設(shè)計(jì)代碼中所有的FGPA IP核或者原語(yǔ)之類(lèi)的內(nèi)容全部替換掉,比如FIFO都要修改成控制邏輯加RAM的形式,一些BUFG之類(lèi)的改善時(shí)序或驅(qū)動(dòng)的原語(yǔ)也全部刪掉。如果只考慮做仿真,則只需要自己手寫(xiě)一個(gè)RAM的行為邏輯,定義一個(gè)數(shù)組類(lèi)型,根據(jù)輸出的時(shí)候是否打拍隨意的調(diào)整。一些FIFO也可以很容易的在網(wǎng)上找到源代碼,同步的,異步的,首字置出的FIFO都有。替換干凈之后,就跟Vivado沒(méi)有任何關(guān)系了!甚至也跟ModelSim也沒(méi)有任何關(guān)系了,可以隨意的更換仿真工具,比如VCS和NC等,徹底的解決問(wèn)題。

寫(xiě)到此處,想起了一個(gè)有趣的事情。據(jù)說(shuō)有一種永遠(yuǎn)不讓代碼中出現(xiàn)BUG的終極解決方案。猜猜看是什么。

答案是:不要寫(xiě)一行代碼!

這個(gè)跟擺脫Vivado單獨(dú)建仿真環(huán)境的終極解決思路竟然高度一致!徹底擺脫Vivado建仿真環(huán)境的方法也是,仿真代碼中不要用到Vivado中的任何一個(gè)IP核?。?!

4、覆蓋率分析
有了腳本的支持,也脫離掉了Vivado的束縛,就可以做很多自己想做的事情,把仿真環(huán)境做成可回歸的形式之后就可以做覆蓋率分析。這時(shí)的腳本就修改成如下的樣子。

vlib work
vlog -f  ../filelist/filelist_sim.v
vlog -f  ../filelist/filelist_hdl.v  -cover bcesxf
vsim -novopt -coverage work.TESTBENCH -L C:/modeltech64_10.5/vivado_17_2/simprims_ver -L C:/modeltech64_10.5/vivado_17_2/unisims_ver 
run -all

大家可能注意到,上面腳本中把filelist分成了兩種,一種是仿真的,不用看覆蓋率,另外一種則是可綜合代碼部分,需要看覆蓋率,單獨(dú)寫(xiě)到了filelist_hdl.v的文件里面。

運(yùn)行結(jié)束后,就可以在圖形界面上看到覆蓋率分析的結(jié)果。

隨著測(cè)試?yán)倪\(yùn)行,上面設(shè)計(jì)代碼的覆蓋率也會(huì)逐漸提高,最后可以通過(guò)選擇達(dá)不到覆蓋率要求的模塊進(jìn)行詳細(xì)的分析,查看測(cè)試?yán)龥](méi)有運(yùn)行到的語(yǔ)句。有了充分的仿真驗(yàn)證后,再上板就順利的多了。至少99%的邏輯BUG都被解決掉了,剩余的就是一些時(shí)序方面的問(wèn)題,這樣就可以大大節(jié)約FPGA調(diào)試的時(shí)間。

用做芯片的思路去做FPGA,不是殺雞用牛刀,而是一種正確的思路。搭建一個(gè)完善的仿真驗(yàn)證環(huán)境固然麻煩,但一旦做好之后,事半功倍,效率會(huì)大幅度的提升。本文中提到的仿真環(huán)境僅僅是一種最簡(jiǎn)單的只有Verilog代碼的仿真環(huán)境,在驗(yàn)證復(fù)雜度和便捷性等方面都差的很遠(yuǎn)遠(yuǎn)。公司里面目前采用的辦法,往往是大牛們用SV搭建好一個(gè)UVM框架后,下面做具體實(shí)現(xiàn)的人只需要往對(duì)應(yīng)框里面填數(shù)字就可以了。

工欲善其事,必先利其器!做FPGA,仿真驗(yàn)證就是器!

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598908
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    797

    瀏覽量

    65854
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OPA820同樣的波電路mutisim仿真與TINA輸出結(jié)果差異較大,原因是什么?

    同樣的波電路 mutisim 仿真與TINA 輸出結(jié)果差異較大,原因是什么?如何調(diào)整電路才能讓兩個(gè)軟件仿真結(jié)果一致,實(shí)現(xiàn)檢波?
    發(fā)表于 08-07 07:45

    STM32L152芯片DMA讀UART2,脫離仿真器自己運(yùn)行時(shí)讀不到正確的值為什么?

    求教:我用L152芯片讀UART2的固定長(zhǎng)度為14的內(nèi)容,接仿真器時(shí)能讀到正確的值,但是脫離仿真器自己運(yùn)行時(shí)讀不到正確的值,請(qǐng)問(wèn)是什么原因?
    發(fā)表于 05-15 07:03

    IAR工程文件如何導(dǎo)入到Keil UVision5中?

    如果是IAR工程文件,現(xiàn)在要導(dǎo)入到Keil UVision5中,要如何操作?
    發(fā)表于 05-06 08:15

    使用STVD一個(gè)STM8的工程,.h文件在哪里添加??jī)?nèi)存分配函數(shù)是哪個(gè)?

    使用STVD一個(gè)STM8的工程,.h文件在哪里添加??jī)?nèi)存分配函數(shù)是哪個(gè)?芯片是怎樣啟動(dòng)的?Source Files 下面的mapping.asmand main.asm 是做什么用的文件?
    發(fā)表于 04-28 09:05

    eclipse自己工程,無(wú)法編譯通過(guò)怎么解決?

    eclipse自己工程,無(wú)法編譯通過(guò)
    發(fā)表于 04-28 07:12

    Vivado 使用Simulink設(shè)計(jì)FIR濾波器

    文件。效果等同于自動(dòng)操作的方法1,缺點(diǎn)是使用此方法綜合工程必須裝有對(duì)應(yīng)版本的matlab。 Vivado設(shè)計(jì)套件,賽靈思公司2012年發(fā)布的集成設(shè)計(jì)環(huán)境,隨著每季度的按時(shí)更新,現(xiàn)已發(fā)布最新版本為
    發(fā)表于 04-17 17:29

    如何在AMD Vivado? Design Tool中用工程模式使用DFX流程?

    本文介紹了在 AMD Vivado? Design Tool 中用工程模式使用 DFX 流程以及需要注意的地方。在使用 DFX 工程模式的過(guò)程中要把具體步驟映射到相應(yīng)的 DFX 非工程
    的頭像 發(fā)表于 04-17 09:28 ?514次閱讀
    如何在AMD <b class='flag-5'>Vivado</b>? Design Tool中用<b class='flag-5'>工程</b>模式使用DFX流程?

    stm32f303工程的步驟是什么?

    求大神指導(dǎo):一個(gè)stm32f303工程,本人只下載了keil5軟件,還需要下載什么,下載之后的建工程步驟是什么?
    發(fā)表于 04-11 07:07

    深入探索Vivado工程模式FPGA設(shè)計(jì)流程

    在設(shè)計(jì)過(guò)程的每個(gè)階段,設(shè)計(jì)者均可以打開(kāi)Vivado集成開(kāi)發(fā)環(huán)境,對(duì)存儲(chǔ)器中保存的當(dāng)前設(shè)計(jì)進(jìn)行分析和操作。
    發(fā)表于 04-03 09:36 ?621次閱讀
    深入探索<b class='flag-5'>Vivado</b>非<b class='flag-5'>工程</b>模式FPGA設(shè)計(jì)流程

    fpga仿真文件怎么寫(xiě)

    首先,你需要選擇一個(gè)FPGA仿真軟件,如ModelSim、Vivado、Quartus II等。這些軟件都提供了強(qiáng)大的仿真功能,可以幫助你驗(yàn)證FPGA設(shè)計(jì)的正確性。
    的頭像 發(fā)表于 03-15 14:00 ?544次閱讀

    如何禁止vivado自動(dòng)生成 bufg

    操作: 打開(kāi)Vivado工程,并進(jìn)入項(xiàng)目導(dǎo)航器窗口。 選擇下方的"IP"選項(xiàng)卡,展開(kāi)"Clocking"選項(xiàng)。在這
    的頭像 發(fā)表于 01-05 14:31 ?1453次閱讀

    怎樣單獨(dú)使用modelsim仿真xilinx呢?

    直接在modelsim軟件內(nèi)執(zhí)行.do文件進(jìn)行仿真,不通過(guò)vivado調(diào)用modelsim,vivado僅用于生成IP核。
    的頭像 發(fā)表于 12-04 18:26 ?1084次閱讀
    怎樣<b class='flag-5'>單獨(dú)</b>使用modelsim<b class='flag-5'>仿真</b>xilinx呢?

    使用JTAG仿真器在vivado環(huán)境下抓信號(hào)時(shí)報(bào)錯(cuò)咋辦?

    在使用JTAG仿真器在vivado環(huán)境下抓信號(hào)時(shí),報(bào)如下錯(cuò)誤:
    的頭像 發(fā)表于 11-14 10:37 ?2965次閱讀

    Vivado2018版本中Modelsim的配置

    Vivado自帶的仿真工具在一些基本功能的仿真測(cè)試時(shí)是可以滿(mǎn)足的,但如果你的工程較為龐大,那么自帶的仿真工具將有些勉強(qiáng),除了在數(shù)據(jù)輸出方面的
    的頭像 發(fā)表于 11-08 14:47 ?1498次閱讀
    <b class='flag-5'>Vivado</b>2018版本中Modelsim的配置

    如何脫離Vivado建立單獨(dú)仿真環(huán)境軟件呢?

    FPGA項(xiàng)目開(kāi)發(fā)的過(guò)程中,需要完成設(shè)計(jì)代碼開(kāi)發(fā)、驗(yàn)證環(huán)境搭建、仿真分析、板級(jí)驗(yàn)證等操作,在這個(gè)過(guò)程中,許多操作雖然必不可少但是步驟是重復(fù)的。
    的頭像 發(fā)表于 09-27 09:25 ?1107次閱讀
    如何<b class='flag-5'>脫離</b><b class='flag-5'>Vivado</b>建立<b class='flag-5'>單獨(dú)</b><b class='flag-5'>仿真</b><b class='flag-5'>環(huán)境</b>軟件呢?