RM新时代网站-首页

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

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

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

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

電子設(shè)計(jì) ? 來(lái)源:csdn ? 作者:Mculover666 ? 2020-12-21 16:34 ? 次閱讀

作者:Mculover666

1.實(shí)驗(yàn)?zāi)康?br /> 用HDL語(yǔ)言+Vivado創(chuàng)建一個(gè)掛載在AXI總線上的自定義IP核

2.實(shí)驗(yàn)步驟
2.1.創(chuàng)建一個(gè)新的項(xiàng)目

o4YBAF9uGgCADIelAAJlay_b3Qw323.png

2.2.調(diào)用Create and Package IP Wizard,創(chuàng)建一個(gè)新的AXI-Lite從機(jī)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 — 實(shí)例化了所有的AXI-Lite接口,在這種情況下,只有一個(gè)接口存在
led_controller_v1_0_S00_AXI.v — 包含了處理PL外設(shè)與PS端軟件的AXI4-Lite接口功能
打開(kāi)led_controller_v1_0_S00_AXI.v文件,找到Users to add ports here,然后在其后添加需要的端口

o4YBAF9uGguAavAaAAAhqCU2Fz4889.png

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

pIYBAF9uGgyAEJf4AAAY8K9tieo954.png

保存文件,打開(kāi)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

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

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

pIYBAF9uGhaAZHkwAABaBq83HYc677.png

點(diǎn)擊Add IP,搜索led,添加led_controllerIP:

o4YBAF9uGheAWz04AABoHaQv0bY451.png

因?yàn)長(zhǎng)EDs_out要連接板載LED,所以點(diǎn)擊引腳,按下ctrl+t導(dǎo)出引腳:

pIYBAF9uGhmALO0YAABoNojLZ98982.png

添加Zynq ps核,自動(dòng)連線:

o4YBAF9uGh2ACrrdAAVenZx4Qms666.png

按下F6驗(yàn)證設(shè)計(jì):

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,打開(kāi)實(shí)現(xiàn)設(shè)計(jì),導(dǎo)出硬件文件,運(yùn)行SDK

o4YBAF9uGiaAYtkWAAID64ZX0s8871.png

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

2.6.添加驅(qū)動(dòng)庫(kù)
光標(biāo)選中l(wèi)ed_test_bsp之后再進(jìn)行下面的操作?。?!

選擇Xilinx->Repositories:

o4YBAF9uGiiAE2_kAACREjQlJaw286.png

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

檢查一下庫(kù)有沒(méi)有被分派到LED_Controller外設(shè),打開(kāi)system.mss文件,可以看到外設(shè)驅(qū)動(dòng)中存在led_controller_0:

o4YBAF9uGimABPAsAAEksenE7Zc394.png

點(diǎn)擊最上面modify this BSP's Setting檢查驅(qū)動(dòng)設(shè)置:

o4YBAF9uGiuAeT2oAADtbxwG73c144.png

至此,led_controlerip核的硬件設(shè)計(jì)完畢,BSP驅(qū)動(dòng)添加完畢,可以開(kāi)始寫應(yīng)用測(cè)試程序了。

2.7.編寫應(yīng)用代碼
先在src文件夾下創(chuàng)建一個(gè)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.配置運(yùn)行,觀察結(jié)果

pIYBAF9uGi-AHJUrAAHUxdwDsmU560.png


pIYBAF9uGjCASbXcAABXlbF0ZC4860.png

3.實(shí)驗(yàn)總結(jié)
這個(gè)實(shí)驗(yàn)做了很長(zhǎng)時(shí)間,最后看著燈思考了很長(zhǎng)時(shí)間:

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

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

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

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19104

    瀏覽量

    304793
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    817

    瀏覽量

    128119
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    812

    瀏覽量

    66470
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    自動(dòng)白平衡模塊的設(shè)計(jì)是使用 HDL Coder 在 MATLAB 和 Simulink 中創(chuàng)建的。HDL Coder能夠生成 HDL 文件,這些文件可以作為
    的頭像 發(fā)表于 11-13 09:27 ?1152次閱讀
    使用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問(wèn)題求助

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

    xilinx vivado 怎么封裝包含一個(gè)ip自定義ip?

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

    使用VIVADO IDE設(shè)計(jì)的最有效方法是什么?

    設(shè)計(jì)是純粹的IP構(gòu)建。這意味著用戶必須為所有HDL模塊制作自定義IP并將其打包為IP。這可能導(dǎo)致管理大量
    發(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中,然后和標(biāo)準(zhǔn)IP一樣,在Vivado工程中配置添加這個(gè)IP
    發(fā)表于 09-20 11:35

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

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

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

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

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

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

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

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

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

    因?yàn)?BD 中連線太多,所以想自定義下 interface 簡(jiǎn)化連線,定義好了一個(gè) interface,但當(dāng)準(zhǔn)備在自定義 IP 中指定它時(shí),發(fā)現(xiàn)我把一個(gè)信號(hào)的方向搞錯(cuò)了,應(yīng)該
    的頭像 發(fā)表于 08-02 09:49 ?2888次閱讀
    如何在<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設(shè)計(jì)套件用戶指南:創(chuàng)建和打包自定義IP

    電子發(fā)燒友網(wǎng)站提供《Vivado設(shè)計(jì)套件用戶指南:創(chuàng)建和打包自定義IP.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 14:54 ?0次下載
    <b class='flag-5'>Vivado</b>設(shè)計(jì)套件用戶指南:<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èi)下載
    發(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>
    RM新时代网站-首页