1、什么是RAM的读延时?
RAM读延时指的是读使能ren有效后获得有效读数据rdata所需的rclk周期数。RAM读延时通常有1拍延时、2拍延时以及3拍延时。
图中所示为ren为RAM读使能,寄存器驱动,rdata为RAM读出的数据。
图1下图所示为读延时为1拍的RAM时序图,此图是没有延时信息的RTL仿真时序图,在读使能信号ren有效后下一个时钟触发沿rdata数据有效。图2所示为带延时的网表仿真时序图,读使能信号ren由寄存器驱动,是有tcq延时和路径延时的,并不是在rclk上升沿来的时候立即完成跳变。第2个rclk上升沿RAM采样读使能ren,经过一定的延时后rdata有效,并保持一个rclk周期。
2、RAM的读数据如何采样?
本文将讲解1拍读延时的RAM如何采样,ren由寄存器驱动,ren_d1是ren打一拍,在ren_d1为1的时候,使用rdata_d1对rdata进行寄存。Rdata_d1_vld是ren信号打2拍,表示rdata_d1有效。
always @ (posedge soc_clk or negedge soc_rst_n) begin
if(!soc_rst_n)
ren <= 1'b0 ;
else
ren <= xxxxxxx;
always @ (posedge soc_clk or negedge soc_rst_n) begin
if(!soc_rst_n) begin
ren_d1 <= 1'b0 ;
rdata_d1 <= 64'b0 ;
rdata_d1_vld <= 1'b0 ;
end
else begin
ren_d1 <= ren;
rdata_d1 <= ren_d1? rdata:64‘b0 ;
rdata_d1_vld <= ren_d1;
end
1R1W_RAM_32X64 1R1W_RAM_32X64_U0
(
.rclk ( soc_clk ),
.rst_n ( soc_rst_n ),
.ren ( ren ),
.raddr ( raddr ),
.rdata ( rdata ),
.rclk ( sys_clk ),
.wen ( wen ),
.waddr ( waddr ),
.wdata ( wdata )
);