<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 針對微控制器應(yīng)用的FPGA實(shí)現(xiàn)

          針對微控制器應(yīng)用的FPGA實(shí)現(xiàn)

          作者: 時(shí)間:2017-06-06 來源:網(wǎng)絡(luò) 收藏
          當(dāng)你打開任何智能電子設(shè)備(從老式的電視遙控器到全球定位系統(tǒng)),會(huì)發(fā)現(xiàn)幾乎所有的設(shè)備都至少采用了一個(gè)(MCU),很多設(shè)備里還會(huì)有多個(gè)。MCU往往被用于專用的終端產(chǎn)品或設(shè)備中,它能夠很好地完成特殊任務(wù)。另一方面,PC的大腦,即微處理器被設(shè)計(jì)用于實(shí)現(xiàn)許多通用的功能。可用于降低成本,加固工業(yè)和自動(dòng)化應(yīng)用,將其嵌入中時(shí),還可以通過重新編程迅速改變功能。這種靈活性使得單個(gè)設(shè)備可應(yīng)用于接口標(biāo)準(zhǔn)不同的多個(gè)市場。

          在選擇微控制器時(shí)應(yīng)考慮哪些因素?本文將主要探討采用的嵌入式應(yīng)用。不過,選擇任何微控制器的標(biāo)準(zhǔn)本質(zhì)上都是相同的。設(shè)計(jì)者需要考慮下列因素:終端產(chǎn)品的成本是多少?實(shí)現(xiàn)設(shè)計(jì)以及存儲(chǔ)控制程序需要多少內(nèi)存?對輸入輸出的要求?對寄存器的要求?如何與其它器件集成?

          傳統(tǒng)的MCU已作為一種非定制的特殊應(yīng)用標(biāo)準(zhǔn)產(chǎn)品(ASSP)上市,每個(gè)供應(yīng)商都提供了不同的功能以實(shí)現(xiàn)差異化并迎合市場的各種需求。將與MCU IP結(jié)合可提供比傳統(tǒng)MCU更加靈活的硬件平臺(tái),并有助于實(shí)現(xiàn)前面列出的各項(xiàng)考慮因素。

          雖然FPGA比單片MCU昂貴,但其附加的功能(如嵌入式DSP、存儲(chǔ)塊以及靈活的I/O環(huán))可以抵消多個(gè)器件的成本;FPGA提供了更加靈活的存儲(chǔ)結(jié)構(gòu),一旦數(shù)據(jù)和指令需要改變,則用戶可以調(diào)整硬件設(shè)計(jì)來與之匹配;現(xiàn)代系統(tǒng)中有各種各樣的信號(hào)標(biāo)準(zhǔn)和接口協(xié)議,因此對輸入輸出的要求非常嚴(yán)格,具有可編程片上緩沖器的FPGA在這個(gè)領(lǐng)域具有獨(dú)特優(yōu)勢。例如,Lattice MachXO器件可在各種電平下支持單端LVCMOS/LVTTL和差分LVDS/LVPECL。就寄存器和暫存存儲(chǔ)器資源而言,面向FPGA的MCU IP核所提供的靈活性可改變配置以滿足應(yīng)用的需求;FPGA是解決器件集成問題的理想方案??删幊滩檎冶?LUT)、寄存器和存儲(chǔ)器提供了額外的集成功能,同時(shí)靈活的可編程I/O和專用接口(如雙數(shù)據(jù)速率(DDR))使其與多個(gè)器件的握手更加容易。

          對于許多微控制器應(yīng)用來說,F(xiàn)PGA是非常理想的器件,因?yàn)槠涑杀鞠鄬Φ土?,包含大量的嵌入式存?chǔ)塊,具有足夠的I/O以應(yīng)對幾乎所有控制器功能,擁有豐富的寄存器,并支持包括LVCMOS、SSTL及差分LVDS信號(hào)傳輸在內(nèi)的許多I/O標(biāo)準(zhǔn)。

          基于閃存的非易失性FPGA

          FPGA的制造工藝有多種,包括一次性編程(反熔絲)、易失性(基于),以及使用基于EE或閃存的非易失性工藝。

          表1列出了器件密度、封裝類型、可用I/O數(shù)、嵌入式和分布式存儲(chǔ)器,以及PLL和嵌入式DSP塊。例如,基于閃存的FPGA采用130nm和90nm工藝。廣泛的選擇范圍使得找出滿足特殊微控制器應(yīng)用需求的器件更容易一些。

          本文引用地址:http://www.ex-cimer.com/article/201706/349465.htm 表1:基于閃存的非易失性FPGA產(chǎn)品

          微控制器應(yīng)用實(shí)例

          FPGA的靈活性使其適用于許多微控制器應(yīng)用,以及包含微控制器的更復(fù)雜的設(shè)計(jì)。

          圖1:馬達(dá)控制應(yīng)用

          像家用電子設(shè)備、工業(yè)機(jī)器人以及正在增長的新興汽車應(yīng)用(從GPS、引擎控制到制動(dòng)系統(tǒng))這些產(chǎn)品都包括圖1、2和3中所示的微控制器。

          圖2:導(dǎo)航系統(tǒng)應(yīng)用

          圖3:片上系統(tǒng)應(yīng)用

          在馬達(dá)控制應(yīng)用中,系統(tǒng)發(fā)送和接收來自微控制器的信息,以調(diào)整步進(jìn)電機(jī)的速度和方向。來自系統(tǒng)的輸入告知微控制器增大或減小馬達(dá)和控制器的速度,微控制器再依次告知系統(tǒng)馬達(dá)的實(shí)時(shí)速度和方向。


          導(dǎo)航系統(tǒng)采用微控制器調(diào)整系統(tǒng)的圖像顯示器,根據(jù)微控制器的輸入提高或降低分辨率。

          圖3中的設(shè)計(jì)展示了一個(gè)片上系統(tǒng)的實(shí)現(xiàn),包括微控制器、外圍總線和幾種外設(shè)功能,以及用于顯示寄存器文檔、暫存存儲(chǔ)器、調(diào)用棧、程序計(jì)數(shù)器、標(biāo)記和跟蹤列表的硬件跟蹤調(diào)試器。同時(shí)還支持微控制器的單步、多步和斷點(diǎn)功能。

          片上系統(tǒng)的例子可用來說明設(shè)計(jì)工具流程和實(shí)現(xiàn)(圖4)。

          圖4:片上系統(tǒng)的軟件開發(fā)流程及硬件開發(fā)流程

          微控制器工具和實(shí)現(xiàn)

          FPGA微控制器的高效率和緊湊實(shí)現(xiàn)使得2280 LUT MachXO器件可用于說明圖3中片上系統(tǒng)的設(shè)計(jì)。

          啟動(dòng)該設(shè)計(jì)的最簡單方法是參考“快速啟動(dòng)指南”或項(xiàng)目向?qū)б徊揭徊降卦O(shè)計(jì)FPGA。一旦設(shè)計(jì)項(xiàng)目創(chuàng)建好,下一步就是編寫微控制器程序。C或匯編語言是目前最流行的MCU編程語言。圖5顯示了用匯編語言編寫的I2C Slave程序塊。

          圖5:匯編代碼實(shí)例

          必須對微控制器的每個(gè)單元進(jìn)行分析以決定要執(zhí)行的操作。如代碼實(shí)例所示,I2C寫循環(huán)具有5種操作:讀狀態(tài)、寫器件地址、寫數(shù)據(jù)、寫字地址及返回。請注意代碼都加上了注釋。

          雖然匯編語言的規(guī)范在各種MCU上大多是一致的,但設(shè)計(jì)者還是應(yīng)該查閱供應(yīng)商的MCU指令集文檔,以了解哪些操作是得到支持的。將匯編源代碼轉(zhuǎn)換到ROM初始化文件的匯編程序是由命令行驅(qū)動(dòng)的,和指令集仿真器一樣,這可以通過匯編器供應(yīng)商工具套件獲得或者從網(wǎng)上下載。其中有些工具是作為開放源代碼工具提供。例如,LatticeMico8微控制器IP(知識(shí)產(chǎn)權(quán))就是作為開放源代碼提供,這是實(shí)現(xiàn)嵌入式微控制器的一種獨(dú)特有效途徑,可使用戶擁有最大的靈活性。

          HDL調(diào)試和設(shè)計(jì)規(guī)則檢查

          嵌入式微控制器IP可以描述整個(gè)設(shè)計(jì),或者作為一個(gè)大型設(shè)計(jì)的一部分與附加代碼結(jié)合在一起。尋找一種有助于設(shè)計(jì)HDL調(diào)試和規(guī)則檢查的工具是非常明智的。這種工具會(huì)生成該設(shè)計(jì)的分層結(jié)構(gòu)和互連性的圖形表示。用戶可以通過各種圖形和分層結(jié)構(gòu)來觀察設(shè)計(jì),并利用智能工具交互探測視圖以發(fā)現(xiàn)各種問題。

          圖6:設(shè)計(jì)視圖—HDL調(diào)試工具

          這對于IP集成的維護(hù)和復(fù)雜FPGA HDL設(shè)計(jì)的重設(shè)計(jì)都是很有用的,IP集成需要全面深入的途徑進(jìn)行設(shè)計(jì)分析和管理。相比傳統(tǒng)仿真器或綜合工具,這種工具可以實(shí)現(xiàn)設(shè)計(jì)結(jié)構(gòu)的更高層抽象。這有助于創(chuàng)建并管理文檔以及分析設(shè)計(jì)結(jié)構(gòu),從而極大地減少了花費(fèi)在這些項(xiàng)目上的設(shè)計(jì)時(shí)間。

          功能仿真

          功能仿真首先創(chuàng)建一個(gè)工作庫,設(shè)計(jì)被編譯到該工作庫中。仿真器通過圖形用戶接口、菜單或命令行使該過程更加順利。這其中包含了設(shè)計(jì)文檔和測試向量(test bench)。測試向量實(shí)例化該設(shè)計(jì),并將數(shù)據(jù)加載到輸入端。當(dāng)運(yùn)行設(shè)計(jì)時(shí),測試向量被應(yīng)用于該設(shè)計(jì)并顯示結(jié)果(通常以波形的形式)進(jìn)行分析。

          可利用各種仿真器實(shí)現(xiàn)設(shè)計(jì)的功能仿真。如果已對整個(gè)系統(tǒng)建模,則可以在系統(tǒng)級(jí)進(jìn)行功能仿真,或者對單個(gè)設(shè)計(jì)單元進(jìn)行仿真以確保正確的語法和功能已在RTL級(jí)建模。在這種特殊情況下,有兩家OEM的仿真器可供選擇。Aldec公司的Active-HDL Lattice Designer Edition Lite是一種附加的仿真環(huán)境。它不但提供混合語言VHDL和Verilog仿真,還可提供面向FPGA設(shè)計(jì)的可選設(shè)計(jì)流程。另一種選擇是Mentor Graphics的ModelSim,它能夠提供VHDL和Verilog語言以及門級(jí)時(shí)序仿真,以對設(shè)計(jì)進(jìn)行完整的仿真和分析。


          綜合

          一旦完成功能仿真,下一步就是綜合。綜合可以用獨(dú)立的方式完成,或者在供應(yīng)商的項(xiàng)目導(dǎo)航工具中作為后臺(tái)函數(shù)運(yùn)行。綜合獲取設(shè)計(jì)、進(jìn)行邏輯優(yōu)化并實(shí)現(xiàn)工藝映射。獨(dú)立模式綜合的步驟包括建立項(xiàng)目、加入源文件、設(shè)置約束、運(yùn)行設(shè)計(jì)和分析結(jié)果。約束是綜合的實(shí)現(xiàn)選項(xiàng),例如扇出限制、使用全局置位/復(fù)位。屬性則附屬于對象,以控制其依附的特定對象的優(yōu)化、映射和分析。目前可提供兩種領(lǐng)先的綜合工具。

          Precision RTL綜合工具是Mentor Graphics公司的重要RTL綜合解決方案。利用Precision RTL界面可以很容易地獲取有用的特性和工具,例如示意圖(RTL/工藝)觀察器、約束分析器、PreciseTime(用于高級(jí)時(shí)序分析)、支持時(shí)序調(diào)整(re-timing)等等。這些高級(jí)工具有助于改進(jìn)效率并最終優(yōu)化結(jié)果。

          Synplicity公司的Synplify綜合工具是一款高性能、復(fù)雜的邏輯綜合引擎,它利用專有的行為提取綜合技術(shù)(Behavior Extracting Synthesis Technology)提供快速、高效的FPGA和CPLD設(shè)計(jì)。簡單的用戶接口和強(qiáng)大的綜合引擎結(jié)合在一起能迅速提供優(yōu)化的結(jié)果。

          設(shè)計(jì)實(shí)現(xiàn)

          面向映射、布局和布線(MPAR)的設(shè)計(jì)實(shí)現(xiàn)是利用供應(yīng)商的工具套件完成。這一工具套件包含用于建立項(xiàng)目的項(xiàng)目導(dǎo)航器(Project Navigator),以及任何FPGA設(shè)計(jì)所必需的其它工具。在這種情況下,源文件被放置在左邊的窗口,項(xiàng)目處理在右邊的窗口進(jìn)行,但所有的窗口都是可??康?,以便用戶定制任何視圖。Log窗口記錄所有的處理,并列出在處理過程中產(chǎn)生的全部警告和錯(cuò)誤信息。用戶可以通過下拉菜單或者工具欄中的圖標(biāo)使用各種工具。圖7為Lattice公司ispLEVER工具套件中的Project Navigator。

          圖7:ispLEVER項(xiàng)目導(dǎo)航器

          實(shí)現(xiàn)工具(如Design Planner)可提供I/O和引腳設(shè)置、物理和邏輯視圖以及平面布局。TCL/TK腳本可以運(yùn)行多次迭代以優(yōu)化設(shè)計(jì)。Project Navigator中包含了靜態(tài)時(shí)序、邏輯調(diào)試和功率計(jì)算工具。

          編程軟件

          設(shè)計(jì)完成后,通過如圖8所示的編程軟件對硬件進(jìn)行編程。這個(gè)工具將提供直觀的用戶界面GUI,可自動(dòng)對系統(tǒng)主板進(jìn)行掃描,選擇必需的編程文件并執(zhí)行合適的編程算法。通過供應(yīng)商提供的SVF文件,該工具支持符合IEEE 1149.1標(biāo)準(zhǔn)的器件編程。對于大多數(shù)系統(tǒng)內(nèi)可編程器件來說,該工具還可以生成IEEE 1532 ISC數(shù)據(jù)文件。

          圖8:編程接口

          調(diào)試接口

          一旦實(shí)現(xiàn)了硬件,設(shè)計(jì)者將主要關(guān)注運(yùn)行在嵌入式系統(tǒng)上的軟件。ISS可用來確定原型功能以及評(píng)估對存儲(chǔ)器資源的需求。當(dāng)硬件集成、端口連接以及查找錯(cuò)誤均完成之后,通常不需要再更改代碼。

          在嵌入式系統(tǒng)的FPGA設(shè)計(jì)流程中,采用匯編器對更改的程序進(jìn)行再編譯,以建立FPGA片上指令或數(shù)據(jù)存儲(chǔ)配置的新存儲(chǔ)映像。然后通過一個(gè)簡單的ECO將映像再次映射至FPGA的存儲(chǔ)塊。這樣設(shè)計(jì)者就能跳過耗時(shí)的綜合以及設(shè)計(jì)流程的布局布線階段。存儲(chǔ)器初始化工具將利用匯編器創(chuàng)建的新型16進(jìn)制或者2進(jìn)制映像重寫存儲(chǔ)器配置。

          一旦post-PAR數(shù)據(jù)庫被修改,則只需通過新的編程位流或者JEDEC對FPGA進(jìn)行再編程。

          能夠控制內(nèi)部寄存器以及在設(shè)計(jì)調(diào)試階段實(shí)現(xiàn)尋址是非常有用的。為達(dá)到這一目標(biāo),OrCAstra或JLINK接口等工具(如圖9和圖10所示)提供了功能強(qiáng)大、易于使用的方法。

          圖9:JLINK寄存器文件接口GUI

          圖10:JLINK Tap控制器接口GUI

          本文小結(jié)

          對于FPGA中的嵌入式微控制器設(shè)計(jì)而言,一個(gè)完整的系統(tǒng)設(shè)計(jì)需要一批強(qiáng)大的工具。本文中的例子采用了獨(dú)特的開放源代碼微控制器匯編器和指令集仿真工具。領(lǐng)先的第三方廠商可提供綜合和仿真工具。用于創(chuàng)建和優(yōu)化設(shè)計(jì)的重要實(shí)現(xiàn)工具,以及有效的編程和設(shè)計(jì)調(diào)試形成了這一綜合設(shè)計(jì)套件,它是設(shè)計(jì)獲得成功的關(guān)鍵。


          關(guān)鍵詞: 微控制器 SRAM FPGA

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();