kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 其他> 教学:FPGA存储单元的四种调用方法

教学:FPGA存储单元的四种调用方法

2022-10-21
来源:科学计算technomania
关键词: 存储单元 Xilinx XPM Vivado

  首先,什么是XPM?可能很多人没听过也没用过,它的全称是XilinxParameterized Macros,也就是Xilinx的参数化的宏,跟原语的例化和使用方式一样。可以在Vivado中的Tools->Language Templates中查看都有哪些XPM可以例化。

25.JPG

26.JPG

  从上图中可以看出,目前可以例化的XPM主要有三种:跨时钟域处理、FIFO和MEMORY。

  我们以MEMORY为例,在Vivado中可以通过下面四种方式调用FPGA中的存储单元,均可以选择是Block RAM还是Distributed RAM.

  方法1:RTL代码

  我们在定义一个memory变量后,可以在前面指定其资源类型:

  (*ram_style = “block” *)reg [3:0] mem_bram [15:0] ;

  (*ram_style = “distributed” *)reg [3:0] mem_dram [15:0] ;

  使用RTL代码的方式非常灵活,但由于少了很多的控制项,综合后的结果可能不是最优的。

  方法2:原语(PrimiTIve)

  使用原语也可以例化MEMORY,但没见几个工程师这么用过,因为接口实在太多了,所以实用性不高。

27.JPG

  方法3:IP Core

  这种方式应该是使用最多的,但缺点也很明显:

  当修改参数时需要重新打开IP,然后Generate;

  不同版本的Vivado之间还需要进行Update;

  有时没注意到IP中的参数,导致结果并不是自己想要的;

  最近在调试中就碰到这样一个问题,FIFO中的默认输出延迟是1,即输出数据比读使能晚一拍,而且Output Registers默认是不勾选的。但这个选项不知道什么时候被改了,导致程序最终的输出结果一直有问题,在debug时一直检查的是RTL代码,直到定位到FIFO模块时才发现了这个问题。如果此时我们使用的是XPM,那从代码中很容易就能看出来错误。

  方法4:XPM_MEMORY

  相对而言,XPM的缺点就不是很明显,纯代码例化的方式更加灵活、简单。



更多信息可以来这里获取==>>电子技术应用-AET<<

mmexport1621241704608.jpg



本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map