版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章ModelSim仿真工具EDA設(shè)計(jì)技術(shù)仿真的重要性功能驗(yàn)證和時(shí)序驗(yàn)證在EDA工程設(shè)計(jì)過程中具有極其重要的地位,一般要耗費(fèi)設(shè)計(jì)者或設(shè)計(jì)團(tuán)隊(duì)約60%-80%的工作量。在實(shí)施驗(yàn)證的過程中,要求設(shè)計(jì)者遵循設(shè)計(jì)方法學(xué)和某種硬件描述語(yǔ)言,編寫信號(hào)激勵(lì)文件,編譯并生成測(cè)試平臺(tái),借助仿真軟件或硬件驗(yàn)證工具,以文本、圖形或其他形式輸出驗(yàn)證結(jié)果,分析、評(píng)價(jià)工程設(shè)計(jì)的可靠性、正確性。ModelSimSEModelSim有不同規(guī)模和容量配置:ModelSimSE、ModelSimPE、ModelSimLE,其中ModelSimSE的性能最強(qiáng)、容量最大,至今已發(fā)展到10.0版。ModelSimSE10.0e的主窗口由工具欄、庫(kù)標(biāo)簽頁(yè)、命令窗口與信息區(qū)、工作區(qū)四部分組成。ModelSimSEModelSim的庫(kù)用于存放仿真數(shù)據(jù)。ModelSim將庫(kù)分為兩類:本地工作庫(kù)和資源庫(kù)。利用ModelSim進(jìn)行仿真分析,一般有兩種仿真流程:仿真基本流程和仿真工程流程。區(qū)別主要在于是否采用設(shè)計(jì)優(yōu)化。ModelSimSE仿真基本流程包括創(chuàng)建工作庫(kù)、編譯設(shè)計(jì)、加載并運(yùn)行仿真、結(jié)果分析與調(diào)試幾個(gè)階段。仿真工程流程的工作庫(kù)是自動(dòng)創(chuàng)建、自動(dòng)保留的。創(chuàng)建工程和工作庫(kù)無(wú)論功能仿真還是時(shí)序仿真,編譯仿真設(shè)計(jì)文件之前,都必須先創(chuàng)建一個(gè)工程和工作庫(kù)。創(chuàng)建工程是為了統(tǒng)一管理系統(tǒng)設(shè)計(jì)文件,而工作庫(kù)的目的是存儲(chǔ)編譯結(jié)果。有兩種方法:通過圖形用戶接口界面創(chuàng)建或通過命令窗口創(chuàng)建。創(chuàng)建工程和工作庫(kù)例:對(duì)8位計(jì)數(shù)器及其測(cè)試平臺(tái)創(chuàng)建工程。第一步,利用圖形用戶接口界面GUI創(chuàng)建工程。創(chuàng)建工程和工作庫(kù)完成上述步驟之后,命令行顯示如下信息:vlibworkvmapworkwork#Modifyingmodelsim.inifilemkdirE:/EDA/counter#readingD:\modeltech64_10.0e\win64/../modelsim.ini#Loadingprojectcounter創(chuàng)建工程和工作庫(kù)第二步,拷貝工程配置設(shè)置文件。第三步,添加工程文件。創(chuàng)建工程和工作庫(kù)有四種創(chuàng)建文件的方式:CreatNewFile,新建一個(gè)設(shè)計(jì)文件;AddExistingFile,載入已編制的設(shè)計(jì)文件;CreatSimulation,創(chuàng)建其他類型仿真文件;CreatNewFolder,創(chuàng)建新文件夾,適于大型系統(tǒng),按設(shè)計(jì)單元?dú)w類存放在相應(yīng)文件夾中。創(chuàng)建工程和工作庫(kù)在ModelSim的Workspace欄可見新建文件counter.v的狀態(tài)信息。。創(chuàng)建工程和工作庫(kù)雙擊counter.v文件,在工作區(qū)中編制仿真源文件。若之前已編譯過,則單擊該文件并右鍵選擇Edit。創(chuàng)建工程和工作庫(kù)完整的計(jì)數(shù)器源文件如下,并保存該文件。modulecounter(count,clk,reset);output[7:0]count;inputclk,reset;
reg[7:0]count;parametertpd_reset_to_count=3;parametertpd_clk_to_count=2;
function[7:0]increment;input[7:0]val;reg[3:0]i;regcarry;beginincrement=val;carry=1'b1;for(i=4'b0;((carry==4'b1)&&(i<=7));i=i+4'b1)beginincrement[i]=val[i]^carry;carry=val[i]&carry;endendendfunctionalways@(posedgeclkorposedgereset)if(reset)count=#tpd_reset_to_count8'h00;elsecount<=#tpd_clk_to_countincrement(count);
/*****************************************************************Usethefollowingblocktomakethedesignsynthesizable.
always@(posedgeclkorposedgereset)if(reset)count=8'h00;elsecount<=count+8'h01;******************************************************************/endmodule創(chuàng)建工程和工作庫(kù)新建測(cè)試平臺(tái)文件test_bench.v`timescale1ns/1nsmoduletest_bench;regclk,reset;wire[7:0]count;counterdut(count,clk,reset);
initial//Clockgeneratorbeginclk=0;forever#10clk=!clk;end
initial //Teststimulusbeginreset=0;#5reset=1;#4reset=0;end
initial$monitor($stime,,reset,,clk,,,count);
endmodule編譯仿真文件ModelSim支持多種硬件描述語(yǔ)言,包括Verilog、VHDL、SystemC等。針對(duì)不同的語(yǔ)言采用不同的漸進(jìn)式編譯器和編譯命令,將設(shè)計(jì)文件以任意順序編譯為可執(zhí)行的目標(biāo)代碼:VerilogHDL語(yǔ)言的編譯器和編譯命令:vlogVHDL語(yǔ)言的編譯器和編譯命令:vcomSystemC語(yǔ)言的編譯器和編譯命令:sccom編譯仿真文件例:編譯仿真文件。通過下拉菜單Compile>Compile開始編譯。編譯仿真文件也通過命令窗口啟動(dòng)VerilogHDL語(yǔ)言編譯器并編譯counter.v和test_bench.v文件:vlogcounter.vtest_bench.v#Compileofcounter.vwassuccessful.#Compileoftest_bench.vwassuccessful.#2compiles,0failedwithnoerrors.編譯仿真文件編譯成功加載頂層設(shè)計(jì)模塊例:加載頂層設(shè)計(jì)模塊。頂層設(shè)計(jì)模塊為“counter.v”和“test_bench.v”,由測(cè)試平臺(tái)向計(jì)數(shù)模塊輸入激勵(lì)信號(hào),計(jì)數(shù)模塊返回激勵(lì)響應(yīng)。加載頂層設(shè)計(jì)模塊輸入vsimwork.test_bench.v命令或者vsimwork.counter.v可加載模塊并啟動(dòng)仿真器vsim-novoptwork.test_bench#Loadingwork.test_bench#Loadingwork.counter加載頂層設(shè)計(jì)模塊加載成功后,主窗口出現(xiàn)Objects設(shè)計(jì)對(duì)象clk、reset、count的類型和值。加載頂層設(shè)計(jì)模塊Workspace和Objects面板顯示設(shè)計(jì)對(duì)象。執(zhí)行仿真加載設(shè)計(jì)模塊之后,仿真時(shí)標(biāo)以零時(shí)刻為起始點(diǎn)開始仿真,輸入run命令即可開始仿真。仿真命令有addwave、force、bp、run、step。例:執(zhí)行仿真。
在命令行輸入run命令并回車,得到100ns的仿真運(yùn)行結(jié)果。#000x#510x#8100#9000#10010#12011#20001#30011#32012#40002#50012#52013#60003#70013#72014#80004#90014#92015執(zhí)行仿真為了便于直觀地觀察仿真結(jié)果,需要在波形視圖增加設(shè)計(jì)對(duì)象。addwave是調(diào)出波形視圖命令,在命令之后增加信號(hào)名-r/*,即:VSIMaddwave–r/*。執(zhí)行仿真執(zhí)行仿真在GUI方式下執(zhí)行仿真任務(wù),可選擇“Simulate”、“Run”、“Run”,波形文件的仿真顯示結(jié)果與文本方式一致。調(diào)試調(diào)試命令有bp、describe、drivers、examine、force、log、checkpoint、restore、show等。例:調(diào)試前述例子的仿真結(jié)果。1,斷點(diǎn)bp
檢查HDL描述文件的基本形式如下:bp{<filename><line_number>}[-appendinst][-cond"<condition_expression>"][-disable][-id<id_number>|-label"<label>"][-inst<region>[-inst<region>...]][<command>…]調(diào)試如,在仿真文件test_bench.v的第18行設(shè)置斷點(diǎn): bptest_bench.v18調(diào)試2,顯示仿真信息describe
調(diào)試命令describe用于顯示VHDL、Verilog、C、SystemC描述的對(duì)象信息和設(shè)計(jì)區(qū)域信息。3,顯示驅(qū)動(dòng)強(qiáng)度drivers
調(diào)試命令drivers顯示指定對(duì)象的驅(qū)動(dòng)強(qiáng)度,可以指定多個(gè)對(duì)象,但要求是合法對(duì)象。語(yǔ)法格式為: drivers<object_name>調(diào)試如,檢查test_bench.v文件中count的驅(qū)動(dòng)強(qiáng)度:driverscount檢查結(jié)果如下:#Driversfor/test_bench/count(7:0):#St1:Net/test_bench/count[7]#St1:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[6]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St1:Net/test_bench/count[5]#St1:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[4]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[3]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[2]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[1]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#St0:Net/test_bench/count[0]#St0:Driver/test_bench/dut/#IMPLICIT-WIRE(count)#6#調(diào)試4,檢查對(duì)象及對(duì)象的值examine例:檢查count的當(dāng)前值: examinecount
文本信息窗口顯示count的當(dāng)前值為8’b10100000:#10100000調(diào)試5,交互激勵(lì)force例:將clk強(qiáng)制指向5ns時(shí)刻(采用二進(jìn)制時(shí)間單位表示): forceclk0101
或者指定clk在0時(shí)刻開始為邏輯1,至100ns為邏輯0,重復(fù)200次,1000ns后結(jié)束:forceclk10,0100-repeat200-cancel1000調(diào)試6,記錄波形文件log例:創(chuàng)建當(dāng)前仿真工程所有對(duì)象的波形文件: log–r/*調(diào)試7,保存仿真狀態(tài)checkpoint
調(diào)試命令checkpoint用于保存仿真狀態(tài),包括modelsim.ini設(shè)置、仿真內(nèi)核狀態(tài)、波形記錄文件、端口列表和波形窗口的設(shè)計(jì)對(duì)象、VHDL或Verilog利用$fopen系統(tǒng)任務(wù)打開的文件指針位置、外部結(jié)構(gòu)、VCD輸出文件等檢查點(diǎn)。checkpoint<filename>調(diào)試8,恢復(fù)仿真狀態(tài)restore
調(diào)試命令restore用于恢復(fù)checkpoint設(shè)置的仿真狀態(tài)。
restore<filename>調(diào)試9,對(duì)象列表輸出show
調(diào)試命令show用于顯示HDL對(duì)象的列表。
語(yǔ)法形式為:
show[-all][<pathname>]例:顯示本節(jié)測(cè)試平臺(tái)test_bench的對(duì)象列表:
showtest_bench#Moduletest_bench{#{Root..}#{Registerclk}#{Registerrst}#{Netcount}#{Moduledut}#}庫(kù)的創(chuàng)建和運(yùn)用例:創(chuàng)建并鏈接一個(gè)8位二進(jìn)制遞增計(jì)數(shù)器的資源庫(kù)resource_library。第一步,創(chuàng)建資源庫(kù)存儲(chǔ)路徑。第二步,改變庫(kù)路徑。庫(kù)的創(chuàng)建和運(yùn)用第三步,添加并創(chuàng)建文件。庫(kù)的創(chuàng)建和運(yùn)用第四步,創(chuàng)建工程。庫(kù)的創(chuàng)建和運(yùn)用庫(kù)的創(chuàng)建和運(yùn)用第五步,利用資源庫(kù)進(jìn)行仿真測(cè)試。庫(kù)的創(chuàng)建和運(yùn)用波形文件分析波形分析主要是從仿真波形的窗口文件中采用光標(biāo)操作、縮放操作、圖形文件輸出,提取設(shè)計(jì)者關(guān)心的有價(jià)值信息,供仿真設(shè)計(jì)、調(diào)試之用。仿真波形窗口介紹包括波形端口名、端口值、波形窗口、時(shí)標(biāo)名、時(shí)標(biāo)值、時(shí)標(biāo)窗口??s放波形縮放模式命令縮放波形ZoomIn(放大)、ZoomOut(縮小)、ZoomFull(顯示全范圍波形)、ZoomCursor(用光標(biāo)縮放)、ZoomRange(按范圍縮放)。時(shí)標(biāo)1)用時(shí)標(biāo)顯示仿真時(shí)間
選擇鼠標(biāo)操作時(shí)標(biāo)的命令是時(shí)標(biāo)2)命名時(shí)標(biāo)時(shí)標(biāo)3)插入時(shí)標(biāo)
插入時(shí)標(biāo)命令時(shí)標(biāo)4)刪除時(shí)標(biāo)
刪除命令時(shí)標(biāo)5)鎖定時(shí)標(biāo)
右鍵選擇LockXX命令輸出波形文件ModelSim可輸出多種文件格式的波形文件:位圖bmp格式文件、vcd格式文件、evcd格式文件。時(shí)序仿真在ModelSim下進(jìn)行時(shí)序仿真,必須首先經(jīng)過綜合工具(如Synopsys或QuartusII等)對(duì)設(shè)計(jì)文件進(jìn)行編譯、綜合,再利用網(wǎng)表寫入器生成綜合網(wǎng)表,導(dǎo)出含有延時(shí)信息的“.sdf”反向標(biāo)注文件,最后啟動(dòng)ModelSim進(jìn)行時(shí)序仿真。時(shí)序仿真在ModelSim下進(jìn)行時(shí)序仿真,必須首先經(jīng)過綜合工具(如Synopsys或QuartusII等)對(duì)設(shè)計(jì)文件進(jìn)行編譯、綜合,再利用網(wǎng)表寫入器生成綜合網(wǎng)表,導(dǎo)出含有延時(shí)信息的“.sdf”反向標(biāo)注文件,最后啟動(dòng)ModelSim進(jìn)行時(shí)序仿真。時(shí)序仿真例:利用ModelSim對(duì)8位通用二進(jìn)制計(jì)數(shù)器進(jìn)行時(shí)序仿真,行為建模源文件bin_counter.v。
modulebin_counter #(parameterword_size=8)(count,max_tick,min_tick,clk,reset,Syn_clr,Load,Mode,d);inputclk,reset;inputSyn_clr,Load,Mode;input[word_size-1:0]d;outputmax_tick,min_tick;output[word_size-1:0]count;reg[word_size-1:0]r_reg,r_next;
assigncount=r_reg; assignmax_tick=(r_reg==2**word_size-1)?1'b1:1'b0; assignmin_tick=(r_reg==0)?1'b1:1'b0;always@(posedgeclk,posedgereset)
if(reset)
r_reg<=0;else
r_reg<=r_next;
always@*begin
if(Syn_clr)
r_next<=0;
elseif(Load)
r_next<=d;
elseif(Mode)
r_next=r_reg+1;
elseif(!Mode)
r_next<=r_reg-1;
else
r_next<=r_reg;
end
endmodule時(shí)序仿真測(cè)試平臺(tái)源文件test_bench.v:
`timescale1ns/1nsmoduletest_bench;regclk,reset;regSyn_clr,Load,Mode;reg[7:0]d;wiremax_tick,min_tick;wire[7:0]count;
bin_counter#3dut(
.count(count),.max_tick(max_tick),.min_tick(min_tick),
.clk(clk),.reset(reset),
.Syn_clr(Syn_clr),.Load(Load),.Mode(Mode),
.d(d));//生成時(shí)鐘信號(hào)clkinitial
begin
#1clk=1'b0;
#1forever#1clk=~clk;end
//生成復(fù)位信號(hào)resetinitialbegin#3reset=1'b1;
#3reset=1'b0;
end;時(shí)序仿真測(cè)試平臺(tái)源文件test_bench.v:
//初始化激勵(lì)信號(hào)、同步清零測(cè)試、預(yù)置加載測(cè)試、遞增/遞減計(jì)數(shù)方式測(cè)試initialbegin//初始化激勵(lì)信號(hào)Syn_clr=1'b0;Load=1'b0;Mode=1'b1;d=8'b0111_1000;@(negedgereset);@(negedgeclk);
//預(yù)置加載測(cè)試Load=1'b1;d=8'b0111_0100;@(negedgeclk);Load=1'b0;repeat(200)@(negedgeclk);
//testsyn_clrSyn_clr=1'b1;@(negedgeclk);Syn_clr=1'b0;
//遞增、遞減測(cè)試Load=1'b1;
Mode=1'b1;repeat(10)@(negedgeclk);
Load=1'b0;
repeat(2)@(negedgeclk);
Load=1'b1;
repeat(2)@(negedgeclk);
Mode=1'b0;
repeat(10)@(negedgeclk);
wait(count==2);
@(negedgeclk);
Mode=1'b1;
//連續(xù)計(jì)數(shù)測(cè)試
@(negedgeclk);
wait(min_tick);
@(negedgeclk);
Mode=1'b0;#80;
Load=1'b0;#80;
$stop;
end
endmodule時(shí)序仿真第一步,用VerilogHDL編寫并保存行為建模源文件counter.v和測(cè)試平臺(tái)源文件test_bench.v。時(shí)序仿真創(chuàng)建QuartusII下創(chuàng)建工程counter,添加counter.v和test_counter.v。時(shí)序仿真第三步,指定ModelSim可執(zhí)行程序的啟動(dòng)位置。時(shí)序仿真第四步,指定時(shí)序仿真所需的網(wǎng)表文件和測(cè)試平臺(tái)文件設(shè)置。時(shí)序仿真testbench設(shè)置項(xiàng)時(shí)序仿真指定test_bench文件位置并添加之。時(shí)序仿真第五步,編譯所有工程文件。選擇Processing、StartCompilation命令,或點(diǎn)擊
,啟動(dòng)編譯器。時(shí)序仿真第六步,點(diǎn)擊Tools、RunSimulationTool的子菜單RTLSimulation,啟動(dòng)RTL仿真。例化存儲(chǔ)器ModelSim支持寄存器型、網(wǎng)絡(luò)型、整型數(shù)組的存儲(chǔ)器例化。例:例化隨機(jī)存儲(chǔ)器模塊。
本例引用ModelSim安裝目錄下的例程sp_syn_ram.v、dp_syn_ram.v、ram_tb.v為例說明存儲(chǔ)器例化過程。例化存儲(chǔ)器例化隨機(jī)存儲(chǔ)器模塊的存儲(chǔ)空間。
數(shù)據(jù)總線寬度地址總線寬度尋址范圍例化模塊spram181212'h000~12'hFFF\sp_syn_ram-rtlspram2171111'h000~11'h7FFspram3321616'h0000~16'hFFFFspram41688'h00~8'hFF\sp_syn_ram-3Ddpram1844'h0~4'hF\dp_syn_ram-rtl例化存儲(chǔ)器\sp_syn_ram-rtl模塊結(jié)構(gòu)。例化存儲(chǔ)器`timescale1ns/1nsmodule\sp_syn_ram-rtl#(parameterdata_width=8,parameteraddr_width=3)(input[addr_width-1:0]addr,input[data_width-1:0]data_in,inputinclk,inputoutclk,inputwe,outputreg[data_width-1:0]data_out);
reg[data_width-1:0]mem[0:(2**addr_width)-1];
always@(posedgeinclk)begin:write_procif(we==1)//寫時(shí)鐘上升沿,若寫控制有效,將數(shù)據(jù)data_in寫入addr地址單元mem[addr]<=data_in;end
always@(posedgeoutclk)begin:read_procdata_out=mem[addr];//讀時(shí)鐘上升沿,將addr地址單元的數(shù)據(jù)發(fā)送//data_out總線end
endmodule例化存儲(chǔ)器\sp_syn_ram-3D模塊結(jié)構(gòu)。例化存儲(chǔ)器`timescale1ns/1nsmodule\sp_syn_ram-3D#(parameterdata_width=8,parameteraddr_width=3)(input[addr_width-1:0]addr,input[data_width-1:0]data_in,inputinclk,inputoutclk,inputwe,outputreg[data_width-1:0]data_out);
reg[data_width-1:0]mem[0:3][0:(2**(addr_width-2))-1];
always@(posedgeinclk)begin:write_procif(we==1)beginmem[addr[addr_width-1:addr_width-2]][addr[addr_width-3:0]]<=data_in;endend
always@(posedgeoutclk)begin:read_procdata_out=mem[addr[addr_width-1:addr_width-2]][addr[addr_width-3:0]];end
endmodule例化存儲(chǔ)器\dp_syn_ram-rtl模塊結(jié)構(gòu)。例化存儲(chǔ)器`timescale1ns/1nsmodule\dp_syn_ram-rtl#(parameterdata_width=8,parameteraddr_width=3)(input[addr_width-1:0]inaddr,input[addr_width-1:0]outaddr,input[data_width-1:0]data_in,inputinclk,inputoutclk,inputwe,outputreg[data_width-1:0]data_out);
reg[data_width-1:0]mem[0:(2**addr_width)-1];
always@(posedgeinclk)begin:write_procif(we==1)beginmem[inaddr]<=data_in;endend
always@(posedgeoutclk)begin:read_procdata_out=mem[outaddr];end
endmodule例化存儲(chǔ)器測(cè)試平臺(tái)文件如下:`defineclk_pd100`timescale1ns/1nsmoduleram_tb();regwe;regclk;reg[19:0]addr;reg[3:0]inaddr;reg[3:0]outaddr;reg[31:0]data_in;
wire[7:0]data_sp1;wire[16:0]data_sp2;wire[31:0]data_sp3;wire[15:0]data_sp4;wire[7:0]data_dp1;
\sp_syn_ram-rtl#(.data_width(8),.addr_width(12))spram1
(.inclk(clk),.outclk(clk),.we(we),.addr(addr[11:0]),.data_in(data_in[7:0]),.data_out(data_sp1));
\sp_syn_ram-rtl#(.data_width(17),.addr_width(11))spram2(.inclk(clk),.outclk(clk),.we(we),.addr(addr[10:0]),.data_in(data_in[16:0]),.data_out(data_sp2));\sp_syn_ram-rtl#(.data_width(32),.addr_width(16))spram3(.inclk(clk),.outclk(clk),.we(we),.addr(addr[15:0]),.data_in(data_in[31:0]),.data_out(data_sp3));
\sp_syn_ram-3D#(.data_width(16),.addr_width(8))spram4(.inclk(clk),.outclk(clk),.we(we),.addr(addr[7:0]),.data_in(data_in[15:0]),.data_out(data_sp4));
\dp_syn_ram-rtl#(.data_width(8),.addr_width(4))dpram1(.inclk(clk),.outclk(clk),.we(we),.inaddr(inaddr),.outaddr(outaddr),.data_in(data_in[7:0]),.data_out(data_dp1));
initialbegin:clock_driverclk=0;forever#(`clk_pd/2)clk=~clk;end
integeri;
例化存儲(chǔ)器initialbegin:ctrl_simfor(i=0;i<1024;i=i+1)begin//讀寫操作1024次
we<=1;//寫數(shù)據(jù)操作data_in<=16'd9000+i;//測(cè)試I,寫入第一組數(shù)16'd9000~16'd10023addr<=i;inaddr<=i;outaddr<=i;@(negedgeclk);@(negedgeclk);
data_in<=16'd7+i;//測(cè)試II,寫入第二組數(shù)據(jù)16'd7~16'd1030addr<=1+i;inaddr<=1+i;@(negedgeclk);@(negedgeclk);
data_in<=16'd3;//測(cè)試III,寫入第三組數(shù)據(jù)16'd3~16'd1026addr<=2+i;inaddr<=2+i;@(negedgeclk);@(negedgeclk);data_in<=16'd30330;//測(cè)試IV,寫入第四組數(shù)據(jù)16'd30330~16'd31353addr<=3+i;inaddr<=3+i;@(negedgeclk);@(negedgeclk);
we<=0;//讀數(shù)據(jù)操作addr<=i;outaddr<=i;@(negedgeclk);@(negedgeclk);
addr<=1+i;outaddr<=1+i;@(negedgeclk);@(negedgeclk);
addr<=2+i;outaddr<=2+i;@(negedgeclk);@(negedgeclk);
addr<=3+i;outaddr<=3+i;@(negedgeclk);@(negedgeclk);end
$display("###EndofSimulation!");$stop;endendmodule
例化存儲(chǔ)器選擇work.ram_tb開始仿真例化存儲(chǔ)器在Workspace的Memories欄,可看到所有存儲(chǔ)器的存儲(chǔ)容量、數(shù)據(jù)寬度、范圍。例化存儲(chǔ)器觀察存儲(chǔ)器例化的地址和數(shù)據(jù)例化存儲(chǔ)器改變地址排列方式。例化存儲(chǔ)器更改存儲(chǔ)器的顯示屬性。例化存儲(chǔ)器選擇十進(jìn)制地址、二進(jìn)制數(shù)據(jù)顯示。例化存儲(chǔ)器輸出存儲(chǔ)器文件。用Profiler進(jìn)行性能分析profiler是一種性能分析交互式圖形接口工具,很多EDA設(shè)計(jì)工具都嵌入profiler引擎,以幫助設(shè)計(jì)者掌握存儲(chǔ)器和CPU的資源使用情況,從而快速地定位、查找設(shè)計(jì)過程中的問題所在,提高設(shè)計(jì)效率和系統(tǒng)的可靠性。用Profiler進(jìn)行性能分析例:說明利用ModelSim的profiler引擎分析通用先進(jìn)先出(FIFO)存儲(chǔ)器及其測(cè)試平臺(tái)的性能。第一步,將FIFO模塊Generic_FIFO.v及測(cè)試平臺(tái)test_bench.v文件復(fù)制到工程文件夾下,建立工程、加載文件、編譯文件、啟動(dòng)仿真。用Profiler進(jìn)行性能分析Generic_FIFO.vmoduleGeneric_FIFO
#(parameterMSB=7,LSB=0,DEPTH=4)
//8位FIFO存儲(chǔ)器,存儲(chǔ)深度為24字節(jié)(input[MSB:LSB]in,//數(shù)據(jù)輸入口inputclk,read,write,reset,//控制信號(hào)outputempty,full,//存儲(chǔ)器狀態(tài)指示output[MSB:LSB]out//數(shù)據(jù)輸出口);reg[MSB:LSB]array_reg[2**DEPTH-1:0];//存儲(chǔ)深度為24字節(jié)
reg[DEPTH-1:0]wr_ptr_reg,wr_ptr_next,wr_ptr_succ;//寫數(shù)據(jù)尋址變量reg[DEPTH-1:0]rd_ptr_reg,rd_ptr_next,rd_ptr_succ;
//讀數(shù)據(jù)尋址變量regfull_reg,empty_reg,full_next,empty_next;
//存儲(chǔ)器狀態(tài)指示變量wirewrite_enbale;//寫使能控制信號(hào)
always@(posedgeclk)if(write_enbale)array_reg[wr_ptr_reg]<=in;
assignout=array_reg[rd_ptr_reg];assignwrite_enbale=write&~full_reg;
always@(posedgeclk,posedgereset)if(reset)//復(fù)位存儲(chǔ)器beginwr_ptr_reg<=0;rd_ptr_reg<=0;
full_reg<=1'b0;empty_reg<=1'b1;endelse
//存儲(chǔ)器讀寫操作及指示信號(hào)beginwr_ptr_reg<=wr_ptr_next;rd_ptr_reg<=rd_ptr_next;full_reg<=full_next;empty_reg<=empty_next;end
用Profiler進(jìn)行性能分析Generic_FIFO.valways@*
beginwr_ptr_succ=wr_ptr_reg+1;rd_ptr_succ=rd_ptr_reg+1;wr_ptr_next=wr_ptr_reg;rd_ptr_next=rd_ptr_reg;full_next=full_reg;empty_next=empty_reg;case({write,read})2'b01://讀數(shù)據(jù)if(~empty_reg)beginrd_ptr_next=rd_ptr_succ;full_next=1'b0;if(rd_ptr_succ==wr_ptr_reg)empty_next=1'b1;end2'b10://寫數(shù)據(jù)
if(~full_reg)beginwr_ptr_next=wr_ptr_succ;empty_next=1'b0;if(wr_ptr_succ==rd_ptr_reg)full_next=1'b1;end2'b11://讀、寫數(shù)據(jù)beginwr_ptr_next=wr_ptr_succ;rd_ptr_next=rd_ptr_succ;endendcaseend
assignfull=full_reg;assignempty=empty_reg;
endmodule用Profiler進(jìn)行性能分析test_bench.v`timescale1ns/10ps
moduletest_bench;
reg[7:0]in;regclk,read,write,reset;
wireempty,full;
wire[7:0]out;
Generic_FIFOdut(//例化FIFO模塊.in(in),.clk(clk),.read(read),.write(write),.reset(reset),.empty(empty),.full(full),.out(out));
initial//輸出時(shí)鐘激勵(lì)信號(hào)
begin
clk=1'b0;
#5forever#5clk=~clk;
end
initial//輸出復(fù)位信號(hào)beginreset=1'b0;
@(negedgeclk);
reset=1'b1;@(negedgeclk);
reset=1'b0;endinitialbegin
{read,write}=2'b01;//寫操作測(cè)試@(negedgeclk);
repeat(100)@(negedgeclk);
{read,write}=2'b10;//讀操作測(cè)試
@(negedgeclk);
repeat(100)@(negedgeclk);
{read,write}=2'b11;//讀寫測(cè)試
@(negedgeclk);
repeat(100)@(negedgeclk);
endinitial
#20forever#20in=$random;//輸入隨機(jī)數(shù)always@(out)$display($time,,"out=%h",out);//輸出測(cè)試信息endmodule用Profiler進(jìn)行性能分析例:說明利用ModelSim的profiler引擎分析通用先進(jìn)先出(FIFO)存儲(chǔ)器及其測(cè)試平臺(tái)的性能。第一步,將FIFO模塊Generic_FIFO.v及測(cè)試平臺(tái)test_bench.v文件復(fù)制到工程文件夾下,建立工程、加載文件、編譯文件、啟動(dòng)仿真。用Profiler進(jìn)行性能分析第二步,仿真運(yùn)行1ms,觀察分析結(jié)果。用Profiler進(jìn)行性能分析Profile顯示窗口用Profiler進(jìn)行性能分析第三步,過濾與保存分析結(jié)果。
在Profiler工具條輸入過濾條件:用Profiler進(jìn)行性能分析符合篩選條件的分析結(jié)果。
用Profiler進(jìn)行性能分析輸出并保存分析結(jié)果用Profiler進(jìn)行性能分析profile.out分析結(jié)果的內(nèi)容:ModelTechnologyModelSimSE-64vsim10.0eSimulator2012.03Mar162012Platform:win64RankedprofilegeneratedSunMay1201:29:252013Numberofsamples:422Numberofsamplesinusercode:405(96%)Cutoffpercentage:2%Keepunknown:0Collapsesections:0Collectcallstacks:0Memorytrimheight:0Keepfree:1Profiledata:vsimk(ModelSimkernel)
NameUnder(raw)In(raw)
Under(%)
In(%)----
------------------------------ZwWaitForMultipleObjects171
17140.540.5ClientThreadSetup434310.210.2NtWriteFile38389.09.0F:/EDA/PUB/test_bench.v:463901892.4
4.3PeekMessageW
2331655.23.8IsDialogMessageW16163.83.8ZwWaitForSingleObject15153.63.6ZwCreateFile992.1
2.1GetCurrentThread
173
241.00.5WriteFile
4029.50.5用Profiler進(jìn)行性能分析TclpCreateProcess3027.10.5PeekMessageA
1824.30.5WaitForMultipleObjectsEx174141.20.2fdopen44110.40.2WaitForSingleObjectEx1613.80.2ftell1112.60.2Tcl_DoOneEvent275065.20.0Tcl_WaitForEvent240056.90.0MsgWaitForMultipleObjects217051.40.0MsgWaitForMultipleObjectsEx217051.40.0fflush45010.70.0fflush_nolock
44010.40.0write
43010.20.0lseeki644109.70.0GetWindowLongPtrA1603.80.0SendMessageA1603.80.0Tcl_MakeTcpClientChannel1503.60.0fread1102.60.0freopen1102.60.0sopen_s1102.60.0Tcl_CreateChannel1002.40.0Tcl_Flush1002.40.0Tcl_ServiceEvent1002.40.0flsbuf1002.40.0ftell_nolock1002.40.0CreateFileA902.10.0用Profiler進(jìn)行性能分析CreateFileW902.10.0commit902.10.0isatty902.1
0.0lseek902.10.0open902.10.0代碼覆蓋率ModelSim代碼覆蓋率功能Codecoverage報(bào)告statement(語(yǔ)句)、branch(分支)、condition(條件)、
expression(表達(dá)式)、toggle(信號(hào)跳變)、FSM(有限狀態(tài)機(jī))等多種覆蓋率情況,幫助進(jìn)一步提高了測(cè)試的完整性。代碼覆蓋率例:自動(dòng)飲料售貨機(jī)的代碼覆蓋測(cè)試。設(shè)自動(dòng)飲料售貨機(jī)只提供一種飲料的自動(dòng)售貨,且未設(shè)找補(bǔ)和取消功能。該飲料的價(jià)格為3元/瓶,投入1元硬幣
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年監(jiān)理分公司合作協(xié)議書:綠色建筑監(jiān)理及評(píng)估服務(wù)合同6篇
- 二零二五年度金融科技產(chǎn)品采購(gòu)合同2篇
- 二零二五年度2025版兒童撫養(yǎng)權(quán)界定離婚合同范本4篇
- 2025年度鋁合金材料進(jìn)出口代理采購(gòu)合同4篇
- 2025年度韻達(dá)快遞業(yè)務(wù)承包合作協(xié)議范本3篇
- 2025年度陸運(yùn)運(yùn)輸合同爭(zhēng)議解決范本4篇
- 二零二四前期物業(yè)服務(wù)協(xié)議與社區(qū)便民服務(wù)合同3篇
- 二零二五版廣告宣傳代理合同補(bǔ)充協(xié)議3篇
- 2025年度螺旋鋼管節(jié)能減排與綠色制造合同4篇
- 2025年新型立體停車場(chǎng)建設(shè)與維護(hù)合同3篇
- 2025年生產(chǎn)主管年度工作計(jì)劃
- 2025年急診科護(hù)理工作計(jì)劃
- 高中家長(zhǎng)會(huì) 高二寒假線上家長(zhǎng)會(huì)課件
- 2024-2025學(xué)年山東省聊城市高一上學(xué)期期末數(shù)學(xué)教學(xué)質(zhì)量檢測(cè)試題(附解析)
- 違規(guī)行為與處罰管理制度
- 個(gè)人教師述職報(bào)告錦集10篇
- 四川省等八省2025年普通高中學(xué)業(yè)水平選擇性考試適應(yīng)性演練歷史試題(含答案)
- 《內(nèi)部培訓(xùn)師培訓(xùn)》課件
- 《雷達(dá)原理》課件-3.3.3教學(xué)課件:相控陣?yán)走_(dá)
- 西方史學(xué)史課件3教學(xué)
- 2024年中國(guó)醫(yī)藥研發(fā)藍(lán)皮書
評(píng)論
0/150
提交評(píng)論