深入浅出FPGA-17-xilinx_zynq7000_EPP上一个简单实验(PS+PL)

该博客介绍了一个使用Xilinx Zynq7000 EPP开发板进行PS+PL结合的实验,通过添加自定义IP到AXI总线并编写C代码控制寄存器,实现LED闪烁。实验涉及PlanAhead、XPS和SDK工具的使用,包括IP核创建、硬件配置、驱动生成及C代码编程等步骤。
摘要由CSDN通过智能技术生成

引言

前面两个实验,PL是传统的FPGA开发,PS是传统的嵌入式开发。

zynq7000EPP是xilinx比较高端的FPGA开发板,XC7Z020内部集成了两个cortexa9的硬核,外部有1G的DDR3,所以单纯做FPGA太浪费了。但是单纯用PS资源,就没必要用FPGA了,所以只有将两者结合使用才能体现其价值所在。

即,PS+PL。添加自己的一个IP到AXI总线上,然后通过SDK编码控制它的寄存器,这就是本小节的实验内容。


17.1 实验目的

1》  熟悉zynq7000 EPP资源和design suite

2》  PL编码,PS编码,实现一个简单逻辑。

17.2 实验环境

Board :ZYNQ7000 EPP

Device:XC7Z020CLG484ACX1221

Design suite:14.1 (PlanAhead+XPS+SDK)

17.3   实验准备

a)        会planAhead创建工程:ps_pl。

b)        简单了解和使用XPS和SDK


17.4  实验内容

a)        添加自己一个IP:rill_ip,挂到AXI上,此IP有一个output连到外部一个LED上。

b)        在SDK编写C代码控制这个IP的寄存器来控制此设备,进而控制LED的闪烁。


17.5 实验步骤

a)        打开planAhead,创建embedded新工程,添加PS7。

b)        打开XPS->hardware,添加自己的ip:rill_ip。

c)        AXI4-lite.

d)        一个32位寄存器。

e)        生成driver。

f)         修改此IP的文件:MPD文件,rill_ip.vhd,user_logic.vhd。三个文件。

File:mpd,1个地方需要修改,如图:这3个文件的路径很深,不好找,截图上面有路径,方便很多。

可以根据截图找到对应位置,然后添加相应代码。

也可以参考附录代码。



File:rill_ip.vhd: 2个地方需要修改。

 

File:user_logic.vhd: 3个地方需要修改。

 

g)        将此ip添加到XPS工程。

h)        自动映射。注意port名称,ucf文件里要用。

i)          添加UCF文件,内容:ps_pl.ucf。

j)          Create TOP HDL,然后生成bitstream。

k)         导出hardware,launch SDK。

l)          在SDK里创建helloword工程。

m)      SDK编码,内容:helloworld.c。读写寄存器。

n)        Program FPGA

o)        Run AS,configure

p)        Run


17.6  实验结果

看板子,DS18这个led会由亮变灭:串口也有打印。

 

,

 



附:

文件1:rill_ip_v2_1_0.mpd:

###################################################################
##
## Name     : rill_ip
## Desc     : Microprocessor Peripheral Description
##          : Automatically generated by PsfUtility
##
###################################################################

BEGIN rill_ip

## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION HDL = VHDL
OPTION IP_GROUP = MICROBLAZE:USER
OPTION DESC = RILL_IP
OPTION ARCH_SUPPORT_MAP = (others=DEVELOPMENT)


## Bus Interfaces
BUS_INTERFACE BUS = S_AXI, BUS_STD = AXI, BUS_TYPE = SLAVE

## Generics for VHDL or Parameters for Verilog
PARAMETER C_S_AXI_DATA_WIDTH = 32, DT = INTEGER, BUS = S_AXI, ASSIGNMENT = CONSTANT
PARAMETER C_S_AXI_ADDR_WIDTH = 32, DT = INTEGER, BUS = S_AXI, ASSIGNMENT = CONSTANT
PARAMETER C_S_AXI_MIN_SIZE = 0x000001ff, DT = std_logic_vector, BUS = S_AXI
PARAMETER C_USE_WSTRB = 0, DT = INTEGER
PARAMETER C_DPHASE_TIMEOUT = 8, DT = INTEGER
PARAMETER C_BASEADDR = 0xffffffff, DT = std_logic_vector, MIN_SIZE = 0x100, PAIR = C_HIGHADDR, ADDRESS = BASE, BUS = S_AXI
PARAMETER C_HIGHADDR = 0x00000000, DT = std_logic_vector, PAIR = C_BASEADDR, ADDRESS = HIGH, BUS = S_AXI
PARAMETER C_FAMILY = virtex6, DT = STRING
PARAMETER C_NUM_REG = 1, DT = INTEGER
PARAMETER C_NUM_MEM = 1, DT = INTEGER
PARAMETER C_SLV_AWIDTH = 32, DT = INTEGER
PARAMETER C_SLV_DWIDTH = 32, DT = INTEGER
PARAMETER C_S_AXI_PROTOCOL = AXI4LITE, TYPE = NON_HDL, ASSIGNMENT = CONSTANT, DT = STRING, BUS = S_AXI

## Ports
PORT led = "",DIR = O
PORT S_AXI_ACLK = "", DIR = I, SIGIS = CLK, BUS = S_AXI
PORT S_AXI_ARESETN = ARESETN, DIR = I, SIGIS = RST, BUS = S_AXI
PORT S_AXI_AWADDR = AWADDR, DIR = I, VEC = [(C_S_AXI_ADDR_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
PORT S_AXI_AWVALID = AWVALID, DIR = I, BUS = S_AXI
PORT S_AXI_WDATA = WDATA, DIR = I, VEC = [(C_S_AXI_DATA_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
PORT S_AXI_WSTRB = WSTRB, DIR = I, VEC = [((C_S_AXI_DATA_WIDTH/8)-1):0], ENDIAN = LITTLE, BUS = S_AXI
PORT S_AXI_WVALID = WVALID, DIR = I, BUS = S_AXI
PORT S_AXI_BREADY = BREADY, DIR = I, BUS = S_AXI
PORT S_AXI_ARADDR = ARADDR, DIR = I, VEC = [(C_S_AXI_ADDR_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
PORT S_AXI_ARVALID = ARVALID, DIR = I, BUS = S_AXI
PORT S_AXI_RREADY = RREADY, DIR = I, BUS = S_AXI
PORT S_AXI_ARREADY = ARREADY, DIR = O, BUS = S_AXI
PORT S_AXI_RDATA = RDATA, DIR = O, VEC = [(C_S_AXI_DATA_WIDTH-1):0], ENDIAN = LITTLE, BUS = S_AXI
PORT S_AXI_RRESP = RRESP, DIR = O, VEC = [1:0], BUS = S_AXI
PORT S_AXI_RVALID = RVALID, DIR = O, BUS = S_AXI
PORT S_AXI_WREADY = WREADY, DIR = O, BUS = S_AXI
PORT S_AXI_BRESP = BRESP, DIR = O, VEC = [1:0], BUS = S_AXI
PORT S_AXI_BVALID = BVALID, DIR = O, BUS = S_AXI
PORT S_AXI_AWREADY = AWREADY, DIR = O, BUS = S_AXI

END


文件2:rill_ip.vhd

------------------------------------------------------------------------------
-- rill_ip.vhd - entity/architecture pair
------------------------------------------------------------------------------
-- IMPORTANT:
-- DO NOT MODIFY THIS FILE EXCEPT IN THE DESIGNATED SECTIONS.
--
-- SEARCH FOR --USER TO DETERMINE WHERE CHANGES ARE ALLOWED.
--
-- TYPICALLY, THE ONLY ACCEPTABLE CHANGES INVOLVE ADDING NEW
-- PORTS AND GENERICS THAT GET PASSED THROUGH TO THE INSTANTIATION
-- OF THE USER_LOGIC ENTITY.
------------------------------------------------------------------------------
--
-- ***************************************************************************
-- ** Copyright (c) 1995-2012 Xilinx, Inc.  All rights reserved.            **
-- **                                                                       **
-- ** Xilinx, Inc.                                  
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值