FPGA Develop Note ——— RAM
RAM
的英文全称是Random Access Memory
,即随机存取存储器,简称随机存储器。它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址的存储单元中读出数据,其读写速度是由时钟频率决定的。
Types
RAM类型 | 特性说明 | 数据读写口数量 | 地址口数量 |
---|---|---|---|
Simple Port RAM | 1、允许通过一个端口对存储进行读写访问。 2、只有一组数据总线、地址总线、时钟信号以及读写使能信号。 |
1 | 1 |
Simple Dual Port RAM | 1、提供A和B两个端口,端口A只能进行写访问,端口B只能进行读访问。 2、有两组数据总线、地址总线、时钟信号以及读写使能信号。 |
1 | 2 |
True Dual Port RAM | 1、提供A和B两个端口,两个端口均可对存储进行读写访问。 2、有两组数据总线、地址总线、时钟信号以及读写使能信号。 | 2 | 2 |
- Vivado 软件自带的 Block Memory Generator IP 核(缩写为 BMG,中文名为块 RAM 生成器),可以用来配置生成 RAM 或者 ROM。RAM 是一种随机存取存储器,不仅可以读出存储的数据,同时还支持对存储的数据进行修改,而 ROM 是一种只读存储器,也就是说,在工作时只能读出数据,而不能写入数据。
- 需要注意的是,配置生成的 RAM 或者 ROM 使用的都是 FPGA 内部的 BRAM 资源(Block RAM,即块随机存 储器,是 FPGA 厂商在逻辑资源之外,给 FPGA 加入的专用 RAM 块资源),只不过配置成 ROM 时只用到 了嵌入式 BRAM 的读数据端口。
- Xilinx 7 系列器件内部的 BRAM 全部是真双端口 RAM,但是通过 BMG IP 核,我们还可以将其配置为伪双端口 RAM 或者单端口 RAM。
Operating Mode
时序图信号:
- CLKA:时钟信号
- WENA: 读/写使能信号。拉低时表示读数据;拉高时表示写数据。
- DINA:输入信号流。
- ADDRA:内存地址。
- DOUTA:输出信号流。
- ENA:使能信号。
-
Write First Mode(写优先):输入数据同时被写入内存并驱动到数据输出。
-
Read First Mode(读优先):存储在写地址处的先前数据出现在数据输出上,而输入数据正在存储到内存中。
-
No Change Mode(保持):输出锁存器保持不变。数据输出仍为先前的数据,并且不受在相同端口上进行的写操作的影响。
Conclusion
Mode | Description |
---|---|
Write First Mode | 读取数据时,若此时有写操作,则读取到的是写入的数据。 |
Read First Mode | 读取数据时,若此时有写操作,则读取到的仍然是内存中的数据。 |
No Change Mode | 读取数据时,若此时有写操作,则读取到的写操作之前输出的数据。 |
RTL代码
参考了这篇博客
en -> enable
we -> write enable
din/out -> data in/out文章来源:https://www.toymoban.com/news/detail-840424.html
- Write First Mode
//write port
always @(posedge clk) begin
if(en && we)
RAM[addr] <= di;
end
//read port
always @(posedge clk) begin
if(en)
if(we)
dout <= di;
else
dout <= RAM[addr];
end
- Read First Mode
//write port
always @(posedge clk) begin
if(en && we)
RAM[addr] <= di;
end
//read port
always @(posedge clk) begin
if(en)
dout <= RAM[addr];
end
- No Change Mode
//write port
always @(posedge clk) begin
if(en && we)
RAM[addr] <= di;
end
//read port
always @(posedge clk) begin
if(en && !we)
dout <= RAM[addr];
end
但对于单端口RAM,显然读写操作不能同时进行,不会发生冲突。但是还有操作模式的设定,这点笔者不太理解。文章来源地址https://www.toymoban.com/news/detail-840424.html
到了这里,关于FPGA Develop Note ——— RAM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!