写在前面:作为初学者,牛客网的Verilog题目不多但较有代表性。本文对RAM专题进行总结。
建议关注@FPGA探索者,b站有对应视频讲解。
VL53 单端口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
);
//位宽:每个数据的位数 深度:RAM可存储的数据个数
reg [3:0] ram_reg[127:0];
integer i;
always @ (posedge clk or negedge rst) begin
if(~rst) begin
for(i=0 ; i<128 ; i++) begin
ram_reg[i] <= 4'b0;
end
end
else begin
if(enb) begin
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];//异步读
// enb:读写共用同一使能信号,拉高时认为是写使能,不拉高就认为是读使能。
endmodule
注:
Xilinx的DRAM写是同步的,但读是异步的(不用等clk上升沿,有数据就读出)。
enb:读写共用同一使能信号,拉高时认为是写使能,不拉高就认为是读使能。
针对Xilinx的RAM讲解可以移步: Xilinx的分布式RAM和块RAM——单口、双口、简单双口、真双口的区别VV单口 RAM、双口 RAM、简单双口 RAM、真双口 RAM 有什么不同?https://mp.weixin.qq.com/s/QeN2CH4aiqvviRFYemc2Ng