首先,什么是XPM?可能很多人没听过也没用过,它的全称是Xilinx Parameterized Macros,也就是Xilinx的参数化的宏,跟原语的例化和使用方式一样。可以在Vivado中的Tools- > Language Templates中查看都有哪些XPM可以例化。
从上图中可以看出,目前可以例化的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,但没见几个工程师这么用过,因为接口实在太多了,所以实用性不高。
3. IP Core
这种方式应该是使用最多的,但缺点也很明显:
当修改参数时需要重新打开IP,然后Generate;
不同版本的Vivado之间还需要进行Update;
有时没注意到IP中的参数,导致结果并不是自己想要的;
最近在调试中就碰到这样一个问题,FIFO中的默认输出延迟是1,即输出数据比读使能晚一拍,而且Output Registers默认是不勾选的。但这个选项不知道什么时候被改了,导致程序最终的输出结果一直有问题,在debug时一直检查的是RTL代码,直到定位到FIFO模块时才发现了这个问题。如果此时我们使用的是XPM,那从代码中很容易就能看出来
错误。
4. XPM_MEMORY
相对而言,XPM的缺点就不是很明显,纯代码例化的方式更加灵活、简单。
编辑:hfy
-
FPGA
+关注
关注
1631文章
21806浏览量
606717 -
Xilinx
+关注
关注
71文章
2172浏览量
122350 -
XPM
+关注
关注
0文章
12浏览量
8697
发布评论请先 登录
相关推荐
hyper v 虚拟化,hyper-v虚拟化:企业级虚拟化解决方案的全面解析
![hyper v 虚拟<b class='flag-5'>化</b>,hyper-v虚拟<b class='flag-5'>化</b>:企业级虚拟化解决<b class='flag-5'>方案</b>的全面<b class='flag-5'>解析</b>](https://file1.elecfans.com/web3/M00/06/FB/wKgZO2eRojaAedKRAAJ1cEnLmOg140.png)
解析AMR设计关键要素:照明方案、通信方案
M12连接器技术规格解析:工业自动化的优选方案
![M12连接器技术规格<b class='flag-5'>解析</b>:工业自动<b class='flag-5'>化</b>的优选<b class='flag-5'>方案</b>](https://file1.elecfans.com/web2/M00/FE/0D/wKgZomagVCqAfc-eAADMgIN9HQI291.png)
自动化创建UI并解析数据
PLC远程监控物联网方案解析
![PLC远程监控物联网<b class='flag-5'>方案</b><b class='flag-5'>解析</b>](https://file1.elecfans.com//web2/M00/0C/E1/wKgaomc9UQmARCH2AAPVgT1WpFg246.png)
XPM6329 富满推出22.5W移动电源芯片
求助各位关于Verilog当中模块例化、端口与引脚 的问题
两种集成方案灵活搭建远控方案,向日葵API集成方案解析
![两种集成<b class='flag-5'>方案</b>灵活搭建远控<b class='flag-5'>方案</b>,向日葵API集成<b class='flag-5'>方案</b><b class='flag-5'>解析</b>](https://file1.elecfans.com//web2/M00/F3/FC/wKgaomZ7xkGAKiU7AAEgJu11dv4979.png)
ZWS云平台应用(5)-raw数据解析
![ZWS云平台应用(5)-raw数据<b class='flag-5'>解析</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
评论