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

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

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

PYNQ設計案例:基于HDL語言+Vivado的自定義IP核創(chuàng)建

電子設計 ? 來源:csdn ? 作者:Mculover666 ? 2020-12-21 16:34 ? 次閱讀

作者:Mculover666

1.實驗目的
用HDL語言+Vivado創(chuàng)建一個掛載在AXI總線上的自定義IP核

2.實驗步驟
2.1.創(chuàng)建一個新的項目

o4YBAF9uGgCADIelAAJlay_b3Qw323.png

2.2.調(diào)用Create and Package IP Wizard,創(chuàng)建一個新的AXI-Lite從機ip
選擇Tools->Create and Package IP

pIYBAF9uGgKASbfbAAD3qOhQ-mo572.png


pIYBAF9uGgOACYlFAAEP3sBhhKY959.png


o4YBAF9uGgWAelgPAADHR7795JU281.png


pIYBAF9uGgaAUjJzAACuOU10eNc373.png


o4YBAF9uGgiAOz47AAD7KUHYQZ0630.png

編輯創(chuàng)建的IP

pIYBAF9uGgqAKhpAAACYAF3d7N8903.png

led_controller_v1_0.v — 實例化了所有的AXI-Lite接口,在這種情況下,只有一個接口存在
led_controller_v1_0_S00_AXI.v — 包含了處理PL外設與PS端軟件的AXI4-Lite接口功能
打開led_controller_v1_0_S00_AXI.v文件,找到Users to add ports here,然后在其后添加需要的端口

o4YBAF9uGguAavAaAAAhqCU2Fz4889.png

然后在文件最后,找到Add user logic here,然后在其后添加邏輯功能代碼:

pIYBAF9uGgyAEJf4AAAY8K9tieo954.png

保存文件,打開led_controller_v1_0.v文件,找到Users to add ports here,添加端口:

o4YBAF9uGg2ARlV4AAAcwl_kIWI845.png

在頂層文件中例化剛剛我們添加的端口,保存文件:

pIYBAF9uGg6AC0ScAAB2O130XMY473.png

更新IP核

o4YBAF9uGhCAZspEAAETQo9yEEk360.png

打包IP核

pIYBAF9uGhKAV4fgAADNBw9CXBQ050.png


o4YBAF9uGhOAHqXnAAEvGUtLrLc481.png


o4YBAF9uGhWAUfg8AADRsS8YSpc020.png

然后關閉這個工程即可,ip核創(chuàng)建成功。

2.3.添加ip核到Block Design中進行設計
創(chuàng)建Block Design:

pIYBAF9uGhaAZHkwAABaBq83HYc677.png

點擊Add IP,搜索led,添加led_controllerIP:

o4YBAF9uGheAWz04AABoHaQv0bY451.png

因為LEDs_out要連接板載LED,所以點擊引腳,按下ctrl+t導出引腳:

pIYBAF9uGhmALO0YAABoNojLZ98982.png

添加Zynq ps核,自動連線:

o4YBAF9uGh2ACrrdAAVenZx4Qms666.png

按下F6驗證設計:

o4YBAF9uGh6AA20UAAAbkd8Lw4Q900.png

創(chuàng)建Block Design 的HDL文件:

pIYBAF9uGiCAKwrpAACZvR9vMV8798.png

添加LED引腳約束文件:

pIYBAF9uGiGADAf5AACcB3HTxsI801.png


o4YBAF9uGiOAablpAACaoO_nVtA476.png


o4YBAF9uGiSACpNiAABWxtAfcEs558.png


##LEDs
set_property -dict { PACKAGE_PIN R14 IOSTANDARD LVCMOS33 } [get_ports { LEDs_out_0[0] }]; #IO_L6N_T0_VREF_34 Sch=LEDs_out_0[0]
set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { LEDs_out_0[1] }]; #IO_L6P_T0_34 Sch=LEDs_out_0[1]
set_property -dict { PACKAGE_PIN N16 IOSTANDARD LVCMOS33 } [get_ports { LEDs_out_0[2] }]; #IO_L21N_T3_DQS_AD14N_35 Sch=LEDs_out_0[2]
set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { LEDs_out_0[3] }]; #IO_L23P_T3_35 Sch=LEDs_out_0[3]

2.4.生成Bitstream,打開實現(xiàn)設計,導出硬件文件,運行SDK

o4YBAF9uGiaAYtkWAAID64ZX0s8871.png

2.5.創(chuàng)建一個空的應用工程
File->New->Application Project,選擇創(chuàng)建一個空工程:

2.6.添加驅(qū)動庫
光標選中l(wèi)ed_test_bsp之后再進行下面的操作!??!

選擇Xilinx->Repositories:

o4YBAF9uGiiAE2_kAACREjQlJaw286.png

添加ip核所在目錄,添加完了之后SDK會自動掃描所添加的目錄,然后重新編譯工程來添加新的驅(qū)動文件:

檢查一下庫有沒有被分派到LED_Controller外設,打開system.mss文件,可以看到外設驅(qū)動中存在led_controller_0:

o4YBAF9uGimABPAsAAEksenE7Zc394.png

點擊最上面modify this BSP's Setting檢查驅(qū)動設置:

o4YBAF9uGiuAeT2oAADtbxwG73c144.png

至此,led_controlerip核的硬件設計完畢,BSP驅(qū)動添加完畢,可以開始寫應用測試程序了。

2.7.編寫應用代碼
先在src文件夾下創(chuàng)建一個C文件:

pIYBAF9uGi2AESu3AAGB4IpOhVA911.png

/**
* @file led_test.c
* @brief led_controler ip test
* @author mculover666
* @date 2018/11/10
* */
#include "xparameters.h"
#include "xil_io.h" //led_controller.h中用到了Xil_Out32
#include "led_controller.h"
#include "xil_printf.h"

#define LED_BASE_ADDR XPAR_LED_CONTROLLER_0_S00_AXI_BASEADDR
#define LED_REG0 0

#define DELAY 50000000

int main()
{
int temp = 0;
int led_value = 0;
int i = 0;

xil_printf("led_controller ip test/r/n");
xil_printf("----------------------/r/n");

while(1)
{
/* write reg0 */
LED_CONTROLLER_mWriteReg(LED_BASE_ADDR,LED_REG0,led_value);

/* read reg0 */
temp = LED_CONTROLLER_mReadReg (LED_BASE_ADDR,LED_REG0);

/* show value */
xil_printf("led = %d",led_value);
xil_printf("/ttemp = %d/r/n",temp);

if(led_value led_value++;
else
led_value = 0;

for(i=0;i

}
}

2.9.配置運行,觀察結(jié)果

pIYBAF9uGi-AHJUrAAHUxdwDsmU560.png


pIYBAF9uGjCASbXcAABXlbF0ZC4860.png

3.實驗總結(jié)
這個實驗做了很長時間,最后看著燈思考了很長時間:

從實驗的角度來說說:用HDL創(chuàng)建一個掛載在AXI總線上的ip核去控制LED,然后在存儲器映射下這個ip核的四個寄存器會有自己的地址,CPU靠這個地址來訪問寄存器,為了操作簡單,一般會有一個基地址,其余寄存器是相對這個基地址的偏移,所以控制代碼只需要讀寫寄存器就可以了;

嵌入式原理的角度來說,其實設計都是基于寄存器的,硬件靠寄存器的數(shù)據(jù)來工作,寄存器掛載在總線上,所以寄存器會有一個地址(寄存器映射),我們通過指針就可以訪問內(nèi)存空間中這個地址處的數(shù)據(jù);

從嵌入式發(fā)展的角度來說,通常寄存器地址映射都是由廠商出廠時候映射好的,我們只需要查看芯片參考手冊去編程,現(xiàn)在整個硬件可以自己設計,寄存器地址映射只是在一個固定的區(qū)間段內(nèi)(AXI 從機地址1G),變的更加靈活了,也說明了整個數(shù)字系統(tǒng)的設計正在由板上設計轉(zhuǎn)入片上設計,原來由一塊板子才能搞定的任務,現(xiàn)在只需要一個芯片即可~

編輯:hfy


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

    關注

    5045

    文章

    18816

    瀏覽量

    298442
  • vhdl
    +關注

    關注

    30

    文章

    816

    瀏覽量

    127951
  • Vivado
    +關注

    關注

    19

    文章

    797

    瀏覽量

    65853
收藏 人收藏

    評論

    相關推薦

    使用MATLAB Simulink和HDL編碼器創(chuàng)建自定義IP--AWB

    自動白平衡模塊的設計是使用 HDL Coder 在 MATLAB 和 Simulink 中創(chuàng)建的。HDL Coder能夠生成 HDL 文件,這些文件可以作為
    的頭像 發(fā)表于 11-13 09:27 ?924次閱讀
    使用MATLAB Simulink和<b class='flag-5'>HDL</b>編碼器<b class='flag-5'>創(chuàng)建</b><b class='flag-5'>自定義</b><b class='flag-5'>IP</b>--AWB

    nios 自定義ip問題求助

    sopc builder中添加自定義ip,編寫自定義ip的時候, avalon接口信號:clk、rst
    發(fā)表于 11-26 11:11

    xilinx vivado 怎么封裝包含一個ip自定義ip?

    我寫了一個緩存模塊,里面包含有一個BlockRAM的IP,現(xiàn)在想把這個緩存模塊封裝成我的一個自定義ip,但是封裝完成之后仿真的時候會報錯 ,我的步驟是這樣的:1.寫一個.v文件,里面
    發(fā)表于 12-11 10:25

    使用VIVADO IDE設計的最有效方法是什么?

    設計是純粹的IP構(gòu)建。這意味著用戶必須為所有HDL模塊制作自定義IP并將其打包為IP。這可能導致管理大量
    發(fā)表于 03-29 09:14

    玩轉(zhuǎn)Zynq連載24——用戶自定義IP的移植

    /s/1XTQtP5LZAedkCwQtllAEyw提取碼:ld9c1概述這里我們以led_controller_ip工程所創(chuàng)建的用戶自定義LED閃爍IP
    發(fā)表于 09-15 09:55

    玩轉(zhuǎn)Zynq連載25——[ex04] 基于Zynq PL的自定義IP集成

    ,添加到VivadoIP Catalog中,然后和標準IP一樣,在Vivado工程中配置添加這個IP
    發(fā)表于 09-20 11:35

    萊迪思半導體推出全新的模塊化IP,能為客戶提供創(chuàng)建自定義視頻橋接解決方案所需模塊

    萊迪思半導體公司推出7款全新的模塊化IP,支持屢獲殊榮的CrossLink FPGA產(chǎn)品系列,可為消費電子、工業(yè)和汽車應用提供更高的設計靈活性。這些模塊化IP為客戶提供
    發(fā)表于 07-22 12:09 ?762次閱讀

    如何使用Vivado功能創(chuàng)建AXI外設

    了解如何使用Vivado創(chuàng)建和封裝IP功能創(chuàng)建可添加自定義邏輯的AXI外設,以創(chuàng)建
    的頭像 發(fā)表于 11-29 06:48 ?7022次閱讀
    如何使用<b class='flag-5'>Vivado</b>功能<b class='flag-5'>創(chuàng)建</b>AXI外設

    自定義sobel濾波IP,IP接口遵守AXI Stream協(xié)議

    自定義sobel濾波IP IP接口遵守AXI Stream協(xié)議
    的頭像 發(fā)表于 08-06 06:04 ?3787次閱讀

    使用VIvado封裝自定IP并使用IP創(chuàng)建工程

    在FPGA實際的開發(fā)中,官方提供的IP并不是適用于所有的情況,需要根據(jù)實際修改,或者是在自己設計的IP時,需要再次調(diào)用時,我們可以將之前的設計封裝成自定義IP,然后在之后的設計中繼續(xù)使
    的頭像 發(fā)表于 04-21 08:58 ?5293次閱讀

    如何在Vivado中更改自定義的Interface

    因為 BD 中連線太多,所以想自定義下 interface 簡化連線,定義好了一個 interface,但當準備在自定義 IP 中指定它時,發(fā)現(xiàn)我把一個信號的方向搞錯了,應該
    的頭像 發(fā)表于 08-02 09:49 ?2672次閱讀
    如何在<b class='flag-5'>Vivado</b>中更改<b class='flag-5'>自定義</b>的Interface

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 03-15 19:39 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創(chuàng)建</b>

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 07-06 18:50 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創(chuàng)建</b>

    Vivado設計套件用戶指南:創(chuàng)建和打包自定義IP

    電子發(fā)燒友網(wǎng)站提供《Vivado設計套件用戶指南:創(chuàng)建和打包自定義IP.pdf》資料免費下載
    發(fā)表于 09-13 14:54 ?0次下載
    <b class='flag-5'>Vivado</b>設計套件用戶指南:<b class='flag-5'>創(chuàng)建</b>和打包<b class='flag-5'>自定義</b><b class='flag-5'>IP</b>

    Vivado Design Suite用戶指南:創(chuàng)建和打包自定義IP

    電子發(fā)燒友網(wǎng)站提供《Vivado Design Suite用戶指南:創(chuàng)建和打包自定義IP.pdf》資料免費下載
    發(fā)表于 09-13 11:34 ?0次下載
    <b class='flag-5'>Vivado</b> Design Suite用戶指南:<b class='flag-5'>創(chuàng)建</b>和打包<b class='flag-5'>自定義</b><b class='flag-5'>IP</b>