原创 【博客大赛】【原创】 基于AXI总线的自定义IP设计(二)

2012-8-22 09:24 5623 17 23 分类: FPGA/CPLD 文集: xilinx FPGA

博客系统一次只能上传10张图片,只能将文章分两篇发了,汗啊!

上接“基于AXI总线的自定义IP设计(一)

 

3.2AXI-Lite IP功能设计

image020.jpg

图3-8 自定义IP路径

        自定义IP设计完后,需要为其编写功能代码,在如图3-8路径中,有一个vhdl文件夹,自定义IP设计生成的HDL代码默认是由VHDL编写的。 其中有两个文件:axi_lite_cusip.vhd和user_logic.vhd,如图3-9所示为AXI-Lite IP接口信号图,其中文件axi_lite_cusip.vhd实现AXI-Lite IPIF模块的功能,文件user_logic.vhd实现User IP Design模块的功能,因此自定义IP的功能代码主要在user_logic.vhd文件中编写。此处的设计Xilinx就比Altera更人性化了, 在Altera的NiosII自定义外设设计时,类似axi_lite_cusip.vhd和user_logic.vhd的接口文件都需要工程师自己编 写,而Xilinx相当于为工程师提供了一个模板,只需要添加相应的功能代码就可完成设计,这样大大减少了工作量,工作效率得到提高。

image022.jpg

图3-9 AXI-Lite IP接口信号图

        下面来看一下user_logic.vhd里面有什么奥秘,如图3-10所示为模块参数,其中参数C_NUM_REG表示寄存器的数量,在本设计中 设置了两个,一个用于读取DIP拨码开关状态值,另一个用于控制LED灯;如图3-11所示为模块接口信号,其中BUS2IP_**表示从AXI- Lite总线输入到IP的信号,包含时钟信号BUS2IP_CLK、复位信号BUS2IP_Resetn、数据信号Bus2IP_Data、字节使能信号 Bus2IP_BE、读使能信号Bus2IP_RdCE、写使能信号Bus2IP_WrCE;而IP2BUS_**表示从IP输出给AXI-Lite总线 的信号,包含数据信号IP2Bus_Data、读确认信号IP2Bus_RdAck、写确认信号IP2Bus_WrAck、错误确认信号 IP2Bus_Error。

image024.jpg

图3-10模块参数

image026.jpg

图3-11 模块接口信号

        功能模块需要加入的功能为两部分,对应两个寄存器,如表1所示为两个寄存器的映射。

表1 两寄存器映射

寄存器

使能信号

对应地址映射

功能

reg0

BUS2IP_RdCE=“10”

C_BASEADDR

只读

reg1

BUS2IP_WrCE=“01”

C_BASEADDR+0x4

只写

 

        reg0是读取DIP拨码开关状态值功能,因此是一个读寄存器操作,首先需要加入DIP拨码开关的输入端口,如图3-12所示,相关功能代码如图3-13所示。

image028.jpg

图3-12 加入端口

image030.jpg

图3-13 读操作功能代码

        reg1是控制LED灯输出功能,因此是一个写寄存器操作,加入的LED输出端口如图3-12所示,相关功能代码如图3-14所示。

image032.jpg

图3-14 写操作功能代码

       功能代码编写完成后,将AXI_LITE_CUSIP加入到系统中,如图3-15所示,自定义的IP是连接到AXI-Lite总线上的。

image034.jpg

图3-15 AXI_LITE_CUSIP总线连接

        系统建立完成后,在ISE中进行编译生成比特流文件,然后在SDK软件中编写相应软件代码,代码如图3-16所示,主要实现功能是读取DIP状态 值,然后将读取得到的DIP状态值通过LED输出,其中读取DIP状态值通过读取reg0得到,reg0的地址为 XPAR_AXI_LITE_CUSIP_0_BASEADDR;而控制LED输出通过写reg1得到,reg1的地址为 XPAR_AXI_LITE_CUSIP_0_BASEADDR + 0x4。

image036.jpg

图3-16 SDK软件代码

        一切就绪之后,通过ISIM仿真,查看自定义IP工作状态,如图3-17(a)所示为读操作,当 bus2ip_rnw=’1’,bus2ip_rdce=”10”时,表示AXI-Lite总线请求一次读操作,而自定义IP将ip2bus_rdack 置’1’,将数据赋值给ip2bus_data应答这次读操作;如图3-17(b)所示为写操作,当 bus2ip_rnw=’0’,bus2ip_wrce=”01”时表示AXI-Lite总线请求一次写操作,而自定义IP将ip2bus_wrack 置’1’,并读取数据应答这次写操作。

38.jpg

图3-17

3.3 小结

        本节主要介绍了基于AXI-Lite总线的自定义IP的设计,其中详细介绍了自定义IP的设计流程。从最后仿真图可以验证自定义IP,基本完成了读和写操作。详细的设计流程和基于开发板调试的实际效果可观看设计视频,视频链接如下:

PC端设计调试:http://v.youku.com/v_show/id_XMzE0MzA1Nzc2.html

上板实际效果:http://v.youku.com/v_show/id_XMzE0Mjk1MjE2.html

PARTNER CONTENT

文章评论6条评论)

登录后参与讨论

Hoki 2012-9-30 17:02

还需要修改一个.mpd文件,加入端口说明才能显示

Hoki 2012-9-30 17:01

linux驱动的话,应该是要自己写的,需要熟悉linux底层驱动开发的,这个比较复杂,抱歉,这方面我也不是很熟悉

用户377235 2012-9-26 23:30

还有就是,应该用什么工具修改IP代码并进行综合,是XPS吗?您的博客中说:“ 功能代码编写完成后,将AXI_LITE_CUSIP加入到系统中”,但是中间的步骤省略了,我修改完了代码,加入LED和按键,并修改了Port Map,结果加入到XPS中后并没有看到LED和按键的Port

用户412852 2012-9-26 17:57

Hoki你好,我想在Linux下调用这个IP,之前问能否自动生成驱动也指的是Linux驱动。SDK可以生成Linux驱动吗,如果不能的话,应该从何处着手?希望能给些建议

Hoki 2012-9-20 15:52

会生成驱动,用户可在此基础上修改

用户412852 2012-9-18 18:01

请问这个IP在软件上应该如何调用?SDK会为它自动生成底层代码和驱动吗?

用户162746 2008-10-20 08:38

BKS-S 32M-00 BKS-S 32M-10(尾线要求:10米) BTL5-E10-M0102-P-S32 BTL5-E10-M0175-B-KA05 BTL5-E10-M0340-B-S32 BTL5-E10-M0350-B-S32 BTL5-E10-M0550-B-S32 BTL5-E10-M0650-B-S32 BTL5-E10-M0800-B-S32 BTL-P-1013-4R
相关推荐阅读
Hoki 2017-01-11 17:35
LX9开发板呼吸灯实现
对LX9开发板硬件评测后,从这一节开始真正进入FPGA开发的世界。很多开发板的例程中必有跑马灯实验,老跑马也没意思,咱来把新潮的,整一个呼吸灯。 呼吸灯最初是出现在apple公司的笔记本产品中,当合上...
Hoki 2017-01-11 16:47
LX9的microblaze配置
虽然XC6SLX9芯片资源比较少,但是嵌一个microblaze还是搓搓有余的,这一节就来评测一下在XC6SLX9上microblaze的配置。 有两种方法配置microblaze,一是在ISE软件中...
Hoki 2017-01-11 16:32
zynq评测
Zynq芯片是业界第一款在FPGA中集成ARM核的芯片,由FPGA的发明者xilinx公司推出的。Zynq严格来说不能以FPGA来定义它,因为其是以处理器为中心的平台,能够在单芯片上提供软、硬件和 I...
Hoki 2017-01-11 16:19
u-boot
Zyny芯片启动加载分为3步: 1. 芯片上电启动,首先读取BootROM中的程序,初始化一些必要的外设,然后根据专用引脚电平判断该从何处启动first stage Bootloader(FSBL),...
Hoki 2017-01-11 16:09
基于zynq的交叉编译平台
Zynq芯片的最大特点是其集成了双ARM Cortex-A9处理器,因此zynq的应用基本是以这个ARM核为核心,再配合FPGA逻辑作为协处理器,几乎能实现所有较复杂的应用。并且在ARM上可以跑操作系...
Hoki 2017-01-11 15:54
u-boot image生成
这节介绍一下如何生成u-boot image文件,在SDK软件中点击Xilinx Tools→Create Boot Image工具即可生成,但是生成image文件需要首先集齐3个文件:u-boot....
EE直播间
更多
我要评论
6
17
关闭 站长推荐上一条 /3 下一条