EDA筆記 1 VHDL語言

2021-10-04 08:42:22 字數 4655 閱讀 1128

目的:摘錄點自己容易忘的知識點,也可以供讀者參考學習

工作平台–計算機

開發環境–eda軟體

設計語言–硬體描述語言(hdl)

試驗載體–可程式設計邏輯器件(pld)

目標器件–asic晶元

應用方向–電子系統設計

印刷電路板(pcb)設計

積體電路(ic或asic)設計

可程式設計邏輯器件(fpga/cpld)設計

混合電路設計

基本的閘電路包括組合電路時序電路

任何的時序電路都可由組合電路加上儲存元件(鎖存器,觸發器)構成

可程式設計邏輯器件(pld)的分類

簡單pld:prom,pla,pal,gal

複雜pld:cpld,fpga

結構體功能:用於描述邏輯功能和電路結構。分為順序語句(執行方式按照語句的前後排列順序)和並行語句(同時執行,與語句的前後次序無關)

常用的資料型別包括位型別bit整數型別integer布林型別boolean標準邏輯型別std_logic

bit資料型別的訊號規定的取值範圍是邏輯位』1』或』0』。邏輯位『1』或『0』必須加單引號。

process(a,b,s)–敏感訊號列表

用port( )來引導,並在語句結尾處加" ;

vhdl要求只有相同資料型別的埠訊號和運算元才能相互作用,系統不分大小寫

埠模式:

in輸入埠,定義的通道為單向唯讀模式

out輸出埠,定義的通道為單向輸出模式

inout定義的通道確定為輸入輸出雙向埠

buffer 緩衝埠,功能與inout類似,區別在於當需要輸入資料時,只允許內部回讀輸出的訊號,即允許反饋

與inout模式相比,buffer回讀的訊號不是由外部輸入的,而是由內部產生,向外輸出的訊號

關鍵字是指vhdl中預定義的有特殊含義的英文詞語,關鍵字對大小寫不敏感

識別符號是用於標識不同名稱的詞語,比如用於實體名,結構體名,埠名或訊號名等

識別符號必須以字母開頭,不能以下劃線結尾,不能出現連續的兩個或多個下劃線。

識別符號不應用數字,數字起頭的文字或中文來表述

賦值符「<=」兩邊的訊號的資料型別必須一致

vhdl邏輯操作符

and --> 邏輯與 nand -->邏輯與非

or --> 邏輯或 nor --> 邏輯或非

xor --> 邏輯異或 xnor --> 邏輯同或

not --> 邏輯取非

null在程式中代表不執行任何操作

std_logic_vector定義為標準一維陣列,陣列中的每個元素都是標準邏輯位std_logic。

在使用std_logic_vector中,必須註明其陣列寬度,即位寬。

vhdl規定:多餘一位的二進位制數必須加雙引號,而單一的二進位制數則用單引號。

能直接進行各種算術運算,但不能進行邏輯運算。

unsigned資料型別代表乙個無符號的數值,在綜合器中,這個數值被解釋為乙個二進位制數,這個二進位制數的最左位是其最高位。

signed資料型別表示乙個有符號的數值,補碼表示;正數的補碼是原碼,負數的補碼是在其原碼的基礎上,符號位不變,其餘各位取反,最後+1。

類似於一種容器,接受不同資料型別的賦值

常量(constant) 變數(variable) 訊號(signal)

常量(constant): 固定值,不能在程式中被改變

常數的定義格式為:constant 常數名:資料型別:=表示式;

變數(variable)只適用於程序或子程式中。

變數定義:variable 《變數名》:《資料型別》 [:=初始值]可省略;

變數賦值語法:目標變數名:= 表示式;

表示式指具體數值/運算表示式

訊號(signal)代表連線,port也是一種訊號。

沒有方向性,可給它賦值,也可當作輸入。

訊號定義:signal 《訊號名》 :《資料型別》 [:初值];

訊號和變數的賦值形式和執行過程不同:變數是立即賦值(:=),沒有延遲,而訊號賦值要有一定的延遲(<=)。

並置操作符 &

利用並置符可以用多種方式來建立新的陣列

格式一:

if 條件 then

順序執行語句;

end if

說明:非完整的條件句,通常用於產生時序電路。

格式二:

if 條件 then

順序執行語句1;

else

順序執行語句2;

end if

完整的條件語句,通常用於產生組合電路。

格式三:

if 條件1 then

順序執行語句1;

elsif 條件2 then

順序執行語句2;

…elsif 條件n then

順序執行語句n;

else 順序語句;

end if;

格式四:

if 條件句 then

if 條件句 then

…end if;

end if;

格式三、格式四:即可以產生時序電路,也可以產生組合電路,或是兩者的組合。

屬於並行語句,它不需要程序語句引導。在結構體中條件訊號賦值語句的功能與if語句相同。

格式:賦值目標 <= 表示式1 when 賦值條件1 else

表示式2 when賦值條件2 else

…表示式n;

屬於並行語句,不能在程序中使用,功能與程序中的case語句比較相似

with 選擇表示式 select

賦值目標訊號 <= 表示式1 when選擇值1

表示式2 when選擇值2,

…表示式n when選擇值n;

元件例化:就是引入一種連線關係,將預先設計好的實體定義為乙個元件,然後利用特定語句將此元件與當前設計實體中的指定埠相連線,從而為當前設計實體引進乙個低一級的設計層次。

第一部分,先將乙個現成的設計實體定義為乙個元件。即對要呼叫的元件做呼叫說明:

component 元件名 is

port (埠名錶);

end component 檔名;

注意: 埠訊號的資料型別及訊號的排列方式都要與原檔案一致

第二部分,此元件與當前設計實體(頂層檔案)中元件間連線埠的連線說明。兩種迴圈控制語句:

for loop迴圈 和 while loop迴圈。

for loop迴圈主要用在規定數目的重複情況;

while loop則根據控制條件執行迴圈直到條件為false。

(1)for loop語句

for loop格式:

[標號:]for 迴圈變數 in 迴圈次數範圍 loop

順序處理語句;

end loop[標號];

(2)while loop語句

while loop格式:

[ loop標號:] while 條件 loop

順序處理語句;

end loop[標號];

如果條件為真,則進行迴圈,否則結束迴圈。

省略賦值操作符

r1:=(others=>』0』);等效於r1:=「00000000」

為簡化表達和位數不定情況下的賦值,可使用短語(others=>x)

移位操作符

移位運算子包括:

sll(邏輯左移)、srl(邏輯右移);(補0)

1010 <= 1101 => 0110 跟進的位補零

sla(算術左移)、sra(算術右移);(不變)

1011 <= 1101 => 1110 移出的位用最初的首位填補

rol(邏輯迴圈左移)、ror(邏輯迴圈右移);

1011 <= 1101 => 1110 移出的位用於依次填補移空的位,自迴圈

vhdl是一種強型別語言,其運算操作符對運算元的資料型別有嚴格要求。對於乘法操作,當運算元是std_logic_vector型別時,必須指定運算元是無符號還是有符號型別,即呼叫程式包std_logic_unsigned std_logic_signed來區別;

對於加法操作,無須區分,vhdl綜合器總是認定加法運算元是無符號數。

如有錯誤,請批評指正

EDA硬體描述語言VHDL(二)

乙個完整的vhdl程式 稱為設計實體。1 庫和程式包呼叫宣告語句構成的模組 2 描述電路訊號埠和引數通道的實體模組 3 具體描述電路功能的結構體模組 entity 實體名 is generic 引數名 資料型別 port 埠表 資料型別 end entity 實體名 1 實體名 實體名最好根據相應電...

EDA筆記 8 VHDL描述風格

目錄 一.行為描述 二.資料流描述 三.結構描述 四.總結 1.如果vhdl的結構體只描述了所希望電路的功能 行為,而沒有直接指明或涉及實現這些行為的硬體結構,則稱為行為描述。2.行為描述只表示輸入與輸出間轉換的行為,它不包含任何結構資訊。3.行為描述主要使用函式 過程和程序語句,以演算法形式描述資...

FPGA設計 VHDL語言篇 1 模組例化

關於模組例化有兩種方式,一種是通過宣告,在進行例化,另一種是直接進行例化操作,第一種可以通過configuration進行配置,便於統一管理配置,第二種呼叫方便,但不能通過configuration進行配置,不利於日後配置結構體。宣告 component port port1 port2 end c...