BRAM

Zynq的BRAM操作及PS端操作Bug思考

作者: 高视,FPGA2嵌入式

1. BRAM介绍

BRAM 就是Block Memory,是Zynq的PL端的存储RAM单元,可以配置为双口RAM,用于实现Zynq中PS端到PL端的数据交互和共享,类似为Linux中的内存共享,也就是将数据写入共同可访问的数据空间,PS和PL端各自访问来达到信息交流的目的。

在这里我们有这样一种比较好的思维推荐:可以在一个BRAM中将一部分地址空间用于PS只写PL只读,剩下的地址空间用于PL只写PS只读。这样PS和PL之间的访问就不会出现读写冲突错误,当然,你也可以用2个BRAM来实现。

2. BRAM的PL端使用

BRAM的访问可以通过AXI总线访问或者把它当做RAM用读写逻辑操作。

双口BRAM的使用

打算在zynq的逻辑侧缓冲1-page数据。直接调用IP,使用内部的block ram,配置成双口BRAM。ARM一侧通过AXI总线读写Port-A,逻辑侧代码读写Port-B。

调用IP:
M_AXI_GP0 <-> AXI_Interconnect <-> AXI_BRAM_Controller <->

Port_A <->Block_Memory_Generator <-> Port_B <-> User_Logic

Mode里面可以选择Stand Alone和BRAM Controller,差别在Alone的可以配置位宽,Controller两侧都是32bit位宽。我们在Port-B侧需要8bit的byte位宽,所以选择Alone。如果是32位宽2K深度,那么A端地址是11位的,B端是13位的。当然也可以勾选右上的Generate address interface with 32 bit,都配置成32bit的。

最近被这么一个工作折腾了好几天:一个非IPI的Vivado工程(需要全部Verilog手写),在Artix-7 FPGA中实现了一个ARM Cortex-M0 DesignStart软核(老版,没有debug模块),存放ARM程序的存储器是实现在FPGA片上RAM上的;ARM程序用Keil MDK编写,我希望在测试这个程序时,不用每次都重新综合一遍FPGA。

总体来说这个需求是:

  • Vivado;
  • 全部HDL,非IPI;
  • 无处理器(在Vivado看来M0 DesignStart不是处理器);
  • 存储器放在BRAM上;
  • 替换Bitstream中的BRAM初始化,而不用重新综合整个逻辑。
  • 这件事看上去肯定是能做到的嘛。然而Vivado要用新的updatemem命令来替换以前ISE中的data2mem,我发现在无处理器的工程上,相关资料比较少……

    这里总结一下整个实现过程。使用环境是Vivado 2015.2。

    先把Vivado多线程开了……
    参考资料:

    观看本视频,了解Xilinx UltraScale器件 Block RAM 的级联功能及如何使用该功能;另外您还将学习到如何在您的设计中利用到UltraScale器件的功耗以及性能优势。

    问题:有关 14.1/14.2 时序分析 7 系列的答复记录 – 用于 PERIOD 约束分析的 Block Ram (BRAM) 或 FIFO 组件的时钟到达时间不正确专家答复:当我分析 Block Ram 或 FIFO 的时序来去路径时,源和目标端时钟的时钟到达时间都不正确,PERIOD 约束分析将面临更小的要求。路径应该有完整的周期。什么时候可以修复这个问题?解决方案

    俄罗斯方块游戏的原理

    俄罗斯方块游戏的原理

    标记算法实现过程中BRAM出现的奇怪问题

    大家有没有遇到过写bram出错的问题。
    我在实现标记算法时,写bram老是有几位不正确,特来求救。

    作者:Daniele Bagni,
    赛灵思公司 DSP 专家兼现场应用工程师
    Daniele.bagni@xilinx.com
    作为赛灵思的现场工师,我常常问这样的问题:我们是否能够提供一款其功能可满足客户所有独特设计要求的DSP 内核。有时候内核会太大,太小或者不够快。有时,我们会开发一款能确切满足客户需求的内核,并迅速以 CORE Generator 商标推出。不过即便在这种情况下,客户仍然想要一套特定的 DSP 功能,而且刻不容缓。在这些情况下,我常常建议他们使用我们器件中的插值查找表来定制他们的 DSP功能。

    同步内容