<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【ZYNQ Ultrascale+ MPSOC FPGA教程】第三十章自定義IP實驗

FPGA技術專欄 ? 來源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-02-01 10:13 ? 次閱讀

原創聲明:

本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處。

適用于板卡型號:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

實驗Vivado工程目錄為“custom_pwm_ip /vivado”。

實驗vitis工程目錄為“custom_pwm_ip /vitis”。

Xilinx官方為大家提供了很多IP核,在Vivado的IP Catalog中可以查看這些IP核,用戶在構建自己的系統中,不可能只使用Xilinx官方的免費IP核,很多時候需要創建屬于自己的用戶IP核,創建自己的IP核有很多好處,例如系統設計定制化;設計復用,可以在在IP核中加入license, 有償提供給別人使用;簡化系統設計和縮短設計時間。用ZYNQ系統設計IP核,最常用的就是使用AXI總線將PS同PL部分的IP核連接起來。本實驗將為大家介紹如何在Vivado中構建AXI總線類型的IP核,此IP核用來產生一個PWM,用這個控制開發板上的LED,做一個呼吸燈的效果。

FPGA工程師工作內容

以下為FPGA工程師負責內容。

1. PWM介紹

我們經常使用PWM來控制LED,蜂鳴器等,通過調節脈沖的占空比來調節LED的亮度。

在其他開發板中我們使用過的一個pwm模塊如下:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Copyright(c)2017,ALINX(shanghai)TechnologyCo.,Ltd////Allrightsreserved////////Thissourcefilemaybeusedanddistributedwithoutrestrictionprovided////thatthiscopyrightstatementisnotremovedfromthefileandthatany////derivativeworkcontainstheoriginalcopyrightnoticeandtheassociated////disclaimer.//////////////////////////////////////////////////////////////////////////////////////////================================================================================//Description:pwmmodel//pwmoutperiod=frequency(pwm_out)*(2**N)/frequency(clk);////================================================================================//RevisionHistory://DateByRevisionChangeDescription//--------------------------------------------------------------------------------//2017/5/3meisq1.0Original//********************************************************************************/`timescale1ns/1psmoduleax_pwm#(
	parameterN=32//pwmbitwidth
)(inputclk,inputrst,input[N-1:0]period,input[N-1:0]duty,outputpwm_out);reg[N-1:0]period_r;reg[N-1:0]duty_r;reg[N-1:0]period_cnt;regpwm_r;assignpwm_out=pwm_r;always@(posedgeclkorposedgerst)beginif(rst==1)begin
period_r<={?N?{1'b0}};
????????duty_r?<={?N?{1'b0}};endelsebegin
????????period_r?<=?period;
????????duty_r???<=?duty;endendalways@(posedge?clk?orposedge?rst)beginif(rst==1)
????????period_cnt?<={?N?{1'b0}};else
????????period_cnt?<=?period_cnt?+?period_r;endalways@(posedge?clk?orposedge?rst)beginif(rst==1)begin
????????pwm_r?<=1'b0;endelsebeginif(period_cnt?>=duty_r)
pwm_r<=1'b1;else
????????????pwm_r?<=1'b0;endendendmodule

可以看到這個PWM模塊需要2個參數“period”、“duty”來控制頻率和占空比,”period”為步進值,也就是計數器每個周期要加的值。Duty為占空比的值。我們需要設計一些寄存器來控制這些參數,這里需要使用AXI總線,PS通過AXI總線來讀寫寄存器。

o4YBAGAKNOWAMIpZAAAi-fLhhz8189.jpg

2. Vivado工程建立

用”ps_hello”工程另存為一個名為“custom_pwm_ip”工程

2.1 創建自定義IP

1)點擊菜單“Tools->Create and Package IP...”

pIYBAGAKNOWAYRWiAABIfv9cBdQ374.jpg

2)選擇“Next”

o4YBAGAKNOaAd6lfAAB2EXt0RTg212.jpg

3)選擇創建一個新的AXI4設備

pIYBAGAKNOeAUu1-AAB6oP_Qa0A344.jpg

4)名稱填寫“ax_pwm”,描述填寫“alinx pwm”,然后選擇一個合適的位置用來放IP

o4YBAGAKNOiAbEQmAABagsezIr0688.jpg

5)下面參數可以指定接口類型、寄存器數量等,這里不需要修改,使用AXI Lite Slave接口,4個寄存器。

pIYBAGAKNOiAAdpBAABj7UBQhxY405.jpg

6)點擊“Finish”完成IP的創建

pIYBAGAKNOmANiB3AACJJceyGfg743.jpg

7)在“IP Catalog”中可以看到剛才創建的IP

o4YBAGAKNOqAXt_1AABfnsJvQ5s292.jpg

8)這個時候的IP只有簡單的寄存器讀寫功能,我們需要修改IP,選擇IP,右鍵“Edit in IP Packager”

pIYBAGAKNOuABb-XAAB5wL2-2-0474.jpg

9)這是彈出一個對話框,可以填寫工程名稱和路徑,這里默認,點擊“OK”

o4YBAGAKNOuAEtetAAA17-JaJbI828.jpg

10)Vivado打開了一個新的工程

o4YBAGAKNOyACrsZAACwZlnFUKU430.jpg

11)添加PWM功能的核心代碼

pIYBAGAKNO2AEJd1AAB56r7YR5g428.jpg

12)添加代碼時選擇復制代碼到IP目錄

o4YBAGAKNO2AP6e3AABhBRYK7xc945.jpg

13)修改“ax_pwm_v1_0.v”,添加一個pwm輸出端口

pIYBAGAKNO-AFDbbAACY2vDAPcs658.jpg

14)修改“ax_pwm_v1_0.v”,在例化“ax_pwm_V1_0_S00_AXI”,中添加pwm端口的例化

o4YBAGAKNPCAND1fAACXrElhvdk323.jpg

15)修改“ax_pwm_v1_0_s00_AXI.v”文件,添加pwm端口,這個文件是實現AXI4 Lite Slave的核心代碼

pIYBAGAKNPGAfVKeAAC1P18MXRQ939.jpg

16)修改“ax_pwm_v1_0_s00_AXI.v”文件,例化pwm核心功能代碼,將寄存器slv_reg0和slv_reg1用于pwm模塊的參數控制。

o4YBAGAKNPKARUiNAACZ2BvS7TY765.jpg

17)雙擊“component.xml”文件

pIYBAGAKNPOAMPOlAACG_4F_9Ds374.jpg

18)在“File Groups”選項中點擊“Merge changers from File Groups Wizard”

o4YBAGAKNPSAHXLoAABnifJeYpM486.jpg

19)在“Customization Parameters”選項中點擊“Merge changes form Customization Parameters Wizard”

pIYBAGAKNPSAdXnJAABkMLBuJyw511.jpg

20)點擊“Re-Package IP”完成IP的修改

o4YBAGAKNPWACkNEAABp4M9aDek479.jpg

2.2 添加自定義IP到工程

1)搜索“pwm”,添加“ax_pwm_v1.0”

pIYBAGAKNPaAfni5AACIPml-ZTs806.jpg

2)點擊“Run Connection Automation”

o4YBAGAKNPaASDjDAABPNbNzgIc749.jpg

3)導出pwm端口

pIYBAGAKNPeAZfx6AABmoU89YPw159.jpgpIYBAGAKNPiAbwHbAACsHwPdf2k965.jpg

4)保存設計,并Generate Output Products

o4YBAGAKNPiAOfeQAABZos0RoU8815.jpg

5)添加xdc文件分配管腳,把pwm_0輸出端口分配給LED1,做一個呼吸燈,編譯生成bit文件,導出硬件

軟件工程師工作內容

以下為軟件工程師負責內容。

3. Vitis軟件編寫調試

1)啟動Vitis,新建APP,模板選擇“Hello World”

pIYBAGAKNPmAYh0uAAArgMgWQW4897.jpg

2)在bsp里找到“xparameters.h”文件,這個非常重要的文件,里面找到了自定IP的寄存器基地址,可以找到自定義IP的基地址。

o4YBAGAKNPmAYRlMAABJ-S02plY133.jpg

3)有個寄存器讀寫宏和自定義IP的基地址,我們開始編寫代碼,測試自定義IP,我們先通過寫寄存器AX_PWM_S00_AXI_SLV_REG0_OFFSET,控制PWM輸出頻率,然后通過寫寄存器AX_PWM_S00_AXI_SLV_REG1_OFFSET控制PWM輸出的占空比。

#include#include"platform.h"#include"xil_printf.h"#include"ax_pwm.h"#include"xil_io.h"#include"xparameters.h"#include"sleep.h"unsignedintduty;intmain(){
init_platform();

print("HelloWorld\n\r");

	//pwmoutperiod=frequency(pwm_out)*(2^N)/frequency(clk);	AX_PWM_mWriteReg(XPAR_AX_PWM_0_S00_AXI_BASEADDR,AX_PWM_S00_AXI_SLV_REG0_OFFSET,17179);//200hz	//duty=(2^N)*(1-(dutycycle))-1	while(1){
		for(duty=0x8fffffff;duty<0xffffffff;?duty?=?duty?+100000){
			AX_PWM_mWriteReg(XPAR_AX_PWM_0_S00_AXI_BASEADDR,?AX_PWM_S00_AXI_SLV_REG1_OFFSET,?duty);
			usleep(100);
		}
	}

????cleanup_platform();return0;}

4)通過運行代碼,我們可以看到PLLED1呈現出一個呼吸燈的效果。

5)通過debug,我們來查看一下寄存器

pIYBAGAKNPqAZ3V6AADeZlioycM690.jpg

6)進入debug狀態,按“F6”可以單步運行。

o4YBAGAKNPuAB7J-AADD8tKfMNM794.jpg

7)通過菜單可以查看“Memory”窗口

pIYBAGAKNPyAF581AAC9jX40CWg716.jpg

8)添加一個監視地址“0x80000000”

o4YBAGAKNP2AKX8SAAAatVNNSRc158.jpgpIYBAGAKNP2AFIX5AAAfM_86tfo182.jpg

9)單步運行,觀察變化

o4YBAGAKNP6AcdbWAADI0GQP9g4708.jpg

4. 實驗總結

通過本實驗我們掌握了更多的Vitis調試技巧,掌握了ARM + FPGA開發的核心內容,就是ARM和FPGA數據交互。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1608

    文章

    21358

    瀏覽量

    594373
  • Xilinx
    +關注

    關注

    70

    文章

    2129

    瀏覽量

    119592
  • IP
    IP
    +關注

    關注

    5

    文章

    1418

    瀏覽量

    148393
  • Zynq
    +關注

    關注

    9

    文章

    600

    瀏覽量

    46757
  • MPSoC
    +關注

    關注

    0

    文章

    194

    瀏覽量

    24143
收藏 人收藏

    評論

    相關推薦

    如何利用ZYNQ MPSoC玩DOOM?

    賽靈思和 DornerWorks 的系統軟件團隊在賽靈思的 Zynq? Ultrascale+? MPSoC 上啟動 Xen Project 管理程序時,我們發現可通過運行當年叱詫一時的流行電子游戲
    發表于 10-09 06:21

    如何調試Zynq UltraScale+ MPSoC VCU DDR控制器

      如何調試Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+
    發表于 01-07 16:02

    如何調試Zynq UltraScale+ MPSoC VCU DDR控制器

    如何調試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
    發表于 01-22 06:29

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    發表于 02-02 07:53

    Ti推出面向Zynq UltraScale+ MPSoC的電源參考設計

    本篇文章將與大家討論的是Xilinx Zynq UltraScale+ MPSoC的電源解決方案參考設計。
    發表于 03-14 02:24 ?3486次閱讀
    Ti推出面向<b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的電源參考設計

    Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞

    本文試圖搞清楚在 Xilinx 基于 ARM 的 Zynq-7000、Zynq UltraScale+ MPSoCZynq
    發表于 06-28 15:53 ?2551次閱讀

    Zynq UltraScale+ MPSoC存儲器接口系統的介紹

    該視頻重點介紹了UltraScale +產品系列的第一個成員Zynq?UltraScale+?MPSoC,并展示了使用可編程邏輯中的DDR4 SDRAM
    的頭像 發表于 11-29 06:36 ?3113次閱讀

    Zynq UltraScale+ MPSoC的發售消息

    Zynq?UltraScale+?MPSoC,現已開始發售。視頻向您重點介紹了Xilinx UltraScale +產品組合的第一位成員
    的頭像 發表于 11-27 06:47 ?3335次閱讀

    如何調試 Zynq UltraScale+ MPSoC VCU DDR 控制器?

    Zynq UltraScale+ MPSoC VCU DDR 控制器是一款專用 DDR 控制器,只支持在 Zynq UltraScale+
    發表于 02-23 06:00 ?15次下載
    如何調試 <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b> VCU DDR 控制器?

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

    米爾電子推出的國內首款zynq ultrascale+ mpsoc平臺核心板(及開發板):MYC-CZU3EG吸引了人工智能、工業控制、嵌入式視覺、ADAS、算法加速、云計算、有線/無線通信
    發表于 01-07 15:20 ?3次下載
    米爾電子<b class='flag-5'>zynq</b> <b class='flag-5'>ultrascale+</b> <b class='flag-5'>mpsoc</b>底板外設資源清單分享

    ZYNQ Ultrascale+ MPSoC系列FPGA芯片設計

    基于 Xilinx 公司ZYNQ Ultrascale+ MPSoC系列 FPGA 芯片設計,應用于工廠自動化、機器視覺、工業質檢等工業領域
    發表于 11-02 14:35 ?1253次閱讀

    Zynq UltraScale+ MPSoC中的隔離方法

    電子發燒友網站提供《Zynq UltraScale+ MPSoC中的隔離方法.pdf》資料免費下載
    發表于 09-13 17:11 ?1次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>中的隔離方法

    Zynq UltraScale+ MPSoC的隔離設計示例

    電子發燒友網站提供《Zynq UltraScale+ MPSoC的隔離設計示例.pdf》資料免費下載
    發表于 09-13 11:28 ?2次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的隔離設計示例

    Zynq UltraScale+ MPSoC生產勘誤表

    電子發燒友網站提供《Zynq UltraScale+ MPSoC生產勘誤表.pdf》資料免費下載
    發表于 09-15 10:35 ?0次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>生產勘誤表

    Zynq UltraScale+ MPSoC驗證數據手冊

    電子發燒友網站提供《Zynq UltraScale+ MPSoC驗證數據手冊.pdf》資料免費下載
    發表于 09-15 10:13 ?0次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>驗證數據手冊
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>