0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ZYNQ常用外設(shè)設(shè)計(jì) (上)

FPGA之家 ? 來(lái)源:FPGA之家 ? 2023-09-23 09:25 ? 次閱讀

常用外設(shè)設(shè)計(jì)

使用UART與ZYBO進(jìn)行通信

ZYNQ學(xué)習(xí)過(guò)程中一個(gè)重要環(huán)節(jié)是進(jìn)行調(diào)試,當(dāng)然在SDK中進(jìn)行調(diào)試時(shí),設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試非常高效。但是ZYNQ中畢竟涉及到FPGA硬件部分,于是如果可以通過(guò)UART與ZYNQ器件進(jìn)行雙向的通信會(huì)使得調(diào)試非常方便。

Step1: 確認(rèn)ZYBO板上硬件連接。

在ZYBO的用戶手冊(cè)中有以下描述,如圖 21所示。

c7ca8968-59aa-11ee-939d-92fbcf53809c.png

圖 21

其ZYBO開(kāi)發(fā)板的原理圖也可知MIO Bank的電壓為1.8V。

于是可以得到以下幾點(diǎn):

1. 硬件上連接串口的IO為MIO48和MIO49。

2. IO的電壓為1.8V。

3. 默認(rèn)使用的參數(shù)為:115200波特率以及其他對(duì)應(yīng)參數(shù),見(jiàn)圖 21。

Step2: 在Vivado的Block Design中配置ZYNQ7 Processing System時(shí),需要配置UART外設(shè),如圖 22所示。

c7d48da0-59aa-11ee-939d-92fbcf53809c.jpg

圖 22

Step3: 按照“Vivado中進(jìn)行ZYNQ硬件部分設(shè)計(jì)”中介紹的,直到在SDK中編寫(xiě)C代碼步驟。需要使用UART進(jìn)行通行,分為通過(guò)UART向外發(fā)送數(shù)據(jù)和通過(guò)UART接收數(shù)據(jù)。

Step4: PC上安裝串口調(diào)試助手,硬件上連接串口線到PC。向ZYNQ中下載硬件配置后,在Windows Device Manager查看UART所使用的端口,如圖 23所示。

c7ecee7c-59aa-11ee-939d-92fbcf53809c.png

圖 23

并將串口調(diào)試助手設(shè)置成相應(yīng)的配置,如圖 24所示。

c80121e4-59aa-11ee-939d-92fbcf53809c.png

圖 24

Step5: 至此就可以在C代碼中發(fā)送或者讀取數(shù)據(jù)了,下面給出一段示例代碼。

c8098938-59aa-11ee-939d-92fbcf53809c.png

圖 25

程序首先運(yùn)行,輸出” Please enter any number from 0~9”。此后會(huì)停在等待輸入處,直到通過(guò)串口助手鍵入了數(shù)字之后,才會(huì)跳到下一行代碼,并將鍵入的數(shù)字輸出在串口調(diào)試助手中。

c8106226-59aa-11ee-939d-92fbcf53809c.png

圖 26

至此可以通過(guò)串口輸出各種信息(因?yàn)榭梢暂敵鲎址?,同時(shí)也可以通過(guò)串口輸入進(jìn)行菜單選擇,因?yàn)殡m然不能接收字符串,但可以鍵入10個(gè)數(shù)字以及26個(gè)英文字母,這也應(yīng)該足夠了。

Step6: 除了使用外部的串口調(diào)試助手外,SDK內(nèi)部也提供了Terminal工具。通過(guò)如下圖所示的方式顯示Terminal窗口且進(jìn)行配置,同樣可以當(dāng)作串口調(diào)試助手使用,如圖 28所示。

c81c4d70-59aa-11ee-939d-92fbcf53809c.jpg

圖 27

c8253002-59aa-11ee-939d-92fbcf53809c.png

圖 28

將用戶邏輯設(shè)計(jì)封裝成IP

參考工程見(jiàn)“ZYBO_demo_packageIP.xpr”。

ZYNQ中PS與PL的聯(lián)系主要有兩個(gè),分別是GP端口和HP端口。其中HP端口可以理解為PS和PL可以訪問(wèn)同一片存儲(chǔ)空間,于是可以以DDR空間為中介,進(jìn)行大量的數(shù)據(jù)通信。而平時(shí)在純FPGA設(shè)計(jì)中的那些邏輯模塊與PS的通信方式就是依靠GP端口完成的。

純RTL邏輯模塊的控制或者輸出都是通過(guò)模塊的輸入輸出端口實(shí)現(xiàn)的。在ZYNQ的架構(gòu)下,就是將這些輸入輸出端口改為寄存器,原來(lái)的輸入端口改為只寫(xiě)的控制寄存器;原來(lái)的輸出端口改為只讀的狀態(tài)寄存器。于是每個(gè)邏輯模塊都有一個(gè)標(biāo)準(zhǔn)的AXI-Lite Slave接口,用于與PS相連接,使得PS可以控制讀寫(xiě)邏輯模塊內(nèi)的寄存器。于是每一個(gè)邏輯模塊就相當(dāng)于PS的一個(gè)外設(shè),與PS自帶的外設(shè),如UART、I2C控制器控制器來(lái)是一樣的。這就是ZYNQ的硬件可擴(kuò)展性,通俗的說(shuō)就是當(dāng)ARM需要各種要求的外設(shè)時(shí),都可以通過(guò)在PL端進(jìn)行邏輯設(shè)計(jì)實(shí)現(xiàn)。

下面就介紹如何一步一步的完成一個(gè)PL端的邏輯設(shè)計(jì),并將其封裝成為IP,并在ZYNQ的Block Design中加入到硬件設(shè)計(jì)中,并在SDK中通過(guò)代碼來(lái)控制該外設(shè)。

本例中所涉及的邏輯模塊功能為:IP的外部接口為4盞LED,內(nèi)部寄存器有3個(gè),分別是工作模式寄存器(MODE),使能寄存器(ENABLE)和狀態(tài)寄存器(STATUS),如圖 29所示。

c8334124-59aa-11ee-939d-92fbcf53809c.png

圖 29

Step1: 在Vivado GUI中,選擇Tool?Create and Package New IP…。一般情況下,選擇“Create a new AXI4 Peripheral”,這種IP就是之前提到的,由PS讀寫(xiě)寄存器進(jìn)而控制的IP,在后面的菜單中選擇該IP的Interface接口以及內(nèi)部需要多少寄存器,如圖 30所示。

c84737c4-59aa-11ee-939d-92fbcf53809c.jpg

圖 30

一般來(lái)說(shuō),IP首先需要一個(gè)AXI-Lite的Slave接口,用于與PS連接。除此以外還可以增加其他AXI接口,例如增加一個(gè)AXI4的Master接口,用于邏輯設(shè)計(jì)中訪問(wèn)PS端的存儲(chǔ)器;又比如可以增加一個(gè)AXI-Lite的Master,用于讀寫(xiě)其他邏輯模塊的寄存器等等。在這里選擇好接口后,工具在生成IP的時(shí)候會(huì)自動(dòng)生成相應(yīng)的AXI接口代碼,用戶可以直接使用或者稍作修改即可。

另外就是選擇寄存器的個(gè)數(shù),因?yàn)樯院笊傻拇a中會(huì)自動(dòng)完成指定數(shù)量寄存器的讀寫(xiě)控制代碼,于是如果設(shè)置少了,后面需要手工添加代碼,會(huì)比較麻煩,不如配置時(shí)將寄存器個(gè)數(shù)設(shè)置的多一些。

Step2: 完成配置后工具自動(dòng)生成代碼,在生成的代碼中進(jìn)行修改。

c85ab1dc-59aa-11ee-939d-92fbcf53809c.png

圖 31

在自動(dòng)生成的代碼中,結(jié)構(gòu)如下:

c8762340-59aa-11ee-939d-92fbcf53809c.jpg

圖 32

需要注意的是自動(dòng)生成的代碼只是簡(jiǎn)單完成了指定數(shù)量寄存器的讀寫(xiě)時(shí)序,至于每個(gè)寄存器的邏輯功能和含義是沒(méi)有的,需要用戶將這些寄存器引到S00_AXI模塊的上層,與用戶設(shè)計(jì)的邏輯進(jìn)行通信。同時(shí)自動(dòng)生成的代碼中所有的寄存器都是可讀可寫(xiě)的,如果需要設(shè)置只讀或者只寫(xiě)的寄存器,需要在S00_AXI模塊中自行修改代碼。

Step3: 為邏輯設(shè)計(jì)增加外部接口以及全局參數(shù)。

該例程中需要設(shè)置4個(gè)外部輸出管腳,控制外部LED。并且設(shè)置一個(gè)全局參數(shù)為4盞LED的初始狀態(tài)。首先在代碼中指定位置進(jìn)行修改,如圖 33所示。

c8860a12-59aa-11ee-939d-92fbcf53809c.png

圖 33

保存修改后,會(huì)在GUI界面中看到“Customization Parameter”、“Ports and Interfaces”以及“Customization GUI”的標(biāo)識(shí)都變了,代表檢測(cè)到了代碼中的變化。

c88e6bbc-59aa-11ee-939d-92fbcf53809c.png

圖 34

點(diǎn)擊GUI中如下所示的指令后,工具自動(dòng)完成更新。

c89bbb6e-59aa-11ee-939d-92fbcf53809c.png

圖 35

Step4: 在GUI如圖 34所示的界面中修改參數(shù)設(shè)置,對(duì)IP進(jìn)行配置。

Step5: 完成IP的封裝,如圖 36所示,在Review and Package中點(diǎn)擊Re-Package IP。

c8ab7e32-59aa-11ee-939d-92fbcf53809c.jpg

圖 36

此時(shí)會(huì)關(guān)閉IP封裝界面,回到ZYNQ Block Design界面。在IP Catalog中會(huì)出現(xiàn)剛才封裝完成的IP。

c8b5a6fa-59aa-11ee-939d-92fbcf53809c.jpg

圖 37

此后的操作就和“Vivado中進(jìn)行ZYNQ硬件部分設(shè)計(jì)”中介紹的一樣,將該IP當(dāng)成與其他IP一樣的外設(shè),進(jìn)行Block Design設(shè)計(jì),同樣需要對(duì)于外接接口添加約束文件,之后生成Bit文件。

Step6: 在Block Design中需要將封裝的邏輯模塊IP需要引到外部的IO進(jìn)行設(shè)置。

右擊需要引出的端口,點(diǎn)擊“Make External”。之后重新生成HDL Wrapper即可。

c8cfc012-59aa-11ee-939d-92fbcf53809c.jpg

圖 38

Step7: 在Block Design中的Address Editor中給IP分配總線地址。

c8de4b46-59aa-11ee-939d-92fbcf53809c.png

圖 39

Step8: 封裝好的IP進(jìn)行底層修改。

如果需要對(duì)已經(jīng)設(shè)計(jì)好的IP進(jìn)行底層修改,就在IP Catalog中顯示的該IP處右擊,選擇“Customize IP”。需要注意的是,工具會(huì)默認(rèn)彈出一個(gè)路徑,作為修改IP的工作路徑,但是該路徑是一個(gè)臨時(shí)路徑,與之前存放IP的路徑不同。

c8e6390a-59aa-11ee-939d-92fbcf53809c.png

圖 40

IP底層修改完成之后,重新Re-Package IP后,回到Block Design中工具自動(dòng)檢測(cè)到IP有更新,只要通過(guò)工具的提示進(jìn)行IP的更新即可。

c9002978-59aa-11ee-939d-92fbcf53809c.png

圖 41

Step9: 封裝好的IP的BSP以及SDK程序的編寫(xiě)。

首先封裝的IP有自己在AXI總線上的地址,于是IP內(nèi)部的所有寄存器的地址就是IP的Base地址加上各個(gè)寄存器的偏移量。于是在SDK代碼中就可以通過(guò)唯一的地址訪問(wèn)到這些寄存器。由于內(nèi)部的寄存器都是用戶自己設(shè)計(jì)的,所以不需要BSP封裝太多的函數(shù),BSP也無(wú)法知道用戶設(shè)計(jì)的邏輯,從而也無(wú)法自動(dòng)封裝API。用戶直接通過(guò)底層調(diào)用Xil_Out32()和Xil_In32()完成對(duì)于封裝邏輯模塊IP的控制。如果需要,用戶可以自行封裝更上層的API函數(shù)。

使用Zynq processor仿真Customized IP

由于ZYNQ中除了常用的FPGA邏輯部分外還有ARM內(nèi)核部分,所以在進(jìn)行類似于FPGA設(shè)計(jì)仿真時(shí)會(huì)遇到問(wèn)題,就是如果仿真ARM內(nèi)核部分。Xilinx提供的一個(gè)方案是Zynq BFM(Bus Functional Model),其介紹如下。

c9162e12-59aa-11ee-939d-92fbcf53809c.jpg

圖 42

但是該Model是需要額外購(gòu)買的,該章節(jié)介紹一種無(wú)需購(gòu)買Zynq BFM就可以仿真Customized IP的方法?;舅悸肥菍?duì)于PL端的Customized IP而言,控制端是ZYNQ中的ARM內(nèi)核還是普通FPGA中的MicroBlaze都是一樣的,所以可以將Customized IP例化到以MicroBlaze為處理器的Block Design中,由于MicroBlaze的仿真無(wú)需額外的License,所以可以將SDK的程序?qū)氲組icroBlaze的內(nèi)核,進(jìn)而仿真Customized IP。

Step1: 按照“將用戶邏輯設(shè)計(jì)封裝成IP”中介紹的,完成Customized IP的設(shè)計(jì)和封裝;在Block Design中加入MicroBlaze和Customized IP,完成Block Design設(shè)計(jì);完成硬件平臺(tái)的綜合、實(shí)現(xiàn)、生成Bit文件,并導(dǎo)入SDK;在SDK中完成軟件設(shè)計(jì)。綜上就是完成“將用戶邏輯設(shè)計(jì)封裝成IP”中的Step9,區(qū)別只是用MicroBlaze替代了ZYNQ Processing System。

c91f17d4-59aa-11ee-939d-92fbcf53809c.jpg

圖 43

Step2:對(duì)SDK中設(shè)計(jì)的軟件程序完成編譯,工具自動(dòng)生成elf文件。默認(rèn)的存放地址為SDK project下Src文件夾中。例如:C:***A7_microblazeA7_microblaze.sdkmicroblaze_customized_ipDebug

c92d6bfe-59aa-11ee-939d-92fbcf53809c.png

圖 44

Step3:回到Vivado開(kāi)發(fā)平臺(tái),將elf文件導(dǎo)入至Simulation Source中。

c939e3d4-59aa-11ee-939d-92fbcf53809c.jpg

圖 45

Step4:將導(dǎo)入的elf文件鏈接到對(duì)應(yīng)的處理器,使其作為該處理器的啟動(dòng)程序。注意,elf文件只允許associate至Microblaze,工具不支持鏈接到ZYNQ。

c943e10e-59aa-11ee-939d-92fbcf53809c.jpg

圖 46

Step5:正常啟動(dòng)仿真。

可以看到MicroBlaze核發(fā)出的AXI通信協(xié)議,如圖 47所示。

c95a881e-59aa-11ee-939d-92fbcf53809c.jpg

圖 47

于是對(duì)應(yīng)的IP的輸出可以看到如“將用戶邏輯設(shè)計(jì)封裝成IP”中模式2設(shè)計(jì)的一樣,輸出的4路LED不斷反轉(zhuǎn)。

c968fab6-59aa-11ee-939d-92fbcf53809c.png

圖 48

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21636

    瀏覽量

    601315
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1221

    瀏覽量

    101130
  • Zynq
    +關(guān)注

    關(guān)注

    9

    文章

    607

    瀏覽量

    47101

原文標(biāo)題:【干貨分享】ZYNQ常用外設(shè)設(shè)計(jì) (上)

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ZYNQ常用外設(shè)設(shè)計(jì):malloc與memcpy的使用方法

    作者:Wilson Qiu,Xilinx工程師 ZYNQ對(duì)Memory的操作 參考工程見(jiàn)ZYBO_Memory_GPIO_Interrupt_demo.xpr。 ZYNQ有專用的DDR
    的頭像 發(fā)表于 11-27 12:18 ?7824次閱讀
    <b class='flag-5'>ZYNQ</b><b class='flag-5'>常用</b><b class='flag-5'>外設(shè)設(shè)</b>計(jì):malloc與memcpy的使用方法

    使用UART與ZYBO進(jìn)行通信常用外設(shè)設(shè)計(jì)方案

    作者:Wilson Qiu,Xilinx工程師 常用外設(shè)設(shè)計(jì) 使用UART與ZYBO進(jìn)行通信 ZYNQ學(xué)習(xí)過(guò)程中一個(gè)重要環(huán)節(jié)是進(jìn)行調(diào)試,當(dāng)然在SDK中進(jìn)行調(diào)試時(shí),設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試非常高效。但是
    的頭像 發(fā)表于 11-03 12:39 ?3121次閱讀
    使用UART與ZYBO進(jìn)行通信<b class='flag-5'>常用</b><b class='flag-5'>外設(shè)設(shè)</b>計(jì)方案

    玩轉(zhuǎn)Zynq連載2——Zynq PS的GPIO外設(shè)

    `玩轉(zhuǎn)Zynq連載2——Zynq PS的GPIO外設(shè)更多資料共享 鏈接:https://share.weiyun.com/5s6bA0s1 概述 Zynq的GPIO
    發(fā)表于 04-18 16:33

    如何為OTG外設(shè)設(shè)置批量輸入/輸出USB端點(diǎn)?

    我目前正在使用PetaLinux設(shè)計(jì)帶有ZC702板的外圍設(shè)備。為USB OTG外設(shè)提供的示例是大容量存儲(chǔ)或USB以太網(wǎng)。這兩個(gè)例子都適用于董事會(huì)。我現(xiàn)在正在嘗試將電路板實(shí)現(xiàn)為具有Bulk
    發(fā)表于 10-11 09:59

    ZYNQ PS端IIC接口使用筆記分享

    需要對(duì)IIC接口進(jìn)行初始化在黑金和米聯(lián)的例程里為了方便用戶使用,對(duì)IIC和外設(shè)設(shè)備分別創(chuàng)建了相應(yīng)的文件方便用戶開(kāi)發(fā)。特別注意每個(gè)外設(shè)設(shè)備都會(huì)有自己的slave address;而xilinx官方給出
    發(fā)表于 12-23 17:06

    ZYNQ PS端IIC接口使用筆記分享

    );      SDK中需要對(duì)IIC接口進(jìn)行初始化在黑金和米聯(lián)的例程里為了方便用戶使用,對(duì)IIC和外設(shè)設(shè)備分別創(chuàng)建了相應(yīng)的文件方便用戶開(kāi)發(fā)?!   √貏e注意每個(gè)外設(shè)設(shè)備都會(huì)有自己的slave address;而
    發(fā)表于 01-08 16:44

    ch582m低功耗藍(lán)牙一個(gè)中心設(shè)備怎么自動(dòng)匹配到附近的外設(shè)設(shè)備?

    你好,我在使用ch582m低功耗藍(lán)牙功能時(shí),發(fā)現(xiàn)我只能掃描附近低功耗設(shè)備的mac地址,只有代碼指定對(duì)方地址時(shí)才能連接上通信。如果是兩個(gè)ch582m,一個(gè)做中心設(shè)備一個(gè)做外設(shè),我怎么告訴中心設(shè)備到底去連哪一臺(tái)外設(shè)呢 ?一個(gè)中心設(shè)備怎么自動(dòng)匹配到附近的
    發(fā)表于 08-03 07:45

    ucos iii在zynq的移植

    本教程介紹了如何使用μC/ OS BSP建立在ZYNQ基本應(yīng)用程序?使用Vivado -7000 ? IDE和賽靈思? SDK。在本教程中,您將使用Vivado IP集成器配置ZYNQ處理器系統(tǒng)以及
    發(fā)表于 11-17 15:06 ?8460次閱讀

    ZYNQ怎么加速CNN

    可以解決多種不同信號(hào)處理應(yīng)用中的大量數(shù)據(jù)處理問(wèn)題,而且還能通過(guò)加入更多外設(shè)來(lái)擴(kuò)展處理系統(tǒng)的功能。ZYNQ通過(guò)引入最新的高速AXI-4總線,可輕松實(shí)現(xiàn)外設(shè)的擴(kuò)展與高速互訪。
    發(fā)表于 10-27 10:43 ?3480次閱讀
    在<b class='flag-5'>ZYNQ</b><b class='flag-5'>上</b>怎么加速CNN

    ZYNQ PS端IIC接口使用筆記

    需要對(duì)IIC接口進(jìn)行初始化在黑金和米聯(lián)的例程里為了方便用戶使用,對(duì)IIC和外設(shè)設(shè)備分別創(chuàng)建了相應(yīng)的文件方便用戶開(kāi)發(fā)。
    發(fā)表于 01-28 08:05 ?25次下載
    <b class='flag-5'>ZYNQ</b> PS端IIC接口使用筆記

    米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源清單分享

    應(yīng)用行業(yè)的工程師關(guān)注。大家對(duì)zynq ultrascale mpsoc平臺(tái)產(chǎn)品配置很感興趣。本篇分享米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源。米爾電子zynq
    發(fā)表于 01-07 15:20 ?3次下載
    米爾電子<b class='flag-5'>zynq</b> ultrascale+ mpsoc底板<b class='flag-5'>外設(shè)</b>資源清單分享

    Xilinx ZynqFreeRTOS的Tracealyzer

    電子發(fā)燒友網(wǎng)站提供《Xilinx ZynqFreeRTOS的Tracealyzer.zip》資料免費(fèi)下載
    發(fā)表于 12-07 14:59 ?5次下載
    Xilinx <b class='flag-5'>Zynq</b><b class='flag-5'>上</b>FreeRTOS的Tracealyzer

    用于Zynq UltraScale+設(shè)備中PL隔離的存儲(chǔ)器和外設(shè)保護(hù)單元

    電子發(fā)燒友網(wǎng)站提供《用于Zynq UltraScale+設(shè)備中PL隔離的存儲(chǔ)器和外設(shè)保護(hù)單元.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 15:23 ?0次下載
    用于<b class='flag-5'>Zynq</b> UltraScale+設(shè)備中PL隔離的存儲(chǔ)器和<b class='flag-5'>外設(shè)</b>保護(hù)單元

    如何在Zynq SoC開(kāi)始使用FreeRTOS

    該項(xiàng)目演示如何在 Zynq SoC 開(kāi)始使用 FreeRTOS。
    的頭像 發(fā)表于 10-18 09:44 ?1833次閱讀
    如何在<b class='flag-5'>Zynq</b> SoC<b class='flag-5'>上</b>開(kāi)始使用FreeRTOS

    TI mmWave Radar sensor硬件外設(shè)設(shè)計(jì)參考

    電子發(fā)燒友網(wǎng)站提供《TI mmWave Radar sensor硬件外設(shè)設(shè)計(jì)參考.pdf》資料免費(fèi)下載
    發(fā)表于 09-27 11:06 ?0次下載
    TI mmWave Radar sensor硬件<b class='flag-5'>外設(shè)設(shè)</b>計(jì)參考