AXI总线基本知识:(基于uart_lite IP核)

1.属于片内总线

2.Uart_lite IP核接口描述:
ACLK 主从设备交换数据的时钟信号
ARESETN 从模块复位信号
INTERRUPT 中断信号

AWADDR[3:0] 写地址
AWVALID 写地址有效标志
AWREADY 写地址通道握手信号

WDATA[31:0] 写数据
WSTRB[3:0] 写数据选通信号,指明数据总线哪个字节有效,在AXI-uartlite中此信号不起作用
主机输出
WVALID 写数据有效标志位
WREADY 写数据通道握手信号

BRESP[1:0] 写应答,指明发送是否被成功接收:从机输出
BVALID 写应答信号有效标志位:从机输出
BREADY 写应答通道握手信号:主机输出

在这里插入图片描述


ARADDR[3:0] 读地址
ARVALID 读地址有效标志位
ARREADY 读地址通道握手信号

RDATA[31:0] 读数据
RRESP 读应答,指明读操作的状态,是否成功:从机输出
RVALID 读数据有效标志位
RREADY 读数据通道握手信号

在这里插入图片描述

vivado调用的uart_lite属于从设备功能,主设备的逻辑需要自己编写,控制逻辑需要将从设备RXFIFO中的数据读取,并将其写入一个新的FIFO(外部输入的图片数据信息)

4bits的读/写地址线被划分好了地址空间,分别对应4个寄存器。
且表格上方的文字包含两点重要信息:

(1)AXI-Lite协议中的_wstrb信号,在此无效;
(2)由AXI端向IP核写数据时,IP会等待_awvalid和_wvalid这两个信号同时有效的时候,才会与Master进行握手,完成数据传输。

目前由使用了由RX端向AXILite的Read通道发数据的功能。经过测试发现,只要开启了intr,那么,每当RX端接受到1个Byte的数据,IP就会发出一个intr的高电平脉冲,来告诉User,IP内部的FIFO已有数据。
所以,自己写读写逻辑的时候,只需监测intr,每收到一个intr脉冲,就由AXILite端,向 araddr = 0x0 发送读请求,便可获得一个 8bits 的数据。

读一个数据时,主设备发送的valid信号需要维持两个时钟,从设备在第一个时钟上升沿检测到valid有效时,立马使得ready有效,在第二个时钟上升沿时,由于valid和ready都有效,此时主设备可以读取从设备的数据
在这里插入图片描述

(一种读时序)

主设备发送,从设备接收:arvalid、araddr、rready
从设备发送,主设备接收:arready、rdata、rvalid
1)主设备在clk1上升沿后,将arvalid、araddr、rready建立。
2)从设备在clk2上升沿后,因检测到主设备发送的arvalid为1,从设备将arready建立
3)从设备在clk3上升沿后,因检测到arvalid和arready为1,从设备输出数据rdata和rvalid,主设备会在下一个时钟沿将数据读出,即检测到rvalid有效时,读出RXFIFO中数据
4)主设备在clk3上升沿后,因检测到arready为1,在clk4上升沿后可以取出rdata和rvalid

注意:
1)arready似乎在检测arvalid是1时,在下一个时钟沿才会建立arready
2)从设备输出的arready只会维持一个周期
从设备在检测到arvalid和arready为1,从设备输出数据rdata和rvalid
其中rvalid只维持一个周期,读出的状态寄存器值为00000004,即RXFIFO没满也没有数据,TXFIFO没满且为空,中断信号无效
3)在从设备重新建立新的arready时,从设备会在此时将之前输出的数据更新为0
4)Arready信号重新建立的时候,RXFIFO里的数据会被清零

备注:pg142-axi-uartlite axi_lite_ipif_ds765

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值