##轉(zhuǎn)載一片博文
版權(quán)聲明:本文為卜居原創(chuàng)文章宛蚓,未經(jīng)博主允許不得轉(zhuǎn)載橘荠。卜居博客地址:http://blog.csdn.net/kkk584520
距離上次發(fā)帖時(shí)間有點(diǎn)長(zhǎng)了个扰,其實(shí)這段時(shí)間一直在思考了嚎。
市面上已經(jīng)有專門講ZYNQ的書籍了,我看過(guò)的有這兩本咧七。
這兩本書怎么說(shuō)呢衰齐,我覺得第二本更像是官方文檔的堆砌吧(不喜勿噴),洋洋灑灑近600頁(yè)继阻,真正我想看的內(nèi)容卻少之又少耻涛。第一本書更適合入門(其實(shí)相當(dāng)于傻瓜教程,你拿到書穴翩,拿到板子之后馬上就能開始做實(shí)驗(yàn))犬第,但語(yǔ)法錯(cuò)誤、名詞錯(cuò)誤芒帕、軟件版本不同造成的錯(cuò)誤有很多,附加的光盤第一個(gè)實(shí)驗(yàn)內(nèi)容就有錯(cuò)背蟆!有時(shí)辛辛苦苦搭建起來(lái)的環(huán)境鉴分,因?yàn)闀嫌绣e(cuò)造成實(shí)驗(yàn)失敗是很痛苦的,浪費(fèi)感情带膀。
建議先讀一讀第一本志珍,對(duì)ZYNQ建立起一個(gè)感性認(rèn)識(shí)(上面有很多例程,適合上手垛叨,但不適合深入理解)伦糯。讀完之后,第二本讀的必要性不大,只要能上網(wǎng)敛纲,所有需要內(nèi)容都能從Xilinx官網(wǎng)和論壇下載喂击。針對(duì)自己遇到的問(wèn)題,多到Xilinx論壇求助或查找已經(jīng)解決的問(wèn)題是個(gè)好習(xí)慣淤翔。
本節(jié)介紹的AXI是個(gè)什么東西呢翰绊,它其實(shí)不屬于Zynq,不屬于Xilinx旁壮,而是屬于ARM监嗜。它是ARM最新的總線接口,以前叫做AMBA抡谐,從3.0以后就稱為AXI了裁奇。
書上講的AXI比較具體,本節(jié)呢不打算落入俗套麦撵,從應(yīng)用角度解釋AXI框喳。如果需要深入研究AXI時(shí)序,那完全可以從http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.set.amba/index.html下載最權(quán)威的規(guī)格書厦坛,而不是通過(guò)別人寫的書來(lái)獲得這些內(nèi)容(要學(xué)習(xí)一手材料,不要?jiǎng)e人嚼過(guò)的)乍惊。
Zynq是以ARM作為核心的杜秸,運(yùn)行時(shí)也是第一個(gè)“醒”過(guò)來(lái),然后找可執(zhí)行代碼润绎,找到后進(jìn)入FSBL(第一引導(dǎo)階段)撬碟,接著找配置邏輯部分的bit文件,找到后就叫醒PL按照bit中的方式運(yùn)行莉撇,再接著找可執(zhí)行代碼呢蛤,進(jìn)入SSBL(第二引導(dǎo)階段),這時(shí)就可以初始化操作系統(tǒng)的運(yùn)行環(huán)境棍郎,引導(dǎo)像Linux這樣的大型程序其障,隨后將控制權(quán)交給linux。Linux運(yùn)行時(shí)可以跟PL進(jìn)行數(shù)據(jù)交互涂佃。注意了励翼,就在這時(shí)候,數(shù)據(jù)交互的通路辜荠,就是我們本節(jié)要講的AXI總線汽抚。
說(shuō)白了,AXI就是負(fù)責(zé)ARM與FPGA之間通信的專用數(shù)據(jù)通道伯病。
ARM內(nèi)部用硬件實(shí)現(xiàn)了AXI總線協(xié)議造烁,包括9個(gè)物理接口,分別為AXI-GP0~AXI-GP3,AXI-HP0~AXI-HP3惭蟋,AXI-ACP接口苗桂。如下圖黃圈所示。
可以看到敞葛,只有兩個(gè)AXI-GP是Master Port誉察,即主機(jī)接口,其余7個(gè)口都是Slave Port(從機(jī)接口)惹谐。主機(jī)接口具有發(fā)起讀寫的權(quán)限持偏,ARM可以利用兩個(gè)AXI-GP主機(jī)接口主動(dòng)訪問(wèn)PL邏輯,其實(shí)就是把PL映射到某個(gè)地址氨肌,讀寫PL寄存器如同在讀寫自己的存儲(chǔ)器鸿秆。其余從機(jī)接口就屬于被動(dòng)接口,接受來(lái)自PL的讀寫怎囚,逆來(lái)順受卿叽。
這9個(gè)AXI接口性能也是不同的。GP接口是32位的低性能接口恳守,理論帶寬600MB/s考婴,而HP和ACP接口為64位高性能接口,理論帶寬1200MB/s催烘。
有人會(huì)問(wèn)沥阱,為什么高性能接口不做成主機(jī)接口呢?這樣可以由ARM發(fā)起高速數(shù)據(jù)傳輸伊群。答案是高性能接口根本不需要ARM CPU來(lái)負(fù)責(zé)數(shù)據(jù)搬移考杉,真正的搬運(yùn)工是位于PL中的DMA控制器。
位于PS端的ARM直接有硬件支持AXI接口舰始,而PL則需要使用邏輯實(shí)現(xiàn)相應(yīng)的AXI協(xié)議崇棠。Xilinx提供現(xiàn)成IP如AXI-DMA,AXI-GPIO丸卷,AXI-Datamover都實(shí)現(xiàn)了相應(yīng)的接口枕稀,使用時(shí)直接從XPS的IP列表中添加即可實(shí)現(xiàn)相應(yīng)的功能。
有時(shí)及老,用戶需要開發(fā)自己定義的IP同PS進(jìn)行通信抽莱,這時(shí)可以利用XPS向?qū)蓪?duì)應(yīng)的IP。xps中用戶自定義IP核可以擁有AXI-Lite骄恶,AXI4食铐,AXI-Stream,PLB和FSL這些接口僧鲁。
后兩種由于ARM這一端不支持虐呻,所以不用象泵。
AXI-Lite具有輕量級(jí),結(jié)構(gòu)簡(jiǎn)單的特點(diǎn)斟叼,適合小批量數(shù)據(jù)偶惠、簡(jiǎn)單控制場(chǎng)合。不支持批量傳輸朗涩,讀寫時(shí)一次只能讀寫一個(gè)字(32bit)忽孽。
AXI4接口和AXI-Lite差不多,只是增加了一項(xiàng)功能就是批量傳輸谢床,可以連續(xù)對(duì)一片地址進(jìn)行一次性讀寫兄一。
上面兩種均采用內(nèi)存映射控制方式,即ARM將用戶自定義IP編入某一地址進(jìn)行訪問(wèn)识腿,讀寫時(shí)就像在讀寫自己的片內(nèi)RAM出革,編程也很方便,開發(fā)難度較低渡讼。代價(jià)就是資源占用過(guò)多袁余,需要額外的讀地址線其做、寫地址線治筒、讀數(shù)據(jù)線腹殿、寫數(shù)據(jù)線、寫應(yīng)答線這些信號(hào)線蹬昌。
另外一種AXI接口就是AXI-Stream析藕,這是一種連續(xù)流接口,不需要地址線(很像FIFO凳厢,一直讀或一直寫就行)。對(duì)于這類IP竞慢,ARM不能通過(guò)上面的內(nèi)存映射方式控制(FIFO根本沒(méi)有地址的概念)先紫,必須有一個(gè)轉(zhuǎn)換裝置,例如AXI-DMA模塊來(lái)實(shí)現(xiàn)內(nèi)存映射到流式接口的轉(zhuǎn)換筹煮。AXI-Stream適用的場(chǎng)合有很多:視頻流處理遮精;通信協(xié)議轉(zhuǎn)換;數(shù)字信號(hào)處理败潦;無(wú)線通信等本冲。其本質(zhì)都是針對(duì)數(shù)值流構(gòu)建的數(shù)據(jù)通路,從信源(例如ARM內(nèi)存劫扒、DMA檬洞、無(wú)線接收前端等)到信宿(例如HDMI顯示器、音頻輸出等)構(gòu)建起連續(xù)的數(shù)據(jù)流沟饥。這種接口適合做實(shí)時(shí)信號(hào)處理添怔。
有了上面的這些官方IP和向?qū)傻淖远xIP湾戳,用戶其實(shí)不需要對(duì)AXI時(shí)序了解太多(除非確實(shí)遇到問(wèn)題),因?yàn)閄ilinx已經(jīng)將和AXI時(shí)序有關(guān)的細(xì)節(jié)都封裝起來(lái)广料,用戶只需要關(guān)注自己的邏輯實(shí)現(xiàn)即可砾脑。