zoukankan      html  css  js  c++  java
  • AXI协议

    一个贼有用的链接

    http://www.cnblogs.com/lkiller/p/4773235.html
    关于AXI4代码的一些认知(真的比CSDN好用,小声BB)
    写操作。
    首先,在设计时需要确定突发长度,AWLEN[7:0]决定写传输的突发长度。
    AXI4突发类型[AxBURST]来决定
    INCR :增量突发,突发长度为1~256,传输过程中,地址递增。增量取决于Axsize的值
    WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)。
    (AWLEN[7:0]=wlen,AWSIZE=110,AWBURST=01)
    Address_N = Aligned_Address + (N-1) x Number_Bytes
    WSTRB[n:0]对应于对应的写字节,WSTRB[n]对应WDATA[8n+7:8n]。WVALID为低时,WSTRB可以为任意值,WVALID为高时,WSTRB为高的字节线必须指示有效的数据。(因为传输的位宽为64bit,每个字节都有效,WSTRB=8‘hff)
    AWPORT(000正常、安全、数据存取)、AWLOCK(0正常,不支持独占)、AWCACHE(0011,bufferable&cacheable)这三个信号主要是安全级别的,不是很懂慢慢再看
    为了预防READY信号和VALID信号之间发生锁死的情况,需要遵守两个原则:
    1)一个通道中的VALID信号绝对不能依存于其它通道中的READY信号。即,一个通道拉起VALID信号的唯一原因只能是该通道需要发起数据传输,而不看其它通道有没有完成数据传输。
    2)一个通道中,READY信号可以等到VALID信号拉起后再根据自身状况适时拉起。言外之意是,READY信号提前拉起来也可以,只要宿设备已经能够随时接收源设备的数据
     
    1)写地址通道:主设备只有在发送地址和控制信号时,才可以拉起AWVALID信号,只有当从设备拉起AWREADY信号后,主设备才可以更新地址和控制信号;如果地址和控制信号发送结束了,主设备在得到从设备的最后一个AWREADY信号时,才可以将AWREADY信号拉低。如果得不到从设备的AWREADY,主设备就必须保持AWVALID和地址等信号不变。

    读地址通道除去那几个自定义的信号,那就是只剩下四个信号需要控制啦,其中一个包括从设备的AWREADY输入信号和三个输出信号:AWVALID、AWLEN、AWADDR。

    协议设定时,首先是要更新地址和突发大小的更新(地址来自PS端,信号trans_addr来确定。传输大小也是PS端传输的,信号trans_len来决定如果trans_len大于255的话呢,就先传255,如果学校与255呢,就传输trans_len-1)

    因为一个BURST能传输的最大的数据量是256*8byte,对应的么一个BURST的补偿地址是2^8*2^3。

    这时,问题来了。怎么判断一个BURST传输完成了,以及只剩最后一个BURST了。(只剩最后一个BURSET的话,就是补偿地址的高位(大于11)和需要传输的数据数的高位(大于8)相等,那就是说,需要传书的数据只需要一个BURST就可以完成了),如果低位相等的话,则说明一个BURST传输完成 。如果BURST传输完成了,就传数据。最后一次传输完成了就传输新的地址。

    传输地址的状态机来判断AWVALID信号什么时候为高。首先,只有主设备发送地址和控制信号时,AWVALID才会变高(设计为当FIFO中的数大于一个BURST的数据量时)。

    awready信号和wready信号可以默认为高,这样就可以少断言一次

    从设备控制的用于发送写响应信号的BVALID信号必须要等到从设备接收了写数据之后才可以拉起。只有写数据操作完成了,从设备才可以向主设备发送响应信号。

    来一段代码:(算了)

    2)写数据通道:主设备和从设备在写数据通道的握手方式和写地址通道相同。
    这个通道就主要是:WDATA(rdata)、WLAST、WVALID(fifo数据有效)、WREADY,WSTRB
    当wvalid和wready信号都为高时,传输数据有效
    设计两个计数器,在传输信号开始后,wvalid和wready信号都相等时,分别用来计算本burst传输的数据次数以及一共传输的数据数。还是需要在最后一次burst传输时,判断最后一次出传输的数据量。wlast表示一个burst的最后一次传输。
     
    3)写响应通道:与写地址通道、写数据通道不同的是,在写响应通道中,BVALID信号的控制者是从设备,BREADY信号的控制者是主设备。
         还有一个BRESP信号,由从机控制。表明写事物的状态。
     
    TOP文件就是把AXI端口的信号和FIFO相对应的信号进行一个链接,以及设计写入数据的地址。这个以后再写好了。(设计的这个模块FIFO是主,DDR是从设备)
     
    4)读地址通道:主设备和从设备在读地址通道的握手方式和写地址通道相同。
    ARVALID信号不依存于任何信号,只要主设备要读数据,就可以拉起ARVALID信号,将地址和控制信号送上读地址通道;从设备控制的ARREADY信号可以先于ARVALID或后于ARVALID信号拉起;而从设备控制的RVALID信号必须等ARVALID和ARREADY都拉起来后,即从设备已经得到了主设备发来的地址及控制信号,然后从设备就可以去相应的地址将数据读出来,并放上读数据通道,同时可以拉起RVALID信号;而主设备控制的RREADY既可以看RVALID的情况拉起,也可以自行适时拉起。
    读地址通道需要控制的信号:ARLEN,ARVALID,ARADDR(trans_addr)ARREADY(从设备控制)
    首先,依旧是地址的更新和传输大小的控制
    然后是一个传输地址的状态机,当接收到trans_start信号之后就开始写FIFO状态,如果FIFO不满,就拉高ARVALID,传输地址,传输之后再看传输进行到哪一步了,如果没传完就进入等待状态,如果传完了,就回到初始状态。
     
     
    5)读数据通道:ARVALID的控制者是从设备,ARREADY的控制者是主设备。

     RDATA,RRESP,RLAST,RVALID和rready(FIFO不为空就拉高,最后一个传输了就拉低)

    好像没啥可写的了哇。。。。就,先这样吧。

  • 相关阅读:
    外校培训前三节课知识集合纲要(我才不会告诉你我前两节只是单纯的忘了)
    floyd算法----牛栏
    bfs开始--马的遍历
    (DP 线性DP 递推) leetcode 64. Minimum Path Sum
    (DP 线性DP 递推) leetcode 63. Unique Paths II
    (DP 线性DP 递推) leetcode 62. Unique Paths
    (DP 背包) leetcode 198. House Robber
    (贪心 复习) leetcode 1007. Minimum Domino Rotations For Equal Row
    (贪心) leetcode 452. Minimum Number of Arrows to Burst Balloons
    (字符串 栈) leetcode 921. Minimum Add to Make Parentheses Valid
  • 原文地址:https://www.cnblogs.com/mebey/p/9184755.html
Copyright © 2011-2022 走看看