當前位置:編程學習大全網 - 編程語言 - DE-10 Standard HPS SOC和FPGA聯合使用例程

DE-10 Standard HPS SOC和FPGA聯合使用例程

在開始本教程之前,請註意演示項目準備需要以下內容:

在Intel SoC FPGA中,HPS邏輯與FPGA結構通過AXI(Advanced eXtensible Interface)橋進行連接。為了實現HPS邏輯與FPGA 結構的通信,需要通過使用Intel系統集成工具Qsys添加HPS組件來進行系統設計。從HPS組件的AXI主端口,HPS可以訪問那些連接到AXI主端口的內存映射從端口。

HPS包含以下HPS-FPGA AXI橋

下圖顯示了FPGA結構和L3與HPS互連的AXI橋的框圖。每個主(M)接口和從(S)接口顯示其數據寬度。括號中標註了每個互連的時鐘域。

HPS-to-FPGA橋由3級(L3)主開關控制,輕量級控制HPS-to-FPGA橋由L3從外圍從開關控制。

FPGA-to-HPS橋接控制L3主開關,允許任何在FPGA結構的主實現(implemented)去訪問在HPS中大多數從實現。

所有三個橋都包含全局程序員視圖GPV寄存器。GPV寄存器控制網橋的行為。通過輕量級的HPS-to-FPGA橋訪問可以所有三個橋的GPV寄存器。

這個例程向用戶介紹了如何使用HPS/ARM與FPGA進行通信。這個與DE10-Standard板上ARM C程序配套的GHRD工程,演示了HPS/ARM程序如何控制連接到FPGA部分的紅色LED。

術語GHRD是黃金硬件參考設計(Golden Hardware Reference Design)的簡稱。友晶科技為DE10-Standard開發板提供的GRD項目位於CD文件夾中: CD-ROM\Demonstration\SOC_FPGA\ DE10_Standard_GHRD。

本項目由以下組成部分組成:

MPU所看到的SoC FPGA部分的系統外圍設備的內存映射從輕量級的HPS-to-FPGA到FPGA的基礎地址0xFF20_0000開始。MPU可以通過Qsys中的地址偏移來訪問這些外圍設備。用戶可以打開GHRD項目與Quartus II軟件。然後打開soc_system。qsys文件與qsys工具。下圖列出了連接到輕量級HPS-to-FPGA的外圍設備的地址映射。

這些外設的所有Avalon引出信號( Avalon Conduit signals)都連接到DE10-Standard板上SoC FPGA的I/O引腳,如圖所示

在實際的應用過程中,友晶科技提供的DE10_Standard_GHRD工程並不是十分契合我們的開發需要,這可能包括外圍設備的冗余和不足。下面為了實現本教程開篇所定的目標,我們需要根據DE10_Standard_GHRD工程進行修改。其中友晶科技提供的DE10_Standard_GHRD工程實現的是LEDR0通過閃爍模擬板子的心跳, LEDR1-9 按照壹定頻率進行左移右移循環閃爍60次;我們的目標是LEDR0通過閃爍模擬板子的心跳, LEDR1-8 按照壹定頻率進行左移右移循環閃爍60次, LEDR9 在LEDR1-8的每壹次循環後閃爍壹次。可以看出,我們只需要將DE10_Standard_GHRD工程中的LEDR9的設計進行更改就可以打到我們的目的。下面正式開始更改操作。

新建文件夾: E:\work\Quartus\My_GHRD ,然後將DE10_Standard_GHRD工程目中的壹下文件復制到工程目錄下:

因為其中的文件DE10_Standard_GHRD.v後面將會被指定為頂層文件,所以需要將其更改為與工程名My_GHRD相同的My_GHRD.v文件,同時為了與工程名保持協調,我們也將文件DE10_Standard_GHRD.sdc更改為與工程名My_GHRD相同的My_GHRD.sdc。最終工程目錄文件夾如下圖所示:

首先,建立壹個名為:My_GHRD的工程。打開軟件Quartus Prime Standard Edition,點擊:File→New Project Wizard…,進入工程創建引導界面。

點擊引導界面下方的:Next,進入Directory, Name, Top-Level Entity設置界面。

點擊右側按鈕:…選擇妳的工程目錄 E:/work/Quartus/My_GHRD 。之後設置工程名: My_GHRD 。此時軟件將自動把頂層設計entity name設置為工程名: My_GHRD 。繼續點擊:Next,進入Project Type設置界面。

在Project Type界面選擇:Empty Project選項,繼續點擊:Next,進入Add Files設置界面。

在Add Files設置界面,點擊右側按鈕:…,添加工程目錄下的文件:My_GHRD.v和soc_system.qsys以及文件夾hps_isw_handoff和ip下的所有文件進入工程。

然後點擊:Next,進入Family, Device & Board Settings設置界面。

在Family, Device & Board Settings設置界面,我們要設置我們所用的SoC FPGA型號:5CSXFC6D6F31C6N。為了能夠快速鎖定我們要選擇的SoC FPGA型號,我們可以點擊:Device下拉列表,選擇:Cyclone V SX Extended Features,以縮小選型範圍。

然後,選擇Available devices下的5CSXFC6D6F31C6。繼續點擊:Next,進入EDA Tool Settings設置界面。

在EDA Tool Settings設置界面下,我們保留默認設置。之後點擊:Fnish,完成工程創建,退出工程創建引導界面。

由於我們需要在DE10_Standard_GHRD工程的基礎上更改Qsys的設計來實現對LEDR9的單獨控制,所以我們需要在Qsys中添加壹個1位的PIO端口來實現對LEDR9的控制,同時需要將原來用於同時控制LEDR0-9的10位PIO端口的改為9位的PIO端口。

依次點擊:Tools→Qsys,啟動Qsys,之後選中要打開的soc_system.qsys文件。

此時將彈出“ PIO(Parallel I/O) ”設置界面。將PIO的數據寬度Width設置為:1,數據輸入輸出方向Direction設置為:Output。最後點擊右下角的Finish按鈕退出設置。

現在,新的Qsys設計中將會出現我們新添加的PIO端口pio_0,我們可以對其進行重命名。光標移動到在端口名pio_0處,右鍵選擇“Rename”,重命名為:led_pio9。點擊空白處保存命名。

之後我們需要對led_pio9組件的信號進行連接,將光標放置到下圖中led_pio9組件中clk信號所在行的白點處,點擊後可以將led_pio9組件中clk信號與clk_0組件的clk信號進行連接,可以表示為:led_pio9.clk—clk_0.clk。使用類似的操作,將led_pio9組件的其它信號分別與其它組件進行如下連接,最終的連接關系如下:

如下圖:

其中led_pio9有壹個信號led_pio9.external_connection需要進行對外引出。光標置於信號led_pio9.external_connection處右擊選擇:Connections:led_pio9.external_connection→Export as: led_pio9_external_connection。

到此,添加壹個1位的PIO端口led_pio9的操作已經完成。

接下來需要將原來控制LEDR0-9的數據寬度為10位的PIO端口led_pio更改為只用控制LEDR0-8的數據寬度為9位的PIO端口led_pio。雙擊組件led_pio,將數據寬度Width(1-32 bits)設置為:9,關閉Parameters窗口將自動保存更改。

現在,我們要為我們新添加的PIO端口led_pio9分配基地址,同時更新Qsys設計中其它組件的基地址。依次點擊:System→Assign Base Addresses。

可以看出,至此,我們需要在Qsys設計中做的更改已經完成了。現在,只要重新生成相應的HDL文件,更新Qsys設計就可以結束Qsys部分的設計了。但是後面對工程編譯時軟件將會輸出錯誤提示:

Error (10228): Verilog HDL error at soc_system_sysid_qsys.v(34): module “soc_system_sysid_qsys” cannot be declared more than once。

更令人遺憾的是,目前本人還沒有找到解決上述錯誤信息的辦法。有壹個無奈的辦法就是:將Qsys設計中的soc_system_sysid_qsys組件刪除。這不會影響Qsys設計的功能,關於該組件功能的詳細介紹,讀者可以自行查找,此處不再贅述。

刪除soc_system_sysid_qsys組件的辦法是:將soc_system_sysid_qsys組件sysid_qsys的Use列方框中的“√”去掉。

之後進行Qsys設計中的文件生成工作。點擊右下角的Generate HDL…按鈕。

在彈出的“Generation”窗口中,確認Output Directory下Path所指定的生成文件的輸出目錄在工程目錄下。然後點擊Generate按鈕。

接下來會彈出“Save System Completed”窗口,點擊右下角的Close按鈕。

接下來會彈出的“Generate”窗口,等待幾分鐘,文件生成工作完成後,右下角的“Close”按鈕會高亮顯示。此時,點擊“Close”按鈕。

最後,又會退回到Qsys設計頁面,點擊右下角的Finish按鈕,退出Qsys設計。

在返回Quartus Prime Standard Edition主界面後,會提示我們把更新後的.qip和.sip文件重新手動添加到工程中來。點擊提示窗口右下角的Close按鈕。

現在,我們來手動添加更新後的.qip和.sip文件。右擊Project Navigator窗口中工程名:My_GHRD。點擊Settings…選項。

接下來會彈出Category界面,點擊右側的…按鈕。

此時會彈出Select File界面,在指定的目錄下找到生成的soc_system.qip文件並選中,然後點擊右下角的“打開”按鈕。

最後,可以在返回的Catagory界面中可以看到生成的soc_system.qip文件已經被成功添加到工程中。

在上述界面中可以看到文件:hps_reset_bb.qip和hps_reset_bb.v,這壹組文件的定義了模塊:hps_reset。但是,由於 文件:hps_reset.qip和hps_reset.v這壹組文件同樣也定義了模塊:hps_reset,所以hps_reset_bb.qip和hps_reset_bb.v的加入會導致模塊:hps_reset的重復定義。

現在我們需要將文件:hps_reset_bb.qip和hps_reset_bb.v進行移除。選中文件:hps_reset_bb.qip和hps_reset_bb.v,點擊右側的Remove按鈕移除文件。最後,點擊右下角的OK按鈕退出該界面。

至此,工程My_GHRD中Qsys部分的設計已經完成。接下來我們需要對工程中的硬件描述文件.v文件進行修改。其實,我們在DE10_Standard_GHRD工程的基礎上只用對My_GHRD中頂層實體文件My_GHRD.v中各個模塊的引腳及其連接關系進行描述即可。

在此之前,我們先指定我們的頂層實體文件My_GHRD.v。點擊Project Navigator窗口中Hierachy按鈕,會彈出下拉列表,我們點擊File選項。

找到工程中的My_GHRD.v,右擊選擇Set as Top-Level Entity。

我們雙擊Project Navigator窗口中工程名My_GHRD,此時軟件將會打開工程的頂層實體文件My_GHRD.v

對頂層實體文件My_GHRD.v的修改主要有以下各處:

第壹,頂層實體模塊的命名須與工程名My_GHRD保持壹致。

第二,在模塊soc_system u0中對新引出的PIO端口led_pio9_external_connection_export進行聲明。可以發現,我們聲明端口led_pio9_external_connection_export的同時需要為其指定壹個wire類型的變量進行連接。對照led_pio_external_connection_export連接到wire類型的變量fpga_led_internal上,我們新定義了壹個wire類型的變量fpga_led9_internal與端口led_pio9_external_connection_export進行連接。當然,wire類型的變量fpga_led9_internal可以理解為是壹條導線,它的壹端接到了模塊soc_system u0中對新引出的PIO端口led_pio9_external_connection_export上,兩外壹端也是要為它連接適當的端口的。我們新增端口led_pio9_external_connection_export的目的就是能夠對LED燈LEDR9進行控制,所以,不難想到,wire類型的變量fpga_led9_internal另壹端壹定是要連接到端口LEDR[9]上面的。這樣,總體的更改就是下面這樣的:

現在,我們可以對工程My_GHRD進行編譯操作。首先是進行工程的分析與綜合,依次點擊:Processing→Start→Start Analysis & Synthesis。

工程的分析綜合通過後,主界面中左側的Tasks窗口下的Analysis & Synthesis欄前面會展示壹個綠色的“√”,後面會顯示分析綜合所用的時間。

上面分析綜合成功後,下壹步需要進行Fitter(Place & Route),這裏進行的是關於FPGA內部的布局布線操作。在此之前我們需要對我們模塊中設計的輸入輸出引腳進行引腳分配。引腳分配的方法有很多種,讀者可以自行學習。這裏由於我們定義了大量的引腳,而且我們有現成的DE10_Standard_GHRD工程可以利用,我們只需將該工程裏面的引腳分配信息轉移進入我們的My_GHRD工程就可以了。

我們現在打開DE10_Standard_GHRD工程。進入工程後,我們點擊:Assignments→Pin Planner,進入引腳分配界面。

在該界面下,點擊:File→Export…。

之後會彈出Export窗口。我們需要選擇我們要導出的文件格式為:.tcl。

然後,點擊右下角的Export按鈕。

最後,依次點擊引腳分配界面和DE10_Standard_GHRD工程界面右上角的關閉按鈕,退出DE10_Standard_GHRD工程。

我們現在已經得到了我們需要的引腳分配文件DE10_Standard_GHRD.tcl,現在我們需要把它從DE10_Standard_GHRD工程目錄下復制到My_GHRD工程目錄下。為了與My_GHRD工程名保持壹致,將其改名為:My_GHRD.tcl。

接下來,我們需要利用得到的引腳分配文件My_GHRD.tcl對工程My_GHRD中的引腳進行分配。點擊:Tools→Tcl Scripts…。

在彈出的Tcl Scripts窗口下,點擊右側的Add to Project…按鈕。

在彈出的Add to Project窗口下,選中我們的引腳分配文件My_GHRD.tcl,並點擊右下角的打開按鈕。

此時,軟件又自動退回到Tcl Scripts窗口下。在Libraries欄中找到我們的引腳分配文件My_GHRD.tcl,點擊下方的Run按鈕來加載我們的引腳分配文件。

在後面彈出的界面中點擊OK按鈕,退回到Tcl Scripts窗口。

最後點擊到Tcl Scripts窗口下方的Close按鈕退出到Tcl Scripts窗口,回到工程主界面。

此時,點擊主界面的:Assignments→Pin Planner進入引腳分配界面。

在引腳分配界面中,可以看到,引腳大部分已經被分配完成,未分配的引腳暫時不用擔心它們,我們還沒有用到。

現在,我們開始對工程進行布局布線。點擊:Processing→Start→Start Fitter。

工程的布局布線通過後,主界面中左側的Tasks窗口下的Fitter(Place & Route)欄前面會展示壹個綠色的“√”,後面會顯示布局布線所用的時間。

到此,基本上我們可以判斷在邏輯上我們的設計已經沒有問題了,接下來我們是可以進行工程的全編譯了。但是,在實際的應用設計中我們還要考慮對信號的時序進行約束,尤其是具有 SDRAM DDR3這種高速存取器件的設計中。對於時序約束,我們可以利用DE10_Standard_GHRD工程中的時序約束文件:DE10_Standard_GHRD.sdc。同樣的,將其復制到My_GHRD工程目錄下,改名為:My_GHRD.sdc。

將時序約束文件添加進入工程,右擊Project Navigator窗口下的工程名:My_GHRD,點擊:Setting…按鈕。

接下來會彈出Category界面,點擊右側的…按鈕。

此時會彈出Select File界面,進入工程主目錄下,點擊右下角的文件類型選擇按鈕,選中:Script Files( * .tcl .sdc .pdc*.qip)壹項。

下找到時序約束文件My_GHRD.sdc並選中,然後點擊右下角的“打開”按鈕。

最後,可以在返回的Catagory界面中可以看到時序約束文件:My_GHRD.sdc文件已經被成功添加到工程中。依次點擊右下角的Apply按鈕和OK按鈕退出該界面。

此時已經回到工程主界面,我們可以進行工程的全編譯了。點擊Processing→Start Compilation。

本節將介紹如何設計壹個ARM C程序來控制PIO控制器led_pio。SoC EDS用於編譯C項目。為了讓ARM程序控制PIO組件led_pio,我們需要led_pio地址。使用Linux內置驅動程序’ /dev/mem '和mmap system-call可以將led_pio組件的物理基址映射到Linux應用軟件可以直接訪問的虛擬地址。

ARM C程序需要led_pio的組件信息,因為程序會嘗試控制組件。這部分將會描述如何使用壹個給定的Linux shell批處理文件將Qsys HPS信息提取到壹個頭文件中,這個頭文件稍後將包含在C程序中。

上面提到的批處理文件名為:generate_hps_qsys_header.sh。它與DE10_Standard_GHRD工程位於同壹個文件夾中。現在,我們要為工程My_GHRD生成頭文件。首先,從DE10_Standard_GHRD工程目錄下復制文件:generate_hps_qsys_header.sh到My_GHRD工程目錄下。

接下來,使用記事本打開批處理文件:generate_hps_qsys_header.sh,確認文件中紅線標註的路徑下有應用程序:sopc-create-header-files.exe。其中,路徑:/cygdrive/d/…表示D盤…。如果該路徑下沒有上述應用程序,讀者需自行更改其中的路徑。

註意,如果後面在SoC EDS命令shell中運行generate_hps_qsys_header.sh時,提示出現錯誤。(其實這個錯誤當時解決後忘記進行記錄,好像是提示執行文件sopc-create-header-files的過程中sopcinfo2swinfo還是swinfo2

  • 上一篇:格拉斯哥大學JAVA編程2課程?
  • 下一篇:計算復雜性理論及相關理論中NP與P的關系
  • copyright 2024編程學習大全網