目的:摘錄點自己容易忘的知識點,也可以供讀者參考學習
工作平台–計算機
開發環境–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...