標(biāo)題:
基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)思考之一二
[打印本頁(yè)]
作者:
51黑芯片
時(shí)間:
2016-1-17 03:46
標(biāo)題:
基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)思考之一二
作者: phixcoco
開(kāi)頭要贊下lindsey[1]能將自己實(shí)踐中的心得與大家分享。帖子上說(shuō)彼有“2年多的應(yīng)用經(jīng)驗(yàn)”以及使用過(guò)EDK的諸多版本,著實(shí)讓人仰慕。工程經(jīng)驗(yàn)以及有體驗(yàn)開(kāi)發(fā)套版本更新的歷程是份寶貴的財(cái)富也使得積累了不少思考。我無(wú)意間看到文章,看完后我很高興,一方面在于其中點(diǎn)滴的真知灼見(jiàn),更重要的是其思考能引著大家進(jìn)一步認(rèn)識(shí)自己可能正在使用的開(kāi)發(fā)平臺(tái)。
我想我也可以將自己的一份愚見(jiàn)寫(xiě)出來(lái)與大家分享!我不是Xilinx EDK的行家,也不是將SoPC應(yīng)用與嵌入式開(kāi)發(fā)的行家,我與此些產(chǎn)品的機(jī)緣開(kāi)始于06年的IBM PowerPC應(yīng)用大賽。我們組隊(duì)參加了,而IBM提供ML403開(kāi)發(fā)板作為決賽的實(shí)現(xiàn)平臺(tái)。12月中旬比賽結(jié)束之后我將圖書(shū)館里大致所有關(guān)于“FPGA、SoC、嵌入式”的書(shū)瀏覽了一遍,算是對(duì)自己一個(gè)時(shí)期內(nèi)的實(shí)踐的理論總結(jié)!
我想下面的寫(xiě)作方式不用敘事,而用分點(diǎn)闡述以讓大家盡快找到我意見(jiàn)的要點(diǎn)而不至于在細(xì)枝末節(jié)上迷失了論述的重點(diǎn)!
“上帝說(shuō),先認(rèn)識(shí)這些詞兒吧,否則你將不知所云”!
首先闡述以理清幾個(gè)概念:
“
SoC
”,“SoPC
”,“基于FPGA
的嵌入式系統(tǒng)”
SoC(System-on-Chip),知道了字面就應(yīng)該可以明白它的意思。SoC兩個(gè)重要的概念是IP Reuse(IP重用)和Software/Hardware co-design(軟硬件協(xié)同設(shè)計(jì))。IP重用和軟件中的重用關(guān)系密切,而協(xié)同設(shè)計(jì)的目的之一是縮短TTM(Time-to-Market)。其硬件實(shí)現(xiàn)是通常意義的CHIP。基于Standard Cell(標(biāo)準(zhǔn)單元庫(kù)),有通常意義的數(shù)字后端將前端設(shè)計(jì)轉(zhuǎn)化為L(zhǎng)ayout的形式提交Foundary制造,請(qǐng)?jiān)试S我將這用實(shí)現(xiàn)成為ASIC實(shí)現(xiàn)吧。
SoPC(System-on-Programmable-Chip)的概念容易理解,與通常意義的SoC的最大不同來(lái)自實(shí)現(xiàn)目標(biāo)平臺(tái)的不同,F(xiàn)PGA是其主要依賴的目標(biāo)平臺(tái)。無(wú)論是傳統(tǒng)芯片中嵌入一個(gè)FPGA模塊還是FPGA來(lái)實(shí)現(xiàn)SoC,總之我們可以利用FPGA的優(yōu)勢(shì)為系統(tǒng)設(shè)計(jì)服務(wù)。就像基于ASIC和基于FPGA的純硬件設(shè)計(jì)流程大致只有后端不同而前端設(shè)計(jì)流程一致;SoPC和傳統(tǒng)意義的SoC都套用SoC的設(shè)計(jì)方法學(xué)以及使用類(lèi)似的SoC設(shè)計(jì)流程,區(qū)別之一也在于SoPC以FPGA作為實(shí)現(xiàn)目標(biāo)從而少去了諸多后端設(shè)計(jì)的工作和制造的時(shí)間。
基于FPGA的嵌入式系統(tǒng),這個(gè)概念多少像個(gè)拼盤(pán)。首先嵌入式概念的要點(diǎn)之一既有軟件也有硬件同時(shí)目標(biāo)為特定的應(yīng)用領(lǐng)域。嵌入式系統(tǒng)(Embedded System)也是System,它的硬件部分可以選擇用一系列專(zhuān)用芯片搭建板級(jí)系統(tǒng),也可以用幾塊SoC芯片和少許外圍元件搭建,而承載SoC的可以是ASIC實(shí)現(xiàn)也可以是FPGA。
“沒(méi)有后端組?選擇
FPGA
實(shí)現(xiàn)吧。批量生產(chǎn)?可以嘗試結(jié)構(gòu)化
ASIC
。完全的單片系統(tǒng)解決方案?
SoC
吧。沒(méi)法做進(jìn)一個(gè)
die
?層疊封裝……朋友,具體問(wèn)題要具體分析的!”
即便是ASIC實(shí)現(xiàn)的SoC,通常也會(huì)有使用FPGA做 Prototype的階段。然而實(shí)現(xiàn)平臺(tái)的不同決定了FPGA在其中的作用是不盡相同的,下面的闡述將針對(duì)將FPGA作為嵌入式系統(tǒng)實(shí)現(xiàn)平臺(tái)的情況。
1
、基于FPGA
的嵌入式系統(tǒng)設(shè)計(jì)的限制
lindsey在“1、SOPC能設(shè)計(jì)什么樣的嵌入式系統(tǒng)”一段中提到了硬件系統(tǒng)設(shè)計(jì)中的兩個(gè)主要限制是:片上存儲(chǔ)資源和有限的接口IP。下面主要分接口、存儲(chǔ)和處理三個(gè)部分闡述FPGA用于嵌入式系統(tǒng)搭建的限制。
首先是接口,“pin limitation”是不得不面對(duì)的一個(gè)問(wèn)題,這也是為什么我們將一些components集成到chip的內(nèi)部將pin與pin的連接轉(zhuǎn)換為片內(nèi)的連接,從而減輕芯片引腳限制帶來(lái)的系統(tǒng)設(shè)計(jì)壓力。這在存儲(chǔ)系統(tǒng)設(shè)計(jì)的時(shí)候會(huì)充分感受到,多塊片外的存儲(chǔ)器(甚至是多種)會(huì)消耗大量的FPGA引腳。同時(shí)片外和片內(nèi)互連必然收到pad的物理和電氣限制,從而限制了延時(shí)和速度。如果需要,可以看看Xilinx的RocketIO。然后是接口IP,當(dāng)我讀到lindsey網(wǎng)友的文章的文字是又喜又悲,一方面IP的概念為人們熟知,另一方面是大家太習(xí)慣“免費(fèi)的午餐”了。常用的接口IP都屬于General IP的范疇,在ASIC實(shí)現(xiàn)的SoC時(shí),我們通常向Synopsys(全球第一的General IP提供商)以及Mentor等公司付費(fèi)使用這些IP。免費(fèi)的IP通?梢砸浦睴penCores等來(lái)源的IP。一些常用的接口IP,因?yàn)槠洳町愋院徒?jīng)濟(jì)性不高所以公司會(huì)選擇免費(fèi)提供給用戶而沒(méi)有必要收取費(fèi)用。而對(duì)于大多數(shù)的IP都是要收費(fèi)使用的。接口IP不應(yīng)該成為嵌入式系統(tǒng)設(shè)計(jì)中的限制點(diǎn)。
接著是存儲(chǔ)系統(tǒng),存儲(chǔ)系統(tǒng)是系統(tǒng)設(shè)計(jì)者常常要仔細(xì)設(shè)計(jì)的部分。我想為FPGA不能集成大容量存儲(chǔ)資源做一下辯解:一是FPGA本身優(yōu)勢(shì)在于computing-intensive的設(shè)計(jì);二是現(xiàn)有的FPGA主要是基于SRAM,集成適量的SRAM存儲(chǔ)單元很容易理解;三是存儲(chǔ)器是一個(gè)相對(duì)獨(dú)立的市場(chǎng),其制程(無(wú)論是DRAM還是FLASH,更不用說(shuō)EEPROM等)和FPGA本生不一致;四是存儲(chǔ)單元消耗的功耗比例越來(lái)越大……事實(shí)是FPGA上的存儲(chǔ)單元容量十分有限,使得基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)時(shí)不得不使用片外存儲(chǔ)單元,這使得存儲(chǔ)系統(tǒng)的延遲和帶寬以及FPGA的引腳限制都成為系統(tǒng)設(shè)計(jì)者需要面對(duì)的設(shè)計(jì)問(wèn)題。
最后到處理,片上系統(tǒng)的主體是處理。在絕大多數(shù)的應(yīng)用領(lǐng)域中基于總線的構(gòu)架占了絕對(duì)的統(tǒng)治地位。兩個(gè)不容忽視的部分是處理器和總線。撇開(kāi)Xilinx和Altera泛而談之,處理器內(nèi)核并非越快越好,總線也不是唯AMBA獨(dú)尊。我喜歡Hennessy的“Computer Architecture: A Quantitative Approach”以及“Computer Organization & Design: The Hardware/Software Interface”兩本書(shū),因?yàn)閷W(xué)會(huì)了軟硬件兩方面思考系統(tǒng)以及量化的研究方法。8051 compatible的處理器軟核不可小覷,我們看到漫天32位處理器內(nèi)核的同時(shí),也該知道ARM的16位Trumb指令集的設(shè)計(jì)目的。同樣還有可能的DSP軟/硬核。同樣在總線方面,你可能需要Wishbone的輕巧,你可能需要AHB/APB明顯的劃分來(lái)構(gòu)架系統(tǒng),抑或你可能需要CoreConnect的讀寫(xiě)、配置和數(shù)據(jù)傳輸?shù)炔⑿袔?lái)的強(qiáng)大性能。順便提一點(diǎn):片上總線和傳統(tǒng)的板級(jí)總線是有差異的,使得將傳統(tǒng)的板級(jí)總線(PCI)實(shí)現(xiàn)在片內(nèi)是沒(méi)有多大意義的。FPGA提供了足夠的自由度,使得我們可以自由的選擇處理器軟核和使用的片上總線選擇來(lái)自量化的分析。但當(dāng)FPGA用于實(shí)現(xiàn)嵌入式系統(tǒng)時(shí),特別是利用Xilinx抑或Altera提供的開(kāi)發(fā)工具進(jìn)行基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)時(shí),限制又多了一層,那就是軟件的限制!如果你不是使用PPC處理器核,那么你可以選擇沒(méi)有內(nèi)嵌PPC硬核的Xilinx的FPGA型號(hào),或者內(nèi)嵌了而不使用它。問(wèn)題在于系統(tǒng)集成時(shí)你無(wú)法使用Xilinx EDK提供的軟件平臺(tái)來(lái)輕便地集成系統(tǒng)。反過(guò)來(lái)的思考是,這樣你也可以不會(huì)陷于選擇,而將精力著力與利用提供的內(nèi)核和總線類(lèi)型基礎(chǔ)上最優(yōu)化你的設(shè)計(jì),并充分享受開(kāi)發(fā)工具提供的在系統(tǒng)集成上的便利!
2
、基于FPGA
的嵌入式系統(tǒng)設(shè)計(jì)需要做什么
既然是一個(gè)既有軟件又有硬件的系統(tǒng),那么缺少不了軟件和硬件兩個(gè)部門(mén)的工程師。傳統(tǒng)的嵌入式系統(tǒng)設(shè)計(jì)中,硬件設(shè)計(jì)師主要工作在搭建板級(jí)系統(tǒng)(抑或還得加上調(diào)底層驅(qū)動(dòng)的活兒),而軟件工程師向上開(kāi)發(fā)應(yīng)用。基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)中,硬件工程師似乎不得不又分成兩波,一撥開(kāi)發(fā)片上系統(tǒng)的硬件(由于軟硬件接口主要在FPGA上,所以編寫(xiě)底層驅(qū)動(dòng)的事似乎得由他們干了),一撥開(kāi)發(fā)板級(jí)硬件。我這里要說(shuō)一下我在圖書(shū)館里看的幾本書(shū)的印象,那就是無(wú)一例外的它們都變成了介紹多個(gè)工具的雜集,甚是還包括HDL語(yǔ)言本身,更要命的在于介紹的重點(diǎn)集中在了單個(gè)IP設(shè)計(jì),于是一本關(guān)于SoPC抑或基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)的書(shū)變成了介紹FPGA上設(shè)計(jì)硬件邏輯的書(shū)籍。我想作者們以及許多工程師們似乎沒(méi)有抓住基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)的要點(diǎn):
首先是硬件平臺(tái)的快速搭建。你是否有體會(huì)到如Xilinx EDK的一個(gè)亮點(diǎn)就在于硬件平臺(tái)的快速搭建。在IP都已經(jīng)available的情況下,利用EDK,我們可以快速地構(gòu)架起我們的片上硬件系統(tǒng)。以Xilinx的EDK為例,EDK自帶的IP已經(jīng)有不少,且不要小視Xilinx公司可以提供的IP的資源,當(dāng)然不少都是需要付費(fèi)的。同時(shí)FPGA作為一個(gè)靈活的平臺(tái),使得我們可以開(kāi)發(fā)自己所需的專(zhuān)用IP來(lái)在硬件層面上提高產(chǎn)品的差異性和性能,作為公司可以建立IP庫(kù),從而在不同的嵌入式系統(tǒng)搭建時(shí)能夠方便地在EDK中復(fù)用。RTL級(jí)的源碼保證了很大的實(shí)現(xiàn)可移植性。再者就是IP接口生成(也就是Import & Create Peripheral Wizard)極大地簡(jiǎn)化了總線接口的設(shè)計(jì),從而使得基于總線的系統(tǒng)集成是那么地簡(jiǎn)便!但另一方面我們又不得不看到,在項(xiàng)目需要設(shè)計(jì)專(zhuān)用的IP,特別是IP比較復(fù)雜時(shí),系統(tǒng)設(shè)計(jì)的周期會(huì)被明顯拉長(zhǎng)。一個(gè)原因在于基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)并沒(méi)有很好地推廣軟硬件協(xié)同設(shè)計(jì)的觀點(diǎn)。在傳統(tǒng)的基于ASIC實(shí)現(xiàn)的SoC設(shè)計(jì)中,我們會(huì)根據(jù)Specification用高層語(yǔ)言模擬系統(tǒng)(行為模擬,功能精確或者周期精確),模擬軟硬件接口,使得硬件在逐步實(shí)現(xiàn)的同時(shí),軟件能夠基于模擬的硬件進(jìn)行設(shè)計(jì)和調(diào)試,從而軟硬件設(shè)計(jì)的周期能夠overlap。而基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)中,EDK提供了處理器的指令集仿真器(由于不是系統(tǒng)的模擬器,所以缺少調(diào)試外圍IP的便利性)、提供了在軟件上程序和硬件描述語(yǔ)言描述的硬件協(xié)同仿真的條件,但是軟件設(shè)計(jì)的前提是硬件系統(tǒng)集成的完成(這點(diǎn)上我并不是很確定。?偠灾跇(gòu)建片上硬件系統(tǒng)的IP模塊均具備的情況下,硬件系統(tǒng)能夠很快地集成驗(yàn)證并進(jìn)入軟件開(kāi)發(fā)流程,EDK給予了硬件系統(tǒng)集成的便利性。
其次是軟件設(shè)計(jì)體現(xiàn)應(yīng)用差異性。傳統(tǒng)的嵌入式系統(tǒng)由于硬件設(shè)計(jì)的局限性,使得嵌入式系統(tǒng)的硬件平臺(tái)差異不大(正如lindsey在“2、SOPC的設(shè)計(jì)師在設(shè)計(jì)什么”開(kāi)頭寫(xiě)道的那樣),開(kāi)發(fā)集中在軟件。然而FPGA的硬件載體使得硬件上也能做不少差異設(shè)計(jì),并且基于基于FPGA的設(shè)計(jì)容易實(shí)現(xiàn)功能以及保證時(shí)序收斂!但是不應(yīng)該因此在基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)中忽視了軟件的重要性。軟件層面的靈活性仍然是硬件本身無(wú)法比擬的,從而使得軟件在應(yīng)用的創(chuàng)新和產(chǎn)品的差異化上扮演了重要的角色,這是我在經(jīng)歷PPC應(yīng)用大賽后的感受。同時(shí)從系統(tǒng)性能設(shè)計(jì)的考量,正如Hennesey書(shū)中體現(xiàn)的思想,硬件構(gòu)架以及軟硬件接口的設(shè)計(jì)固然重要,系統(tǒng)軟件同樣很大程度影響著系統(tǒng)的整體性能并可能成為系統(tǒng)性能的瓶頸。而系統(tǒng)軟件就是指OS以及軟硬件直接交互的使者――驅(qū)動(dòng)。以Xilinx的EDK為例,我個(gè)人覺(jué)得Xilinx EDK中的驅(qū)動(dòng)分層設(shè)計(jì)以及驅(qū)動(dòng)的構(gòu)架很好,傳統(tǒng)的層次化的設(shè)計(jì)思想得到了優(yōu)美的實(shí)踐。
那么工程師要做什么呢?不是有這么多的工作可以讓你發(fā)揮你的想象力嗎!
3
、“工欲善其事,必先利其器”
硬件工程師在實(shí)現(xiàn)強(qiáng)大的計(jì)算平臺(tái)為軟件設(shè)計(jì)提供強(qiáng)有力的支持的同時(shí),硬件設(shè)計(jì)本身也得益于軟件的發(fā)展。
首先需要感謝下“Free Software Foundation”和“Open Source Initiatives”(或許Richard Stallman并不喜歡別人感謝這個(gè))。起碼林林總總的開(kāi)源軟件讓我們的軟件開(kāi)發(fā)更加高效。gcc,據(jù)稱(chēng)是地球上凡存在過(guò)的CPU構(gòu)架它都支持。或許有點(diǎn)夸張,但是倘若我設(shè)計(jì)了一套指令集,而需要一個(gè)編譯器/交叉編譯器的話,我會(huì)首先想到移植gcc。gcc,gdb/ddd等工具對(duì)于軟件開(kāi)發(fā),特別是系統(tǒng)軟件開(kāi)發(fā)的工程師來(lái)說(shuō)應(yīng)當(dāng)是熟悉的。即便是硬件設(shè)計(jì)與仿真領(lǐng)域,VCS、Modelsim的工具套件中你是否忽視了gcc的存在呢?
傳統(tǒng)的嵌入式開(kāi)發(fā)系統(tǒng)中主要的編程工作在軟件,主要的編程對(duì)象是CPU/DSP,而它們的指令集是開(kāi)放的,使得在專(zhuān)用的集成開(kāi)發(fā)環(huán)境外,eclipse等軟件由于其開(kāi)放的構(gòu)架也逐步受到嵌入式軟件開(kāi)發(fā)者的喜愛(ài);贔PGA的嵌入式系統(tǒng)類(lèi)似的可以采用eclipse作為軟件開(kāi)發(fā)集成環(huán)境,但其編程性還有FPGA,由于FPGA諸多的不透明性(諸如bit文件格式等等),使得我們可以確信不同的FPGA供應(yīng)商必然是針對(duì)自己的FPGA提供自由的集成開(kāi)發(fā)環(huán)境。Xilinx有XPS,而Altera有SoPC Builder開(kāi)發(fā)工具。
對(duì)于硬件部分的開(kāi)發(fā),它和傳統(tǒng)的基于FPGA的硬件開(kāi)發(fā)流程相同,因此完全可以借用已經(jīng)相對(duì)成熟的設(shè)計(jì)工具和流程。事實(shí)上,Xilinx和Altera在自家的基于FPGA的嵌入式開(kāi)發(fā)套件中整合了傳統(tǒng)的基于FPGA的硬件開(kāi)發(fā)的工具和流程。利用已有的基于FPGA的硬件開(kāi)發(fā)工具鏈,我們已經(jīng)可以做系統(tǒng)的整合(包括硬件系統(tǒng)的整合以及軟硬件的整合)。然而從嵌入式的需求出發(fā),我們需要一個(gè)簡(jiǎn)化的硬件整合的工具,我們也需要一個(gè)簡(jiǎn)便的軟硬件整合的工具。在Xilinx的EDK中,Xilinx Platform Studio(XPS)就是這樣的一個(gè)集成開(kāi)發(fā)環(huán)境。我們希望它能進(jìn)行有效的IP管理和基于總線的系統(tǒng)集成!
說(shuō)IP管理,在傳統(tǒng)SoC領(lǐng)域中人們也在制定標(biāo)準(zhǔn)化的IP管理,以便于IP的共享和復(fù)用,或許是XML抑或是別的。無(wú)論軟件還是硬件設(shè)計(jì)人員,你對(duì)于配置文件應(yīng)該不至于陌生。Xilinx的EDK采用的是基于配置的管理。而且不僅僅是管理IP本身。諸多的配置文件可得理清相互的依賴關(guān)系,就和開(kāi)源軟件的包依賴關(guān)系類(lèi)似。這造成的一個(gè)問(wèn)題就是如果手工修改配置文件有可能造成系統(tǒng)配置混亂,而使得集成開(kāi)發(fā)工具無(wú)法順暢的解決對(duì)應(yīng)關(guān)系造成工程的崩潰。對(duì)于基于FPGA的嵌入式開(kāi)發(fā)軟件而言,它管理的IP都是帶總線接口的IP。而我們?cè)O(shè)計(jì)IP通常分kernel和bus interface兩個(gè)部分。Import & Create Peripheral Wizard之所以是我喜愛(ài)的功能,是因?yàn)閷?shí)踐中節(jié)省了大量為自己設(shè)計(jì)的IP設(shè)計(jì)和驗(yàn)證總線接口的時(shí)間,而且總線操作時(shí)序比較有保證!在Xilinx的EDK中,它用MPD(Microprocessor Peripheral Definition)和PAO(Peripheral Analyzer Order)等配置文件來(lái)標(biāo)示IP。當(dāng)IP集成為一個(gè)硬件系統(tǒng)時(shí),它用MHS(Microprocessor Hardware Specification)配置文件來(lái)標(biāo)示硬件的連接等屬性。相應(yīng)的工具能夠在這些配置文件的指引下來(lái)集成硬件系統(tǒng)。軟件部分的驅(qū)動(dòng)、編程庫(kù)等都有一套配置文件。
這些配置文件的作用常常可以被隱藏在GUI界面和按鈕之下。然而當(dāng)進(jìn)行系統(tǒng)查錯(cuò),特別當(dāng)使用自己設(shè)計(jì)的嵌入式開(kāi)發(fā)板時(shí),你就有必要完全了解Xilinx EDK的各種配置文件的用途,正確地配置軟硬件系統(tǒng)以充分發(fā)揮XPS下各種工具進(jìn)行系統(tǒng)集成的能力!
最后補(bǔ)充說(shuō)明一點(diǎn),關(guān)于綜合和布局布線的速度,綜合和布局布線算法本身的復(fù)雜度加之日益增長(zhǎng)的FPGA芯片的規(guī)模,我想只能說(shuō)短時(shí)間不會(huì)有太多的改觀的。如果你經(jīng)歷過(guò)在服務(wù)器上晝夜跑regression和十?dāng)?shù)小時(shí)綜合的經(jīng)歷的話,你或許就不會(huì)對(duì)XPS工程編譯花上半個(gè)小時(shí)而驚異了!
總之透過(guò)一個(gè)開(kāi)發(fā)工具,我們或許可以學(xué)到一些諸如工程管理的學(xué)問(wèn)。當(dāng)然我們都期望開(kāi)發(fā)工具能夠越來(lái)越高效和易用!
感謝你讀完我敲下的以上文字,如有謬誤,敬請(qǐng)指出!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1