芯路恒电子技术论坛

 找回密码
 立即注册

扫一扫,访问微社区

热搜: 活动
查看: 94|回复: 0

fifo问题

[复制链接]
  • TA的每日心情
    开心
    2018-9-15 10:23
  • 5

    主题

    8

    帖子

    34

    积分

    新手上路

    Rank: 2

    积分
    34
    发表于 2019-3-7 20:51:01 | 显示全部楼层 |阅读模式
    我向fifo里写了4个4位数,在读出来发现仿真没问题,signaltapII抓线时,却不对。代码如下:
    `timescale 1ns/1ns
    module fifo_test(
            Rst_n,
            mii_rx_clk,
            mii_tx_clk,
            WKC
    );
    input Rst_n;
    input mii_rx_clk;
    input mii_tx_clk;
    output reg[15:0]WKC;

    wire tx_go;

    reg[3:0]fifo_wrdata;
    reg fifo_wrreq;
    wire fifo_wrclk;
    wire[10:0]fifo_wruse;

    wire[3:0]fifo_rddata;
    reg fifo_rdreq;
    wire fifo_rdclk;
    wire rdempty;
    wire[10:0]fifo_rduse;

    assign fifo_wrclk=mii_rx_clk;
    assign fifo_rdclk=mii_tx_clk;

    Rx_fifo Rx_fifo(
            .aclr(!Rst_n),
            .data(fifo_wrdata),
            .rdclk(fifo_rdclk),
            .rdreq(fifo_rdreq),
            .wrclk(fifo_wrclk),
            .wrreq(fifo_wrreq),
            .q(fifo_rddata),
            .rdempty(rdempty),
            .rdusedw(fifo_rduse),
            .wrfull(),
            .wrusedw(fifo_wruse)
    );       

    //fifo里存放4个4位数
    reg[2:0]cnt;
    reg flag;
    always@(posedge mii_rx_clk or negedge Rst_n)
    if(!Rst_n)begin
            fifo_wrreq<=#1 0;
            fifo_wrdata<=#1 0;
            cnt<=#1 0;
            flag<=#1 0;
    end
    else if(tx_go)begin
            cnt<=#1 5;
    end
    else if(cnt>=2)begin
            fifo_wrreq<=#1 1;
            fifo_wrdata<=#1 (fifo_wrdata+1'b1);
            cnt<=#1 cnt-1'b1;
    end
    else if(cnt==1)begin
            fifo_wrdata<=#1 0;
            fifo_wrreq<=#1 0;
            flag<=#1 1;
            cnt<=#1 cnt-1'b1;
    end
    else begin
            cnt<=#1 0;
            flag<=#1 0;
    end

    //fifo里取出4个4位数
    reg[7:0]flag_dly;
    always@(posedge mii_rx_clk or negedge Rst_n)
    if(!Rst_n)
            flag_dly<=#1 0;
    else
            flag_dly<=#1 {flag_dly[6:0],flag};
           
    reg[2:0]data_cnt;
    always@(posedge mii_tx_clk or negedge Rst_n)
    if(!Rst_n)begin
            fifo_rdreq<=#1 0;
            data_cnt<=#1 0;
            WKC<=#1 0;
    end
    else if(flag_dly[7])begin
            data_cnt<=#1 4;
            fifo_rdreq<=#1 1;
    end
    else if(data_cnt>=2)begin
            fifo_rdreq<=#1 1;
            WKC<=#1 {WKC[11:0],fifo_rddata};
            data_cnt<=#1 data_cnt-1'b1;
    end
    else if(data_cnt==1)begin
            fifo_rdreq<=#1 0;
            WKC<=#1 {WKC[11:0],fifo_rddata};
            data_cnt<=#1 data_cnt-1'b1;
    end
    else begin
            data_cnt<=#1 0;
    end

    reg [8:0]counter;

    always@(posedge mii_tx_clk or negedge Rst_n)
    if(!Rst_n)
            counter <=#1  0;
    else //计数器自增,不考虑溢出,接受溢出自动清零
            counter <=#1  counter + 1'b1;
           
    //每671ms(该值无特殊要求,这里取计数器自溢出,接近0.5ms发送一次数据的目的)启动一次发送数据       
    assign tx_go =  (counter == 9'd1);

    endmodule

    file:///d:\Documents\Tencent Files\2579622230\Image\C2C\7NX42$0D)NHU()W0KL__557.png

    file:///d:\Documents\Tencent Files\2579622230\Image\C2C\]A8Q`K)Q$HI$ZW)2``F7D2Q.png





    回复

    使用道具 举报

    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|芯路恒电子技术论坛  

    GMT+8, 2019-3-20 19:01 , Processed in 0.137800 second(s), 9 queries , File On.

    Powered by Discuz! X3.3

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

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