3665|1

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

FIFO的使用和功能仿真 [复制链接]

程序如下,在工程中为顶层模块
`timescale 1ps / 1ps

module test_fifo(
        clk,
        rst_n,
        
        data,
        rdreq,
        wrreq,
        q,
        rdempty,
        rdusedw,
        wrfull,
        wrusedw,
        reg_data,
        check_empty,
        rd_req_r
        );
        
        input clk;
        input rst_n;
        
        output        [63:0]  data;
        output          rdreq;
        output          wrreq;
        output        [63:0]  q;
        output          rdempty;
        output        [7:0]  rdusedw;
        output          wrfull;
        output        [7:0]  wrusedw;
        output  [63:0]reg_data;
        output        check_empty;
        output  rd_req_r;
        
        reg [63:0]data;
        reg check_empty;
        //wire rdreq;
        reg rdreq_r;
        reg wrreq;
        
        // fifo
        adc_fifo        adc_fifo_inst (
        .data ( data ),
        .rdclk ( clk ),
        .rdreq ( rdreq ),
        .wrclk ( clk ),
        .wrreq ( wrreq ),
        .q ( q ),
        .rdempty ( rdempty ),
        .rdusedw ( rdusedw ),
        .wrfull ( wrfull ),
        .wrusedw ( wrusedw )
        );
        
        parameter FIFO_WRITE         = 4'b0001,
                  FIFO_READ          = 4'b0010,
                  IDLE                        = 4'b0100,
                  STOP              = 4'b1000;
                  
        reg [3:0] state;  
        reg [63:0] reg_data;
        reg [255:0]counter;        
        
        always @(posedge clk)
        if(~rst_n) begin
                //rdreq <= #1 1'b0;
                wrreq <= #1  1'b0;
                data  <= #1  64'hffffffffffffffff;
                state <= #1  IDLE;
                counter <= 8'h00;
        end else begin
                        case (state)
                                IDLE:
                                begin
                                        data  <= #1  64'd10;
                                        state <= #1  FIFO_WRITE;
                                        wrreq <= #1  1'b1;
                                end
                                FIFO_WRITE:
                                begin
                                        data <= #1  data + 1'b1;
                                        counter <= counter + 1'b1;
                                        if( counter == 4 ) begin
                                                state <= #1  FIFO_READ;
                                                wrreq <= #1  1'b0;
                                                data  <= #1  data - 1'b1;
                                                //rdreq <= #1  1'b1;
                                        end else
                                                state <= #1  FIFO_WRITE;
                                end
                                FIFO_READ:
                                begin
                                        //reg_data <= q;
                                        if(rdempty)begin
                                                state <= #1  STOP;
                                        end        
                                end
                                STOP:
                                begin
                                        state <= #1  STOP;
                                        //rdreq <= #1  1'b0;
                                        wrreq <= #1  1'b0;
                                end
                        endcase
        end
        
        always @(posedge clk)
        if(~rst_n)
        begin
                check_empty <= 1'b0;
        end        else if(~rdempty)
                check_empty <= 1'b1;
        else
                check_empty <= 1'b0;
               
        assign rdreq = (~rdempty) & check_empty;
        
        always @(posedge clk)
                rdreq_r <= rdreq;
               
        always @(posedge clk)
        if(~rst_n)
        begin
                reg_data <= 0;
        end        else if(rdreq_r)
                reg_data <= q;
        else
                reg_data <= 64'hffffffffffffffff;
               
        
endmodule
此帖出自FPGA/CPLD论坛

最新回复

谢谢分享!  详情 回复 发表于 2010-6-2 08:24
点赞 关注
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 

回复
举报

190

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
谢谢分享!
此帖出自FPGA/CPLD论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表