欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2714|回復: 0
打印 上一主題 下一主題
收起左側

基于FPGA的嵌入式系統設計思考之一二

[復制鏈接]
跳轉到指定樓層
樓主
ID:103513 發表于 2016-1-17 03:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
作者: phixcoco

開頭要贊下lindsey[1]能將自己實踐中的心得與大家分享。帖子上說彼有“2年多的應用經驗”以及使用過EDK的諸多版本,著實讓人仰慕。工程經驗以及有體驗開發套版本更新的歷程是份寶貴的財富也使得積累了不少思考。我無意間看到文章,看完后我很高興,一方面在于其中點滴的真知灼見,更重要的是其思考能引著大家進一步認識自己可能正在使用的開發平臺。
我想我也可以將自己的一份愚見寫出來與大家分享!我不是Xilinx EDK的行家,也不是將SoPC應用與嵌入式開發的行家,我與此些產品的機緣開始于06年的IBM PowerPC應用大賽。我們組隊參加了,而IBM提供ML403開發板作為決賽的實現平臺。12月中旬比賽結束之后我將圖書館里大致所有關于“FPGA、SoC、嵌入式”的書瀏覽了一遍,算是對自己一個時期內的實踐的理論總結!
我想下面的寫作方式不用敘事,而用分點闡述以讓大家盡快找到我意見的要點而不至于在細枝末節上迷失了論述的重點!

“上帝說,先認識這些詞兒吧,否則你將不知所云”!
首先闡述以理清幾個概念:SoC”,“SoPC”,“基于FPGA的嵌入式系統”
SoC(System-on-Chip),知道了字面就應該可以明白它的意思。SoC兩個重要的概念是IP Reuse(IP重用)和Software/Hardware co-design(軟硬件協同設計)。IP重用和軟件中的重用關系密切,而協同設計的目的之一是縮短TTM(Time-to-Market)。其硬件實現是通常意義的CHIP。基于Standard Cell(標準單元庫),有通常意義的數字后端將前端設計轉化為Layout的形式提交Foundary制造,請允許我將這用實現成為ASIC實現吧。
SoPC(System-on-Programmable-Chip)的概念容易理解,與通常意義的SoC的最大不同來自實現目標平臺的不同,FPGA是其主要依賴的目標平臺。無論是傳統芯片中嵌入一個FPGA模塊還是FPGA來實現SoC,總之我們可以利用FPGA的優勢為系統設計服務。就像基于ASIC和基于FPGA的純硬件設計流程大致只有后端不同而前端設計流程一致;SoPC和傳統意義的SoC都套用SoC的設計方法學以及使用類似的SoC設計流程,區別之一也在于SoPC以FPGA作為實現目標從而少去了諸多后端設計的工作和制造的時間。
基于FPGA的嵌入式系統,這個概念多少像個拼盤。首先嵌入式概念的要點之一既有軟件也有硬件同時目標為特定的應用領域。嵌入式系統(Embedded System)也是System,它的硬件部分可以選擇用一系列專用芯片搭建板級系統,也可以用幾塊SoC芯片和少許外圍元件搭建,而承載SoC的可以是ASIC實現也可以是FPGA。

“沒有后端組?選擇FPGA實現吧。批量生產?可以嘗試結構化ASIC。完全的單片系統解決方案?SoC吧。沒法做進一個die?層疊封裝……朋友,具體問題要具體分析的!”
即便是ASIC實現的SoC,通常也會有使用FPGA做 Prototype的階段。然而實現平臺的不同決定了FPGA在其中的作用是不盡相同的,下面的闡述將針對將FPGA作為嵌入式系統實現平臺的情況。

1、基于FPGA的嵌入式系統設計的限制
lindsey在“1、SOPC能設計什么樣的嵌入式系統”一段中提到了硬件系統設計中的兩個主要限制是:片上存儲資源和有限的接口IP。下面主要分接口、存儲和處理三個部分闡述FPGA用于嵌入式系統搭建的限制。
首先是接口,“pin limitation”是不得不面對的一個問題,這也是為什么我們將一些components集成到chip的內部將pin與pin的連接轉換為片內的連接,從而減輕芯片引腳限制帶來的系統設計壓力。這在存儲系統設計的時候會充分感受到,多塊片外的存儲器(甚至是多種)會消耗大量的FPGA引腳。同時片外和片內互連必然收到pad的物理和電氣限制,從而限制了延時和速度。如果需要,可以看看Xilinx的RocketIO。然后是接口IP,當我讀到lindsey網友的文章的文字是又喜又悲,一方面IP的概念為人們熟知,另一方面是大家太習慣“免費的午餐”了。常用的接口IP都屬于General IP的范疇,在ASIC實現的SoC時,我們通常向Synopsys(全球第一的General IP提供商)以及Mentor等公司付費使用這些IP。免費的IP通常可以移植OpenCores等來源的IP。一些常用的接口IP,因為其差異性和經濟性不高所以公司會選擇免費提供給用戶而沒有必要收取費用。而對于大多數的IP都是要收費使用的。接口IP不應該成為嵌入式系統設計中的限制點。
接著是存儲系統,存儲系統是系統設計者常常要仔細設計的部分。我想為FPGA不能集成大容量存儲資源做一下辯解:一是FPGA本身優勢在于computing-intensive的設計;二是現有的FPGA主要是基于SRAM,集成適量的SRAM存儲單元很容易理解;三是存儲器是一個相對獨立的市場,其制程(無論是DRAM還是FLASH,更不用說EEPROM等)和FPGA本生不一致;四是存儲單元消耗的功耗比例越來越大……事實是FPGA上的存儲單元容量十分有限,使得基于FPGA的嵌入式系統設計時不得不使用片外存儲單元,這使得存儲系統的延遲和帶寬以及FPGA的引腳限制都成為系統設計者需要面對的設計問題。
最后到處理,片上系統的主體是處理。在絕大多數的應用領域中基于總線的構架占了絕對的統治地位。兩個不容忽視的部分是處理器和總線。撇開Xilinx和Altera泛而談之,處理器內核并非越快越好,總線也不是唯AMBA獨尊。我喜歡Hennessy的“Computer Architecture: A Quantitative Approach”以及“Computer Organization & Design: The Hardware/Software Interface”兩本書,因為學會了軟硬件兩方面思考系統以及量化的研究方法。8051 compatible的處理器軟核不可小覷,我們看到漫天32位處理器內核的同時,也該知道ARM的16位Trumb指令集的設計目的。同樣還有可能的DSP軟/硬核。同樣在總線方面,你可能需要Wishbone的輕巧,你可能需要AHB/APB明顯的劃分來構架系統,抑或你可能需要CoreConnect的讀寫、配置和數據傳輸等并行帶來的強大性能。順便提一點:片上總線和傳統的板級總線是有差異的,使得將傳統的板級總線(PCI)實現在片內是沒有多大意義的。FPGA提供了足夠的自由度,使得我們可以自由的選擇處理器軟核和使用的片上總線選擇來自量化的分析。但當FPGA用于實現嵌入式系統時,特別是利用Xilinx抑或Altera提供的開發工具進行基于FPGA的嵌入式系統設計時,限制又多了一層,那就是軟件的限制!如果你不是使用PPC處理器核,那么你可以選擇沒有內嵌PPC硬核的Xilinx的FPGA型號,或者內嵌了而不使用它。問題在于系統集成時你無法使用Xilinx EDK提供的軟件平臺來輕便地集成系統。反過來的思考是,這樣你也可以不會陷于選擇,而將精力著力與利用提供的內核和總線類型基礎上最優化你的設計,并充分享受開發工具提供的在系統集成上的便利!

2、基于FPGA的嵌入式系統設計需要做什么
既然是一個既有軟件又有硬件的系統,那么缺少不了軟件和硬件兩個部門的工程師。傳統的嵌入式系統設計中,硬件設計師主要工作在搭建板級系統(抑或還得加上調底層驅動的活兒),而軟件工程師向上開發應用。基于FPGA的嵌入式系統設計中,硬件工程師似乎不得不又分成兩波,一撥開發片上系統的硬件(由于軟硬件接口主要在FPGA上,所以編寫底層驅動的事似乎得由他們干了),一撥開發板級硬件。我這里要說一下我在圖書館里看的幾本書的印象,那就是無一例外的它們都變成了介紹多個工具的雜集,甚是還包括HDL語言本身,更要命的在于介紹的重點集中在了單個IP設計,于是一本關于SoPC抑或基于FPGA的嵌入式系統設計的書變成了介紹FPGA上設計硬件邏輯的書籍。我想作者們以及許多工程師們似乎沒有抓住基于FPGA的嵌入式系統設計的要點:
首先是硬件平臺的快速搭建。你是否有體會到如Xilinx EDK的一個亮點就在于硬件平臺的快速搭建。在IP都已經available的情況下,利用EDK,我們可以快速地構架起我們的片上硬件系統。以Xilinx的EDK為例,EDK自帶的IP已經有不少,且不要小視Xilinx公司可以提供的IP的資源,當然不少都是需要付費的。同時FPGA作為一個靈活的平臺,使得我們可以開發自己所需的專用IP來在硬件層面上提高產品的差異性和性能,作為公司可以建立IP庫,從而在不同的嵌入式系統搭建時能夠方便地在EDK中復用。RTL級的源碼保證了很大的實現可移植性。再者就是IP接口生成(也就是Import & Create Peripheral Wizard)極大地簡化了總線接口的設計,從而使得基于總線的系統集成是那么地簡便!但另一方面我們又不得不看到,在項目需要設計專用的IP,特別是IP比較復雜時,系統設計的周期會被明顯拉長。一個原因在于基于FPGA的嵌入式系統設計并沒有很好地推廣軟硬件協同設計的觀點。在傳統的基于ASIC實現的SoC設計中,我們會根據Specification用高層語言模擬系統(行為模擬,功能精確或者周期精確),模擬軟硬件接口,使得硬件在逐步實現的同時,軟件能夠基于模擬的硬件進行設計和調試,從而軟硬件設計的周期能夠overlap。而基于FPGA的嵌入式系統設計中,EDK提供了處理器的指令集仿真器(由于不是系統的模擬器,所以缺少調試外圍IP的便利性)、提供了在軟件上程序和硬件描述語言描述的硬件協同仿真的條件,但是軟件設計的前提是硬件系統集成的完成(這點上我并不是很確定!)。總而言之,在構建片上硬件系統的IP模塊均具備的情況下,硬件系統能夠很快地集成驗證并進入軟件開發流程,EDK給予了硬件系統集成的便利性。
其次是軟件設計體現應用差異性。傳統的嵌入式系統由于硬件設計的局限性,使得嵌入式系統的硬件平臺差異不大(正如lindsey在“2、SOPC的設計師在設計什么”開頭寫道的那樣),開發集中在軟件。然而FPGA的硬件載體使得硬件上也能做不少差異設計,并且基于基于FPGA的設計容易實現功能以及保證時序收斂!但是不應該因此在基于FPGA的嵌入式系統設計中忽視了軟件的重要性。軟件層面的靈活性仍然是硬件本身無法比擬的,從而使得軟件在應用的創新和產品的差異化上扮演了重要的角色,這是我在經歷PPC應用大賽后的感受。同時從系統性能設計的考量,正如Hennesey書中體現的思想,硬件構架以及軟硬件接口的設計固然重要,系統軟件同樣很大程度影響著系統的整體性能并可能成為系統性能的瓶頸。而系統軟件就是指OS以及軟硬件直接交互的使者――驅動。以Xilinx的EDK為例,我個人覺得Xilinx EDK中的驅動分層設計以及驅動的構架很好,傳統的層次化的設計思想得到了優美的實踐。
那么工程師要做什么呢?不是有這么多的工作可以讓你發揮你的想象力嗎!

3、“工欲善其事,必先利其器”
硬件工程師在實現強大的計算平臺為軟件設計提供強有力的支持的同時,硬件設計本身也得益于軟件的發展。
首先需要感謝下“Free Software Foundation”和“Open Source Initiatives”(或許Richard Stallman并不喜歡別人感謝這個)。起碼林林總總的開源軟件讓我們的軟件開發更加高效。gcc,據稱是地球上凡存在過的CPU構架它都支持。或許有點夸張,但是倘若我設計了一套指令集,而需要一個編譯器/交叉編譯器的話,我會首先想到移植gcc。gcc,gdb/ddd等工具對于軟件開發,特別是系統軟件開發的工程師來說應當是熟悉的。即便是硬件設計與仿真領域,VCS、Modelsim的工具套件中你是否忽視了gcc的存在呢?
傳統的嵌入式開發系統中主要的編程工作在軟件,主要的編程對象是CPU/DSP,而它們的指令集是開放的,使得在專用的集成開發環境外,eclipse等軟件由于其開放的構架也逐步受到嵌入式軟件開發者的喜愛。基于FPGA的嵌入式系統類似的可以采用eclipse作為軟件開發集成環境,但其編程性還有FPGA,由于FPGA諸多的不透明性(諸如bit文件格式等等),使得我們可以確信不同的FPGA供應商必然是針對自己的FPGA提供自由的集成開發環境。Xilinx有XPS,而Altera有SoPC Builder開發工具。
對于硬件部分的開發,它和傳統的基于FPGA的硬件開發流程相同,因此完全可以借用已經相對成熟的設計工具和流程。事實上,Xilinx和Altera在自家的基于FPGA的嵌入式開發套件中整合了傳統的基于FPGA的硬件開發的工具和流程。利用已有的基于FPGA的硬件開發工具鏈,我們已經可以做系統的整合(包括硬件系統的整合以及軟硬件的整合)。然而從嵌入式的需求出發,我們需要一個簡化的硬件整合的工具,我們也需要一個簡便的軟硬件整合的工具。在Xilinx的EDK中,Xilinx Platform Studio(XPS)就是這樣的一個集成開發環境。我們希望它能進行有效的IP管理和基于總線的系統集成!
說IP管理,在傳統SoC領域中人們也在制定標準化的IP管理,以便于IP的共享和復用,或許是XML抑或是別的。無論軟件還是硬件設計人員,你對于配置文件應該不至于陌生。Xilinx的EDK采用的是基于配置的管理。而且不僅僅是管理IP本身。諸多的配置文件可得理清相互的依賴關系,就和開源軟件的包依賴關系類似。這造成的一個問題就是如果手工修改配置文件有可能造成系統配置混亂,而使得集成開發工具無法順暢的解決對應關系造成工程的崩潰。對于基于FPGA的嵌入式開發軟件而言,它管理的IP都是帶總線接口的IP。而我們設計IP通常分kernel和bus interface兩個部分。Import & Create Peripheral Wizard之所以是我喜愛的功能,是因為實踐中節省了大量為自己設計的IP設計和驗證總線接口的時間,而且總線操作時序比較有保證!在Xilinx的EDK中,它用MPD(Microprocessor Peripheral Definition)和PAO(Peripheral Analyzer Order)等配置文件來標示IP。當IP集成為一個硬件系統時,它用MHS(Microprocessor Hardware Specification)配置文件來標示硬件的連接等屬性。相應的工具能夠在這些配置文件的指引下來集成硬件系統。軟件部分的驅動、編程庫等都有一套配置文件。
這些配置文件的作用常常可以被隱藏在GUI界面和按鈕之下。然而當進行系統查錯,特別當使用自己設計的嵌入式開發板時,你就有必要完全了解Xilinx EDK的各種配置文件的用途,正確地配置軟硬件系統以充分發揮XPS下各種工具進行系統集成的能力!
最后補充說明一點,關于綜合和布局布線的速度,綜合和布局布線算法本身的復雜度加之日益增長的FPGA芯片的規模,我想只能說短時間不會有太多的改觀的。如果你經歷過在服務器上晝夜跑regression和十數小時綜合的經歷的話,你或許就不會對XPS工程編譯花上半個小時而驚異了!
總之透過一個開發工具,我們或許可以學到一些諸如工程管理的學問。當然我們都期望開發工具能夠越來越高效和易用!
感謝你讀完我敲下的以上文字,如有謬誤,敬請指出!


評分

參與人數 1黑幣 +35 收起 理由
暗光 + 35 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表