




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、集成電路設計技術與工具集成電路設計技術與工具 第十章第十章 集成電路系統(tǒng)設計簡介集成電路系統(tǒng)設計簡介內容提要內容提要v10.1 引言引言v10.2 數字系統(tǒng)硬件描述語言數字系統(tǒng)硬件描述語言v10.3 數字系統(tǒng)的數字系統(tǒng)的CPLD/FPGA硬件驗證硬件驗證v10.4 VLSI數字系統(tǒng)邏輯綜合與物理實現數字系統(tǒng)邏輯綜合與物理實現v10.5 混合信號系統(tǒng)硬件描述語言混合信號系統(tǒng)硬件描述語言v10.6 本章小結本章小結10.1 引言引言v數字系統(tǒng)實現模擬信號處理結構示意圖數字系統(tǒng)實現模擬信號處理結構示意圖 電路圖電路圖硬件描述語言(硬件描述語言(HDL: Hardware Description La
2、nguage)怎樣設計復雜的數字系統(tǒng)?怎樣設計復雜的數字系統(tǒng)?怎樣設計復雜的數字系統(tǒng)?怎樣設計復雜的數字系統(tǒng)? v基于基于HDL語言的數字集語言的數字集成電路設計參考流程成電路設計參考流程 10.2 數字系統(tǒng)硬件描述語言數字系統(tǒng)硬件描述語言v編程語言: 程序員利用一種由專家設計的既可以被人理程序員利用一種由專家設計的既可以被人理解,也可以被計算機解釋的語言來表示算法解,也可以被計算機解釋的語言來表示算法問題的求解過程。這種語言就是問題的求解過程。這種語言就是編程語言編程語言。v程序:由編程語言所表達的算法問題的求解由編程語言所表達的算法問題的求解過程就是。過程就是。 v常用的編程語言:C、Pa
3、scal、Fortran、Basic或匯編語言或匯編語言。 什么是硬件描述語言HDLv具有特殊結構能夠對硬件邏輯電路的功能進行描述的一種高級編程語言v這種特殊結構能夠:描述電路的連接描述電路的功能在不同抽象級上描述電路描述電路的時序表達具有并行性vHDL主要有兩種:Verilog和VHDLVerilog起源于C語言,因此非常類似于C語言,容易掌握VHDL起源于ADA語言,格式嚴謹,不易學習。VHDL出現較晚,但標準化早。IEEE 1706-1985標準。?v使用HDL描述設計具有下列優(yōu)點:設計在高層次進行,與具體實現無關設計開發(fā)更加容易早在設計期間就能發(fā)現問題能夠自動的將高級描述映射到具體工藝
4、實現在具體實現時才做出某些決定vHDL具有更大的靈活性可重用可以選擇工具及生產廠vHDL能夠利用先進的軟件更快的輸入易于管理Verilog HDL - 較多的第三方工具的支持 - 語法結構比VHDL簡單 - 學習起來比VHDL容易 - 仿真工具比較好使 - 測試激勵模塊容易編寫VHDL - 比VerilogHDL早幾年成為IEEE標準; - 語法/結構比較嚴格,因而編寫出的 模塊風格比較清晰; - 比較適合由較多的設計人員合作完成 的特大型項目(一百萬門以上)。Verilog HDL vs. VHDL VHDL VITAL 系統(tǒng)級系統(tǒng)級 算法級算法級 寄存器傳輸級寄存器傳輸級 邏輯門級邏輯門級
5、 開關電路級開關電路級 行為級行為級 的抽象的抽象 Verilog HDL 與與 VHDL 建建 模模 能能 力力 的的 比比 較較 VerilogVerilog的歷史vVerilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所創(chuàng)。Phi Moorby后來成為Verilog-XL的主要設計者和Cadence公司的第一個合伙人。v在19841985年間,Moorby設計出了第一個Verilog-XL的仿真器。v1986年,Moorby提出了用于快速門級仿真的XL算法。v1990年,Cadence公司收購了GDA公司v1991年
6、,Cadence公司公開發(fā)表Verilog語言,成立了OVI(Open Verilog International)組織來負責Verilog HDL語言的發(fā)展。v1995年制定了Verilog HDL的IEEE標準,即IEEE1364。 Verilog HDL 公開發(fā)表 CADENCE 公司購買 Verilog 版權 1990 1989 1980s Verilog-XL 誕生 模擬和數字都適用的 Verilog 標準 公開發(fā)表 1998 ? VerilogHDLIEEE1364 標準 公開發(fā)表 有關 VerilogHDL 的全部權利都移交給 OVI(Open Verilog Internati
7、onal) 1995 1990Verilog HDL 的發(fā)展歷史Verilog的用途vVerilog的主要應用包括:ASIC和FPGA工程師編寫可綜合的RTL代碼高抽象級系統(tǒng)仿真進行系統(tǒng)結構開發(fā)測試工程師用于編寫各種層次的測試程序用于ASIC和FPGA單元或更高層次的模塊的模型開發(fā)Verilog HDL 的抽象級別行為綜合邏輯綜合綜合前仿真綜合后仿真布局布線技術說明: -設計文檔設計文檔/算法描述算法描述用高級行為的用高級行為的VerilogVerilog模塊表示模塊表示RTL/功能級:用可綜合的用可綜合的VerilogVerilog模塊表示模塊表示門級/結構級:用實例引用的用實例引用的Ver
8、ilogVerilog模塊表示模塊表示版圖布局/物理級:用幾何形狀來表示用幾何形狀來表示Verilog HDL 的抽象級別vVerilog既是一種行為描述的語言也是一種結構描述語言。Verilog模型可以是實際電路的不同級別的抽象。這些抽象的級別包括:抽象級(Levels of Abstraction)v在抽象級上需要進行折衷系統(tǒng)說明系統(tǒng)說明-設計文檔設計文檔/算術描述算術描述RTL/功能級功能級-Verilog門級門級/結構級結構級-Verilog版圖版圖/物理級物理級-幾何圖形幾何圖形詳細程度詳細程度 低低 高高輸入輸入/仿真速度仿真速度 高高 低低抽象級(Levels of Abstra
9、ction)Verilog可以在三種抽象級上進行描述行為級行為級 用功能塊之間的數據流對系統(tǒng)進行描述用功能塊之間的數據流對系統(tǒng)進行描述 在需要時在函數塊之間進行調度賦值。在需要時在函數塊之間進行調度賦值。RTL級級/功能級功能級用功能塊內部或功能塊之間的數據流和控制信號描述系統(tǒng)用功能塊內部或功能塊之間的數據流和控制信號描述系統(tǒng)基于一個已定義的時鐘的周期來定義系統(tǒng)模型基于一個已定義的時鐘的周期來定義系統(tǒng)模型結構級結構級/門級門級用基本單元用基本單元(primitive)或低層元件或低層元件(component)的連接來描述系的連接來描述系統(tǒng)以得到更高的精確性,特別是時序方面。統(tǒng)以得到更高的精確性
10、,特別是時序方面。在綜合時用特定工藝和低層元件將在綜合時用特定工藝和低層元件將RTL描述映射到門級網表描述映射到門級網表抽象級(Levels of Abstraction)v設計工程師在不同的設計階段采用不同的抽象級首先在行為級描述各功能塊,以降低描述難度,提高仿真速度。在綜合前將各功能模塊進行RTL級描述。用于綜合的庫中的大多數單元采用結構級描述。在本教程中的結構級描述部分將對結構級(門級)描述進行更詳細的說明。vVerilog還有一定的晶體管級描述能力及算法級描述能力行為級和RTL級vMUX的行為可以描述為:只要信號a或b或sel發(fā)生變化,如果sel為0則選擇a輸出;否則選擇b輸出。mod
11、ule muxtwo (out, a, b, sel); input a, b, sel; output out; reg out;always ( sel or a or b) if (! sel) out = a; else out = b;endmodule這個行為級這個行為級RTL描述不處理描述不處理X和和Z狀態(tài)輸入,并且沒有延時。狀態(tài)輸入,并且沒有延時。在行為級模型中,邏輯功能描述采用高級語言結構,如在行為級模型中,邏輯功能描述采用高級語言結構,如, while,wait,if, case。Testbench(test fixture)通常采用行為級描述。所有行為級結構在通常采用行為
12、級描述。所有行為級結構在testbench描描述中都可以采用。述中都可以采用。RTL模型中數據流都是基于時鐘的。任何時鐘元件在時鐘沿處的行為都要精模型中數據流都是基于時鐘的。任何時鐘元件在時鐘沿處的行為都要精確描述。確描述。RTL級描述是行為級級描述是行為級Verilog的子集。的子集。結構級描述v結構級Verilog適合開發(fā)小規(guī)模元件,如ASIC和FPGA的單元Verilog內部帶有描述基本邏輯功能的基本單元(primitive),如and門。用戶可以定義自己的基本單元UDP(User Defined Privitives)綜合產生的結果網表通常是結構級的。用戶可以用結構級描述粘接(glue
13、)邏輯。v下面是MUX的結構級描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時。module twomux (out, a, b, sl); input a, b, sl; output out; not u1 (nsl, sl ); and #1 u2 (sela, a, nsl); and #1 u3 (selb, b, sl); or #2 u4 (out, sela, selb);endmodule綜合不綜合不支持支持!簡單的簡單的 Verilog HDL 模塊示例模塊示例目的:通過簡單的例子了解Verilog模塊的基本構成了解Verilog模塊的層次結構和行為模塊了解V
14、erilog模塊的測試 下面先介紹幾個簡單的Verilog HDL程序,然后從中分析Verilog HDL程序的特性。例 1 module adder ( count,sum,a,b,cin ); input 2:0 a,b; input cin; output count; output 2:0 sum; assign count, sum=a+b+cin; endmodule 這個例子描述了一個三位的加法器。從例子中可以看出整個Verilog HDL程序是嵌套在module和endmodule聲明語句里的。簡單的簡單的 Verilog HDL 模塊模塊例2:module compare (
15、 equal,a,b ); output equal; /聲明輸出信號聲明輸出信號equal input 1:0 a,b; /聲明輸入信號聲明輸入信號a,b assign equal=(a=b)?)?1:0; /*如果兩個輸入信號相等如果兩個輸入信號相等,輸出為輸出為1。否則為。否則為0*/endmodule這個程序描述了一個比較器.在這個程序中,/*.*/和/.表示注釋部分,注釋只是為了方便程序員理解程序,對編譯是不起作用的。簡單的 Verilog HDL 模塊例3:module trist2(out,in,enable); output out; input in, enable; buf
16、if1 mybuf(out,in,enable);endmodule這個程序描述了一個三態(tài)驅動器。程序通過調用一個實例元件bufif1來實現其功能。簡單的 Verilog HDL 模塊 module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); endmodule module mytri(out,in,enable); output out; input in, enable; assign out = enable? In : bz; endmodule簡單的簡單的 V
17、erilog HDL 模塊模塊例4:上述程序例子通過另一種方法描述了一個三態(tài)門。在這個例子中存在著兩個模塊:模塊trist1 調用模塊 mytri 的實例元件 tri_inst。模塊 trist1 是上層模塊。模塊 mytri 則被稱為子模塊。通過這種結構性模塊構造可構成特大型模塊。簡單的 Verilog HDL 模塊通過上面的例子可以看到通過上面的例子可以看到: Verilog HDL程序是由模塊構成的。模塊是可以進行層次嵌套的。正因為程序是由模塊構成的。模塊是可以進行層次嵌套的。正因為如此如此,才可以將大型的數字電路設計分割成不同的小模塊來實現特定的功能才可以將大型的數字電路設計分割成不同
18、的小模塊來實現特定的功能,最后通過頂層模塊調用子模塊來實現整體功能。最后通過頂層模塊調用子模塊來實現整體功能。 每個模塊要進行端口定義每個模塊要進行端口定義,并說明輸入輸出口并說明輸入輸出口,然后對模塊的功能進行行為然后對模塊的功能進行行為邏輯描述。邏輯描述。 Verilog HDL程序的書寫格式自由程序的書寫格式自由,一行可以寫幾個語句一行可以寫幾個語句,一個語句也可以一個語句也可以分寫多行。分寫多行。 除了除了endmodule語句外語句外,每個語句和數據定義的最后必須有分號每個語句和數據定義的最后必須有分號 可以用可以用/*.*/和和/.對對Verilog HDL程序的任何部分作注釋。一
19、個好的程序的任何部分作注釋。一個好的,有使有使用價值的源程序都應當加上必要的注釋用價值的源程序都應當加上必要的注釋,以增強程序的可讀性和可維護性。以增強程序的可讀性和可維護性。模塊的結構模塊的結構 Verilog的基本設計單元是的基本設計單元是“模塊模塊”(block)。一個模。一個模塊是由兩部分組成的:一)塊是由兩部分組成的:一)描述接口描述接口;二);二)描述邏輯功描述邏輯功能能,即定義輸入是如何影響輸出的。下面舉例說明:,即定義輸入是如何影響輸出的。下面舉例說明:模塊的結構模塊的結構從上面的例子可以看出:從上面的例子可以看出:- Verilog模塊結構完全嵌在模塊結構完全嵌在module
20、和和endmodule聲明語句之間;聲明語句之間;-每個每個Verilog程序包括四個主要部分:程序包括四個主要部分:端口定義、端口定義、I/O說明、說明、內部信號聲明、內部信號聲明、功能定義功能定義。模塊的測試模塊的測試如何檢查上述例子其功能是否正確?如何檢查上述例子其功能是否正確? 需要有測試激勵信號輸入到被測模塊需要有測試激勵信號輸入到被測模塊 需要記錄被測模塊的輸出信號需要記錄被測模塊的輸出信號 需要把用功能和行為描述的需要把用功能和行為描述的Verilog模塊模塊 轉換為門級電路互連的電路結構(綜合)。轉換為門級電路互連的電路結構(綜合)。 需要對已經轉換為門級電路結構的邏輯需要對已
21、經轉換為門級電路結構的邏輯 進行測試(門級電路仿真)。進行測試(門級電路仿真)。 需要對布局布線后的電路結構進行測試。需要對布局布線后的電路結構進行測試。 (布局布線后仿真)。(布局布線后仿真)。模塊的測試被測模塊被測模塊激 勵 和 控激 勵 和 控制信號制信號輸出響應輸出響應和驗證和驗證模塊的測試測試模塊常見的形式:測試模塊常見的形式:module t;reg ; /被測模塊輸入被測模塊輸入/輸出變量類型定義輸出變量類型定義wire; /被測模塊輸入被測模塊輸入/輸出變量類型定義輸出變量類型定義initial begin ; ; ; end /產生測試信號產生測試信號always #dela
22、y begin ; end /產生測試信號產生測試信號Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) );/被測模塊的實例引用被測模塊的實例引用initial begin .; .; . end /記錄輸出和響應記錄輸出和響應endmoduleinitial initial always所有的過程塊都在所有的過程塊都在0 0時時刻同時啟動;它們是刻同時啟動;它們是并行的,在模塊中不并行的,在模塊中不分前后。分前后。 initialinitial塊塊 只執(zhí)行只執(zhí)行一次。一次。 alwaysalways塊塊 只要符合只要符合觸發(fā)條
23、件可以循環(huán)執(zhí)觸發(fā)條件可以循環(huán)執(zhí)行。行。測試模塊中常用的過程塊:測試模塊中常用的過程塊:模塊的測試模塊的測試如何描述激勵信號:module t;reg a, b, sel;wire out;/引用多路器實例引用多路器實例 mux2_m (out, a, b, sel);/加入激勵信號加入激勵信號initial begin a=0; b=1; sel=0; #10 b=0; #10 b=1; sel=1; #10 a=1; #10 $stop; end模塊的測試如何觀察被測模塊的響應: 在在initial 塊中,用系統(tǒng)任務塊中,用系統(tǒng)任務$time 和和 $monitor $time 返回當前的仿
24、真時刻返回當前的仿真時刻 $monitor 只要在其變量列表中有某一個或某幾個變只要在其變量列表中有某一個或某幾個變 量值發(fā)生變化,便在仿真單位時間結束時顯示其變量值發(fā)生變化,便在仿真單位時間結束時顯示其變 量列表中所有變量的值。量列表中所有變量的值。例: initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end如何把被測模塊的輸出變化記錄到數據庫文件中?(文件格式為(文件格式為VCD,大多數的波形顯示工具都能讀取該格式)大多數的波形顯示工具都能讀取該格式)可用以下七個系統(tǒng)任務:$dumpfile(“fil
25、e.dump”); /打開記錄數據變化的數據文件打開記錄數據變化的數據文件$dumpvars(); /選擇需要記錄的變量選擇需要記錄的變量$dumpflush; /把記錄在數據文件中的資料轉送到硬盤保把記錄在數據文件中的資料轉送到硬盤保存存$dumpoff; /停止記錄數據變化停止記錄數據變化$dumpon; /重新開始記錄數據變化重新開始記錄數據變化$dumplimit(); /規(guī)定數據文件的大?。ㄗ止?jié))規(guī)定數據文件的大?。ㄗ止?jié))$dumpall; /記錄所有指定信號的變化值到數據文件中記錄所有指定信號的變化值到數據文件中模塊的測試模塊的測試如何把被測模塊的響應變化記錄到數據庫文件中?舉例說
26、明:$dumpvars; /記錄各層次模塊中所有信號的變化記錄各層次模塊中所有信號的變化$dumpvars(1,top); /只記錄模塊只記錄模塊top中所有信號的變化中所有信號的變化$dumpvars(2,top.u1); /記錄記錄top模塊中實例模塊中實例u1和它以下一層子模塊所有信號的變化和它以下一層子模塊所有信號的變化$dumpvars(0,top.u2,top.u1.u13.q); /記錄記錄top模塊中實例模塊中實例u2和它本層所有信號的變化和它本層所有信號的變化,還有還有top.u1.u13.q信號的變化。信號的變化。$dumpvars(3,top.u2,top.u1); /記
27、錄記錄top模塊中模塊中u2和和u1所有信號的變化(包括其兩層以下子模所有信號的變化(包括其兩層以下子模塊的信號變化)。塊的信號變化)。模塊的測試模塊的測試如何把被測模塊的響應變化記錄到數據庫文件中?舉例說明:下面的下面的 Verilog 代碼段可以代替測試文件中的系統(tǒng)代碼段可以代替測試文件中的系統(tǒng)任務任務$monitor initial begin $dumpfile(“vlog.dump”); $dumpvars(0,top); endVerilog HDL 語法要點語法要點Verilog HDL 語法要點語法要點Verilog 與與 C 的主要不同點的主要不同點:Verilog 有許多語
28、法規(guī)則與有許多語法規(guī)則與 C 語言一致。語言一致。 但與但與 C 語言有根本的區(qū)別:語言有根本的區(qū)別:- 并行性并行性- 塊的含義:塊的含義: initial 塊塊 和和 always塊塊- 兩種賦值語句:兩種賦值語句: 阻塞阻塞 賦值賦值 “ = ” 非阻塞賦值非阻塞賦值 “= ”空格空格和注釋和注釋 Verilog 是一種格式很自由的語言。是一種格式很自由的語言。 空格在文本中起一個分離符的作用,空格在文本中起一個分離符的作用, 別的沒有其他用處。別的沒有其他用處。 單行注釋符用單行注釋符用 /* 與與C 語言一致語言一致 多行注釋符用多行注釋符用 /* - */ 與與C 語言一致語言一致
29、空白符和注釋空白符和注釋module MUX2_1 (out, a, b, sel); / Port declarations output out; input sel, / control input b, /* data inputs */ a;/* The netlist logic selects input ”a” when sel = 0 and it selects ”b” when sel = 1.*/ not (sel_, sel); and (a1, a, sel_), (b1, b, sel); / What does this line do? or (out, a1
30、, b1);endmodule格式自由格式自由使用空白符提高可讀性及代碼組使用空白符提高可讀性及代碼組織??棥erilog忽略空白符除非用于忽略空白符除非用于分開其它的語言標記。分開其它的語言標記。多行注釋,在多行注釋,在/* */內內單行注釋單行注釋到行末結束到行末結束整數常量和實數常量整數常量和實數常量v整數的大小可以定義也可以不定義。整數表示為: 其中 size :大小,由十進制數表示的位數(bit)表示。缺省為32位 base:數基,可為2(b)、8(o)、10(d)、16(h)進制。缺省為10進制 value:是所選數基內任意有效數字,包括X、Z。v實數常量可以用十進制或科學表示法
31、表示。 Verilog中,常量中,常量(literals)可是整數也可以是實數可是整數也可以是實數12 unsized decimal (zero-extended to 32 bits)H83a unsized hexadecimal (zero- extended to 32 bits)8b1100_ 0001 8-bit binary64hff01 64-bit hexadecimal (zero- extended to 64 bits)9O17 9-bit octal32bz01x Z-extended to 32 bits3b1010_ 1101 3-bit number, tru
32、ncated to 3b1016.3 decimal notation32e- 4 scientific notation for 0.00324.1E3 scientific notation for 4100整數常量和實數常量整數常量和實數常量v整數的大小可以定義也可以不定義。整數表示為:整數的大小可以定義也可以不定義。整數表示為:數字中(數字中(_)忽略,便于查看)忽略,便于查看沒有定義大小沒有定義大小(size)整數缺省為整數缺省為32位位缺省數基為十進制缺省數基為十進制數基數基(base)和數字和數字(16進制進制)中的字母無大小寫之分中的字母無大小寫之分當數值當數值value大于指
33、定的大小時,截去高位。如大于指定的大小時,截去高位。如 2b1101表示的是表示的是2b01v實數常量實數常量實數可用科學表示法或十進制表示實數可用科學表示法或十進制表示科學表示法表示方式:科學表示法表示方式: , 表示:表示: 尾數尾數10指數指數字符串(字符串(string)v字符串要在一行中用雙引號括起來,也就是不能跨行。字符串要在一行中用雙引號括起來,也就是不能跨行。v字符串中可以使用一些字符串中可以使用一些C語言轉義語言轉義(escape)符,如符,如t nv可以使用一些可以使用一些C語言格式符語言格式符(如如%b)在仿真時產生格式在仿真時產生格式化輸出:化輸出: ”This is
34、a normal string” ”This string has a t tab and ends with a new linen” ”This string formats a value: val = %b”Verilog中,字符串大多用于顯示信息的命令中。中,字符串大多用于顯示信息的命令中。Verilog沒沒有字符串數據類型有字符串數據類型字符串(字符串(string)轉義符及格式符將在驗證支持部分討論轉義符及格式符將在驗證支持部分討論 格式符格式符%h%o%d%b%c%s%v%m%thexoctdecbinACSIIstringstrengthmoduletime轉義符tn”tab
35、換行換行反斜杠反斜杠雙引號雙引號ASCII representation of above格式符格式符%0d表示沒有前導表示沒有前導0的十進制數的十進制數標識符標識符(identifiers)v標識符是用戶在描述時給標識符是用戶在描述時給Verilog對象起的名字對象起的名字v標識符必須以字母標識符必須以字母(a-z, A-Z)或或( _ )開頭,后面可以是字母、數字、開頭,后面可以是字母、數字、( $ )或或( _ )。v最長可以是最長可以是1023個字符個字符v標識符區(qū)分大小寫,標識符區(qū)分大小寫,sel和和SEL是不同的標識符是不同的標識符v模塊、端口和實例的名字都是標識符模塊、端口和實例
36、的名字都是標識符module MUX2_1 (out, a, b, sel);output out;input a, b, sel; not not1 (sel_, sel); and and1 (a1, a, sel_); and and2 (b1, b, sel); or or1 (out, a1, b1);endmoduleVerilog標識符標識符標識符標識符(identifiers)v有效標識符舉例:有效標識符舉例: shift_reg_a busa_index _bus3v無效標識符舉例:無效標識符舉例: 34net / 開頭不是字母或開頭不是字母或“_” a*b_net / 包含
37、了非字母或數字,包含了非字母或數字, “$” “_” n238 /包含了非字母或數字,包含了非字母或數字, “$” “_”vVerilog區(qū)分大小寫,所有區(qū)分大小寫,所有Verilog關鍵詞使用小寫字母關鍵詞使用小寫字母。轉義標識符( Escaped identifiers)v可以包含任何可打印字符可以包含任何可打印字符v反斜杠及空白符不是標識符的一部分反斜杠及空白符不是標識符的一部分module 2:1MUX (out, a, b, sel);output out;input a, b, sel; not not1(sel ,sel); and and1( a1, a, sel ); and
38、 and2( b1, b, sel); or or1( out, a1, b1);endmodulev使用轉義符可能會產生一些問題,并且不是所有工具都支持。使用轉義符可能會產生一些問題,并且不是所有工具都支持。有時用轉義符完成一些轉換,如產生邏輯圖的有時用轉義符完成一些轉換,如產生邏輯圖的Verilog網表。綜網表。綜合工具輸出綜合網表時也使用轉義符。合工具輸出綜合網表時也使用轉義符。不建議使用轉義符。不建議使用轉義符。轉義標識符由反斜杠轉義標識符由反斜杠“”開始,空白符結束開始,空白符結束Escaped Identifiers轉義標識符轉義標識符( Escaped identifiers)轉
39、義標識符允許用戶在標識符中使用非法字符。如:轉義標識符允許用戶在標識符中使用非法字符。如: #sel busa+ index A,B top. 3inst .net1 / 在層次化名字中轉義符在層次化名字中轉義符 轉義標識符必須以空格結束轉義標識符必須以空格結束語言專用標記語言專用標記( tokens)系統(tǒng)任務及函數系統(tǒng)任務及函數 $v$符號指示這是系統(tǒng)任務和函數符號指示這是系統(tǒng)任務和函數v系統(tǒng)函數有很多,如:系統(tǒng)函數有很多,如:返回當前仿真時間返回當前仿真時間$time顯示顯示/監(jiān)視信號值監(jiān)視信號值($display, $monitor)停止仿真停止仿真$stop結束仿真結束仿真$finis
40、h $monitor($time, “a = %b, b = %h”, a, b); 當信號當信號a或或b的值發(fā)生變化時,系統(tǒng)任務的值發(fā)生變化時,系統(tǒng)任務$monitor顯示當前仿真顯示當前仿真時間,信號時間,信號a值值(二進制格式二進制格式), 信號信號b值(值(16進制格式)。進制格式)。語言專用標記語言專用標記( tokens)延時說明延時說明v“#”用于說明過程用于說明過程(procedural)語句和門的實例的延時,但不能用語句和門的實例的延時,但不能用于模塊的實例化。于模塊的實例化。module MUX2_ 1 (out, a, b, sel) ;output out ;input
41、 a, b, sel ;not #1 not1( sel_, sel);and #2 and1( a1, a, sel_);and #2 and2( b1, b, sel);or #1 or1( out, a1, b1);endmodulev門延時有很多類名字:門延時門延時有很多類名字:門延時(gate delay),傳輸延時,傳輸延時(propagation delay),固有延時,固有延時(intrinsic delay),對象內在延,對象內在延時時(intra-object delay)編譯引導編譯引導(Compiler Directives)v( )符號說明一個編譯指導。主鍵盤左上角小
42、寫鍵符號說明一個編譯指導。主鍵盤左上角小寫鍵 “ ”v這些編譯指導使仿真編譯器進行一些特殊的操作這些編譯指導使仿真編譯器進行一些特殊的操作v編譯指導一直保持有效直到被覆蓋或解除編譯指導一直保持有效直到被覆蓋或解除vresetall 復位所有的編譯指導為缺省值,應該在其它編譯指復位所有的編譯指導為缺省值,應該在其它編譯指導之前使用導之前使用v常用的編譯引導有:常用的編譯引導有:v definev includev timescalev uselibv resetall .文本替換文本替換(substitution) - define編譯指導編譯指導define提供了一種簡單的文本替換的功能提供了
43、一種簡單的文本替換的功能 define 在編譯時在編譯時替換替換??商岣呙枋龅目勺x性。可提高描述的可讀性。define not_delay #1define and_delay #2define or_delay #1module MUX2_1 (out, a, b, sel);output out;input a, b, sel;not not_delay not1( sel_, sel);and and_delay and1( a1, a, sel_);and and_delay and2( b1, b, sel);or or_delay or1( out, a1, b1);endmodu
44、le定義定義not_delay使用使用not_delay文本替換文本替換(substitution)v解除定義的宏,使用解除定義的宏,使用 undef macro_namev使用編譯指導使用編譯指導define,可以,可以提高描述的可讀性提高描述的可讀性定義全局設計參數,如延時和矢量的位數。這些參數可以定定義全局設計參數,如延時和矢量的位數。這些參數可以定義在同一位置。這樣,當要修改設計配置時,只需要在一個義在同一位置。這樣,當要修改設計配置時,只需要在一個地方修改。地方修改。定義定義Verilog命令的簡寫形式命令的簡寫形式 define vectors_ file /usr1/chrisz
45、/library/vectors define results_ file / usr1/chrisz/library/resultsv可以將可以將define放在一個文件中,與其它文件一起編譯放在一個文件中,與其它文件一起編譯。文本包含文本包含(inclusion) - includev編譯指導編譯指導include在當前內容中插入一個文件在當前內容中插入一個文件 格式:格式: include “”如如include global.vinclude parts/count. vinclude ././library/mux. v”vinclude可用于:可用于:include保存在文件中的全
46、局的或經常用到的一些定義,如文本宏保存在文件中的全局的或經常用到的一些定義,如文本宏在模塊內部在模塊內部include一些任務(一些任務(tasks),提高代碼的可維護性。,提高代碼的可維護性。可以是相對路徑或絕對路徑Timescalevtimescale 說明時間單位及精度說明時間單位及精度格式:格式:timescale / 如:如:timescale 1 ns / 100 ps time_unit: 延時或時間的測量單位延時或時間的測量單位time_precision: 延時值超出精度要先舍入后使用延時值超出精度要先舍入后使用vtimescale必須在模塊之前出現必須在模塊之前出現time
47、scale 1 ns / 10 ps/ All time units are in multiples of 1 nanosecondmodule MUX2_1 (out, a, b, sel);output out;input a, b, sel;not #1 not1( sel_, sel);and #2 and1( a1, a, sel_);and #2 and2( b1, b, sel);or #1 or1( out, a1, b1);endmoduleTimescalevtime_precision不能大于不能大于time_unitvtime_precision和和time_unit
48、的表示方法:的表示方法:integer unit_stringinteger : 可以是可以是1, 10, 100unit_string: 可以是可以是s(second), ms(millisecond), us(microsecond), ns(nanosecond), ps(picosecond), fs(femtosecond)以上以上integer和和unit_string可任意組合可任意組合vprecision的時間單位應盡量與設計的實際精度相同。的時間單位應盡量與設計的實際精度相同。precision是仿真器的仿真時間步。是仿真器的仿真時間步。若若time_unit與與precis
49、ion_unit差別很大將嚴重影響仿真速度。差別很大將嚴重影響仿真速度。如說明一個如說明一個timescale 1s / 1ps,則仿真器在,則仿真器在1秒內要掃描其秒內要掃描其事件序列事件序列1012次;而次;而timescale 1s/1ms則只需掃描則只需掃描103次。次。v如果沒有如果沒有timescale說明將使用缺省值,一般是說明將使用缺省值,一般是ns。Timescalev所有所有timescale中的最小值決定仿真時的最小時間單位。中的最小值決定仿真時的最小時間單位。這是因為仿真器必須對整個設計進行精確仿真這是因為仿真器必須對整個設計進行精確仿真 在下面的例子中,仿真時間單位(
50、在下面的例子中,仿真時間單位(STU)為)為100fstimescale 1ns/ 10psmodule1 (. . .);not #1.23 (. . .) / 1.23ns or 12300 STUs. . .endmoduletimescale 100ns/ 1nsmodule2 (. . .);not #1.23 (. . .) / 123ns or 1230000 STUs. . .endmoduletimescale 1ps/ 100fsmodule3 (. . .);not #1.23 (. . .) / 1.23ps or 12 STUs (rounded off). . .e
51、ndmodule編譯引導語句編譯引導語句 uselib 編譯引導語句:編譯引導語句: 用于定義仿真器到哪里去找?guī)煸糜诙x仿真器到哪里去找?guī)煸?如果該引導語句啟動的話,它就一直有效如果該引導語句啟動的話,它就一直有效 直到遇到另外直到遇到另外一個一個uselib的定義或的定義或resetall語句語句 比其他配置庫搜索路徑的命令選項作用大比其他配置庫搜索路徑的命令選項作用大 如果仿真器在如果仿真器在uselib定義的地點找不到器件庫,它不會定義的地點找不到器件庫,它不會轉向由編譯命令行轉向由編譯命令行-v 和和-y選項指定的器件庫去找。選項指定的器件庫去找。編譯引導語句使用使用 useli
52、b 的語法:的語法: uselib 器件庫器件庫1的地點的地點 器件庫器件庫2的地點的地點 。上面的器件庫地點可用以下兩種方法表示:上面的器件庫地點可用以下兩種方法表示:1) file = 庫文件名的路徑庫文件名的路徑2) dir = 庫目錄名的路徑庫目錄名的路徑 libext = .文件擴展文件擴展例如:例如:uselib dir =/lib/FAST_lib/uselib dir =/lib/TTL_lib/ libext=.v file = /libs/TTL_U/udp.libVerilog HDL的數據類型和邏輯值0 0、低、偽、邏輯低、地、低、偽、邏輯低、地、VSS、負插入、負插入
53、01XZ0bufbufbufbufif11 1、高、真、邏輯高、電源、高、真、邏輯高、電源、VDD、正插入、正插入X X、不確定:邏輯沖突無法確定其邏輯值、不確定:邏輯沖突無法確定其邏輯值HiZHiZ、高阻抗、三態(tài)、無驅動源、高阻抗、三態(tài)、無驅動源 Verilog 的四種邏輯值的四種邏輯值主要的數據類型Verilog 有三種主要的數據類型:有三種主要的數據類型: Nets 表示器件之間的物理連接表示器件之間的物理連接, 稱為網絡連接類型稱為網絡連接類型Register 表示抽象的儲存單元,稱為寄存器表示抽象的儲存單元,稱為寄存器/變量類型變量類型Parameter 表示運行時的常數,稱為參數類
54、型表示運行時的常數,稱為參數類型 netsabslselbselanslout主要的數據類型Nets(網絡連線):網絡連線): net需要被持續(xù)的驅動,需要被持續(xù)的驅動,驅動它的可以是門和模塊。驅動它的可以是門和模塊。驅動端信號的改變會立刻驅動端信號的改變會立刻傳遞到輸出的連線上。傳遞到輸出的連線上。例如:右圖上,例如:右圖上,selb的改的改變,會自動地立刻影響或變,會自動地立刻影響或門的輸出。門的輸出。連接(Nets) 類型變量的種類:在為不同工藝的基本元件建立庫模型的時候,常常需要用不同的在為不同工藝的基本元件建立庫模型的時候,常常需要用不同的連接類型來與之對應,使其行為與實際器件一致。
55、常見的有以下連接類型來與之對應,使其行為與實際器件一致。常見的有以下幾種。幾種。 類型類型 功能功能 wire, tri 對應于標準的互連線(缺?。跇藴实幕ミB線(缺省) supply1, supply2 對應于電源線或接地線對應于電源線或接地線 wor, trior 對應于有多個驅動源的線或邏輯連接對應于有多個驅動源的線或邏輯連接 wand, triand 對應于有多個驅動源的線與邏輯連接對應于有多個驅動源的線與邏輯連接 trireg 對應于有電容存在能暫時存儲電平的連接對應于有電容存在能暫時存儲電平的連接 tri1, tri0 對應于需要上拉或下拉的連接對應于需要上拉或下拉的連接如果不
56、明確地說明連接是何種類型,應該是指如果不明確地說明連接是何種類型,應該是指 wire 類型。類型。主要的數據類型abslselbselansloutreg_areg_selreg_b主要的數據類型寄存器(register)類型變量 register 型變量能保持其值,直到它被賦于新的值。型變量能保持其值,直到它被賦于新的值。register 型變量常用于行為建模,產生測試的激勵信號。型變量常用于行為建模,產生測試的激勵信號。常用行為語句結構來給寄存器類型的變量賦值。常用行為語句結構來給寄存器類型的變量賦值。主要的數據類型 寄存器(register)類型變量的數據類型 寄存器類型變量共有四種數據
57、類型:寄存器類型變量共有四種數據類型: 類型類型 功能功能 . reg 無符號整數變量,可以選擇不同的位寬。無符號整數變量,可以選擇不同的位寬。 integer 有符號整數變量,有符號整數變量,32位寬,算術運算可產生位寬,算術運算可產生2的的 補碼。補碼。 real 有符號的浮點數,雙精度。有符號的浮點數,雙精度。 time 無符號整數變量,無符號整數變量,64位寬(位寬(Verilog-XL仿真仿真 工具用工具用64位的正數來記錄仿真時刻)位的正數來記錄仿真時刻)Verilog中中net和和register聲明語法聲明語法vnet聲明 range delay , net_name;net_
58、type: net類型range: 矢量范圍,以MSB:LSB格式delay: 定義與net相關的延時net_name: net名稱,一次可定義多個net, 用逗號分開。v寄存器聲明 range , reg_name;reg_type:寄存器類型range: 矢量范圍,以MSB:LSB格式。只對reg類型有效reg_name :寄存器名稱,一次可定義多個寄存器,用逗號分開Verilog中中net和和register聲明語法聲明語法v舉例:reg a; /一個標量寄存器wand w; / 一個標量wand類型netreg 3: 0 v; / 從MSB到LSB的4位寄存器向量reg 7: 0 m,
59、 n; / 兩個8位寄存器tri 15: 0 busa; / 16位三態(tài)總線wire 0: 31 w1, w2; / 兩個32位wire,MSB為bit0舉例說明數據類型的選擇module top;wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; . endendmodule 模塊DUT的邊界輸入口輸出口輸出/入口netnetnet/registernetnet/registernetinoutmodule DUT(Y, A, B_);output Y;input A,B: wire Y, A, B;
60、and (Y, A, B);endmodule主要的數據類型選擇正確的數據類型選擇正確的數據類型module top;wire y; reg a, b;DUT u1 (y, a, b) ;initial begina = 0; b = 0; #5 a = 1; endendmodulemodule DUT (Y, A, B);output Y;input A, B;wire Y, A, B;and (Y, A, B) ;endmodule輸入端口可以由輸入端口可以由net/register驅動,但驅動,但輸入端口只能是輸入端口只能是net輸出端口可以是輸出端口可以是net/register類型
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025━2030年中國化妝品包項目投資可行性研究報告
- 電機與電氣控制技術(第3版)(微課版)(AR版)授課計劃
- 2025年商超貨架項目發(fā)展計劃
- 2025年射頻同軸電纜組件項目建議書
- 預激綜合征護理問題及措施
- 腦干畸形出血的護理查房
- 2025年醫(yī)用氣體終端合作協(xié)議書
- 2024遼寧省中考真題生物+答案
- 銷售經驗培訓
- 2025年文化遺產保護服務合作協(xié)議書
- 人教版PEP初中英語中考總復習:復習重點課件
- 數字化消防管理解決方案
- 二類汽修廠汽車維修管理新規(guī)制度匯編
- 交接班流程綱要綱要圖
- 浙江省衢州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 初中英語《Unit5-Do-you-remember-what-you-were-doing》教學課件設計
- 品德家庭小賬本
- 癥狀性大腦中動脈慢性閉塞血管內開通治療課件
- 大象版科學四年級下冊第一單元測試卷(含答案)
- 蘇教版一年級數學下冊第二單元《認識圖形(二)》教材分析(定稿)
- 約等于計算題100道乘除法
評論
0/150
提交評論