1、在 Vivado 中,XPM(Xilinx Parameterized Macros)是 Xilinx 提供的一组预定义的、参数化的硬件描述语言 (HDL) 宏模块,用于简化设计流程和提高设计效率。XPM 模块通常用于实现常见的功能,比如存储器(RAM/ROM)、FIFO、计数器和锁存器
2、在 使用Vivado的RAM和FIFO时,有四种调用方法分别是使用约束定义,原语定义,IP核例化 以及调用XPM
module inferred_ram (
input wire clk,
input wire we,
input wire [7:0] addr,
input wire [7:0] din,
output reg [7:0] dout
);
```c
(* ram_style = "block" *)reg [7:0] mem [255:0]; // 定义256 x 8 位的存储器(block RAM)
//(* ram_style = "distributed" *)reg [7:0] mem [255:0]; // 定义256 x 8 位的存储器(block RAM)
always @(posedge clk) begin
if (we)
mem[addr] <= din; // 写操作
dout <= mem[addr]; // 读操作
end
endendmodule
优点:代码简单,工具会自动推断。缺点:合成工具推断的RAM不一定是最优的资源使用
3、原语定义 ,直接使用Xilinx提供的RAM原语如RAMB36E1或RAMB18E1进行实例化
优点:可精确控制硬件,优化性能。
缺点:可移植性差,仅能用于特定FPGA厂商且需要自己拼接RAM实现复杂
4、调用XPM ,通过调用Xilinx的XPM库,可以灵活配置RAM和FIFO,兼顾性能和简洁性
优点:高效、灵活、较高的可移植性。
缺点:依赖Xilinx平台,虽然XPM生成的RAM和FIFO不像使用IP核那样可以在图形化界面中直观查看,但我们可以自定义一个wrapper来封装XPM模块,并通过Xilinx的宏定义进行区分。这样不仅可以解决上述问题,还能更灵活地使用XPM,同时保持设计的模块化和可维护性。