电子发烧友网 > 今日头条 > 正文

ZYNQ&AIX总线&PS与PL内部通信(用户自定义IP)

2018年01月09日 14:10 次阅读

                                                  ZYNQ 、AXI协议、PS与PL内部通信 
三种AXI总线分别为:

AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;

AXI4-Lite:(For simple, low-throughput memory-mapped communicaTIon )是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。

AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。

AXI4总线和AXI4-Lite总线具有相同的组成部分:

(1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;

(2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;

(3)写地址通道,包含AWVALID,AWADDR, AWREADY信号;

(4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;

(5)写应答通道,包含BVALID, BRESP, BREADY信号;

(6)系统通道,包含:ACLK,ARESETN信号。

AXI4-Stream总线的组成:

(1)ACLK信号:总线时钟,上升沿有效;

(2)ARESETN信号:总线复位,低电平有效

(3)TREADY信号:从机告诉主机做好传输准备;

(4)TDATA信号:数据,可选宽度32,64,128,256bit

(5)TSTRB信号:每一bit对应TDATA的一个有效字节,宽度为TDATA/8

(6)TLAST信号:主机告诉从机该次传输为突发传输的结尾;

(7)TVALID信号:主机告诉从机数据本次传输有效;

(8)TUSER信号 :用户定义信号,宽度为128bit。

三种AXI接口分别是:

AXI-GP接口(4个):是通用的AXI接口,包括两个32位主设备接口和两个32位从设备接口,用过改接口可以访问PS中的片内外设。

AXI-HP接口(4个):是高性能/带宽的标准的接口,PL模块作为主设备连接(从下图中箭头可以看出)。主要用于PL访问PS上的存储器(DDR和On-Chip RAM)

AXI-ACP接口(1个):是ARM多核架构下定义的一种接口,中文翻译为加速器一致性端口,用来管理DMA之类的不带缓存的AXI外设,PS端是Slave接口。

我们可以双击查看ZYNQ的IP核的内部配置,就能发现上述的三种接口,图中已用红色方框标记出来,我们可以清楚的看出接口连接与总线的走向:

AXI协议之握手协议

AXI4所采用的是一种READY,VALID握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。传输源产生VLAID信号来指明何时数据或控制信息有效。而目地源产生READY信号来指明已经准备好接受数据或控制信息。传输发生在VALID和READY信号同时为高的时候。VALID和READY信号的出现有三种关系:VALID先变高READY后变高,READY先变高VALID后变高,VALID和READY信号同时变高。无论什么情况信息传输立马发生在VALID和READY信号同时为高且ACLK上升沿,时序图如下:

axi.jpg

需要强调的是,AXI的五个通道,每个通道都有握手机制,接下来我们就来分析一下AXI-Lite的源码来更深入的了解AXI机制。

突发式读

w.jpg

当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST信号来表示最后一个被传输的数据。

突发式写

ww.png

这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

PS与PL内部通信(用户自定义IP)

  先要自定义一个AXI-Lite的IP,新建工程之后,选择,菜单栏->Tools->Creat and Package IP:

ip.jpg

选择Next>>选择Create AXI4 Peripheral>>然后Next默认,选择Next>>注意这里接口类型选择Lite,选择Next>>选择Edit IP,点击Finish:

此后,Vivado会新建一个工程,专门编辑该IP,通过该工程,我们就可以看到Vivado为我们生成的AXI-Lite的操作源码:

ip2.png

AXI-Lite 源码分析

当打开顶层文件的时,是一堆AXI的信号。


PS向PL写数据(PS作为Master,PL作为Slave)

先来看一段WDATA相关的代码:

always @( posedge S_AXI_ACLK ) begin   if ( S_AXI_ARESETN == 1'b0 )     begin       slv_reg0 <= 0;       slv_reg1 <= 0;       slv_reg2 <= 0;       slv_reg3 <= 0;     end   else begin     if (slv_reg_wren)       begin         case ( axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )           2'h0:             for ( byte_index = 0; byte_index <= (C_S_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )               if ( S_AXI_WSTRB[byte_index] == 1 ) begin                 // RespecTIve byte enables are asserted as per write strobes                 // Slave register 0                 slv_reg0[(byte_index*8) +: 8] <= S_AXI_WDATA[(byte_index*8) +: 8];               end             2'h1:             for ( byte_index = 0; byte_index <= (C_S_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )               if ( S_AXI_WSTRB[byte_index] == 1 ) begin                 // RespecTIve byte enables are asserted as per write strobes                 // Slave register 1                 slv_reg1[(byte_index*8) +: 8] <= S_AXI_WDATA[(byte_index*8) +: 8];               end             2'h2:             for ( byte_index = 0; byte_index <= (C_S_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )               if ( S_AXI_WSTRB[byte_index] == 1 ) begin                 // RespecTIve byte enables are asserted as per write strobes                 // Slave register 2                 slv_reg2[(byte_index*8) +: 8] <= S_AXI_WDATA[(byte_index*8) +: 8];               end             2'h3:             for ( byte_index = 0; byte_index <= (C_S_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )               if ( S_AXI_WSTRB[byte_index] == 1 ) begin                 // Respective byte enables are asserted as per write strobes                 // Slave register 3                 slv_reg3[(byte_index*8) +: 8] <= S_AXI_WDATA[(byte_index*8) +: 8];               end             default : begin                       slv_reg0 <= slv_reg0;                       slv_reg1 <= slv_reg1;                       slv_reg2 <= slv_reg2;                       slv_reg3 <= slv_reg3;                     end         endcase       end   end

这段程序的作用是,当PS那边向AXI4-Lite总线写数据时,PS这边负责将数据接收到寄存器slv_reg。而slv_reg寄存器有0~3共4个。至于赋值给哪一个由axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB]决定,根据宏定义其实就是由axi_awaddr[3:2] (写地址中不仅包含地址,而且包含了控制位,这里的[3:2]就是控制位)决定赋值给哪个slv_reg。

PS读取PL数据(PS作为Master,PL作为Slave)

我们继续来看有关RADTA读数据代码:

// Output register or memory read data always @( posedge S_AXI_ACLK ) begin   if ( S_AXI_ARESETN == 1'b0 )     begin       axi_rdata  <= 0;     end   else     begin           // When there is a valid read address (S_AXI_ARVALID) with       // acceptance of read address by the slave (axi_arready),       // output the read dada       if (slv_reg_rden)         begin           axi_rdata <= reg_data_out;     // register read data         end        end end//当PS读取数据时,程序会把reg_data_out复制给axi_rdata(RADTA读数据)。 always @(*) begin       // Address decoding for reading registers       case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )         2'h0   : reg_data_out <= slv_reg0;         2'h1   : reg_data_out <= slv_reg1;         2'h2   : reg_data_out <= slv_reg2;         2'h3   : reg_data_out <= slv_reg3;         default : reg_data_out <= 0;       endcase

    ZYNQ嵌入式设计时,用户在PL中自定义的IP相当于PS(ARM的外设)挂在AXI总线上,他们之间是通过AXI总线进行数据传输。创建好哦IP后,文件自动的生成,用户只需要做简单的修改,寄存器赋值就可以。






 

技术专区

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

ZYNQ&AIX总线&PS与PL...

ZYNQ 、AXI协议、PS与PL内部通信 三种AXI总线分别为: AXI4:(For high-p...

发表于 2018-01-09 14:10 次阅读 0条评论
ZYNQ&AIX总线&PS与PL...

无驱动问题的Zynq搭配Pmod开发解决方案

之前我们提到过「P,这一搭配FPGA开发板进行快速原型系统开发的利器。事实上,除了Pmod标准定义接...

发表于 2017-12-29 09:09 次阅读 0条评论
无驱动问题的Zynq搭配Pmod开发解决方案

打造世界最强比特币挖矿机:FPGA vs ASI...

比特大陆公司,一个由芯片设计专家詹克团和吴忌寒联合创立的公司,拥有自己研发的专用集成电路芯片(ASI...

发表于 2017-12-12 16:52 次阅读 0条评论
打造世界最强比特币挖矿机:FPGA vs ASI...

如何使用纯FPGA来实现嵌入式视觉方案

在本例这个简单的架构中,HDMI输入口接收的数据从原始的并行格式的视频数据、Hsync和VSync转...

发表于 2017-12-06 10:42 次阅读 0条评论
如何使用纯FPGA来实现嵌入式视觉方案

赛灵思Vivado设计套件震撼登场

Vivado设计套件终于震撼登场,赛灵思采用先进的 EDA技术和方法,提供了全新的工具套件,可显著提...

发表于 2017-11-24 16:24 次阅读 0条评论
赛灵思Vivado设计套件震撼登场