安徽四創(chuàng)電子股份有限公司 何啟躍 徐 瑾
?
FPGA軟件的“仿生”設(shè)計(jì)理念初探
安徽四創(chuàng)電子股份有限公司何啟躍徐瑾
【摘要】本文從分析FPGA芯片的內(nèi)部構(gòu)造及工作方式入手,在闡述FPGA軟件的基本開發(fā)流程及常見的設(shè)計(jì)誤區(qū)過程中提出了一種將電路功能模塊的描述看做是“生命體”的仿生的設(shè)計(jì)理念。經(jīng)對(duì)比分析表明,“仿生”設(shè)計(jì)理念對(duì)理解概念和激發(fā)靈感有著非常積極的促進(jìn)作用。
【關(guān)鍵詞】FPGA軟件設(shè)計(jì);模塊劃分;仿生
做為大規(guī)??删幊踢壿嬰娐沸酒闹饕?,F(xiàn)PGA(Field Programmable Gate Array)正以其獨(dú)特的全開放、可重構(gòu)、大容量、高集成度及高速并行計(jì)算能力等優(yōu)點(diǎn)迅速成為各種中、高端數(shù)字電路中的核心器件。
FPGA的最大特色在于其內(nèi)部電路結(jié)構(gòu)的可重建性。因此描述其內(nèi)部電路構(gòu)造的軟件設(shè)計(jì)是否合理、穩(wěn)健將會(huì)直接影響著其可靠性和并行處理能力的發(fā)揮。
在多年的FPGA軟件研發(fā)中,我們嘗試將高效的人員組織架構(gòu)及溝通方式等人們所熟知的概念和理論融入到FPGA軟件設(shè)計(jì)中。通過大量的研發(fā)實(shí)踐證明,在這樣的理念指導(dǎo)下,龐大而復(fù)雜FPGA軟件設(shè)計(jì)過程更明晰化、條理化了,最為突出的是在不經(jīng)意間實(shí)現(xiàn)了高效、優(yōu)化的軟件設(shè)計(jì)。
以下將從分析FPGA芯片的內(nèi)部構(gòu)造入手,對(duì)這一結(jié)合了“仿生”理念的FPGA軟件設(shè)計(jì)方法進(jìn)行進(jìn)一步闡述。
如果要用更為生動(dòng)的語言來描述FPGA芯片,我們可以這樣理解:倘若把一片設(shè)計(jì)完成并具備了某些特定功能的FPGA比作是一臺(tái)專用機(jī)器設(shè)備的話,那么未被編程的FPGA芯片可以認(rèn)為是一個(gè)龐大的“零件箱”,其中存放著一堆堆細(xì)如沙石的、構(gòu)成數(shù)字電路所必需的最基本單元,它們包括:邏輯門、存儲(chǔ)塊、乘加器、專用運(yùn)算核等“零件”。這些基本部件在沒有被編程配置前是相互獨(dú)立存在且沒有任何連接關(guān)系的。
為了讓一片F(xiàn)PGA真正動(dòng)起來并完成所需要的各種功能,一件必不可少的工作便是從該“零件箱”中選擇各種所需要的零件進(jìn)行復(fù)雜的組裝連接,并最終構(gòu)造出一組或多組任務(wù)不同、相對(duì)獨(dú)立、能在各種信號(hào)互傳下協(xié)同工作的功能模塊集合,這種根據(jù)某型號(hào)FPGA芯片內(nèi)所提供的資源將各種“零件”組裝成“機(jī)器”的設(shè)計(jì)過程便是FPGA軟件設(shè)計(jì),而將這一構(gòu)造方案裝入FPGA內(nèi)搭建并付諸實(shí)施的過程便是FPGA軟件的加載過程。
作為比較,我們先來看看通用計(jì)算機(jī)內(nèi)的中央處理器(CPU),其實(shí),該芯片是一顆內(nèi)部電路結(jié)構(gòu)已經(jīng)固化下來的專用集成電路,為了完成不同的處理功能,它并不是像FPGA那樣靠在芯片內(nèi)組合搭建不同的電路結(jié)構(gòu)來滿足需求,而是靠逐條解析事先編排好的工作指令并做出不同的動(dòng)作響應(yīng)來滿足不同的功能要求。于是,計(jì)算機(jī)系統(tǒng)的工作流程被設(shè)計(jì)為:在一定頻率的連續(xù)時(shí)鐘驅(qū)動(dòng)下從指令存儲(chǔ)器中順序取出一條指令,而后執(zhí)行這條指令,之后再取指令-執(zhí)行指令…,如此周而復(fù)始地工作下去。顯而易見,這樣的工作模式并不能對(duì)同時(shí)發(fā)生的事件進(jìn)行并行實(shí)時(shí)處理,而只能按部就班地順序執(zhí)行指令,并以串行方式對(duì)事件進(jìn)行處理。所謂“一心不可二用”便從根源揭示了CPU的工作特點(diǎn)。
而FPGA正是因?yàn)閷⑵溆布軜?gòu)完全開放給了設(shè)計(jì)者,因此研發(fā)人員便完全有可能將其構(gòu)造成n個(gè)“心”??梢孕蜗蟮乩斫鉃椋河?jì)算機(jī)軟件是在設(shè)計(jì)一個(gè)人處理事務(wù)的工作流程,而FPGA軟件則是在構(gòu)造一個(gè)大到“團(tuán)隊(duì)”甚至是“公司”級(jí)的工作體系,小到設(shè)計(jì)每一名員工的工作流程。
FPGA軟件設(shè)計(jì)的本質(zhì)就在于完成對(duì)FPGA內(nèi)部電路構(gòu)造的個(gè)性化描述。一般而言,描述電路構(gòu)造的方式可分為原理圖輸入方式和語言描述方式(Verilog、VHDL)這兩大類。原理圖輸入是最為直接的電路描述方式,它是以“選擇元件庫”→“調(diào)入元器件”→“器件引腳連線”這一系列畫圖過程來構(gòu)造電路結(jié)構(gòu)的。由于這種方式受到器件種類的影響,因此很難完成更為復(fù)雜的電路描述任務(wù)。而類似計(jì)算機(jī)程序(如C語言)設(shè)計(jì)的硬件描述語言設(shè)計(jì)則是以事件的邏輯行為描述為主線而展開的電路描述過程,可以說它是一種與人類的認(rèn)知邏輯和思維活動(dòng)更為貼近的描述手段。
準(zhǔn)確來講,Verilog和VHDL語言是為了描述FPGA內(nèi)部邏輯電路架構(gòu)而產(chǎn)生的,它們既不是指令集合,也不具備前后的順序性,所描述的每一段代碼通常都對(duì)應(yīng)著某一個(gè)電路結(jié)構(gòu)。因此需要FPGA軟件設(shè)計(jì)者對(duì)電路組成有較深的認(rèn)識(shí)。
通常情況下,F(xiàn)PGA軟件設(shè)計(jì)人員會(huì)本著自頂而下、由粗而細(xì)的思路展開設(shè)計(jì)。大致的步驟可歸納如下圖1所示。
圖1 FPGA軟件基本開發(fā)流程
“FPGA器件選型及引腳定義”完全是依據(jù)目標(biāo)FPGA芯片型號(hào)及其所處電路板中的連線狀態(tài)而定的。由于FPGA 芯片的大部分引腳功能是開放給設(shè)計(jì)者自由設(shè)定的,因此“定義”過程便是為了明確FPGA芯片各引腳在目標(biāo)電路板中的名稱及功能屬性,并確保FPGA軟件設(shè)計(jì)(芯片內(nèi)部電路的可編程描述)與FPGA相關(guān)硬件設(shè)計(jì)(FPGA所處電路板的設(shè)計(jì))的輸入及輸出接口的一致性。換言之,就是在明確該芯片與外界進(jìn)行信息傳遞的途徑。
“軟件架構(gòu)設(shè)計(jì)及功能模塊的劃分”本質(zhì)來說就是依據(jù)需要完成的具體功能明確主要的功能體及其所屬層次化功能體的劃分。這顯然是FPGA軟件設(shè)計(jì)的關(guān)鍵所在。困擾設(shè)計(jì)者的常常是:到底該劃分出幾個(gè)、什么樣的子功能體來協(xié)同工作呢?這其實(shí)牽扯到了一個(gè)不同功能體間的分工與合作問題,由于VHDL語言(或Verilog語言)中的功能模塊通常是在各自獨(dú)立的時(shí)鐘驅(qū)動(dòng)下獨(dú)立并行工作的,因此“分工”(劃分出的功能模塊)越多,其整體的并行處理能力會(huì)越強(qiáng),但隨之而來的便是“合作”(用于統(tǒng)一各功能模塊協(xié)調(diào)工作)的資源占用也就越多,協(xié)調(diào)控制邏輯也就越復(fù)雜。
“各層功能模塊的描述”也就是真正的FPGA軟件代碼或電路圖形化設(shè)計(jì)過程,其宗旨是完成FPGA內(nèi)部電路構(gòu)成的描述。應(yīng)該說,在整個(gè)開發(fā)過程中花費(fèi)時(shí)間最多的通常會(huì)是這一階段。設(shè)計(jì)者在對(duì)既定的功能模塊進(jìn)行再次分解及語言、圖形描述過程中常會(huì)出現(xiàn)邏輯關(guān)系的描述錯(cuò)綜復(fù)雜且毫無條理、將無關(guān)聯(lián)性的功能歸入同一功能模塊、某些功能模塊異常臃腫繁瑣、某些模塊間的信號(hào)傳遞雜亂無章、信號(hào)事件結(jié)果被多個(gè)過程體同時(shí)驅(qū)動(dòng)、邏輯判斷層次過多、邏輯判斷出口說明不全、對(duì)某些長(zhǎng)線任務(wù)不做過程保護(hù)等等。這些常見的錯(cuò)誤和不合理設(shè)計(jì)可以歸咎于設(shè)計(jì)經(jīng)驗(yàn)的不足,但有沒有一種好的方法讓設(shè)計(jì)者不是從屢屢的糾錯(cuò)中得到提升而是在之前就能迅速掌握要領(lǐng)呢?
“邏輯功能仿真”由于沒有將信號(hào)在FPGA芯片內(nèi)流動(dòng)的準(zhǔn)確延時(shí)特性反應(yīng)到其輸出結(jié)果上,因此僅是一種初步的邏輯關(guān)系驗(yàn)證。
“綜合、布局布線”是將高級(jí)抽象的電路描述對(duì)應(yīng)轉(zhuǎn)化為芯片內(nèi)各種基本單元的連接關(guān)系。這一過程通??捎尚酒瑥S家所提供的工具軟件自動(dòng)完成。
“時(shí)序仿真”則是在明確了芯片內(nèi)的真實(shí)電路構(gòu)成(即完成了布局布線)后,將各信號(hào)在FPGA內(nèi)真實(shí)的延時(shí)信息反標(biāo)注到設(shè)計(jì)網(wǎng)表中以檢測(cè)整個(gè)設(shè)計(jì)的處理效果,其驗(yàn)證結(jié)果的真實(shí)性很強(qiáng)。需要強(qiáng)調(diào)的是邏輯及時(shí)序仿真都需要為仿真工作設(shè)計(jì)一組覆蓋面廣、真實(shí)性高的激勵(lì)波形信號(hào),用以激發(fā)信號(hào)響應(yīng)。就如同給驗(yàn)鈔機(jī)放入幾張驗(yàn)鈔幣以檢驗(yàn)其效果一樣,驗(yàn)鈔幣所具備的全面性特征是驗(yàn)鈔機(jī)測(cè)試的關(guān)鍵。
“配置下載”是指將編譯生成的標(biāo)明FPGA內(nèi)部基本單元連接關(guān)系的位數(shù)據(jù)流文件傳遞給FPGA以實(shí)現(xiàn)其內(nèi)部的電路重構(gòu)??山柚渲霉ぞ哕浖詣?dòng)完成。
我們已經(jīng)知道,F(xiàn)PGA開放給我們的是最基本的“零件”,我們完全有可以通過不同的設(shè)計(jì)組合構(gòu)造出我們所需要的若干“工具”、“設(shè)備”、“機(jī)器”甚至是由若干“機(jī)器人”組成的“工作團(tuán)隊(duì)”和“機(jī)器人社會(huì)”。這些名詞其實(shí)在我們每一個(gè)人的頭腦中并不陌生,只是我們很少或不愿將其與電路及芯片建立聯(lián)系。其實(shí),不論從FPGA的內(nèi)部構(gòu)成、工作原理還是軟件描述形式都與生命個(gè)體、團(tuán)體、社會(huì)的存在及溝通方式極為相似,我們完全有理由在我們的頭腦中建立起一座“仿生”橋梁。如果我們將FPGA內(nèi)部的各種電路結(jié)構(gòu)看做是一個(gè)個(gè)“生命體”的話,那么很多軟件設(shè)計(jì)中遇到的難題和困惑都能輕松地得到解釋。
先拿FPGA軟件設(shè)計(jì)中的功能模塊劃分來說,這就好比是一個(gè)項(xiàng)目需要事先明確到底該由幾類人來承擔(dān),每類人的人員數(shù)及他們的從屬關(guān)系又是怎樣等等。我們?cè)谧鲰?xiàng)目人員劃分時(shí)所秉承一些原則,如:同類人員分為一組、組間協(xié)同工作所需的信息傳遞量要最小化、不讓單個(gè)個(gè)體承擔(dān)過多的任務(wù)而影響整體效率、在項(xiàng)目人員數(shù)量及人力成本與溝通成本之間尋找平衡點(diǎn)等等,這些劃分原則同樣是適用于FPGA軟件模塊劃分的。
另外,許多FPGA軟件設(shè)計(jì)者常會(huì)編制出不同功能體對(duì)同一信號(hào)進(jìn)行驅(qū)動(dòng)的代碼,這在FPGA軟件中會(huì)被嚴(yán)格禁止。因?yàn)镕PGA代碼對(duì)應(yīng)的是其內(nèi)部的電路,電路中的信號(hào)連線具有獨(dú)占性。一個(gè)信號(hào)又怎么能同時(shí)被兩個(gè)事件來控制呢?就像是一個(gè)開關(guān)不能同時(shí)被兩個(gè)人操控一樣,一人想開,一人想關(guān),開關(guān)將做何響應(yīng)呢?
再有,許多FPGA軟件設(shè)計(jì)者總是習(xí)慣于書寫套裝了超過4層以上的“IF…ELSIF…”語句,這在需要高速時(shí)鐘處理的FPGA中是非常避諱的。每個(gè)后級(jí)判斷一定要等到上級(jí)判斷不成立后才會(huì)進(jìn)行,這就會(huì)給后級(jí)判斷帶來延時(shí),而過長(zhǎng)的延時(shí)很有可能會(huì)造成整個(gè)邏輯判斷的混亂甚至是崩潰。這就好比讓一個(gè)人通過多層篩選去決定所要做的事,如果要做的是最后一件事,那么待到判斷出要做什么事時(shí),“黃花菜都已經(jīng)涼了”。而最快的選擇方式顯然應(yīng)該是在同一個(gè)判斷層面上依據(jù)某個(gè)特征去匹配對(duì)應(yīng)要做的事,也就是“CASE…WHEN…” 語句。
還有,許多設(shè)計(jì)者在編寫通訊程序時(shí)不考慮雙方確認(rèn)的邏輯,試想,如果我們?cè)谕娫挄r(shí)僅是一方說話,另一方不做確認(rèn)應(yīng)答,那說話方會(huì)再繼續(xù)說下去嗎?正常的通話方式難道不是一方說完一斷內(nèi)容后,另一方說聲“是”或“好的”嗎?
其實(shí),許多FPGA軟件設(shè)計(jì)中常見問題的根源并不是很復(fù)雜,只是我們不習(xí)慣于將其對(duì)應(yīng)到另一種對(duì)象上去思考而已。
從以上對(duì)比分析可以看出,F(xiàn)PGA是靠?jī)?nèi)部硬件資源的可重構(gòu)來滿足各種功能需求的,也就是說,構(gòu)造完成的每一部分硬件電路都在行使著各自不同的功能。如果我們將紛繁復(fù)雜的片內(nèi)硬件電路按功能塊劃分,將各功能相對(duì)獨(dú)立、內(nèi)部連線緊密、外部連線疏松的電路功能模塊看做是一個(gè)有生命的群體,它們都在各自的時(shí)鐘驅(qū)動(dòng)下獨(dú)立工作著,而它們的輸入、輸出信號(hào)連線則是它感受外部信息并對(duì)其做出反應(yīng)的通道,其內(nèi)部的信號(hào)是受前級(jí)驅(qū)動(dòng)的狀態(tài)信息節(jié)點(diǎn),包含在其中的、由時(shí)鐘驅(qū)動(dòng)的各進(jìn)程都做為若干“子功能體”來對(duì)待,那么整個(gè)FPGA內(nèi)部便呈現(xiàn)為了一個(gè)小型的社會(huì)。各功能群體是分級(jí)存在的,下級(jí)從屬于上級(jí),同級(jí)功能體間通過信號(hào)或存儲(chǔ)器互通數(shù)據(jù)信息。如此看來,F(xiàn)PGA軟件架構(gòu)便于現(xiàn)實(shí)生活中的組織架構(gòu)建立了聯(lián)系,貌似復(fù)雜的FPGA軟件便靈動(dòng)了起來。
基于這樣的思想構(gòu)造的FPGA軟件框架見圖2所示。
其實(shí),這樣的樹型軟件架構(gòu)與企業(yè)的職能型人員組織結(jié)構(gòu)十分相似。功能體即是一個(gè)能完成特定功能的處理器團(tuán)隊(duì),父功能體內(nèi)可根據(jù)處理任務(wù)的性質(zhì)擁有多個(gè)子功能體,各子功能體可在所屬的父功能體內(nèi)與其他同級(jí)的子功能體實(shí)現(xiàn)自由信息交換(通過信號(hào)或存儲(chǔ)器),跨級(jí)的信息交換必須通過其所屬的父功能體進(jìn)行傳遞。
圖2 分級(jí)型FPGA軟件框架
FPGA的工作方式?jīng)Q定了其樹形軟件架構(gòu)的合理性。只要程序加載完成,每一個(gè)功能體便會(huì)有真真切切的片內(nèi)硬件電路與之對(duì)應(yīng),它們都會(huì)在統(tǒng)一的時(shí)鐘下并行工作著,這與多人組成的工作團(tuán)隊(duì)有著極其相似的共性。將人員的組織結(jié)構(gòu)融入到整個(gè)軟件設(shè)計(jì)過程中后,軟件人員能更清晰地理解和掌握各級(jí)功能模塊的劃分和實(shí)現(xiàn)步驟,所編制的軟件的結(jié)構(gòu)和信號(hào)流向會(huì)更加明晰,復(fù)雜的處理過程則更容易被分解,軟件更加模塊化、直觀化、人性化,可讀性更會(huì)隨之增強(qiáng),軟件團(tuán)隊(duì)各成員間的交流也會(huì)更加順暢。最為重要、也是最有意義的是:可通過借鑒我們所熟知的組織架構(gòu)及人員溝通方式輕松地構(gòu)造出強(qiáng)直觀性、高穩(wěn)定性和實(shí)時(shí)性的軟件架構(gòu)。
FPGA芯片的特殊結(jié)構(gòu)及開發(fā)模式有著與構(gòu)建一支團(tuán)隊(duì)去完成項(xiàng)目十分類似的設(shè)計(jì)過程。如果我們能經(jīng)常性地將經(jīng)過歲月洗禮后沉淀下來的優(yōu)秀的團(tuán)隊(duì)構(gòu)建模式及運(yùn)行模式與復(fù)雜的FPGA軟件研發(fā)設(shè)計(jì)對(duì)應(yīng)起來,相信許多設(shè)計(jì)靈感將會(huì)油然而生。
技術(shù)研發(fā)過程本身就是一種匯聚所有的先進(jìn)思想和靈感進(jìn)行融合創(chuàng)作的過程?!胺律眲t是一種獲得優(yōu)秀設(shè)計(jì)思路的捷徑。該篇文章只是一個(gè)引子,技術(shù)人員如果善于從身邊的事物中找尋靈感,將設(shè)計(jì)思維擴(kuò)展到不同的維度上去思考問題,很可能會(huì)有意想不到的收獲。
參考文獻(xiàn)
[1]吳繼海,蔡海寧,王誠.Altera FPGA/CPLD設(shè)計(jì)(高級(jí)篇)[M].人民郵電出版社.
何啟躍(1959—),男,安徽四創(chuàng)電子股份有限公司高級(jí)工程師,研究方向:無線電通信。
徐謹(jǐn)(1970—),男,安徽四創(chuàng)電子股份有限公司高級(jí)工程師,研究方向:雷達(dá)數(shù)字處理系統(tǒng)軟硬件設(shè)計(jì)。
作者簡(jiǎn)介: