RAM IP核 介绍和代码简介
RAM是啥RAM 是随机存取存储器Random Access Memory的简称是一个易失性存储器。 RAM 工作时可以随时从任何一个指定的地址写入或读出数据同时我们还能修改其存储的数据即写入新的数据这是ROM 所并不具备的功能。单端口RAM (Single-Port RAM)结构只有一个端口该端口集成了读和写的功能。特点地址线、数据线、时钟和控制信号都是共用的。在同一时刻只能进行读操作或写操作中的一项不能同时进行。接口信号通常包括CLK(时钟),data(地址),DI(写数据),DO(读数据),Wren(写使能) 等。2、简单双端口RAM (Simple Dual-Port RAM)结构拥有两个完全独立的端口通常一个端口Port A专用于写入另一个端口Port B专用于读取。特点读写操作可以同时进行因为地址和数据总线是分开的。这极大地提高了数据吞吐率。接口信号包含两组独立的信号如CLKA,ADDRA,DIA,WEA(写端口) 和CLKB,ADDRB,DOB(读端口)。3、真正双端口RAM (True Dual-Port RAM)结构同样拥有两个独立的端口但这两个端口功能完全相同都可以进行读或写操作。特点灵活性最高。两个端口可以独立地对存储器中任意地址进行读写。当两个端口同时访问同一个地址时需要特定的仲裁机制来处理冲突如写优先、读优先等。简单单端口简单双端口真双端口其中以简单双端口RAM为例子写一个倒着读出数据的程序module ram_r8o8(input wire clk ,input wire rst_n ,output wire [9:0]q);reg wren ;reg [9:0] wrdata;reg [9:0] wraddr;reg rdren ;reg [9:0] rdaddr;//cntreg [9:0] cnt ;always(posedge clk,negedge rst_n)beginif(~rst_n)cnt 0;elsecnt cnt1b1;end//写always(posedge clk,negedge rst_n)beginif(~rst_n)beginwren 0;wrdata 0;wraddr 0;endelsebeginwren 1;wrdata cnt;wraddr cnt;endend//读always(posedge clk,negedge rst_n)beginif(~rst_n)beginrdren 0;rdaddr 0;endelsebeginrdren 1;rdaddr 1024 - cnt;endendram_r8x128_8 ram_r8x128_8_inst (.clock ( clk ),.data ( wrdata ),.rdaddress ( rdaddr ),.rden ( rdren ),.wraddress ( wraddr ),.wren ( wren ),.q ( q ));endmodule以下是仿真文件timescale 1ns/1psmodule ram_r8o8_tb();reg clk ;reg rst_n ;wire [7:0] q ;initialbeginclk 1b0 ;rst_n 1b0 ;#123rst_n 1b1;end////always #10 clk ~clk ; //读时钟 50Mram_r8o8 ram_r8o8(. clk ( clk ),. rst_n ( rst_n ) ,. q ( q));endmodule