CH11_套件函式與程序_第1頁
CH11_套件函式與程序_第2頁
CH11_套件函式與程序_第3頁
CH11_套件函式與程序_第4頁
CH11_套件函式與程序_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1,套件(Packages)、函式(Functions)與程序(Procedures),第十一章,儒林圖書公司 TB061,VHDL數(shù)位電路設(shè)計(jì)實(shí)務(wù)教本 使用Quartus II,刃窩替次漁現(xiàn)爭(zhēng)擊拄蕉扼煤細(xì)餌郝喂厭禹藹閨佳畫歐善誅弛護(hù)襄靶掏騙贛CH11_套件函式與程序CH11_套件函式與程序,2,Package是一種設(shè)計(jì)單元,它用來宣告一些VHDL中可使用的物件,讓使用者可以將VHDL中的Functions、Procedures及資料型別的定義用一個(gè)Package包裝起來,而凡是在套件(Package)內(nèi)所定義和宣告的東西就變成是公開的,可以在全程式中使用。,Package 套件名稱 IS -

2、套件宣告部份 套件宣告部份 END 套件名稱;,Package Body 套件名稱 IS -套件主體 套件主體之內(nèi)容 END 套件名稱;,盅凸餐擇試贓潑馱乳吧函蛛轅行胯覆昏叮拿拘遠(yuǎn)宙憚遁偽異店喉霹覺嗜敏CH11_套件函式與程序CH11_套件函式與程序,3,而當(dāng)我們的VHDL程式需要使用某一個(gè)套件裡所定義的函式或程序時(shí),其語法如下:,最簡(jiǎn)單的例子就是在VHDL程式設(shè)計(jì)中一定會(huì)用使到的:,上述的語法說明我們打算使用目前工作目錄(Work Directory)下的my_package套件裡所有的副程式與資料型別。,其意即為使用IEEE目錄下的std_logic_1164套件內(nèi)所有的副程式與資料型別。

3、因此,若我們?cè)O(shè)計(jì)的VHDL程式需要用到自己所建立的my_package套件時(shí),語法如下:,戒卷糕卜老膜付贖隘痛憂殘昧謎八嚴(yán)圍廊瘟哩竄寇憾染蛔有撕左黍撿趕果CH11_套件函式與程序CH11_套件函式與程序,4,LIBRARY ieee; USE ieee.std_logic_1164.all; - 宣告在Package中所使用到的Package PACKAGE comp IS- 在Package中宣告最小值比較器函式 function minimum (constant a,b: integer) return integer; END comp; USE ieee.std_logic_1164

4、.all; package body comp is -在套件主體區(qū)中描述函式的內(nèi)容 function minimum (constant a,b: integer) return integer is variable c: integer; - 區(qū)域變數(shù)宣告 begin if a b then c := a; -最小值為a else c := b; -最小值為 b end if; return c; -傳回其中之最小者 end minimum; end comp;,盛劃訊鞭剔徹鼻構(gòu)桶喝瓶形餐昔柏臆咳止脹忙品悉峰愿喪鄲胳懶胳猜鉚澀CH11_套件函式與程序CH11_套件函式與程序,5,USE

5、p.all; - 宣告使用之前建立的Package ENTITY test_comp is PORT( x,y : INinteger; z : OUT integer); END test_comp; ARCHITECTURE a OF test_comp IS BEGIN z=minimum (x,y); - 呼叫使用minimum函式 END a;,咸屹嚨焦說銥?zāi)杓狼泻涜D佰杯垃僑揉逛壹修舔盡炸興緬宵疫漱焙窮粘藝CH11_套件函式與程序CH11_套件函式與程序,6,LIBRARY ieee; USE ieee.std_logic_1164.all; PACKAGE my_package1

6、 IS constant c:std_logic_vector:=00000011;-套件1中宣告常數(shù)c的值為00000011 END my_package1; - LIBRARY ieee; USE ieee.std_logic_1164.all; PACKAGE my_package2 IS constant c:std_logic_vector:=00000100; -套件2中宣告常數(shù)c的值為00000100 END my_package2; -,墑恬呢祿粟關(guān)燎束匈舌劫霹案守聽桃絆鞠軍掙盒緩困戚絨襖撇袱娛押澤其CH11_套件函式與程序CH11_套件函式與程序,7,LIBRARY ieee

7、; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; USE ieee.std_logic_arith.all; Entity exam_packm IS generic (num_bits:integer:=8); port( A,B :in std_logic_vector(num_bits-1 downto 0); Y1,Y2 :out std_logic_vector(num_bits-1 downto 0); end exam_packm; Architecture a of exam_packm IS Beg

8、in Y1=A+work.my_package1.c; -使用my_package1中所宣告的常數(shù)c (00000011) Y2=B+work.my_package2.c; -使用my_package2中所宣告的常數(shù)c (00000100) end a;,愉勤悲騎舒鯉交霹耍枝峙鉆強(qiáng)秦締酌照庫銘翹吵薯廈疼滾囚匝蝸丸板泣撻CH11_套件函式與程序CH11_套件函式與程序,8,函式(Functions)的宣告語法如下:,函式(Functions)的主體內(nèi)容語法如下:,危蚤語鈴列珠攤倍賽鏡博萌畜皺鎮(zhèn)垣冪茬蠻糖買慮琵巫屜醋任謅畔癥愉獻(xiàn)CH11_套件函式與程序CH11_套件函式與程序,9,邱花臣梧胡尾騷翼

9、茨愛慰摸似更走沛攙銹題萌吧竭烷蔽僧孕剔瀉凈酷疇蘇CH11_套件函式與程序CH11_套件函式與程序,10,LIBRARY ieee; USE ieee.std_logic_1164.all; PACKAGE my_package IS function carry (bit1,bit2,bit3: std_logic) return std_logic; END my_package; LIBRARY ieee; USE ieee.std_logic_1164.all; package body my_package is function carry (bit1,bit2,bit3: std_

10、logic) return std_logic IS variable result:std_logic; begin result:=(bit1 and bit2) or (bit1 and bit3) or (bit2 and bit3); return result; end ; end my_package;,粒磋喊辭淤純纂瑚句斤息比燦繳檢蕉烷廣屎柑畢瑟畔謊巴濟(jì)埋吻鄒啼朽川CH11_套件函式與程序CH11_套件函式與程序,11,LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.my_package.all; -使用目前工作目錄下的m

11、y_package套件 ENTITY carry_pack is PORT( a,b,c : IN std_logic; Cout : OUT std_logic); END carry_pack; ARCHITECTURE a OF carry_pack IS BEGIN Process(a,b,c) Begin Cout=carry(a,b,c); End process; END a;,呼嵌侵邯皿轄盔又侯里名誤幫鐵菩陜吭衍馭允傅易蔡唉協(xié)漫夯薔翠歌揖毗CH11_套件函式與程序CH11_套件函式與程序,12,LIBRARY ieee; USE ieee.std_logic_1164.all;

12、 entity proc is port ( s :in integer range 0 to 15; A :in integer range 0 to 31; B :in integer range 0 to 31; Result :out integer range 0 to 63); end proc; Architecture a of proc IS Function Sum( A :in integer range 0 to 15; -兩整數(shù)相加函式 B :in integer range 0 to 15) Return Integer IS Begin Return A+B; E

13、nd Sum; Function Diff( A :in integer range 0 to 15; -兩整數(shù)相減函式 B :in integer range 0 to 15) Return Integer IS Begin Return A-B; End Diff;,故責(zé)徹蝕札群吵性羞渡避倡昭牟詢酋鼠桔瓢衷賂郴世給贓詹東眾屆宰臀劇CH11_套件函式與程序CH11_套件函式與程序,13,begin process(s) begin if (s=0) then Result=Sum(A,B); -s=0時(shí)呼叫兩整數(shù)相加函式 elsif (s=1) then Result=Diff(A,B);

14、-s=1時(shí)呼叫兩整數(shù)相減函式 else Result=63; -當(dāng)s為0和1以外條件時(shí)輸出值為63 end if; end process; end a;,夸塹也綜藤蛛彭綸蛔槐鈣橢鑿葷耗旋恿御汀層駛迷蛋慘郊話凡毗鄭化愿攬CH11_套件函式與程序CH11_套件函式與程序,14,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY function_calls IS PORT ( A,B,C,D,E: IN STD_LOGIC; Y1,Y2,Y3 : OUT STD_LOGIC); END function_calls; ARCHITECTURE a

15、OF function_calls IS function Fn1(F1,F2,F3,F4:std_logic) return std_logic is variable temp:std_logic; begin temp:=(F1 xor F2) xor (F3 xor F4); Return temp; end function Fn1; BEGIN,process(A,B,C,D,E) begin Y1C,F4=D,F1=A,F2=B) xor E; -呼叫Fn1函式(使用名稱對(duì)應(yīng)表示法) Y3D,F3=C); -呼叫Fn1函式(位置與名稱對(duì)應(yīng)混合法) end process; end

16、 a;,懸源昭壹鬧鎳圓黎淑利齒香絮帚迢腥盈偽候秋例邵授碴扔茂咽汞煩浚虐勤CH11_套件函式與程序CH11_套件函式與程序,15, ARCHITECTURE a OF function_calle IS function Fn1(F1,F2,F3,F4:std_logic) return std_logic is variable temp:std_logic; begin temp:=(F1 xor F2) xor (F3 xor F4); Return temp; end function Fn1; BEGIN Y1C2,F4=D2,F1=A2,F2=B2) xor m1 xor m2; Y

17、3D3,F3=C3) xor m1 xor m2; end process; end a;,為辮練年蹲奴鞍背斜潮壘撬載爪輪桓浚抑憑矯便贅熒丁凍該睬脯呢佯故鉀CH11_套件函式與程序CH11_套件函式與程序,16,VHDL是一種資料型別檢查非常嚴(yán)格的語言,不同的資料型別彼此之間不能直接作直接設(shè)定敘述或運(yùn)算 ;因此我們必需採用型別轉(zhuǎn)換的函式將其資料型別轉(zhuǎn)換成完全相同的型別才能進(jìn)一步作運(yùn)算處理。,Library IEEE; Use ieee.std_logic_1164.all; entity example is port(in_x : in BIT; out_y : out BOOLEAN);

18、end example;,architecture a of example is function bit_to_boolean(in_bit : in BIT) return BOOLEAN is variable c: boolean; begin if in_bit = 1 then c:=TRUE; else c:=FALSE; end if; return c; end bit_to_boolean; begin out_y = bit_to_boolean(in_x); end a;,Example:輸入為BIT而輸出傳回值為BOOLEAN的函式設(shè)計(jì),患聽繼裳彥碘士旗籠雍決俘繡顫

19、孿地殼仲勘蒜柒帕盒魯保攔鈕鼓存蹲擂崩CH11_套件函式與程序CH11_套件函式與程序,17,Altera Quartus II在其IEEE Library裡提供有std_logic_arith Package,已經(jīng)內(nèi)含下面幾種格式轉(zhuǎn)換函式:,conv_integer:將integer、unsigned、signed或std_ulogic轉(zhuǎn)換成整數(shù)(integer)。 conv_unsigned:將integer、unsigned、signed或std_ulogic轉(zhuǎn)換成Unsigned數(shù)值。 conv_std_logic_vector:將integer、unsigned、signed或std_

20、ulogic轉(zhuǎn)換成std_logic_vector。,欽擠鈞籃懷訴匡炭厚帳瞅繃敦棉矮擊食豌范穴拳致局墜憋頰藤瑰檸查苗翰CH11_套件函式與程序CH11_套件函式與程序,18,LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; -指定使用std_logic_arith套件 entity adder_t is port(A,B: in unsigned(7 downto 0); -A,B宣告為unsigned的陣列輸入 result:out integer); -result宣告為整數(shù)(integer)輸

21、出 end adder_t; Architecture a of adder_t IS begin result=conv_integer(A+B); -將A+B運(yùn)算結(jié)果由unsigned 轉(zhuǎn)換成整數(shù) 輸出到result end a;,蚤安楚丹膀宣葬字譴剎襄甫鄭范定球雨磷祈罰袒硼匣酗資泛揣勘棄功恤峪CH11_套件函式與程序CH11_套件函式與程序,19,USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; -指定使用std_logic_arith套件 entity adder_con is port (A,B: in unsign

22、ed(7 downto 0); result:out std_logic_vector(7 downto 0); end adder_con; Architecture a of adder_con IS begin result=conv_std_logic_vector(A+B,7); -本函式要設(shè)定待轉(zhuǎn)換的運(yùn)算數(shù) 及SIZE位元等參數(shù) end a;,胡超骨標(biāo)百醚仿穢噶橫涌晚亢佰黔疙磊秋糕戎療閡求壯收宜沙兵負(fù)望殼敷CH11_套件函式與程序CH11_套件函式與程序,20,程序(Procedures)的傳回值則可以不限於一個(gè)(與函式最大的不同),在VHDL語言中,程序(Procedure)的宣

23、告語法如下:,具粗問灤歪瓜駁稈豁眨鴻反寢聲周罰改而穩(wěn)煉沉鐵鐘引貝俗擄融閩撰幸奴CH11_套件函式與程序CH11_套件函式與程序,21,ENTITY adder4 IS PORT ( a,b:in std_logic_vector(3 downto 0); cin:in std_logic; sum:out std_logic_vector(3 downto 0); cout:out std_logic); END adder4; ARCHITECTURE structural OF adder4 IS procedure full_adder(a,b,c:in std_logic; sum,c

24、out:out std_logic) IS begin sum:=a xor b xor c; cout:=(a and b) or (a and c) or (b and c); end ;,BEGIN process(a,b,cin) variable result:std_logic_vector(3 downto 0); variable carry:std_logic; begin full_adder(a(0),b(0),cin,result(0),carry); -呼叫一位元全加法器程序 full_adder(a(1),b(1),carry,result(1),carry); -呼叫一位元全加法器程序 full_adder(a(2),b(2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論