RAM (Random Access Memory)随机访问存储器. RAM又称随机存取存储器,存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时,将丢失其存储内容,所以主要用于存储短时间使用的程序。它主要用来存储程序中用到的变量。凡是整个程序中,所用到的需要被改写的量(包括全局变量、局部变量、堆栈段等),都存储在RAM中。
单端口RAM设计
题目描述:
设计一个单端口RAM,它有: 写接口,读接口,地址接口,时钟接口和复位;存储宽度是4位,深度128。
注意rst为低电平复位
信号示意图:
输入描述:
输入信号 enb, clk, rst addr w_data
类型 wire
在testbench中,clk为周期5ns的时钟,rst为低电平复位
输出描述:
输出信号 r_data
类型 wire
`timescale 1ns/1ns
module RAM_1port(
input clk,
input rst,
input enb,
input [6:0]addr,
input [3:0]w_data,
output wire [3:0]r_data
);
//*************code***********//
reg [3:0] ram_reg[127:0];
reg [3:0] ram_data;
integer i;
always@(posedge clk or negedge rst)begin
if(~rst) begin
for(i=0;i<128;i=i+1)begin
ram_reg[i]<=4'b0;
end
end
else begin
if(enb)begin//wire
ram_reg[addr]<=w_data;
end
else begin
ram_reg[addr]<=ram_reg[addr];
end
end
end
assign r_data = enb? 4'b0:ram_reg[addr];
//*************code***********//
endmodule
双端口RAM设计
描述
实现一个深度为8,位宽为4bit的双端口RAM,数据全部初始化为0000。具有两组端口,分别用于读数据和写数据,读写操作可以同时进行。当读数据指示信号read_en有效时,通过读地址信号read_addr读取相应位置的数据read_data,并输出;当写数据指示信号write_en有效时,通过写地址信号write_addr 和写数据write-data,向对应位置写入相应的数据。
程序的信号接口图如下:
模块的时序图如下:
使用Verilog HDL实现以上功能并编写testbench验证。
输入描述:
clk:系统时钟信号
rst_n:异步复位信号,低电平有效
read_en,write_en:单比特信号,读/写使能信号,表示进行读/写操作
read_addr,write_addr:8比特位宽的信号,表示读/写操作对应的地址
write_data:4比特位宽的信号,在执行写操作时写入RAM的数据
输出描述:
read_data:4比特位宽的信号,在执行读操作时从RAM中读出的数据
`timescale 1ns/1ns
module ram_mod(
input clk,
input rst_n,
input write_en,
input [7:0]write_addr,
input [3:0]write_data,
input read_en,
input [7:0]read_addr,
output reg [3:0]read_data
);
reg [3:0] ram_reg[7:0];
integer i;
always@(posedge clk or negedge rst_n)begin
if(~rst_n) begin
for(i=0;i<8;i=i+1)begin
ram_reg[i]<=4'b0;
end
end
else begin
if(write_en)begin
ram_reg[write_addr]<=write_data;
end
end
end
always@(posedge clk or negedge rst_n)begin
if(~rst_n) begin
read_data<=4'b0;
end
else begin
if(read_en)begin
read_data<=ram_reg[read_addr];
end
end
end
endmodule
评论 (0)