駱傳慧
【摘要】代碼重用是提高軟件設(shè)計效率和質(zhì)量的重要手段,VHDL的庫文件能夠?qū)崿F(xiàn)高效代碼分割、代碼共享及代碼重用。本文介紹了庫的基本結(jié)構(gòu),及其的基本構(gòu)件單元元件、函數(shù)、過程的建立和調(diào)用的語法結(jié)構(gòu),從而實現(xiàn)結(jié)構(gòu)化設(shè)計及代碼重用。
【關(guān)鍵詞】代碼重用;VHDL;軟件設(shè)計
0引言
隨著可編程邏輯器件技術(shù)的發(fā)展,芯片的性能越來越強、規(guī)模越來越大、開發(fā)的周期越來越長,使得器件應(yīng)用正面臨一系列新的問題:設(shè)計質(zhì)量難以控制,設(shè)計成本也越來越高。IP(Intelligence Property)技術(shù)解決了當今芯片設(shè)計業(yè)所面臨的難題。設(shè)計者可以重復使用已經(jīng)設(shè)計并經(jīng)過驗證的IP核,將精力集中于系統(tǒng)頂層及關(guān)鍵功能模塊的設(shè)計上,從而提高產(chǎn)品整體性能和個性化特性,加快了設(shè)計效率。
如何才能提高IP核的重復使用率,使設(shè)計資源更好地集中起來加以利用,是可編程邏輯器件應(yīng)用面臨的另一個問題。在VHDL(VHSIC Hardware Description Language)語言中,庫(LIBRARY)文件很好地解決了這個問題。庫文件是專門用于存放預先編譯好的程序包(PACKAGE)和數(shù)據(jù)集合體,這些設(shè)計單元可用作其他VHDL描述的資源。用戶編寫的設(shè)計單元既可以訪問多個設(shè)計庫,又可以加入到設(shè)計庫中,被其他單元所訪問。此外,庫的使用能夠?qū)崿F(xiàn)層次化設(shè)計和功能模塊化設(shè)計方法,有利于使復雜設(shè)計具有更清晰的結(jié)構(gòu)。
1庫組成
在VHDL中,常用的庫有IEEE、STD、WORK、用戶庫等。庫文件常用的語句為元件(COMPONENT)和子程序(過程和函數(shù)),為了使程序包能夠被編譯,元件和子程序必須被添加到被稱為包集合的程序包中。用戶庫是用戶定義庫的簡稱,是由用戶自己創(chuàng)建并定義的庫。設(shè)計者可以把自己開發(fā)的非標準包集合和實體等匯集成在一起定義成一個庫,作為對VHDL標準庫的補充。用戶將需要重復使用的代碼以元件和子程序的形式放到包集合中,編譯到目標庫中,生成用戶庫,供其它設(shè)計單元調(diào)用。在設(shè)計中要使用某個程序包中的內(nèi)容時,用USE語句即可打開該程序包。
2庫構(gòu)件說明
2.1包集合
在用戶庫中,包集合放置的是用戶自己定義的元件、函數(shù)、過程。包集合包括包頭和包體兩部分。包頭用來聲明包中的類型、元件和子程序;而包體則用來存放說明中的元件源代碼和子程序。程序包聲明單元的語法格式為:
PACKAGE 程序包名 IS
說明語句
END [程序包名];
其中說明語句為:USE語句、類型定義、常量定義、元件聲明、子程序聲明及信號聲明等。程序包體單元的的語法格式為:
PACKAGE BODY程序包名 IS
說明語句
END [程序包名];
2.2元件
用戶庫通過元件定義的方式,將一些設(shè)計好的電路單元納入,其他設(shè)計體則通過元件實例化的方法調(diào)用這些元件,使得元件與其他設(shè)計實體中的端口相連接,從而為當前設(shè)計實體引入低一級的設(shè)計層次設(shè)計。
2.2.1元件定義
元件定義語句放在包集合的包頭中,指出包集合所包含的具體元件,元件源代碼可以獨立編譯,不需要納入包集合中。元器件定義語句的語法格式為:
COMPONENT元件名IS
GENERIC(常量、參數(shù)列表);
PORT(元件端口列表);
END COMPONET;
其中,常量、參數(shù)列表與元件源代碼實體中的GENERIC部分相同;元件端口列表,與元件源代碼實體中的PORT部分相同。
2.2.2元件調(diào)用
元件調(diào)用稱為元件實例化,在元件實例化過程中有位置映射和名稱映射兩種方法可以實現(xiàn)。
位置映射中參數(shù)、端口信號名稱在順序、端口狀態(tài)和數(shù)據(jù)類型上必須和元件源代碼保持一致,各個參數(shù)、端口意義取決于它的位置。位置映射元件實例化語句的語法格式為:
COMPONENT元件名(
GENERIC MAP (常量、參數(shù)列表)
PORT MAP(元件端口列表));
名稱映射用符號“=>”連接元件參數(shù)、端口和結(jié)構(gòu)體之間的參數(shù)、端口。名稱映射元件實例化語句的語法格式為:
COMPONENT元件名(
GENERIC MAP(元件源程序常量列表=>常量值)
元件源程序參數(shù)列表=>參數(shù)量值)
PORT MAP(元件端口列表=>信號名稱));
其中,左邊列出元件源代碼中參數(shù)、端口名稱,右邊列出調(diào)用代碼中對應(yīng)的參數(shù)值、端口信號名稱。左右兩邊的數(shù)值、信號名稱可以不相同,語句中位置順序可以任意。
2.3子程序
VHDL中的子程序有過程(PROCEDURE)及函數(shù)(FUNCTION)兩類,主程序和子程序之間通過端口參數(shù)列表位置關(guān)聯(lián)方式進行數(shù)據(jù)傳送,子程序可以被多次調(diào)用完成重復性的任務(wù)。子程序包含子程序聲明和主體兩部分,子程序聲明必須要在包頭中,子程序主體則放在包體中。
2.3.1函數(shù)
函數(shù)通常用來實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換、邏輯運算、算術(shù)運算類型的代碼共享和重用,即輸入若干參數(shù),通過函數(shù)運算求值,最后直接返回一個值。函數(shù)應(yīng)用分為建立和調(diào)用兩個過程。
1)函數(shù)建立
函數(shù)分為函數(shù)聲明和函數(shù)主體體,函數(shù)聲明是包集合與函數(shù)的接口界面,放在包集合的包頭部分,而函數(shù)主體應(yīng)放在包集合的包體內(nèi)。函數(shù)聲明首語句的語法格式為:
FUNCTION 函數(shù)名 (參數(shù)列表) RETURN 數(shù)據(jù)類型;
其中,參數(shù)列表中為參數(shù)名、參數(shù)類別及數(shù)據(jù)類型,函數(shù)的參數(shù)為信號或常數(shù),默認情況為常數(shù)。
函數(shù)體語句的語法格式為:
FUNCTION 函數(shù)名 (參數(shù)列表) RETURN 數(shù)據(jù)類型 IS
[子程序聲明部分;]
BEGIN
順序語句;
END 函數(shù)名;
其中,在RETURN后面的數(shù)據(jù)類型為函數(shù)返回值的類型;子程序聲明項用來說明函數(shù)體內(nèi)引用的對象和過程;順序語句就是函數(shù)體,用來定義函數(shù)的功能。
2)函數(shù)的調(diào)用
函數(shù)可以單獨構(gòu)成表達式,或者作為表達式的一部分調(diào)用。函數(shù)調(diào)用語句的語法格式為:
函數(shù)名 (參數(shù)列表);
2.3.2過程
過程的作用是傳遞信息,即通過參數(shù)進行調(diào)用代碼和過程代碼的信息傳遞。其中參數(shù)需說明類別、類型及傳遞方向。
1)過程建立
過程分為聲明和過程主體,聲明應(yīng)放在包集合的包頭部分,過程定義的主體代碼應(yīng)放在包集合的包體內(nèi)。
過程聲明的語法格式為:
PROCEDURE 過程名 (參數(shù)列表) ;
其中,參數(shù)聲列表指明了輸入、輸出端口的數(shù)目和類型。
參數(shù)聲明的語法格式為:
[數(shù)據(jù)類型 參數(shù)名:模式]
其中,參數(shù)可以有任意多個;參數(shù)模式有in、out、inout、buffer形式;參數(shù)類型,可以是常數(shù)、信號、變量,“in” 默認為常數(shù),“out”和“inout”默認為“變量”,若需要將“out”和“inout”作為信號使用,則在過程參數(shù)定義時必須指明是信號。
過程定義的語法格式為:
PROCEDURE 過程名 (參數(shù)列表) IS
[子程序聲明部分];
BEGIN
順序語句;
END [PROCEDURE] [過程名] ;
2)過程的調(diào)用
過程的調(diào)用是一條語句,調(diào)用時通過其接口返回0個或多個值。過程可以直接調(diào)用,也可以在其他語句中調(diào)用。過程調(diào)用語句的語法格式為:
過程名 (參數(shù));
在過程語句執(zhí)行結(jié)束后,如沒有特別說明,輸出和輸入輸出參數(shù)將按變量對待將值傳遞給調(diào)用者的變量。如果調(diào)用者需要輸出和輸入輸出作為信號使用,則在過程參數(shù)定義時要指明是信號。
3庫的調(diào)用
使用庫之前,首先需要對庫進行聲明。經(jīng)過聲明之后,在設(shè)計中就可以調(diào)用庫中的代碼了。用戶庫聲明的語法格式:
LIBRARY 庫名;
USE 庫名.程序包名.包集合名;
4結(jié)束語
用戶庫是VHDL語言中非常重要的代碼分割、共享、重用的方法,只要將重用的代碼按功能特性以元件、函數(shù)、過程形式構(gòu)建成可重用部件放置在包集合內(nèi),經(jīng)過編譯后生成用戶庫文件,在后續(xù)編碼過程中通過庫聲明即可調(diào)用用戶庫。
用戶庫的使用可以使代碼結(jié)構(gòu)更加清晰,并且?guī)熘械拇a通常要經(jīng)過嚴格的測試和優(yōu)化,利用用戶庫進行電路設(shè)計,可以在FPGA等可編程邏輯器件中達到最優(yōu)的性能和最低的邏輯資源使用率,以保證電路的性能和質(zhì)量。因而,能在降低開發(fā)成本、縮短開發(fā)周期的同時提高了設(shè)計可靠性。
【參考文獻】
[1]孫曉東.FPGA軟件設(shè)計[J].電腦編程技巧與維護,2010(12):5-6.
[2]李冰,吳金,魏同立.基于可重構(gòu)核的FPGA電路設(shè)計[J].固體電子學研究與進展,2003,1(23):108-109.
[3]侯伯亨,顧新.VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計[M].西安電子科技大學出版社,1999.
[4]喬廬峰,王志功.VHDL數(shù)字電路設(shè)計教程[M].電子工業(yè)出版社,2013.