DDR在PS部分 PL想对DDR访问需要AXI接口 
AXI接口时序 

创建一个带AXI接口的IP核 打开IP核管理
在ip管理工程中创建新ip
创建带AXI4接口的ip核
路径修改为当前工程路径下的“ ip_repo”文件夹
全功能AXI
编辑ip
生成AXI例化模块和AXI时序模块
ip工程路径如下
自动生成的AXI4 ip核大致功能: 根据外部输入按键,当检测到外部信号上升沿的时候,开始对DDR3的内存进行读写 读写的范围时4096个地址的字节 先写,再读,读完后进行比较。 若读写正确,error信号为低电平。若读写错误,error信号拉高
代码分析: 
- 参数
- 用户接口信号(主要是AXI4的接口)
- 例化AXI时序模块(AXI的时序在此模块中实现)
参数可以在功能模块中修改默认值 
端口信号
后面的端口信号都是AXI4的接口信号
例化主接口时序核心代码
参数传递(顶层模块参数传递) 
函数:计算输入的值的位宽。位宽是4
计算突发请求的位宽
该参数用在写突发的计数 和 读突发的计数。作为位宽
状态机参数
写状态要写4k,读也读4k
写地址通道
写数据通道
写响应通道:从机返回给主机,主机只有bready信号
读地址通道
读数据通道
其余信号 
==AXI信号看着很多,其实需要关注的信号很少 操作时关注data或valie等影响时序的数值就行==
输入信号打拍 
==AXI4状态机分析:== 


看完状态机在回来看握手机制的时序代码
对==写地址==通道的valid信号进行赋值
对==写地址==通道的地址进行赋值
对==写数据==通道的valid进行赋值
先看==写索引==信号如何赋值
其实这个index就是统计传了多少数据用的 这样就可以通过index的值拉高wlast信号了
数据产生这里给了个很简单的累加数据
bready只是响应一下,所以信号好处理 从机发过来一个bvalid,判断一下,bready拉高。只拉高一个时钟周期
==写响应==的错误判断
==读地址==通道和==读数据==通道与前面写的类似
成功读握手
读数据计数
rready大部分都是拉高状态。last和rready同时,最后一个读完时才拉低
==读错误==逻辑 
读响应RRESP与BRESP逻辑一致
错误标志
会在COMPARE状态机中赋值到端口
start_single_burst_write拉高后把burst_write_active拉高 而burst_write_active拉高后又把start_single_burst_write拉低 只是==为了确保只持续一个脉冲==
写完成信号什么时候被拉高 写突发次数计数 总共发起了多少次写
最后一次突发 拉高writes_done
burst_read_active与写的类似,省略 读操作完成
reads_done和writes_done主要控制状态机跳转