目錄
引言
腳本仿真步驟分析
完整的腳本代碼
保姆級(jí)使用教程
擴(kuò)展
引言
之前對(duì)于工程一直采用的是vivado+questasim聯(lián)合仿真的模式,對(duì)于大型工程來說這個(gè)是合適的,因?yàn)樾枰{(diào)用一些ip庫和包括約束之類的,vivado的圖形化界面做的很完善,基本是一站式服務(wù)了;而對(duì)于一個(gè)小demo來說,如果為此要新建一個(gè)工程的話操作還是有點(diǎn)復(fù)雜的,而且占據(jù)的空間也很大。并且對(duì)于一個(gè)合格的工程師來說,最好還是減少重復(fù)工作,畢竟已經(jīng)21世紀(jì)了(雖然我還做不到),所以自己就閑的探索了一下基于腳本化的自動(dòng)仿真流程,只需要有一個(gè)設(shè)計(jì)文件和TB文件即可對(duì)一些小demo完成仿真。
腳本仿真步驟分析
本工程的例子為對(duì)一個(gè)異步fifo的腳本化仿真測試
1、首先我們先創(chuàng)建一個(gè).do文件,方法隨意,我一般建一個(gè)txt,然后后綴改成.do,例如 auto_test.do
2、此do文件是在Questa/Modelsim的命令行中執(zhí)行的,所以需要先退出當(dāng)前工程,命令為:
quit -sim
3、然后清除命令行的顯示信息
.main clear
4、仿真器需要?jiǎng)?chuàng)建一個(gè)物理目錄(文件夾),將編譯后的庫文件放在其中,以便仿真的時(shí)候?qū)ζ溥M(jìn)行調(diào)用
vlib ./lib
vlib ./lib/work
5、創(chuàng)建邏輯庫(work),并映射邏輯庫到物理目錄,編譯工程之后的編譯文件存放在該目錄下
vmap work ./lib/work
6、編譯Verilog 源代碼,將編譯得到的信息文件與編譯的文件放到邏輯庫里面,庫名缺省編譯到work本地庫,文件按順序編譯。
主要是編譯設(shè)計(jì)文件,測試文件,調(diào)用的IP核.v文件,相應(yīng)的庫文件,通配符./../xxx/ *.v,要注意編譯的順序.
NOTE:測試tb文件放在./tb文件夾下,設(shè)計(jì)文件放在./source文件夾下
vlog -work work ./tb/*.v
vlog -work work ./source/*.v
7、優(yōu)化部分參數(shù)(-voptargs=+acc),鏈接到默認(rèn)的work 庫,啟動(dòng)仿真頂層測試邏輯庫(work)里面的tb文件。
NOTE:這里的測試tb文件名字是tb_asyn_FIFO,使用的時(shí)候需要修改為自己tb的名字。
vsim ? ?-voptargs=+acc ? ?work.tb_asyn_FIFO
8、添加波形 add wave 測試頂層的名字/例化子模塊的例化名字/子模塊信號(hào)的名字
add ? ?wave ? ?-radix bin ? ?tb_ex_shift_reg/o_lvds_d
添加分割線:不同的信號(hào)之間進(jìn)行分割,語法格式是
add ? ?wave ? ?-divider ? ?{分割線的名字}
NOTE:可以修改添加wave的方式為從wave.do中讀取,wave.do為手動(dòng)添加波形之后保存的文件
這里直接添TB頂層的所有信號(hào)
add wave tb_asyn_FIFO/*
9、開始仿真,可以自己設(shè)定仿真時(shí)間
run 1ms
完整的腳本代碼
例子為對(duì)一個(gè)異步fifo的腳本化仿真測試
quit -sim
.main clear
vlib ./lib
vlib ./lib/work
vmap work ./lib/work
vlog -work work ./tb/*.v
vlog -work work ./source/*.v
vsim -voptargs=+acc work.tb_asyn_FIFO
add wave tb_asyn_FIFO/*
run 1ms
保姆級(jí)使用教程
1、首先創(chuàng)建一個(gè)自己的工程文件夾,如asyn_fifo,在里面創(chuàng)建兩個(gè)文件夾,分別為source和tb,source文件夾存放所有的設(shè)計(jì)文件,tb文件夾存放所有的tb文件。
2、將腳本do文件和兩個(gè)文件夾放在同一個(gè)目錄中,如圖所示
3.在questa/modelsim中change directory 到工程文件夾中
4.在命令行中執(zhí)行do auto_test.do命令
?5.之后仿真器便自動(dòng)開始刷刷刷執(zhí)行了
擴(kuò)展
1、如果用到廠商的IP庫,在腳本中也是可以添加進(jìn)去的,但是我做的時(shí)候只針對(duì)小demo的實(shí)現(xiàn),一般用不上,大家有需要的可以去查閱其他資料。
2、執(zhí)行后仿之類的操作,仿真器也有相關(guān)的指令,這里也不再說明,理由同上。
顯示狀態(tài)機(jī)的狀態(tài)
我們?cè)贛odelsim/Questasim中進(jìn)行仿真的時(shí)候,經(jīng)常會(huì)苦惱于狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)不夠直觀,因?yàn)橐话銧顟B(tài)機(jī)的編碼都是格雷碼或者二進(jìn)制碼。這時(shí)候我們可以在modelsim中直接顯示狀態(tài)機(jī)的名稱而不是數(shù)字。
一般用的方法有三種,分別為
- 在testbench文件中對(duì)設(shè)計(jì)文件中的各種狀態(tài)進(jìn)行映射
- 在testbench文件中對(duì)設(shè)計(jì)文件中的狀態(tài)機(jī)編碼進(jìn)行重定義
- 使用虛擬對(duì)象顯示狀態(tài)機(jī)名稱
在這里我使用的是第三種,也就是在tcl中進(jìn)行操作,而不需要修改TB中的內(nèi)容,對(duì)于設(shè)計(jì)可能會(huì)更加方便一些。
virtual type { {2‘b01 ONE} { 2'b10 ZERO} } state_type
virtual function {(state_type)/inst_fsm/state} fsm_state
add wave -color pink /inst_fsm/fsm_state
仿真波形變?yōu)?/p>
詳細(xì)的介紹可以參考:在Modelsim仿真中顯示狀態(tài)機(jī)名稱_kkfeng1002的博客-CSDN博客
參考文獻(xiàn)文章來源:http://www.zghlxwxcb.cn/news/detail-499737.html
基于腳本的modelsim自動(dòng)化仿真筆記 - IC_learner - 博客園文章來源地址http://www.zghlxwxcb.cn/news/detail-499737.html
到了這里,關(guān)于腳本化Questasim/Modelsim自動(dòng)仿真——脫離聯(lián)合仿真的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!