學習FPGA這麼長時間了,一直沒有整理本身的學習內容,這回要把每一段時間的學習內容總結一下,就從自定義組件開始吧。必定要堅持下來呀!!編程
Avalon 總線規範併發
參考手冊框架
(Avalon從端口傳輸與流模式從端口傳輸部分)異步
//*************************************ide
免責聲明:工具
本手冊原自Altera 公司發佈的《Avalon Bus Specification-Reference Manual》,一切權力由Altera 公司全部性能
概 要學習
Avalon 總線是一種將片上處理器和外設鏈接成片上可編程系統(SOPC)的一種簡單總線結構。Avalon總線是一種接口方式,它規定了主從設備之間的接口方式及其通訊時序。優化
Avalon 總線的設計目的在於:
■ 簡便:提供了簡單易學的協議;
■ 優化總線邏輯的資源利用:節約了可編程器件(PLD)內部的邏輯單元(LE);
■ 同步操做:將PLD 上的其餘用戶邏輯很好的集成在一塊兒,從而避免了複雜的時序分析;
基本的Avalon 總線事務能夠在主﹑從設備之間傳送一個字節,半字或字(8,16 或32 位)。當一次事務處理完成,總線能夠迅速的在下一個時鐘到來的時候在相同的主從設備之間或其餘的主從設備間開始新的事務。Avalon 總線也支持一些高級功能,如「延遲型(latency-aware)外設」,「流(streaming)外設」及多總線主設備。這些高級的功能使其容許在一個總線事務中進行外設間的多數據單元的傳輸。Avalon 總線支持多個總線主設備。多主設備的結構爲SOPC 系統及高帶寬外設提供了很大程度上的穩定性。例如,一個主外設能夠進行直接存儲器訪問(DMA),而不須要處理器在數據傳輸路徑上從外設將數據讀入存儲器。Avalon 總線上,主設備和從設備之間的相互做用是基於一種被稱爲「從設備(slave-side)仲裁」的技術。從設備仲裁決定了當多主設備在同一時刻嘗試鏈接同一個從設備的時候,哪一個主設備得到從設備控制權。從設備仲裁具備兩個優點:
1.仲裁細節內嵌於Avalon 總線內部。因此,主設備和從設備的接口具備一致性,不考慮總線上的主設備和從設備的數量。在每個和Avalon 總線相鏈接的主設備看來,它都是總線上惟一的主設備。
2. 多個主設備能夠同時完成總線事務,就像他們並非在同一個總線週期鏈接到同一個從設備同樣。Avalon 總線的設計是爲了配合片上可編程系統(SOPC)的。它是一種由PLD 內部邏輯和佈線資源的主動片上總線結構。Avalon 結構的一些原則以下:
1. 與外設的接口同步於Avalon 時鐘。因此,沒有複雜的,異步的握手/應答模式。Avalon 總線(及整個系統)的性能能夠經過使用標準的同步時序分析技術來實現測量。
2. 全部的信號都是有效「低」和「高」,這樣便於總線操做的當即轉換。位於Avalon 內部的多路複用器(不是三態緩衝器)來決定哪一個信號驅動哪一個外設。
3. 地址,數據和控制信號使用分離的,專用端口,這樣簡化了外設的設計。外設不須要對地址和數據的總線週期進行解碼,也不須要在非使能的時候禁止輸出。
功 能 簡 介
Avalon 也包括不少的功能和約定來支持SOPC Builder 軟件自動產生的系統﹑總線和外設:
高於4G 的地址空間-存儲器和外設能夠被映射爲32 位地址空間中的任何地址。同步接口-全部的Avalon 信號都被Avalon 總線時鐘同步。這樣簡化了Avalon 總線的相關時序行爲並便於高速外設的集成。分離的地址,數據和控制線路-分離的,專用的地址和數據路徑更便於與用戶邏輯相鏈接。外設不須要對數據和地址週期進行譯碼。內置地址譯碼器-Avalon 總線自動的爲全部外設產生片選(Chip Select)信號,大大的簡化了Avalon 外設的設計。
多主設備總線結構-在Avalon 總線上能夠存在多個主外設。Avalon 總線自動產生仲裁邏輯。基於嚮導式的配置-方便使用的圖形化嚮導引導用戶完成對Avalon 總線的配置(增長外設,肯定主/從關係,定義存儲器映射)。
Avalon 總線結構的自動產生是由用戶在嚮導界面的輸入來決定的。動態總線容量-Avalon 總線自動處理數據位寬不匹配的外設間傳送數據的細節,便於在多種不一樣寬度的設備間接口。
名 詞 及 概 念
許多與SOPC 相關的名詞和概念都徹底是新的,他們和傳統的片外總線結構有着本質的不一樣。設計者須要懂得這點,以即可以理解Avalon 總線規範。下面的名次及概念構成了一個理論化的框架,而Avalon總線規範就是創建在這一框架的基礎上的。它們貫穿於整個文檔。
總線週期
總線週期被定義爲Avalon 主時鐘的相鄰上升沿之間的時間間隔,它是總線時鐘週期的基本單元。總線信號時序參照於總線週期時鐘。
總線傳輸
Avalon 總線的一次傳輸是對數據的一次讀/寫操做,它可能持續一個或多個總線週期。Avalon 總線所支持的傳輸位寬爲:一個字節(8 位),半個字(16 位)或一個字(32 位)。
流傳輸
流傳輸爲「流主設備」和「流從設備」之間的連續性數據傳輸創建一個開放式的管道。
具備延遲的讀傳輸:某些同步外設在開始第一次傳輸的時候須要延遲一些時鐘週期,但在以後的傳輸中即可以在每個時鐘週期都返回數據。具備延遲的讀傳輸增長了對這種同步設備的總線利用率。
帶有延遲的讀傳輸
有些同步設備在剛剛開始傳輸的時候,須要延遲幾個時鐘週期纔可以完成其第一次讀數據的過程,而在以後的傳輸過程當中就能夠每個週期返回一個數據。帶有延遲的讀傳輸能夠增長這些同步設備的帶寬利用率。延遲性傳輸容許一個主設備發出讀請求後,轉而執行另外一個無關任務,過一段時間再接收數據。儘管以前的數據尚未接受到,這個無關的任務也能夠發出另外一次讀請求。這有利於進行連續標準地址的存取的指令存取操做和DMA 傳輸。這樣,CPU 和DMA 主設備能夠預讀取其須要的數據,因此這使得同步存儲器保持活躍狀態,並減小了平均存儲延時。
SOPC Builder 軟件及Avalon 總線的產生
SOPC Builder 是Altera 開發的一款系統生成和集成工具。SOPC Builder 所產生的片上電路系統模塊包括Avalon 總線、主外設和從外設。SOPC Builder 提供了圖形化的用戶接口,應用這種接口能夠實現向系統模塊中添加主、從外設,配置外設及配置Avalon 總線將外設鏈接起來。這樣,SOPC Builder 自動的建立並鏈接HDL 模塊,即可以實現用戶PLD 設計的每個部分。
系統模塊
考慮在可編程芯片上實現用戶自定義系統的結構,其中一部分是由SOPC Builder 自動產生的。在Altera PLD 上實現的完整系統如圖1 所示。出於本文的目的,系統模塊的一些部分是由SOPC Builder 自動產生的。系統模塊應該包括最少一個Avalon 主外設和一個Avalon 從外設,例如UART,定時器或者PIO。系統模塊的外部邏輯能夠包含用戶Avalon 外設及其餘的和系統模塊不相關的用戶邏輯。系統模塊必須與設計者的PLD 設計鏈接起來 。系統模塊的端口依賴於其所包括的外設及在SOPCBuilder 中進行的設置,並隨其變化。這些端口包括直接到Avalon 總線的接口及在系統模塊中的用戶自定義的和外設相連的接口。
Avalon 總線模塊
圖1. Altera PLD 上集成用戶邏輯的系統模塊
Avalon 總線模塊是任何一個系統模塊的「脊樑」。它是SOPC 設計中外設通訊的主要路徑。Avalon 總線模塊是全部的控制、數據、地址信號及控制邏輯的總和,是其將外設鏈接起來並構成了系統模塊。Avalon總線模塊實現了可配置的總線結構,其能夠爲設計者外設之間的相互鏈接而改變。Avalon 總線模塊是由SOPC Builder 自動產生的,因此設計師並不用親自將總線和外設鏈接起來。Avalon總線模塊基本上不會做爲分離的單元而單獨使用,由於系統設計者老是利用SOPC Builder 將處理器和其餘Avalon 外設自動地集成於一個系統模塊之中。設計者對Avalon 總線的注意力一般限於與用戶Avalon
外設相鏈接地具體的端口上。
Avalon 總線模塊(一條Avalon 總線)是一個主動的邏輯單元,它取代了PCB 板上的被動的,金屬總線。(見圖2)這就是說,Avalon 總線模塊的端口能夠被看做是全部鏈接到被動總線的引腳鏈接。本手冊只是定義了包含於Avalon 總線模塊接口中的端口,邏輯行爲和信號順序,而沒有說起物理總線的電氣或物理的性能。
圖2 .Avalon 總線模塊框圖-範例系統
Avalon 總線模塊爲鏈接到總線的Avalon 外設提供瞭如下的服務:
■ 數據通道多路轉換——Avalon 總線模塊的多路複用器從被選擇的從外設向相關主外設傳輸數據。
■ 地址譯碼——地址譯碼邏輯爲每個外設提供片選信號。這樣,單獨的外設不須要對地址線譯碼以產生片選信號,從而簡化了外設的設計。
■ 產生等待狀態(Wait-State)——等待狀態的產生拓展了一個或多個週期的總線傳輸,這有利於知足某些特殊的同步外設的須要。當從外設沒法在一個時鐘週期內應答的時候,產生的等待狀態可使主外設進入等待狀態。在讀使能及寫使能信號須要必定的創建時間/保持時間要求的時候也能夠產生等待狀態。
圖2 .Avalon 總線模塊框圖-範例系統
■ 動態總線寬度——動態總線寬度隱藏了窄帶寬外設與較寬的Avalon 總線(或者Avalon 總線與更高帶寬的外設)相接口的細節問題。舉例來講,一個32 位的主設備從一個16 位的存儲器中讀數據的時候,動態總線寬度能夠自動的對16 位的存儲器進行兩次讀操做,從而傳輸32 位的數據。這便減小了主設備的邏輯及軟件的複雜程度,由於主設備不須要關心外設的物理特性。
■ 中斷優先級(Interrupt-Priority)分配——當一個或者多個從外設產生中斷的時候,Avalon 總線模塊根據相應的中斷請求號(IRQ)來斷定中斷請求。
■ 延遲傳輸(Latent Transfer)能力——在主、從設備之間進行帶有延遲傳輸的邏輯包含於Avalon總線模塊的內部。
■ 流式讀寫(Streaming Read and Write)能力——在主、從設備之間進行流傳輸使能的邏輯包含於Avalon 總線模塊的內部。
Avalon 外設
鏈接於Avalon 總線的Avalon 外設是邏輯器件——不管片上仍是片外的——它們進行着某種系統級的任務,並經過Avalon 總線與其餘的系統部件相通訊。外設是模塊化的系統部件,依賴於系統的須要,能夠在設計的時候增長或者移除。Avalon 外設能夠是存儲器、處理器,也能夠是傳統的外設器件,如UART,PIO,定時器或總線橋。任何的用戶邏輯均可以成爲Avalon 外設,只要它知足本文所述的提供與Avalon 總線接口的地址、數據及控制信號接口。鏈接於Avalon 總線的外設將被分配專用的端口。除了鏈接於Avalon 總線的地址、數據及控制端口以外用戶也能夠自行定製端口。這些於用戶邏輯相鏈接的信號擴展了系統模塊的應用。Avalon 外設要麼是主外設,要麼是從外設。主外設能夠於Avalon 上開啓總線傳輸,其至少有一個鏈接於Avalon 總線模塊的主端口。主外設也能夠有一個從端口其容許此設備接受其餘鏈接於Avalon 總線的主設備開啓的總線傳輸。而從設備只能響應Avalon 總線傳輸,而不可以開啓總線傳輸。像存儲器,UART 這樣的從設備,一般只有與Avalon總線模塊相鏈接的一個從端口。在SOPC 環境中,,區分如下Avalon 總線主設備/從設備的外設類型是十分重要的。
系統模塊內部外設
若是SOPC Builder 在外設庫中找到了一個外設,或者設計者指定了一個用戶外設的設計文件,SOPC Builder 將自動的將此外設與Avalon 總線模塊相鏈接。這種外設是指系統模塊以內的外設,也就是被認爲是系統模塊的一個部分。與Avalon 總線相鏈接的地址、數據及控制端口是向用戶隱藏的。外設中任何附加的非Avalon 端口將做爲系統模塊的端口顯示於外。這些端口可能與物理管腳直接相連或者可能與片上的其餘模塊相連。
系統模塊外部外設
Avalon 總線外設也能夠存在於系統模塊以外。設計者選擇將模塊置於系統模塊以外可
能有如下幾個緣由:
■ 外設在物理上位於PLD 器件以外
■ 外設須要某些粘連邏輯(glue logic)使其與Avalon 總線信號鏈接
■ 在系統模塊產生的時候,外設的設計尚未完成
在這些狀況下,相應的Avalon 總線模塊信號做爲系統模塊的端口現於外部(及指定的外設)。
主端口(Master Port)
主端口是主外設上用於開啓Avalon 總線傳輸的一系列端口的集合。主端口於Avalon 總線模塊直接相連。實際上,一個主外設可能有一個或多個主端口及一個從端口。這些主端口及從端口的相互依賴關係是由對外設進行設計時決定的。可是,這些主、從端口上的單獨的總線傳輸應該老是遵循本文所述。
本文中所說起的全部主設備傳輸都是指單獨的主端口的Avalon 總線傳輸。
從端口(Slave Port)
從端口是指在位於某一外設上的,從另外一外設主端口接受Avalon 總線傳輸的一系列端口的集合。從端口也直接與Avalon 總線模塊相鏈接。主外設也能夠有一個從端口,經過這個從端口可使其接受Avalon 總線上其餘主設備的傳輸。本文所說起的全部從設備傳輸都是指單獨的從端口的Avalon 總線傳輸。
主-從端口對(Master-Slave Pair)
「主-從端口對」是指經過Avalon 總線模塊相鏈接的一個主端口和一個從端口構成的組合。從結構上講,這些主、從端口與Avalon 總線模塊上的相應端口相鏈接。主端口的控制及數據信號能夠有效的經過Avalon 總線模塊與從端口相互做用。主、從端口之間的鏈接(這就構成了主-從端口對)是在SOPC Builder 中所肯定的。
PTF 文件、SOPC Builder 參數及開關
Avalon 總線及外設的配置能夠利用基於嚮導的SOPC Builder 圖形用戶接口(GUI)來完成。經過這個GUI,用戶能夠設定不一樣的參數和開關,而後據此產生系統的PTF 文件。PTF 文件是一個文本化的文
件,它定義了:
■ 定義Avalon 總線模塊結構、功能的參數
■ 定義每一個外設定義結構、功能的參數
■ 每一個外設的主、從角色
■ 外設端口(如讀使能、寫使能、寫數據等)
■ 通往多主端口的從端口的仲裁機制
而後,PTF 文件經過HDL 產生器建立了系統模塊的寄存器傳輸級(RTL)描述。
更多的關於系統PTF 文件的信息請查看「SOPC Builder 數據文檔」(SOPC Builder Data
Sheet)和 「SOPC Builder PTF 文件參考手冊」(SOPC Builder PTF File Reference Manual)
__
1.3 Avalon 總線傳輸
Avalon總線規範定義了主端口和從端口之間經過Avalon總線模塊傳輸數據所須要的信號和時序。構成Avalon總線模塊和外設之間接口的信號隨着傳輸模式的不一樣而不一樣。首先,主傳輸與從傳輸的接口不一樣,使用主端口與從端口的信號定義不一樣。此外,經過系統PTF文件的設置,所需信號的確切類型與數量也是可變的。
Avalon總線規範提供了各類選項來剪裁總線信號和時序,以知足不一樣類型外設的須要。Avalon總線基本傳輸模式在一個主從端口對之間每次只傳送一個單元的數據。能夠經過插入等待週期來延長一次總線傳輸的時間,以知足低速外設的須要。流傳輸模式以及支持併發多主端口傳輸的能力知足高帶寬外設的須要。全部Avalon從傳輸的信號時序都源自從端口的基本傳輸模式。一樣,主端口的基本傳輸模式是全部Avalon主傳輸的基礎。
1.3.1主端口接口與從端口接口
當討論Avalon總線傳輸時,必須注意討論的是總線的哪一邊,是主端口接口仍是從端口接口。由主端口輸出的信號與輸入到目標外設的從端口的對應信號可能會有較大的差異。
從端口的信號活動老是主外設發起總線傳輸的結果。可是,實際的從端口輸入信號並不是直接來自主端口。Avalon總線模塊傳遞來自主端口的信號,並對信號進行裁剪,以知足從外設的須要。
因爲以上緣由,對Avalon總線傳輸的介紹將分爲主傳輸類型和從傳輸類型兩個部分。
大多數用戶只關心從傳輸,由於他們設計的用戶自定義外設通常都是從外設。邊時,用戶只需考慮Avalon總線模塊和用戶自定義外設之間的信號。只有當用戶建立主外設時才涉及到主傳輸。
1.3.2 Avalon總線時序
Avalon總線是一個同步總線接口,由一個Avalon總線主時鐘定時,全部總線傳輸的信號都與Avalon總線時鐘同步。同步總線接口並不意味着全部的Avalon總線信號都是鎖存的。好比,Avalon的chipselect信號即是由組合邏輯產生的,其輸入是同步於Avalon總線時鐘的寄存器的輸出。所以,外設不能使用Avalon信號的邊沿,由於Avalon信號在達到穩定前會變化屢次人。就像全部同步設計同樣,Avalon總線外設只能在時鐘上升沿對穩定的信號做出響應,且必須在時鐘上升沿輸出穩定的信號。
Avalon總線模塊也能夠鏈接異步外設,例如片外異步存儲器。但設計時須要考慮一些額外因素:因爲Avalon總線模塊的同步操做,Avalon信號只以Avalon總線時鐘週期爲間隔變化。此外,若是異步外設的輸出直接鏈接到Avalon總線模塊,用戶必須保證輸出信號在時鐘上升以前達到穩定。
Avalon總線規範並不定義在時鐘上升沿之間信號是如何變化的。信號的變化由Avalon總線時鐘觸發,信號只要在捕獲時鐘上升沿以前達到穩定就能夠了,所以,總線規範中的Avalon總線時序圖中不會描繪精確的時間信息。相似地,Avalon總線沒有規定固有的最高性能。系統模塊在特定的器件上綜合佈線以後,用戶必須對系統模塊進行標準的時序分析,以肯定Avalon總線傳輸達到的最高速度。
1.3.3 Avalon總線信號
因爲Avalon總線是一個由HDL文件綜合而來,因此在鏈接Avalon總線模塊和Avalon外設時須要一些特別的考慮。對於傳統的片外總線結構,全部外設都共享一組固定的.預先設計的金屬線路,而Avalon總線與此不一樣:SOPC Builder必須準確地瞭解每一個外設提供了哪些Avalon端口,以便鏈接外設與Avalon總線模塊。它還須要瞭解每一個端口的名稱和類型,這些信息定義在系統PTF文件中。
Avalon總線規範不要求Avalon外設必須包含哪些信號。它只定義了外設能夠包含的各類信號類型(例如地址.數據.時鐘等)。外設的每個信號都要指定一個有效的Avalon信號類型,以肯定該信號的做用,一個信號也能夠是用戶自定義的。在這種狀況下,SOPC Builder不將該端口與Avalon總線模塊鏈接。Avalon信號類型首先分爲主端口信號和從端口信號兩類。於是,外設使用的信號類型生產生產首先由端口的主從角色決定。每一個狡立的主端口或從端口使用的信號類型由外設的設計決定。例如,設計一個只有輸出的PIO從外設只須要定義用於寫的信號,而不須要定義用於讀的信號。儘管中斷請求輸出是從端口容許的信號類型,但也不是必須使用。
Avalon總線規範不規定Avalon外設信號的命名規則。不一樣信號類型的做用是預先定義的,而信號的名稱則是由外設決定。信號能夠按照它的信號類型來命名,也能夠遵守系統級的命名規範採用不一樣的名稱。下面章節中討論的Avalon總線傳輸時會涉及到一些Avalon信號,例如readdata信號和irq信號。在這裏信號類型的名稱做爲信號名稱,但外設信號的實際名稱能夠與此不一樣。
做爲一個例子,表1.1列舉了部分Avalon從端口可用的信號類型。信號的方向是從外設的角度定義的。例如時鐘信號clk(方向爲in)對於從外設來講是輸入信號,而對於Avalon總線模塊來講是輸入信號。
表1.1.部分Avalon從端口信號 |
||||
信號類型 |
寬度 |
方向 |
必需 |
Description |
Clk
|
1 |
in |
no |
系統模塊和Avalon總線模塊的全局時鐘信號。全部總線傳輸
傳輸都同步於clk。只有異步從端口才能省略clk. |
address |
1 - 32 |
in |
no |
來自Avalon總線模塊的地址線 |
Reset
|
1 |
in |
no |
從端口的讀請求信號。當從端口不輸出數據時不須要該信號。若
使用了該信號,readdata信號也必須使用 |
readdata |
1 – 32 |
out |
no |
讀傳輸中輸出到Avalon總線的數據線。當從端口不輸出數據
時不須要該信號。若使用了該信號,read信號也必須使用
|
write |
1 |
in |
no |
從端口的寫請求信號。當從端口不接收數據時不須要該信號。若
使用了該信號,writedata信號也必須使用 |
writedata |
1 – 32 |
in |
no |
寫傳輸中來自Avalon總線的數據線。當從端口不接收數據
時不須要該信號。若使用了該信號,write信號也必須使用 |
irq |
1 |
out |
no |
中斷請求。當從外設須要外設服務時可觸發irq |
表1.1中例舉的信號類型都是高電平有效。Avalon總線還提供了各個信號類型的反向形式。在PTF聲明中,在信號類型名稱加」_n」,即可將對應的端口聲明爲低電平有效。這對許多使用低電平有效的片外外設很是有用。
1.3.4 併發多主端口的Avalon總線須要考慮的事項
Avalon總線容許多個端口鏈接到Avalon總線模塊。並且實現Avalon總線的併發多主端口功能時,Avalon總線模塊不須要額外的特殊信號。當多個主外設試圖同時訪問同一個外設時,Avalon總線模塊內部的從端口仲裁邏輯會被用來解決衝突。仲裁機制對於Avalon總線外設徹底是透明的。於是,不管是否使用了仲裁,應用於主端口和從端口的Avalon總線傳輸協議是相同的。
換句話說,從端口不會意識到有多個主外設同時請求總線傳輸。相似地,被仲裁邏輯強制等待的主外設也不會意識到另外一個獲勝的主外設的存在。主端口只是簡單地發現它的等待請求信號被置爲有效,並一直等待,直到目標外設準備好處理總線傳輸。將仲裁的細節隱藏在Avalon總線模塊內部極大簡化了外設的設計,任何Avalon外設在單主端口和多主端口結構中均可以使用。
1.4 Avalon從端口傳輸
1.4.1從傳輸的Avalon總線信號
表2列舉了外設的從端口與Avalon總線間接口的信號類型。信號的方向是之外設的角度定義的。外設提供的信號由外設的設計和PTF文件中的信號定義決定,不須要提供所有的信號類型
表2 Avalon從端口信號
|
||||
Signal Type |
Width |
Direction |
Required |
Description |
clk |
1 |
in |
no |
系統模塊和Avalon總線模塊的全局時鐘信號。全部總線傳輸都同步於clk。只有異步從端口才能省略clk |
reset |
1 |
in |
no |
全局復位信號。如何使用取決於外設 |
chipselect |
1 |
in |
yes |
從端口的片選信號。當chipselect信號無效時,
從端口必須忽略全部的Avalon信號輸入 |
address |
1 - 32 |
in |
no |
來自Avalon總線模塊的地址線 |
begintransfer |
1 |
in |
no |
在每一個新的Avalon總線傳輸的第一個總線週期期間有效。如何使用該信號取決於外設 |
byteenable |
0, 2, 4 |
in |
no |
字節使能信號,在訪問寬度超過8位的存儲器時選擇特定的字節段,如何使用該信號取決於外設 |
read |
1 |
in |
no |
從端口讀請求信號。當從端口不輸出數據時不須要該信號。若使用了該信號,readdata信號也必須使用 |
readdata |
1 – 32 |
out |
no |
讀傳輸中輸出到Avalon總線的數據線。當從端口不輸出數據
時不須要該信號。若使用了該信號,read信號也必須使用
|
write |
1 |
in |
no |
從端口的寫請求信號。當從端口不接收數據時不須要該信號。若
使用了該信號,writedata信號也必須使用 |
writedata |
1 – 32 |
in |
no |
寫傳輸中來自Avalon總線的數據線。當從端口不接收數據時不須要該信號。若使用了該信號,write信號也必須使用 |
readdatavalid |
1 |
out |
no |
讀取數據有效信號,僅用於具備可變讀延遲
的從端口。用於標記從端口發出有效數據時
的時鐘上升沿 |
waitrequest |
1 |
out |
no |
等待請求信號,當從端口不能當即響應
時暫停Avalon總線模塊 |
readyfordata |
1 |
out |
no |
流傳輸模式信號。表示流模式從端口能夠接收數據 |
dataavailable |
1 |
out |
no |
流傳輸模式信號。表示流模式從端口擁有有效數據 |
endofpacket |
1 |
out |
no |
流傳輸模式信號。用於向主端口報告」 包結束」狀態。如何使用取決於外設 |
irq |
1 |
out |
no |
中斷請求。當從外設須要外設服務時可觸發irq |
resetrequest |
1 |
out |
no |
復位請求信號,該信號使得一個外設能夠復位整個系統模塊 |
上述信號若是不加說明都是高電平有效,此外,Avalon總線也提供上述信號的低電平有效版本,在信號名稱後加」_n」表示低電平有效,如:read信號爲高電平有效,而read_n爲低電平有效。
1.4.2 Avalon總線上的從端口讀傳輸
1.4.2.1 基本從端口傳輸模式
基本從端口傳輸模式是全部Avalon從端口傳輸的基礎。全部其它的從端口傳輸使用的信號都包含了基本從端口傳輸的信號,並擴展了基本從端口操做時序。基本從端口傳輸由Avalon總線模塊發起,而後從端口向Avalon總線模塊傳輸一個單元的數據。基本從端口讀傳輸沒有延遲。
例4.1顯示了一個基本從端口讀傳輸的例子。在Avalon基本讀傳輸中,總線傳輸開始於一個時鐘上升沿,並在下一個時鐘上升沿結束,不插入等待週期。因爲傳輸在一個時鐘週期內完成,目標外設必須可以當即.異步向Avalon總線模塊輸出相應地址的內容。
在clk的第一個上升沿,Avalon總線向目標外設傳遞address、byteenable_n和read_n信號。Avalon總線模塊內部對address進行譯碼,產生片選並驅動從端口的chipselect信號。一旦chipselect信號有效,從端口在數據有效時應當即驅動readdata輸出。最後,Avalon總線模塊在下一個時鐘上升沿捕獲readdata。
例4.1 基本從端口讀傳輸
時序說明:
(A) 第一個總線週期開始於clk上升沿;
(B) Address和read_n信號有效;
(C) Avalon總線對address譯碼,輸出有效的chipselect;
(D) 片選有效後,從端口在第一個總線週期內必須返回有效數據;
(E) Avalon總線在下一個clk上升沿捕獲readdata,讀傳輸到此結束。另外一個總線傳輸能夠在下一個總線週期開始。
無等待週期的基本讀傳輸只適用於徹底異步的外設。目標外設必須在外設被選中或地址變化時當即向Avalon總線提供數據。爲使傳輸正常工做,readdata的輸出必須在一下個時鐘上升沿有效且穩定。
鎖存輸入或輸出端口的同步外設不能使用無等待週期的基本從端口讀傳輸。大部分片上外設都採用同步接口,所以至少須要一個時鐘週期來捕獲數據。在讀傳輸中,須要至少一個等待週期,除非該外設是具備延遲的。
外設的從端口還可使用字節使能信號byteenable_n,對byteenable_n的解釋是由外設決定的。在最簡單的狀況下,從端口能夠忽略byteenable_n,每當read_n有效時老是驅動全部的字節段。Avalon總線模塊在每次讀傳輸中捕獲readdata的所有位寬度。若是在讀傳輸中某個字節未使能,其返回到Avalon總線模塊的值是不肯定的。
當chipselect無效時,從端口必須忽略全部其它輸入信號,其輸出信號沒有必要置爲高阻。此外,chipselect的上升沿或read_n的降低沿不能用做讀傳輸開始的標誌,由於這些邊沿的穩定性是沒有保證的。
1.4.2.2 具備固定等待週期的從端口讀傳輸
具備固定等待週期從端口傳輸使用的信號與基本讀傳輸使用的相同,不一樣點只是信號的時序。具備等待週期的從端口讀傳輸適用於不能在一個時鐘週期內提供數據的外設。例如,若指定了一個等待週期,Avalon總線模塊在提供了有效的地址和控制信號後,會等待一個時鐘週期再捕獲外設的數據。Avalon總線模塊在每次讀傳輸時都會等待固定數量的總線週期。
例4.2顯示了具備單個等待週期的從端口讀傳輸的時序。Avalon總線模塊在第一個總線週期提供address、byteenable、read_n和chipselect信號。因爲具備等待週期,外設沒必要在第一個總線內提供readdata。第一個總線週期是第一個(也是惟一一個)等待週期。從端口能夠隨時捕獲地址和控制信號,片上的同步外設一般在第二個總線週期開始(等待週期結束)時的clk上升沿捕獲地址和控制信號。在第二個總線週期間,目標外設向Avalon總線模塊提供readdata。在第三個也是最後一個時鐘上升沿,Avalon總線模塊由從端口捕獲readdata。在第三個也是最後一個時鐘上升沿,Avalon總線模塊由從端口模塊readdata並結束總線傳輸。
時序說明:
(A) 第一個總線週期開始於clk上升沿;
(B) Address和read_n信號有效;
(C) Avalon總線對address譯碼,輸出有效的chipselect;
(D) clk上升沿標誌着第一個且是惟一的一個等待週期結束。若是從端口是同步的,它能夠在clk上升沿捕獲address、read_n、和chipselect;
(E) 從端口在第二個總線週期內返回有效數據;
(F) Avalon總線在下一個clk上升沿捕獲readdata,讀傳輸到此結束。另外一個總線傳輸能夠在下一個總線週期開始。
例4.2 具備一個固定等待週期的從端口讀傳輸
具備單個等待週期的讀傳輸常常用於同步的片上外設。在合理的PLD設計中,模塊間的接口應當經過寄存器同步。加入了一個等待週期後,外設能夠在chipselect有效後的下一個clk上升沿捕獲address、byteenable、read_n和chipselect,這使得目標外設具備至少一個完整的總線週期來向Avalon總線模塊提供返回數據。
例4.3顯示了具備多個等待週期的從端口讀傳輸。它和例4.2幾乎是同樣的,只是Avalon總線在由外設獲取readdata以前等待多於一個總線週期。
1.4.2.3 具備外設控制等待週期的從端口讀傳輸
外設控制的等待週期使得目標外設可以根據提供數據的須要將Avalon總線模塊的讀操做暫停任意多個總線週期。在這種傳輸模塊下,外設向Avalon總線模塊提供數據所需的時間是不固定的。
例4.4顯示了這種狀況,外設控制等待週期的讀傳輸模式使用了waitrequest信號。它是一個從端口的輸出信號。當從端口的read_n信號有效後,從端口若要延長讀傳輸,它必須在第一個總線週期內返回waitrequest。當waitrquest有效後,Avalon總線模塊便暫停工做,再也不捕獲readdata。Avalon總線模塊在waitrequest失效後的下一個clk上升沿捕獲readdata。
Avalon總線模塊沒有超時機制來限制從端口暫停總線的時間。當Avalon總線模塊暫停後,系統模塊內的某個主外設也被暫停,並等待着由目標從外設返回須要的數據。一個從端口可以將主端口永久地「掛起」。所以,外設必須保證不會使waitrequest無限期地保持有效。
時序說明:
(A) 第一個總線週期開始於clk上升沿;
(B) Address和read_n信號有效;
(C) Avalon總線對address譯碼,輸出有效的chipselect;
(D) 從端口在下一個clk上升沿以前置waitrequest有效
(E) Avalon總線模塊在clk上升沿讀取waitrequest。這時waitrequest有效,於是在該時鐘上升沿不捕獲readdata;
(F-G)waitrequest一直保持有效,能夠佔用任意多個總線週期;
(H) 從端口提供了有效的readdata;
(I) 從端口置waitrequest無效;
(J) Avalon總線在下一個clk上升沿捕獲readdata,讀傳輸到此結束。另外一次總線傳輸能夠開始於下一個總線週期。
若一個從端口採用了外設控制等待週期的讀傳輸模式,對該端口的其它傳輸模式會有一些限制,好比不能再使用創建時間和保持時間。這些限制隻影響從端口,不影響鏈接到Avalon總線模塊上的其它外設。在大多數狀況下,產生waitrequest信號的外設是片上同步外設,不須要考慮創建時間和等待時間。
1.4.2.4具備創建時間的從端口讀傳輸
Avalon總線模塊按照用戶設計或者外設默認,可以自動知足各個從端口信號的創建時間要求,發起讀傳輸的主外設沒必要考慮各個信號對創建時間與保持時間的要求。具備創建時間的從端口讀傳輸使用的信號與基本讀傳輸使用的相同,不一樣點只是信號的時序。
這種傳輸方式一般用於一些片外外設,它們要求在讀使能信號有效前address和 Chipselect信號須要穩定一段時間。一個非零的創建時間N意味着address、byteenable_n和chipselect信號提供給從端口以後,在read_n有效以前有N個總線週期的延遲。要注意chipselect不受創建時間的影響,若外設對於read_n和chipselect都要求有創建時間,用戶必須在接口中手工添加適當的邏輯(一個與門)。
完成總線傳輸所需的總線週期的總數取決於創建時間和等待週期的總線週期。例如,若一個外設具備參數setup_Time=」2」和Read_Wait_States=」3」,安將花費6個總線週期來完成傳輸:2個總線週期的創建時間,3個總線週期的等待週期,1個總線週期用來捕獲數據。例4.5顯示了具備一個總線週期的創建時間和一個固定等待週期的從端口讀傳輸。
時序說明:
(A) 第一個總線週期開始於clk上升沿;
(B) Address和byteenable_n有效,read_n信號仍保持無效;
(C) Avalon總線對address譯碼,輸出有效的chipselect;
(D) clk上升沿標誌着創建時間總線週期結束,並開始總線等待週期;
(E) Avalon總線模塊置read_n有效;
(F) clk上升沿標誌着總線等待週期結束;
(H) Avalon總線在下一個clk上升沿捕獲readdata,讀傳輸到此結束。另外一次總線傳輸能夠開始於下一個總線週期。
若是一個外設可以同時支持讀和寫總線傳輸,而且指定了創建時間,那麼讀傳輸和寫傳輸具備一樣的創建時間。
例4.5 具備創建時間的從端口讀傳輸
1.4.3 在Avalon總線上的從端口寫傳輸
1.4.3.1 基本從端口寫傳輸
和從端口讀傳輸相似,基本從端口寫傳輸是全部Avalon從端口寫傳輸的基礎。全部其它
的從端口寫傳輸模式使用的信號都包含了基本從端口寫傳輸的信號,並擴展了基本從端口寫時序。基本從端口寫傳輸由Avalon總線模塊發起,由Avalon總線模塊向從端口傳輸一個單元的數據。基本從端口寫傳輸沒有延遲。
例4.6 顯示了基本從端口寫傳輸,沒有等待週期、創建時間和保持時間。Avalon總線模塊提供address、writedata、byteenable_n和write_n信號,而後設置chipselect有效。從端口在下一個時鐘上升沿捕獲地址、數據和控制信號,寫傳輸當即結束。整個傳輸過程僅花費一個總線週期。從外設能夠在傳輸結束後再花費一些總線週期來實際處理寫入的數據。若是外設不能在每一個總線週期都接受數據,則須要加入等待週期。
例4.6 基本從端口寫傳輸
時序說明:
(A) 寫傳輸開始於clk上升沿;
(B) Writedata、address、byteenable_n、write_n信號有效;
(C) Avalon總線模塊對address譯碼,並向從端口設置有效的chipselect;
(D) 從端口在下一個clk上升沿捕獲writedata、address、byteenable_n、write_n
和chipselect,寫傳輸到此結束。另外一次讀或寫傳輸能夠開始於下一個總線週期。
基本寫傳輸只適合於同步外設,包括許多片上外設,例如PIO和定時器等。基本寫傳
輸的時序不適合於異步外設,由於包括write_n和chipselect在內的全部輸出信號同時失效,這會在片外存儲器等異步外設中形成競爭冒險現象。對於這樣的外設,用戶能夠設定信號的保持時間,這將在後面的章節中討論。
當writedata比一個字節寬時,字節使能信號byteenable_n能夠寫入特定的字節段。Byteenable_n是一組信號線,其中每一次對應於writedata的一個字節段。Byteenable_n一般用於片外的16位或32位字尋址的存儲器設備。當寫入單個字節數據時,address僅指定相應的字或半字地址,而byteenable_n精確地指定要寫入哪一個字節。表4.3是使用byteenable_n的一些例子,其中假定從端口是一個32位的外部存儲器。
表4.3 32位從端口字節使能的使用 |
|
byteenable_n[3:0] |
寫行爲 |
0000 |
Write full 32-bits |
1100 |
Write lower 2 bytes |
0011 |
Write upper 2 bytes |
1110 |
Write byte 0 only |
1011 |
Write byte 2 only |
1.4.3.2 具備固定等待週期的從端口寫傳輸
具備固定等待週期的從端口寫傳輸使用的信號與基本寫傳輸使用的相同,不一樣點只是信號的時序:Avalon總線模塊在每次總線傳輸時都會插入固定數量的等待週期。
具備等待週期的從端口寫傳輸一般用於不能在一個總線週期內從Avalon總線模塊捕獲數據的外設。在邊種狀況下Avalon總線模塊在第一個總線週期中提供address、writedata、byteenable、write_n和chipselect信號。這和基本寫傳輸開始時同樣。在等待期間,這些信號保持穩定。在固定數量的等待週期後從端口捕獲來自Avalon總線模塊的數據。此後傳輸結束,Avalon總線模塊同時使全部信號失效。
例4.7顯示了具備一個等待週期的從端口寫傳輸實例。
時序說明:
(A) 寫傳輸開始於clk上升沿;
(B) Writedata、address、byteenable_n、write_n信號有效;
(C) Avalon總線模塊對address譯碼,並向從端口設置有效的chipselect;
(D) 在第一個(也是惟一一個)總線等待週期在該clk上升沿結束。全部來自Avalon總線模塊的信號保持不變;
(E)從端口在該clk上升沿或以前捕獲writedata、address、byteenable_n、write_n
和chipselect,寫傳輸到此結束。另外一次讀或寫傳輸能夠開始於下一個總線週期。
1.4.3.2 具備外設控制等待週期的從端口寫傳輸
外設控制等待週期使用目標外設可以根據須要將Avalon總線模塊暫停任意多個總線周
期。某些外設讀取數據時所需的總線週期是不固定的。由於每次傳輸均可能遇到不一樣的條件。這種傳輸模式對於這些外設很是適用。
外設控制等待週期的傳輸模式使用了waitrequest信號,它是一個從端口的輸出信號。Avalon總線模塊在第一個總線週期中提供address、writedata、byteenable_n、write_n、和chipselect信號,這和基本寫傳輸開始時同樣。從端口若須要額外的時間來捕獲數據,它必須在下一個時鐘上升沿以前設置waitrequest有效。當waitequest有效後,Avalon總線模塊便暫停工做,使得address、writedata、byteenable_n、write_n和chipselect信號保持穩定。在從端口設置waitrequest無效後,總線傳輸在下一個時鐘上升沿結束。
Avalon總線模塊沒有超時機制來限制從端口強制總線暫停的時間。當Avalon總線模塊被暫停後,系統模塊內的某個主外設也被暫停,並等待着從端口讀取寫入的數據。這樣就使得一個從外設可以將主外設永久地「掛起」。所以,外設必須保證不會使waitrequest無限期地保持有效。
例4.8顯示了一個具備外設控制等待週期的從端口寫傳輸的實例。
時序說明:
(A) 寫傳輸開始於clk上升沿;
(B) Address、writedata、byteenable_n、和write_n信號有效;
(C) Avalon總線模塊對address譯碼,而後置chipselect有效;
(D) 從端口在下一個clk上升沿以前置waitrequest有效;
(E) Avalon總線模塊在該clk上升沿讀取waitrequest。若是waitrequest有效,這
個總線週期就成爲一個等待週期,address、writedata、byteenable_n和write_n信號保持不變;
(F-G)waitrequest一直保持有效,這能夠佔用任意多個總線週期;
(H) 從端口最終捕獲了writedata;
(I) 從端口置waitrequest無效;
(J) 寫傳輸在下一個clk上升沿結束。另外一次總線傳輸能夠開始於下一個總線週期。
若一個從端口採用了外設控制等待週期的寫傳輸模式,對該端口的其它傳輸模式會有一些限制,好比不能再使用創建時間和保持時間。這些限制隻影響該從端口,不影響鏈接到Avalon總線模塊上的其它外設。在大多數狀況下,產生waitrequest信號的外設是片上的同步外設,不須要考慮創建時間和等待時間。
例4.8 具備外設控制等待週期的從端口寫傳輸
1.4.3.4 具備創建時間和保持時間的從端口寫傳輸
Avalon總線模塊按照用戶設定或者外設默認,可以自動知足各個從端口信號的創建時間要求,發起讀傳輸的主外設沒必要考慮各個信號對創建時間與保持時間的要求。具備創建時間的從端口寫傳輸使用的信號與基本使用的相同,不一樣點只是信號的時序。
這種傳輸方式一般用於一些片外外設,它們要求在write_n脈衝的先後address、byteenable_n、wretedata和chipselect信號須要穩定一段時間。一個非零的創建時間M意味着在address、byteenable_n、wretedata和chipselect信號提供給從端口以後,在write_n有效以前有M個總線週期的延遲。一樣地,一個非零的保持的保持時間N意味着在write_n失效後,address、byteenable_n、wretedata和chipselect保持N個總線週期的穩定。要注意chipselect不受創建時間與保持時間的影響,若外設對於write_n和chipselect都要求有創建時間和保持時間,用戶必須手工向從端口接口添加適當的邏輯(一個與門)。
完成總線傳輸所須要的總線週期的總數取決於創建時間、等待週期和保持時間的總線週期數。例如,若一個外設具備參數Setup_Time=」2」、Read_Wait_States=」3」和Hold_Time=」2」,它將花費8個總線週期來完成傳輸:2個總線週期的創建時間,3個總線週期的等待週期,2個總線週期的保持時間,1個總線週期用來捕獲數據。
從端口沒必要同時使用創建時間與保持時間,只有創建時間或只有保持時間的傳輸也是能夠的。例4.9顯示了同時具備創建時間和保持時間的從端口寫傳輸。
例4.9 具備創建時間和保持時間的從端口寫傳輸
時序說明:
(A) 第一個總線週期開始於clk上升沿;
(B) Address、byteenable_n、和writedata信號有效,write_n仍保持無效;
(C) Avalon總線模塊對address譯碼,而後置chipselect有效;
(D) 該clk上升沿標誌着創建時間總線週期結束;
(E) Avalon總線模塊置write_n有效;
(F) Avalon總線模塊下一個clk上升置write_n無效;保持時間總線週期開始,
Address、byteenable_n、writedata和chipselect信號失效,寫傳輸到此結束。
若是一個外設可以同時支持讀和與傳輸,而且指定了創建時間,那麼讀傳輸和寫傳輸具備一樣的創建時間。
1.5 Avalon主端口傳輸
Avalon主端口傳輸信號
1.6 高級Avalon總線傳輸之流傳輸模式
流傳輸模式在流模式主外設和流模式從外設之間創建一個開放的傳爲信道以提供連續的數據傳輸。這個信道使得只要存在有效數據便能在主從端口對之間流動,主外設沒必要爲了肯定從端口是否可以發送或接收數據而不斷地訪問從外設的狀態寄存器。流傳輸模式使得主從端口二者之間的數據吞吐量達到最大,同時避免了外設的數據上溢或下溢。它對於DMA傳輸特別重要。例如一個DMA控制器可能只包含簡單的流控制信號和一個計數器,它用來在一個從外設和一個存儲器之間連續地傳輸數據。
1.6.1 流模式從端口傳輸
除了在基本從端口中使用的信號以外,流模式外設的接口中又引入了三個信號:
readfordata、dataavailable和endofpacket。流模式從端口就是指使用了一個或多個上
上述信號的從端口。從端口經過設置readyfordata有效來表示它已準備好接受來自Avalon總線模塊的寫傳輸。從端口經過設置dataavailable有效來表示它已可以爲來自Avalon總線模塊的讀傳輸提供數據。當這些信號無效時,會迫使Avalon總線模塊(以及發起傳輸的流模式主端口)等待,直到從端口準備好繼續爲止。
Avalon總線模塊只在readyfordata或dataavailable有效時纔會發起傳輸的行爲(僅適用於在流模式主從端口對之間傳輸的狀況)。非流模式的主端口可能隨時向從端口發起傳輸,無論從端口是否爲流模式端口。例如,Avalon總線模塊能夠向一個流模式從端口發起一個來自於非流模式主端口(CPU)的從傳輸,即便此時另外一個來自流模式主端口(DMA控制器)的傳輸正由於dataavailable無效而在等待。
在任何傳輸期間,流模式從端口能夠設置endofpacket信號有效。此信號經過Avalon總線模塊傳遞到主外設以便它能響應。對於endofpacket信號的解釋取決於用戶設計。Endofpacket信號不保證Avalon總線模塊會中止到從端口的傳輸流。例如,endofpacket能夠用做包描述器,使得主外設能在一個長的數據流中知道包的開始與結束位置。此外,endofpacket也可設計爲用來中斷傳輸流,迫使主端口稍後繼續進行讀或寫傳輸。
流模式從端口讀傳輸
流模式從外設經過設置dataavailable有效來表示它可以接收讀傳輸。Avalon總線模塊在dataavailable無效時不能發起讀傳輸。當dataavailable有效時,Avalon總線模塊可以經過在一個clk上升沿設置chipselect有效來開始一次讀傳輸,這與其它的Avalon總線類似。Read_n、byteenable_n和readdata的時序與通常的從端口傳輸相同。用戶能夠設置創建時間和等待週期,包括外設控制的等待週期。
在傳輸結束後,若是外設不能當即爲之後的讀傳輸提供數據,則必須置dataavailable無效,使得Avalon總線模塊不會試圖在下一個clk上升沿發起另外一次新的讀傳輸。當外設置dataavailable無效時,會迫使Avalon總線模塊將到這一從端口的chipselect、read_n、address和byteenable_n置爲無效。所以,在外設將dataavailable再次置爲有效以前,Avalon總線不會對該從端口發起另外一次讀傳輸。若是流模式主端口在從端口的dataavailable無效時發起了一次讀傳輸,Avalon總線模塊會簡單地迫使主端口等待,直到從端口可以再次傳輸數據。
Avalon總線規範不規定endofpacket的功能,該信號只是簡單地經過Avalon總線模塊
傳遞給主端口。從端口應當在設置有效的readdata的同時設置endofpacket有效,這使得主端口能夠在捕獲readdata的同時捕獲endofpacket。從端口能夠每次傳輸都使endofpack失效,也能夠無限期地使endofpacket有效,並等待主端口將它復位。
例4.17顯示了流模式從端口讀傳輸。在這個例子中,假定一個Avalon流模式主外設發起了一個流傳輸模式讀序列,傳輸在從端口的dataavailable有效時開始,此外假定主端口會接二連三地發起流傳輸操做。在傳輸中的某一時刻,從端口使dataavailable失效,迫使Avalon總線模塊以及主端口等待。此後從端口再次設置dataavailable失效,Avalon總線模塊繼續從端口讀取數據。在本例中,注意數據是從一個固定的從端口地址中讀出的。從端口每次都提供新的數據。這種操做在寄存器控制的外設是常見的,例如UART和SPI。
例4.17中的從端口在使dataavailable失效以前的最後一個數據單元上設置endofpackete 有效。這不是必須的,endofpacket同dataavailable以及主外設如何響應沒有內在的聯繫。當dataavailable仍舊有效時,Avalon總線模塊使chipselect和read_n失效,從而結束了傳輸序列。這意味着是主端口,而不是從端口,有權結束傳輸序列。
例4.17 流模式從端口讀傳輸
流模式從端口寫傳輸
流模式從外設經過設置readfordata有效來表示它可以接受寫傳輸。Avalon總線模塊在readyfordata無效時不能發起傳輸。當readfordata有效時,Avalon總線模塊可以經過在一個clk上升沿設置chipselect和address有效來開始一次寫傳輸。這與其它Avalon總線寫傳輸類似。Write_n、byteenable_n和readdata的時序與通常的從端口寫傳輸相同。基於系統PTF文件中的聲明,傳輸可使用創建時間、保持時間和等待週期,包括外設控制的等待週期。
在一次傳輸結束後,若是外設不能接受隨後的寫傳輸數據,則必須置readyfordata無效,使得Avalon總線模塊不會在下一個clk上升沿發起另外一次寫傳輸。當外設使readyfordata失效時,會迫使Avalon總線模塊將送到這一從端口的chipselect、write_n、address和byteenable_n置爲無效。所以,在外設將readyfordata再次置爲有效以前,Avalon總線模塊不會對該從端口發起另外一次寫傳輸。若是流模式主端口在從端口的readyfordata無效時發起了一次寫傳輸(或繼續地起連續的傳輸),Avalon總線模塊會簡單地迫使主端口等待,直到能再次從從端口捕獲數據。
Avalon總線規範不規定endofpacket的功能。該信號只是簡單地經過Avalon總線模塊傳輸給主端口。從端口應該在它從Avalon總線模塊捕獲了writedata後當即設置endofpacket有效。並且必須在chipselect失效前設置endofpacket有效,以便主端口能在同一總線傳輸中捕獲endofpacket。從端口能夠每次傳輸都使endofpacket失效,也能夠無限期地使endofpacket有效,並等待主端口將它復位。若是流模式從外設須要必定的保持時間(很是少見的狀況),那麼endofpacket應該保持有效直至Avalon總線模塊使chipselect失效(即便write_n已失效後)。
例4.18顯示了流模式從端口寫傳輸。在這個例子中,假定一個Avalon流模式主外設發起了一個流傳輸操做序列,傳輸在從端口的readfordata有效時開始。此外假定主端口會接二連三地發起寫傳輸。在傳輸序列中的某一時刻,從端口使readyfordata失效,迫使Avalon總線模塊以及主端口等待。此後從端口再次設置readyfordata有效,Avalon總線模塊繼續從端口寫傳輸序列。在本例中,注意數據是向一個固定的從端口地址寫入的。這在操做一個寄存器控制的外設時是常見的,例如UART和SPI。
例4.18顯示了從端口在寫傳輸序列期間設置endofpacket有效。這種操做依賴於主外設和從外設的設計。Endofpacket同readyfordata以及主外設如何響應沒有內在的聯繫。當readyfordata仍舊有效時,Avalon總線模塊使chipselect和write_n失效,從而結束了傳輸序列。這意味着是主端口,而不是從端口,有權結束傳輸序列。
例4.18流模式從端口寫傳輸
時序說明:
(A) 第一個總線週期開始於CLK上升沿;
(B) 從Avalon總線到從端口的鎖存輸出address、write_n和writedata有效;
(C) Avalon總線模塊對address譯碼,而後置chipselect有效;
(D) 若有必要,從端口在當前總線傳輸的最後一個clk上升沿以前置endofpacket
有效。在本例中,從端口在一個總線週期後使endofpacket失效,但這對於不一樣的外設設計可能會不一樣;
(E) 從端口在該clk上升沿捕獲writedata和address;
(F-G) 在chipselect和write_n保持有效的每一個總線週期中,Avalon總線模塊都產生有效的writedata,且從端口必須在下一個clk上升沿捕獲數據。在本例中,address保持不變,但並非全部的外設設計都是如此;
(H) 流模式從端口使readyfordata失效,迫使Avalon總線模塊擱置全部後續的流模式寫傳輸。注意此時write_n、chipselect和writedata仍然保持有效,代表流模式主端口仍在等待傳輸的結束。做爲對readyfordata的響應,Avalon總線模塊隨後使address、write_n、chipselect和writedata失效;
(I) 在隨後的某一時刻,從端口再次設置readyfordata有效;
(J) 爲響應readyfordata,Avalon總線從新設置address、write_n、chipselect和writedata有效。注意若是沒有掛起的流傳輸操做,這些信號會繼續保持有效。一個新的流模式寫傳輸開始於下一個clk上升沿;
(K-L) 從端口在該clk上升沿捕獲writedata。在chipselect和write_n保持有效的每個總線週期,Avalon總線模塊提供有效的writedata;;
(M) Avalon總線模塊使write_n和chipselect失效,代表如今沒有掛起的流傳輸操做了。在本例中readyfordata繼續保持有效,代表另外一次流傳輸操做能夠開始於隨後的任一總線週期。