www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 工業(yè)控制 > 電路設(shè)計項目集錦
[導(dǎo)讀]我從Digilent公司拿出了我的Arty Z7板,并在Vivado/Vitis 2021.2中創(chuàng)建了一個項目來讓它工作,你可以在我的上一個項目帖子中閱讀,我在QDSP-6061的5位數(shù)上顯示滾動文本,上面寫著“Hello 2022”。

從2022年開始,我決定瀏覽我積壓的項目想法的無窮無盡的列表,并決定打破這些很酷的老式QDSP-6061 5位氣泡顯示從惠普和創(chuàng)建一個驅(qū)動程序在Verilog。

我從Digilent公司拿出了我的Arty Z7板,并在Vivado/Vitis 2021.2中創(chuàng)建了一個項目來讓它工作,你可以在我的上一個項目帖子中閱讀,我在QDSP-6061的5位數(shù)上顯示滾動文本,上面寫著“Hello 2022”。

我最終創(chuàng)建的Verilog驅(qū)動程序非常簡單,因為它在FPGA上電復(fù)位后立即開始運行,并且永遠運行。所以我想添加幾個功能1)控制,當(dāng)驅(qū)動程序開始從arm內(nèi)核上的C應(yīng)用程序運行時,Zynq和2)能夠發(fā)送驅(qū)動程序數(shù)據(jù)字符串,從C應(yīng)用程序在顯示器上滾動,而不是將其硬編碼為“你好2022”。這兩個功能都需要在arm內(nèi)核上運行的C應(yīng)用程序和在Zynq SoC FPGA的可編程邏輯中運行的Verilog驅(qū)動程序之間建立通信通道。

最簡單和最直接的方法是將AMBA®AXI4(高級可擴展接口4)協(xié)議接口添加到QDSP-6061氣泡顯示的Verilog驅(qū)動程序中?,F(xiàn)在,AXI接口是一組非常簡單的握手信號,可以用簡單的狀態(tài)機在Verilog或VHDL的RTL端復(fù)制,但是從應(yīng)用程序端編寫相應(yīng)的C驅(qū)動程序并不簡單。

然而,Vivado/Vitis有一個方便的特性,它可以自動生成RTL和C代碼與所需的AXI參數(shù)。我將演示如何在本項目中使用它。

值得注意的是,有三種主要的AXI4接口實現(xiàn):

?Full AXI4

?AXI4-Lite

?AXI4-Stream

每種類型更適合不同的用例。在QDSP-6061氣泡顯示驅(qū)動程序的這種情況下,所有需要的是寫一些值到一對寄存器,這不是大量的數(shù)據(jù)正在傳輸,沒有任何嚴(yán)格的時序要求。因此,ax4 - lite是我選擇為此實現(xiàn)的AXI接口的版本。

創(chuàng)建新的AXI4外設(shè)

從我上一篇文章中為Arty Z7創(chuàng)建的Vivado項目開始,你會看到我剛剛用Add模塊直接將QDSP-6061驅(qū)動程序Verilog模塊添加到塊設(shè)計中…在編輯塊設(shè)計時,右鍵菜單中可用的功能。

現(xiàn)在的目標(biāo)是使用Vivado內(nèi)置的包IP特性,用新的AXI4-Lite自定義IP版本替換它。因此,第一步是為QDSP-6061冒泡顯示驅(qū)動程序創(chuàng)建一個新的AXI4外設(shè)IP塊。

要在Vivado中創(chuàng)建一個新的axis4外設(shè)IP,請選擇Tools b> create and Package new IP…

將在當(dāng)前的Vivado項目中彈出一個窗口,該窗口打開后顯示可用選項的簡要摘要,包括創(chuàng)建新AXI4外設(shè)的選項。單擊Next繼續(xù)。

在第二頁上,選擇Create a new AXI4外設(shè)選項,然后在下面的頁面上為外設(shè)提供所需的名稱、版本和描述信息。

注意:不要在name字段中使用破折號或其他非法字符。因為在Name字段中傳遞的任何內(nèi)容都被用作IP的Verilog模塊名稱。

下一頁允許您設(shè)置自定義外設(shè)所需的主和從AXI接口的數(shù)量。這包括每個接口的AXI類型。在這種情況下,只需要一個從AXI4-Lite接口,因為我們只需要C應(yīng)用程序能夠?qū)懭隦TL中的寄存器。

此外,在這個頁面上,還有一些需要配置的設(shè)置,比如AXI接口的數(shù)據(jù)總線的寬度和可用的寄存器的數(shù)量。默認(rèn)的數(shù)據(jù)寬度是32位,這就是我堅持的。最小寄存器數(shù)為4,這對于C應(yīng)用程序?qū)?shù)據(jù)傳遞給QDSP-6061驅(qū)動程序來說已經(jīng)足夠了。

最后的摘要頁面為下一步提供了一個新選項。在這種情況下,仍然需要添加氣泡顯示驅(qū)動程序的Verilog,因此我們選擇Edit IP選項。

點擊Finish并選擇Edit IP選項后,將打開第二個Vivado項目:

對于一個AXI4-Lite IP項目,生成了兩個Verilog文件:

頂層文件是外設(shè)實際功能的邏輯直接編碼或?qū)嵗牡胤?。第二個在名稱后面加上S00_AXI的是實現(xiàn)AXI握手信令邏輯的地方。這也是為外設(shè)添加自定義邏輯的地方,以便將數(shù)據(jù)拉入并發(fā)送到AXI總線,然后將其傳遞回頂級文件,以供外設(shè)的代碼功能RTL使用。

自動生成的代碼有很好的注釋,并且清楚地標(biāo)記了何時添加自定義RTL(包括在哪里添加端口和信號聲明),并帶有“在這里添加用戶邏輯”注釋部分。

AXI4-Lite自定義IP Verilog

我建議首先為自定義IP的核心功能添加邏輯,然后關(guān)注它將如何與AXI接口交互。因此,我從生成的頂級Verilog文件axi_qdsp_6061_controller_v1_0開始。v添加我寫的Verilog來驅(qū)動QDSP-6061。

您可以像在普通的Vivado項目中一樣導(dǎo)入現(xiàn)有的Verilog源文件,并在axis4外設(shè)項目的頂級源文件中實例化它,也可以直接編寫自己的邏輯。

由于我需要對QDSP-6061驅(qū)動程序的Verilog代碼進行一些更改,所以我選擇直接將其復(fù)制+粘貼到頂級Verilog模塊axi_qdsp_6061_controller_v1_0.v中

在復(fù)制粘貼我以前的Verilog之后,我添加了一個使能信號,只要使能信號是低邏輯電平(零),它就會使驅(qū)動程序處于復(fù)位狀態(tài)。為了讓這個項目的帖子寫,它不會比它已經(jīng)是更長,我決定離開可加載字符串配置另一天的滾動文本。

將核心功能添加到頂級文件后,很明顯,需要與AXI接口交互的唯一信號是啟用信號。因此,我將它作為一個端口添加到ax_qdsp_6061_controller_v1_0_s00_axis .v描述的AXI接口模塊

同樣,在文件的末尾是添加任何自定義邏輯的地方,而在頂部的端口聲明是聲明從頂級文件中的邏輯輸入的任何信號的地方。

回想一下,我將axis4 - lite從接口配置為有四個寄存器用于寫/讀。我決定,為主驅(qū)動程序邏輯生成啟用信號的最簡單方法是,當(dāng)C應(yīng)用程序?qū)⒅?xFFFFFFFF寫入偏移量0x0的第一個寄存器時,將啟用設(shè)置為高。

注意:寄存器彼此的偏移量為4,因此寄存器0的偏移量為0x0,寄存器1的偏移量為0x4,寄存器2的偏移量為0x8,寄存器3的偏移量為0x12。

基于在偏移量0x0處寫入AXI從接口控制寄存器的0xFFFFFFFF值設(shè)置使能信號高的邏輯:

至此,已經(jīng)添加了axis4 QDSP-6061驅(qū)動程序IP的所有自定義邏輯,我們可以繼續(xù)進行最終配置。

切換到Package IP選項卡,有一系列的打包步驟。第一個參數(shù)只是前面設(shè)置的名稱、描述和版本信息。在這里,您可以返回并根據(jù)需要編輯信息。

默認(rèn)情況下,當(dāng)調(diào)用選項Create and Package New IP時,IP僅與Vivado項目所針對的FPGA芯片兼容。由于我從我為Arty板創(chuàng)建的Vivado項目中選擇了創(chuàng)建和封裝新IP選項,因此默認(rèn)情況下,AXI4 QDSP-6061驅(qū)動程序IP僅與Zynq-7000芯片兼容。這可以在打包步驟的Compatibility步驟中更改。

要使AXI4 IP與所有Xilinx fpga兼容,請單擊Compatibility步驟中的+按鈕,并選擇Add Family explicit…

在“添加家族”彈出窗口中,選擇您希望與AXI4 IP兼容的所有FPGA芯片。我剛剛檢查了所有家庭和部件選項,但如果你擔(dān)心這一點,這會使IP占用更多的硬盤空間。我還建議為生命周期選擇生產(chǎn)選項,因為您很可能會使用生產(chǎn)級FPGA芯片。

通過其余的選項卡,不需要為axis4 QDSP-6061驅(qū)動程序IP編輯任何內(nèi)容。但是,您可以看到這個創(chuàng)建和打包新IP工具將生成的所有文件,包括C應(yīng)用程序源文件。你也可以做一些很酷的事情,比如在Vivado塊設(shè)計中使用IP塊時,在其上添加一個自定義徽標(biāo)。

最后一步是打包IP(我的截圖只說重新打包IP,因為我忘記在第一次打包之前抓取截圖)。

在最后的打包步驟中單擊Package IP按鈕后,將出現(xiàn)一個彈出窗口,詢問是否要關(guān)閉AXI外設(shè)的Vivado項目。您可以隨時重新打開這個Vivado項目來修改/更新IP,方法是從包含自定義IP的存儲庫已添加到的任何Vivado項目中打開IP Catalog,并在IP Packager中選擇Edit。

創(chuàng)建和打包新IP工具將在Settings > IP > Repository中自動添加自定義IP的原始Vivado項目。但是您需要將其手動添加到將來想要使用該IP的任何新Vivado項目中。

將AXI QDSP-6061 IP添加到Vivado框圖中

隨著AXI4 QDSP-6061驅(qū)動程序IP本身的完成,我回到原來的Vivado項目,用新的支持AXI的模塊IP替換塊設(shè)計中的RTL模塊。

刪除RTL模塊后,在模塊設(shè)計中使用+鍵或右鍵單擊,選擇“Add IP…”查找ax4 QDSP-6061驅(qū)動IP。在列表中雙擊它,將其添加到塊設(shè)計中。

幾分鐘后,Vivado將在塊設(shè)計中檢測到新的AXI接口,并且連接自動化將彈出在塊設(shè)計窗口的頂部。單擊綠色橫幅中的Run Connection Automation超鏈接,將出現(xiàn)一個彈出窗口,顯示Vivado將如何將axis4 QDSP-6061驅(qū)動程序IP連接到帶有Zynq處理系統(tǒng)IP的AXI總線。單擊OK以運行連接。

我還選擇將ila添加到axis4 QDSP-6061 Driver IP的AXI接口及其輸出信號中,最初是為了進行故障排除,方法是右鍵單擊每條線路并選擇Debug,然后運行似乎生成ila的連接自動化。

新的積木設(shè)計是這樣的:

驗證設(shè)計(塊設(shè)計窗口頂部帶有復(fù)選框的按鈕),然后保存并關(guān)閉塊設(shè)計。

生成比特流和出口硬件平臺

現(xiàn)在,塊設(shè)計已經(jīng)更新,運行合成,實現(xiàn),并生成一個新的比特流。如果你沒有讀過我以前的任何Vivado 2021.2項目帖子,你需要點擊生成比特流按鈕,它將自動運行合成和實現(xiàn),以避免無法找到板定義文件的關(guān)鍵警告(但這個警告是完全良性的,可以忽略,它只是激怒了我,所以我避免它)。

生成新的比特流后導(dǎo)出硬件平臺,選擇“File > Export > Export hardware…”

在彈出窗口中,確保選擇包含比特流的選項。我選擇導(dǎo)出硬件平臺來覆蓋之前的硬件平臺。

最后,通過選擇Tools > launch Vitis IDE啟動Vitis

更新Vitis平臺硬件規(guī)格

因為我已經(jīng)為這個項目有了一個現(xiàn)有的Vitis工作空間,所以我重新打開了它,并用從Vivado導(dǎo)出的新硬件平臺更新了平臺項目(因為即使我重寫了它,Vitis也不會自動檢測和更新它的修改)。

右鍵單擊Vitis項目的Explorer窗口中的平臺項目(記得我在上一篇文章中將平臺項目命名為arty_z7),然后選擇Update Hardware Specification。

從Vivado導(dǎo)出的XSA硬件文件的目錄路徑可以保持不變,因為我只是覆蓋了舊的路徑。然后單擊“確定”。

一旦平臺項目顯示過時,就清理它。一旦完成,立即運行一個清理應(yīng)用程序項目。

清理完平臺和應(yīng)用程序項目后,構(gòu)建平臺項目,然后構(gòu)建應(yīng)用程序項目。

始終在應(yīng)用程序項目之前清理/構(gòu)建平臺項目是很重要的,因為應(yīng)用程序項目依賴于平臺項目。

重要的是要注意,在Vitis工作空間中更新硬件平臺的方法通??偸遣煌诿總€版本的Vitis。我發(fā)現(xiàn)這種方法在2021.2有效,但在2019.2,如果不關(guān)閉并重新啟動Vitis,就無法更新硬件平臺。

Vitis應(yīng)用程序C代碼

最后是編寫C應(yīng)用程序來控制ax4 QDSP-6061驅(qū)動程序IP的時候了。這段代碼將通過寫入0xFFFFFFFF來在IP塊中注冊零來斷言/取消斷言RTL中的啟用信號。

正如我前面提到的,有四個寄存器被寫入偏移量0x0、0x4、0x8和0x12。由于我對Verilog進行了編碼,以便在偏移量0x0的寄存器的所有32位設(shè)置為0xFFFFFFFF時將啟用信號設(shè)置為氣泡顯示驅(qū)動程序高,因此C代碼需要將0xFFFFFFFF寫入偏移量0x0的寄存器。

為自定義AXI4外設(shè)自動生成的源文件出現(xiàn)在Vitis平臺項目中的幾個不同位置,但是您需要在以下位置編輯源文件,以便全局更新它們,并可用于應(yīng)用程序項目中的主函數(shù)://ps7_cortexa9_0/standalone_domain/bsp/ps7_cortexa9_0/libsrc//src

一定要在頭文件中包含函數(shù)聲明(在本例中為axi_qdsp_6061_controller.h),然后在相應(yīng)的C文件中編寫函數(shù)體(axi_qdsp_6061_controller.c)。

還生成了一個自測源文件,您可以將其用作模板。但是您需要記住,它自動生成的代碼是盡可能一般化的。因此,它可能會為您的自定義應(yīng)用程序拋出警告和信息消息(基本上,我警告任何新手不要將自測中的自動生成代碼視為黃金,這可能對您的應(yīng)用程序是錯誤的)。例如,將axis4 QDSP-6061驅(qū)動程序IP的基址作為空類型指針傳遞,會導(dǎo)致各種問題。因此,我將其更改為在實際寫寄存器函數(shù)中作為簡單的整數(shù)值類型轉(zhuǎn)換為u32傳遞:

我的主函數(shù)變得非常簡單,因為所有需要發(fā)生的是一次寫0xFFFFFFFF以在偏移量0x0處注冊零:

保存所有文件并構(gòu)建應(yīng)用程序項目。

調(diào)試應(yīng)用程序

啟動調(diào)試運行應(yīng)用程序來測試它。將Arty板插入主機PC,然后從資源管理器窗口右鍵單擊應(yīng)用程序,并選擇Debug As b>在硬件上啟動(單個應(yīng)用程序調(diào)試)。這將打開Vitis中的調(diào)試視圖,并在main函數(shù)的入口處設(shè)置一個斷點,以允許您逐行執(zhí)行應(yīng)用程序。

如果您將ila添加到塊設(shè)計中,請切換回Vivado并在硬件管理器中打開它們,然后在Vitis中逐步執(zhí)行應(yīng)用程序。在Vivado的Flow Navigator窗口中,選擇Open Hardware Manager > Open Target > Auto Connect, Vivado將為您打開ILA窗口。

我為AXI ILA窗口設(shè)置了寫地址通道有效(AWVALID)、寫數(shù)據(jù)通道有效(WVALID)和寫響應(yīng)通道有效(BVALID)信號上的觸發(fā)器,以便在執(zhí)行寄存器寫函數(shù)時捕獲來自C應(yīng)用程序的實際寫事務(wù)。

我還在AXI4 QDSP-6061驅(qū)動IP的輸出線上設(shè)置觸發(fā)器,以查看何時/是否開始驅(qū)動陰極和陽極線,以驗證寫入值0xFFFFFFFF以注冊零確實設(shè)置了邏輯高的使能信號。

本文編譯自hackster.io

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

控制寄存器(Control Register)是中央處理器(CPU)中用于管理系統(tǒng)級操作的特殊寄存器,它為操作系統(tǒng)和硬件提供對處理器行為的精細控制。本文從計算機體系結(jié)構(gòu)角度系統(tǒng)闡述控制寄存器的設(shè)計原理、功能分類、操作機制...

關(guān)鍵字: 寄存器 處理器

在嵌入式系統(tǒng)開發(fā)中,硬件抽象層(Hardware Abstraction Layer,HAL)起著至關(guān)重要的作用。它為上層軟件提供了統(tǒng)一的硬件訪問接口,隱藏了底層硬件的細節(jié),使得軟件具有更好的可移植性和可維護性。C++作...

關(guān)鍵字: 嵌入式C++ HAL 寄存器 封裝

采用51單片機最小開發(fā)板,由8位自制獨立按鍵控制。單片機芯片為STC89C52RC,晶振為@12.000 mhz。8X8LED點陣屏模塊由MAX7219驅(qū)動,MAX7219包含一個自動掃描電路。你只需要把要顯示的數(shù)據(jù)發(fā)送...

關(guān)鍵字: 51單片機 MAX7219 寄存器

電源管理集成電路(PMIC)有益于簡化最終應(yīng)用并縮小其尺寸,也因此備受青睞。然而,當(dāng)默認(rèn)啟動時序和輸出電壓與應(yīng)用要求不符時,就需要定制上電設(shè)置。大多數(shù)情況下,電路沒有可以存儲這些設(shè)置的非易失性存儲器(NVM)。對此,低功...

關(guān)鍵字: 電源管理 集成電路 寄存器

在單片機系統(tǒng)的設(shè)計中,復(fù)位電路是確保單片機正常工作的關(guān)鍵組成部分。它能夠在系統(tǒng)啟動時將單片機的內(nèi)部寄存器和狀態(tài)設(shè)置為初始值,保證單片機從一個確定的狀態(tài)開始運行。與門芯片作為一種常見的數(shù)字邏輯芯片,有時會被應(yīng)用于單片機復(fù)位...

關(guān)鍵字: 復(fù)位電路 寄存器 單片機

在數(shù)字電路設(shè)計中,計數(shù)器是一種基礎(chǔ)的數(shù)字電路組件,用于記錄并顯示脈沖信號的數(shù)量或頻率。4進制計數(shù)器,即模4計數(shù)器,是一種特殊的計數(shù)器,其計數(shù)范圍從0到3,共4個狀態(tài)。本文將深入探討如何結(jié)合D觸發(fā)器與寄存器來實現(xiàn)一個4進制...

關(guān)鍵字: D觸發(fā)器 寄存器 計數(shù)器

寄存器是CPU內(nèi)部存儲單元,即寄存器是CPU的組成部份。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和位址等。

關(guān)鍵字: 寄存器 CPU

隨著電子技術(shù)的迅速發(fā)展,計算機已深入地滲透到我們的生活中,許多電子愛好者開始學(xué)習(xí)單片機知識,但單片機的內(nèi)容比較抽象,相對電子愛好者已熟悉的模擬電路、數(shù)字電路,單片機中有一些新的概念,這些概念非常基本以至于一般作者不屑去談...

關(guān)鍵字: 單片機 寄存器

今天,小編將在這篇文章中為大家?guī)砘谝莆患拇嫫鱐DM的實現(xiàn)方式的有關(guān)報道。

關(guān)鍵字: 寄存器 移位寄存器

74LS175是一款4D觸發(fā)器集成電路,它包含6個D觸發(fā)器,這些觸發(fā)器可以組合起來形成寄存器或搶答器等多種功能部件。

關(guān)鍵字: 74ls175 觸發(fā)器 寄存器
關(guān)閉