IC设计高级012:afifo读数据用什么信号采样

在设计中,读afifo时需要根据afifo数据输出的拍数进行数据采样。

数据采样时,建议使用非空判断后产生的vld信号进行数据采样,避免因空读产生无效的数据输出。如下文,afifo_rd_en是 afifo的读使能,afifo_rd_en_dly1是afifo读使能打一拍后的信号。afifo_rd_data_vld 是afifo输出有效valid,是由afifo_rd_en && (!empty)打拍后产生的,产生空读时afifo_rd_data_vld为0,推荐使用afifo_rd_data_vld进行数据采样,当afifo没有数据时,afifo_rd_en即使有效,也不会输出无效数据。不推荐使用afifo_rd_en_dly1进行数据采样,否则当afifo内部没有数据时也会产生data_vld。当然如果afifo_rd_en的产生逻辑没有问题也不会出现问题,但方式1的自我保护能力更强,更推荐使用

//方式1:推荐使用方式,应该使用afifo_rd_data_vld作为有效信号
always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        data_out <= 1024{1'b0}};
    else if(afifo_rd_data_vld)                        
        data_out  <=  afifo_rd_data;

always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        data_vld <= 1'b0 ;
    else                     
        data_vld  <=  afifo_rd_data_vld;

//方式2:不推荐方式,
always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        data_out <= 1024{1'b0}};
    else if(afifo_rd_en_dly1)                        
        data_out  <=  afifo_rd_data;

always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        data_vld <= 1'b0 ;
    else                     
        data_vld  <=  afifo_rd_en_dly1;

//-------------------------------------------//
//afifo外部代码
always @(posedge rd_clk or negedge rd_rst_n)
    if(~rd_rst_n)
        afifo_rd_en_dly1 <= 1'b0;
    else                         
        afifo_rd_en_dly1  <=  afifo_rd_en;

//如下部分为afifo内部代码
input     afifo_rd_en,
output    afifo_rd_data_vld,
output  [1023:0]  afifo_rd_data,

assign afifo_ren = afifo_rd_en && (!empty);

bit_delay
#(
.DELAY_CYCLES (1),
.INIT_VAL     (0)
)
bit_delay_u0(
    .clk     (rd_clk),   
    .rst_n   (rd_rst_n),
    .inbit   (afifo_ren),
    .outbit  (afifo_rd_data_vld)
);

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值