集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

FPGA初级课程第十八讲 FIFO

[复制链接]
 楼主| lcytms 发表于 2016-11-22 17:39:40 | 显示全部楼层
继续完成fifo_read控制模块。
编写fifo_read控制模块代码如下。
module fifo_read (clk, rst_n, rdfull, rdempty, rdreq);

        input clk, rst_n;
        input rdfull, rdempty;
       
        output reg rdreq;
       
        reg state;
       
        always @ (posedge clk or negedge rst_n)
                begin
                        if (!rst_n)
                                begin
                                        rdreq <= 0;
                                        state <= 0;
                                end
                        else
                                begin
                                        case (state)
                                        0        :        begin
                                                                if (rdfull)
                                                                        begin
                                                                                rdreq <= 1;
                                                                                state <= 1;
                                                                        end
                                                                else
                                                                        begin
                                                                                state <= 0;
                                                                        end
                                                        end
                                                       
                                        1        :        begin
                                                                if (rdempty)
                                                                        begin
                                                                                rdreq <= 0;
                                                                                state <= 0;
                                                                        end
                                                                else
                                                                        begin
                                                                                rdreq <= 1;
                                                                                state <= 1;
                                                                        end
                                                        end
                                                       
                                        default        :        state <= 0;
                                       
                                        endcase
                                end
                end

endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-22 17:41:03 | 显示全部楼层
新建仿真模块Testbench。
新建fifo_tb.v模块,编写代码如下。
`timescale 1ns/1ps

module fifo_tb;

        reg clk, rst_n;
       
        wire [7:0] q;
       
        fifo dut (.clk(clk), .rst_n(rst_n), .q(q));

        initial
                begin
                        clk = 1;
                        rst_n = 0;
                        #200.1
                        rst_n = 1;
                       
                        #20_000 $stop;
                end
               
        always #10 clk = ~clk;
       
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-22 17:41:33 | 显示全部楼层
仿真运行结果

设置好仿真之后,可以看到仿真结果。
可以看到复位完成后,data依次写入0~255,然后q依次读出0~255,依次循环。
 楼主| lcytms 发表于 2016-11-22 17:42:33 | 显示全部楼层
观察FIFO为读空(rdempty)的状态。
FIFO在复位完成后或者读出255后,rdempty为高,然后rdreq置0。随后wrempty变高(FIFO自身特性),然后wrreq置1,写入一个数据后,wrempty马上变低。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-22 17:43:32 | 显示全部楼层
观察FIFO为写满(wrfull)的状态。
FIFO在写入255时,下一时钟wrfull变高,然后wrreq置0。随后rdfull变高(FIFO自身特性),然后rdreq置1,读出一个数据后,rdfull马上变低。

仿真运行结果表明读出结果与写入数据一致,与设计要求相符。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-22 17:45:27 | 显示全部楼层
查看RTL视图——dcfifo

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2016-11-22 17:45:54 | 显示全部楼层
好了,今天的课程就讲到这里。
通过今天的课程,我们学习了FIFO(先进先出存储器)的基本概念,然后实际演示了一下应用FIFO的IP核来进行FIFO逻辑电路的建模与仿真,并通过仿真查看效果。
希望大家掌握FIFO的基本概念,并熟练运用Verilog语言调用对应的IP核编写相关逻辑。
更复杂的知识和技巧我们将逐步通过后面的课程展现给大家。

课程到此结束,谢谢大家的关注!
芙蓉王 发表于 2016-11-23 14:41:54 | 显示全部楼层
                                    牛
zxopen08 发表于 2016-12-3 17:11:02 | 显示全部楼层
FPGA初级课程第十八讲 FIFO
Esmiamor 发表于 2016-12-27 17:39:21 | 显示全部楼层
              感谢分享。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-23 23:38 , Processed in 0.065675 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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