日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VHDL基础 学习笔记

發(fā)布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VHDL基础 学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近一直忙著學(xué)校里的活動,所以沒怎么更新,上周活動忙完了,正好也借著數(shù)電實驗的機會,重新學(xué)習(xí)一下VHDL的編程。以下是轉(zhuǎn)自360doc的教程:

——————————————————————————————————————————————————————————————————————————

?

(本學(xué)習(xí)以MAXPLUS10為工具軟件)

第一章、 VHDL程序的組成 一個完整的VHDL程序是以下五部分組成的: 庫(LIBRARY):儲存預(yù)先已經(jīng)寫好的程序和數(shù)據(jù)的集合 程序包(PACKAGE):聲明在設(shè)計中將用到的常數(shù)、數(shù)據(jù)類型、元件及子程序 實體(ENTITY):聲明到其他實體或其他設(shè)計的接口,即定義本定義的輸入輸出端口 構(gòu)造體(ARCHITECTUR):定義實體的實現(xiàn),電路的具體描述 配置(CONFIGURATION):一個實體可以有多個構(gòu)造體,可以通過配置來為實體選擇其中一個構(gòu)造體 1.1庫 庫用于存放預(yù)先編譯好的程序包(PACKAGE)和數(shù)據(jù)集合體,可以用USE語句調(diào)用庫中不同的程序包,以便不同的VHDL設(shè)計使用。

庫調(diào)用的格式: LIRARY 庫名 USE 庫名.所要調(diào)用的程序包名.ALL

可以這樣理解,庫在硬盤上的存在形式是一個文件夾,比如庫IEEE,就是一個IEEE的文件夾,可以打開MAX PLUSR安裝源文件夾,進(jìn)入VHDL93的文件夾,就可以看到一個IEEE的文件夾,這就是IEEE庫,而里面的文件就是一個個對程序包或是數(shù)據(jù)的描述文件,可以用文本打開來查看文件的內(nèi)容。

例如在VHDL程序里面經(jīng)常可以看到“USE IEEE.STD_LOGIC_1164”,可以這樣解釋這句話,本序里要用到IEEE文件夾下程序包STD_LOGIC_1164,而STD_LOGIC_1164是可以在IEEE文件夾的STD1164.vhd文件里面看到的,用文本打開STD1164.vhd,可以看到有一名為“IEEE.STD_LOGIC_1164”PAKAGE定義。

簡單的來說,庫相當(dāng)于文件夾,而程序包和數(shù)據(jù)就相當(dāng)于文件夾里面的文件的內(nèi)容(注意:不是相當(dāng)于文件,因為程序包和數(shù)據(jù)都是在文件里面定義的,而文件名是和實體名相同的,可以說實體相當(dāng)于文件)。

到了這里就可以考慮一個問題,“在安裝MAX PLUS時有多少個庫已經(jīng)存在的呢”,要得到這個問題的答案,可以打開安裝目錄下的“VHDL93”文件夾,就可以看到里面有五個文件夾,分別是ATERA、IEEE、LPM、STD、VITAL,也就是說你看到了五個庫,分別是 ATERA功能庫:增強型功能部件,即IP核,包括數(shù)字信號處理、通信、PCI和其他總線接口、處理器和外設(shè)及外設(shè)的功能。 IEEE庫:由IEEE(美國電子電機工程師學(xué)會)制定的標(biāo)準(zhǔn)庫 LPM庫:參數(shù)可調(diào)模塊庫 STD庫:符合VHDL標(biāo)準(zhǔn)的庫 VITAL庫:vhdl上對asic提供高精確度及高效率的仿真模型庫

調(diào)用庫的表達(dá)有兩種,一是顯式表式,就是用LIBRARY和USE來調(diào)用庫里面的程序包或數(shù)據(jù),適用于那些不符合VHDL標(biāo)準(zhǔn)的庫調(diào)用,比如IEEE庫;另一種是隱式表式,就是不用說明就自動調(diào)用的,適合于符合VHDL標(biāo)準(zhǔn)的庫調(diào)用,比如STD庫,不用寫明調(diào)用就已經(jīng)自動調(diào)用出來了。

除了上面所介紹的庫外,還有用戶自定義庫及WORK庫,WORK庫是用戶的VHDL現(xiàn)行工作庫,從上面的理解可知,WORK庫就是用戶當(dāng)前編輯文件所在的文件夾,文件夾里面的其他文件里面所描述包或數(shù)據(jù)的集合就是WORK庫里面的包和數(shù)據(jù)的集合。由于WORK庫自動滿足VHDL標(biāo)準(zhǔn),因此在就應(yīng)用中不必以顯式預(yù)先說明(比如 LIBRARY WORK這樣的定義是多余的)。

1.2程序包 在VHDL中,常量、數(shù)據(jù)類型與子程序可以在實體說明部分和結(jié)構(gòu)體部分加以說明,且實體說明部分所定義的常量、數(shù)據(jù)類型與子程序在相應(yīng)的結(jié)構(gòu)體中是可見的(可以被使用的),但在一個實體的說明部分與結(jié)構(gòu)體的部分對于其他實體的說明部分與結(jié)構(gòu)部分是不可見的(注:實體相當(dāng)于一個文件),程序包(PACKAGE)就是為了使一組常量說明、數(shù)據(jù)說明、子程序說明和元件說明等內(nèi)容對于多個設(shè)計實體都成為可見的而提供的一種結(jié)構(gòu),可以這樣理解一個實體(文件)里的PACKAGE對常量等的定義在其于的實體(文件)里是可以被使用的。

程序包由包頭和包體構(gòu)成,包頭格式: PACKAGE 程序包名 IS ?? 說明語句; END 程序包名;

說明語句部分可為:USE語句、類型定義、子程序聲明(定義在包體)、常量定義、信號聲明、元件聲明等。

包體格式: PACKAGE BODY 程序包名 IS 說明語句; END 程序包名

說明部分用于子程序的定義,注:在包中對子程序的說明分為兩部分,子程序聲明放在包頭,子程序的定義在包體。

實體對于程序包不是自動可見(即不是自動就設(shè)為使用)的,為了使用程序包說明的內(nèi)容就必須在實體的開始加上USE語句(即是要用USE來調(diào)用程序包里面所說明的東西),即使實體和程序包是在同一個文件里也要這樣調(diào)用。

1.3實體 實體(ENTITY)是VHDL設(shè)計中最其本的組成部分之一(另一個是結(jié)構(gòu)體),VHDL表達(dá)的所有設(shè)計均與實體有關(guān)。 實體類似于原理圖中的一個部件符號,它并不描述設(shè)計的具體功能,只是定義所需的全部輸入/輸出信號。 實體格式如下: ENTITY 實體名 IS [GENERIC(常數(shù)名:數(shù)據(jù)類型[:設(shè)定值])]???????? 類屬說明 ?? PORT?????????????????????????????????????? 端口說明 ?? (端口信號名1: 模式 類型; 端口信號名2: 模式 類型; 端口信號名3: 模式 類型; 端口信號名4: 模式 類型); TYPE語句或常量定義?????????????????????? 實體申明 并行語句?????????????????????????????????? 實體語句 END 實體名;

實體名:MAXPLUSII要求實體名必須與VHDL文件名相同,否則編譯會出錯。

類屬參量:用于為設(shè)計實體和其外部環(huán)境通信的靜態(tài)信息提供通道,可以定義端口的大小、實體中元件數(shù)目及實體的定時特性等等;帶有GENERIC的實體所定義的元件叫做參數(shù)化元件,即元件的規(guī)模或特性由GENERIC的常數(shù)決定,在GENERIC所定義的常數(shù)是可以在引用過程中修改的,因此利用GENERIC可以設(shè)計更加通用的元件,彈性地適應(yīng)不同的應(yīng)用。

端口信號名:端口信號名在實體之中必須是唯一的,信號名應(yīng)是合法的標(biāo)識符 端口模式:分別有IN、OUT、INOUT、BUFFER和LINKAGE,這五種類型在后面的章節(jié)將介紹到。 端口類型:常用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR,有待后面章節(jié)介紹。

實體申明:實體申明部分應(yīng)放在端口說明的下面,實體申明部分用于定義實體接口中的公共信息,例如可以用來定義新的數(shù)據(jù)類型和常量定義等。

實體語句:是每一設(shè)計實體接口的公共部分,實體語句只能由并行斷言語句、并行過程調(diào)用語句和被動進(jìn)程語句,注意,這些實體語句部分應(yīng)該是被動語句,即在語句中不含有信號賦值語句。

1.4結(jié)構(gòu)體 所有能被仿真的實體都由結(jié)構(gòu)體(ARCHITECTURE)描述,即結(jié)構(gòu)體描述實體的結(jié)構(gòu)或行為,一個實體可以有多個結(jié)構(gòu)體,每個結(jié)構(gòu)體分別代表該實體功能的不同實現(xiàn)方案。

結(jié)構(gòu)體格式: ARCHITECTURE 結(jié)構(gòu)體名 OF 實體名 IS [定義語句(元件例化);] BEGIN 并行處理語句; END 結(jié)構(gòu)體名;

結(jié)構(gòu)體名是對本結(jié)構(gòu)體的命名,它是該結(jié)構(gòu)體的惟一名稱,雖然可以由設(shè)計人員自由命名,但一般都將命名和對實體的描述結(jié)合起來,結(jié)構(gòu)體對實體描述有三種方式(括號中為命名): 1) 行為描述(BEHAVE):反映一個設(shè)計的功能和算法,一般使用進(jìn)程PROCESS,用順序語句表達(dá); 2) 結(jié)構(gòu)描述(STRUCT):反映一個設(shè)計硬件方面的特征,表達(dá)了內(nèi)部元件間連接關(guān)系,使用元件例化來描述; 3) 數(shù)據(jù)流描述(DATAFLOW):反映一個設(shè)計中數(shù)據(jù)從輸入到輸出的流向,使用并行語句描述。

1.5配置 一個實體可以用多個結(jié)構(gòu)體描述,具體綜合時,選擇哪一個結(jié)構(gòu)體來綜合,由配置來確定,仿真時用配置語句進(jìn)行配置能節(jié)省大量時間。 配置格式: CONFIGURATION 配置名 OF 實體名IS FOR 選配結(jié)構(gòu)體名; END FOR; ???? END CONFIGURATION;

第二章、 數(shù)據(jù)類型、算符、數(shù)據(jù)對象、屬性 2.1 標(biāo)識符 VHDL標(biāo)識符由大小寫字母、數(shù)字和下劃線構(gòu)成,不區(qū)分大小寫

2.2 數(shù)據(jù)對象 在邏輯綜合中,VHDL常用的數(shù)據(jù)對象有信號、變量及常量。 1) 信號SIGNAL,為全局變量,在程序包說明、實體說明、結(jié)構(gòu)體描述中使用,用于聲明內(nèi)部信號,而非外部信號(外部信號為IN、OUT、INOUT、BUFFER),其在元件之間起互聯(lián)作用,可以賦值給外部信號。 定義格式: SIGNAL 信號名: 數(shù)據(jù)類型[:=初始值]; 賦值格式: 目標(biāo)信號名<=表達(dá)式 常在結(jié)構(gòu)體中用賦值語句完成對信號賦初值的任務(wù),因為綜合器往往忽略信號聲名時所賦的值。

2) 變量(VARIABLE),只在給定的進(jìn)程中用于聲明局部值或用于子程序中,變量的賦值符號為“:=”,和信號不同,信號是實際的,是內(nèi)部的一個存儲元件(SIGNAL)或者是外部輸入(IN、OUT、INOUT、BUFFER),而變量是虛的,僅是為了書寫方便而引入的一個名稱,常用在實現(xiàn)某種算法的賦值語句當(dāng)中。 定義格式: VARIABLE 變量名: 數(shù)據(jù)類型[:=初始值]

3) 常量,全局變量,在結(jié)構(gòu)體描述、程序包說明、實體說明、過程說明、函數(shù)調(diào)用說明和進(jìn)程說明中使用,在設(shè)計中描述某一規(guī)定類型的特定值不變,如利用它可設(shè)計不同模值的計數(shù)器,模值存于一常量中,對不同的設(shè)計,改變模值僅需改變此常量即可,就如上一章所說的參數(shù)化元件。 定義格式: CONSTANT 常數(shù)名:數(shù)據(jù)類型:=表達(dá)式;

4) 信號和變量最大的不同在于,如果在一個進(jìn)程中多次為一個信號賦值,只有最后一個值會起作用,而當(dāng)為變量賦值時,變量的值改變是立即發(fā)生的。

2.3 數(shù)據(jù)類型 VHDL是一種強類型語言,對于每一個常數(shù)、變量、信號、函數(shù)及設(shè)定的各種參量的數(shù)據(jù)類型(DATA TYPES)都有嚴(yán)格要求,相同數(shù)據(jù)類型的變量才能互相傳遞和作用,標(biāo)準(zhǔn)定義的數(shù)據(jù)類型都在VHDL標(biāo)準(zhǔn)程序表STD中定義,實際使用中,不需要用USE語句以顯式調(diào)用。 ?? VHDL常用的數(shù)據(jù)類型有三種:標(biāo)準(zhǔn)定義的數(shù)據(jù)類型、IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量及用戶自定義的數(shù)據(jù)類型。 1) 標(biāo)準(zhǔn)定義的數(shù)據(jù)類型 Boolean布爾量:取值為FALSE和TRUE CHARACTER字符:字符在編程時用單引號括起來,如‘A’ STRING字符串:雙引號括起來,如“ADFBD” INTEGER整數(shù):整數(shù)范圍從-(231-1)到(231-1); REAL實數(shù):實數(shù)類型僅能在VHDL仿真器中使用,綜合器不支持 BIT位:取值為0或1; TIME時間:范圍從-(231-1)到(231-1),表達(dá)方法包含數(shù)字、(空格)單位兩部分,如(10 PS); BIT_VECTOR位矢量:其于BIT數(shù)據(jù)的數(shù)組,使用矢量必須注明寬度,即數(shù)組中的元素個數(shù)和排列,如SIGNAL A: BIT_VECTOR(7 DOWNTO 0) NATUREAL自然數(shù):整數(shù)的一個 POSITIVE正整數(shù): SEVRITY LEVEL錯誤等級:在VHDL仿真器中,錯誤等級用來設(shè)計系統(tǒng)的工作狀態(tài),共有四種可能的狀態(tài)值:NOTE,WARNING,ERROR和FAILURE 2) IEEE預(yù)定義的標(biāo)準(zhǔn)邏輯位與矢量 STD_LOGIC::工業(yè)標(biāo)準(zhǔn)的邏輯類型,取值為‘0’、‘1’、‘Z’、‘X’(強未知)、‘W’(弱未知)、‘L’(弱0)、‘H’(弱1)、‘—’(忽略)、‘U’(未初始化),只有前四種具有實際物理意義,其他的是為了與模擬環(huán)境相容才保留的。 STD_LOGIC_VECTOR:工業(yè)標(biāo)準(zhǔn)的邏輯類型集,STD_LOGIC的組合。

3) 用戶自定義的數(shù)據(jù)類型 有四種,分別是枚舉類型、整數(shù)類型和實數(shù)類型、數(shù)組類型、記錄類型 枚舉類型: TYPE 數(shù)據(jù)類型名 IS (枚舉文字,枚舉文字,. . . .) 整數(shù)類型與實數(shù)類型是標(biāo)準(zhǔn)包中預(yù)定義的整數(shù)類型的子集,由于綜合器無法綜合未限定范圍的整數(shù)類型的信號或變量,故一定要用RANGE子句為所定義整數(shù)范圍限定范圍以使綜合器能決定信號或變量的二進(jìn)制的位數(shù)。 格式:?? TYPE 數(shù)據(jù)類型名 IS RANGE 約束范圍;???? (如-10到+10)

數(shù)組類型: TYPE 數(shù)據(jù)類型名 IS ARRAY(下限 TO 上限) OF 類型名稱

記錄類型: TYPE 記錄類型名 IS RECODE 元素名: 數(shù)據(jù)類型名; 元素名: 數(shù)據(jù)類型名; 。。。。。。。。。。。。。 END RECODE

2.4 運算符 VHDL為構(gòu)造計算數(shù)值的表達(dá)式提供了許多預(yù)定義運算符,可分為四種類型:算術(shù)運算符,關(guān)系運算符,邏輯運算符與連接運算符。 算術(shù)運算符:+、-、*、/、**、MOD、REM、ABS 關(guān)系運算符:=、/=、<、<=、>、>= 邏輯運算符:AND、OR、NOT、NAND、NOR、XOR、NOR 連接運算符:&,將多個對象或矢量連接成維數(shù)更大的矢量

2.5 VHDL屬性 屬性是關(guān)于實體、結(jié)構(gòu)體、類型及信號的一些特征,有些屬性對于綜合非常有用,其一般形式均為: 對象’屬性。 1) 數(shù)值類屬性 用于返回數(shù)組、塊或一般數(shù)據(jù)的有關(guān)值 一般數(shù)據(jù)的數(shù)值屬性:LEFT,RIGHT,LOW,HIGH 數(shù)組的數(shù)值屬性:LENGH 塊的數(shù)值屬性:BEHAVIOR,不含有元件COMPONENT例化信息時返回TRUE;STRUCTURE含有元件實例化或有被動進(jìn)程時,則返回TURE。(注:被動進(jìn)程定義是在進(jìn)程定義中沒有代入語句)

2) 函數(shù)類屬性 以函數(shù)的形式,使設(shè)計人員得到有關(guān)數(shù)據(jù)類型、數(shù)組、信號的某些信息。 數(shù)據(jù)類型屬性函數(shù):POS(X)得到輸入X值的位置序號、VAL(x)得到輸入位置序號的X值,SUSS(x),PRED(x),LEFTOF(x),RIGHTOF(x) 數(shù)組屬性函數(shù):LEFT(n),RIGHT(n),HIGH(n),LOW(n)

3) 數(shù)據(jù)類型屬性,這類屬性類函數(shù)僅一個,即BASE

4) 數(shù)據(jù)區(qū)間類的屬性,RANGE[(N)]和REVERS_RANGE[(N)]

用戶自定義的屬性,格式?? ATTRIBUTE 屬性名 OF 目標(biāo)名:目標(biāo)集合 IS 表達(dá)式以函數(shù)的形式,使設(shè)計人員得到有關(guān)數(shù)據(jù)類型、 第三章、 順序語句與并行語句 順序語句和并行語句是VHDL程序設(shè)計中兩大基本描述語句系列。 3.1順序語句 順序語句的特點從仿真的角度來看是每一條語句的執(zhí)行按書寫順序進(jìn)行,順序語句只能出現(xiàn)在塊語句、進(jìn)程和子程序內(nèi)部,順序控制方式有兩種,一是條件控制(IF和CASE語句),一是迭代控制(LOOP語句和ASSERT語句),有10種基本類型 1) 賦值語句 賦值語句分為變量賦值和信號賦值,它們的賦值是有區(qū)別的。 首先在格式上,變量賦值格式為“變量名:=表達(dá)式”,而信號的賦值格式為“信號名<=表達(dá)式”; 其次體現(xiàn)在所用的地方,變量說明和使用都只能在順序語句中(進(jìn)程、函數(shù)、過程和塊模塊),而信號的說明只能在同步語句中,但可以在順序語句和同步語句中使用; 再次體現(xiàn)在賦值過程,變量的賦值是立即的,而信號的賦值的執(zhí)行和信號值的更新至少要延時DELTA延時,只有延時后信號才能得到新值,否則將保持原值,在進(jìn)程中,信號賦值在結(jié)束時起作用。

2) WAIT語句 WAIT語句屬于敏感信號激勵信號,一個進(jìn)程語句含有敏感信號時,進(jìn)程中不能出現(xiàn)WAIT等待語句;當(dāng)進(jìn)程語句不含有敏感信號時,進(jìn)程語句必須含有其他形態(tài)的敏感信號激勵。WAIT語句有五種形式: WAIT?? ——無限等待; WAIT ON (敏感信號1,敏感信號2,敏感信號N) ——敏感信號變化,表中的信號產(chǎn)生變化時才往下運行; WAIT UNTIL 布爾表達(dá)式 ——為TRUE時,進(jìn)程啟動,為FARLSE是等待 WAIT FOR 時間表達(dá)式 ——到時進(jìn)程才會啟動 WAIT UNTIL 布爾表達(dá)式 ON (敏感信號1,敏感信號2,敏感信號N) FOR 時間表達(dá)式 ——多條件等待語句,注意在多條件等待語句的表達(dá)式中,至少應(yīng)有一個信號量,因為處于等待進(jìn)程中的變量是不可改變的。

3) IF語句 這種語句在其他編程語言也有,不用多講,其完整的書寫格式 [IF標(biāo)號:] IF <條件> THEN <順序處理語句>; [ELSIF <條件> THEN <順序處理語句>;] ……. [ELSE <順序處理語句>;] END IF [IF標(biāo)號]

4) CASE語句 CASE語句是另一種形式的流程控制語句,可讀性比IF的強,格式如下 CASE 〈條件表達(dá)式〉 IS WHEN 〈條件取值〉 =>順序處理語句; WHEN 〈條件取值〉 =>順序處理語句; WHEN 〈條件取值〉 =>順序處理語句; WHEN?? OTHERS =>順序處理語句; END CASE; 上面的〈條件取值〉有三種格式可選 條件表達(dá)式取值 條件表達(dá)式取值|條件表達(dá)式取值|條件表達(dá)式取值| 條件表達(dá)式取值 TO 條件表達(dá)式取值

5) LOOP循環(huán)語句 LOOP語句與其他高級編程語言中的循環(huán)語句一樣,可以使程序進(jìn)行有規(guī)律的循環(huán),循環(huán)的次數(shù)受迭代算法的控制,一個LOOP語句可包含要重復(fù)執(zhí)行的一組順序語句,它可以執(zhí)行多次或是零次。 LOOP格式 [LOOP 標(biāo)號:] [重復(fù)模式]LOOP 〈順序處理語句〉; END LOOP [LOOP標(biāo)號]; 重復(fù)模式有兩種,FOR模式和WHILE模式。

FOR模式的LOOP語句格式: [LOOP標(biāo)號:] FOR 循環(huán)變量 IN 離散范圍 LOOP 〈順序處理語句〉; END LOOP [LOOP標(biāo)號];

WHILE模式的LOOP語句格式: [LOOP標(biāo)號:] WHILE〈條件〉LOOP 〈順序處理語句〉; END LOOP[LOOP標(biāo)號];

6) NEXT和EXIT語句 這兩種語句都是用于跳出LOOP循環(huán)的,NEXT語句是用來跳出本次循環(huán)的,而EXIT語句是用于跳出全部循環(huán)的。 格式 NEXT或EXIT [LOOP標(biāo)號] [WHEN條件]

7) NULL空操作語句,書寫格式為“NULL;”,唯一的作用是使程序流程運行到下一個語句,常用于CASE語句當(dāng)中 8) RETURN語句 用在一段子程序結(jié)束后,用來返回到主程序的控制語句,一般情況之下,有兩種書寫格式,分別是 RETURN;?? —只能用于進(jìn)程返回 RETURN 表達(dá)式;——只能用于函數(shù)返回

在實際的應(yīng)用中,一般的VHDL綜合工具要求函數(shù)中只能包含一個RETURN,并規(guī)定這條RETURN語句只能寫在函數(shù)末尾,但一些VHDL綜合工具允許函數(shù)中出現(xiàn)多個RETURN語句。

9) ASSERT斷言語句 主要用于程序仿真、調(diào)試中的人機對話,它可以給出一個文字串作為警告和錯誤信息,基本書寫格式如下: ASSERT〈條件〉 REPORT〈輸出信號〉?? ——字符串 SEVERITY〈錯誤級別〉;——有四種NOTE、WARNING、ERROR和FAILURE

如果程序在仿真或調(diào)試過程中出現(xiàn)問題,斷方語句就會給出一個文字串作為提示信息,當(dāng)程序執(zhí)行到斷言語句時,就會對ASSERT條件表達(dá)式進(jìn)行判斷,如果返回值為TRUE則斷言語句不做任何操作,程序向下執(zhí)行,如果返回值為FALSE,則輸出指定的提示信息和出錯級別。

斷言語句可以分為順序斷言語句和并行斷言語句。

10) REPORT語句 報告語句是93版VHDL標(biāo)準(zhǔn)提供的一種新的順序語句,該語句沒有增加任何功能,只是提供了某些形式的順序斷言語句的短格式,也算是ASSERT語句的一個精簡,格式如下: REPORT 〈輸出信息〉[SEVERITY〈出錯級別〉]

3.2并行語句 并行語句在結(jié)構(gòu)體中的執(zhí)行都是同時進(jìn)行的,即它們的執(zhí)行順序與語句的書寫無關(guān),這種并行性是由硬件本身并行性決定的,即一旦電路接通電路,它的各部分就會按照事先設(shè)計好的方案同時工作,VHDL有六種并行語句 1) 并行信號賦值語句 信號賦值語句相當(dāng)于一個進(jìn)程(用于單個信號賦值)的簡化形式,用在結(jié)構(gòu)體中并行執(zhí)行,信號賦值語句提供了三種賦值方式,用來代替進(jìn)程可令程序代碼大大簡化。 [注:這里要注意,信號賦值語句在順序語句里面也有,順序語句里可以給信號賦值也可以給變量賦值,而順序語句里只能對變量說明,不能對信號說明;并行語句剛好相反。] [思考:什么變量不能在并行語句里面說明呢?為什么信號不能在順序語句里面說明呢?因為信號是全局的,變量是局部的,用來保存中間變量的]

賦值方式一 并發(fā)信號賦值語句,格式“信號名<=表達(dá)式”,等效于進(jìn)程語句,表達(dá)式中的信號就是進(jìn)程語句中的敏感激勵信號(注:進(jìn)程必須含有敏感激勵信號,請看下面章節(jié)介紹)

賦值方式二 條件信號賦值語句,格式如下 目標(biāo)信號<=表達(dá)式1?? WHEN 條件1 ELSE 表達(dá)式2?? WHEN 條件2 ELSE 表達(dá)式3?? WHEN 條件3 ELSE 表達(dá)式4?

注:條件賦值語句與IF語句不同之處 1、 以上條件賦值語句不能進(jìn)行嵌套,而IF是可以的 2、 由于條件信號賦值語句是并行語句,必須用在結(jié)構(gòu)體中的進(jìn)程之外(進(jìn)程是用順序語句來編寫的),而IF是順序語句 3、 條件信號賦值語句ELSE是必須有的,而IF可沒有 4、 條件信號賦值語句與實際的硬件電路十分接近,因此使用該語句要求設(shè)計人員具有硬件電路知識,而IF一般用來進(jìn)行硬件電路的高級描述,它不要求太多的硬件電路知識。 5、 一般情況下很少用條件賦值語句,只有當(dāng)用進(jìn)程語句、IF語句和CASE語句難以對路進(jìn)行描述時才用

賦值方式三 選擇信號賦值語句,格式如下 WITH 選擇條件表達(dá)式 SELECT 目標(biāo)信號<=信號表達(dá)式1?? WITH 選擇條件1 信號表達(dá)式2?? WITH 選擇條件2 信號表達(dá)式3 WITH 選擇條件3 信號表達(dá)式4?? WITH OTHERS

注:選擇信號賦值語句是一種并行語句,不能在結(jié)構(gòu)體中的進(jìn)程內(nèi)部使用

2) 塊語句 在VHDL語言設(shè)計中,塊語句常常用來對比較復(fù)雜的結(jié)構(gòu)體作結(jié)構(gòu)化描述,格式如下 [塊標(biāo)號:] BLOCK [衛(wèi)式表達(dá)式] [類屬子句;] [端口子句;] [塊說明部分;] BEGIN <塊語句說明部分;> END BLOCK[塊標(biāo)號];

衛(wèi)式表達(dá)式:是一個布爾條件表達(dá)式,只有當(dāng)這個表達(dá)式為TURE時,BLOCK語句才被執(zhí)行; 類屬子句:塊的屬性說明 塊說明部分:用于定義USE、子程序、數(shù)據(jù)類型、子類型、常量、信號和元件 塊語句說明部分:用于描述塊的具體功能,可以包含結(jié)構(gòu)塊中的任何并行語句結(jié)構(gòu)。

注:塊語句的作用就是將一個大的結(jié)構(gòu)劃成一塊一塊小的結(jié)構(gòu)。

?

3) 進(jìn)程語句 進(jìn)程語句是一種應(yīng)用廣泛的并行語句,一個結(jié)構(gòu)體中可以包括一個或者多個進(jìn)程語句,結(jié)構(gòu)體中的進(jìn)程語句是并發(fā)關(guān)系,即各個進(jìn)程是同時處理的、并行執(zhí)行的;但在第一個進(jìn)程語句結(jié)構(gòu)中,組成進(jìn)程的各個語句都是順序執(zhí)行,在進(jìn)程語句中是不能用并行語句的。 格式 [進(jìn)程標(biāo)號:]PROCESS [敏感信號表] [IS] [進(jìn)程語句說明部分;] BEGIN <順序語句部分> END PROCESS[進(jìn)程標(biāo)號];

注: 1、 敏感信號表列出了進(jìn)程語句敏感的所有信號,每當(dāng)其中的一個信號發(fā)生變化時,就會引起其他語句的執(zhí)行,如果敏感信號表不寫,那么在PROCESS里面必須有WAIT語句,由WAIT語句來產(chǎn)生對信號的敏感;而當(dāng)敏感信號表存在時,就不能在PROCESS里再有WAIT語句; 2、 IS可有可無,是由93版規(guī)定的 3、 進(jìn)程語句說明部分是進(jìn)程語句的一個說明區(qū),它主要用來定義進(jìn)程語句所需要的局部數(shù)據(jù)環(huán)境,包括數(shù)據(jù)類型說明、子程序說明和變量說明。 4、 進(jìn)程語句有兩種存在狀態(tài),一是等待,當(dāng)敏感信號沒有發(fā)生變化時;一是執(zhí)行,當(dāng)敏感信號變化時。

4) 子程序調(diào)用語句 子程序分為函數(shù)和過程,它們的定義屬于說明語句,均可在順序語句和并行語句里面使用,它們的調(diào)用方法不一樣。 函數(shù)只有一個返回值,用于賦值,可以說在信號賦值的時候就是對函數(shù)的調(diào)用; 過程有很多個返回值,用于進(jìn)行處理,準(zhǔn)確的來說子程序調(diào)用語句就是過程調(diào)用語句。

5) 參數(shù)傳遞語句 參數(shù)傳遞語句即在實體中定義的GENERIC,可以描述不由材料和不同工藝構(gòu)成的相同元件或模塊的性能參數(shù)(如延時),在定義了GENERIC的實體叫參數(shù)化實體,由參數(shù)化實體形成的元件在例化時具有很大的適應(yīng)性,在不同的環(huán)境下,只須用GENERIC MAP來修改參數(shù)就可以了,使用時,在對元件例化時加在里面就可,比如已經(jīng)定義了一個AND2的實體,要在EXAMPLE里面使用AND2,要先對AND2進(jìn)行元件聲明,再將AND2例化,如下: u0: AND2 GENERIC MAP(參數(shù)值1,參數(shù)值2) ?????????? PORT MAP(參數(shù)表)

6) 元件例化語句 一個實體就相當(dāng)于元件,元件名就相當(dāng)于實體名,元件要實現(xiàn)的功能在實體里面就已經(jīng)描述好,比如,同一個文件夾下已經(jīng)有一個名為A.VHD的文件,如果要在另一個文件B.VHD里面用到A.VHD里面定義的功能,那么可以在B.VHD文件里面通過元件聲明和元件例化來調(diào)用A這個元件,總的來說調(diào)用元件過程就是“建立元件----元件聲明------元件例化”,元件調(diào)用時不用USE語句的,這和調(diào)用程序或類據(jù)不同。 [注:元件聲明語句屬說明語句,不是同步語句,以下對元聲的說明是為了更好地了解元件的調(diào)用,元件的實例化之前必須要有元件聲明]

元件聲明語句格式 COMPONENT <元件名>???????? ——元件名就是文件名,即是實體名 [GENERIC <參數(shù)說明>;]?????? ——這就是所產(chǎn)的元件參數(shù) PORT<端口說明>; END COMPONENT;

元件例化格式: 元件符:元件名 GENERIC MAP (參數(shù)表) ?????????????? PORT MAP(端口表) 7) 生成語句 生成語句通常又稱為GENERATE語句,它是一種可以建立重復(fù)結(jié)構(gòu)或者是在多個模塊的表示形式之間進(jìn)行選擇的語句,格式如下: [生成語句標(biāo)號:] < 模式選擇>GENERATE < 并行處理語句>; END GENERATE [生成語句標(biāo)號];

模式選擇有兩種,一是FOR模式,一是IF模式。

FOR模式生成語句 [生成語句標(biāo)號:] FOR 循環(huán)變量 IN 離散范圍 GENERATE <并行處理語句>; END GENERATE[生成語句標(biāo)號];

IF模式生成語句 [生成語句標(biāo)號:] IF <條件>GENERATE <并行處理語句>; END GENERATE[生成語句標(biāo)號];

8) 并行斷言語句 前面已經(jīng)說過順序斷言語句,這里的斷言語句是并行的,可以放在實體說明、結(jié)構(gòu)體和塊語句中使用,可以放在任何要觀察和調(diào)試的點上,而順序斷言語句只能在進(jìn)程、函數(shù)和過程中使用。其實斷言語句的順序使用格式和并行使用格式是一樣的,因此斷言語句是可以應(yīng)用在任何場所的,格式請看順序的說明。

思考: 1、是不是所有的VHDL語句都可以歸結(jié)為順序語句和并行語句呢?那么子程序定義是順序的還是并行的呢?由上面的學(xué)習(xí)可以知道,子程序可以在三個地方(程序包、結(jié)構(gòu)體、進(jìn)程)中進(jìn)行定義,而子程序在沒有調(diào)用之前是不參與執(zhí)行的,由此可知子程序的定義是屬于說明語句,還有元件的說明也屬于說明語句,這個不用多說。因此,可以這樣對VHDL語句進(jìn)行歸類,三大類順序語句、并行語句和說明語句,這三類語句的關(guān)系是順語句可以用在并行語句和說明語句當(dāng)中,說明語句可以用在并行語句當(dāng)中,而并行語句是不能用在其他語句當(dāng)中,可以說并行語句屬于一種高級形態(tài),是語句的最終形態(tài)。

2、子程序分為函數(shù)和過程,子程序的調(diào)用即可以用在順序語句中,也可以用并行語句中,用在順序語句(進(jìn)程或者子程序)中就叫順序調(diào)用語句;在并行語句(位于進(jìn)程或子程序的外部)中就叫做并行調(diào)用語句,并行調(diào)用語句在結(jié)構(gòu)體中是并行執(zhí)行的。

3、區(qū)分信號與變量,信號是全局的,要在并行語句里面說明;變量是局部的;要在順序語句里面說明;賦值格式不一樣;賦值方式不一樣,變量是即時賦值的,信號的賦值要到最后才生效的;使用地方不一樣,信號可以在并行語句里使用也可在順序語句里使用,而變量只能在順序語句里使用

4、區(qū)分過程和函數(shù),過程可以具有多個返回值(準(zhǔn)確來說不是返回值,而是這些信號在過程之中被改變),函數(shù)只有一個返回值;過程通常用來定義一個算法,而函數(shù)用來產(chǎn)生一個具有特定意義的值;過程中的形式參數(shù)可以有三種通信模式(輸入、輸出、雙向),而函數(shù)中的形參只能是輸入通信模式(因為函數(shù)是用來產(chǎn)生一個值的);過程中可以使用賦值語句或WAIT語句,而函數(shù)不可(因為過程是用來處理的)

5、為什么信號不可以在順序語句里面進(jìn)行說明呢?是因為信號是全局變量。為什么變量不可以在并行語句里面進(jìn)行說明呢?是因為變量只是對暫時數(shù)據(jù)進(jìn)行局部的存儲,只是一個局部的變量。

6、信號分為兩種:一是外部信號(輸出輸入信號),即在實體中定義的IN、OUT、INOUT、BUFFER和LINKAGE;一是內(nèi)部信號(連線信號),即在程序包、實體、結(jié)構(gòu)體中說明的SIGNAL,用于元件與元件連接起來。

7、CASE語句、條件信號賦值語句和選擇賦值語句的結(jié)構(gòu)有點相似,要注意它們的書寫格式。

————————————————————————————————————————————————————————————————————————————

轉(zhuǎn)載于:https://www.cnblogs.com/BaroC/p/3385675.html

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的VHDL基础 学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。