在C程序的設(shè)計(jì)中,任何一個(gè)C程序的頂層都是main()函數(shù)。而在vivado HLS的設(shè)計(jì)中,只要函數(shù)的層次在main()函數(shù)以下,都可以被綜合。但是每個(gè)vivado HLS工程只能指定一個(gè)top層函數(shù)作為輸出RTL模塊的頂層,其它和這個(gè)函數(shù)層次平行,不需要被綜合的函數(shù)都可以作為testbench來使用。這樣就帶來一個(gè)問題,如何編寫vivado HLS工程的testbench更高效,或者說能更好的讓HLS工具自動(dòng)重用C testbench驗(yàn)證產(chǎn)生的RTL代碼就變得非常重要。
通常,在Vivado HLS中,好的C testbench設(shè)計(jì)原則是testbench設(shè)計(jì)和需要實(shí)現(xiàn)的算法函數(shù)分別保存在不同的文件中,并且充分利用頭文件。Testbench常常包含了一些HLS綜合不支持的操作,比如通過文件的讀寫取得仿真數(shù)據(jù)并保存結(jié)果,或者打印一些測試結(jié)果進(jìn)行分析。在頭文件中,完成對(duì)testbench中所有的數(shù)據(jù)類型和函數(shù)的定義,以及包含共享的設(shè)計(jì)文件和函數(shù)庫。
Vivado HLS中,只能指定一個(gè)top層函數(shù)用于綜合,top層函數(shù)可以包含多個(gè)子函數(shù)。當(dāng)需要綜合多個(gè)并行層次的函數(shù)時(shí),可以編寫一個(gè)wrapper函數(shù)作為top層函數(shù),將需要綜合的多個(gè)并行函數(shù)封裝起來。
C testbench的目不僅是要驗(yàn)證需要綜合的top函數(shù)功能正確(C編譯器驗(yàn)證環(huán)境),同時(shí)重用C testbench作為綜合產(chǎn)生RTL代碼的仿真激勵(lì),HLS工具自動(dòng)調(diào)用C testbench來驗(yàn)證RTL功能的一致性(C編譯器和RTL仿真器的協(xié)同仿真環(huán)境)。這樣,編寫一個(gè)好的風(fēng)格testbench可以很好的提高設(shè)計(jì)的驗(yàn)證效率,如果在HLS綜合前和綜合過程中,需要修改綜合函數(shù)的代碼,可以用testbench驗(yàn)證,確保需要綜合的C算法功能正確。
Vivado HLS中推薦高效的testbench具有如下三個(gè)特征:
1. Testbench代碼和需要綜合的C算法代碼保存在不同的文件中(例子1-1)。輸入多個(gè)不同的數(shù)據(jù),對(duì)需要綜合的Top層函數(shù)執(zhí)行多次的處理和驗(yàn)證。還可以進(jìn)行top函數(shù)多樣性的測試。Testbench和C設(shè)計(jì)分開不同的文件使得HLS工程非常清晰,它們分別作為test bench文件和source文件加入HLS的project中。(Testbench和要綜合實(shí)現(xiàn)的設(shè)計(jì)文件分別保存不是HLS強(qiáng)制的,也可以保存在同一個(gè)文件中,如果保存為同一個(gè)文件,在HLS工程,需要指定這個(gè)文件既是testbench文件也是source文件)。
2. Testbench具有自測試功能,testbench調(diào)用需綜合的top函數(shù),仿真輸出結(jié)果與已知正確的數(shù)值進(jìn)行對(duì)比。已知正確的數(shù)值可以通過文件讀入(例子2-1),也可以由testbench的其它部分的仿真代碼產(chǎn)生(例子2-2)。
3. Main()函數(shù)作為testbench函數(shù)(例子3-1),如果仿真top函數(shù)正確,main()函數(shù)返回0值;如果仿真不通過,返回任意非0的值即可(例子3-2)。(之所以要求仿真正確返回0值,是因?yàn)镠LS工具自動(dòng)進(jìn)行RTL驗(yàn)證時(shí),如果testbench返回0值,HLS認(rèn)為仿真正確,而返回其它值時(shí),HLS報(bào)告仿真失?。?。
綜上所述,掌握三個(gè)基本的VivadoHLS工程testbench編寫原則,可以輕松書寫VHLS高效的testbench仿真激勵(lì)。首先,testbench和要綜合的頂層函數(shù)分別保存在不同的文件中,使得vivadoHLS工程簡潔清楚;其次,testbench具有自測試功能,通過調(diào)用Golden函數(shù)或者已保存好的golden數(shù)據(jù),與仿真的結(jié)果進(jìn)行比較,使得HLS自動(dòng)重用C testbench來驗(yàn)證RTL仿真變得簡單;最好,數(shù)據(jù)比較一致返回“0”值,錯(cuò)誤不一致時(shí)返回任意非“0”值即可。
?
評(píng)論