VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫.

Slides:



Advertisements
Similar presentations
什么是SOPC: SOPC是英文System On a Programmable Chip的缩写,称为片上可编程系统。SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理等融为一体,综合了各自的优势,且在结构上形成一块芯片。 为什么用SOPC:SOPC是现代电子技术和电子系统设计的发展趋势,建立了电子系统设计的新模式。用户利用SOPC开发平台,自行设计高速、高性能的DSP处理器、特定功能的CPU及其外围接口电路,创建结构最为简洁的电子系统。
Advertisements

第 2 章 初探 C++.
做实验过程中发现的问题: 新建时工程文件夹建立了,但所建实体文件并没存放在其中 文件名不能用汉字
第四章:代谢与平衡 第一节:食物与营养.
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月19日星期日.
第4章 VHDL设计初步.
Combinational Logic 組合邏輯
新世代計算機概論 第14章 程式語言.
第6章 VHDL设计应用实例 6.1 8位加法器的设计 6.3 序列检测器的设计 6.4 正负脉宽数控调制信号发生器的设计
EPF10K10TI144-4晶片燒錄.
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
第1章 FPGA概述 1.1 FPGA的发展历程 1.2 FPGA的基本原理 1.3 FPGA的设计方法 1.4 FPGA的设计流程
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
VHDL數位電路實習與專題設計 文魁資訊-UE301
課程名稱:程式設計 授課老師:________
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
VHDL數位電路實習與專題設計 文魁資訊-UE301
8.9二进制振幅键控(ASK) 调制器与解调器设计
Chapter 5 Verilog硬體描述語言
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
VHDL 硬體描述語言 數位電路設計實務 第四章 VHDL 的語言結構.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
1 巨集 2 資料型態 3 物件、屬性、方法與事件 4 陳述式與副函式 5 其他注意事項 6 範例
EDA原理及应用 何宾
使用VHDL設計—4位元減法器 通訊一甲 B 楊穎穆.
EDA原理及应用 何宾
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
第九章 数字系统设计 数字系统设计概述 ASM图、MDS图以及 ASM图至MDS图的转换 数字密码引爆器系统设计 数字系统设计实例 小结.
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
使用VHDL設計—向上&向下計數器 通訊一甲 B 楊穎穆.
第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
第2章 Quartus II设计向导 2.1 频率计的VHDL设计 2.2 使用宏功能块设计频率计 2.3 嵌入式系统块ESB的应用
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
變數命名 保留字(Reserved Word)
使用VHDL設計--Moore Machine
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
Visual Basic 6.0 ——程序设计.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
第12章 图像边缘检测器的设计与分析 12.1 系统设计要求 12.2 系统设计方案 12.3 主要LPM原理图和VHDL源程序
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
第五章 VHDL设计基础 本章重点: 本章难点: VHDL程序结构 VHDL的基本数据类型 VHDL的基本描述语句 基本组合逻辑电路设计
義守大學電機工程學系 陳慶瀚 第3章 VHDL Concurrent語法 義守大學電機工程學系 陳慶瀚
第六章 VHDL设计共享.
第五章 VHDL主要描述语句.
使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
抢答器 设计一个2人抢答器。要求如下: 设计任务 1.两人抢答,先抢为有效,用发光二极 管显示是否抢到优先答题权。
Speaker: Liu Yu-Jiun Date: 2009/4/29
计算机学院 数字逻辑实验的要求.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
數位邏輯設計 VHDL.
參數 實際參數(Actual parameter)與形式參數(Formal parameter)
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
使用VHDL設計-8x1多工器 通訊一甲 B 楊穎穆.
自停式向下計數器 通訊一甲 B 楊穎穆.
第7章 VHDL设计应用实例 7.1 8位加法器的设计 7.2 分频电路 7.3 数字秒表的设计.
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
可變式計數器 通訊一甲 B 楊穎穆.
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2009年10月22日
Programmable Logic System Design
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
第6章 PHP基本語法介紹.
第七章 基本逻辑电路设计.
104學年度第二學期 燈音開課 03/14燈光開課.
其解亦可表为向量形式.
Programmable Logic System Design
Presentation transcript:

VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫

6-1 function 函數宣告 在行為模型 (Behavioral Model) 的設計中、我們通常在程式的許多地方重複著相同描述的程式碼,這樣的情況在一般的電腦程式語言裡、通常將重複用到的程式碼設計成函數或是程序的形式,再去引用、而不用繁瑣的鍵入同樣的程式碼,在 VHDL 中對於相同的程式碼可以在程式中的不同地方被引用而不需要繁瑣的一再鍵入相同的程式碼。 function 敘述如同在 Quick Basic 程式語言、Pascal 程式語言或 Fortran 程式語言裡的 function。 function 的傳回值是儲存在和函數同樣名樣的這個變數中。 function 可以接受一個或多個參數而將 function 運算 / 處理完成之後會傳回一個值。 由於 VHDL 對於型態的檢查特別地嚴謹,所以實際參數與相對應 function 位置的參數二者的型態必需要一致。 function 必需寫在 package body package_name is … end package_name; 或 entity entity-name is … end entity-name; 或者是 architecture … begin 之內。

function function-name ( signal-name-1 : signal-type; ... signal-name-N : signal-type ) return return-type is ”宣告部份“ begin sequential-statement end function-name;

其中: u function-name 用來描述這個 function 的名稱。function 的名稱上下要一樣,例如: function StrCat ( … begin ... end StrCat; u signal-names-1 …signal-names-N 用來描述參數的名稱,二個參數之間要用分號 (;) 區隔開來。 這個部份可以不寫。 u signal-type 訊號的型態,用來描述參數的型態。 例如:std_logic、std_logic_vector( 3 downto 0)、bit_vector( 3 downto 0) … 等等。請參考“VHDL 內定的資料型態”。 u ) return return-type is return 是“傳回”的意思,return-type 是回傳訊號的型態。

u ”宣告部份“ ”宣告部份“ 是可以不寫的,但內容可以包括: l subprogram declaration, 程序宣告 l subprogram body, 程序內容 l type declaration, 型態宣告 用來定義只能在 function 區塊內使用的“使用者自行定義的型態”(User-Define type)。例如請看“architecture 的語法”。 l subtype declaration, 子型態宣告 l constant declaration, 常數宣告 用來定義只能在 function 區塊內使用的“常數”,跟 C 語言的 #define 以及 Verilog 的 parameter 一樣。例如請看“常數 constant 宣告”。 l variable declaration, 變數宣告 用來定義只能在 function 區塊內使用的變數。例如: variable sig : std_logic; variable value : bit_vector(7 downto 0) := "01010101";

l file declaration, 檔案宣告 l alias declaration, 別名宣告 l use clause, use 子句 l group declaration, 群組宣告 l function declaration, 函數宣告 用來定義只能在 function 區塊內使用之函數內的巢狀函數 (nested function) 。 l procedure declaration, 程序宣告 定義只能在 function 區塊內使用的 procedure (程序)。例如請看“procedure 程序宣告”。 u 最後是 begin … end function-name 區塊 用來描述 function 的功能。在這個區塊內可以有:訊號的指定動作、if … else 之類可以寫在 process 內的敘述。

在 function 中可以再定義自己 function 區塊內的型態 (type)、常數(constant)、變數 (variable)、程序 (procedure) 以及函數內的巢狀函數 (nested function),函數內的 type、constant、variable、procedure以及 function 在函數之外是不能夠引用的。例如: function hash (constant a : addr_t) return integer is begin return conv_integer(a(15 downto 0)); end;   function to_char( A : std_logic) return character is begin -- 將 std_logic 轉換成 character case A is when '0' | 'L' => return '0'; when '1' | 'H' => return '1'; when 'Z' => return 'Z'; when OTHERS => return 'X'; end case;

function to_std_logic ( B : character) return std_logic is begin -- 將 character 轉換成 std_logic case B is when '0' => return '0'; when '1' => return '1'; when OTHERS => return 'X'; end case; end;   function to_string( A : std_logic_vector) return string is variable stmp : string( A'left+1 downto 1); begin -- 將 std_logic_vector 轉換成 string for i in A'reverse_range loop if A(i) = '1' then stmp(i+1) := '1'; elsif A(i) = '0' then stmp(i+1) := '0'; else stmp(i+1) := 'X'; end if; end loop; return stmp;

function to_std_logic_vector ( B : string) return std_logic_vector is variable res : std_logic_vector (B'range); begin -- 將 string 轉換成 std_logic_vector for i in B'range loop case B(i) is when '0' => res(i) := '0'; when '1' => res(i) := '1'; when OTHERS => res(i) := 'X'; end case; end loop; return res; end;

使用函數設計 『相加、加1及相減處理』的方塊圖 use work.pkg_Func_Add_Sub.all;   entity Func_Add_Sub is port( a : in std_logic_vector( 4 downto 0); b : in std_logic_vector( 4 downto 0); Add : in std_logic; Sub : in std_logic; Inc : in std_logic; Switch : in std_logic; c : out std_logic_vector( 4 downto 0) ); end Func_Add_Sub;

architecture arc of Func_Add_Sub is function Sub_Inc_Dec ( a : std_logic_vector( 4 downto 0); b : std_logic_vector( 4 downto 0); Sub : std_logic; Inc : std_logic ) return std_logic_vector is constant Is_1 : std_logic_vector( 4 downto 0) := conv_std_logic_vector( 1, 6)( 4 downto 0); variable result : std_logic_vector( 5 downto 0); begin if ( Sub = '1' ) then -- a 減 b result := signed(a(4)&a) - signed(b); elsif ( Inc = '1' ) then -- a 加 1 result := signed(a(4)&a) + unsigned(Is_1); else -- a 減 1 result := signed(a(4)&a) - unsigned(Is_1); end if; return result; end Sub_Inc_Dec;

begin Do_function: process( a, b, Add, Sub, Inc, Switch ) variable result : std_logic_vector( 5 downto 0); if ( Add = '1' ) then result := signed(a(4)&a) + signed(b); else if ( Switch = '0' ) then result := Sub_Inc_Dec(a, b, Sub, Inc); result := Sub_Inc_Dec(b, a, Sub, Inc); end if; c <= result( 4 downto 0); end process Do_function; end arc;

使用函數設計 『最多只加10的處理』的方塊圖 use work.pkg_Add_Less_Than10.all;   entity Add_Less_Than10 is port( a : in std_logic_vector( 4 downto 0); b : in std_logic_vector( 4 downto 0); c : out std_logic_vector( 5 downto 0) ); end Add_Less_Than10;

architecture arc of Add_Less_Than10 is function Add_LT_10 ( a : std_logic_vector( 4 downto 0); b : std_logic_vector( 4 downto 0) ) return std_logic_vector is constant Is_10 : std_logic_vector( 4 downto 0) := conv_std_logic_vector( 10, 6)( 4 downto 0); variable temp : std_logic_vector( 4 downto 0); variable result : std_logic_vector( 5 downto 0); begin if ( b <= 10 ) then temp := b; -- b <= 10, +b else temp := Is_10; -- b > 10, +10 end if; result := signed(a(4)&a) + signed(temp); return result; end Add_LT_10; Do_function: process( a, b ) c <= Add_LT_10(a, b); end process Do_function; end arc;

6-2 procedure 程序宣告 procedure 敘述與 function 敘述大致相同、都是將模組中重複用到的程式碼設計成函數或是程序的形式,再去引用、而不用繁瑣的鍵入同樣的程式碼。不同的是 procedure 處理完成之後傳回值可以有許多個。 procedure 區塊裡面可以用來作運算的處理,也可能只是作一些一般性的敘述已並沒有傳回值的處理。 procedure敘述如同在 Quick Basic 程式語言或 Fortran 程式語言裡的Sub-Routine 或 Pascal 程式語言的 Procedure。 procedure 可以有零個或許多個參數,而 function 至少要有一個或以上的參數。 procedure 處理完成之後傳回值可以有許多個。function 處理完成之後傳回值只能有一個。

procedure procedure-name ( signal-name-1 : signal-type; ... signal-name-N : signal-type ) is ”宣告部份“ begin sequential-statement end procedure procedure-name;

其中: u procedure-name 用來描述這個 procedure 的名稱。procedure 的名稱上下要一樣,例如: procedure Sort_4_Data ( … begin ... end procedure Sort_4_Data; 也可以只寫成: end; u signal-names-1 …signal-names-N 用來描述參數的名稱,二個參數之間要用分號 (;) 區隔開來。 這個部份可以不寫。

u signal-type 訊號的型態,用來描述參數的型態。 例如:std_logic、std_logic_vector( 3 downto 0)、bit_vector( 3 downto 0) … 等等。請參考“VHDL 內定的資料型態”。 u ”宣告部份“ ”宣告部份“ 是可以不寫的,但內容可以包括: l subprogram declaration, 程序宣告 l subprogram body, 程序內容 l type declaration, 型態宣告 l subtype declaration, 子型態宣告 l constant declaration, 常數宣告 l variable declaration, 變數宣告 用來定義只能在 function 區塊內使用的變數。例如: variable sig : std_logic; variable value : bit_vector(7 downto 0) := "01010101"; l file declaration, 檔案宣告 l alias declaration, 別名宣告 l use clause, use 子句 l group declaration, 群組宣告

u 最後是 begin … end procedure procedure-name 區塊 用來描述 procedure 的功能。在這個區塊內可以有:訊號的指定動作、if … else 之類可以寫在 process 內的敘述。 例如: procedure lookup_cache(constant a : addr_t) is variable i : integer; variable found : boolean; begin i := hash(a); found := valid_mem(i) and (a(tag_word_t'range) = atag_mem(i)); if found then hit <= '1'; else hit <= '0'; end if; end procedure lookup_cache;

使用procedure 『排序4筆資料』的方塊圖 由小到大排序4筆資料 (結果: ra <= rb <= rc <= rd)。 library ieee; use ieee.std_logic_1164.all;   package pkg_Sort4 is component Sort4 port( a : in std_logic_vector( 3 downto 0); b : in std_logic_vector( 3 downto 0); c : in std_logic_vector( 3 downto 0); d : in std_logic_vector( 3 downto 0); ra : out std_logic_vector( 3 downto 0); rb : out std_logic_vector( 3 downto 0); rc : out std_logic_vector( 3 downto 0); rd : out std_logic_vector( 3 downto 0) ); end component;

procedure Sort_2_Data ( x : inout std_logic_vector( 3 downto 0); y : inout std_logic_vector( 3 downto 0) ); end pkg_Sort4;   package body pkg_Sort4 is ) is variable temp : std_logic_vector( 3 downto 0); begin if ( x > y ) then temp := x; -- 交換 (Swap) x := y; y := temp; end if; end;

use work.pkg_Sort4.all;   entity Sort4 is port( a : in std_logic_vector( 3 downto 0); b : in std_logic_vector( 3 downto 0); c : in std_logic_vector( 3 downto 0); d : in std_logic_vector( 3 downto 0); ra : out std_logic_vector( 3 downto 0); rb : out std_logic_vector( 3 downto 0); rc : out std_logic_vector( 3 downto 0); rd : out std_logic_vector( 3 downto 0) ); end Sort4;

architecture arc of Sort4 is begin Do_procedure: process( a, b, c, d ) variable va, vb, vc, vd : std_logic_vector( 3 downto 0); va := a; vb := b; vc := c; vd := d; Sort_2_Data(va, vc); Sort_2_Data(vb, vd); Sort_2_Data(va, vb); Sort_2_Data(vc, vd); Sort_2_Data(vb, vc); ra <= va; rb <= vb; rc <= vc; rd <= vd; end process Do_procedure; end arc;

使用procedure設計 『2對4解碼器』的方塊圖 entity Decoder2to4 is port ( Sel_In : in std_logic_vector( 1 downto 0);   Dec_Out : out std_logic_vector( 3 downto 0) ); end Decoder2to4; 

architecture arch of Decoder2to4 is procedure Decoder2to4(Sel : in std_logic_vector(1 downto 0); Result : out std_logic_vector(3 downto 0)) is begin case Sel is when "00" => Result := "0001"; when "01" => Result := "0010"; when "10" => Result := "0100"; when "11" => Result := "1000"; when others => Result := "0000"; end case; end;

begin Do_Dec_2to4: process(Sel_In) variable Dec_Result : std_logic_vector(3 downto 0); Decoder2to4(Sel_In, Dec_Result); Dec_Out <= Dec_Result; end process Do_Dec_2to4; end arch;

6-3 function 與 procedure 宣告的 差異 u procedure 敘述與 function 敘述大致相同,都是將模組中重複用到的程式碼設計成函數或是程序的形式,再去引用、而不用繁瑣的鍵入同樣的程式碼。 u function 與 procedure 敘述都可以引用其他的 procedure 與function。 u function 與 procedure 敘述都可以擁有本身區域內的變數。 u function 與 procedure 敘述只能用於行為模型 (Behavioral Model) 的敘述中、且本身不能有 process 的敘述,但是通常是在一個 process 區塊中被引用。

6-4 VHDL 的 Library 以及 package 敘述 VHDL 的程式庫是讓“編譯軟體” (compiler) 儲存電路或者是專案設計資訊的地方。 “編譯軟體”預設會將編譯好的資訊放到一個叫作 work 的 library。 每當“編譯軟體”編譯產生新的模組 / 單體 (entity資訊,預設都會加到 work 這個 library 裡面。 “編譯軟體”也會尋找在 work 這個 library 裡面己經編譯好的模組 / 單體 (entity) 資訊,好讓某個正在編譯的模組可以引用到已經存在的模組 / 單體 (entity)。 也可以使用 library 內己經編譯好的模組 / 單體 (entity),例如:使用整個 IEEE library。 library IEEE;

6-4.2 package 敘述 您在 architecture 區塊中所定義的 procedure、function、constant、…等等都無法讓其他的 VHDL entity 來引用。 package 以及 library 敘述提供了可以讓每一個 architecture 都能存取到寫在 package 中的procedure、function、constant、…等等。 package 敘述裡面是用來作為全域性的資訊像是:constant 常數、attribute 屬性、type 型態、sub-type 子型態、component 的宣告、function 函數以及 procedure 程序的地方。

package 包含二大部份 宣告部份 (package declaration) 宣告 constant 常數、attribute 屬性、type 型態、sub-type 子型態、component 的宣告、attribute 的宣告、 function 函數的宣告以及 procedure 程序的宣告。 語法: package package_name is ”宣告部份“ end package;

u package_name 是 package 的名稱。 u ”宣告部份“ l type declaration, 型態宣告 其中: u package_name 是 package 的名稱。 u ”宣告部份“ l subprogram declaration, 程序宣告 l type declaration, 型態宣告 l subtype declaration, 子型態宣告 l constant declaration, 常數宣告 l signal declaration, 訊號宣告 l variable declaration, 變數宣告 l file declaration, 檔案宣告 l alias declaration, 別名宣告 l component declaration, 元件宣告 l attribute declaration, 屬性宣告 l attribute specification, 屬性規格 l use clause, use 子句 l group template declaration, 群組樣版宣告 l group declaration, 群組宣告

例如: package my_package is type ON_OFF is ( ON, OFF ); constant My_ID : INTEGER; constant MATH_E : real := 2.71828_18284_59045_23536; function find_min ( a, b : integer ) return integer; procedure Sort_2_Data ( x : inout std_logic_vector( 3 downto 0); y : inout std_logic_vector( 3 downto 0) ); end my_package;

主體部份 (package body) 真正的 function 函數內容以及 procedure 程序內容的地方。 例如: package body my_package is function find_min ( a, b : integer ) return integer is variable result : integer; begin if ( a <= b ) then result := a; else result := b; end if; return result; end find_min; -- end; -- 也可以只寫 end;

procedure Sort_2_Data ( x : inout std_logic_vector( 3 downto 0); y : inout std_logic_vector( 3 downto 0) ) is variable temp : std_logic_vector( 3 downto 0); begin if ( x > y ) then temp := x; -- 交換 (Swap) x := y; y := temp; end if; end Sort_2_Data; -- end; -- 也可以只寫 end; end my_package; 因為已經事先寫好了 package,這樣子某一個 VHDL 電路只要用 use 敘述就能引用寫好的全域性的資訊、單體 (entity)、函數以及程序。語法如下: use library-name.package-name.object-to-be-used 例如:use work.pkg_my_package.all; -- 全部都要用 use work.pkg_my_package.Sort_2_Data; -- 只要用 Sort_2_Data

6-5 IEEE 與 STD 二套 Library 6-5.1 IEEE Library 一般來說使用方法,如下: use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_signed.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_textio.all; use ieee.numeric_bit.all; use ieee.numeric_std.all; use ieee.math_real.all; use ieee.math_complex.all;

std_logic_1164 套件 std_logic_1164 這個 package,提供增強型的訊號型態。 在這個 package 裡頭的 type 定義:std_ulogic、std_ulogic_vector、std_logic以及std_logic_vector。 在這個 package 裡頭的 function:resolved。 在這個 package 裡頭的邏輯運算子 (logical operator):and、nand、or、nor、xor、xnor以及not。 在這個 package 裡頭的轉換 (conversion) 函數:To_bit、To_bitvector、To_StdULogic、To_StdLogicVector以及To_StdULogicVector。 在這個 package 裡頭的轉換 (conversion) 函數:To_X01、To_X01Z以及To_UX01。 在這個 package 裡頭的訊號邊緣偵測 (edge detection):rising_edge以及falling_edge。 在這個 package 裡頭的 object contains an unknown:Is_X。

std_logic_arith 套件 std_logic_arith 這個 package,提供給:signed、unsigned、small_int、integer、std_ulogic、std_logic以及std_logic_vector等等資料型態使用的算術運算 (arithemtic) 函數、轉換 (conversion) 函數以及比較(comparison) 函數。 在這個 package 裡頭的 type 定義:unsigned、signed、tbl_type以及tbl_mvl9_boolean。 在這個 package 裡頭的 function:+、-、abs、*、<、<=、>、>=、=、/=、shl、shr、conv_integer、conv_unsigned、conv_signed、conv_std_logic_vector、ext、sxt、max、min、make_binary、left_signed_arg、left_unsigned_arg、mult_signed_arg、mult_unsigned_arg、mult、minus、plus、unsigned_minus、unsigned_plus、unsigned_return_boolean、signed_return_boolean、is_less、is_less_or_equal、unsigned_is_less、unsigned_is_less_or_equal、bitwise_eql以及bitwise_neq。

std_logic_signed 套件 std_logic_signed 這個 package,用於有號數 (signed) 2的補數 (2's-complement) 運算,提供給:std_logic_vector資料型態使用的算術運算 (arithemtic) 函數、轉換 (conversion) 函數以及比較(comparison) 函數。 在這個 package 裡頭的 function:+、-、abs、*、<、<=、>、>=、=、/=、shl、shr、conv_integer以及maximum。

std_logic_unsigned 套件 std_logic_unsigned 這個 package,用於無號數 (unsigned) 運算,提供給:std_logic_vector資料型態使用的算術運算 (arithemtic) 函數、轉換 (conversion) 函數以及比較(comparison) 函數。 在這個 package 裡頭的 function:+、-、abs、*、<、<=、>、>=、=、/=、shl、shr、conv_integer以及maximum。

std_logic_textio 套件 std_logic_textio 這個 package,用於 1164 資料型態檔案的存取處理。 在這個 package 裡頭的 type 定義:MVL9plus、char_indexed_by_MVL9、MVL9_indexed_by_char以及MVL9plus_indexed_by_char。 在這個 package 裡頭的 function:Int_to_string、Skip_white、Shrink_line、Grow_line、Report_results、lower_case、strcmp、Extract_integer以及Extract_real。 在這個 package 裡頭的 procedure:readline、read、writeline、write、 endline、Char2QuadBits、HREAD、HWRITE、Char2TriBits、OREAD、OWRITE以及Int_to_string。

numeric_bit 套件 numeric_bit 這個 package,提供給:無號數 (unsigned number) 以及有號數 (signed number) 資料型態使用的算術運算 (arithemtic) 函數、比較 (comparison) 函數移位與旋轉函數 (shift and rotate)、以及轉換 (conversion) 函數。再加上邏輯運算子 (logical operator),訊號邊緣偵測(edge detection)。 在這個 package 裡頭的 type 定義:unsigned以及signed。 在這個 package 裡頭的 function:abs、-、+、*、/、rem、mod、>、<、>=、<=、=、/=、shift_left、shift_right、rotate_left、rotate_right、sll、srl、rol、ror、resize、to_integer、to_unsigned、to_signed、not、and、or、nand、nor、xor、xnor、rising_edge、falling_edge、max、min、signed_num_bits、unsigned_num_bits、add_unsigned、add_signed、xsll、xsrl、xsra、xrol、xror、unsigned_equal、signed_equal、unsigned_less、signed_less、unsigned_less_or_equal以及signed_less_or_equal。 在這個 package 裡頭的 procedure:divmod。

numeric_std 套件 numeric_std 這個 package,提供數值 (numerical) 運算,包括:算術運算 (arithemtic) 函數、比較 (comparison) 函數移位與旋轉函數 (shift and rotate)、以及轉換 (conversion) 函數。再加上邏輯運算子 (logical operator),比對 (match) 函數以及stdulogic_table、and_table、match_table。 在這個 package 裡頭的 type 定義:unsigned以及signed。 在這個 package 裡頭的 function:abs、+、-、*、/rem、mod、>、<、>=、<=、=、/=、shift_left、shift_right、rotate_left、rotate_right、resize、to_integer、to_unsigned、to_signed、to_stdlogicvector、not、and、or、nand、nor、xor、std_match、max、min、signed_num_bits、unsigned_num_bits、add_unsigned、add_signed、xsll、xsrl、xsra、xrol、xror、unsigned_equal、signed_equal、unsigned_less、signed_less、unsigned_less_or_equal、signed_less_or_equal、to_01。

math_real 套件 math_real 這個 package,提供常用的:實數常數 (real constant)、實數函數。 在這個 package 裡頭的 type 定義:complex、complex_vector 以及complex_polar。 在這個 package 裡頭的 function:sign、ceil、floor、round、fmax、fmin、uniform、srand、rand、get_rand_max、sqrt、cbrt、**、exp、log、sin、cos、tan、asin、acos、atan、atan2、sinh、cosh、tanh、asinh、acosh以及atanh。cabs、carg、cmplx、+、-、*、/、conj、csqrt、cexp、complex_to_polar、polar_to_complex、power_of_2_series、cordic、sign。

math_complex 套件 math_complex 這個 package,提供常用的:複數常數 (complex constant)、複數函數。 在這個 package 裡頭的 type 定義:complex、complex_vector以及complex_pola。 在這個 package 裡頭的 function:cabs、carg、cmplx、+、-、*、/、conj、csqrt、cexp、complex_to_polar以及polar_to_complex。

standard 套件 其實存在著 standard 這個 package,不過因為它是公認的“標準”,所以“VHDL 編譯器”自動會將它引用進來。 在這個 package 裡頭的 type 定義:boolean、bit、character、severity_level integer、real、time、delay_length、natural、positive、string、bit_vector、file_open_kind以及file_open_status。 在這個 package 裡頭的 impure function:now。 使用 IEEE 的 package 必需注意的問題: 同一個 entity … architecture 區塊裡面,不能同時使用 std_logic_unsigned 以及 std_logic_signed 這二個 package,只能二選一,也就是只能挑用“無號數 unsigned”運算或者是“有號數 signed”運算。 VHDL 的程式庫是讓“編譯軟體” (compiler) 儲存電路或者是專案設計資訊的地方。

6-5.2 STD Library 一般來說使用方法,如下: library std; use std.textio; textio 套件 textio 這個 package,用於檔案的存取處理。 在這個 package 裡頭的 type 定義:line、text、side以及width。 在這個 package 裡頭的 function:Int_to_string、Skip_white、Shrink_line、Grow_line、Report_results、lower_case、strcmp、Extract_integer以及Extract_real。 在這個 package 裡頭的 procedure:readline、read、writeline、write、 endline以及Int_to_string。