1、设置测试文件
新建一个工程“RAM_test”,在IP管理页点击选择ramIP查看IP配置信息,这里我们选择【EBR_PDP】
在配置窗口进行设置,设置写端口和读端口的地址深度为512,数据位宽设置为16位。
添加设计文件到工程。
右键点击打开,查看端口信息。
为了测试两端口,可以通过实际写入一些数据再读取部分数据的方式来验证两端口RAM读写是否正常。下面的激励文件实现了在地址从 0~15上写入数据为从256减至241。延时一段时间后读地址为0~15 上的数据。
设计仿真文件,代码如下:
[C#] 纯文本查看 复制代码 `timescale 1ns/1ns
`define clk_period 40
module RAM_tb;
xsGSR xsGSR_INST(.GSR(1'b1));
xsPWR xsPWR_INST(.PUR(1'b1));
reg clk;
reg Reset;
reg [15:0]Data;
reg [8:0]RdAddress;
reg [8:0]WrAddress;
reg WrClockEn;
reg WE;
reg RdClockEn;
wire [15:0]Q;
integer i;
EBR_PDP EBR_PDP(
.WrAddress(WrAddress),
.RdAddress(RdAddress),
.Data(Data),
.WE(WE),
.RdClock(clk),
.RdClockEn(RdClockEn),
.Reset(Reset),
.WrClock(clk),
.WrClockEn(WrClockEn),
.Q(Q)
);
initial clk = 1;
always#(`clk_period/2)clk = ~clk;
initial begin
Reset = 1;
Data = 0;
RdAddress = 0;
WrAddress = 0;
WrClockEn = 0;
WE = 0;
RdClockEn =0;
Reset = 0;
#401
for (i=0;i<=15;i=i+1)begin
WrClockEn = 1;
WE = 1;
Data = 256 - i;
WrAddress = i;
#`clk_period;
end
WrClockEn = 0;
WE = 0;
#(`clk_period*10);
for (i=0;i<=15;i=i+1)begin
RdClockEn = 1;
RdAddress = i;
#`clk_period;
end
RdClockEn = 0;
#(`clk_period*20);
$stop;
end
endmodule
在设计中,WrClockEn为写时钟使能, WE为写使能,在两个信号都有效时,ram才能写入数据。而ram的读操作使能由RdClockEn 读时钟使能控制。
2、设置Modelsim仿真
创建Modelsim仿真工程。
在工程目录下新建一个sim文件存放Modelsim工程文件。
设置好仿真加载仿真数据,可以看到在写使能和时钟使能同时有效时,上升沿到来时地址 0写入数据,下一个上升沿在地址1处写入
数据 ffh,在地址fh写入,分析仿真数据可以看出数据写入正常。
放大读取部分数据波形,发现与写入不同,输出总是延迟一个系统时钟周期。
工程源码
RAM_test.zip
(246 KB, 下载次数: 409)
更多智多晶FPGA相关资料,请查看下述汇总贴
【智多晶FPGA-001】小梅哥智多晶FPGA产品使用自助服务手册
|