不占用芯片的逻辑资源,是 FPGA 芯片内部非常宝贵的一种资源。在工作时,要尽量
使用芯片的块 RAM 资源,不仅能保证较高的工作频率,还具有很低的动态功耗。
RAMB16 的 Verilog 例化代码如下所示。
// RAMB16: 块 RAM(Virtex-4 16k+2k Parity Paramatizable BlockRAM
// 适用芯片:Virtex-4 芯片
// Xilinx HDL 库向导版本,ISE 9.1
RAMB16 #(
.DOA_REG(0),
// A 端口可选的输出寄存器,可设置为 0 或 1,分别表示输出不寄存/寄存
.DOB_REG(0),
// B 端口可选的输出寄存器,可设置为 0 或 1,分别表示输出不寄存/寄存
.INIT_A(36'h000000000),
// 初始化 A 端口的输出初始值
.INIT_B(36'h000000000),
// 初始化 A 端口的输出初始值
.INVERT_CLK_DOA_REG("FALSE"),
// 反转 A 端口寄存器的时钟,可设置为"TRUE"或 "FALSE",分别表示不反转/反转
.INVERT_CLK_DOB_REG("FALSE"),
// 反转 B 端口寄存器的时钟,可设置为"TRUE"或 "FALSE",分别表示不反转/反转
.RAM_EXTENSION_A("NONE"),
// RAM 的 A 端口扩展选项,可设置为"UPPER"、"LOWER"或 "NONE",分别表示
作为// 高字节、低字节级联,或者不扩展
.RAM_EXTENSION_B("NONE"),
// RAM 的 B 端口扩展选项.READ_WIDTH_A(0),同 A 端口
.READ_WIDTH_A(0),
// A 端口的数据读取宽度,有效值为 1, 2, 4, 9, 18, 或 36
.READ_WIDTH_B(0),
// B 端口的数据读取宽度,有效值为 1, 2, 4, 9, 18, 或 36
.SIM_COLLISION_CHECK("ALL"),
// 碰撞检测使能信号,可设置
为"ALL"、"WARNING_ONLY"、"GENERATE_X_ONLY" // 或者"NONE"
.SRVAL_A(36'h000000000),
// 复位后 A 端口的输出值
.SRVAL_B(36'h000000000),
//复位后 A 端口的输出值
.WRITE_MODE_A("WRITE_FIRST"),
// A 端口的写模式,可设置为"WRITE_FIRST", "READ_FIRST", 或"NO_CHANGE"
.WRITE_MODE_B("WRITE_FIRST"),
// B 端口的写模式,可设置为"WRITE_FIRST", "READ_FIRST", 或"NO_CHANGE"
.WRITE_WIDTH_A(2),
// A 端口的数据写入宽度,有效值为 1, 2, 4, 9, 18, 或 36
.WRITE_WIDTH_B(0),