VHDL運算符和庫的使用


VHDL的運算符號VHDL中主要有六類運算符號:賦值運算、邏輯運算、算術運算關系運算、連接運算、移位運算運算符號主要用於各類表達式中;

運算可以分為單目運算(只有一個運算量)和雙目運算(針對兩個運算量);進行雙目運算時,兩個運算量必須類型相同;VHDL中運算沒有左右優先級差別,同一表達式中進行多個運算時必須用括號表達先后差別;

在同類運算中,單目運算優先;在所有運算符號中, NOT的優先級別最高;

賦值運算符

<=  信號賦值:將右端值賦給左端信號;

:= 變量賦值:將右端值賦給左端變量;或用於賦初始值;

=>數組內部分元素賦值;適用類型: 所有數據類型;

賦值號兩邊的數據類型原則上應該相同;

邏輯運算符 

NOT AND OR NAND NOR XOR適用類型:STD LOGIC STD LOGIC VECTORBIT BIT VECTOR BOOLEAN

邏輯運算結果為同類型邏輯量;對數組類型進行邏輯運算時,參與運算的兩個數據位數必須相等,所做運算為對應位進行;

 

算術運算:

/ 除)* (乘) + (加)減MOD (求模) REM (取余) ** (指數) ABS (絕對值)適用類型:INTEGER REAL BIT BIT VECTOR TIME

加/減運算的結果為同類型算術量;注意:算術運算大多數只用於抽象的編程(行為設計); 

只有少數算術運算符能夠進行綜合,應盡量只使用加/減;對數組類型進行算術運算時,兩邊位數必須相同;

 

關系運算:

=> (大於等於) <= (小於等於)> (大於)< (小於) /= (不等於) = (等於)適用類型:等於和不等於適用於所有類型;

其他運算適用於整數、實數、位、位矢量,以及枚舉類型和數組類型;

可比較位長度不相同的情況(從左向右逐位比較);關系運算的結果為boolean類型: false true

注意:小於等於符號與信號賦值符號的寫法相同,應注意使用位置和意義;

 

連接運算: & 

適用類型bit bitvector character stringstd logic std logic_vector

連接運算結果為同類型元素構成的數組; 

 

庫和包集合除了實體、結構體外的第三種可編程結構

Library 庫編譯后數據的集合,存放包集合定義、實體定義、構造體定義和配置定義,

其功能相當於其他操作系統中的目錄,經過說明后,設計中就可以使用庫中的數據,實現共享;在前面圖形輸入的應用中,已多次采用庫中的單元進行設計

 

庫的使用:

當使用庫時,需要說明使用的庫名稱,同時需要說明庫中包集合的名稱及范圍;每個實體都應獨立進行庫的說明;

庫的說明應該在實體之前;經過說明后,實體和結構體就可以自動調用庫中的資源;

庫說明語句格式library庫名;use庫名包集合名.范圍(或項目名);

例: library ieee;use ieee.std_logic_1164.all:VHDL中庫的主要種類:IEEE庫 STD庫 ASIC庫work庫 用戶定義庫IEEE庫:含有IEEE的標准包集合"STD-LOGIC-1164"以及一些大公司提供的包集合;使用前必須說明;例:library ieee; 

 

VHDL中庫的主要種類:

IEEE庫    STD庫    ASIC庫   work庫   用戶定義庫

 

IEEE庫:含有IEEE的標准包集合"STD-LOGIC-1164"以及一些大公司提供的包集合;使用前必須說明;例:library ieee.

use ieee.std logic 1164.all;使用標准邏輯量的定義和運算;

use ieeestd logic-unsigned.all;無符號數算術運算的定義;

use ieee.std logic-arith.all;使用符號數算術運算的定義;

 

STD庫:

含有"STANDARD"包集合和"TEXTIO"包集合,使用前者時無需說明;

 

ASIC庫:

由各公司提供,存放與邏輯門-對應的實體,用於ASIC設計的門級仿真,使用時需加以說明;例library altera;use altera.maxplus2.all;library Ipmuse Ipm.Ipm_components.all

 

WORK庫:

WORK庫為現行作業庫,位於當前使用時設計文件的指定保存目錄; 

WORK使用時通常無須說明;但在結構設計中進行元件,的宏調用時需要說明;例: use work.all

 

用戶定義庫:

由用戶自定義生成,使用時需說明(指定庫所在的路徑);

package包集合用於羅列VHDL語言中使用的類型定義、信號定義、常數定義、元件定義、函數定義和過程定義等(類似於C語言中的include語句),

方便不同模塊的設計中公共定義的共享;

 

數字電路設計中經常使用的包集合:

ieee.std_logic_1164邏輯量的定義

ieee.std_logic_arith數據轉換,邏輯判斷

ieee.std_logic_unsigned 算術運算

std.textio文本數據輸入/輸出格式包集合在使用前必須采用use語句進行說明(在設計程序的最前面);

 

包集合可以由用戶自定義; 

包的結構與定義: (用戶自定義的包集合)包集合標題+ (包集合體)包集合標題:

package包集合名is

說明語句; (只有名稱)

end包集合名;

包集合體:package body包集合名is

說明語句; (完整定義)end包集合名;

例: (函數取自p.279表4-38 )library ieee;use ieee.std_logic_1164.all; 

 

library ieee;

use ieee. std_logic 1164. all;

packge upac isconstant k: integer:= 4:subtype cpu_bus is std_logic-vector(k-1downto 0);

function conv_integer (x:std_logic_vector) return integer;

end upac;

packge body upac is

function conv_integer (x: std_logic_vector) return integer is

variable result:

integer;

begin

result :=0;

for I in x'range loop

result :=result*2:

 case x(i) is when 'O'L' =>null;

when '1'H'=> result := result+ 1;

when others =>null: 

end case;

end loop;

return result;

end conv_integer;

end upac;

用戶自行編寫的包集合將自動存放於WORK庫中,使用時可采用下列語句調用use work.upac.all; 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM