愛伊米

cocotb初探

對於從事ASIC行業及FPGA行業的小夥伴來說,模擬是一件必不可少的事情。或許有人是驗證大拿,UVM高手,但相較於軟體豐富的驗證框架,對於各種各樣的場景單純的SV構建測試用例是否便捷值得推敲。

何為cocotb

cocotb is a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python。

21世紀,python成了一門吃香的語言。cocotb是一套基於python的用於構建模擬及測試用例的lib庫,它的框架為:

cocotb初探

可以看到,在cocotb的框架裡,我們的待測試邏輯執行在模擬器中(VCS、Verilator等),而我們的測試框架及測試用例均以python的形式構建,雙方透過模擬器提供的各種標準介面進行通訊。及設計程式碼為Verilog/VHDL/Systemverilog,而測試程式碼為Python。

存在即合理,為什麼這麼搞?因為Python寫起來簡單唄!在能夠正常實現對DUT的介面驅動的同時藉助python豐富的lib庫能夠讓我們快速的構建測試用例及參考模型。而藉助軟體現成的測試框架能夠極大加速驗證流程。想想單純的一個影象處理的模擬用純Systemverilog的方式進行驗證在進行測試資料生成及最後結果對比要多少指令碼……

cocotb安裝

按照cocotb手冊給出的安裝流程,在CentOS裡安裝步驟為:

#

在安裝過程中,有遇到“Python。h: No such file or directory”,解決辦法為:

安裝後可以檢視到:

對於沒有VCS等收費EDA license的小夥伴建議安裝Verilator:

example

在cocotb中給出的example中,endian_swapper例子的測試框架為:

cocotb初探

測試框架和我們在平常的測試框架行為基本相同,不同是cocotb為Driver、Monitor、Scoreboard等都提供了基礎類庫供呼叫,對於搭建模擬平臺應該有較好的幫助。而cocotb中提供的TestFactory,能夠方便的進行測試用例的生成:

這裡根據輸入的引數,factory會生成32個testcase用於測試,感覺還是蠻高效的。在模擬完成後,能夠自動彙總測試結果:

cocotb初探

寫在最後

之所以探索下cocotb,主要原因是雖然SpinalHDL測試框架和cocotb差不多,但目前SpinalHDL尚未整合對VCS模擬器的整合(而我又沒打算自己整合進去)。而在做FPGA設計時,若程式碼裡集成了Xilinx/Altera的IP,那麼在SpinalHDL的框架裡就沒辦法進行模擬了,而cocotb則是一個不錯的選擇(若可以選,我仍選SpinalHDL,設計模擬一條龍,當然現在也可以,對於Mem、FIFO等常用IP SpinalHDL還是有提供的,或者我們自己按需定製實現IP也可以的,SpinalHDL寫IP簡直不要太爽)。