zedboard第六课(基于reg通信的S_AXI)

IP中有一个AXI_GPIO这个核,它是一个典型的基于reg通信的S_AXI外设。(简称RBCS,register based communicating slave)
PS通过M_AXI_GP向S_AXI的有效REG地址,写入数据或者读取数据。而在S_AXI外设侧,锁存写入的数据并输出到PAD,或者将PAD上读取的数据,锁存输出给AXI总线的READBUS。

用户自定义的,基于REG传递数据的S_AXI外设,主要是在VIVADO生成的模板代码中,添加用户的逻辑代码。
PS侧通过AXI向PL侧写寄存器时,写入的数据被存放在slv_reg[N:0]中。
用户逻辑可以监测PS侧的AXI的写入操作,并生成需要的指示信号。例如:
assign slv_reg_wren = axi_wready && S_AXI_WVALID && axi_awready && S_AXI_AWVALID;

当监测到AXI有新的写入数据时,利用生成的指示信号,获取新写入的slv_reg_x的数据。

PS侧通过AXI从PL侧读寄存器时,待读取的数据,根据地址不同,被分别送到axi_rdata上。
这通过两部分实现。一是MUX模块,而是读使能控制。
MUX模块是一个组合逻辑块,实现多路数据选择器,根据读地址的不同,选择不同的数据通路(datapath)。
always @(*)
case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
3’h0 : reg_data_muxout <= datapath0;
3’h1 : reg_data_muxout <= datapath1;
3’h2 : reg_data_muxout <= datapath2;
3’h3 : reg_data_muxout <= datapath3;
default : reg_data_muxout <= 0;
endcase
读使能控制,基于AXI的读总线的各个控制信号。如下:
assign slv_reg_rden = axi_arready & S_AXI_ARVALID & ~axi_rvalid;
always @( posedge S_AXI_ACLK ) if (slv_reg_rden) axi_rdata <= reg_data_muxout;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值