




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第6章章 Verilog仿真與驗證仿真與驗證6.1 系統(tǒng)任務與系統(tǒng)函數(shù)系統(tǒng)任務與系統(tǒng)函數(shù)6.2 系統(tǒng)預定義指令系統(tǒng)預定義指令6.3用戶自定義元件(用戶自定義元件(UDP)6.4測試平臺測試平臺 6.5 ModelSim仿真實例仿真實例 6.6數(shù)字電路的仿真數(shù)字電路的仿真第第6 6章章 VerilogVerilog仿真與驗證仿真與驗證6.1 系統(tǒng)任務與系統(tǒng)函數(shù)系統(tǒng)任務與系統(tǒng)函數(shù) 系統(tǒng)任務和系統(tǒng)函數(shù)一般以符號系統(tǒng)任務和系統(tǒng)函數(shù)一般以符號“$”開頭。系統(tǒng)任務可開頭。系統(tǒng)任務可以返回以返回0個或多個值,而系統(tǒng)函數(shù)除只能返回一個值外,與個或多個值,而系統(tǒng)函數(shù)除只能返回一個值外,與任務類似。例如:任務類
2、似。例如:$monitor,$readmemh等。等。 使用不同的使用不同的Verilog仿真工具(如:仿真工具(如:VCS、Verilog-XL、ModelSim等)進行仿真時,這些系統(tǒng)任務和系統(tǒng)函數(shù)在使等)進行仿真時,這些系統(tǒng)任務和系統(tǒng)函數(shù)在使用方法上可能存在差異,應根據(jù)使用手冊來使用。用方法上可能存在差異,應根據(jù)使用手冊來使用。 一般在一般在intial或或always過程塊中,調用系統(tǒng)任務和系統(tǒng)過程塊中,調用系統(tǒng)任務和系統(tǒng)函數(shù)。函數(shù)。 用戶可以通過編程語言接口(用戶可以通過編程語言接口(PLI)將自己定義的系統(tǒng))將自己定義的系統(tǒng)任務和系統(tǒng)函數(shù)加到語言中,以進行仿真和調試。任務和系統(tǒng)函數(shù)
3、加到語言中,以進行仿真和調試。系統(tǒng)任務和系統(tǒng)函數(shù)只能用于仿真,在系統(tǒng)綜合過程中被忽略。系統(tǒng)任務和系統(tǒng)函數(shù)只能用于仿真,在系統(tǒng)綜合過程中被忽略。系統(tǒng)任務與函數(shù)分類系統(tǒng)任務與函數(shù)分類o 顯示任務顯示任務o 文件輸入與輸出任務文件輸入與輸出任務o 仿真控制任務仿真控制任務o 時間標度任務時間標度任務o PLA建模任務建模任務o 隨機建模任務隨機建模任務o 變換函數(shù)變換函數(shù)o 概率分布函數(shù)概率分布函數(shù)o 字符格式化字符格式化o 命令行參變量命令行參變量$display和和$write是兩個是兩個顯示與寫系統(tǒng)任務顯示與寫系統(tǒng)任務,兩者的功能相同,都用于顯示模擬結果,其區(qū)別兩者的功能相同,都用于顯示模擬結
4、果,其區(qū)別是是$display在輸出結束后能自動換行,而在輸出結束后能自動換行,而$write不能。不能。$display和和$write的使用格式為:的使用格式為:$display(“格式控制符格式控制符”,輸出變量名列表);,輸出變量名列表);$write(“格式控制符格式控制符”,輸出變量名列表);,輸出變量名列表);1系統(tǒng)任務系統(tǒng)任務、$display與與$write格式控制格式控制符符說明說明%h或或%H以以16進制形式顯示進制形式顯示%d或或%D以以10進制形式顯示進制形式顯示%o或或%O以以8進制形式顯示進制形式顯示%b或或%B以以2進制形式顯示進制形式顯示%c或或%C以以ASC
5、II字符形式顯示字符形式顯示%v或或%V顯示顯示net型數(shù)據(jù)的驅動強型數(shù)據(jù)的驅動強度度%m或或%M顯示層次名顯示層次名%s或或%S以字符串形式輸出以字符串形式輸出%t或或%T以當前的時間格式顯示以當前的時間格式顯示轉義字符轉義字符說明說明 n換行換行 tTAB鍵鍵符號符號“符號符號“ ddd 八進制數(shù)八進制數(shù)ddd對應的對應的ASCII字符字符%符號符號%格式控制符格式控制符轉義字符轉義字符$displayb $displayh $displayo $writeb $writeh $writeo未指定輸出數(shù)據(jù)格式,可采用如下未指定輸出數(shù)據(jù)格式,可采用如下默認任務顯示形式默認任務顯示形式:仿真調
6、試程序module dis_1();integer wait_timer;initial begin wait_timer=1; $display(after first assignment, wait_temer has value %d,wait_timer); wait_timer=2; $display(after first assignment, wait_temer has value %d,wait_timer); endendmodule Modelsim仿真下的輸出:仿真下的輸出:$monitor、$strobe與與$display、$write一樣一樣也是屬于輸出控制類
7、的也是屬于輸出控制類的顯示系統(tǒng)任務顯示系統(tǒng)任務,$monitor與與$strobe都提供都提供在指定時刻在指定時刻監(jiān)控和監(jiān)控和輸出參數(shù)列表中字符或變量的值的功能輸出參數(shù)列表中字符或變量的值的功能;而;而$display、$write任務在執(zhí)行到該語句時執(zhí)行。任務在執(zhí)行到該語句時執(zhí)行。其使用格式為:其使用格式為:$monitor(“格式控制符格式控制符”,輸出變量名列表,輸出變量名列表);$strobe(“格式控制符格式控制符”,輸出變量名列表,輸出變量名列表);這里的格式控制符、輸出變量名列表與這里的格式控制符、輸出變量名列表與$display和和$write中定義的完全相同。中定義的完全相同
8、。、$monitor與與$strobe系統(tǒng)任務系統(tǒng)任務$finish與與$stop用于對仿真過程進行控制,分用于對仿真過程進行控制,分別表示別表示結束仿真和中斷仿真結束仿真和中斷仿真。$finish與與$stop 的使用格式如下:的使用格式如下:$stop;$stop(n);$finish;$finish(n);n是是$finish和和$stop的參數(shù),的參數(shù),n 可以是可以是0、1、2等值,分等值,分別表示如下含義。別表示如下含義。0:不輸出任何信息;:不輸出任何信息;1:給出仿真時間和位置;:給出仿真時間和位置;2:給出仿真時間和位置,還有其他一些運行統(tǒng)計數(shù)據(jù)。:給出仿真時間和位置,還有其
9、他一些運行統(tǒng)計數(shù)據(jù)。$finish與與$stopmodule full_adder(cout,si,ai,bi,cin);output si,cout;input ai,bi,cin;assign cout,si=ai+bi+cin;endmodule timescale 1ns/1psmodule full_adder_tb; reg2:0in; wire sum, cout; integer i,j; full_adder FA(.cout(cout),.si(sum),.ai(in2),.bi(in1),.cin(in0); always #10 in=in+1; initial beg
10、in in=0; $display( time ai bi cin cout sum); $monitor($time,%b+%b+%b=%b,%b,in2,in1,in0,cout,sum); #160 $finish;endendmodule采用層次電路設計的全加器仿真顯示測試程序采用層次電路設計的全加器仿真顯示測試程序仿真結果仿真結果 time ai bi cin cout sum# 0 0 + 0 + 0=0, 0# 10 0 + 0 + 1=0, 1# 20 0 + 1+ 0=0, 1# 30 0 + 1+ 1=1, 0# 40 1 + 0+ 0=0, 1# 50 1 + 0+ 1=
11、1, 0# 60 1 + 1+ 0=1, 0# 70 1 + 1+ 1=1, 1# 80 0 + 0+ 0=0, 0# 90 0 + 0+ 1=0, 1#100 0 + 1+ 0=0, 1#110 0 + 1+ 1=1, 0#120 1 + 0+ 0=0, 1#130 1 + 0+ 1=1, 0#140 1 + 1+ 0=1, 0#150 1 + 1+ 1=1, 1監(jiān)控輸出任務$monitor是只要滿足輸出數(shù)值發(fā)生變化就有輸出顯示。表中當在150ns160ns期間沒有數(shù)值變化,所以沒有顯示160ns的輸出結果。$readmemh與與$readmemb是屬于文件是屬于文件讀寫控制的系統(tǒng)讀寫控制的
12、系統(tǒng)任務任務,其作用都是從外部文件中讀取數(shù)據(jù)并放入存儲器中。,其作用都是從外部文件中讀取數(shù)據(jù)并放入存儲器中。兩者的區(qū)別在于讀取數(shù)據(jù)的格式不同,兩者的區(qū)別在于讀取數(shù)據(jù)的格式不同,$readmemh為為讀讀取十六進制數(shù)據(jù)取十六進制數(shù)據(jù),而,而$readmemb為為讀取二進制數(shù)據(jù)讀取二進制數(shù)據(jù)。$readmemh與與$readmemb的使用格式為:的使用格式為:$readmemh(數(shù)據(jù)文件名數(shù)據(jù)文件名,存儲器名,起始地址,結,存儲器名,起始地址,結束地址);束地址);$readmemb(數(shù)據(jù)文件名數(shù)據(jù)文件名,存儲器名,起始地址,結,存儲器名,起始地址,結束地址);束地址);其中,起始地址和結束地址均
13、可以缺省,如果缺省起始地其中,起始地址和結束地址均可以缺省,如果缺省起始地址,表示從存儲器的首地址開始存儲;如果缺省結束地址,址,表示從存儲器的首地址開始存儲;如果缺省結束地址,表示一直存儲到存儲器的結束地址。表示一直存儲到存儲器的結束地址。$readmemh與與$readmemb還有其它系統(tǒng)任務和函數(shù)用于讀取文件中數(shù)據(jù):$fread : 從文件中讀取二進制數(shù)據(jù)到存儲器中。從文件中讀取二進制數(shù)據(jù)到存儲器中。$fgetc :從文件中每次讀取一個字符。從文件中每次讀取一個字符。$fgets :從文件中每次讀取一行。從文件中每次讀取一行。$ungetc :把一個字符插入文件中。把一個字符插入文件中。
14、$frewind :重新回到文件的開始處。重新回到文件的開始處。$fseek :移動到偏移量指定的位置。移動到偏移量指定的位置。$ftell :返回以文件開始處為基址的偏移量。返回以文件開始處為基址的偏移量。$fscanf :從文件中讀取格式化數(shù)據(jù)。從文件中讀取格式化數(shù)據(jù)。$ferror :在執(zhí)行完一個讀取任務后,幫助判斷在執(zhí)行完一個讀取任務后,幫助判斷出錯誤的原因。出錯誤的原因。$time、$realtime是屬于顯示仿真時間標度的系是屬于顯示仿真時間標度的系統(tǒng)函數(shù)。這兩個函數(shù)被調用時,都返回當前時刻統(tǒng)函數(shù)。這兩個函數(shù)被調用時,都返回當前時刻距離仿真開始時刻的時間量值,所不同的是,距離仿真開
15、始時刻的時間量值,所不同的是,$time 函數(shù)以函數(shù)以64位整數(shù)值的形式返回模擬時間,位整數(shù)值的形式返回模擬時間,$realtime 函數(shù)則以實數(shù)型數(shù)據(jù)返回模擬時間。函數(shù)則以實數(shù)型數(shù)據(jù)返回模擬時間。 2、系統(tǒng)函數(shù)、系統(tǒng)函數(shù)如上加法器仿真調試程序。如上加法器仿真調試程序。、$time與與$realtime$random是產(chǎn)生隨機數(shù)的系統(tǒng)函數(shù),每次調用該函數(shù)將是產(chǎn)生隨機數(shù)的系統(tǒng)函數(shù),每次調用該函數(shù)將返回一個返回一個32位的隨機數(shù),該隨機數(shù)是一個帶符號的整數(shù)。位的隨機數(shù),該隨機數(shù)是一個帶符號的整數(shù)。、$random、$fopen和和$fclose$fopen 和和$fclose用于打開和關閉一個文件
16、系統(tǒng)函數(shù),用于打開和關閉一個文件系統(tǒng)函數(shù),完成后返回一個與文件相關的整數(shù)指針。完成后返回一個與文件相關的整數(shù)指針。6.2編譯指令的使用編譯指令:1、宏定義語句、宏定義語句define和宏取消語句和宏取消語句undef如在狀態(tài)機中定義狀態(tài):如在狀態(tài)機中定義狀態(tài):define S0 2b00; /定義狀態(tài)編碼定義狀態(tài)編碼define S1 2b01;一旦該指令被編譯器通過,則尤其規(guī)定的宏定義在整個編譯過程期間都保一旦該指令被編譯器通過,則尤其規(guī)定的宏定義在整個編譯過程期間都保持有效。并可在多個文件中有效,直到遇到取消宏定義指令。持有效。并可在多個文件中有效,直到遇到取消宏定義指令。undef 宏名
17、宏名 取消之前定義的宏定義。取消之前定義的宏定義。2、編譯時包含其它文件指令include “././文件名文件名”其作用是將指定的文件一同與當前文件進行編譯,指定文件可以其作用是將指定的文件一同與當前文件進行編譯,指定文件可以是相對路徑和絕對路徑。是相對路徑和絕對路徑。3、仿真延時模型的表示、仿真延時模型的表示 延時包括門延時、延時包括門延時、assign賦值延時和連線延時等。賦值延時和連線延時等。u 門延時門延時是從門輸入端發(fā)生變化到輸出端發(fā)生變化的延是從門輸入端發(fā)生變化到輸出端發(fā)生變化的延遲時間;遲時間;u assign賦值延時賦值延時指等號右端某個值發(fā)生變化到等號左指等號右端某個值發(fā)生
18、變化到等號左端發(fā)生相應變化的延遲時間;端發(fā)生相應變化的延遲時間;u 連線延時則體現(xiàn)了信號在連線上的連線延時則體現(xiàn)了信號在連線上的傳輸延時傳輸延時。u 如果沒有定義時延值,缺省時延為如果沒有定義時延值,缺省時延為0。u延時語句用于仿真測試中,它不能綜合生成硬件,主要延時語句用于仿真測試中,它不能綜合生成硬件,主要用于仿真真實數(shù)字電路運行時的電路延時情況和人為設計用于仿真真實數(shù)字電路運行時的電路延時情況和人為設計的波形輸出。的波形輸出。、時間標尺預定義語句、時間標尺預定義語句timescale timescale語句用于定義模塊中指令運行的時間單位和時間語句用于定義模塊中指令運行的時間單位和時間精
19、度,其使用格式如下:精度,其使用格式如下:timescale /timescale /其中用來表示時間度量的符號有:其中用來表示時間度量的符號有:s、ms、us、ns、ps和和fs,時間單位必須取整數(shù),指令運行時間以時間單位為基準,多時間單位必須取整數(shù),指令運行時間以時間單位為基準,多少以時間精度進行取舍。少以時間精度進行取舍。例如:例如:timescale 1ns/100ps上面的語句表示時延單位為上面的語句表示時延單位為1ns,時延精度為,時延精度為100ps(即精確(即精確到到0.1ns)。)。timescale編譯器指令在模塊說明外部出現(xiàn),編譯器指令在模塊說明外部出現(xiàn),并且影響后面所有
20、的時延值,直到遇到另一個并且影響后面所有的時延值,直到遇到另一個timescale指指令或令或resetall指令指令 。當一個文件含有多個模塊,且每個模塊。當一個文件含有多個模塊,且每個模塊都有各自都有各自timescale指令時,以精度最小的為基準時間精度。指令時,以精度最小的為基準時間精度。、延時的表示與延時說明塊、延時的表示與延時說明塊 延時的表示方法有下面幾種:延時的表示方法有下面幾種:# delaytime# (d1,d2)# (d1,d2,d3)# delaytime表示延遲時間為表示延遲時間為delaytime,d1表示上升延表示上升延遲,遲,d2表示下降延遲,表示下降延遲,d
21、3則表示轉換到高阻態(tài)則表示轉換到高阻態(tài)z的延遲,的延遲,這些延遲的具體時間由時間定義語句這些延遲的具體時間由時間定義語句timescale確定。確定。如:語句間延時:如:語句間延時:sum=(ab)cin #4 t1=a&cin 如:語句內延時:如:語句內延時:sum=#3(ab)cin如果沒有定義時延值,缺省時延為如果沒有定義時延值,缺省時延為0?!纠?.2】 激勵波形的描述timescale 1ns/1nsmodule test1;reg a,b,c;initialbegin a=0;b=1;c=0; #100 c=1; #100 a=1;b=0; #100 a=0; #100 c
22、=0;#100 $stop;endinitial $monitor($time,a=%d b=%d c=%d,a,b,c); /顯示endmodule激勵波形仿真激勵波形仿真測試程序ModelSim仿真結果仿真結果Verilog可對模塊中某一指定的路徑進行延遲定義,這一可對模塊中某一指定的路徑進行延遲定義,這一路徑連接模塊的輸入端口(或路徑連接模塊的輸入端口(或inout端口)與輸出端口端口)與輸出端口(或(或inout端口),利用延遲定義塊在一個獨立的塊結構端口),利用延遲定義塊在一個獨立的塊結構中定義模塊的延時。在延遲定義塊中要描述模塊中的不中定義模塊的延時。在延遲定義塊中要描述模塊中的不
23、同路徑并給這些路徑賦值。同路徑并給這些路徑賦值。延遲定義塊的內容延遲定義塊的內容應放在關鍵字應放在關鍵字specify與與endspecify之間,且必須放在一個模塊中,還可以使用之間,且必須放在一個模塊中,還可以使用specparam關鍵字定義參數(shù)。關鍵字定義參數(shù)。 、延時說明塊(、延時說明塊(specify塊)塊)6.3 用戶自定義元件用戶自定義元件(UDP) 利用利用UDP(User Defined Primitives)用戶可以自己用戶可以自己定義基本邏輯元件的功能,用戶可以象調用基本門元件一樣定義基本邏輯元件的功能,用戶可以象調用基本門元件一樣來調用這些自己定義的元件。來調用這些自己
24、定義的元件。 UDP關鍵詞為關鍵詞為primitive和和endprimitive。與一般的模。與一般的模塊相比,塊相比,UDP模塊具有下面一些特點:模塊具有下面一些特點: UDP的的輸出端口只能有一個輸出端口只能有一個,且必須位于端口列表的,且必須位于端口列表的第一項。只有輸出端口能被定義為第一項。只有輸出端口能被定義為reg類型。類型。 UDP的輸入端口可有多個,一般時序電路的輸入端口可有多個,一般時序電路UDP的輸入的輸入端口可多至端口可多至9個,組合電路個,組合電路UDP的輸入端口可多至的輸入端口可多至10個。個。 所有的所有的端口變量必須是端口變量必須是1位標量位標量。 在在tabl
25、e表項中,只能出現(xiàn)表項中,只能出現(xiàn)0、1、x三種狀態(tài)三種狀態(tài),不能出,不能出現(xiàn)現(xiàn)z狀態(tài)。狀態(tài)。primitive 元件名(輸出端口,輸入端口元件名(輸出端口,輸入端口1,輸入端口,輸入端口2,)output 輸出端口名;輸出端口名;input 輸入端口輸入端口1,輸入端口,輸入端口2,;reg輸出端口名;輸出端口名;initial begin 輸出端口或內部寄存器賦初值(輸出端口或內部寄存器賦初值(0,1或或x);); endtable /輸入輸入1 輸入輸入2 :輸出:輸出 真值列表真值列表endtableendprimitive定義定義UDP的語法的語法1、組合電路、組合電路UDP元件元件
26、 primitive carry_udp(cout,cin,a,b);input cin,a,b; output cout;table/cin a b : cout /真值表真值表 0 0 0 : 0; 0 1 0 : 0; 0 0 1 : 0; 0 1 1 : 1; 1 0 0 : 0; 1 0 1 : 1; 1 1 0 : 1; 1 1 1 : 1;endtableendprimitivep 【例例6.3】 1位全加器位全加器進位進位輸出輸出UDP元件元件1、組合電路、組合電路UDP元件元件 primitive carry_udpx(cout,cin,a,b);input cin,a,b;
27、output cout;table/cin a b : cout /真值表真值表 0 0 0 : 0; 0 1 0 : 0; 0 0 1 : 0; 0 1 1 : 1; 1 0 0 : 0; 1 0 1 : 1; 1 1 0 : 1; 1 1 1 : 1;0 0 x : 0; 0 x 0 : 0;x 0 0 : 0;1 1 x : 1; 1 x 1 : 1;x 1 1 : 1;endtableendprimitivep 【例例6.4】包含包含x態(tài)輸入的態(tài)輸入的1位全加器位全加器進位進位輸出輸出UDP元件元件primitive carry_udpx(cout,cin,a,b);input cin
28、,a,b;output cout;table/cin a b : cout /真值表真值表/只要有兩個輸入為只要有兩個輸入為0,則進位輸出肯定為,則進位輸出肯定為0 ? 0 0 : 0; 0 ? 0 : 0; 0 0 ? : 0;/只要有兩個輸入為只要有兩個輸入為1,則進位輸出肯定為,則進位輸出肯定為1 ? 1 1 : 1; 1 ? 1 : 1; 1 1 ? : 1;endtableendprimitive【例例6.5】用簡縮符用簡縮符“?”表述的表述的1位全加器進位輸出位全加器進位輸出UDP元件元件1、組合電路、組合電路UDP元件元件 2、時序邏輯、時序邏輯UDP元件元件 primitive
29、 latch(Q,clk,reset,D);input clk,reset,D;output Q;reg Q;initial Q=1b1; /初始化初始化table/clk reset D:state:Q ? 1 ? : ? : 0; /reset高電平有效復位高電平有效復位 0 0 0 : ? : 0; /clk低電平有效鎖存低電平有效鎖存 0 0 1 : ? : 1; 1 0 ? : ? : -; /“-”表示維持原狀態(tài)表示維持原狀態(tài)endtableendprimitivep【例例6.6】 電平敏感的電平敏感的1位數(shù)據(jù)鎖存器位數(shù)據(jù)鎖存器UDP元件元件primitive DFF(Q,D,cl
30、k);input D,clk; output Q;reg Q;table/clk D : state : Q (01) 0 : ? : 0; /上升沿到來,輸出上升沿到來,輸出Q=D (01) 1 : ? : 1; (0 x) 1 : 1 : 1; (0 x) 0 : 0 : 0; (?0) ? : ? : -; /沒有上升沿到來,輸出沒有上升沿到來,輸出Q保持原值保持原值 ? (?) : ? : -; /時鐘不變,輸出也不變時鐘不變,輸出也不變endtableendprimitive【例例6.7】 上升沿觸發(fā)的上升沿觸發(fā)的D觸發(fā)器觸發(fā)器UDP元件元件2、時序邏輯、時序邏輯UDP元件元件 縮記
31、符縮記符含義含義說明說明x不定態(tài)不定態(tài)?0、1或或x只能表示輸入只能表示輸入b0或或1只能表示輸入只能表示輸入-保持不變保持不變只用于時序元件的輸出只用于時序元件的輸出(vy)代表代表(01), (10), (0 x), (1x), (x1), (x0), (?1)等等從邏輯從邏輯v到邏輯到邏輯y的轉變的轉變*同同(?)表示輸入端有任何變化表示輸入端有任何變化R或或r同同(01)表示上升沿表示上升沿F或或f同同(10)表示下降沿表示下降沿P或或p(01), (0 x)或或(x1)包含包含x態(tài)的上升沿跳變態(tài)的上升沿跳變N或或n(10),(1x)或或(x0)包含包含x態(tài)的下降沿跳變態(tài)的下降沿跳變U
32、DP中的縮記符中的縮記符6.4、測試平臺測試平臺( ModelSim) 1、測試平臺程序編寫方法測試平臺程序編寫方法(Test Banch) 測試模塊只有模塊名字,沒有端口列表;測試模塊只有模塊名字,沒有端口列表;輸入信號(激勵信號)必須定義為輸入信號(激勵信號)必須定義為reg型,以保持信號值;型,以保持信號值;輸出信號(顯示信號)必須定義為輸出信號(顯示信號)必須定義為wire型;型;在測試模塊中調用被測試模塊,在調用時,應注意端口在測試模塊中調用被測試模塊,在調用時,應注意端口排列的順序與模塊定義時一致;排列的順序與模塊定義時一致;一般用一般用initial、always過程塊來定義激勵
33、信號波形;使過程塊來定義激勵信號波形;使用系統(tǒng)任務和系統(tǒng)函數(shù)來定義輸出顯示格式;用系統(tǒng)任務和系統(tǒng)函數(shù)來定義輸出顯示格式;在激勵信號的定義中,可使用如下一些控制語句:在激勵信號的定義中,可使用如下一些控制語句:if-else,for,forever,case,while,begin-end,fork-join等,這些控制語句一般只用在等,這些控制語句一般只用在always、initial、function、task等過程塊中。等過程塊中。 【例6.8】 激勵波形的描述timescale 1ns/1nsmodule test1;reg a,b,c;initialbegin a=0;b=1;c=0;
34、 #100 c=1; #100 a=1;b=0; #100 a=0; #100 c=0;#100 $stop;endinitial $monitor($time,a=%d b=%d c=%d,a,b,c); /顯示endmodule仿真激勵波形測試程序仿真激勵波形測試程序ModelSim仿真結果仿真結果例6.9 BCD編碼器程序module BCD_enc(in,out); input9:0in; output3:0out; assign out=func_enc(in); /? function 3:0 func_enc; /? input9:0 in; case(in) 10b00_000
35、0_0001:func_enc=0; 10b00_0000_0010:func_enc=1; 10b00_0000_0100:func_enc=2; 10b00_0000_1000:func_enc=3; 10b00_0001_0000:func_enc=4; 10b00_0010_0000:func_enc=5; 10b00_0100_0000:func_enc=6; 10b00_1000_0000:func_enc=7; 10b01_0000_0000:func_enc=8; 10b10_0000_0000:func_enc=9;endcase endfunction endmodule例
36、6.10 BCD編碼器仿真測試程序timescale 1ns/1nsmodule BCD_enc_th; reg9:0in; wire3:0out; integer i,j; BCD_enc enc(.in(in),.out(out); initial begin j=10b00_0000_0001;/賦初值 for(i=0;i=9;i=i+1) begin in=j9:0; #200; /每200ns賦初值一次 j=j1; end $finish; endendmoduleModelSim BCD編碼器仿真結果【例6.11】 always語句用于時鐘波形的描述timescale 1ns/1n
37、sreg clk;parameter CYCLE=100;/一個時鐘周期100nsalways #(CYCLE/2) clk=clk; /always語句產(chǎn)生時鐘波形intial clk=1;例如例如 仿真激勵周期測試程序仿真激勵周期測試程序 2、 ModelSim仿真實例仿真實例 加法器仿真的示意圖加法器仿真的示意圖 【例例6.12 全加器仿真測試程序全加器仿真測試程序】ModelSim仿真仿真o ModelSim工作界面 ModelSim仿真仿真新建工程項目新建工程項目 填加仿真文件填加仿真文件 1、新建工程、新建工程ModelSim仿真仿真o 2、新建仿真文件 ModelSim仿真仿真o
38、 3、輸入仿真文件代碼并編譯 ModelSim仿真仿真o 生成編譯文件自動加載到生成編譯文件自動加載到work工作庫工作庫o 對對work工作庫中的測試程序進行命令仿真工作庫中的測試程序進行命令仿真(simlate coverage) ,并從,并從object中加載端口到波形中加載端口到波形Wave中。中。ModelSim仿真仿真4、點擊仿真命令(run all),運行仿真程序,輸出波形顯示和命令行窗口結果顯示 。timescale 10ns/1nsmodule mult8_tp; /測試模塊的名字測試模塊的名字reg7:0 a,b; /測試輸入信號定義為測試輸入信號定義為reg型型wire15:0 out; /測試輸出信號定義為測試輸出信號定義為wire型型integer i,j;mult8 m1(out,a,b);/調用測試對象調用測試對象initial /激勵波形設定激勵波形設定begin a=0;b=0;for(i=1;i255;i=i+1) #10 a=i; endinitial beginfor(j=1;j255;j=j+1) #10 b=j;end【例例6.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七級考試題及答案
- 石油化工行業(yè)典型事故案例
- 文檔超強英語四六級課件
- 2025年稀土高速工具鋼項目建議書
- 現(xiàn)代外賣配送騎手職業(yè)素養(yǎng)與責任承諾合同
- 美容美發(fā)行業(yè)人才招聘與培訓服務合同
- 網(wǎng)絡零售智能電子價簽租賃及售后服務協(xié)議
- 頂級商業(yè)街區(qū)十年租賃期物業(yè)全面管理合同
- 胎黃中醫(yī)護理
- 抖音火花話題挑戰(zhàn)賽選手賽事保障與支持協(xié)議
- 2025年鐵路集裝箱市場前景分析
- 2024-2025中國商旅管理白皮書
- 船舶維修合同協(xié)議書
- 《比亞迪品牌歷史課件》課件
- 小學心理健康家長會課件
- 2025年4月自考00160審計學答案含評分參考
- 購買木地板合同協(xié)議
- 嚴重開放性肢體創(chuàng)傷早期救治專家共識解讀
- 2025年公共安全管理考試試題及答案
- 速賣通開店考試最權威答案
- 輸液導管相關靜脈血栓形成中國專家共識 課件
評論
0/150
提交評論