【正文】
義、常量、信號(hào)定義、子程序聲明、元件聲明等。定義了滿足工業(yè)標(biāo)準(zhǔn)的兩個(gè)數(shù)據(jù)類(lèi)型 STD_LOGIC和 STD_ LOGIC_VECTOR。這兩個(gè)程序包的區(qū)別是,STD_LOGIC_SIGNED中定義的運(yùn)算符考慮到了符號(hào),是有符號(hào)數(shù)的運(yùn)算。 TEXTIO程序包定義了支持文件操作的許多類(lèi)型和子程序。 只能使用順序語(yǔ)句,這一點(diǎn)與進(jìn)程相似。VHDL子程序具有可重載性的特點(diǎn),即允許有許多重名的子程序,但這些子程序的參數(shù)類(lèi)型及返回值數(shù)據(jù)類(lèi)型是不同的. 子程序有兩種類(lèi)型,即過(guò)程 PROCEDURE和函數(shù)FUNCTION。 ? 決斷函數(shù)用于在多驅(qū)動(dòng)信號(hào)時(shí)解決信號(hào)競(jìng)爭(zhēng)問(wèn)題。運(yùn)算符重載就是對(duì) VHDL中現(xiàn)存的運(yùn)算符進(jìn)行重新定義,以獲得新的功能。 4)如果只是在一個(gè)結(jié)構(gòu)體中定義并調(diào)用函數(shù),則僅需函數(shù)體即可。 IF ab THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; 結(jié)束 FUNCTION語(yǔ)句 END; 結(jié)束 PACKAGE BODY語(yǔ)句 下面是函數(shù)調(diào)用 LIBRARY IEEE; 函數(shù)應(yīng)用實(shí)例 USE IEEE. STD_LOGIC_1164. ALL; USE WORK. packexp. ALL; 打開(kāi)自定義程序包 ENTITY axamp IS PORT(datl, dat2: IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3, dat4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); outl, out2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END; ARCHITECTURE bhv OF axamp IS BEGIN outl= max(datl, dat2); —用在賦值語(yǔ)句中的并行函數(shù)調(diào)用語(yǔ)句 PROCESS(dat3, dat4) BEGIN out2=max(dat3, dar4); ——順序函數(shù)調(diào)用語(yǔ)句 END PROCESS; END; 重載函數(shù) (OVERLOADED FUNCTION) VHDL允許函數(shù)同名,但要求函數(shù)中定義的操作數(shù)具有不同的數(shù)據(jù)類(lèi)型,以便調(diào)用時(shí)用以分辨不同功能的同名函數(shù)。 FUNCTION max(a, b; IN INTEGER) 定義函數(shù)首 RETURN INTEGER; END; PACKAGE BOOY packexp IS 定義函數(shù)體 FUNCTION max(a, b: IN STD_LOGIC_VECTOR) RETURN STD_ Logic_VECTOR IS BEGIN IF ab THEH RETURN a; ELSE RETURN b; END IF; END FUNCTION max; 結(jié)束 MAX語(yǔ)句 FUNCTION max(a, b: IN INTEGER) RETURN INTEGER IS 定義函數(shù)體 BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; 結(jié)束 MAX語(yǔ)句 FUNCTION max( a, b: IN BIT_VECTOR) RETURN BIT_VECTOR IS 定義函數(shù)體 BEGIN IF ab THEN RETURN a; ELSE RETURN b; END IF。 過(guò)程體:由順序語(yǔ)句組成的,過(guò)程的調(diào)用即啟動(dòng)了對(duì)過(guò)程體的順序語(yǔ)句的執(zhí)行。 各模塊的設(shè)計(jì)稱為底層文件設(shè)計(jì),系統(tǒng)連接稱為頂層文件設(shè)計(jì)。 元件與當(dāng)前設(shè)計(jì)實(shí)體 (頂層文件 )的連接: 例化名:元件名 PORT MAP( [端口名 =] 連接端口名, … ); 其中: 1)例化名是必須存在的,它相當(dāng)于元件編號(hào)。 全加器的頂層設(shè)計(jì) LIBRARY IEEE; USE IEEE. STD_LOGIC_1164. ALL; ENTITY fulladder IS PORT (ain, bin, cin: IN STD_LOGIC; cout, sum: OUT STD_LOGIC ); END fulladder; ARCHITECTURE fdl OF fulladder IS COMPONENT halfadder IS PORT ( a, b: IN STD_ LOGIC; co, so : OUT STD_LOGIC); END COMPONENT halfadder; SIGNAL d, e, f : STD_ LOGIC; BEGIN ul: halfadder PORT MAP(a=ain, b=bin,co=d, so=e); u2: halfadder PORT MAP(a=e, b=cin, co=f,so=sum); cout=d OR f; END fdl; 類(lèi)型轉(zhuǎn)換函數(shù) ? VHDL要求每一個(gè)常數(shù)、信號(hào)、變量、函數(shù)以及設(shè)定的各種參量都必須具有確定的數(shù)據(jù)類(lèi)型。 CLRNPRND QCLRNPRND QCLRNPRND QCLRNPRND QPRNd0CLKCLRNd1d2d3q0q1q2q3LIBRARY ieee; USE ; ENTITY dff_4 IS PORT (clk , clrn , prn : IN std_logic。 ARCHITECTURE body OF dff_4 IS COMPONENT dff PORT (d , clk , clrn , prn : IN std_logic。 END GENERATE。 CLRNPRND QCLRNPRND QCLRNPRND QCLRNPRND QPRNACLKCLRNBCLRNPRND QCLRNPRND QCLRNPRND QCLRNPRND QPRNACLKCLRNBshifter : FOR i IN 0 TO 3 GENERATE u1 : IF i = 0 GENERATE dffx : dff PORT MAP (a, clk, clrn, prn, x(i))。 U4 : IF (i=(m1)) GENERATE dffx : dff PORT MAP(x (i1), clk , clrn , prn , b