歡迎您光臨本站 登入註冊首頁

概述

   隨著電子技術的發展,電子系統設計的規模和複雜程度不斷的加大,與此同時,人們對電子產品的各方面性能的要求都在不斷的升高,對於開發商來說,以最快的速度,開發出滿足市場需……

    隨著電子技術的發展,電子系統設計的規模和複雜程度不斷的加大,與此同時,人們對電子產品的各方面性能的要求都在不斷的升高,對於開發商來說,以最快的速度,開發出滿足市場需要的電子產品是最根本的目的。顯然,傳統的硬體、軟體單獨設計的方式很難滿足人們這種快速增長的需求。近年來,電子行業提出了軟硬體協同起來進行設計的思想,SOPC就是在這種需求下由ALTERA 公司提出的一種軟硬體協同設計的解決方案。它將硬體的設計集中到一個高度集成的FPGA 晶元中,對於特殊的應用設計,可以根據需要靈活的配置系統的硬體。而這一目標的實現是基於NIOS 處理器以及其他一些用戶可選的IP 核。雖然這種方法,給設計帶來了極大的方便,但是現有IP 核並不能總是能夠滿足用戶的需要。因此,進行SOPC 開發,很有必要學習一下定製NIOS 外設的方法和技巧。本文就是基於這種目的,詳細的論述了在NIOS 系統中A/D 數據採集介面的設計與實現,以供大家參考。

1 問題的提出
    在NIOS 系統中實現外部模擬數據的採集,可以有很多種方法,比較傳統的是,在外部由一個控制器控制數據採集的過程,然後再利用標準的介面和上位機連接,進行數據傳輸,實現數據的採集。比較常見的標準介面有串列口、USB 口。但是在FPGA 中實現這些介面邏輯不僅複雜,而且還需要外部主控制器來控制數據的採集和傳輸。對於NIOS 系統而言,它是建立在有著大量邏輯資源的FPGA 晶元上的,如果用它實現複雜的邏輯,然後還要外部控制器的配合,而目的只是進行外部數據的採集,顯然這是不可取的。如果能夠有一種簡單的方法,不僅可以滿足用戶的設計要求,而且不需要其它的外部主控制器,這將是一種很好的選擇。因此,最好的方式應該是直接在FPGA 晶元上根據需要靈活的去實現控制邏輯介面。
    如上所述,在FPGA 上系統中,實現對外部A/D 數據採集電路的控制介面邏輯,由於其邏輯功能不是很複雜,採用自定義的方式將是非常可取的。採用這種方法進行設計有兩種途徑。
①從軟體上去實現。這種方案將NIOS 處理器作為一個主控制器,通過編寫程序來控制數據轉換電路,實現數據採集。採用這種方法,在實現的時候會出現一些問題,由於NIOS處理器的工作頻率相對於外部設備來說要高出許多,因此,我們無論是採用查詢的方式還是採用中斷的方式,都會造成CPU 資源極大的浪費,用查詢的方式CPU 將會出現大量的等待,用中斷的方式系統又會頻繁被中斷。無論怎樣,犧牲CPU 的性能來解決功能上的問題是不可取的,當然,在這種情況下如果採用DMA(內存直接存取)的方式可以解決以上提出的問題,但是實現起來也比較複雜。
②用FPGA 的邏輯資源來實現A/D 採集電路的控制邏輯。我們知道FPGA 有著豐富的邏輯資源和介面資源,在其中實現并行的數據採集很少會受到硬體資源的限制,而且,在功能上,設計的介面控制邏輯相當於一個主控制器,它是針對具體的外部電路而實現的,容易滿足要求、又能節約資源,提高系統性能。因此,採用硬體邏輯去實現控制將是一種較好的方式,下面本文將對這種實現方式作詳細的討論。

2 設計方案
    通過對系統需求進行仔細分析,此模塊的功能設計可分為數據採集控制邏輯、數據介面、數據處理邏輯三部分,其整體功能框架圖如下:

 圖1 模塊功能框圖
說明:AVALON 匯流排主要是用於連接片內處理器與外設,以構成可編程單晶元系統。

3 功能描述

  1.  數據採集控制邏輯:產生A/D 轉換需要的控制信號。
  2.  數據介面:提供一個外部A/D 採集的數據流向AVALON 匯流排的數據通道,主要是完成速度匹配,介面時序轉換。
  3.  數據處理單元:此部分主要是提供一些附加功能,如:檢測外部信號或內部其它單元的工作狀態,進行簡單信息處理。

4 設計分析
4.1 數據採集控制邏輯
    在此以典型的模數轉換晶元ADC0804 為例,進行電路設計,ADC0804 的數據寬度為8位,數據轉換時間最快為100us,轉換時鐘信號可以由內部施密特電路和外接RC 電路構成的震蕩器產生,也可以直接由外部輸入,其頻率範圍:100KHZ~1460KHZ。在本設計中ADC0804的時鐘為最大輸入頻率,控制信號時序如圖2。
 
圖2 ADC0804 控制信號時序圖
    由ADC0804 的時序可以知道,轉換過程由一個寫信號啟動,轉換完成後,輸出INTR信號,此時可以讀取數據。之後可以進入下一個轉換周期。由ADC0804 的轉換時間可知,其最大採集頻率為10KHZ,只要用戶設置的採樣頻率不超過這個數值,ADC0804 就可以正常的工作。綜合以上考慮,設計時要注意兩點:
①寫信號的頻率要低於ADC0804 的最大轉換頻率。
②在寫信號之後至少要有100us 的時延,才能輸出讀信號。
    在此,提出兩種方法來實現ADC0804 的控制信號時序:
①主動模式,在這種模式下,控制電路啟動A/D 轉換后,在INTR 信號的作用下,輸出讀信號,同時從ADC0804 的數據匯流排上讀入數據,之後輸出一個寫信號,開始下一次轉換。由於這種方式是非同步進行的,讀
寫信號彼此之間交互的產生,因此,能夠滿足上面提出的兩點要求。採用這種方式,其難易程度與ADC0804 外部電路的接法密切相關。
②被動模式,在這種模式下,ADC0804 的讀寫信號完全由控制電路按照固定的時序產生,與其自身輸出無關。採用這種方式,可以不考慮ADC0804 的輸出,讀寫信號的產生只是用到了一個計數器,實現起來比較簡單,而且,只要採集頻率不是很高,那麼,就可以很容易滿足ADC0804 控制信號的時序要求。

4.2 數據介面
在這一部分,主要存在的問題是:相對於AVALON 匯流排信號來說,A/D 採樣的速率非常低,而且,AVALON 匯流排的介面信號和ADC0804 數據輸出的介面信號時序不一致。因此,要實現滿足要求的數據通道,要做到兩點,
①數據緩衝,實現速率匹配。
②信號隔離,實現介面時序的轉換。解決這兩點,可以將兩埠通過一個非同步的FIFO 連接,該FIFO 應該是可以在不同的時鐘信號下進行非同步的讀寫。這樣的一個FIFO 的實現可以在Quartus-II 裡面用ALTERA 公司提供的FIFO Core 進行定製。在本設計中,定製的FIFO 模塊如圖3。
 
圖3 FIFO 原理圖
    其中,data[7..0] 數據輸入埠、q[7..0]數據輸出埠、wrreq、wrclk 分別是寫允許和寫時鐘信號線、rdreq、rdclk 分別是讀允許和讀時鐘信號線,wrfull、rdempty 分別是FIFO 滿和空信號線、aclr 為非同步清空信號線,高電平有效。以下是8 位元組FIFO 邏輯模擬圖:
 
圖4 FIFO 時序模擬圖
    以上時序圖中各信號都是高電平有效。初始狀態,rdempty 有效,wrfull 無效。當寫允許信號wr 有效時,外部輸入的數據data 在寫時鐘wrclk 的作用下寫入到FIFO 的緩衝區。當有數據暫存在FIFO 中時,rdempty 變為無效。當FIFO 中已有N-1(N 為FIFO 數據緩衝區的長度)個數據時,寫入第N 個數據,wrfull 變為有效,此時外部的數據不能寫入FIFO。如圖中標誌①②,在寫入數據08 時,wrfull 為有效,導致08 沒有寫入FIFO 中。當讀允許信號rd 有效,FIFO 不為空時,在讀時鐘rdclk 的作用下數據從q 輸出。

4.3 數據處理單元
    在這一部分,設計中實現了外部數據的異常檢測,即、當外部的數據超過預設的範圍時,數據處理模塊會向處理器輸出中斷信號,通知處理器進行處理。由於此部分在實現時沒有時序上的嚴格要求,只須完成功能需求即可,其難易與其實現的功能相關,就本例實現的功能而言,邏輯描述比較簡單。

5 設計實現
    下面是綜合以上所述,在Quartus-II 中設計實現的ADC0804 數據採集介面控制模塊的原理圖。
 
圖5 A/D 數據採集控制模塊原理圖
    在圖(5)中,read、readdata、reset、irq 分別與AVALON 匯流排相同命名的信號線相連,readclk 與AVALON 匯流排中clk 相連, AD_50 與FPGA 的系統時鐘相連,wr_n、rd_n、writedata分別與ADC0804 的寫信號線、讀信號線、數據線相連。在圖(5)中,ADC0804 控制信號產生單元的實現,採用的是上文提到的被動模式,該單元以固定的時序產生讀寫信號,本設計中使用的採樣頻率約為3200HZ,此頻率可以根據用戶的需要而設定,只要不超過10KHZ 即可。
    當系統加電后,wr_n 輸出一個有效的寫信號啟動A/D 轉換,經過足夠的時間后(T=327us~328us),輸出讀信號,此時數據介面單元的寫允許信號wr_fifo 變為有效,同時外部A/D 轉換器的讀允許信號也變為有效,此後ADC0804 的數據埠上輸出有效數據,在wr_clk 的上升沿將A/D 轉換器的數據讀入FIFO。控制邏輯單元的時序模擬圖如下:
 
圖6 控制信號時序模擬
    由時序圖可以知道,在wr_fifo 有效時,ADC0804 必須在wr_clk 的上升沿到來之前在其數據埠輸出有效的數據。由於wr_clk 的周期為1us,ADC0804 的輸出鎖存由其讀引腳rd 控制,rd 變為有效即可輸出有效的數據,故只要ADC0804 的讀信號rd 在外部輸入的作用下變為有效的時間不超過500ns,讀操作就不會出現問題。又由ADC0804 的數據手冊可以知道,ADC0804 的rd 信號三態延時最大值為200ns,典型值為125ns,因此設計的控制信號產生邏輯單元滿足要求。
    當NIOS 系統需要讀取數據時,在read 和readclk 上出現的是系統AVALON 匯流排上的讀時序。時序圖如下:
 
圖7 基本從埠讀傳輸
    在AVALON 匯流排中定義了兩種類型的信號,一種是高電平有效,另一種是低電平有效。在本設計中選用的是高電平有效的類型。圖(7)是低電平有效的匯流排信號,與之對應的高電平有效的匯流排信號時序圖中,read 在有效時為高電平對應於圖(7)中的readn 的低電平部分。又由圖(4)可以看出,該匯流排讀操作時序完全滿足FIFO 讀操作時序。圖7 中,address,be-n 和chipselect 在此可以不與考慮,添加到AVALON 匯流排時,系統會自動處理其連接問題。
    當系統不讀取A/D 轉換的數據時,採集的數據由數據處理單元控制處理。數據處理單元實現了對外部信號量的異常檢測,即,當外部信號的幅值超出設定範圍時,該單元產生一個中斷信號,通知CPU 採取相關處理措施,否則,在FIFO 滿的時候,將其內容清空。

6 添加外設到NIOS 系統中
在此介紹一種相對較為簡單的方法將設計的外設介面接入NIOS 系統。步驟如下:
⑴ 在Quartus-II 中創建一個工程,完成ADC0804 和NIOS 介面模塊的相關設計。
⑵ 將設計的各部分綜合成一個.bdf 文件或是用硬體描述語言對其綜合。
⑶ 將設計的相關文件(.bdf、.verilog hdl)複製到要添加此模塊的NIOS 工程目錄下面去。
⑷ 在已有的NIOS 系統中添加用戶介面邏輯(interface to user logic ),按照添加嚮導的提示,將設計的頂層文件加入到相應的欄目中。如下圖:
 
圖8 添加用戶邏輯圖形嚮導
並要設置好信號線的類型,確定其是否是AVALON 匯流排的信號線,還是外部信號線。
⑸ 加入到NIOS 系統后,編譯,生成完整的硬體系統。
⑹ 為生成的系統創建軟體工程,編寫測試代碼。

7 總結
    以上的設計,經測試,具有較好的性能,可以不間斷無數據丟失的進行數據採集,CPU可以主動的讀取數據,也可以在數據處理單元檢測到外部異常信號時被動的獲取數據,並且CPU 讀取數據的操作極其簡單,運行時只佔用很少的CPU 資源,雖然如此,但這種實現方式也有一些缺陷,如只能以單一頻率進行採集,數據處理機制比較簡單,控制部分與ADC0804 之間缺乏交互等,這些使得最終的實現結果不是很完美。在此,僅希望本文能在如何設計NIOS 系統外設方面給讀者以參考借鑒,同時,更希望有興趣的讀者對文中留下問題作更深入的探討。

參考文獻:
[1] 《挑戰SOC—基於NIOS 的SOPC 設計與實踐》,主編:彭澄廉,清華大學出版社,2004.7。
[2] ALTERA 技術文檔,2006.8。
[3] ADC0804 數據手冊,1999.7。


[admin via 研發互助社區 ] 在NIOS-II 系統中A/D 數據採集介面的設計與實現已經有2762次圍觀

http://cocdig.com/docs/show-post-43131.html