在數(shù)字電路設(shè)計中(Verilog or VHDL),ModelSim是常用的仿真工具。當(dāng)我們仿真大型的工程時,往往需要保留仿真波形,以便分析和以后查看。這就需要學(xué)習(xí)在ModelSim里面如何保存仿真波形及調(diào)用波形。
為了方便以后察看仿真結(jié)果,可以將仿真波形保存在.Wlf文件中:
一。保存過程:
1.完成仿真波形
2.切換到sim視窗
3.點(diǎn)擊保存圖標(biāo),可以直接保存為.wlf文件
二。打開過程
1.打開modelsim
2 file菜單打開.wlf文件(要在文件類型中選擇.wlf類型)
3.確定之后出現(xiàn)sim視窗
4.選中窗口中的測試文件名右擊————add wave即可在wave窗口打開該測試坡形。
三。也可以將波形保存為.do文件
do文件記錄了仿真的過程和加載的各種庫。
do文件的保存過程:
file——》save format——》D:/modeltech_6.5b/examples/wave.do 可以更改do文件名稱和存放目錄
2.do文件的加載:
file——》load(注意要在sim視窗下)。打開之后貌似只顯示出仿真過程代碼,沒法顯示波形。
modelsim保存仿真結(jié)果,以及打開保存的仿真結(jié)果的波形wlf文件(經(jīng)過實驗,真實可用)
1、在wave界面,將仿真波形保存為 .do文件(信號列表文件)。
2、切換左邊任務(wù)欄至“sim”,,點(diǎn)擊保存,給將要保存的 .wlf文件(波形文件)命名為自己想要的名字,默認(rèn)為vsim.wlf。
?。╳lf文件為modelsim的wave log file文件格式)
3、保存,OK,關(guān)閉modelsim(注意,必須關(guān)閉modelsim,否則打開wlf文件的時候,會提示未正常關(guān)閉,無法打開)。
4、重啟modelsim,open 之前保存的 .wlf文件,然后 load 對應(yīng)的 .do文件。
也可以使用命令行的格式打開此波形文件,舉例如下:vsim -view wave.wlf -do run.do。
do文件記錄了仿真的過程和加載的各種庫。
do文件的保存過程:
file——》save format——》D:/modeltech_6.5b/examples/run_wave.do 可以更改do文件名稱和存放目錄,一般保存在仿真目錄中。
2.在仿真路徑中找到文件vsim.wlf打開,再命令窗口輸入:do run_wave.do
具體操作:
1.打開modelsim se :切換目錄到仿真工程下。
2.命令行輸入:OpenFile vsim.wlf
3.命令行輸入:do run_wave.do(上次保存的wave.do文件)
參考:
保留仿真后的波形,步驟如下:
1.點(diǎn)擊file菜單下的save format,保存為.do格式文件
2.下次打開Modelsim后,在控制臺輸入do wave.do命令后,即可看到上次仿真的波形圖
此外,點(diǎn)擊向上箭頭的按鍵可以重復(fù)輸入上次命令。
怎么樣保存仿真的完整波形(不是printScreen),F(xiàn)ile》export》image好象和截屏的功能一樣,只能保存一部分波形,怎么樣保存成modelsim認(rèn)識的波形,下次看的時候只需要打開這個波形圖,不需要重新仿真,這個在vcs中可以的,用vcd文件,好像modelsim也支持dump vcd的,不知道具體怎么做,怎樣保存,怎么樣打開?
使用“dataset save sim filename.wlf ”保存仿真波形,
filename.wlf文件的名字可以自己任意取。打開時候直接,open filename.wlf文件就可以了。
直接通過OPEN找到.WLF文件,打開就可以了。
保存wlf,下一次只要直接打開它就可以了。但是有這樣的情況出現(xiàn),如果在保存wlf前,你改動了某些信號的位置,下一次打開是會回到原先的位置,此時你可以把do文件一起保存,在下一次打開wlf文件后,再打開do文件,你先前的順序就會回來
波形信號的保存:有時,在波形窗口內(nèi)拖放了較多的信號,可以保存起來以后調(diào)入。在wave窗口,F(xiàn)ile -》 Save format,保存成*.do文件。以后需要調(diào)入時,在modelsim主窗口命令行內(nèi)執(zhí)行:do *.do即可
ModelSim中寄存器組值查看工具
在ModelSim中,當(dāng)定義了寄存器數(shù)組(例如:reg [7:0] ram [0:127]),可以通過Memory List工具查看仿真時的值。步驟:
1.定義Reg類型,例如RAM
module ram_1024Byte
#(parameter DATA_WIDTH = 16, parameter ADDR_WIDTH = 8)
?。?/p>
input [(DATA_WIDTH-1):0] data,
input [(ADDR_WIDTH-1):0] read_addr, write_addr,
input we, clk,
output reg [(DATA_WIDTH-1):0] q
?。?
// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[0:(2**ADDR_WIDTH-1)];
// Initiation
initial
begin
$readmemh(“。。/dev/ram_init.dat”, ram);
end
// Read and Write Operation
always @ (posedge clk)
begin
// Write
if (we)
ram[write_addr] 《= data;
// Read (if read_addr == write_addr, return OLD data)。 To return
// NEW data, use = (blocking write) rather than 《= (non-blocking write)
// in the write assignment. NOTE: NEW data may require extra bypass
// logic around the RAM.
q 《= ram[read_addr];
end
endmodule
2.仿真
新建工程-》編譯-》仿真(without optimization)
View-》Memory List,便可以查看RAM中寄存器的值
評論
查看更多