2015-12-09 38 views
-2

實施例: 讓我們假設有上發送一個隨機FPGA(或每秒)的字符串通過SPI接口附接的顯示器運行的Nios。另一方面,有監視按鈕的FPGA代碼。每按一次此按鈕應發送一個字符串到相同的附加顯示。如何在Nios和FPGA之間進行交互?

問題: 工作原理通常或在這樣的情況下描述的FPGA和的Nios之間的相互作用(或通信)?當代碼在FPGA代碼下運行時,如何通知Nios該按鈕被按下?也許有一個關於這個話題進行了解它是如何工作的文件...

在此先感謝

+0

我敢肯定,網上有很多重播,還有關於這個主題的書籍。 – wahab

+0

啊哈,結論是什麼... – Norick

回答

2

低速或高速?

對於低速,將帶有足夠I/O「引腳」的GPIO內核插入NIOS系統並重新構建。將硬件連接到這些引腳,並使用GPIO驅動程序代碼訪問它們。完成。按鈕算作低速。 SPI也可以,儘管你可能會發現NIOS更好的SPI外設,所以我會使用它。爲了高速,您需要設計一個與NIOS系統使用的任何總線接口的外設(IP核),並提供所需的所有寄存器,存儲器,中斷源等,以便連接到您的VHDL硬件。有很多示例外設可以用作起點。然後,您可以再次從示例代碼開始編寫驅動程序軟件以訪問該外設。

這是一個更復雜的項目,雖然它比GPIO快得多,你會發現「高速」是相對的;與定製硬件相比,任何嵌入式CPU都非常慢。我們不是在這裏談論2的因素,而是數量級。


編輯:無論接近你使用,如上文所述,從軟件方面的硬件交互通過驅動軟件做得最好。

如果你在哪裏,你必須編寫自己的驅動程序的情況下,那麼你聲明變量對每個訪問的寄存器或內存塊(由數組變量來表示)相匹配。通常,供應商工具可以根據VHDL代碼或其他描述爲您創建一個框架驅動程序。我不知道Altera/Nios工具是如何建立的,但他們肯定有教程來教你使用它們的方法。

如果你有一個Ada編譯就可以在包範圍聲明這些變量,以保持適當的抽象和信息隱藏。但是如果你不得不使用C,沒有包,你可能會被全局變量卡住。

您解決在每一個無論物理地址的映射的硬件他們變量,你必須聲明它們「揮發」,使訪問他們從來沒有優化到寄存器中。

如果您的硬件可以中斷CPU,你必須寫一箇中斷處理函數,用編譯指示告訴其中斷向量應該連接到編譯器。您需要從您自己的編譯器文檔中獲得確切的詳細信息,以及其他外設的驅動程序代碼示例。

我就從這裏開始: https://www.altera.com/support/support-resources/design-examples/intellectual-property/embedded/nios-ii/exm-developing-hal-drivers.html

與示例代碼和短暫的「指引」的文件

,並使用NIOS software handbook進行更深入。

爲了幫助您找到想要的內容,顯然Altera使用術語「HAL」(硬件抽象層)來描述直接訪問硬件的驅動程序部分,以及「BSP」(板卡支持包)這些設施可以讓您將軟件描述給工具 - 並且可以描述您的軟件團隊。任何構建骨架驅動程序的工具都將與BSP相關聯:我在軟件手冊中看到一個名爲「創建新的BSP」的小節。

+0

我不確定我們是否在談論同一主題。問題是如何在Nios和FPGA(vhdl)代碼之間進行交互。我可以使用一個「全局」變量,例如我可以在Nios代碼下查看嗎?我如何在FPGA vhdl代碼和Nios代碼之間進行通信? – Norick

+0

我通過驅動程序軟件回答了這個問題。編輯了一些細節。 –

+0

我認爲這很好地回答了這個問題。我一直在尋找這樣的教程或工具來創建一個「骨架驅動程序」,但我找不到任何東西。有誰知道在哪裏可以找到Altera(Nios)Max10? – Norick

相關問題