FPGA設(shè)計(jì)與VHDL實(shí)現(xiàn) 課件 ch05 VHDL結(jié)構(gòu)與要素_第1頁
FPGA設(shè)計(jì)與VHDL實(shí)現(xiàn) 課件 ch05 VHDL結(jié)構(gòu)與要素_第2頁
FPGA設(shè)計(jì)與VHDL實(shí)現(xiàn) 課件 ch05 VHDL結(jié)構(gòu)與要素_第3頁
FPGA設(shè)計(jì)與VHDL實(shí)現(xiàn) 課件 ch05 VHDL結(jié)構(gòu)與要素_第4頁
FPGA設(shè)計(jì)與VHDL實(shí)現(xiàn) 課件 ch05 VHDL結(jié)構(gòu)與要素_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

FPGA設(shè)計(jì)與VHDL實(shí)現(xiàn)VHDL結(jié)構(gòu)與要素第五章英特爾FPGA中國(guó)創(chuàng)新中心系列叢書普通高等教育”十三五”規(guī)劃教材01實(shí)體實(shí)體程序通常包含實(shí)體(ENTITY)、結(jié)構(gòu)體(ARCHITECTURE)、配置(CONFIGURATION)、程序包(PACKAGE)和庫(kù)(LIBRARY)五個(gè)部分。其中,實(shí)體和結(jié)構(gòu)體是每個(gè)程序必備的,是最基本的VHDL程序組成部分。實(shí)體名可自己命名,般根據(jù)模塊的功能或特點(diǎn)取名;GENERIC類屬說明語句用于定義類屬參數(shù);PORT語句用于定義模塊端口信息;方括號(hào)內(nèi)的語句可選,只在需要時(shí)加上。實(shí)體類屬參數(shù)說明用類屬說明語句可指定參數(shù),如總線寬度等,它以關(guān)鍵詞GENERIC引導(dǎo)個(gè)類屬參量表,在表中提供時(shí)間參數(shù)或總線寬度等信息,通過參數(shù)傳遞,很容易改變一個(gè)設(shè)計(jì)實(shí)體內(nèi)部電路規(guī)模。采用類屬說明語句定義了加法器操作數(shù)的數(shù)據(jù)寬度,如果要改變加法器的規(guī)模,比如改為8位、32位的加法器,只需改變類屬參量width的賦值即可。1實(shí)體端口說明端口是實(shí)體與外部進(jìn)行通信的接口,類似于電路圖符號(hào)的引腳。端口說明語句由PORT引導(dǎo),包括端口名、端口模式、數(shù)據(jù)類型等。端口名是賦予每個(gè)實(shí)體外部引腳的名稱,通常用英文字母,或者英文字母加數(shù)字命名,如dO、sel、qO等。202結(jié)構(gòu)體實(shí)體類屬參數(shù)說明結(jié)構(gòu)體(ARCHITECTURE)也稱為構(gòu)造體,結(jié)構(gòu)體是對(duì)實(shí)體功能的具體描述。它可以描述實(shí)體的邏輯行為、功能,也可以描述實(shí)體的內(nèi)部構(gòu)造、所用元件及內(nèi)部連接關(guān)系。1實(shí)體類屬參數(shù)說明1.結(jié)構(gòu)體名結(jié)構(gòu)體名可自行定義,"OF"后面的實(shí)體名指明了該結(jié)構(gòu)體對(duì)應(yīng)的實(shí)體。2.結(jié)構(gòu)體說明語句結(jié)構(gòu)體說明語句用于對(duì)結(jié)構(gòu)體內(nèi)部將要使用的信號(hào)、常數(shù)、數(shù)據(jù)類型、元件、函數(shù)和過程等加以說明,結(jié)構(gòu)體說明語句必須放在關(guān)鍵詞ARCHITECTURE和BEGIN之間。1實(shí)體類屬參數(shù)說明3.結(jié)構(gòu)體功能描述語句結(jié)構(gòu)體功能描述語旬位于BEGIN和END之間,具體描述結(jié)構(gòu)體的行為、功能或者連接關(guān)系。1實(shí)體列出了5種功能描述語句。塊語句:塊語旬是由一系列并行語句構(gòu)成的組合體,其功能是將結(jié)構(gòu)體中的并行語句組成一個(gè)或多個(gè)子模塊。進(jìn)程語句:進(jìn)程由順序語句組成,用以將從外部獲得的信號(hào)值或內(nèi)部運(yùn)算數(shù)據(jù)賦值給其他的信號(hào)。實(shí)體信號(hào)賦值語句:將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果賦值給定義的信號(hào)或界面端口。子程序調(diào)用語句:可以調(diào)用進(jìn)程或參數(shù),并將獲得的結(jié)果賦值給信號(hào)。元件例化語句:將其他的設(shè)計(jì)實(shí)體打包成元件,調(diào)用元件并將元件的端口與其他元件、信號(hào)或高層實(shí)體的界面端口進(jìn)行連接。實(shí)體4.結(jié)構(gòu)體描述方式結(jié)構(gòu)體主要有3種描述方式,即行為描述、數(shù)據(jù)流描述和結(jié)構(gòu)描述。我們給結(jié)構(gòu)體命名時(shí)通常用不同的名字來區(qū)分這3種描述方式,比如用behavior、dataflow和structural分別表示行為、數(shù)據(jù)流和結(jié)構(gòu)描述,這樣可使我們?cè)陂喿xVHDL程序時(shí),能更清楚地了解設(shè)計(jì)者采用的描述方式。03VHDL庫(kù)和程序包VHDL庫(kù)和程序包庫(kù)庫(kù)(LIBRARY)是已編譯數(shù)據(jù)的集合,存放程序包定義、實(shí)體定義、結(jié)構(gòu)體定義和配置定義,庫(kù)以VHDL源文件的形式存在,在綜合時(shí)綜合器可隨時(shí)讀入使用,便于設(shè)計(jì)者共享己編譯過的設(shè)計(jì)結(jié)果。1VHDL庫(kù)和程序包庫(kù)常用的VHDL庫(kù)有:STD庫(kù)、WORK庫(kù)、IEEE庫(kù)、ASIC庫(kù)和用戶自定義庫(kù)等。1VHDL庫(kù)和程序包庫(kù)一般在基于FPGA/CPLD的開發(fā)中,打開IEEE庫(kù)中的STD_LOGIC_ll64、STD_LOGIC_ARITH、STD_LOGIC_SIGNED和STD_LOGIC_UNSIGNED這4個(gè)程序包基本夠用,需注意的是在使用前,必須書寫聲明語句。除STD庫(kù)和WORK庫(kù)外,其他庫(kù)在使用前都必須顯式地聲明,另外,還需使用USE語句指明庫(kù)中的程序包。1VHDL庫(kù)和程序包庫(kù)在實(shí)際設(shè)計(jì)中,若用USE語句直接指定該項(xiàng)目名,可節(jié)省綜合器綜合時(shí)從程序包中查找相關(guān)項(xiàng)目與元件的時(shí)間。在VHDL中,庫(kù)的說明語句總是放在實(shí)體單元前面。這樣,在實(shí)體中就可以任意使用庫(kù)中的數(shù)據(jù)和文件。由此可見,庫(kù)的用處在于使設(shè)計(jì)者共享已經(jīng)完成的設(shè)計(jì)成果。VHDL允許在同一個(gè)實(shí)體中同時(shí)打開多個(gè)不同的庫(kù),但庫(kù)之間必須是相互獨(dú)立的。1VHDL庫(kù)和程序包庫(kù)在實(shí)際設(shè)計(jì)中,若用USE語句直接指定該項(xiàng)目名,可節(jié)省綜合器綜合時(shí)從程序包中查找相關(guān)項(xiàng)目與元件的時(shí)間。在VHDL中,庫(kù)的說明語句總是放在實(shí)體單元前面。這樣,在實(shí)體中就可以任意使用庫(kù)中的數(shù)據(jù)和文件。由此可見,庫(kù)的用處在于使設(shè)計(jì)者共享已經(jīng)完成的設(shè)計(jì)成果。VHDL允許在同一個(gè)實(shí)體中同時(shí)打開多個(gè)不同的庫(kù),但庫(kù)之間必須是相互獨(dú)立的。2VHDL庫(kù)和程序包庫(kù)程序包(PACKAGE)主要用來存放各個(gè)設(shè)計(jì)能夠共享的信號(hào)說明、常瘟定義、數(shù)據(jù)類型、子程序說明、屬性說明和元件說明等部分。如果要使用程序包中的某些說明和定義,設(shè)計(jì)者只要用USE語句聲明下即可。程序包由兩個(gè)部分組成的:程序包首和程序包體。程序包首部分主要對(duì)數(shù)據(jù)類型、子程序、常暈、信號(hào)、元件、屬性和屬性指定等進(jìn)行說明,所有說明語句是對(duì)外可見的,這一點(diǎn)與實(shí)體說明部分相似。104配置配置配置主要用于指定實(shí)體和結(jié)構(gòu)體之間的對(duì)應(yīng)關(guān)系。一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體對(duì)應(yīng)著實(shí)體的一種實(shí)現(xiàn)方案,但在每次綜合時(shí),綜合器只能接受一個(gè)結(jié)構(gòu)體,通過配置語句可以為實(shí)體指定或配置一個(gè)結(jié)構(gòu)體;仿真時(shí),可通過配置使仿真器為同實(shí)體配置不同的結(jié)構(gòu)體,從而使設(shè)計(jì)者比較不同結(jié)構(gòu)體的仿真差別。配置也可以用于指定元件和設(shè)計(jì)實(shí)體之間的對(duì)應(yīng)關(guān)系,或者為例化的各元件實(shí)體指定結(jié)構(gòu)體,從而形成個(gè)所希望的例化元件層次構(gòu)成的設(shè)計(jì)。05子程序子程序過程過程由過程首和過程體構(gòu)成,過程首不是必需的,如果僅僅在個(gè)結(jié)構(gòu)體中定義并調(diào)用過程,是不需要定義過程首的,只需要定義過程體;只有當(dāng)想要將所定義的過程打包成程序包入庫(kù)時(shí),才需要定義過程首,這樣,這個(gè)過程就可以在任何設(shè)計(jì)中被調(diào)用。過程體由順序語句組成,調(diào)用過程即啟動(dòng)了過程體順序語句的執(zhí)行。過程體中的說明語句是局部的,其有效范圍只限于該過程體內(nèi)部。1子程序函數(shù)函數(shù)與過程的定義有類似的地方,也有明顯的區(qū)別。函數(shù)也由函數(shù)首和函數(shù)體構(gòu)成,函數(shù)首不是必需的,可以只使用函數(shù)體,如果僅僅在個(gè)結(jié)構(gòu)體中定義并調(diào)用函數(shù),則不需要定義函數(shù)首,只需要定義函數(shù)體即可。在將所定義的函數(shù)打包成程序包入庫(kù)時(shí),則需要定義函數(shù)首,這樣,這個(gè)函數(shù)就可以在任意設(shè)計(jì)中被調(diào)用。函數(shù)首由函數(shù)名、參數(shù)表和返回值的數(shù)據(jù)類型組成,而函數(shù)的具體功能在函數(shù)體中定義。206VHDL文字規(guī)則VHDL文字規(guī)則標(biāo)識(shí)符標(biāo)識(shí)符用來命名和區(qū)分端口、信號(hào)、變址或參數(shù)等,它表現(xiàn)為用26個(gè)大寫和小寫的英文,字符、0~9Clo個(gè)數(shù)字)和下畫線("_")組成的字符串。標(biāo)識(shí)符的書寫有兩個(gè)規(guī)范,VHDL'87規(guī)范和VHDL'93規(guī)范。一般將VHDL'87標(biāo)準(zhǔn)中定義的標(biāo)識(shí)符稱為短標(biāo)識(shí)符,將VHDL'93標(biāo)準(zhǔn)中定義的標(biāo)識(shí)符稱為擴(kuò)展標(biāo)識(shí)符。1VHDL文字規(guī)則標(biāo)識(shí)符VHDL'93標(biāo)準(zhǔn)中,擴(kuò)展標(biāo)識(shí)符的命名必須遵循下列規(guī)則:1.擴(kuò)展標(biāo)識(shí)符用反斜杠來分隔,例如:\addr_bus\。2.擴(kuò)展標(biāo)識(shí)符中允許包含圖形符號(hào)和空格等,例如:\addr&_bus\,\addr_bus\。3.擴(kuò)展標(biāo)識(shí)符的兩個(gè)反斜杠之間可以使用保留字,例如:\begin\。4.擴(kuò)展標(biāo)識(shí)符中允許多個(gè)下畫線相連。5.同名的擴(kuò)展標(biāo)識(shí)符和短標(biāo)識(shí)符不同,例如:\data\與data是不同的。6擴(kuò)展標(biāo)識(shí)符區(qū)分大小寫,例如:\data\與\DATA\是不同的標(biāo)識(shí)符。7.若擴(kuò)展標(biāo)識(shí)符中含有一個(gè)反斜杠,則應(yīng)該用兩個(gè)相鄰的反斜杠來代替。1VHDL文字規(guī)則數(shù)字VHDL中的數(shù)字主要表現(xiàn)為整數(shù)、實(shí)數(shù)和物理量文字三種形式。2VHDL文字規(guī)則字符串字符是用單引號(hào)括起的ASCII字符,可以是數(shù)值,也可以是符號(hào)或字母。字符串是一維的字符數(shù)組,須放在雙引號(hào)中。字符串可分為兩種,即文字字符串和數(shù)位字符串。307數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象常量常量或稱為常數(shù),是定義后其值不再改變的數(shù)據(jù)對(duì)象,可在實(shí)體、結(jié)構(gòu)體、程序包、子程序和進(jìn)程中定義,具有全局性。常量在使用前必須進(jìn)行說明,只有進(jìn)行說明之后的常量才能在VHDL程序中使用。1數(shù)據(jù)對(duì)象變量變量只能在進(jìn)程和子程序(函數(shù)和過程)中定義和使用,是一個(gè)局部量。在仿真過程中,它不像信號(hào)那樣,到了規(guī)定的仿真時(shí)間才進(jìn)行賦值,變量的賦值是立即生效的。變量的主要作用是在進(jìn)程中作為臨時(shí)性的數(shù)據(jù)存儲(chǔ)單元。2數(shù)據(jù)對(duì)象變量在變暈定義語句中可以定義初始值,這是一個(gè)與變晝具有相同數(shù)據(jù)類型的常數(shù)值,初始值的定義不是必需的,并且只在仿真中有效,在綜合時(shí),綜合器并不支持初始值設(shè)置。變盆作為局部晝,其有效范圍僅限于定義了變蜇的進(jìn)程或子程序中,另外,變盤的值將隨變?cè)瀑x值語句先后順序的改變而改變,因此,變暈賦值語句與軟件語言中的串行語句類似。2數(shù)據(jù)對(duì)象信號(hào)信號(hào)常用來表示電路節(jié)點(diǎn)或內(nèi)部連線。信號(hào)通常在結(jié)構(gòu)體、程序包和實(shí)體中說明。信號(hào)和變量在賦值符號(hào)、適用范圍和行為特性等方面都是有明顯區(qū)別的。在進(jìn)程中,信號(hào)在進(jìn)程結(jié)束時(shí)賦值才起作用,而變量賦值是立即起作用的。3數(shù)據(jù)對(duì)象文件對(duì)文件進(jìn)行說明的一般格式為:FILE文件變量:TEXTIS方向“文件名“;從文件中讀出一行的格式是:READ蕁NE(文件變量,行變量);408VHDL數(shù)據(jù)類型VHDL數(shù)據(jù)類型VHDL中的信號(hào)、常量、常數(shù)等都要指定數(shù)據(jù)類型,VHDL提供了多種標(biāo)準(zhǔn)的數(shù)據(jù)類型,為方便設(shè)計(jì),還可以由用戶自己定義數(shù)據(jù)類型。VHDL是種強(qiáng)類型語言,不同類型之間的數(shù)據(jù)不能相互傳遞。而且,數(shù)據(jù)類型相同,位長(zhǎng)不同,也不能賦值。這樣,VHDL綜合工具很容易找出設(shè)計(jì)中的各種錯(cuò)誤。VHDL數(shù)據(jù)類型預(yù)定義數(shù)據(jù)類型1.標(biāo)準(zhǔn)數(shù)據(jù)類型VHDL的STD庫(kù)中STANDARD程序包中定義了10種數(shù)據(jù)類型,稱為標(biāo)準(zhǔn)數(shù)據(jù)類型。1VHDL數(shù)據(jù)類型預(yù)定義數(shù)據(jù)類型2.IEEE預(yù)定義數(shù)據(jù)類型IEEE庫(kù)的STD_LOGIC_ll64程序包中還定義了兩種應(yīng)用非常廣泛的數(shù)據(jù)類型。(1)STD—LOGIC:標(biāo)準(zhǔn)邏輯型。(2)STD_LOGIC_VECTOR:標(biāo)準(zhǔn)邏輯矢量型,是多個(gè)STD_LOGIC型信號(hào)的組合。1VHDL數(shù)據(jù)類型預(yù)定義數(shù)據(jù)類型3.其他預(yù)定義數(shù)據(jù)類型在IEEE庫(kù)的STD_LOGIC_ARITH程序包中擴(kuò)展了UNSIGNED(無符號(hào)型)、SIGNED(有符號(hào)型)和SMALL_INT(小整型)三種數(shù)據(jù)類型。1VHDL數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型VHDL允許用戶自己定義新的數(shù)據(jù)類型,其定義格式為:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;用戶定義的數(shù)據(jù)類型有枚舉型、整數(shù)型、實(shí)數(shù)型、數(shù)組型、存取型、文件型和記錄型等,這些數(shù)據(jù)類型有些是VHDL標(biāo)準(zhǔn)數(shù)據(jù)類型和IEEE預(yù)定義數(shù)據(jù)類型中已有的,可以認(rèn)為是這些數(shù)據(jù)類型加了一定約束范圍的子類型(如用戶自定義整數(shù)型、實(shí)數(shù)型);有些數(shù)據(jù)類型則是全新的。2VHDL數(shù)據(jù)類型數(shù)據(jù)類型的轉(zhuǎn)換在VHDL語言中,數(shù)據(jù)類型的定義是很嚴(yán)格的,不同類型的數(shù)據(jù)間不能進(jìn)行運(yùn)算或者賦值,當(dāng)常堂、變量和信號(hào)之間進(jìn)行運(yùn)算或賦值操作時(shí),必須要保證數(shù)據(jù)類型的一致性,否則仿真和綜合過程中EDA工具會(huì)報(bào)錯(cuò)。在設(shè)計(jì)中,如需要對(duì)數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,可通過類型標(biāo)識(shí)符轉(zhuǎn)換和函數(shù)轉(zhuǎn)換。309VHDL運(yùn)算符VHDL運(yùn)算符邏輯運(yùn)算符VHDL提供了7種邏輯運(yùn)算符:NOT取反、AND-與、OR一或、NAND與非、NOR-—或非、XOR異或和XNOR-同或。1VHDL運(yùn)算符關(guān)系運(yùn)算符使用關(guān)系運(yùn)算符時(shí)應(yīng)注意:1.關(guān)系運(yùn)算符為二元運(yùn)算符,要求運(yùn)算符左右兩邊數(shù)據(jù)的類型必須相同,運(yùn)算結(jié)果為BOOLEAN型數(shù)據(jù)(即結(jié)果只能為TRUE或FALSE)。1.不同的關(guān)系運(yùn)算符對(duì)其左右兩邊操作數(shù)的數(shù)據(jù)類型有不同要求。其中,等于(=)和不等于(/=)可以適用所有類型的數(shù)據(jù),只有當(dāng)兩個(gè)數(shù)據(jù)a和b的數(shù)據(jù)類型相同,其數(shù)值也相等時(shí),"a=b"的運(yùn)算結(jié)果才為TRUE,'宙=b"的運(yùn)算結(jié)果為FALSE。2VHDL運(yùn)算符關(guān)系運(yùn)算符使用關(guān)系運(yùn)算符時(shí)應(yīng)注意:1.關(guān)系運(yùn)算符為二元運(yùn)算符,要求運(yùn)算符左右兩邊數(shù)據(jù)的類型必須相同,運(yùn)算結(jié)果為BOOLEAN型數(shù)據(jù)(即結(jié)果只能為TRUE或FALSE)。1.不同的關(guān)系運(yùn)算符對(duì)其左右兩邊操作數(shù)的數(shù)據(jù)類型有不同要求。其

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論