




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一講第一講 課程簡介課程簡介4目的:目的:4簡單引見簡單引見Verilog HDL言語和仿真工言語和仿真工具具4引見講課方案引見講課方案4引見如何不斷地學習新的有關知識引見如何不斷地學習新的有關知識講座中關于講座中關于Verilog HDLVerilog HDL的主要內容的主要內容講課內容主要包括:講課內容主要包括:Verilog 的運用的運用Verilog 言語的組成部件言語的組成部件 構造級的建模與仿真構造級的建模與仿真行為級的建模與仿真行為級的建模與仿真延遲參數的表示延遲參數的表示Verilog 的測試平臺:的測試平臺:怎樣產生鼓勵信號和控制信號怎樣產生鼓勵信號和控制信號 輸出呼應的產
2、生、記錄和驗證輸出呼應的產生、記錄和驗證義務和函數義務和函數用戶定義的元器件用戶定義的元器件primitives可綜合風格的可綜合風格的Verilog 建模建模講座中關于講座中關于VerilogVerilog仿真工具的主要內容仿真工具的主要內容講課內容主要包括:講課內容主要包括:如何對所做的設計進展編譯和仿真如何對所做的設計進展編譯和仿真如何運用元器件庫如何運用元器件庫如何用如何用Verilog-XL命令行界面調試代碼命令行界面調試代碼如何用圖形用戶界面如何用圖形用戶界面GUI延遲的計算和標志延遲的計算和標志仿真性能建模仿真性能建模循環多次仿真循環多次仿真目的目的: :了解用了解用HDLHDL
3、言語設計數字邏輯的優點言語設計數字邏輯的優點了解了解Verilog Verilog 主要運用領域主要運用領域了解了解Verilog Verilog 的開展歷史的開展歷史了解電路系統的不同層次的了解電路系統的不同層次的VerilogVerilog籠統籠統 第二講:第二講:Verilog Verilog 的運用的運用Verilog HDLVerilog HDL是一種用于數字邏輯電路設計的言語是一種用于數字邏輯電路設計的言語: :- - 用用Verilog HDLVerilog HDL描畫的電路設計就是該電路描畫的電路設計就是該電路 的的 Verilog HDLVerilog HDL模型。模型。-
4、Verilog HDL - Verilog HDL 既是一種行為描畫的言語也既是一種行為描畫的言語也 是一種構造描畫的言語。是一種構造描畫的言語。這也就是說,既可以用電路的功能描畫也可以用元器件這也就是說,既可以用電路的功能描畫也可以用元器件和它們之間的銜接來建立所設計電路的和它們之間的銜接來建立所設計電路的Verilog HDLVerilog HDL模模型。型。VerilogVerilog模型可以是實踐電路的不同級別的籠統。模型可以是實踐電路的不同級別的籠統。這些籠統的級別和它們對應的模型類型共有以下五種這些籠統的級別和它們對應的模型類型共有以下五種: Verilog Verilog 的運用
5、的運用Verilog Verilog 的運用的運用 系統級系統級(system): (system): 用高級言語構造實現設計模塊的外用高級言語構造實現設計模塊的外部性能的模部性能的模 算法級算法級(algorithmic): (algorithmic): 用高級言語構造實現設計算用高級言語構造實現設計算法的模型。法的模型。 RTLRTL級級(Register Transfer Level): (Register Transfer Level): 描畫數據在存放描畫數據在存放器之間流動和如何處置這些數據的模型。器之間流動和如何處置這些數據的模型。 門級門級(gate-level): (gate
6、-level): 描畫邏輯門以及邏輯門之間的銜描畫邏輯門以及邏輯門之間的銜接的模型。接的模型。 開關級開關級(switch-level): (switch-level): 描畫器件中三極管和儲存節描畫器件中三極管和儲存節點以及它們之間銜接的模型。點以及它們之間銜接的模型。 Verilog Verilog 的運用的運用 一個復雜電路的完好一個復雜電路的完好Verilog HDLVerilog HDL模型是由假模型是由假設個設個 Verilog HDL Verilog HDL 模塊構成的,每一個模塊模塊構成的,每一個模塊又可以由假設干個子模塊構成。又可以由假設干個子模塊構成。 利用利用Verilo
7、g HDLVerilog HDL言語構造所提供的這種功能言語構造所提供的這種功能就可以構造一個模塊間的明晰層次構造來描畫就可以構造一個模塊間的明晰層次構造來描畫極其復雜的大型設計。極其復雜的大型設計。 Verilog HDLVerilog HDL行為描畫言語作為一種構造化和行為描畫言語作為一種構造化和過程性的言語,其語法構造非常適宜于算法級過程性的言語,其語法構造非常適宜于算法級和和RTLRTL級的模型設計。這種行為描畫言語具有級的模型設計。這種行為描畫言語具有以下八項功能:以下八項功能: Verilog Verilog 的運用的運用 可描畫順序執行或并行執行的程序構造。可描畫順序執行或并行執
8、行的程序構造。 用延遲表達式或事件表達式來明確地控制過程的啟動用延遲表達式或事件表達式來明確地控制過程的啟動時間。時間。 經過命名的事件來觸發其它過程里的激活行為或停頓經過命名的事件來觸發其它過程里的激活行為或停頓行為。行為。 提供了條件、提供了條件、if-elseif-else、casecase、循環程序構造。、循環程序構造。 提供了可帶參數且非零延續時間的義務提供了可帶參數且非零延續時間的義務(task)(task)程序構程序構造。造。 提供了可定義新的操作符的函數構造提供了可定義新的操作符的函數構造(function)(function)。 Verilog Verilog 的運用的運用
9、提供了用于建立表達式的算術運算符、邏輯運算符、提供了用于建立表達式的算術運算符、邏輯運算符、位運算符。位運算符。 Verilog HDLVerilog HDL言語作為一種構造化的言語也非常適言語作為一種構造化的言語也非常適宜于門級和開關級的模型設計。宜于門級和開關級的模型設計。 Verilog HDLVerilog HDL的構造性語句可以準確地建立信號的的構造性語句可以準確地建立信號的模型。這是由于在模型。這是由于在Verilog HDLVerilog HDL中,提供了延遲和輸出中,提供了延遲和輸出強度的原語來建立準確程度很高的信號模型。信號值強度的原語來建立準確程度很高的信號模型。信號值可以
10、有不同的的強度,可以經過設定寬范圍的模糊值可以有不同的的強度,可以經過設定寬范圍的模糊值來降低不確定條件的影響。來降低不確定條件的影響。 Verilog Verilog 的運用的運用 Verilog HDL Verilog HDL作為一種高級的硬件描畫編程言語,有著類似作為一種高級的硬件描畫編程言語,有著類似C C言語言語的風格。其中有許多語句如:的風格。其中有許多語句如:ifif語句、語句、casecase語句等和語句等和C C言語中的言語中的對應語句非常類似。假設讀者曾經掌握對應語句非常類似。假設讀者曾經掌握C C言語編程的根底,那么言語編程的根底,那么學習學習 Verilog HDLVe
11、rilog HDL并不困難,我們只需對并不困難,我們只需對Verilog HDLVerilog HDL某些語句某些語句的特殊方面著重了解,并加強上機練習就能很好地掌握它,利用的特殊方面著重了解,并加強上機練習就能很好地掌握它,利用它的強大功能來設計復雜的數字邏輯電路。下面我們將對它的強大功能來設計復雜的數字邏輯電路。下面我們將對Verilog HDLVerilog HDL中的根本語法逐一加以引見。中的根本語法逐一加以引見。模塊的籠統模塊的籠統技術目的:技術目的:用文字表示用文字表示用算法表示用算法表示用高級行為的用高級行為的VerilogVerilog模模塊表示塊表示RTL/RTL/功能級:功
12、能級:用可綜合的用可綜合的VerilogVerilog模塊模塊表示表示門級門級/ /構造級:構造級:用實例援用的用實例援用的VerilogVerilog模模塊表示塊表示幅員規劃幅員規劃/ /物理級:物理級:用幾何外形來表示用幾何外形來表示 行為綜合邏輯綜合綜合前仿真綜合后仿真規劃布線第三講第三講. .簡單的簡單的 Verilog HDL Verilog HDL 模塊模塊目的目的: :經過簡單的例子了解經過簡單的例子了解VerilogVerilog模塊的根本構成模塊的根本構成了解了解VerilogVerilog模塊的層次構造和行為模塊模塊的層次構造和行為模塊了解了解VerilogVerilog模
13、塊的測試模塊的測試 簡單的簡單的 Verilog HDL Verilog HDL 模塊模塊下面先引見幾個簡單的下面先引見幾個簡單的Verilog HDLVerilog HDL程序程序, ,然后從中分析然后從中分析Verilog HDLVerilog HDL程序的特性。程序的特性。例例2.1.1: module adder ( count,sum,a,b,cin );2.1.1: module adder ( count,sum,a,b,cin ); input 2:0 a,b; input 2:0 a,b; input cin; input cin; output count; output
14、count; output 2:0 sum; output 2:0 sum; assign assign count,sum=a+b+cin;count,sum=a+b+cin; endmodule endmodule 這個例子描畫了一個三位的加法器。從例子中可以看這個例子描畫了一個三位的加法器。從例子中可以看出整個出整個Verilog HDLVerilog HDL程序是嵌套在程序是嵌套在modulemodule和和endmoduleendmodule聲明語句里的。聲明語句里的。簡單的簡單的 Verilog HDL Verilog HDL 模塊模塊例例2.1.22.1.2:module com
15、pare ( equal,a,b );module compare ( equal,a,b ); output equal; / output equal; /聲明輸出信號聲明輸出信號equalequal input 1:0 a,b; / input 1:0 a,b; /聲明輸入信號聲明輸入信號a,ba,b assign equal= assign equal=a=ba=b?1 1:0;0; / /* *假設兩個輸入信號相等假設兩個輸入信號相等, ,輸出為輸出為1 1。否那么為。否那么為0 0* */ /endmoduleendmodule這 個 程 序 描 畫 了 一 個 比 較 器這 個
16、程 序 描 畫 了 一 個 比 較 器 . . 在 這 個 程 序 中在 這 個 程 序 中,/,/* *.* */ /和和/./.表示注釋部分表示注釋部分, ,注釋只注釋只是為了方便程序員了解程序是為了方便程序員了解程序, ,對編譯是不起作用的。對編譯是不起作用的。簡單的簡單的 Verilog HDL Verilog HDL 模塊模塊例例2.1.32.1.3:module trist2(out,in,enable);module trist2(out,in,enable); output out; output out; input in, enable; input in, enable;
17、 bufif1 mybuf(out,in,enable); bufif1 mybuf(out,in,enable);endmoduleendmodule這個程序描畫了一個三態驅動器。程序經過調用一個實這個程序描畫了一個三態驅動器。程序經過調用一個實例元件例元件bufif1bufif1來實現其功能。來實現其功能。簡單的簡單的 Verilog HDL Verilog HDL 模塊模塊例例2.1.42.1.4: module trist1(out,in,enable);module trist1(out,in,enable); output out; output out; input in, en
18、able; input in, enable; mytri mytri tri_inst(out,in,enable);tri_inst(out,in,enable); endmodule endmodule module module mytri(out,in,enable);mytri(out,in,enable); output out; output out; input in, enable; input in, enable; assign out = enable? assign out = enable? In : bz;In : bz; endmodule endmodule
19、簡單的簡單的 Verilog HDL Verilog HDL 模塊模塊上述程序例子經過另一種方法描畫了一個三態上述程序例子經過另一種方法描畫了一個三態門。門。在這個例子中存在著兩個模塊:模塊在這個例子中存在著兩個模塊:模塊trist1 trist1 調用模塊調用模塊 mytri mytri 的實例元件的實例元件 tri_insttri_inst。模塊模塊 trist1 trist1 是上層模塊。模塊是上層模塊。模塊 mytri mytri 那么被那么被稱為子模塊。稱為子模塊。經過這種構造性模塊構造可構成特大型模塊。經過這種構造性模塊構造可構成特大型模塊。簡單的簡單的 Verilog HDL V
20、erilog HDL 模塊模塊經過上面的例子可以看到: Verilog HDL程序是由模塊構成的。模塊是可以進展層次嵌套的。正由于如此,才可以將大型的數字電路設計分割成不同的小模塊來實現特定的功能,最后經過頂層模塊調用子模塊來實現整體功能。 每個模塊要進展端口定義,并闡明輸入輸出口,然后對模塊的功能進展行為邏輯描畫。 Verilog HDL程序的書寫格式自在,一行可以寫幾個語句,一個語句也可以分寫多行。 除了endmodule語句外,每個語句和數據定義的最后必需有分號 可以用/*.*/和/.對Verilog HDL程序的任何部分作注釋。一個好的,有運用價值的源程序都該當加上必要的注釋,以加強程
21、序的可讀性和可維護性。模塊的構造模塊的構造Verilog的根本設計單元是“模塊(block)。一個模塊是由兩部分組成的:一描畫接口;二描畫邏輯功能,即定義輸入是如何影響輸出的。下面舉例闡明: module block (a,b,c,d);input a,b;output c,d;assign c= a | b ;assign d= a & b;endmodule abcd模塊的構造模塊的構造從上面的例子可以看出:從上面的例子可以看出:- Verilog- Verilog模塊構造完全嵌在模塊構造完全嵌在modulemodule和和endmoduleendmodule聲明語句之間;聲明語句
22、之間;- - 每個每個VerilogVerilog程序包括四個主要部分:程序包括四個主要部分:端口定義、端口定義、I/OI/O闡明、內部信號聲明、闡明、內部信號聲明、功能定義。功能定義。第四講第四講 模塊的測試模塊的測試 如何檢查上述例子其功能能否正確?如何檢查上述例子其功能能否正確? 需求有測試鼓勵信號輸入到被測模塊需求有測試鼓勵信號輸入到被測模塊 需求記錄被測模塊的輸出信號需求記錄被測模塊的輸出信號 需求把用功能和行為描畫的需求把用功能和行為描畫的VerilogVerilog模塊模塊 轉換為門級電路互連的電路構造綜合轉換為門級電路互連的電路構造綜合。 需求對曾經轉換為門級電路構造的邏輯需求
23、對曾經轉換為門級電路構造的邏輯 進展測試門級電路仿真。進展測試門級電路仿真。 需求對規劃布線后的電路構造進展測試需求對規劃布線后的電路構造進展測試。 規劃布線后仿真。規劃布線后仿真。模塊的測試模塊的測試 被測模塊被測模塊鼓勵和控鼓勵和控制信號制信號輸出呼應輸出呼應和驗證和驗證模塊的測試模塊的測試測試模塊常見的方式:測試模塊常見的方式:module t;module t;reg ; /reg ; /被測模塊輸入被測模塊輸入/ /輸出輸出變量類型定義變量類型定義wire; /wire; /被測模塊輸入被測模塊輸入/ /輸出變輸出變量類型定義量類型定義initial begin ; ; ; end
24、initial begin ; ; ; end / /產生測試信號產生測試信號always #delay begin ; end always #delay begin ; end /產生測試信號產生測試信號Testedmd m(.in1(ina), .in2(inb), Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) );.out1(outa), .out2(outb) );/被測模塊的實例援用被測模塊的實例援用initial begin .; .; . end initial begin .; .; . end /記錄輸出
25、和呼應記錄輸出和呼應endmoduleendmodule模塊的測試模塊的測試測試模塊中常用的過程塊:測試模塊中常用的過程塊:initial initial always一切的過程塊都一切的過程塊都在在0 0時辰同時啟時辰同時啟動;它們是并行動;它們是并行的,在模塊中不的,在模塊中不分前后。分前后。 initialinitial塊塊 只只執行一次。執行一次。 alwaysalways塊塊 只需只需符合觸發條件可符合觸發條件可以循環執行。以循環執行。模塊的測試模塊的測試如何描畫鼓勵信號:如何描畫鼓勵信號:module t;module t;reg a, b, sel;reg a, b, sel;w
26、ire out;wire out;/援用多路器實例援用多路器實例 mux2_m (out, a, b, sel);mux2_m (out, a, b, sel);/參與鼓勵信號參與鼓勵信號initial begin a=0; b=1; sel=0; initial begin a=0; b=1; sel=0; #10 b=0; #10 b=0; #10 b=1; sel=1; #10 b=1; sel=1; #10 a=1; #10 a=1; #10 $stop; #10 $stop; end end模塊的測試模塊的測試如何察看被測模塊的呼應:如何察看被測模塊的呼應: 在在initial in
27、itial 塊中,用系統義務塊中,用系統義務$time $time 和和 $monitor$monitor $time $time 前往當前的仿真時辰前往當前的仿真時辰 $monitor $monitor 只需在其變量列表中有某一個或某幾個變只需在其變量列表中有某一個或某幾個變 量值發生變化,便在仿真單位時間終了時顯示其變量值發生變化,便在仿真單位時間終了時顯示其變 量列表中一切變量的值。量列表中一切變量的值。例:例: initial initial begin begin $monitor ($time, , “out=%b a=%b sel=%b $monitor ($time, , “o
28、ut=%b a=%b sel=%b, , out,a,b,sel);out,a,b,sel); end end模塊的測試模塊的測試如何把被測模塊的輸出變化記錄到數據庫文件中?如何把被測模塊的輸出變化記錄到數據庫文件中?文件格式為文件格式為VCD,VCD,大多數的波形顯示工具都能讀取該格大多數的波形顯示工具都能讀取該格式式可用以下七個系統義務:可用以下七個系統義務:$dumpfile(“file.dump$dumpfile(“file.dump); /); /翻開記錄數據變化的翻開記錄數據變化的數據文件數據文件$dumpvars(); /$dumpvars(); /選擇需求記錄的選擇需求記錄的變
29、量變量$dumpflush; /$dumpflush; /把記錄在數據文件中的資料轉把記錄在數據文件中的資料轉送到硬盤保管送到硬盤保管$dumpoff; /$dumpoff; /停頓記錄數據變化停頓記錄數據變化$dumpon; /$dumpon; /重新開場記錄數據變化重新開場記錄數據變化$dumplimit(); /$dumplimit(); /規定數據文件的大小規定數據文件的大小字節字節$dumpall; /$dumpall; /記錄一切指定信號的變化值記錄一切指定信號的變化值到數據文件中到數據文件中模塊的測試模塊的測試如何把被測模塊的呼應變化記錄到數據庫文件中?如何把被測模塊的呼應變化記
30、錄到數據庫文件中?舉例闡明:舉例闡明:$dumpvars; /$dumpvars; /記錄各層次模塊中一切信號的記錄各層次模塊中一切信號的變化變化$dumpvars(1,top); $dumpvars(1,top); /只記錄模塊只記錄模塊toptop中一切信號的變化中一切信號的變化$dumpvars(2,top.u1); $dumpvars(2,top.u1); /記錄記錄toptop模塊中實例模塊中實例u1u1和它以下一層子模塊一切信號和它以下一層子模塊一切信號的變化的變化$dumpvars(0,top.u2,top.u1.u13.q); $dumpvars(0,top.u2,top.u1
31、.u13.q); /記錄記錄toptop模塊中實例模塊中實例u2u2和它本層一切信號的變化和它本層一切信號的變化, ,還有還有top.u1.u13.qtop.u1.u13.q信號的變化。信號的變化。$dumpvars(3,top.u2,top.u1); $dumpvars(3,top.u2,top.u1); /記錄記錄toptop模塊中模塊中u2u2和和u1u1一切信號的變化包括其兩層一切信號的變化包括其兩層以下子模塊的信號變化。以下子模塊的信號變化。模塊的測試模塊的測試如何把被測模塊的呼應變化記錄到數據庫文件中?如何把被測模塊的呼應變化記錄到數據庫文件中?舉例闡明:舉例闡明:下面的下面的 V
32、erilog Verilog 代碼段可以替代測試文件中的系統義代碼段可以替代測試文件中的系統義務務$monitor$monitor initialinitial begin begin $dumpfile(“vlog.dump $dumpfile(“vlog.dump; $dumpvars(0,top); $dumpvars(0,top); end end語法詳細講解第五講. Verilog 語法要點 目的目的: : 了解了解Verilog Verilog 言語的一些重要規定言語的一些重要規定. . 學會認識一些有關的重要言語符號學會認識一些有關的重要言語符號. . 掌握掌握Verilog V
33、erilog 中如何規定時間單位中如何規定時間單位語法詳細講解Verilog 與 C 的主要不同點 Verilog Verilog 有許多語法規那么與有許多語法規那么與 C C 言語一致。言語一致。 但與但與 C C 言語有根本的區別:言語有根本的區別:- - 并行性并行性- - 塊的含義:塊的含義: initial initial 塊塊 和和 alwaysalways塊塊 兩種賦值語句:兩種賦值語句: 阻塞阻塞 賦值賦值 “ “ = = 非阻塞賦值非阻塞賦值 “= = 語法詳細講解空格和注釋 Verilog Verilog 是一種格式很自在的言語。是一種格式很自在的言語。 空格在文本中起一個
34、分別符的作用,空格在文本中起一個分別符的作用, 別的沒有其他用途。別的沒有其他用途。 單行注釋符用單行注釋符用 /* * * * * * * * * * 與與C C 言語一致言語一致 多行注釋符用多行注釋符用 / /* * - - * */ / 與與C C 言語一致言語一致語法詳細講解整數和實常數 Verilog Verilog 言語中常數可以是整數或實數:言語中常數可以是整數或實數:整數可以標明位數也可以不標明位數,表示方法:整數可以標明位數也可以不標明位數,表示方法: 其中其中 闡明該數用二進制的幾位來表示闡明該數用二進制的幾位來表示 可以是二可以是二b b、八、八O O、十、十d d或或
35、 十六十六h h進制進制 可以是所選基數的任何合法的值包括可以是所選基數的任何合法的值包括 不定值不定值 x x 位和高阻值位和高阻值 z z。如如:64hff01 8b1101_0001 h83a:64hff01 8b1101_0001 h83a實常數可以用十進制表示也可以用科學浮點數表示,如:實常數可以用十進制表示也可以用科學浮點數表示,如:32e-4 32e-4 表示表示0.00320.0032 4.1E3( 4.1E3( 表示表示 41004100語法詳細講解字符串 Verilog Verilog 言語中,字符串經常用于表示命令內需求顯言語中,字符串經常用于表示命令內需求顯示的信息。示
36、的信息。 用用“ “ 括起來的一行字符串,換新一行用括起來的一行字符串,換新一行用 “ “nn 字符字符, ,與與 C C 言語一致。言語一致。 在字符串中可以用在字符串中可以用 C C 言語中的各種格式控制符,如言語中的各種格式控制符,如t, t, , , 在字符串中可以用在字符串中可以用 C C 言語中的各種數值型式控制符言語中的各種數值型式控制符( (有些不同有些不同) ),如:,如: %b(%b(二進制二進制), %o(), %o(八進制八進制) ), %d(%d(十進制十進制), %h(), %h(十六十六進制進制), %t(), %t(時間類型時間類型) ),%s (%s (字符串
37、類型字符串類型)語法詳細講解標識符 所謂標識別符就是用戶為程序描畫中的所謂標識別符就是用戶為程序描畫中的Verilog Verilog 對對象所起的名字。象所起的名字。 標識符必需以英語字母標識符必需以英語字母a-z, A-Za-z, A-Z起頭,或者用起頭,或者用下橫線符下橫線符 _ _ 起頭。其中可以包含數字、起頭。其中可以包含數字、$ $符和符和下橫線符。下橫線符。 標識符最長可以到達標識符最長可以到達10231023個字符。個字符。 模塊名、端口名和實例名都是標識符。模塊名、端口名和實例名都是標識符。 VerilogVerilog言語是大小寫敏感的,因此言語是大小寫敏感的,因此sel
38、sel 和和 SEL SEL 是是兩個不同的標識符。兩個不同的標識符。語法詳細講解合法和非法標識符 合法的:合法的:shift_reg_a shift_reg_a busa_index busa_index bus263 bus263 非法的:非法的:34net /34net /不能用數字開頭不能用數字開頭a a* *b_net /b_net /不能含有非字母符不能含有非字母符號號* *n263 /n263 /不能含有非字母符號不能含有非字母符號Verilog Verilog 是大小寫敏感的。一切的是大小寫敏感的。一切的Verilog Verilog 關鍵詞都是小寫的。關鍵詞都是小寫的。語法詳
39、細講解特別的標識符 特別標識符是用特別標識符是用 “ “ 符開場,以空格符終了的標符開場,以空格符終了的標 識符。它可以包含任何可打印的識符。它可以包含任何可打印的ASCIIASCII字符。字符。 但但“ 符和空格并不算是標識符的一部分。符和空格并不算是標識符的一部分。 特別標識符往往是由特別標識符往往是由RTLRTL級源代碼或電路圖類型的級源代碼或電路圖類型的 設計輸入經過綜合器自動綜合生成的網表構外型設計輸入經過綜合器自動綜合生成的網表構外型 Verilog Verilog 語句中的標識符。語句中的標識符。 舉例闡明:舉例闡明: #sel , bus+index , A,B ,#sel ,
40、 bus+index , A,B , Top.3inst 1 , /Top.3inst 1 , /在層次模塊中的標識名在層次模塊中的標識名語法詳細講解系統義務和函數 $ $ $ $ 符號表示符號表示 Verilog Verilog 的系統義務和函數的系統義務和函數常用的系統義務和函數有下面幾種:常用的系統義務和函數有下面幾種:$time /$time /找到當前的仿真時間找到當前的仿真時間$display, $monitor /$display, $monitor /顯示和監視信號值的變化顯示和監視信號值的變化$stop /$stop /暫停仿真暫停仿真$finish /$finish /終了
41、仿真終了仿真-例:例: initial $monitor($time,initial $monitor($time,a=%b, b=%ba=%b, b=%b, a, b); , a, b); /每當每當a a 或或b b值變化時該系統義務都顯示當前的仿真時值變化時該系統義務都顯示當前的仿真時辰并分別用二進制和十六進制顯示信號辰并分別用二進制和十六進制顯示信號a a和和 b b的值的值語法詳細講解特殊符號 “#特殊符號特殊符號 “ “# # 常用來表示延遲:常用來表示延遲:在過程賦值語句時表示延遲。在過程賦值語句時表示延遲。例:例:initial begin #10 rst=1; #50 rst
42、=0; endinitial begin #10 rst=1; #50 rst=0; end在門級實例援用時表示延遲。在門級實例援用時表示延遲。例:例:not #1 not1(nsel, sel);not #1 not1(nsel, sel); and #2 and2(a1, a, nsel); and #2 and2(a1, a, nsel);在模塊實例援用時表示參數傳送在模塊實例援用時表示參數傳送 引見參數類型變量時再講。引見參數類型變量時再講。語法詳細講解編譯引導語句 編譯引導語句用主鍵盤左上角小寫鍵編譯引導語句用主鍵盤左上角小寫鍵 “ “ 起起頭頭 用于指點仿真編譯器在編譯時采取一些特
43、殊處置用于指點仿真編譯器在編譯時采取一些特殊處置 編譯引導語句不斷堅持有效,直到被取消或重寫編譯引導語句不斷堅持有效,直到被取消或重寫 resetall resetall 編譯引導語句把一切設置的編譯引導恢編譯引導語句把一切設置的編譯引導恢復到缺省形狀復到缺省形狀 常用的編譯引導有:常用的編譯引導有: definedefine include include timescale timescale uselib uselib resetall resetall . .語法詳細講解編譯引導語句 運用運用define 編譯引導能提供簡單的文本替代功能編譯引導能提供簡單的文本替代功能 define
44、在編譯時會用宏文本來替代源代碼中的宏名。在編譯時會用宏文本來替代源代碼中的宏名。 合理地運用合理地運用define可以提高程序的可讀性可以提高程序的可讀性 舉例闡明:舉例闡明: define on 1b1 define off 1b0 define and_delay #3 在程序中可以用有含義的文字來表示沒有意思的數在程序中可以用有含義的文字來表示沒有意思的數碼提高了程序碼提高了程序 的可讀性,在程序中可以用的可讀性,在程序中可以用 on, off, and_delay 分別表分別表 示示 1,0,和,和 #3 。語法詳細講解編譯引導語句 運用運用include include 編譯引導,在
45、編譯時能把其指定的整編譯引導,在編譯時能把其指定的整個文件包括進來一同處置個文件包括進來一同處置 舉例闡明:舉例闡明: include “global.vinclude “global.v include “parts/counter.vinclude “parts/counter.v include “././library/mux.vinclude “././library/mux.v 合理地運用合理地運用include include 可以使程序簡約、明晰、條理可以使程序簡約、明晰、條理清楚、易于查錯。清楚、易于查錯。語法詳細講解編譯引導語句 timescale timescale 用于
46、闡明程序中的時間單位和仿真精度用于闡明程序中的時間單位和仿真精度舉例闡明:舉例闡明: timescale 1ns/100pstimescale 1ns/100pstimescale timescale 語句必需放在模塊邊境前面語句必需放在模塊邊境前面舉例闡明:舉例闡明: timescale 1ns/100pstimescale 1ns/100ps module module MUX2_1(out,a,b,sel);MUX2_1(out,a,b,sel); not #1 not1(nsel, not #1 not1(nsel, sel);sel); and #2 and1(a1, a, and
47、#2 and1(a1, a, nsel);nsel); endmodule endmodule盡能夠地使精度與時間單位接近,只需滿足設計的實踐盡能夠地使精度與時間單位接近,只需滿足設計的實踐需求就行。需求就行。舉例闡明:在上例中一切的時間單位都是舉例闡明:在上例中一切的時間單位都是1ns1ns的整數倍的整數倍語法詳細講解編譯引導語句仿真步長即仿真單位仿真步長即仿真單位STU) 是一切參與仿真模塊中由是一切參與仿真模塊中由timescale 指定指定的精度中最高即時間最短的那個決議的:的精度中最高即時間最短的那個決議的: STU=100fs舉例:舉例: timescale 1ns/10ps mo
48、dule M1(.); not #1.23 not1(nsel, sel); /1.23 ns中共有中共有12300個個STU100fs) endmodule timescale 100ns/1ns module M2(.); not #1.23 not1(nsel, sel); /123 ns中共有中共有1230000個個STU100fs) endmodule timescale 1ps/100fs module M3(.); not #1.23 not1(nsel, sel); /1.23 ps中共有中共有12個個STU100fs) endmodule語法詳細講解編譯引導語句 時間單位時間
49、單位 : fs 呼秒呼秒femptoseconds: 1.0E-15 秒秒 ps 皮秒皮秒 picoseconds: 1.0E-12 秒秒 ns 納秒納秒 nonoseconds: 1.0E-9 秒秒 us 微秒微秒 microseconds: 1.0E-6 秒秒 ms 毫秒毫秒 milliseconds: 1.0E-3 秒秒 s 秒秒 seconds: 1.0 秒秒語法詳細講解編譯引導語句 uselib uselib 編譯引導語句:編譯引導語句: 用于定義仿真器到哪里去找庫元件用于定義仿真器到哪里去找庫元件 假設該引導語句啟動的話,它就不斷有效假設該引導語句啟動的話,它就不斷有效 直到遇到直
50、到遇到另外一個另外一個uselibuselib的定義或的定義或resetallresetall語句語句 比其他配置庫搜索途徑的命令選項作用大比其他配置庫搜索途徑的命令選項作用大 假設仿真器在假設仿真器在uselibuselib定義的地點找不到器件庫,定義的地點找不到器件庫,它不會轉向由編譯命令行它不會轉向由編譯命令行-v -v 和和-y-y選項指定的器件庫選項指定的器件庫去找。去找。語法詳細講解編譯引導語句運用運用 uselib 的語法:的語法: uselib 器件庫器件庫1的地點的地點 器件庫器件庫2的地點的地點 。上面的器件庫地點可用以下兩種方法表示:上面的器件庫地點可用以下兩種方法表示:
51、1 file = 庫文件名的途徑庫文件名的途徑2 dir = 庫目錄名的途徑庫目錄名的途徑 libext = .文件擴展文件擴展例如:例如:uselib dir =/lib/FAST_lib/uselib dir =/lib/TTL_lib/ libext=.v file = /libs/TTL_U/udp.lib語法詳細講解第六講 Verilog 的數據類型和邏輯值目的:目的:掌握掌握Verilog不同邏輯值的含義不同邏輯值的含義學習學習Verilog不同的數據類型不同的數據類型了解如何運用和在什么場所下運用不同的數據類型了解如何運用和在什么場所下運用不同的數據類型學習聲明數據類型的語法學習
52、聲明數據類型的語法語法詳細講解Verilog 的四種邏輯值0 0、低、偽、邏輯低、地、低、偽、邏輯低、地、VSSVSS、負插入、負插入01XZ0bufbufbufbufif11 1、高、真、邏輯高、電源、高、真、邏輯高、電源、VDDVDD、正插入、正插入X X、不確定:邏輯沖突無法確定其邏輯值、不確定:邏輯沖突無法確定其邏輯值HiZHiZ、高阻抗、三態、無驅動源、高阻抗、三態、無驅動源 語法詳細講解主要的數據類型Verilog 有三種主要的數據類型:有三種主要的數據類型: Nets 表示器件之間的物理銜接表示器件之間的物理銜接, 稱為網絡銜接類型稱為網絡銜接類型Register 表示籠統的儲存
53、單元,稱為存放器表示籠統的儲存單元,稱為存放器/變量類型變量類型Parameter 表示運轉時的常數,稱為參數類型表示運轉時的常數,稱為參數類型語法詳細講解主要的數據類型Nets網絡連線:網絡連線:由模塊或門驅動的連線。由模塊或門驅動的連線。驅動端信號的改動會立刻驅動端信號的改動會立刻傳送到輸出的連線上。傳送到輸出的連線上。例如:右圖上,例如:右圖上,selb的改的改變,會自動地立刻影響或變,會自動地立刻影響或門的輸出。門的輸出。 netsabslselbselanslout語法詳細講解主要的數據類型銜接銜接Nets 類型變量的種類:類型變量的種類:在為不同工藝的根本元件建立庫模型的時候,在為
54、不同工藝的根本元件建立庫模型的時候,經常需求用不同的經常需求用不同的銜接類型來與之對應,使其行為與實踐器件一銜接類型來與之對應,使其行為與實踐器件一致。常見的有以下致。常見的有以下幾種。幾種。 類型類型 功能功能 wire, tri 對應于規范的互連線對應于規范的互連線缺省缺省 supply1, supply2 對應于電源線或接地線對應于電源線或接地線 wor, trior 對應于有多個驅動源的線或邏對應于有多個驅動源的線或邏輯銜接輯銜接 wand, triand 對應于有多個驅動源的線與對應于有多個驅動源的線與邏輯銜接邏輯銜接 trireg 對應于有電容存在能暫時存儲對應于有電容存在能暫時存
55、儲電平的銜接電平的銜接 tri1, tri0 對應于需求上拉或下拉的銜接對應于需求上拉或下拉的銜接假設不明確地闡明銜接是何種類型,應該是指假設不明確地闡明銜接是何種類型,應該是指 wire 類型。類型。語法詳細講解主要的數據類型 存放器存放器register類型變量類型變量 register 型變量能堅持其值,直到它被賦于新的值。型變量能堅持其值,直到它被賦于新的值。register 型變量常用于行為建模,產生測試的鼓勵信號。型變量常用于行為建模,產生測試的鼓勵信號。常用行為語句構造來給存放器類型的變量賦值。常用行為語句構造來給存放器類型的變量賦值。abslselbselansloutreg_
56、areg_selreg_b語法詳細講解主要的數據類型 存放器存放器register類型變量的數據類型類型變量的數據類型 存放器類型變量共有四種數據類型:存放器類型變量共有四種數據類型: 類型類型 功能功能 . reg 無符號整數變量,可以選擇不同的位寬無符號整數變量,可以選擇不同的位寬。 integer 有符號整數變量,有符號整數變量,32位寬,算術運算位寬,算術運算可產生可產生2的的 補碼。補碼。 real 有符號的浮點數,雙精度。有符號的浮點數,雙精度。 time 無符號整數變量,無符號整數變量,64位寬位寬Verilog-XL仿真仿真 工具用工具用64位的正數來記錄仿真時辰位的正數來記錄仿真時辰語法詳細講解主要的數據類型 如何選擇正確的數據類型?如何選擇正確的數據類型?輸入口輸入口inputinput可以由存放器或網絡銜接驅動可以由存放器或網絡銜接驅動,但它本身只能驅動網絡銜接。,但它本身只能驅動網絡銜接。輸出口輸出口 (output)(output)可以由存放器或網絡銜接驅動可以由存放器或網絡銜接驅動,但它本身只能驅動網絡銜接。,但它本身只能驅動網絡銜接。輸入輸入/ /輸出口輸出口(inout)(inout)只可以由網絡銜接驅動,只可以由網絡銜接驅動,但它本身只能驅動網絡銜接。但它本身
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車行業汽車音響市場發展趨勢與競爭格局分析報告
- 持續進步的商務英語學習試題答案
- 教育信息化2.0背景下教師信息技術與教育技術互動研究報告
- 裝配式木結構建筑項目在綠色建筑領域的政策導向研究報告
- 生管考試試題及答案
- 法碩面試試題及答案
- 教材內容的大學物理考試試題及答案
- 新時代創業扶持政策試題及答案
- 四川衛生康復職業學院《生物科學探索實踐》2023-2024學年第二學期期末試卷
- 江蘇省南京市六校2025年初三下期末生物試題試卷含解析
- 美育課程中的跨學科融合教學實踐
- 浙江省臺州市十校聯盟2024-2025學年高二下學期期中聯考技術試題(含答案)
- 2025年04月中國科學技術大學附屬第一醫院(安徽省立醫院)護理人員招聘213人筆試歷年專業考點(難、易錯點)附帶答案詳解
- 合同風險管控培訓
- 企業ab崗管理制度
- 2023年國網安徽省電力有限公司高校畢業生招聘約296人(第二批)筆試參考題庫附帶答案詳解
- 泉州市泉港區總醫院及各分院招聘工作人員筆試真題2024
- 2025年中考數學總復習模擬測試卷(附答案)
- 2023河道管理范圍劃界技術規程
- 設備管理風險識別及管控措施
- 2025山西地質集團招聘37人筆試參考題庫附帶答案詳解
評論
0/150
提交評論