芯路恒电子技术论坛

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

【智多晶FPGA-035】【开发流程】IP调用之FIFO

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

    主题

    25

    帖子

    163

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    163
    发表于 2022-4-22 10:43:22 | 显示全部楼层 |阅读模式
    1、建立fifo测试工程
    我们新建一个工程“fifo_test”,在【IP管理】->【IP Creator】->[FIFO]添加fifo到工程。

    image.png

    在配置栏对要调用的fifo进行配置。

    image.png

    在设置FIFO的地址位宽的时候,系统不会自动对我们的设置进行匹配,比如在修改了写端口的地址位宽后,还需要手动设置读端口的地址位宽。在修改了数据位宽后也需要去设置相应的地址位宽,否则将会在信息栏提示无法生成IP。
    生成IP后,把IP文件添加到工程。

    image.png

    右键点击打开查看IP文件。

    image.png


    2、设计测试文件并仿真
    测试代码如下。
    [C#] 纯文本查看 复制代码
    `timescale 1ns/1ps
    `define wrclk_period 40
    `define rdclk_period 8
    
    module fifo_test();
            xsGSR xsGSR_INST(.GSR(1'b1));
            xsPWR xsPWR_INST(.PUR(1'b1));
    
            reg                WrClock;
            reg                WrEn;
            reg                [15:0]Data;
            reg                RdClock;
            reg                RdEn;
            reg                Reset;
            reg                RPReset;
    
            wire        [7:0]Q;
            wire        Empty;
            wire        Full;
            wire        AlmostEmpty;
            wire        AlmostFull;
    
            FIFO FIFO(
                    .Data(Data),
                    .WrClock(WrClock),
                    .RdClock(RdClock),
                    .WrEn(WrEn),
                    .RdEn(RdEn),  
                    .Reset(Reset),
                    .RPReset(RPReset),
                    .Q(Q),
                    .Empty(Empty),
                    .Full(Full),
                    .AlmostEmpty(AlmostEmpty),
                    .AlmostFull(AlmostFull)
            );
    
    
            initial WrClock = 1;
            always #(`wrclk_period/2)WrClock = ~WrClock;
    
            initial RdClock = 1;
            always #(`rdclk_period/2)RdClock = ~RdClock;
    
            integer i;
    
            always@(posedge RdClock)
            if(AlmostFull)
                    RdEn <= 1;
            else if(Empty)
                    RdEn <= 0;
    
            initial begin
                    Reset =1;
                    RPReset =0;
                    Data = 0;
                    WrEn = 0;
                    #201;
                    Reset =0;
                    #200;
                    for (i=0;i <= 511 ;i = i + 1)begin
                            WrEn = 1;
                            Data = i;
                            #`wrclk_period;
                    end
                    WrEn = 0;
                    #10000;
    
                    $stop;        
            end
    
    endmodule
    



    我们通过计数器控制fifo的写入,写入计数数据。在识别到fifo将满的时候读数据,在fifo为空的时候停止读数据。
    3、仿真验证点击左下角的toggle leaf name/full name以关闭路径名方便查看

    Snipaste_2023-03-30_11-43-36.png

    在仿真中可以观察到计数开始,WrEn有效开始写入数据。

    image.png
    在AlmostFull有效RdEn拉高开始读数据。

    image.png

    在Empty有效后RdEn拉低停止读数据,读数据先读低八位。

    image.png

    工程源码
    fifo_test.zip (189.49 KB, 下载次数: 172)


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


    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 23:23 , Processed in 0.111930 second(s), 34 queries .

    Powered by Discuz! X3.4

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

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