《基于FPGA的現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)》課件第7章_第1頁(yè)
《基于FPGA的現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)》課件第7章_第2頁(yè)
《基于FPGA的現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)》課件第7章_第3頁(yè)
《基于FPGA的現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)》課件第7章_第4頁(yè)
《基于FPGA的現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)》課件第7章_第5頁(yè)
已閱讀5頁(yè),還剩248頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章基于FPGA的系統(tǒng)級(jí)設(shè)計(jì)技術(shù)7.1基于FPGA的嵌入式開(kāi)發(fā)技術(shù)7.2MicroBlaze嵌入式處理器7.3嵌入式開(kāi)發(fā)套件EDK7.4在SOPC系統(tǒng)中添加定制外設(shè)IPCore7.5XilinxDSP設(shè)計(jì)平臺(tái)7.6FIR濾波器設(shè)計(jì)小結(jié)題習(xí)實(shí)驗(yàn)項(xiàng)目 7.1基于FPGA的嵌入式開(kāi)發(fā)技術(shù)

7.1.1嵌入式系統(tǒng)與SOPC技術(shù)

嵌入式系統(tǒng)在國(guó)內(nèi)一般被認(rèn)為是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的構(gòu)架可分為處理器、存儲(chǔ)器、輸入/輸出(I/O)接口和軟件四部分。嵌入式系統(tǒng)的軟件一般由嵌入式操作系統(tǒng)和應(yīng)用軟件組成,它們之間的結(jié)合十分緊密,不同于PC機(jī)上的Windows系統(tǒng)和應(yīng)用軟件;硬件的核心部件是嵌入式處理器,其主要發(fā)展方向是小體積、高性能和低功耗,主要類型有嵌入式微處理器(MPU)、嵌入式微控制器(MCU)、嵌入式數(shù)字信號(hào)處理器(DSP)和嵌入式片上系統(tǒng)(SOC)。

目前芯片集成度日益提高,設(shè)計(jì)復(fù)雜度越來(lái)越大,設(shè)計(jì)和驗(yàn)證技術(shù)的發(fā)展明顯落后于集成電路制造技術(shù),已經(jīng)成為SOC設(shè)計(jì)面臨的一個(gè)重大問(wèn)題。傳統(tǒng)的SOC設(shè)計(jì)方法采用軟、硬件分立設(shè)計(jì)方法,首先構(gòu)造硬件子系統(tǒng)部分,然后在己有硬件上進(jìn)行軟件的設(shè)計(jì)、調(diào)試和開(kāi)發(fā)。在深亞微米設(shè)計(jì)中,硬件開(kāi)發(fā)費(fèi)用急速增加,而當(dāng)硬件設(shè)計(jì)完成后再進(jìn)行軟件調(diào)試時(shí),如果發(fā)現(xiàn)了硬件系統(tǒng)設(shè)計(jì)的錯(cuò)誤,糾正錯(cuò)誤則要付出人力、物力、財(cái)力等方面高昂的代價(jià),系統(tǒng)研發(fā)周期變長(zhǎng),成本增加,市場(chǎng)風(fēng)險(xiǎn)增大。軟、硬件協(xié)同設(shè)計(jì)成為解決這一問(wèn)題的關(guān)鍵技術(shù)之一。隨著平臺(tái)級(jí)FPGA產(chǎn)品的出現(xiàn)和EDA設(shè)計(jì)工具軟件的不斷發(fā)展,利用現(xiàn)有的FPGA和EDA工具,人們也可以很方便地在FPGA中嵌入RISC(ReducedInstructionSetComputer,精簡(jiǎn)指令集)處理器內(nèi)核、DSP算法、存儲(chǔ)器、專用ASIC模塊、其它數(shù)字IPCore以及用戶定制邏輯等,構(gòu)建成一個(gè)可編程的片上系統(tǒng)(SOPC),把原來(lái)需要在PCB上采用處理器、DSP、若干ASIC芯片才能實(shí)現(xiàn)的功能全都集成到了單片F(xiàn)PGA上,如圖7.1所示。圖7.1基于FPGA的嵌入式系統(tǒng)

SOPC設(shè)計(jì)建立在平臺(tái)設(shè)計(jì)的基礎(chǔ)之上,采用系統(tǒng)級(jí)軟硬件協(xié)同設(shè)計(jì)方法,在系統(tǒng)級(jí)上探析不同的設(shè)計(jì)方案,如軟硬件劃分、總線和處理器負(fù)載平衡、可編程資源分配,通過(guò)在系統(tǒng)級(jí)上比較不同實(shí)現(xiàn)結(jié)構(gòu)的選擇對(duì)產(chǎn)品性能的影響,從而進(jìn)行設(shè)計(jì)的權(quán)衡,使得在物理實(shí)現(xiàn)之前就可以進(jìn)行有效的分析和結(jié)構(gòu)的優(yōu)化,大大提高系統(tǒng)的可預(yù)測(cè)性,加速系統(tǒng)的研發(fā)速度,提高系統(tǒng)的設(shè)計(jì)效率,減少設(shè)計(jì)迭代的次數(shù),降低設(shè)計(jì)風(fēng)險(xiǎn),增強(qiáng)系統(tǒng)的競(jìng)爭(zhēng)力。

SOPC軟硬件協(xié)同技術(shù)包括基于平臺(tái)的SOPC的系統(tǒng)建模、軟件與硬件的劃分、由建模系統(tǒng)到軟硬件的映射即軟硬件協(xié)同綜合技術(shù)、軟硬件協(xié)同調(diào)度、可驗(yàn)證設(shè)計(jì)、并行計(jì)算技術(shù)以及協(xié)同仿真和集成,這些技術(shù)不僅推動(dòng)了SOPC的應(yīng)用,而且促進(jìn)了SOPC平臺(tái)的發(fā)展。平臺(tái)是軟、硬IP模塊及片上通信結(jié)構(gòu)的結(jié)合體,一般還包括嵌入式CPU、實(shí)時(shí)操作系統(tǒng)、外圍接口模塊、中間件等?;谄脚_(tái)的設(shè)計(jì)PBD(Platform-BasedDesign)方法是近幾年提出的SOC軟硬件協(xié)同設(shè)計(jì)新方法,是基于塊的設(shè)計(jì)BBD(Block-Baseddesign)方法的延伸。它擴(kuò)展了設(shè)計(jì)重用的理念,強(qiáng)調(diào)系統(tǒng)級(jí)復(fù)用,包含了時(shí)序驅(qū)動(dòng)的設(shè)計(jì)和BBD的各種技術(shù),支持軟硬件協(xié)同設(shè)計(jì),提供系統(tǒng)級(jí)的算法和結(jié)構(gòu)分析。PBD方法是一種面對(duì)集成、強(qiáng)調(diào)系統(tǒng)級(jí)重用的設(shè)計(jì)方法,此方法在平臺(tái)的基礎(chǔ)上開(kāi)發(fā)復(fù)雜的產(chǎn)品,目標(biāo)是降低開(kāi)發(fā)風(fēng)險(xiǎn)和代價(jià),縮短產(chǎn)品的上市時(shí)間。PBD方法具有開(kāi)發(fā)周期短、重用效率高以及設(shè)計(jì)質(zhì)量好等優(yōu)點(diǎn),不僅能實(shí)現(xiàn)最大化的設(shè)計(jì)復(fù)用,而且為軟硬件協(xié)同設(shè)計(jì)提供了極大的便利?;谄脚_(tái)的SOPC設(shè)計(jì)方法擴(kuò)展了芯核設(shè)計(jì)方法,簡(jiǎn)化了SOC設(shè)計(jì)過(guò)程,無(wú)需實(shí)現(xiàn)新的芯片即可快速獲得片上系統(tǒng)。平臺(tái)建立在集成IPCore的基礎(chǔ)上,通常是針對(duì)某一特定應(yīng)用領(lǐng)域而設(shè)計(jì)的,一個(gè)結(jié)構(gòu)良好的SOPC平臺(tái)系統(tǒng)可以有效實(shí)現(xiàn)IPCore復(fù)用,縮短SOC開(kāi)發(fā)周期,同時(shí)降低研發(fā)風(fēng)險(xiǎn)。SOPC將微處理器、DSP、可編程邏輯等組合形成平臺(tái)系統(tǒng),從而消除設(shè)計(jì)中的差異,硬件可編程性好,容易升級(jí)和擴(kuò)展,受到越來(lái)越多的關(guān)注。

半導(dǎo)體業(yè)界認(rèn)為將整個(gè)系統(tǒng)整合到單一模型之中時(shí),平臺(tái)設(shè)計(jì)為設(shè)計(jì)重點(diǎn)之一,而其研發(fā)關(guān)鍵在于平臺(tái)必須可以區(qū)分差異性的元素,包括先進(jìn)的系統(tǒng)模型和驗(yàn)證環(huán)境。隨著設(shè)計(jì)項(xiàng)目復(fù)雜程度的提高,系統(tǒng)級(jí)設(shè)計(jì)語(yǔ)言的整合趨勢(shì)可以大大提高設(shè)計(jì)效率,從而為從事EDA設(shè)計(jì)的企業(yè)帶來(lái)益處?,F(xiàn)已證明,基于C語(yǔ)言的系統(tǒng)級(jí)設(shè)計(jì)語(yǔ)言不僅可以提高生產(chǎn)效率,而且也是對(duì)Verilog流程的補(bǔ)充。目前VHDL和VerilogHDL是中國(guó)的主流設(shè)計(jì)語(yǔ)言。然而,隨著IC復(fù)雜度的不斷提高,從更高層次入手對(duì)系統(tǒng)進(jìn)行描述是描述語(yǔ)言未來(lái)的發(fā)展方向。System?Verilog/SystemC的整合,使得軟件團(tuán)隊(duì)一方面可以與高效的硬件設(shè)計(jì)和驗(yàn)證流程進(jìn)行合作,同時(shí)還可以使用自己原來(lái)熟悉的編程語(yǔ)言進(jìn)行工作,使得整個(gè)流程可以達(dá)到最高的設(shè)計(jì)效率。Synopsys公司是SystemC的初始發(fā)起人之一。為了推動(dòng)SystemVerilog的標(biāo)準(zhǔn)化進(jìn)程,Synopsys還公開(kāi)提供了其OpenVera測(cè)試平臺(tái)語(yǔ)言、常用的API和OpenVeraAssertion(OVA)規(guī)范,這些使得SystemVerilog3.1的出現(xiàn)成為可能。在這些提供出來(lái)的技術(shù)的基礎(chǔ)上,SystemVerilog包含了對(duì)RTL設(shè)計(jì)進(jìn)行簡(jiǎn)化所需的全部功能。這些工具及相關(guān)設(shè)計(jì)方法學(xué)一起被歸類為電子系統(tǒng)級(jí)ESL(ElectronicSystem-Level)設(shè)計(jì),廣義指比目前主流的寄存器傳輸級(jí)RTL更高的抽象級(jí)別上開(kāi)始的系統(tǒng)設(shè)計(jì)與驗(yàn)證方法學(xué)。

ESL工具和可編程硬件一起構(gòu)成了基于桌面的硬件開(kāi)發(fā)環(huán)境,并提供了符合軟件開(kāi)發(fā)的工作流程模型。工具可提供針對(duì)特定的基于FPGA的參考板的優(yōu)化支持,軟件開(kāi)發(fā)者可以利用這些支持啟動(dòng)項(xiàng)目評(píng)估或原型構(gòu)建。這些板及相應(yīng)的參考應(yīng)用程序均使用更高級(jí)別的系統(tǒng)描述語(yǔ)言編寫,這使創(chuàng)建定制的及硬件加速的系統(tǒng)變得更為快速和容易。另外,ESL方法學(xué)與可編程硬件的結(jié)合使用,使嘗試大量可能的應(yīng)用實(shí)現(xiàn)以及對(duì)極不同的軟件/硬件分割策略快速進(jìn)行實(shí)驗(yàn)成為可能。這種嘗試新方法和快速分析性能與尺寸平衡的實(shí)驗(yàn)?zāi)芰κ够贓SL設(shè)計(jì)方法的FPGA設(shè)計(jì)能夠比基于傳統(tǒng)的RTL方法以更短的時(shí)間實(shí)現(xiàn)更高的總體性能。7.1.2基于SOPC的嵌入式系統(tǒng)開(kāi)發(fā)流程

1.需求分析

確定設(shè)計(jì)任務(wù)和目標(biāo),并制定說(shuō)明規(guī)格文檔,作為下一步設(shè)計(jì)的指導(dǎo)和驗(yàn)收標(biāo)準(zhǔn)。需求分析往往要與用戶反復(fù)交流,以明確系統(tǒng)功能需求,性能需求,環(huán)境、可靠性、成本、功耗、資源等需求。

2.體系結(jié)構(gòu)設(shè)計(jì)

體系結(jié)構(gòu)設(shè)計(jì)是嵌入式系統(tǒng)的總體設(shè)計(jì),它需要確定嵌入式系統(tǒng)的總體構(gòu)架,從功能上對(duì)軟硬件進(jìn)行劃分。在此基礎(chǔ)上,確定嵌入式系統(tǒng)的硬件選型(主要是處理器選型),操作系統(tǒng)的選擇和開(kāi)發(fā)環(huán)境的選擇。

3.硬件的設(shè)計(jì)、制作及測(cè)試

對(duì)于一般的嵌入式系統(tǒng),在這一階段要確定硬件部分的各功能模塊及模塊之間的關(guān)聯(lián),并在此基礎(chǔ)上完成元器件的選擇、原理圖繪制、印刷電路板(PCB)設(shè)計(jì)、硬件的裝配與測(cè)試、目標(biāo)硬件最終的確定和測(cè)試。SOPC系統(tǒng)在此有所不同,由于硬件系統(tǒng)的大部或全部是在FPGA上實(shí)現(xiàn)的,因此在這一階段的設(shè)計(jì)工作是基于硬件定義文件,利用平臺(tái)產(chǎn)生工具生成對(duì)應(yīng)的網(wǎng)表文件,再通過(guò)FPGA實(shí)現(xiàn)工具來(lái)完成硬件系統(tǒng)的實(shí)現(xiàn)。

4.軟件的設(shè)計(jì)、實(shí)現(xiàn)及測(cè)試

這部分工作與硬件開(kāi)發(fā)并行、交互進(jìn)行。軟件設(shè)計(jì)主要完成引導(dǎo)程序的編制、操作系統(tǒng)的移植、驅(qū)動(dòng)程序的開(kāi)發(fā)、應(yīng)用軟件的編寫等工作。設(shè)計(jì)完成后,軟件開(kāi)發(fā)進(jìn)入實(shí)現(xiàn)階段。這一階段主要是嵌入式軟件的生成(編譯、鏈接)、調(diào)試和固化運(yùn)行,最后完成軟件的測(cè)試。

5.系統(tǒng)集成

將測(cè)試完成的軟件系統(tǒng)裝入制作好的硬件系統(tǒng)中,進(jìn)行系統(tǒng)綜合測(cè)試,驗(yàn)證系統(tǒng)功能是否能夠正確無(wú)誤地實(shí)現(xiàn),最后將正確的軟件固化在目標(biāo)硬件中。本階段的工作是整個(gè)開(kāi)發(fā)過(guò)程中最復(fù)雜、最費(fèi)時(shí)的,特別需要相應(yīng)的輔助工具支持。

6.系統(tǒng)性能測(cè)試及可靠性測(cè)試

測(cè)試最終完成的系統(tǒng)性能是否滿足設(shè)計(jì)任務(wù)書的各項(xiàng)性能指標(biāo)和要求。若滿足,則可將正確無(wú)誤的軟件固化在目標(biāo)硬件中;若不能滿足,在最壞的情況下,則需要回到設(shè)計(jì)的初始階段重新進(jìn)行設(shè)計(jì)方案的制定。

基于SOPC的軟硬件協(xié)同設(shè)計(jì)流程從目標(biāo)系統(tǒng)構(gòu)思開(kāi)始。對(duì)一個(gè)給定的目標(biāo)系統(tǒng)經(jīng)過(guò)構(gòu)思,完成其系統(tǒng)整體描述,然后交給軟硬件協(xié)同設(shè)計(jì)的開(kāi)發(fā)集成環(huán)境,由計(jì)算機(jī)自動(dòng)完成剩余的全部工作。一般而言,還要經(jīng)過(guò)模塊的行為描述、對(duì)模塊的有效性檢查、軟硬件劃分、硬件綜合、軟件編譯、軟硬件集成、軟硬件協(xié)同仿真與驗(yàn)證等各個(gè)階段,其中軟硬件劃分后產(chǎn)生硬件部分、軟件部分和軟硬件接口界面三個(gè)部分。硬件部分遵循硬件描述、硬件綜合與配置、生成硬件組建和配置模塊;軟件部分遵循軟件描述、軟件生成和參數(shù)化的步驟來(lái)生成軟件模塊。最后把生成的軟硬件模塊和軟硬件界面集成,并進(jìn)行軟硬件協(xié)同仿真,以進(jìn)行系統(tǒng)評(píng)估和設(shè)計(jì)驗(yàn)證。SOPC設(shè)計(jì)流程如圖7.2所示。圖7.2SOPC設(shè)計(jì)流程圖 7.2MicroBlaze嵌入式處理器

FPGA中嵌入式處理器一般情況下可以有三種不同的使用模式,分別是狀態(tài)機(jī)模式、單片機(jī)模式和定制嵌入模式,如圖7.3所示,因此并不是在FPGA中簡(jiǎn)單地增加一個(gè)或多個(gè)嵌入式處理器就實(shí)現(xiàn)了SOPC。(a)狀態(tài)機(jī)模式 (b)單片機(jī)模式 (c)定制嵌入模式圖7.3FPGA中嵌入式處理器的使用模式在狀態(tài)機(jī)模式下嵌入式處理器可以無(wú)外設(shè)、無(wú)總線結(jié)構(gòu)和無(wú)實(shí)時(shí)操作系統(tǒng),但是可以執(zhí)行復(fù)雜的狀態(tài)機(jī)和算術(shù)運(yùn)算,達(dá)到可高或可低的性能,以及最低的成本,通常應(yīng)用于VGA和LCD控制等。當(dāng)嵌入式處理器帶有一定的外設(shè),能執(zhí)行單片機(jī)即微控制器的功能時(shí),被稱之為單片機(jī)模式,該模式可能會(huì)利用實(shí)時(shí)操作系統(tǒng)和總線結(jié)構(gòu),達(dá)到中等的性能和中等的成本,常應(yīng)用于控制和儀表等。SOPC中的嵌入式處理器一般為定制嵌入模式,嵌入式處理器具有擴(kuò)充的外設(shè)、實(shí)時(shí)操作系統(tǒng)和總線結(jié)構(gòu),達(dá)到高度的集成和高的性能,除應(yīng)用于控制和儀表等外,還可應(yīng)用于網(wǎng)絡(luò)和無(wú)線通信等。當(dāng)嵌入式處理器具有基于硬件的除法單元和浮點(diǎn)單元,以及大的可尋址的存儲(chǔ)器空間時(shí),嵌入式處理器核還可被用來(lái)實(shí)現(xiàn)現(xiàn)代復(fù)雜的DSP算法,此時(shí)既可以只利用軟件來(lái)實(shí)現(xiàn),也可直接利用硬件加速來(lái)實(shí)現(xiàn)。

Xilinx公司的SOPC嵌入式解決方案中以三類RISC結(jié)構(gòu)的微處理器為核心,涵蓋了系統(tǒng)硬件設(shè)計(jì)和軟件調(diào)試的各個(gè)方面。三類嵌入式內(nèi)核分別為PicoBlaze、MicroBlaze和PowerPC,其中PicoBlaze和MicroBlaze是可裁剪的軟核處理器,PowerPC為硬核處理器。

PicoBlaze是采用VHDL語(yǔ)言在早期開(kāi)發(fā)的小型八位軟處理器內(nèi)核包,其匯編器是簡(jiǎn)單的DOS可執(zhí)行文件KCPSM2.exe,用匯編語(yǔ)言編寫的程序經(jīng)過(guò)編譯后放入FPGA的塊RAM存儲(chǔ)區(qū),匯編器可在數(shù)秒內(nèi)編譯完存儲(chǔ)在塊RAM中的程序。需要提醒的是,Xilinx的EDK不提供基于PicoBlaze的嵌入式系統(tǒng)開(kāi)發(fā)支持。

PowerPC是32位PowerPC嵌入式環(huán)境架構(gòu),確定了若干系統(tǒng)參數(shù),用以保證在應(yīng)用程序級(jí)實(shí)現(xiàn)兼容,增加了其設(shè)備擴(kuò)展的靈活性。Xilinx將PowerPC405處理器內(nèi)核整合在Virtex2Pro系列以及更高等級(jí)系列的芯片中,允許該硬IPCore能夠深入到FPGA架構(gòu)的任何部位,提供高端嵌入式應(yīng)用的FPGA解決方案。Virtex4以及Virtex5系列的部分芯片中集成了2~4個(gè)PowerPC405處理器核。

MicroBlaze是一款由Xilinx公司開(kāi)發(fā)的應(yīng)用十分廣泛的嵌入式處理器軟核,用以開(kāi)發(fā)Xilinx的FPGA上的嵌入式工程,下面主要對(duì)MicroBlaze進(jìn)行介紹。

MicroBlaze采用功能強(qiáng)大的32位流水線RISC結(jié)構(gòu),MicroBlaze是一個(gè)非常簡(jiǎn)化,卻具有較高性能的軟核。它包含32個(gè)32位通用寄存器和一個(gè)可選的32位移位寄存器,時(shí)鐘可達(dá)150?MHz,在Virtex2Pro以及更高系列的平臺(tái)上,運(yùn)行速度可達(dá)120DMIPs(DhrystoneMIPS),占用資源不到1000個(gè)Slice。它符合IBMCoreConnect總線標(biāo)準(zhǔn),能夠與PowerPC405系統(tǒng)無(wú)縫連接。在FPGA內(nèi)部可以集成多個(gè)MicroBlaze處理器,這極大增加了FPGA開(kāi)發(fā)的靈活性。

MicroBlaze軟核內(nèi)部采用RISC架構(gòu)和哈佛結(jié)構(gòu)的32位指令和數(shù)據(jù)總線,內(nèi)部有32個(gè)通用寄存器R0~R31、兩個(gè)特殊寄存器程序指針(PC)和處理器狀態(tài)寄存器(MSR)、一個(gè)ALU單元、一個(gè)移位單元和兩級(jí)中斷響應(yīng)單元等基本模塊,還可具有3/5級(jí)流水線、桶形移位器、內(nèi)存管理/內(nèi)存保護(hù)單元、浮點(diǎn)單元(FPU)、高速緩存、異常處理和調(diào)試邏輯等可根據(jù)性能需求和邏輯區(qū)域成本任意裁剪的高級(jí)特性,極大地?cái)U(kuò)展了MicroBlaze的應(yīng)用范圍。MicroBlaze處理器的內(nèi)核在不斷更新中,MicroBlaze7.1a版的內(nèi)部架構(gòu)示意圖如圖7.4所示。

MicroBlaze處理器架構(gòu)均衡了執(zhí)行性能和設(shè)計(jì)尺寸,但由于其最高工作頻率由FPGA芯片提供,所以計(jì)算性能隨處理器配置、實(shí)現(xiàn)工具結(jié)果、目標(biāo)FPGA架構(gòu)和器件速度級(jí)別的不同而不同。如同PC機(jī)除了CPU之外還需要具有PCI總線、ISA總線和USB總線與各類外設(shè)相連才能實(shí)現(xiàn)一個(gè)完整的計(jì)算機(jī)硬件系統(tǒng)一樣,嵌入式系統(tǒng)也必須有自己的總線連接方案。MicroBlaze的總線接口是以IBMCoreConnect為嵌入式處理器的設(shè)計(jì)基礎(chǔ),具有豐富的接口資源。CoreConnect即片上總線通信鏈,它能使多個(gè)芯片核相互連接成為一個(gè)完整的新芯片。目前MicroBlaze軟核支持的外設(shè)接口示意圖如圖7.5所示,其中包括:①PLB(ProcessorLocalBus,處理器局部總線)接口;②帶字節(jié)允許的OPB(On-chipPeripheralBus,片上外設(shè)總線)接口;③高速的LMB(LocalMemoryBus,本地存儲(chǔ)器總線)接口;④FSL(FastSimplexLink,快速單工鏈)接口;⑤XCL(XilinxCacheLink,Xilinx緩存鏈路)接口;⑥與MDM(MicroprocessorDebugModule,微處理器調(diào)試模塊)連接的調(diào)試接口。圖7.4MicroBlaze7.1a版的內(nèi)部架構(gòu)示意圖圖7.5MicroBlaze軟核支持的外設(shè)接口示意圖其中,PLB總線是高帶寬的主從結(jié)構(gòu),并完全同步到一個(gè)時(shí)鐘。OPB總線比PLB總線在協(xié)議上相對(duì)簡(jiǎn)單,屬于低速接口總線,是對(duì)IBMCoreConnect片上總線標(biāo)準(zhǔn)的部分實(shí)現(xiàn),適用于將IPCore作為外設(shè)連接到MicroBlaze系統(tǒng)中。目前,新的PLB4.6版本總線協(xié)議已提供了對(duì)老版本PLB和OPB兩類總線的完全支持。LMB用于實(shí)現(xiàn)對(duì)片上的塊RAM(BlockRAM)的高速訪問(wèn)。FSL是MicroBlaze軟核特有的一個(gè)基于FIFO的單向鏈路,可以實(shí)現(xiàn)用戶自定義IPCore與MicroBlaze內(nèi)部通用寄存器的直接相連;而XCL則是MicroBlaze軟核新增加的,用于實(shí)現(xiàn)對(duì)片外存儲(chǔ)器的高速訪問(wèn)。MicroBlaze軟核還有專門的調(diào)試接口,通過(guò)參數(shù)設(shè)置開(kāi)發(fā)人員可以只使用特定應(yīng)用所需要的處理器特性。Xilinx提供了大量的外設(shè)IPCore,可外掛到MicroBlaze的OPB總線上,如DMA單元、以太網(wǎng)MAC層處理器、PCI/PCIe接口、UART以及USB等。一個(gè)外設(shè)一般不能同時(shí)和這兩類總線相連,部分IP模塊之所以能和兩類總線連接,是因?yàn)槠淇刂平涌诤偷退俚腛PB總線相連,而數(shù)據(jù)接口和高速總線連接。

MicroBlaze采用的是哈佛存儲(chǔ)結(jié)構(gòu),也就是指令和數(shù)據(jù)采用分離的地址空間結(jié)構(gòu),每個(gè)地址空間有32位寬,可以最多分別處理4?GB的指令和數(shù)據(jù)存儲(chǔ)。另外指令和數(shù)據(jù)的存儲(chǔ)空間可以重疊地被映射到同一塊物理地址中,以方便軟件調(diào)試。除非聲明了支持非法異常,所有的指令必須以合法字的形式被接收。

由于MicroBlaze沒(méi)有區(qū)分?jǐn)?shù)據(jù)接口是I/O還是存儲(chǔ),所以處理器存儲(chǔ)的接口也是OPB、LMB和XCL,而且LMB存儲(chǔ)地址空間不能和OPB及XCL重疊。 7.3嵌入式開(kāi)發(fā)套件EDK

Xilinx公司推出的EmbeddedDevelopmentKit(EDK)是包含了所有用于設(shè)計(jì)嵌入式編程系統(tǒng)的集成開(kāi)發(fā)解決方案,該套件包括了XilinxPlatformStudio(XPS)工具、PowerPC嵌入式硬處理器核和MicroBlaze軟處理器核,以及進(jìn)行Xilinx平臺(tái)FPGA設(shè)計(jì)時(shí)所需的技術(shù)文檔和IPCore,是Xilinx綜合性嵌入式解決方案的關(guān)鍵部分,利用該工具包提取和自動(dòng)化處理系統(tǒng)設(shè)計(jì),能大大加速嵌入式開(kāi)發(fā)。同時(shí),EDK也對(duì)使用XilinxISE、ChipScopePro和第三方EDA工具的共同開(kāi)發(fā)提供了良好的支持,如圖7.6所示。圖7.6Xilinx嵌入式集成開(kāi)發(fā)解決方案7.3.1EDK的組成

1.XPS集成設(shè)計(jì)環(huán)境

XPS為嵌入式處理器系統(tǒng)提供了一個(gè)創(chuàng)建軟件和硬件規(guī)范流程的圖形化集成開(kāi)發(fā)環(huán)境,如圖7.7所示。XPS無(wú)縫地把產(chǎn)生硬件和軟件部件以及可選擇的校驗(yàn)部件所需要的全部嵌入式系統(tǒng)工具組合在一起,由項(xiàng)目管理、源程序管理和進(jìn)程管理組成。通過(guò)XPS可以使用基本系統(tǒng)向?qū)SB(BaseSystemBuilder)迅速完成基本硬件平臺(tái)創(chuàng)建,提供自定義IPCore創(chuàng)建向?qū)?,支持ChipScopePro調(diào)試,支持多軟件工程項(xiàng)目,是面向獨(dú)立系統(tǒng)的集成開(kāi)發(fā)環(huán)境。例如XilinxMicroKernel、WindRiverVxWorks、MontaVistaLinux和其它第三方開(kāi)發(fā)系統(tǒng),提供板支持包BSP(BoardSupportPackage)。圖7.7XPS的圖形化集成開(kāi)發(fā)環(huán)境

2.SDK集成開(kāi)發(fā)環(huán)境

XPSSDK為XPS的應(yīng)用軟件開(kāi)發(fā)提供了一個(gè)軟件工程項(xiàng)目的增強(qiáng)型圖形化集成開(kāi)發(fā)環(huán)境,如圖7.8所示。它是基于Eclipse開(kāi)放源代碼標(biāo)準(zhǔn)設(shè)計(jì)的,具備功能完善的C/C++?代碼編輯器和編譯環(huán)境,能創(chuàng)建、配置和自動(dòng)生成Makefile,并集成了對(duì)嵌入式對(duì)象的無(wú)縫調(diào)試環(huán)境。它還具有強(qiáng)大的項(xiàng)目管理和源碼版本控制功能,支持類似CVS的插件。由于本書重點(diǎn)放在硬件系統(tǒng)的實(shí)現(xiàn)上,不介紹嵌入式軟件開(kāi)發(fā)的相關(guān)內(nèi)容,關(guān)于XPSSDK的使用請(qǐng)讀者參看Xilinx的相關(guān)文檔和嵌入式編程相關(guān)書籍自行學(xué)習(xí)。圖7.8XPSSDK的增強(qiáng)型圖形化集成開(kāi)發(fā)環(huán)境

3.ChipScopePro支持

ChipScopePro分析器主要被用來(lái)作硬件系統(tǒng)調(diào)試。它支持利用GNU調(diào)試器同時(shí)對(duì)軟件和硬件進(jìn)行調(diào)試;在EDK中集成了ChipScopePro核,能極大地方便調(diào)試。7.3.2EDK的任務(wù)流程、工具模塊與工程管理

對(duì)于嵌入式應(yīng)用來(lái)講,軟、硬件協(xié)同開(kāi)發(fā)是非常重要的,雖然EDK提供了XPS工具和SDK工具兩個(gè)圖形化平臺(tái),但仍以文件結(jié)構(gòu)管理為基礎(chǔ),圖形化平臺(tái)只是方便用戶操作的,所有的設(shè)置內(nèi)容都會(huì)寫入相應(yīng)的文件中。下面先了解基于EDK的嵌入式系統(tǒng)設(shè)計(jì)流程,再結(jié)合流程認(rèn)識(shí)EDK中的工具模塊,最后了解相應(yīng)格式的文件以及管理、存儲(chǔ)數(shù)據(jù)文件的模式,這些都是掌握EDK操作工具的必備知識(shí)?;贓DK嵌入式設(shè)計(jì)的簡(jiǎn)化流程圖如圖7.9所示。由圖可知,模塊1完成硬件設(shè)計(jì)工作,主要由ISE完成,最終結(jié)果是生成用于配置FPGA的bit位流文件;模塊2完成軟件設(shè)計(jì)工作,一般使用XPSSDK完成,生成?.elf可執(zhí)行文件是該階段結(jié)束的標(biāo)志;模塊3是XPS,它提供圖形化集成設(shè)計(jì)環(huán)境,無(wú)縫地把產(chǎn)生的硬件和軟件部件,以及可選擇的校驗(yàn)部件所需的全部嵌入式系統(tǒng)工具組合在一起,提供工程項(xiàng)目管理、應(yīng)用軟件管理和平臺(tái)管理的能力,為設(shè)計(jì)提供系統(tǒng)化的支持,并能對(duì)bit和elf進(jìn)行整合,完成對(duì)目標(biāo)芯片的配置。圖7.9基于EDK的嵌入式設(shè)計(jì)簡(jiǎn)化流程圖硬件設(shè)計(jì)工作包括以下幾個(gè)方面的內(nèi)容:

(1)使用EDK工具進(jìn)行硬、軟核集成。

(2)將EDA生成的HDL代碼用ISE進(jìn)行綜合、布局布線和前端仿真驗(yàn)證,也可用第三方工具綜合,仿真驗(yàn)證,將設(shè)計(jì)頂層模塊在目標(biāo)器件進(jìn)行分配。

(3)使用ISE編程器將生成的配置文件下載到FPGA,進(jìn)行后端驗(yàn)證和測(cè)試。軟件設(shè)計(jì)工作包括以下幾個(gè)方面的內(nèi)容:

(1)在EDK構(gòu)建硬件系統(tǒng)的同時(shí),開(kāi)始編寫?yīng)毩⒂谄骷腃/C++?應(yīng)用程序,或編寫自行設(shè)計(jì)的IPCore驅(qū)動(dòng)程序。

(2)根據(jù)EDK對(duì)系統(tǒng)的配置腳本生成相對(duì)應(yīng)的HAL庫(kù),對(duì)程序進(jìn)行軟件級(jí)仿真和調(diào)試,還可以進(jìn)行操作系統(tǒng)配置。

(3)將編譯、鏈接后生成的可執(zhí)行程序下載到目標(biāo)器件,進(jìn)行硬件級(jí)的調(diào)試、測(cè)試和優(yōu)化設(shè)計(jì)。在圖7.10中詳細(xì)列出了完成設(shè)計(jì)流程的各項(xiàng)任務(wù)的核心軟件工具,以及每一個(gè)任務(wù)流程的輸入文件和輸出文件。圖7.11列出了一個(gè)完整的EDK項(xiàng)目的工程文件結(jié)構(gòu)組織關(guān)系。下面結(jié)合圖7.10和圖7.11,對(duì)EDK工程的主要文件和工程結(jié)構(gòu)關(guān)系進(jìn)行簡(jiǎn)要說(shuō)明。

使用XPS創(chuàng)建一個(gè)EDK項(xiàng)目,將生成一個(gè)后綴名為.xmp的文本文件作為工程文件,其中定義了EDK工具的版本、相關(guān)的硬件配置文件(MHS)和軟件配置文件(MSS)、目標(biāo)器件的類型、軟件的源碼和庫(kù)位置等信息。.xmp文件是由XPS軟件自動(dòng)生成的,用戶一般不要自行修改。圖7.10EDK中各工具模塊的任務(wù)流程圖7.11EDK的工程文件結(jié)構(gòu)組織關(guān)系一般情況下,利用EDK開(kāi)始某個(gè)嵌入式系統(tǒng)的設(shè)計(jì)工作都是從使用XPS提供的BSB(BaseSystemBiulder)向?qū)Чぞ邩?gòu)造系統(tǒng)的硬件平臺(tái)起步的,根據(jù)BSB工具建立的系統(tǒng)設(shè)計(jì)會(huì)產(chǎn)生包括PBD(PlatformBlockDiagram,平臺(tái)模塊框圖)、MHS(MicroprocessorHardwareSpecification,微處理器硬件配置)、MSS(MicroprocessorSoftwareSpecification,微處理器軟件配置)和UCF等在內(nèi)的關(guān)鍵文件和工程目錄結(jié)構(gòu)。

MHS文件是硬件配置文件,定義了系統(tǒng)結(jié)構(gòu)、外圍設(shè)備和嵌入式處理器,也定義了系統(tǒng)的連通性、系統(tǒng)中每個(gè)外圍設(shè)備的地址分配和對(duì)每個(gè)外圍設(shè)備的可配選項(xiàng),該文件可隨意更改,在圖形界面中對(duì)硬件結(jié)構(gòu)的任何改動(dòng)都要寫入該文件中。同樣,對(duì)于高級(jí)用戶,可通過(guò)直接修改MHS文件來(lái)代替XPS中的圖形操作。MHS文件嚴(yán)格按照分層設(shè)計(jì)的思想,每個(gè)硬件模塊都是一個(gè)獨(dú)立的組件,再通過(guò)上層模塊連接起來(lái)形成整個(gè)系統(tǒng)。平臺(tái)產(chǎn)生器PlatGen輸入MHS文件和MPD(MicorprocessorPeripheralDescription,微處理器外設(shè)描述)文件,以硬件網(wǎng)表清單的形式構(gòu)造嵌入式處理器系統(tǒng),輸出HDL、Implementation和Synthsis目錄以及其下的設(shè)計(jì)文件,與UCF文件一起供ISE設(shè)計(jì)流程使用,產(chǎn)生bit配置位流文件。

XPS除了利用MHS文件來(lái)描述硬件系統(tǒng),還利用了MSS文件進(jìn)行類似的軟件系統(tǒng)描述。將MSS文件和用戶的應(yīng)用軟件一起組成了描述嵌入式系統(tǒng)軟件部分的主要源文件,利用這些文件以及EDK的庫(kù)和驅(qū)動(dòng)器,XPS就可以編譯用戶的應(yīng)用程序。而編譯后的軟件程序生成?.elf可執(zhí)行可鏈接格式的文件,和MHS文件一樣,高級(jí)用戶也可通過(guò)直接修改MSS文件達(dá)到更改軟件配置的目的。庫(kù)生成器LibGen利用MSS文件和EDK軟件庫(kù)為系統(tǒng)的嵌入式處理器產(chǎn)生必要的庫(kù)和驅(qū)動(dòng),輸出為嵌入式處理器目錄下的code、include、lib和libsrc四個(gè)子目錄以及其下的設(shè)計(jì)文件。這些文件為軟件開(kāi)發(fā)建立了一個(gè)HAL硬件抽象層,用戶基于此進(jìn)行應(yīng)用軟件設(shè)計(jì),編寫c或cpp或asm源文件,再通過(guò)GCC編譯和鏈接器,生成?.elf文件。

MHS和MSS兩個(gè)關(guān)鍵設(shè)計(jì)文件的語(yǔ)法格式和內(nèi)容,將在介紹EDK使用時(shí)結(jié)合具體工程作介紹。工程目錄下的pcores目錄主要存儲(chǔ)針對(duì)本工程的定制IP。

UCF文件在XPS中和在ISE中一樣,都是用來(lái)添加信號(hào)的管腳約束與時(shí)序約束的。在EDK設(shè)計(jì)中,UCF文件最常用的功能是用來(lái)鎖定管腳,可以通過(guò)文本編輯器修改,相關(guān)的語(yǔ)法和ISE中是一致的。

在XPS中,最終得到的FPGA配置位流文件可能不同于由ISE生成的位流文件,它可能是通過(guò)Data2MEM過(guò)程,將軟、硬件比特流合成完整系統(tǒng)比特流文件,該位流文件也是通過(guò)JTAG下載到FPGA芯片中的。7.3.3EDK的使用

1.EDK的安裝

EDK對(duì)計(jì)算機(jī)硬件的要求和安裝過(guò)程都與ISE的類似。

執(zhí)行安裝文件包中的Setup.exe程序,依次接受軟件授權(quán)協(xié)議,輸入注冊(cè)碼,選擇安裝路徑,確認(rèn)安裝的組件、環(huán)境變量設(shè)置等,接下來(lái)安裝程序開(kāi)始復(fù)制文件,安裝完成后,會(huì)在桌面以及程序菜單中添加EDK的快捷方式。雙擊即可進(jìn)入EDK集成開(kāi)發(fā)環(huán)境。

2.EDK的使用

完整的EDK開(kāi)發(fā)流程如圖7.9所示,各主要步驟分別是:

(1)創(chuàng)建基本硬件平臺(tái)。

(2)根據(jù)設(shè)計(jì)要求添加IPCore以及用戶定制外設(shè)。

(3)生成硬件系統(tǒng)仿真文件并測(cè)試。

(4)生成硬件網(wǎng)表和位流文件,這個(gè)步驟類似于傳統(tǒng)FPGA設(shè)計(jì)的綜合、布局布線、生成位流文件這三個(gè)操作。

(5)開(kāi)發(fā)軟件系統(tǒng),編譯生成?.elf格式的可執(zhí)行代碼。

(6)合并軟、硬件位流,得到最終的二進(jìn)制比特文件。

(7)將更新的最終比特流下載或燒寫到FPGA、PROM、FLASH和CF卡內(nèi)。

(8)利用XMD命令行調(diào)試工具或ChipScope工具在線調(diào)試、驗(yàn)證整個(gè)系統(tǒng)的正確性。下面按照EDK的開(kāi)發(fā)步驟,通過(guò)一個(gè)簡(jiǎn)單的基于MicroBlaze處理器的嵌入式系統(tǒng)設(shè)計(jì)實(shí)例,介紹EDK的主要功能和操作。

1)創(chuàng)建基本硬件平臺(tái)

(1)啟動(dòng)XPS(XilinxPlatformStudio)。

(2)選擇【BaseSystemBuilderWizard】創(chuàng)建基本硬件平臺(tái),如圖7.12所示。

(3)為當(dāng)前工程建立一個(gè)專用目錄,保存system.xmp文件,如圖7.13所示。圖7.12基本硬件平臺(tái)生成向?qū)D7.13新建XPS項(xiàng)目

(4)選擇創(chuàng)建一個(gè)新設(shè)計(jì),指定目標(biāo)板型號(hào),此處選擇Xilinx公司的Spartan-3EStarter開(kāi)發(fā)板,如圖7.14所示。列出的可選開(kāi)發(fā)板型號(hào)都是由與開(kāi)發(fā)板型號(hào)同名的XBD文件確定的。XBD文件按照一定的文件組織結(jié)構(gòu)關(guān)系保存在EDK軟件安裝目錄的board子目錄下。在XBD文件中按特定格式記錄了開(kāi)發(fā)板硬件配置和對(duì)應(yīng)的硬件約束設(shè)置。感興趣的讀者可以參照board目錄的組織結(jié)構(gòu)和XBD的文件格式來(lái)定制其它型號(hào)的開(kāi)發(fā)板。

(5)使用MicroBlaze處理器作為硬件系統(tǒng)的處理器內(nèi)核。開(kāi)發(fā)板上的Spartan-3EFPGA只能支持軟核處理器MicroBlaze,如圖7.15所示。圖7.14選擇工程的目標(biāo)板圖7.15選擇嵌入式處理器圖7.16設(shè)置嵌入式處理器

(7)在接下來(lái)的幾頁(yè)外設(shè)選擇頁(yè)面,不同的開(kāi)發(fā)板差別會(huì)很大。這里僅選一個(gè)RS232外設(shè),其它參數(shù)保持缺省,如圖7.17所示。圖7.17選擇系統(tǒng)外設(shè)

(8)軟件設(shè)置頁(yè)面中要為軟件調(diào)試指定標(biāo)準(zhǔn)輸入/輸出設(shè)備,并選上【Memorytest】演示軟件項(xiàng)目作為測(cè)試程序,用來(lái)檢驗(yàn)所實(shí)現(xiàn)的基本硬件平臺(tái),如圖7.18所示。圖7.18設(shè)置工程的軟件內(nèi)容

(9)確認(rèn)系統(tǒng)創(chuàng)建頁(yè)面的設(shè)置信息,完成基本硬件平臺(tái)的創(chuàng)建,如圖7.19所示。圖7.19工程設(shè)置信息確認(rèn)

(10)創(chuàng)建完成的基本硬件平臺(tái)會(huì)在XPS中自動(dòng)打開(kāi),并開(kāi)啟【BlockDiagram】和【SystemAssemblyView】視圖供用戶觀察硬件平臺(tái)的系統(tǒng)結(jié)構(gòu),如圖7.20所示。圖7.20創(chuàng)建的基本硬件平臺(tái)至此,基本硬件平臺(tái)的創(chuàng)建結(jié)束,用戶接下來(lái)可以繼續(xù)完善硬件設(shè)計(jì)。

在XPS左側(cè)的【Project】視圖上,列出了包括MHS和MSS等在內(nèi)的工程關(guān)鍵設(shè)計(jì)文件。分別雙擊打開(kāi)MHS和MSS文件,查看其中的配置信息。下面通過(guò)在文件中添加注釋來(lái)解讀文件?!?system.mhs文件內(nèi)容(節(jié)選):

PARAMETERVERSION=2.1.0 #定義了參數(shù)集版本

#定義UART串口的輸入和輸出信號(hào)

PORTfpga_0_RS232_DTE_RX_pin=fpga_0_RS232_DTE_RX,DIR=I

PORTfpga_0_RS232_DTE_TX_pin=fpga_0_RS232_DTE_TX,DIR=O

#定義了系統(tǒng)時(shí)鐘,大小為50MHz,方向?yàn)檩斎?,?biāo)記為時(shí)鐘信號(hào)

PORTsys_clk_pin=dcm_clk_s,DIR=I,SIGIS=CLK,CLK_FREQ=50000000

#定義系統(tǒng)復(fù)位信號(hào),方向?yàn)檩斎?,?biāo)記為復(fù)位信號(hào)

PORTsys_rst_pin=sys_rst_s,DIR=I,RST_POLARITY=1,SIGIS=RST

#子模塊定義,以BEGIN和END定義段

BEGINmicroblaze #處理器子模塊定義

PARAMETERINSTANCE=microblaze_0 #定義例化名稱

PARAMETERC_INTERCONNECT=1

PARAMETERHW_VER=7.10.d #定義IPCore版本

PARAMETERC_DEBUG_ENABLED=1

PARAMETERC_AREA_OPTIMIZED=1

#下面是模塊端口信號(hào)定義

BUS_INTERFACEDLMB=dlmb

BUS_INTERFACEILMB=ilmb

BUS_INTERFACEDPLB=mb_plb

BUS_INTERFACEIPLB=mb_plb

BUS_INTERFACEDEBUG=microblaze_0_dbg

PORTMB_RESET=mb_reset

END

……(此處省略部分內(nèi)容)

BEGINlmb_bram_if_cntlr #定義存儲(chǔ)器模塊

PARAMETERINSTANCE=dlmb_cntlr

PARAMETERHW_VER=2.10.a

PARAMETERC_BASEADDR=0x00000000 #定義模塊的基地址

PARAMETERC_HIGHADDR=0x00003fff

#定義模塊的結(jié)束地址,與基地址一起確定了模塊的存儲(chǔ)器大小

BUS_INTERFACESLMB=dlmb

BUS_INTERFACEBRAM_PORT=dlmb_port

END

……(此處省略部分內(nèi)容)

BEGINxps_uartlite #定義UART串口模塊

PARAMETERINSTANCE=RS232_DTE

PARAMETERHW_VER=1.00.a

PARAMETERC_BAUDRATE=9600 #定義波特率

PARAMETERC_DATA_BITS=8 #定義數(shù)據(jù)位數(shù)

PARAMETERC_ODD_PARITY=0 #定義奇偶校驗(yàn)位

PARAMETERC_USE_PARITY=0 #定義是否使用校驗(yàn)

PARAMETERC_SPLB_CLK_FREQ_HZ=50000000

PARAMETERC_BASEADDR=0x84000000 #定義串口基地址

PARAMETERC_HIGHADDR=0x8400ffff

BUS_INTERFACESPLB=mb_plb

PORTRX=fpga_0_RS232_DTE_RX

PORTTX=fpga_0_RS232_DTE_TX

END

……(此處省略余下內(nèi)容)●?system.mss文件內(nèi)容(節(jié)選):

PARAMETERVERSION=2.2.0 #定義參數(shù)版本

BEGINOS #定義操作系統(tǒng),以BEGIN和END定義段

PARAMETEROS_NAME=standalone

PARAMETEROS_VER=2.00.a

PARAMETERPROC_INSTANCE=microblaze_0

PARAMETERSTDIN=RS232_DTE

PARAMETERSTDOUT=RS232_DTE

END

BEGINPROCESSOR#定義處理器類型,以BEGIN和END定義段

PARAMETERDRIVER_NAME=cpu

PARAMETERDRIVER_VER=1.11.b

PARAMETERHW_INSTANCE=microblaze_0

PARAMETERCOMPILER=mb-gcc

PARAMETERARCHIVER=mb-ar

END

BEGINDRIVER #定義驅(qū)動(dòng),以BEGIN和END定義段

PARAMETERDRIVER_NAME=bram

PARAMETERDRIVER_VER=1.00.a

PARAMETERHW_INSTANCE=dlmb_cntlr

END

……(此處省略部分內(nèi)容)

BEGINDRIVER #定義驅(qū)動(dòng),以BEGIN和END定義段

PARAMETERDRIVER_NAME=uartlite

PARAMETERDRIVER_VER=1.13.a

PARAMETERHW_INSTANCE=RS232_DTE

END

……(此處省略余下內(nèi)容)如果電腦與開(kāi)發(fā)板之間已經(jīng)連接好了串口通信線纜和下載線纜,那么可以按照下面的操作驗(yàn)證基本硬件平臺(tái)是否設(shè)置正確。先打開(kāi)Windows操作系統(tǒng)中【附件】菜單下的【超級(jí)終端】,進(jìn)行串口通訊設(shè)置,波特率設(shè)為9600bps,數(shù)據(jù)位為8位,1位停止位,無(wú)奇偶校驗(yàn)位,如圖7.21所示,用來(lái)監(jiān)視主機(jī)串口的通訊情況。然后在XPS的菜單中單擊【DeviceConfiguration】→【DownloadBitStream】,該操作需要運(yùn)行一段時(shí)間,自動(dòng)完成整個(gè)設(shè)計(jì)流程中從編譯到下載配置的多個(gè)步驟。如無(wú)差錯(cuò)的話,在【超級(jí)終端】的窗口中將看到圖7.22所示的兩行字符串輸出。圖7.21設(shè)置超級(jí)終端圖7.22超級(jí)終端的輸出結(jié)果如沒(méi)有觀察到此輸出結(jié)果,主要原因可能有兩個(gè):超級(jí)終端軟件的電腦主機(jī)和開(kāi)發(fā)板的波特率設(shè)置不一致;使用的串口電纜其發(fā)送和接收端沒(méi)有對(duì)調(diào),如使用的是9針串口電纜,應(yīng)將發(fā)送和接收兩側(cè)串口的2和3腳進(jìn)行對(duì)調(diào)連接,使電腦側(cè)串口的接收線與開(kāi)發(fā)板側(cè)串口的發(fā)送線相連。

2)添加外設(shè)

(1)在XPS的工程信息區(qū)將視圖切換到【IPCatalog】,該視圖中列舉出了當(dāng)前工程可以利用的全部IP,包括用戶的自定義IP,如圖7.23所示。圖7.23工程可利用的IP庫(kù)

(2)雙擊或者拖曳需添加的外設(shè)IP,將其加入到當(dāng)前硬件系統(tǒng)中。本例中,為系統(tǒng)添加了兩個(gè)opb_gpio核,缺省命名為“xps_gpio_0”和“xps_gpio_1”,如圖7.24所示。從圖中左側(cè)的總線連接圖示上可以看出所添加的IP是基于PLB總線的。圖7.24添加外設(shè)IP

(3)對(duì)新添加的外設(shè)改名并選擇其總線連接關(guān)系。本例新添的兩個(gè)外設(shè)名分別改為“gpio_buttons”和“gpio_leds”,總線關(guān)系選擇連接于“mb_plb”,如圖7.25所示。圖7.25修改外設(shè)IP命名

(4)為新添加的外設(shè)自動(dòng)或手動(dòng)分配基地址和大小,如圖7.26所示。圖7.26分配外設(shè)的基地址和大小

(5)確定外設(shè)的端口類型和位寬。gpio_buttons設(shè)置為與外部連接的輸入端口,gpio_leds設(shè)置為與外部連接的輸出端口,如圖7.27所示。圖7.27設(shè)置外設(shè)的端口類型和位寬

(6)在工程的ucf文件中為新添外設(shè)添加約束。在本例中,根據(jù)Spartan-3EStarter開(kāi)發(fā)板的PCB布線關(guān)系,添加的約束如圖7.28所示。圖7.28添加外設(shè)管腳的約束條件

3)生成硬件系統(tǒng)

(1)在XPS的菜單中單擊【Hardware】→【GenerateBitstream】命令,生成硬件位流文件。在菜單中單擊【DeviceConfiguration】→【DownloadBitstream】命令,將此硬件位流文件配置進(jìn)FPGA。這時(shí)目標(biāo)FPGA就成了一個(gè)還沒(méi)有“安裝”任何軟件的裸硬件系統(tǒng)。這里對(duì)硬件系統(tǒng)作仿真調(diào)試,與一般數(shù)字系統(tǒng)的仿真過(guò)程完全一樣,在此不再贅述。

(2)在菜單中單擊【Software】→【GenerateLibraryandBSPs】命令,針對(duì)當(dāng)前嵌入式系統(tǒng)的硬件配置自動(dòng)產(chǎn)生軟件驅(qū)動(dòng)所需的編譯庫(kù)。

4)開(kāi)發(fā)軟件程序

嵌入式系統(tǒng)軟件開(kāi)發(fā)的目的是將引導(dǎo)代碼、應(yīng)用代碼、實(shí)時(shí)操作系統(tǒng)和中斷服務(wù)子程序等一起編譯整合到一個(gè).elf格式的可執(zhí)行文件內(nèi),其中涉及到很多的嵌入式軟件設(shè)計(jì)的內(nèi)容,本書對(duì)此不作討論,請(qǐng)讀者自行參看相關(guān)資料。下面直接給出本例所用的軟件程序代碼和部分簡(jiǎn)單的注解說(shuō)明。

#include"xparameters.h"

#include"xgpio.h"

#include"xutil.h"

intmain(void)

{

XGpiogpio_buttons;

inti,psb_check;

XGpiogpio_leds;

printf("--StartoftheProgram--\r\n");

//?XPAR_GPIO_BUTTONS_DEVICE_ID在xparamters.h中被定義和初始化

//?XGpio_Initialize對(duì)外設(shè)進(jìn)行初始化,XGpio_SetDataDirection設(shè)置數(shù)據(jù)方向

XGpio_Initialize(&gpio_buttons,XPAR_GPIO_BUTTONS_DEVICE_ID);

XGpio_SetDataDirection(&gpio_buttons,1,0xffffffff);

//?XPAR_GPIO_LEDS_DEVICE_ID在xparamters.h中被定義和初始化

XGpio_Initialize(&gpio_leds,XPAR_GPIO_LEDS_DEVICE_ID);

XGpio_SetDataDirection(&gpio_leds,1,0x0);

while(1)

{

psb_check=XGpio_DiscreteRead(&gpio_buttons,1);

xil_printf("PushButtonsStatus%x\r\n",psb_check);

XGpio_DiscreteWrite(&gpio_leds,1,psb_check);

for(i=0;i<1999999;i++);//延時(shí)

}

}以上代碼可以使用XPSSDK的軟件開(kāi)發(fā)集成環(huán)境進(jìn)行編輯調(diào)試,也可直接在XPS下編輯、編譯。這里假定以上代碼已通過(guò)XPS的文本編輯器錄入并保存為“gpio_ctrl.c”。下面介紹如何直接在XPS中創(chuàng)建軟件項(xiàng)目。

(1)在XPS的菜單中單擊【Software】→【AddSoftwareApplicationProject…】,創(chuàng)建一個(gè)基于當(dāng)前硬件系統(tǒng)的軟件項(xiàng)目,對(duì)于已由XPSSDK編譯生成的軟件工程項(xiàng)目可直接指定對(duì)應(yīng)的?.elf文件,如圖7.29所示。新建的軟件項(xiàng)目將出現(xiàn)在XPS左側(cè)的工程信息區(qū)【Applications】視圖欄下。圖7.29添加新的軟件項(xiàng)目

(2)選中新建的軟件項(xiàng)目,右鍵單擊,在彈出菜單中選擇【MarktoInitializeBRAMs】項(xiàng),將該項(xiàng)目設(shè)為當(dāng)前的目標(biāo)軟件項(xiàng)目,如圖7.30所示。在該軟件項(xiàng)目的【Source】項(xiàng)上右鍵單擊,在彈出的菜單中選擇【AddExistingFiles…】項(xiàng),將“gpio_ctrl.c”作為軟件設(shè)計(jì)源文件添加到項(xiàng)目中。圖7.30設(shè)置當(dāng)前目標(biāo)軟件項(xiàng)目

(3)再選中該軟件項(xiàng)目,右鍵單擊,在圖7.29所示的右鍵彈出菜單中選擇【SetCompilerOptions…】項(xiàng),彈出項(xiàng)目編譯屬性設(shè)置對(duì)話框,設(shè)置相關(guān)屬性,例如調(diào)整編譯得到的?.elf文件的輸出路徑,如圖7.31所示。圖7.31設(shè)置軟件項(xiàng)目編譯屬性

(4)在XPS的菜單中單擊【Software】→【BuildAllUserApplications】,編譯當(dāng)前嵌入式工程下的全部軟件項(xiàng)目,或通過(guò)【Applications】視圖中選擇某軟件項(xiàng)目,利用其右鍵彈出菜單編譯該項(xiàng)目,生成?.elf格式的可執(zhí)行代碼。

5)生成最終比特文件并下載

在XPS的菜單中單擊【DeviceConfiguration】→【UpdateBitStream】把可執(zhí)行程序代碼同硬件配置文件合成最終的二進(jìn)制比特文件download.bit文件。接著單擊【DeviceConfiguration】→【DownloadBitStream】執(zhí)行下載。FPGA將首先根據(jù)硬件配置信息建立硬件系統(tǒng),并把程序代碼映射到片內(nèi)BRAM中,最后啟動(dòng)MicroBlaze,運(yùn)行軟件程序。

本程序運(yùn)行時(shí)可以看到,LED燈的亮滅是根據(jù)對(duì)應(yīng)按鍵的狀態(tài)來(lái)控制的。

6)調(diào)試

如果系統(tǒng)運(yùn)行的情況與所期望的不相同,那么就需要進(jìn)行調(diào)試。可以使用EDK集成的XMD命令行調(diào)試器和GDB調(diào)試器對(duì)代碼進(jìn)行仿真和調(diào)試。XMD是通過(guò)MDM模塊和JTAG口連接目標(biāo)板上的CPU,GDB則可以對(duì)程序進(jìn)行單步調(diào)試或斷點(diǎn)設(shè)置,此外也可以配合ChipScope軟件工具進(jìn)行硬件與軟件的協(xié)同調(diào)試。7.4在SOPC系統(tǒng)中添加定制外設(shè)IPCore

基于FPGA的嵌入式系統(tǒng)與傳統(tǒng)的嵌入式系統(tǒng)相比較,最大的優(yōu)勢(shì)是利用FPGA的硬件可編程特性,系統(tǒng)可以很方便地添加和定制硬件外設(shè)。系統(tǒng)所需的外設(shè)可從開(kāi)發(fā)包中的IP庫(kù)中調(diào)用,也可由用戶根據(jù)系統(tǒng)功能需要利用HDL語(yǔ)言自行開(kāi)發(fā)設(shè)計(jì)。前面已經(jīng)介紹,SOPC系統(tǒng)是通過(guò)總線來(lái)實(shí)現(xiàn)處理器與外設(shè)之間的連接的。為了方便用戶將定制外設(shè)掛接到總線上,EDK專門提供了定制IPCore產(chǎn)生向?qū)?lái)簡(jiǎn)化用戶定制外設(shè)總線接口的開(kāi)發(fā)。下面介紹如何完成一個(gè)實(shí)現(xiàn)開(kāi)關(guān)去抖動(dòng)功能的定制外設(shè)IPCore的設(shè)計(jì)。該外設(shè)具有一個(gè)可尋址的狀態(tài)寄存器供處理器訪問(wèn),并在開(kāi)關(guān)狀態(tài)發(fā)生變化時(shí)能向處理器請(qǐng)求中斷。

在系統(tǒng)中設(shè)計(jì)和添加定制外設(shè)的關(guān)鍵是利用好XPS中的定制IP產(chǎn)生向?qū)Чぞ撸话悴僮鬟^(guò)程分為三個(gè)階段:第一階段,利用定制IPCore產(chǎn)生向?qū)Мa(chǎn)生自制外設(shè)的設(shè)計(jì)模板;第二階段,在ISE中添加和修改HDL文件,設(shè)計(jì)外設(shè)邏輯功能并編譯;第三階段,再次調(diào)用定制IPCore產(chǎn)生向?qū)?dǎo)入第二階段對(duì)外設(shè)的修改,將其添加到系統(tǒng)的外設(shè)庫(kù)中。這樣一來(lái),系統(tǒng)就可以通過(guò)外設(shè)庫(kù)像標(biāo)準(zhǔn)外設(shè)一樣添加定制外設(shè)了。下面介紹這三個(gè)階段的具體操作步驟。

第一階段是在XPS的菜單中單擊【Hardware】→【CreateorImportPeripheral...】,啟動(dòng)定制IP產(chǎn)生向?qū)?,然后單擊按鈕,依次進(jìn)入以下對(duì)話框中,具體操作步驟如下:

(1)在向?qū)А綪eripheralFlow】對(duì)話框中選擇【Createtemplatesforanewperipheral】項(xiàng),用來(lái)產(chǎn)生一個(gè)新的外設(shè)IP,如圖7.32所示。圖7.32新建一個(gè)外設(shè)模板

(2)在【RepositoryorProject】對(duì)話框中選擇定制外設(shè)的保存位置。如果選擇【ToanEDKuserrspository】單選框,則將定制外設(shè)設(shè)計(jì)保存在用戶的系統(tǒng)IP庫(kù)中,可被其它的EDK工程識(shí)別和調(diào)用;如果選擇【ToanXPSproject】單選框,則該定制外設(shè)僅能被當(dāng)前工程識(shí)別到,所有設(shè)計(jì)文件都保存在當(dāng)前工程的pcores目錄下?,F(xiàn)選擇前一項(xiàng),如圖7.33所示。圖7.33指定定制外設(shè)的保存路徑

(3)在【NameandVersion】對(duì)話框中輸入外設(shè)的名字和版本號(hào),也可添加外設(shè)描述信息,這里將定制外設(shè)命名為“switch_debouncer”,版本設(shè)為“1.00.a”,如圖7.34所示。圖7.34外設(shè)命名和指定版本

(4)在【BusInterface】對(duì)話框中選擇外設(shè)連接的總線類型,對(duì)MicroBlaze處理器可以選擇【ProcessorLocalBus(PLBv4.6)】和【FastSimplexLink(FSL)】?jī)煞N總線類型,應(yīng)根據(jù)外設(shè)對(duì)工作性能的要求由用戶酌情選取。本例添加的是個(gè)低速外設(shè),應(yīng)選擇前者,如圖7.35所示。如果定制外設(shè)需要考慮向下兼容,則可選中【EnableOPBandPLBv3.4businterface】讓外設(shè)的連接總線類型設(shè)為OPB或PLBv3.4。圖7.35選擇總線類型

(5)在【IPIF(IPInterface)Services】對(duì)話框中,根據(jù)定制外設(shè)在第4步選定的總線類型,羅列出外設(shè)和處理器之間的多個(gè)IP接口(IPIF)信號(hào)以供用戶選擇,各信號(hào)的具體功能請(qǐng)參考Xilinx相關(guān)文檔。本例中根據(jù)外設(shè)功能設(shè)計(jì)要求,選擇對(duì)應(yīng)的參數(shù)項(xiàng),如圖7.36所示。圖7.36配置接口信號(hào)

(6)在【SlaveInterface】對(duì)話框中保持缺省設(shè)置。

(7)在中斷服務(wù)【InterruptService】頁(yè)面中配置外設(shè)的中斷功能。本例中需去除【UseDeviceISC(interruptsourcecontroller)】選項(xiàng),不需使用中斷控制器;將【Numberofinterruptsgeneratedbyuser-logic】設(shè)置為“1”;把【Capturemode】調(diào)整為“RisingEdgeDetect”,這樣外設(shè)就可以在IPIF的中斷線上通過(guò)產(chǎn)生一個(gè)上升沿跳變來(lái)向處理器請(qǐng)求中斷,如圖7.37所示。圖7.37配置外設(shè)中斷

(8)在【UserS/WRegister】頁(yè)面中將【Numberofsoftwareaccessibleregisters】設(shè)置為“1”,為外設(shè)配置一個(gè)可被軟件訪問(wèn)的寄存器。

(9)在【IPInterconnect(IPIC)】頁(yè)面中可根據(jù)設(shè)計(jì)要求為定制外設(shè)總線接口添加信號(hào)。通常向?qū)б褳橛脩暨x好了信號(hào),可不作調(diào)整直接進(jìn)行下一步設(shè)置。

(10)【PeripheralSimulationSupport】頁(yè)面中可為外設(shè)設(shè)計(jì)產(chǎn)生仿真文件,用戶可根據(jù)情況選擇是否生成。本例直接跳過(guò)。

(11)【PeripheralImplementationSupport】頁(yè)面詢問(wèn)用戶為外設(shè)生成哪些模板文件,包括外設(shè)功能設(shè)計(jì)HDL文件采用哪種語(yǔ)言、是否產(chǎn)生對(duì)應(yīng)ISE工程和基于C語(yǔ)言的外設(shè)軟件驅(qū)動(dòng),本例設(shè)置如圖7.38所示。特別指出的是,由于向?qū)峁┑目偩€接口模板是基于VHDL語(yǔ)言的,因此使用Verilog語(yǔ)言設(shè)計(jì)用戶邏輯外設(shè)時(shí),要特別注意接口對(duì)應(yīng)關(guān)系,以確保使用XST進(jìn)行混合語(yǔ)言編譯時(shí)能成功。圖7.38選擇輸出模板

(12)完成模板的生成,定制IP產(chǎn)生向?qū)⒃诘?步設(shè)定的位置生成pcores和drivers兩個(gè)目錄,如圖7.39所示。pcores中包含有外設(shè)的ISE工程設(shè)計(jì)文件,drivers目錄中則包含了外設(shè)的軟件驅(qū)動(dòng)模板文件。第一階段到此結(jié)束。圖7.39生成的定制外設(shè)模板目錄結(jié)構(gòu)在第二階段添加HDL邏輯,具體操作步驟如下:

(1)用ISE打開(kāi)生成的ISE工程,工程結(jié)構(gòu)如圖7.40所示。需要說(shuō)明的是,ISE10.1版需要安裝最新補(bǔ)丁進(jìn)行升級(jí)消除其在路徑查找上的缺陷,否則打開(kāi)的工程可能不能成功加載設(shè)計(jì)源文件,需要用戶手工進(jìn)行添加。圖7.40定制外設(shè)的ISE工程結(jié)構(gòu)

(2)在USER_LOGIC_I模塊上右擊,選擇增加一個(gè)Verilog文件,將其保存在“pcores\switch_debouncer_v1_00_a\hdl\verilog”目錄下,添加的switch_debouncer_core.v程序內(nèi)容如下:

moduleswitch_debouncer_core

(reset,

clock,

input_switch_array,

output_switch_array,

new_switch_state,

acknowledge

);

parameterNUM_SWITCHES=4; //對(duì)應(yīng)開(kāi)發(fā)板上的四個(gè)滑動(dòng)開(kāi)關(guān)

inputreset,clock;

inputacknowledge; //輸入已被后續(xù)模塊讀取而返回的確認(rèn)信號(hào)

input[NUM_SWITCHES-1:0]input_switch_array;

//原始開(kāi)關(guān)輸入,未去抖動(dòng),定義成總線

output[NUM_SWITCHES-1:0]output_switch_array;

//對(duì)應(yīng)開(kāi)關(guān)陣列輸出,已去抖動(dòng)

outputnew_switch_state; //指示有新的已完成去抖的輸入產(chǎn)生

parameterNDELAY=500000; //對(duì)應(yīng)50MHz系統(tǒng)時(shí)鐘實(shí)現(xiàn)10ms延時(shí)

parameterNBITS=20;

parameterIdle=1'b0,Debounce_In_Progress=1'b1;

reg[NUM_SWITCHES-1:0]output_switch_array;

reg[NUM_SWITCHES-1:0]input_register;

reg[NBITS-1:0]debounce_counter; //去抖延時(shí)計(jì)數(shù)器

regint_new_switch_state;

regdebounce_state;

always@(posedgeclock)

if(reset)

begin

debounce_counter<=0;

input_register<=0;

output_switch_array<=0;

int_new_switch_state<=0;

debounce_state<=Idle;

end

else

begin

case(debounce_state)

Idle:

begin

if(input_switch_array!=input_register)

begin

input_register<=input_switch_array;

debounce_state<=Debounce_In_Progress;

debounce_counter<=NDELAY;

end

end

Debounce_In_Progress:

begin

if(input_switch_array==input_register)

begin

debounce_counter<=debounce_counter-1;

if(debounce_counter==0)

//根據(jù)延遲計(jì)數(shù)器計(jì)數(shù)完成前后的輸入狀態(tài)是否一致來(lái)實(shí)現(xiàn)去抖動(dòng)

begin

output_switch_array<=input_register;

int_new_switch_state<=1;

debounce_state<=Idle;

end

end

else

debounce_state<=Idle;

end

endcase

if(int_new_switch_state&&acknowledge)

//當(dāng)acknowledge有效清除new_switch_state信號(hào),以便讀取下一次輸入

int_new_switch_state<=0;

end

assignnew_switch_state=int_new_switch_state;

endmodule

(3)按下面的程序代碼修改user_logic.v程序,完成定制模塊與SOPC系統(tǒng)總線接口的連接。該程序的接口關(guān)系要求與片上總線信號(hào)對(duì)應(yīng),這里直接提供程序代碼,對(duì)于具體細(xì)節(jié)有興趣的讀者可參看Xilinx相關(guān)技術(shù)文檔自行分析。

moduleuser_logic

(input_switch_array,

Bus2IP_Clk,

Bus2IP_Reset,

Bus2IP_Data,

Bus2IP_BE,

Bus2IP_RdCE,

Bus2IP_WrCE,

IP2Bus_Data,

IP2Bus_RdAck,

IP2Bus_WrAck,

IP2Bus_Error,

IP2Bus_IntrEvent

);

parameterNUM_SWITCHES=4;//滑動(dòng)開(kāi)關(guān)數(shù)目

parameterC_SLV_DWIDTH=32;

parameterC_NUM_REG=1;

parameterC_NUM_INTR=1;

input[0:NUM_SWITCHES-1]input_switch_array;

inputBus2IP_Clk;

inputBus2IP_Reset;

input[0:C_SLV_DWIDTH-1]Bus2IP_Data;

input[0:C_SLV_DWIDTH/8-1]Bus2IP_BE;

input[0:C_NUM_REG-1]Bus2IP_RdCE;

input[0:C_NUM_REG-1]Bus2IP_WrCE;

output[0:C_SLV_DWIDTH-1]IP2Bus_Data;

outputIP2Bus_RdAck;

outputIP2Bus_WrAck;

outputIP2Bus_Error;

output[0:C_NUM_INTR-1]IP2Bus_IntrEvent;

wire[0:NUM_SWITCHES-1]output_switch_array;

wirenew_switch_state;

wire[0:0]slv_reg_write_sel;

wire[0:0]slv_reg_read_sel;

reg[0:C_SLV_DWIDTH-1]slv_ip2bus_data;

wireslv_read_ack;

wireslv_write_ack;

switch_debouncer_coreswitch_debouncer_core_instance(

.reset(Bus2IP_Reset),

.clock(Bus2IP_Clk),

.input_switch_array(input_switch_array),

.output_switch_array(output_switch_array),

.new_switch_state(new_switch_state),

.acknowledge(slv_read_ack)//讀操作回饋信號(hào)

);

assign

slv_reg_write_sel=Bus2IP_WrCE[0:0],

slv_reg_read_sel=Bus2IP_RdCE[0:0],

slv_write_ack=Bus2IP_WrCE[0],

slv_read_ack=Bus2IP_RdCE[0];

//從模式讀取開(kāi)關(guān)輸入狀態(tài)

always@(slv_reg_read_seloroutput_switch_array)

begin:SLAVE_REG_READ_PROC

case(slv_reg_read_sel)

1‘b1:begin

slv_ip2bus_data[0:(C_SLV_DWIDTH-NUM_SWITCHES-

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論