EDA筆記(1)--VHDL語言

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

EDA技術的概念

工作平臺–計算機
開發環境–EDA軟件
設計語言–硬件描述語言(HDL)
試驗載體–可編程邏輯器件(PLD)
目標器件–ASIC芯片
應用方向–電子系統設計

EDA應用領域

印刷電路板(PCB)設計
集成電路(IC或ASIC)設計
可編程邏輯器件(FPGA/CPLD)設計
混合電路設計

PLD概述

基本的門電路包括組合電路時序電路
任何的時序電路都可由組合電路加上存儲元件(鎖存器,觸發器)構成
可編程邏輯器件(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語句

格式一:
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;
格式三、格式四:即可以產生時序電路,也可以產生組合電路,或是兩者的組合。

WHEN_ELSE條件信號賦值語句

屬於並行語句,它不需要進程語句引導。在結構體中條件信號賦值語句的功能與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 文件名;
注意: 端口信號的數據類型及信號的排列方式都要與原文件一致

第二部分,此元件與當前設計實體(頂層文件)中元件間連接端口的連接說明。
端口映射語句格式如下:
例化名:元件名PORT MAP( [端口名=>]連接端口名,…);
PORT MAP爲關鍵詞。“=>”代表連接關係。
端口名爲待調用的元件本身的端口名。
連接端口名爲頂層文件中準備與調用元件的端口相連的端口名

LOOP語句

兩種循環控制語句:
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綜合器總是認定加法操作數是無符號數。

結尾

如有錯誤,請批評指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章