目录
(本文资料来源于网络以及自己的总结,学到哪更到哪,无商业用途,侵删)
PS与PL的数据交互
通过BRAM进行数据交互
主要是画个BD,里面加个axi_bram_controller(完成AXI接口至BRAM接口的转换)和双端口的block_Memorry_Gen模块,PS那边通过AXI接口使用controller来控制bram的读写,PL这边就用bram的另一个端口(一般是PORTB)来读写bram。因为bram_control那边会进行地址分配,所以SDK里面的代码对相应地址进行读或者写,也就和PL里面的那些input output差不多了我感觉。
这里bram_controller的AXI-full协议位宽设置的是32位,因为AXI协议规定一个地址存储8位数据,那么 位宽×深度/8=地址数,也就是说地址分配8k的话可以存储2048个32位的数据。
最后BD的图大概就是红色框框里这样,黑色框框的rd模块可以不要,也可以直接在pl代码里例化了system之后自己写bram的读写时序。
BRAM读写时序以及工作模式
关于bram的读写时序,分写优先、读优先和不变模式,看到一篇写的很好的csdn,先码在这:
XILINX BMG (Block Memory Generator)-CSDN博客
总结来说就是三个工作模式
- 写优先(写状态时先把数据同时写入地址和输出总线)
- 读优先(写状态下先把地址中以前的数据读出到输出总线上再把新的数据写入地址内)
- 不变模式(当在往 RAM 里面写的时候,DOUTA 读出的数据保持不变,一直为 aa 的内容,直到 WEA 被拉低,重新进入 READ 模式)
具体单双真的模型就不列出了,大概的读写流程是:
- CLKA 为输入的时钟信号,时钟上升沿对数据进行写入/读出
- DINA 为写入的数据总线
- DOUTA 为读出的数据总线
- ADDRA 为地址总线
- ENA 为使能端,当 ENA 为 1 的时候,可进行读写操作,ENA 为 0 的时候,无法进行读写
- WEA 为写使能,当 ENA 为 1 同时 WEA 为 0 的时候,为读操作;当 ENA 和 WEA 同时为 1 的时候,为写操作;
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zhoutaopower/article/details/105257499