AXI学习笔记(二)观察AXI 自己写AXI FULL(M端)
学习原视频:b站奇哥,这里记录要一下学习过程,原视频非常细致,系统
https://www.bilibili.com/video/BV1tv4y1y7VX/?spm_id_from=333.788&vd_source=e35fc70f68490e4d1819679daf66d69b
1.步骤
写:
写首地址
突发传输数据
控制last数据
响应信号 (读没有响应信号)
2.复制赛灵思接口、传入参数
其中:掩码wstrb 一位控制一个字节的屏蔽
3.计算某个数的位宽函数
4.写wire reg 和assign
output A信号一般有 一个reg a变量来控制,然后有组合逻辑 assign A =a;
如果A是常量,那么久不必定义reg a ,直接赋值就好
5.以高位(加入基址)来区分向哪个设备写入
6. //xilinx FPGA 支持高电平同步复位 w_sys_rst=1 复位
//但是AXI 是 低电平复位 M_AXI_ARESETN=0 复位,
//所以要加一个非门
7. 写时序逻辑模板,一个模板对应一个寄存器的变化
note: 一个通道的第二/三个条件基本固定: 某个 valid和ready同时拉高
最后一个else :如果输出一拍信号就行 , 则: else XXX<= 'd0;
如果是持续输出,直到某个信号变化才拉低,那么: else: XXX<= XXX;
c1:r_m_axi_awvaild r_m_axi_awaddr
c2: r_m_axi_wdata r_m_axi_wlast r_m_axi_wvalid
note:M_AXI_WVALID 和M_AXI_AWVALID不要搞混
note: w_last 计数的时候可以 新建一个reg变量
w_last 计数的时候,else那里:
else: r_burst_cnt<=r_burst_cnt;
//这种带累加的也是保持不变,因为M_AXI_AWVALID && M_AXI_AWREADY就拉高一下,他们低了cnt还得继续计数
//
c3://暂不校验
c4 //同c2
c5 //同c3