對(duì)于從事ASIC行業(yè)及FPGA行業(yè)的小伙伴來(lái)說(shuō),仿真是一件必不可少的事情。或許有人是驗(yàn)證大拿,UVM高手,但相較于軟件豐富的驗(yàn)證框架,對(duì)于各種各樣的場(chǎng)景單純的SV構(gòu)建測(cè)試用例是否便捷值得推敲。
何為cocotb
cocotb is a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python.
21世紀(jì),python成了一門(mén)吃香的語(yǔ)言。cocotb是一套基于python的用于構(gòu)建仿真及測(cè)試用例的lib庫(kù),它的框架為:
可以看到,在cocotb的框架里,我們的待測(cè)試邏輯運(yùn)行在仿真器中(VCS、Verilator等),而我們的測(cè)試框架及測(cè)試用例均以python的形式構(gòu)建,雙方通過(guò)仿真器提供的各種標(biāo)準(zhǔn)接口進(jìn)行通信。及設(shè)計(jì)代碼為Verilog/VHDL/Systemverilog,而測(cè)試代碼為Python。
存在即合理,為什么這么搞?因?yàn)镻ython寫(xiě)起來(lái)簡(jiǎn)單唄!在能夠正常實(shí)現(xiàn)對(duì)DUT的接口驅(qū)動(dòng)的同時(shí)借助python豐富的lib庫(kù)能夠讓我們快速的構(gòu)建測(cè)試用例及參考模型。而借助軟件現(xiàn)成的測(cè)試框架能夠極大加速驗(yàn)證流程。想想單純的一個(gè)圖像處理的仿真用純Systemverilog的方式進(jìn)行驗(yàn)證在進(jìn)行測(cè)試數(shù)據(jù)生成及最后結(jié)果對(duì)比要多少腳本……
cocotb安裝
按照cocotb手冊(cè)給出的安裝流程,在CentOS里安裝步驟為:在安裝過(guò)程中,有遇到“Python.h: No such file or directory”,解決辦法為:#Prepare
sudo yum install make gcc gcc-c++ libstdc++-devel python3 python3-devel python3-pip
#install cocotb
pip install cocotb
##pip may belong to a different Python installation
# to what you expect. Use pip -V to check. If this
#prints “(python 2.7)”, use pip3 or python3 -m pip
#inplaceofpipinthecommandshown.
安裝后可以查看到:1.可以先查看一下含python-devel的包
yumsearchpython|greppython-devel
2.64位安裝python-devel.x86_64,32位安裝python-devel.i686,我這里安裝:
sudoyuminstallpython-devel.x86_64
3. 進(jìn)入/usr/include/python2.7看一下現(xiàn)在有沒(méi)有Python.h,版本不同目錄名不同,我這里是2.7版本。其實(shí)也可以看到很多.h文件,python需要庫(kù)或頭文件都在這個(gè)地方。
對(duì)于沒(méi)有VCS等收費(fèi)EDA license的小伙伴建議安裝Verilator:$cocotb-config -v
1.4.1.dev0
sudo apt-get install git make autoconf g++ flex bison -y # First time prerequisites
git clone http://git.veripool.org/git/verilator # Only first time
unsetenv VERILATOR_ROOT # For csh; ignore error if on bash
unset VERILATOR_ROOT # For bash
cdverilator
autoconf # Create ./configure script
./configure
make -j$(nproc)
sudomakeinstall
example
在cocotb中給出的example中,endian_swapper例子的測(cè)試框架為:測(cè)試框架和我們?cè)谄匠5臏y(cè)試框架行為基本相同,不同是cocotb為Driver、Monitor、Scoreboard等都提供了基礎(chǔ)類(lèi)庫(kù)供調(diào)用,對(duì)于搭建仿真平臺(tái)應(yīng)該有較好的幫助。而cocotb中提供的TestFactory,能夠方便的進(jìn)行測(cè)試用例的生成:
這里根據(jù)輸入的參數(shù),factory會(huì)生成32個(gè)testcase用于測(cè)試,感覺(jué)還是蠻高效的。在仿真完成后,能夠自動(dòng)匯總測(cè)試結(jié)果:factory = TestFactory(run_test)
factory.add_option("data_in", [random_packet_sizes])
factory.add_option("config_coroutine", [None, randomly_switch_config])
factory.add_option("idle_inserter", [None, wave, intermittent_single_cycles, random_50_percent])
factory.add_option("backpressure_inserter", [None, wave, intermittent_single_cycles, random_50_percent])
factory.generate_tests()
寫(xiě)在最后
之所以探索下cocotb,主要原因是雖然SpinalHDL測(cè)試框架和cocotb差不多,但目前SpinalHDL尚未集成對(duì)VCS仿真器的集成(而我又沒(méi)打算自己集成進(jìn)去)。而在做FPGA設(shè)計(jì)時(shí),若代碼里集成了Xilinx/Altera的IP,那么在SpinalHDL的框架里就沒(méi)辦法進(jìn)行仿真了,而cocotb則是一個(gè)不錯(cuò)的選擇(若可以選,我仍選SpinalHDL,設(shè)計(jì)仿真一條龍,當(dāng)然現(xiàn)在也可以,對(duì)于Mem、FIFO等常用IP SpinalHDL還是有提供的,或者我們自己按需定制實(shí)現(xiàn)IP也可以的,SpinalHDL寫(xiě)IP簡(jiǎn)直不要太爽)。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605257 -
軟件
+關(guān)注
關(guān)注
69文章
5007瀏覽量
87951
原文標(biāo)題:cocotb初探
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論