電子設計自動化:第4章 硬件描述語言Verilog HDL_第1頁
電子設計自動化:第4章 硬件描述語言Verilog HDL_第2頁
電子設計自動化:第4章 硬件描述語言Verilog HDL_第3頁
電子設計自動化:第4章 硬件描述語言Verilog HDL_第4頁
電子設計自動化:第4章 硬件描述語言Verilog HDL_第5頁
已閱讀5頁,還剩95頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章硬件描述語言VerilogHDL廣東工業大學計算機學院2教學內容4.1HDL簡介

4.2初步認知

4.3VerilogHDL基本知識4.4數據類型、操作符和表達式4.5數據流建模

4.6行為級建模

4.7結構級建模

34.1HDL簡介4.1.1關于HDL(硬件描述語言)傳統設計方法對于復雜的數字邏輯電路,設計師從原理設計、功能設計、電路設計到版圖設計一般要一年以上的設計周期,其中僅僅版圖布線一環,工程師就要花費數周的時間才能完成。必須等到樣機完成后才能進行實測和調試,并且為了對設計進行驗證,設計者必須通過搭個硬件平臺對設計進行驗證。隨著大規模集成電路的研發,集成數百萬邏輯門的電路變得非常復雜,而其功能的仿真也很難通過傳統的面包板測試法驗證設計的系統44.1HDL簡介4.1.1關于HDL(硬件描述語言)用一種高級語言來表達大規模集成電路的功能,隱藏其具體實現的細節,對數字電路和數字邏輯系統能夠進行形式化的描述。提高邏輯設計效率,降低設計成本,縮短設計周期;多方位的仿真可以在設計完成之前檢測到其錯誤,減少設計重復的次數,使第一次投片便能成功實現芯片成為可能;使檢測各種設計方案變得容易和方便,對方案的修改只需要修改HDL程序,比修改原理圖容易得多。54.1HDL簡介當今業界的標準中(IEEE標準)主要硬件描述語言:

VHDL美國國防部提出1987年:IEEEstd10761993年:IEEEStd1076-2002

VerilogHDL企業(GDA公司)首創1995年:制定了VerilogHDL的IEEE1364-19952001年:IEEE1364-2001誕生64.1HDL簡介4.1.2VerilogHDL的特點VerilogHDL是在使用最廣泛的C語言的基礎上發展起來的一種硬件描述語言。采用標準的文本格式,充分保留了C語言簡潔、高效的編程風格,最大特點就是易學易用。具有多層次的抽象,用于從算法級、門級到開關級的多種抽象設計層次的數字系統建模。使用同一種建模語言,就可對從最復雜的芯片到完整的電子系統進行描述。VerilogHDL語言己經被絕大多數的IC設計者所采用。74.2初步認知通過本節初步了解:不同風格的程序描述測試平臺仿真操作過程及效果綜合結果84.2.1

門級(結構)風格的描述例:2選1數據選擇器(MUX)電路,使用內置門原語對2選1MUX的結構進行門級風格描述:94.2.2

數據流風格的描述

最基本的機制:使用連續賦值語句右邊表達式的操作數無論何時發生變化,表達式都重新計算,計算結果被賦予左邊表達式的線網類型變量。例:2選1(MUX)電路,使用數據流描述方式描述:104.2.3

行為風格的描述抽象層次更高的設計風格,常用于復雜數字系統的頂層邏輯設計。使用initial語句(只執行一次)和always語句(重復執行)進行行為風格的設計。例:2選1(MUX)電路,使用行為風格描述方式建模

:114.2.4

測試平臺的編寫

測試平臺(testbench):為了模擬數據的輸入和輸出、測試和驗證功能模塊正確性而編寫的另一個模塊。124.2.5

使用Modelsim進行仿真

在Modelsim中進行仿真:使用前述的代碼(2選1MUX模塊及測試平臺),驗證運行的結果。1.新建VerilogHDL文件2.使用Modelsim打開文件3.編譯4.選擇仿真對象5.配置仿真顯示內容6.運行仿真并查看結果操作錄像134.2.6VerilogHDL在電路綜合中的應用

電路綜合:將設計者建立的電路模型與基本邏輯單元庫相結合,得到可以實現設計目標功能的電路。在使用HDL語言對設計進行描述時,可以不用畫出電路圖,而是通過綜合工具(第5章中將進行介紹),把HDL代碼轉換為電路設計。例:2選1MUX的綜合結果:144.3VerilogHDL基本知識

4.3.1標識符和關鍵字1.標識符(Identifier)任意一組字母、數字、$符號和_(下劃線)符號的組合區分大小寫第一個字符必須是字母或者下劃線,不能以數字和$符號開始如:Max,MIN(與Min不同),Four$,_Y20112.轉義標識符以\(反斜線)符號開頭,以空格、制表符或換行符結尾,反斜線和結束空格并不是轉義標識符的一部分

3.關鍵字VerilogHDL中預留的表示特定含義的保留標識符

全部是小寫154.3.2編寫格式1.格式自由格式(代碼可以在一行內編寫,也可以跨越多行編寫)空格、制表符和空白行沒有特殊意義

2.注釋第一種注釋形式:行尾注釋第二種注釋形式:可以跨行164.3.3模塊和端口模塊:模塊是VerilogHDL設計中的基本功能塊,用于描述某個設計的功能或結構,以及它與其它模塊進行通信的端口。端口:模塊與外部環境交互的接口和通道(input,output,inout)。例如IC芯片的輸入輸出引腳就是它的端口。174.3.3模塊和端口184.3.3模塊和端口模塊的調用(1)按順序連接(信號名1,信號名2,….,信號名n)(2)按名字連接(.端口名1(信號名1),.端口名2(信號名2),…..,.端口名n(信號名n))194.3.4

系統任務和系統函數系統任務:任務型的功能調用系統函數:函數型的功能調用相同點:以$字符開始的標識符($<keyword>形式)區別:系統任務:可以有0個或多個返回值,可以帶有延遲系統函數:1個返回值,不允許任何延遲

204.3.3系統任務和系統函數常用的幾個系統任務和系統函數:1.$display任務:類似C語言的printf語句

可用轉義字符輸出顯示各種不同的信息,例:$display("time=%t

,

a=%b

,

b=%b

,

Cin=%b

,

Sum=%b,

Cout=%b"

,

$time

,

pa

,

pb

,

pCin

,

Sum

,

Cout);214.3.3系統任務和系統函數常用的幾個系統任務和系統函數:2.$monitor任務:對信號值變化進行動態監視

$monitor(

"time=%t

,

a=%b

,

b=%b

,

Cin=%b

,

Sum=%b

,

Cout=%b"

,

$time

,

pa

,

pb

,

pCin

,

Sum

,

Cout

);3.$stop任務和$finish任務$stop任務使得仿真被掛起(例:暫停仿真以檢查信號值)$finish任務將結束仿真,并退出仿真環境

224.3.3系統任務和系統函數常用的幾個系統任務和系統函數:4.時間函數:$time,$stime,$realtime

5.$random函數$random[%b]:產生一個范圍在(-b+1)到(b-1)間的隨機數

234.3.4常用編譯器指令編譯器指令(`<keyword>)以`(反引號,注意非單引號’)開頭的標識符常用的編譯器指令1.`define和`undef:

用于文本替換,類似C語言中的#define指令宏定義名必須用大寫在整個編譯過程中都有效,能被多個文件使用`undef指令取消前面定義的宏244.3.4常用編譯器指令2.`include:在編譯期間將一個Verilog源文件包含在另一個Verilog文件中,類似C語言的#include

文件可用相對路徑名或絕對路徑名。編譯時,這一行由位于上一層文件夾中(“../”)的“head.v”的內容替代。254.3.4常用編譯器指令3.`timescale:將時間單位與實際時間相關聯`timescale指令用于定義延遲的單位和延遲精度`timescale指令在模塊說明的外部出現格式:`timescale<time_unit>/<time_precision>time_unit(時間單位)可以是值1、10、和100time_precision(時間精度)可以是s、ms、us、ns、ps和fs`timescale10ns/1ns

#3.33assignT1=A&Cin; //33ns后執行語句

assign#2T2=B&Cin;

//計算B&Cin,延遲2個單位時間后賦值給T2264.4數據類型、操作符和表達式

4.4.1值的種類

四種基本的值0:邏輯0或“假”1:邏輯1或“真”x(X):未知狀態,x對大小寫不敏感z(Z):高阻狀態,z對大小寫不敏感

三類常量整型(Integer)實數型(Real)字符串型(String)

下劃線(_)可以隨意用在整數或實數中,可用來提高易讀性,不能用作首字符274.4.1值的種類1.整數型簡單的十進制格式

由0-9的數字組成的整數可在數值前加上“+”或“-”來表示正負使用二進制補碼形式表示如:32在6位的二進制形式中為100000,在7位二進制形式中為0100000;-15在5位二進制形式中為10001,在6位二進制形式中為110001。284.4.1值的種類1.整數型

指定位寬的基數格式

格式:[size]'[signed]basevalue位寬:例如要表示8(1000)需要4位以上的位寬有s(或S):作為有符號數處理,否則作無符號數處理o或O表示八進制,b或B表示二進制,d或D表示十進制,h或H表示十六進制問號(?)可以代替值z,可以提高程序可讀性294.4.1值的種類1.整數型

304.4.1值的種類314.4.1值的種類2.實數3.字符串

字符串是雙引號內的字符序列,不能分成多行書寫用ASCII值(8位)表示的字符可看作是無符號整數,因此字符串是ASCII值的序列。例:為了存儲字符串“Operation”(9個字符長度),變量需要8*9位324.4.2數據類型

1.線網(Net)體現了結構實體(如門級元件)之間的物理連接關系,線網類型表示硬件單元之間的連接,就像真實電路中一樣值由其連接器件的輸出端連續驅動,缺省值為z(高阻)默認的線網位寬為1wire類型最為常用例:對某個信號的線網類型不予以聲明,則線網類型被缺省地設置為1位的wire型線網

334.4.2數據類型

2.變量(Variable)類型(reg、integer、time、real、realtime)數據存儲單元的抽象,下一次賦值前,變量的值保持不變(1)寄存器(reg)變量類型對應具有狀態保持作用的硬件電路,如觸發器、鎖存器等聲明形式:reg[msb:lsb]reg1,reg2,...regN;變量名全部用小寫字母變量可以取任意長度,變量中的值通常被解釋為無符號數344.4.2數據類型

(2)整型(Integer)變量類型說明形式:integerinteger1,integer2,...intergerN[msb:1sb];一個整數最少有32位(3)時間(time)類型

用于存儲和處理時間,常與系統函數$time一起使用(4)實數(real)和實數時間(realtime)類型354.4.2數據類型

4.數組(Array)類型(1)數組可以用一條數組語句聲明線網和變量的(一維或多維)數組數組的元素可以是標量或者向量(也有稱矢量)可用不同類型數組元素來定義數組364.4.2數據類型

(2)存儲器由reg變量組成的數組(一維)可以通過分別對存儲器中每個字賦值的方法給存儲器賦值

374.4.2數據類型

(2)存儲器“n個1位reg變量”和“1個n位存儲器”是不同的存儲器賦值不能在一條賦值語句中完成,但是變量可以。因此在存儲器被賦值時,需要由一個數組索引來指定。注意:384.4.2數據類型

5.參數

(1)參數

參數是一個常量,使用關鍵字parameter在模塊內定義(常用作定義延遲和變量的寬度)參數被賦值一次后不能像變量一樣重新賦值可用defparam重新定義參數(2)參數與宏定義(`define)參數是局部的,只在其定義的模塊內部起作用,參數的定義在模塊內部,語句結束需寫上分號(;)宏定義是全局的,這對同時編譯的多個文件起作用。定義在模塊外部,語句結束時不寫分號。394.4.3操作數操作數可以是常數、參數、線網、變量、位選、部分位選、存儲器和數組元素、函數調用。

1.位選和部分位選

位選:從向量中抽取特定的位。部分位選:在向量中選擇連續的若干位。

404.4.3操作數2.存儲器和數組元素存儲器元素(單元)是指從存儲器中選擇一個字形式:memory[word_address]414.4.4操作符操作符及其優先級

(表4-2擴充)424.4.4操作符

算術操作符使用說明:(1)取模操作符求出與第一個操作符符號相同的余數。“-7%4”結果為–3(2)任意操作數是X或Z,則結果為X。如“'b110x+'b111”結果為'bxxxx(3)算術操作結果的位寬由最大操作數的位寬決定(4)結果的長度由操作符左端目標長度決定434.4.4操作符(5)表達式中整數數值的使用

在表達式被機器編譯后,一個十進制格式的負整數被編譯為有符號的二進制補碼格式,一個無符號基數格式的負整數被編譯成無符號數。

由于a為整型(Integer)變量,而整型變量類型最少為32位,故-‘d12也使用32位;12的二進制為1100,-12的32位補碼為

“11111111111111111111111111110100”;由于“一個無符號基數格式的負整數被編譯成無符號數”,該數被當成無符號數除以3,得“1010101010101010101010101010001”(31位),該數就是最后的結果1431655761444.4.4操作符(6)有符號數和無符號數線網、reg寄存器變量、沒有符號標記s的基數格式整數作無符號數處理整型變量、十進制形式的整數、有符號的線網、有符號的reg寄存器變量、有符號標記s的基數格式整數作有符號數處理454.4.5表達式

1.表達式的位寬(一般情況下為最大操作數的位寬)為了計算表達式得到正確的結果,控制表達式的位寬非常重要可用以下方法保留進位464.4.5表達式

2.表達式的計算步驟(1)確定表達式的位寬(一般情況下為位寬最大操作數的位寬)(2)確定表達式符號(表達式中任一操作數為無符號數,則表達式為無符號表達式)(3)將表達式中每一操作數的符號類型強制轉換成表達式的符號類型(4)將表達式中每一操作數的位寬擴展成表達式的位寬,有符號數用符號位,無符號數用0進行擴展(5)計算表達式的值474.5數據流建模

數據流建模是根據數據的流動和處理過程對電路進行描述,而不是直接對電路的邏輯門進行實例引用數據流設計可以使得設計者根據數據流來優化電路,而不必專注于電路結構的細節例:兩位選擇信號的四選一多路選擇器:484.5.1關于數據流建模根據邏輯圖寫出數據流描述方式:更趨向行為方式(而不用先畫邏輯圖):494.5.2連續賦值語句只能給線網類型(不能是變量)進行賦值一定要使用assign關鍵字格式:線網數據類型[線網數據位寬]線網型數據名;assign#(延時量)線網型數據名=賦值表達式;只要操作數的值發生變化,表達式立即被計算,新結果立即賦給左邊的線網

504.5.2連續賦值語句隱式連續賦值隱式線網聲明514.5.3延遲1.賦值延遲

用于控制對線網賦予新值的時間如果in1和in2中的任意一個發生變化,那么在計算表達式inl&in2的新值并將新值賦給語句左端之前,會產生10個時間單位的延遲。如果在此10個時間單位期間,in1或in2的值再次發生變化,那么取inl或in2的當前值計算出表達式的新值。這種性質稱為慣性延遲。524.5.3延遲2.線網延遲

允許在聲明線網的時候指定一個延遲,這樣對該線網的任何賦值都會被推遲指定的時間。

總的延遲為15534.6行為級建模

隨著邏輯綜合工具的功能不斷地完善,行為和數據流建模已經成為主流的設計方法,設計者根據行為和數據流來優化電路,而不必專注于電路結構的細節。RTL(RegisterTransferLevel,寄存器傳輸級)通常是指數據流建模和行為級建模的結合。行為級建模——模塊內部只包含過程塊,而不包含模塊實例(模塊調用)語句和基本元件實例(基本元件調用)語句結構級建模——模塊內部只包含模塊實例和基本元件實例語句,而不包含過程塊語句混合建模方式——模塊內部采用各種建模方式的結合544.6.1過程結構一個模塊中可以包含任意多個initial或always語句一個initial或always語句的執行產生一個單獨的控制流(真正意義的并行處理)所有的initial和always語句在0時刻開始并行執行執行順序與其在模塊中的順序無關

554.6.1過程結構1.initial語句(只執行一次,0時刻執行)可使用延遲控制,即等待指定的時間后執行也可使用事件控制,等待指定的事件發生或某一特定的條件為真時執行

564.6.1過程結構2.always語句(重復執行)

always[@(敏感事件列表)][時序控制]過程塊帶敏感事件列表的語句塊(即由事件控制執行)

格式:574.6.1過程結構例:含有1個initial語句和多個always語句

多個控制流并行執行584.6.2時序控制(延遲控制和事件控制)1.延遲控制語句“#5pb=1;”可改為:語句“#5pb=1;#5pa=1;”可改為:594.6.2時序控制(延遲控制和事件控制)2.事件控制(邊沿觸發,電平敏感)(1)邊沿(跳變沿)觸發事件控制格式:<信號名>posedge<信號名>negedge<信號名>

604.6.2時序控制(延遲控制和事件控制)2.事件控制(邊沿觸發,電平敏感)(1)邊沿(跳變沿)觸發事件控制■posedge正跳變沿(positive-edge)包括轉換:0->x、0->z、0->1、x->1、z->1■negedge負跳變沿(negative-edge)包括轉換:1->x、1->z、1->0、x->0、z->0

■可用or(并非“邏輯或”)或逗號(,)分隔多個敏感事件表達式

always@(posedgeclk1ornegedgeclk2)//同時由2個時鐘沿控制,clk1上升沿或clk2下降沿時觸發614.6.2時序控制(延遲控制和事件控制)

等價于:通過“@*”方式可以隱含地把所有變量和線網都包含在敏感事件列表中,相應的過程性語句對于其內部的所有值的變化都敏感。624.6.2時序控制(延遲控制和事件控制)(2)電平敏感事件控制直到條件變為真后,過程語句才執行

634.6.3語句塊VerilogHDL中不光有類似C語言的順序結構程序,還有并發執行的語句塊。1.順序語句塊最常用的過程語句用關鍵詞begin...end劃定按順序地執行語句塊中的所有語句2.并行語句塊語句塊中的各語句并行執行用關鍵詞fork...join劃定并行語句塊內的各條語句指定的時延值都是相對于語句塊開始執行的時間644.6.3語句塊等價654.6.4過程性賦值過程性賦值:在initial或always語句內進行的賦值,順序執行1.語句外部延遲和語句內部延遲語句外部延遲:時間控制部分出現在賦值語句的最左端。表示“語句開始執行時刻”到“計算表達式并賦值的執行時刻”的時間差。語句內部延遲:時間控制部分出現在賦值語句的右式左端。表示“賦值表達式被計算時刻”到“賦值操作被執行時刻”的時間差。664.6.4過程性賦值語句外部延遲語句內部延遲674.6.4過程性賦值除了語句內部延遲控制,還有語句內部事件控制

相當于684.6.4過程性賦值阻塞性過程賦值(

=

在順序塊中,下一條語句的執行將會被本條阻塞性過程賦值語句所阻塞,只有當前語句執行完畢后才開始執行下一條語句(例1)。過程性賦值分為:非阻塞性過程賦值(<=)

不會阻塞下一條語句的執行:本條非阻塞性過程賦值語句執行完畢前,下一條語句也開始執行(例2)。在同一仿真時刻上其它普通操作結束后才得到執行:右端賦值表達式首先進行計算,但要等到仿真時間結束時刻才將結果賦值給左端的變量。

694.6.4過程性賦值例1:阻塞性過程賦值704.6.4過程性賦值例2:非阻塞性過程賦值714.6.4過程性賦值例:同時使用阻塞性和非阻塞性過程賦值:724.6.5分支語句1.if語句(與C語言一致):條件為非零值:執行條件的值為0、x或z:不執行分支語句:if

case734.6.5分支語句修改:讓else與第1個if相關聯代碼中包含2個if語句,容易產生歧義else與第二個if對應744.6.5分支語句多分支選擇控制的例子:

說明:如果sela和selb同時為1,程序只處理分支語句X=pa,而不會再執行X=pb,也就是說前面分支項的優先級更高。

754.6.5分支語句2.case語句

case語句中各分支項的值不能相等,否則出現語法錯誤。case語句通常用來描述微處理器譯碼功能及有限狀態機。764.6.5分支語句例:“每日折扣”問題:根據不同的日子判斷折扣率。774.6.5分支語句在case語句中,控制表達式和分支項表達式之間的比較是按位進行的全等比較,即只有相對應的每一位都彼此相等情況下才認為其相等,x和z值也作為值進行比較。

784.6.5分支語句

case語句有其它兩種形式:casex和casez,這些形式對x和z值使用不同的解釋,語法與case語句完全一致。

casez語句中z是無關位,忽略不進行比較。“?”可代替“z”,表示無關位。casex認為x和z都是無關位,用casex表示上述程序:

794.6.6循環控制語句循環控制語句也是一種高級程序語句,用于進行行為描述,包括4種:forever循環repeat循環while循環for循環1.forever循環語句(無限循環)可用disable語句終止循環

804.6.6循環控制語句2.repeat循環語句(指定循環次數)一種特別點的做法:

814.6.6循環控制語句3.while循環語句(按條件循環)如果條件表達式為x或z,它也同樣按0(假)處理

實現從10到1的倒數和顯示,最后count變量的值為0,但不輸出顯示。824.6.6循環控制語句4.for循環語句(按條件循環)只有在指定條件成立時才重復執行循環體。

834.6.9任務和函數在行為級設計中,把實現同樣的功能的部分提取出來,將其組成子程序,然后在需要時調用,避免重復編碼。絕大多數程序設計語言都提供了“過程”或“子程序”來達到這個目的。任務和函數都必須在模塊內進行定義,其作用范圍僅局限于定義它們的模塊。在任務和函數中只能使用行為級語句,但不能包含always和initial塊。設計者可以在always塊、initial塊以及其他的任務和函數中調用任務和函數。

844.6.9任務和函數比較項目函數任務調用另一個函數可以可以調用另一個任務不可以可以執行時刻總是在仿真時刻0開始執行可以在非零仿真時刻執行是否可包含延遲、事件或者時序控制聲明語句不可以可以輸入變量至少有一個輸入變量可以沒有或者有多個輸入(input)和雙向(inout)變量輸出變量不能有輸出(output)或者雙向(inout)變量可以沒有或者有多個輸出(output)和雙向(inout)變量返回值只能返回一個值不返回任何值854.6.9任務和函數2.任務的定義和調用(task…endtask)

864.6.9任務和函數2.任務的定義和調用(task…endtask)

任務的輸入和輸出在任務開始處聲明輸入和輸出的順序決定了它們在任務調用中的順序任務調用語句是一個過程性語句,可以在always語句或initial語句中使用例:利用任務調用實現交通燈控制874.6.9任務和函數3.函數的定義(function…endfunction)和調用函數只能返回一個值(函數與任務的主要不同之處)函數調用的輸入表達式的排列順序和類型必須與各個輸入端口在函數定義結構中的排列順序嚴格保持一致函數的調用不能單獨作為一條語句出現,它只能作為一個操作數出現在調用語句內。884.6.9任務和函數

例:使用函數定義一個8-3優先編碼器,并調用。

894.7結構建模4.7.1VerilogH

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論