|
做嵌入式軟件設(shè)計(jì)要學(xué)mfc嗎_FPGA為嵌入式系統(tǒng)帶來了很多優(yōu)點(diǎn) 同時(shí)也帶來了很多挑戰(zhàn),
“嵌入式系統(tǒng)”這個(gè)詞范圍很廣,從數(shù)字式電子表到變電站電力檢測(cè)系統(tǒng)中的PC都可歸于這一范疇。大多數(shù)情況下,嵌入式系統(tǒng)是一個(gè)獨(dú)立且具有專門用途的系統(tǒng),它應(yīng)能在沒有技術(shù)人員操作的情況下運(yùn)行。許多嵌入式系統(tǒng)都有某種類型的用戶界面,但有一些以“傻瓜型”方式運(yùn)作,這些系統(tǒng)需要與外界通過傳感器、網(wǎng)絡(luò)等進(jìn)行交流。系統(tǒng)智能化可以通過由操作系統(tǒng)控制的微處理器實(shí)現(xiàn),或者系統(tǒng)大部分功能也可由一個(gè)單獨(dú)的專用芯片完成。
不同的嵌入式系統(tǒng)其設(shè)計(jì)要求相去甚遠(yuǎn)。如果設(shè)計(jì)的是手持式設(shè)備(如PDA),那么功耗是主要問題;而對(duì)機(jī)場(chǎng)或電影院售票設(shè)備,可靠性和安全將是主要考慮因素。當(dāng)然,用戶界面在上述兩種系統(tǒng)中都是主要組成部分,但也有許多嵌入式系統(tǒng)還必須和傳感器和執(zhí)行器相連,這些系統(tǒng)要求對(duì)實(shí)際的激勵(lì)做出迅速反應(yīng)并生成復(fù)雜輸出模式作為響應(yīng),完成這些動(dòng)作需要處理引擎和系統(tǒng)輸入輸出端口緊密結(jié)合。
讓我們來看一下嵌入式系統(tǒng)和外界進(jìn)行交流的方式。掌上計(jì)算器具有非常簡(jiǎn)單的用戶界面,包括鍵盤和LCD顯示器,它不需要與傳感器或通訊總線連接的接口。而對(duì)于一個(gè)汽車引擎控制單元,它雖然沒有用戶界面,但是需要與傳感器和執(zhí)行器進(jìn)行通信,而且車輛網(wǎng)絡(luò)總線也是很重要的部分。當(dāng)汽車進(jìn)行維修保養(yǎng)時(shí),技術(shù)人員會(huì)使用一種設(shè)備作為汽車電路的用戶界面,對(duì)大多數(shù)需要這種功能的現(xiàn)代嵌入式系統(tǒng),用戶界面往往像這樣通過在設(shè)備上增加一個(gè)以太網(wǎng)端口,然后運(yùn)行web服務(wù)器作為嵌入式系統(tǒng)功能的一部分來實(shí)現(xiàn)。路由器就是這樣一種設(shè)備,通常以“傻瓜”方式運(yùn)行,但可通過一個(gè)web瀏覽器對(duì)其進(jìn)行配置。
可以選擇多種方法和器件將智能化功能加入系統(tǒng)中,并且可將這些方法和器件進(jìn)行混合配對(duì)以便以最佳方式達(dá)到設(shè)計(jì)要求。最靈活的平臺(tái)類型是將微處理器和操作系統(tǒng)結(jié)合起來,這種架構(gòu)可以采取單板機(jī)帶實(shí)時(shí)操作系統(tǒng)(RTOS)內(nèi)核的形式,比如在ATM機(jī)或自動(dòng)售貨機(jī)中。更復(fù)雜的系統(tǒng)則嵌入一個(gè)完整的PC,上面運(yùn)行Windows或其它操作系統(tǒng),這樣做可以利用現(xiàn)成的網(wǎng)絡(luò)接口功能連接到標(biāo)準(zhǔn)打印機(jī)上。
對(duì)于有的系統(tǒng)而言,PC或單板機(jī)可能太大或成本太高,而且它們或許也不能滿足性能需求。這時(shí)可以通過將現(xiàn)成的專用集成電路芯片(ASIC)集成到設(shè)計(jì)中來實(shí)現(xiàn)所要求的功能,如用DSP、運(yùn)算放大器和通信總線收發(fā)器等,這種方法的缺陷是項(xiàng)目需要增加板級(jí)設(shè)計(jì),而如果使用PC平臺(tái),只需要將精力集中在系統(tǒng)級(jí)設(shè)計(jì)上即可。
但如果PC不能滿足需求,而且也沒有現(xiàn)成部件可以完成系統(tǒng),那該怎么辦呢?這時(shí)不僅要考慮進(jìn)行板級(jí)設(shè)計(jì),而且還包括芯片級(jí)設(shè)計(jì),需要設(shè)計(jì)并制造自己的ASIC或者是使用現(xiàn)成的可配置芯片:FPGA。其中一個(gè)需確定的因素是最終產(chǎn)品的數(shù)量,如果設(shè)計(jì)的是大批量產(chǎn)品如蜂窩電話,那么為了節(jié)約設(shè)計(jì)和裝配成本最好自行開發(fā)ASIC;但如果目標(biāo)市場(chǎng)很小,則可以通過使用FPGA來減少成本。FPGA可以在更改系統(tǒng)時(shí)不必開發(fā)新的ASIC,如果系統(tǒng)需要升級(jí)或修改以便滿足特殊客戶的需要,這樣的方式是極為有利的。今天,F(xiàn)PGA已廣泛應(yīng)用在打印機(jī)、復(fù)印機(jī)、測(cè)量設(shè)備、消費(fèi)電子產(chǎn)品和自動(dòng)控制模塊等嵌入式系統(tǒng)中。
測(cè)量和控制用FPGA
FPGA是一種具有可重配置邏輯門的芯片,與供應(yīng)商提供功能定義的ASIC芯片不同,F(xiàn)PGA可根據(jù)每個(gè)應(yīng)用的不同需要而進(jìn)行配置和重新配置。由于FPGA允許在硬件中實(shí)現(xiàn)自定義算法,因此它具有精確時(shí)序和同步、快速?zèng)Q策及并行任務(wù)同時(shí)執(zhí)行等優(yōu)點(diǎn)。在PC或帶有RTOS和微處理器的平臺(tái)上,處理器必須對(duì)多個(gè)任務(wù)進(jìn)行分時(shí)處理,而FPGA則可以配置為多個(gè)獨(dú)立的并行計(jì)算資源,簡(jiǎn)言之,就像芯片上有多個(gè)微處理器一樣,且這些微處理器都針對(duì)特定的任務(wù)進(jìn)行了優(yōu)化。
FPGA的性能和靈活性使得它們成為處理輸入輸出非常有效的技術(shù)。假如想計(jì)算那些比計(jì)數(shù)器處理的簡(jiǎn)單上升或下降沿更有趣的模擬或數(shù)字事件,或者要確認(rèn)一個(gè)基于特定事件順序或自定義通信協(xié)議的輸入模式,然后在幾納秒后觸發(fā)一個(gè)模擬操作,這時(shí)就可以利用FPGA監(jiān)視輸入信號(hào),快速?zèng)Q定并做出反應(yīng)。另外可以創(chuàng)建一個(gè)系統(tǒng)讀取脈寬調(diào)制信號(hào)并迅速計(jì)算占空比,更進(jìn)一步,還可以對(duì)FPGA進(jìn)行配置以利用自定義數(shù)字協(xié)議進(jìn)行通信,如對(duì)輸入信息進(jìn)行解碼,然后將信息組合編碼作為輸出數(shù)據(jù)包再發(fā)送出去,這種快速解碼在與非標(biāo)準(zhǔn)編碼器連接時(shí)有助于讀取和解讀出位置和速度信息。你可能甚至希望同時(shí)進(jìn)行上述所有操作,并使得這些操作互相同步,且和其它輸入和輸出任務(wù)同步。
那么輸出的情況是怎樣的呢?通過自定義數(shù)字協(xié)議進(jìn)行通信和生成PWM信號(hào)是這種類型很好的例子,也可以模擬一個(gè)連接到物理系統(tǒng)的電子器件或傳感器。如果是用一個(gè)基于軟件的系統(tǒng)完成此項(xiàng)工作,即使使用RTOS,輸出的性能也可能不一定夠。對(duì)于主控制算法,或許只需運(yùn)行在幾千赫茲頻率上,這會(huì)造成CPU資源閑置,而且它只是告訴輸出做什么以及何時(shí)做,并沒有指明該怎樣做。具體來說,假定你的嵌入式系統(tǒng)是一個(gè)客戶用來測(cè)試引擎控制模塊的引擎模擬器,對(duì)汽車引擎建立了模型并且系統(tǒng)基于該模型進(jìn)行實(shí)時(shí)模擬,通過模擬和數(shù)字I/O與控制器進(jìn)行通信。如果在某個(gè)特定測(cè)試?yán)锬P桶凑湛刂破鞯闹甘具M(jìn)行操作,引擎開始運(yùn)轉(zhuǎn),但是不斷實(shí)時(shí)調(diào)整汽缸壓力傳感器模擬輸出以使控制器相信它是與一個(gè)真實(shí)運(yùn)轉(zhuǎn)的引擎相連是非常困難的,輸出信號(hào)必須在運(yùn)轉(zhuǎn)過程中形成以便對(duì)控制器的命令做出響應(yīng)。但如果使用的是FPGA,就可以通過對(duì)其進(jìn)行配置使其生成基于模擬模型的高級(jí)輸出信號(hào)。
面臨的挑戰(zhàn)
將FPGA集成到嵌入式系統(tǒng)最大的挑戰(zhàn)是如何配置FPGA的邏輯,以及將傳感器輸入和控制輸出與它連接起來。許多嵌入式系統(tǒng)設(shè)計(jì)人員對(duì)于在實(shí)時(shí)操作系統(tǒng)下運(yùn)行的微處理器上編程非常熟練,但他們不喜歡在芯片級(jí)對(duì)硬件進(jìn)行定義,這需要有設(shè)計(jì)工具和語言如VHDL方面的知識(shí)。當(dāng)然,冒昧進(jìn)入芯片級(jí)領(lǐng)域還意味著需要設(shè)計(jì)和構(gòu)建芯片周邊的電路板,雖然這對(duì)于一些嵌入式系統(tǒng)設(shè)計(jì)人員來說已經(jīng)過時(shí)了,但仍然有許多設(shè)計(jì)人員寧愿盡可能地使用現(xiàn)成的硬件,特別是當(dāng)硬件必須精確地測(cè)量出傳感器數(shù)據(jù)并對(duì)其作數(shù)字化處理時(shí)。
目前有許多FPGA配置工具,有些工具需要VHDL或其它語言編碼完成硬件定義,有些工具提供了圖形配置環(huán)境,還有的工具允許你使用熟悉的工具編寫軟件,然后將代碼下載到FPGA中。在選擇哪種方式適合時(shí)需要考慮幾個(gè)問題,其中一個(gè)考慮因素是你的背景。你是否是一個(gè)富有經(jīng)驗(yàn)的硬件開發(fā)人員并對(duì)FPGA的基本操作有深入的認(rèn)識(shí)?如果是,就可以利用低級(jí)工具充分發(fā)揮你的經(jīng)驗(yàn)并深入實(shí)地進(jìn)行配置。也許你不是硬件工程師,但你是一位優(yōu)秀的程序員并且能很容易掌握新的編程語言,那么你可能需要選擇一個(gè)能夠讓你充分運(yùn)用數(shù)據(jù)結(jié)構(gòu)和程序細(xì)節(jié)進(jìn)行編程的工具。另外一個(gè)可能是你既不是硬件專家也不是軟件專家,但由于你對(duì)整個(gè)系統(tǒng)內(nèi)在的理論或系統(tǒng)所投入的應(yīng)用非常熟悉而來設(shè)計(jì)系統(tǒng),如果是這種情況,那么應(yīng)該選擇一個(gè)可以讓你以自己的語言進(jìn)行設(shè)計(jì)的工具,而不必學(xué)習(xí)復(fù)雜的FPGA或硬件描述語言。
另一個(gè)很重要的考慮因素是你計(jì)劃設(shè)計(jì)的系統(tǒng)所要求達(dá)到的功能是什么。如果正在設(shè)計(jì)多個(gè)不同類型的系統(tǒng),可能通用硬件設(shè)計(jì)工具最為適合。有許多人花費(fèi)很多時(shí)間成為使用這些工具的專家,你也可以加入其中。如果想將涉及面縮小一些,那么也有工具去處理那些“常規(guī)”事務(wù),而讓你專注于可以增值的地方。舉個(gè)例子,有許多工具可以幫助你很快開發(fā)出信號(hào)處理系統(tǒng)并將其配置到FPGA中去,也有一些經(jīng)優(yōu)化的工具專門用來增加測(cè)量和控制功能。
還需要考慮系統(tǒng)配置希望怎樣設(shè)置的問題。要有怎樣的尺寸?與PC連接嗎?有的FPGA開發(fā)工具要求你開發(fā)FPGA周邊所有硬件,另一些則要求使用一種特殊的內(nèi)建有FPGA的電路板。對(duì)于后者,很多和板上其它資源如I/O與總線連接的工作都已做好,這樣可以大大加快開發(fā)的進(jìn)度,因?yàn)槟銦o須關(guān)注諸如抗噪性、穩(wěn)定時(shí)間和串?dāng)_之類的事項(xiàng)。對(duì)于此類系統(tǒng),你應(yīng)該確保與I/O的連接只有一些簡(jiǎn)單功能。如果系統(tǒng)需要大量與運(yùn)行Windows或RTOS的PC連接,那么應(yīng)選擇那些能夠跨平臺(tái)的設(shè)計(jì)工具。如果用于開發(fā)PC端接口的API很有限的話,設(shè)計(jì)效率將受到一定的影響。
設(shè)計(jì)系統(tǒng)
設(shè)計(jì)一個(gè)完整系統(tǒng)的第一步是確定你的算法哪一部分需要放到FPGA中并執(zhí)行,有以下幾種可能性。第一,整個(gè)應(yīng)用都可以在FPGA上執(zhí)行,你無須通過鍵盤、顯示器或鼠標(biāo)等用戶交互方式,在這種情況下,用軟件開發(fā)就可以完成所有工作。第二,也可能將應(yīng)用嵌入到FPGA中去,但你想有一個(gè)在PC上運(yùn)行的Windows用戶界面,這就意味著需要開發(fā)一個(gè)在Windows下運(yùn)行的程序來和FPGA進(jìn)行通信。這要看你的開發(fā)工具是否按照這種思路開發(fā),可能很棘手,也可能很簡(jiǎn)單。第三,另一個(gè)常見的情況是,你希望在FPGA和一個(gè)微處理器平臺(tái)如單板機(jī)或運(yùn)行RTOS的嵌入式PC之間分配你的應(yīng)用程序,在這種情況下可能也需要一個(gè)Windows用戶界面。
有幾個(gè)原因你可能無法將整個(gè)應(yīng)用程序嵌入到FPGA中去。應(yīng)用程序大小是其中之一,F(xiàn)PGA的邏輯門數(shù)量有限,并且最終放入FPGA中的代碼因編程人員以及生成代碼的自動(dòng)系統(tǒng)不同而效率可能很高也可能很低,另外FPGA上供用戶使用的RAM容量也很有限,而基于PC的平臺(tái)一般都帶有相對(duì)較大的內(nèi)存和硬盤空間。另外一個(gè)需要考慮的問題是FPGA設(shè)計(jì)常常無法進(jìn)行浮點(diǎn)運(yùn)算,市面上有在FPGA上執(zhí)行浮點(diǎn)運(yùn)算的工具,但它們可能可以也可能無法與你正在使用的開發(fā)工具兼容,如果無法全部以整型算法運(yùn)行整個(gè)計(jì)算,可以放一部分在PC上執(zhí)行。PC還可以提供一些其它好處,而這些好處在FPGA上無法容易地實(shí)現(xiàn),包括文件I/O、網(wǎng)絡(luò)操作、打印能力和基于PC的測(cè)量和控制能力,如圖形識(shí)別/處理、GPIB/VXI工具控制以及與工業(yè)總線如CAN、RS-232和RS-485的接口等。
本文小結(jié)
FPGA為嵌入式系統(tǒng)帶來了在尺寸、成本和性能上的優(yōu)點(diǎn),特別對(duì)I/O處理加入智能特性非常有幫助,利用FPGA可以實(shí)現(xiàn)基于軟件且運(yùn)行RTOS的系統(tǒng)無法實(shí)現(xiàn)的時(shí)序和同步。你可以通過微處理器和RTOS平臺(tái)如嵌入式PC執(zhí)行大多數(shù)應(yīng)用程序,但需要芯片級(jí)解決方案進(jìn)行信號(hào)解碼和編碼或生成輸出信息;同樣,你也可以在FPGA上執(zhí)行大多數(shù)應(yīng)用程序,但需要另一個(gè)平臺(tái)來完成更高級(jí)的任務(wù)。使用FPGA有一些挑戰(zhàn),但有許多工具可以幫助你解決這些問題。最主要的考慮因素是你的技術(shù)特點(diǎn),系統(tǒng)需要完成什么任務(wù)以及系統(tǒng)如何設(shè)置。 |
|