IT评测·应用市场-qidao123.com技术社区

标题: AG32 FPGA 的 Block RAM 资源:M9K 使用 [打印本页]

作者: 数据人与超自然意识    时间: 2025-1-22 20:37
标题: AG32 FPGA 的 Block RAM 资源:M9K 使用
1. 概述

AG32 FPGA 包罗了 4 个 M9K 块,每个 M9K 块的容量为 8192 bits,总计为 4 个 M9K(4K bytes)。这使得 AG32 的内部存储非常适合嵌入式应用,能够有效地使用片上资源。
M9K 参数

参考自《AGRV2K_Rev2.0.pdf》。

2. M9K 的全同步存储限定

在M9K 参数先容中提到,M9K 不支持异步或非寄存器化的存储输入。这意味着,M9K 块只能用于全同步(fully-synchronous)的 SRAM 操作模式,全部读写操作必须依赖于时钟信号,而不能在没有时钟控制的情况下进行。这有助于确保操作的时序稳固性和数据的正确性。
同步操作

同步操作依赖时钟信号的边沿(通常是上升沿)来触发数据传输。全部存储的写入和读取操作都需要时钟的参与。
示例代码:
  1. always @(posedge clk) begin
  2.     if (write_enable)
  3.         my_ram[addr] <= data_in;  // 写操作发生在时钟上升沿
  4.     else
  5.         data_out <= my_ram[addr]; // 读操作发生在时钟上升沿
  6. end
复制代码
异步操作

异步操作则不依赖时钟信号,数据的传输随时可以进行。这种操作方式在 M9K 中是不支持的。
示例代码:
  1. always @(*) begin
  2.     if (write_enable)
  3.         my_ram[addr] = data_in;  // 写操作异步进行
  4.     else if (read_enable)
  5.         data_out = my_ram[addr]; // 读操作异步进行
  6. end
复制代码
3. M9K 的使用模式

Altera官方文档指出,M9K 支持多种操作模式,具体模式可在官方链接中找到。常见的两种使用方式如下:
方式1:通过 IP 核进行存储控制

使用 IP 核(如 FIFO、RAM 等)可以灵活配置 M9K 资源。

可以在设置过程中选择不同的资源类型。例如下图中FIFO IP的配置:

方式2:使用 ramstyle 合成属性

Verilog 中的 ramstyle 属性允许我们通过 HDL 代码来指定 FPGA 内部的存储资源。通过设置该属性,我们可以将寄存器数组映射到特定的 BRAM(Block RAM)资源上。
官方关于 ramstyle 的文档可以在这里找到,截图如下:

示例代码:
  1. (* ramstyle = "M144K" *) reg [0:7] my_ram[0:63];
复制代码
  1. reg [0:7] my_ram[0:63] /* synthesis ramstyle = "M144K" */;
复制代码
在上面两个例子中,my_ram 数组被指定为使用 M144K 块。
别的,Altera FPGA其他可用的存储类型包括(具体与FPGA型号有关):

通过这种方式,我们可以精确控制存储资源的使用,确保设计的存储需求与 FPGA 的硬件资源相匹配。
4. Block RAM存储设计的注意事项


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4