FPGA工程師的研發(fā)之道――總線的研究
如果設計中有多個模塊,每個模塊內部有許多寄存器或者存儲塊需要配置或者提供讀出那么實現方式有多種,主要如下:
本文引用地址:http://www.butianyuan.cn/article/201610/308474.htm實現方式一:可以在模塊頂部將所有寄存器引出,提供統(tǒng)一的模塊進行配置和讀出。這種方式簡單是簡單,但是頂層連接工作量較大,并且如果配置個數較多,導致頂層中寄存器的數目也會較多。
實現方式二:通過總線進行連接,為每個模塊分配一個地址范圍。這樣寄存器等擴展就可以在模塊內部進行擴展,而不用再頂層進行過多的頂層互聯。如下圖所示:
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_0.jpg)
那如果進行總線的選擇,那么有一種極為簡單的總線推薦被使用,那就是AVALON-MM的總線
ALTERA提出兩種總線類型,分別是AVALON-MM,
AVALON-ST。分別用于連接memeory 和數據流的傳送
MM不是你想的意思,其英文為memory map。實現內存映射是其主要目的。主要信號包括如下表所示:
![內存映射](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_1.jpg)
AVALON因此可以說是最簡單實用的總線形態(tài)了。對于其操作來說,總線為同步類型的總線,寫信號只需要在寫使能有效時,同時提供寫數據即可,而讀數據等待信號無效時,讀出數據有效。
同樣數據類型讀數據(readdata)和寫數據(writedata)的寬度可以根據設計的需要靈活配置為(8,16,32----256---1024)BIT等值。即可以支持非常大的位寬,但普通應用,只需要(8,16,32,64)BIT等即可滿足應用。
那假設總線寬度32,基本上主流的數據總線的寬度。如果需要更細粒度的劃分,確定讀寫某個字節(jié)有效,那么byteenable信號也是必須的。其需要4bit來標示32bit(4個byte)中那個有效,每一BIT表示一個字節(jié),因此如果要完全表示所有的字節(jié)有效,因此字節(jié)有效信號的寬度為(數據總線的寬度/8)。AVALON還可以有burst的操作。主設備可以通過burstcount設備確定brust的長度,為2的n-1次方。
對于普通的應用,通過上述表格中的基本操作即可滿足需求,這也正是AVALON-mm總線的優(yōu)勢。此外模塊按此標準提供連接接口,各種模塊可以掛在NIOSII的片上系統(tǒng)上。
如果模塊之間為點對點的連接,同時傳遞大數據量的操作,那么的AVALON-mm總線就不太適合,因此AVALON_streaming總線就適合這種應用場景。
AVALON_streaming總線本質上是一種同步并行總線,即在同步時鐘狀態(tài)下,使能有效代表傳遞數據有效。其基本信號如下表所示:
![內存映射](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_2.jpg)
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_3.jpg)
從上圖中,可以看出各信號在數據傳輸中的作用,對于從設備獲取數據的處理,就是VALID有效時,數據有效的采樣操作,非常簡單方便,易于處理。如果從設備設定ready永為1,則表示沒有反壓的機制,則主設備,可根據自身收包情況一直向從設備發(fā)送數據包。此外還有其他輔助信號,可以根據設計需要進行添加。
使用總線使模塊標準化,便于代碼的移植和設計復用。同時標準總線的設定和統(tǒng)一定義也利于項目團隊代碼的標準化,便于理解和傳播。
下文將介紹兩種其他應用較廣的總線形態(tài),AHB(AMBA)如果說在PC時代,壟斷PC江湖的是WINTEL(微軟和英特爾),那么在移動互聯網時代,最具有這個潛質的就是谷歌的andriod操作系統(tǒng)和ARM芯片?;贏RM公司授權的各型ARM處理器,基本上在各型嵌入式終端設備占據了壟斷地位。“背靠大樹好乘涼”,因此,用于作為ARM處理做片上系統(tǒng)互聯的AMBA總線標準亦成為業(yè)界應用最廣泛的標準。
AMBA總線事實上為三個總線標準的合集,分別是AHB、ASB、APB。ASB已逐漸被AHB所取代,現在使用最廣泛的為AHB和APB總線,以及最新的擴展AXI總線。實際上,現今系統(tǒng)設計中,經常會借鑒AHB或APB總線標準,用于設計各種IP和片內模塊之間的互聯。首先來說AHB和APB總線,一家公司為什么會退出有兩種類型總線,這是因為AHB一般認為其具備更高的性能和總線吞吐能力,而APB為低速總線,用于連接低速外設。兩種總線互補,能夠在性能和功耗方面進行互補。
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_4.jpg)
如上圖所示
:AHB總線與APB總線在一個嵌入式系統(tǒng)中的應用場景。
分別用于連接低速設備和高速設備。下表列舉其一些主要的差別。
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_5.jpg)
作為單次傳輸來說,AHB與APB的主要區(qū)別在AHB周期不固定,操作完成標示由從設備返回hready標示,而APB周期固定。作為burst傳輸來說,AHB支持增量和回環(huán)兩種方式的突發(fā)。舉例說,增量就是挨個地址自加,如總線寬度為32,地址每次自加4(字節(jié))。而回環(huán),比如當前地址為0xA4,而回環(huán)突發(fā)操作位0xA4, 0xA8, 0xAC, 0xA0。這種突發(fā)方式對于一些cache讀寫內存是非常有用的,這樣可以把0xA0-0xA15十六個內存地址一次性讀出。如果設計一條這樣的cache line,地址0xA0-0xA15其高位地址一致,便于匹配,這樣這16個字節(jié)可以通過一次突發(fā)就能全部填滿。(即回環(huán)這種設計與處理器的cache結構是相關的,現在的cache line有逐漸擴大的趨勢,一般64字節(jié)也較為常見)。
由于支持多個主設備和多個從設備進行交互,那么對于多個主設備之間就存在競爭。(從設備之間存在競爭否?從設備之間是通過地址區(qū)分的,被動接受主設備的訪問,不會存儲競爭的問題。)因此如何解決競爭,那就需要仲裁,即主設備誰需要訪問總線,則發(fā)起HBUSREQ,而仲裁器收到HBUSREQ,返回給相應主設備HGRANT。此時該設備才能訪問總線。除此之外AHB還有其他一些信號,用于輔助整個系統(tǒng)的傳輸,感興趣的同志,可以看一下AMBA的總線規(guī)范。值得一提的是,作為一個總線規(guī)范,其提供了全集的解決方案,而作為實現部分,只需要在滿足規(guī)范的前提下,實現必要的功能即可,例如AHB總線中規(guī)定,其突發(fā)最大可1K字節(jié),但是作為一個從設備,不一定需要支持這么大的操作,即實現功能可在總線框架內進行裁剪,選擇實現支持的類型即可。
在FPGA內部設計中,經常有多個主設備訪問同一從設備的例子,例如內部多個模塊都需要訪問外部存儲器,其實現方式有多種,通過AHB的連接架構,可以實現一個標準、可擴展的接口單元,用于訪問外部存儲器。并且可以作為IP使用。AHB從設備只需要根據需要,支持某些burst傳輸即可。
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_6.jpg)
隨著SOC(片上系統(tǒng)的發(fā)展),對于高帶寬、低延時的總線需求更加迫切,ARM公司適時退出AXI(AMBA3.0)作為擴展。
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_7.jpg)
![總線](http://editerupload.eepw.com.cn/fetch/20160912/308474_1_8.jpg)
上圖分別是AXI接口的讀寫操作,分別可以看出,對于AXI總線來說,其有5組獨立的總線,分別是寫地址,寫數據,寫響應,讀地址,讀數據信號。地址和數據信號分開,每組都有自己的控制信號。
每個通道中間沒有時序關聯,如何進行操作的?舉例來說明,例如讀數據操作,實際上,主設備向從設備中寫了一個讀的命令,包括讀地址,burst大小,方式等。收到后從設備按照相應的命令讀取相應大小的數據,傳回主設備,其操作可以簡化的看做兩個緩沖區(qū)類型的操作,主設備將讀命令寫入從設備的命令緩沖區(qū),從設備取出后,根據命令將相應的數據返回給主設備的接收緩沖區(qū)中。這種操作的好處顯而易見,能夠最大限度的減少總線的開銷,因此其讀與讀操作之間獨立,不用等待讀回,就可以發(fā)送下一次的讀信號。寫操作的流程亦然。
對FPGA設計來說,例如xilinx的接口IP(DDR例化時的接口),都已支持AXI的接口。FPGA工程師熟悉相應的總線接口信號和特點,對于技術方案選擇,IP使用和驗證,都是非常重要的。盡量在設計中選擇標準總線接口,對于設計復用,模塊共享來說,則是必由之路。而模塊(IP)復用的益處隨著設計不斷增大將會不斷顯現。
評論