芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 3089|回复: 0

【智多晶FPGA-038】【开发流程】IP调用之RAM

[复制链接]
  • TA的每日心情
    开心
    2022-5-11 16:38
  • 24

    主题

    25

    帖子

    163

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    163
    发表于 2022-4-27 17:41:35 | 显示全部楼层 |阅读模式
    1、设置测试文件
    新建一个工程“RAM_test”,在IP管理页点击选择ramIP查看IP配置信息,这里我们选择【EBR_PDP】

    image.png

    在配置窗口进行设置,设置写端口和读端口的地址深度为512,数据位宽设置为16位。
    添加设计文件到工程。

    image.png

    右键点击打开,查看端口信息


    为了测试两端口,可以通过实际写入一些数据再读取部分数据的方式来验证两端口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仿真工程。

    image.png

    在工程目录下新建一个sim文件存放Modelsim工程文件。

    image.png

    设置好仿真加载仿真数据,可以看到在写使能和时钟使能同时有效时,上升沿到来时地址 0写入数据,下一个上升沿在地址1处写入
    数据 ffh,在地址fh写入,分析仿真数据可以看出数据写入正常。


    image.png

    放大读取部分数据波形,发现与写入不同,输出总是延迟一个系统时钟周期。

    image.png


    工程源码
    RAM_test.zip (246 KB, 下载次数: 179)

    更多智多晶FPGA相关资料,请查看下述汇总贴
    【智多晶FPGA-001】小梅哥智多晶FPGA产品使用自助服务手册




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-4-27 11:13 , Processed in 0.111362 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表