[X]关闭

fdma ddr3 滤波模块 状态机 读写使能

文档创建者:巴掌大的巴掌
浏览次数:4635
最后更新:2021-10-18
在修改米联客CH02_FDMA_1080P_TS例程时,删掉了 hdmi输出和sensor_data_gen模块,自己加了一个data_gen模块, W0_FS_I和R0_FS_I均从这个模块产生,但是实际ila测试发现,fdma的wo——cap滤波模块无法输出W0_FS信号,状态机一直卡在IDLE状态,我翻看了WO_CAP这个滤波模块,内容是没有变过的,请问是这个滤波过程需要W0_FS_I保持一定时间吗?还是其他原因?
reg FS_r = 1'b0;
    always@(posedge clk_i) begin
         FS_r <= (!rstn_i) ?  1'b1 : FS;
    end
   
    always@(posedge clk_i) begin
         if(!rstn_i)begin
            fs_cap_o <= 1'd0;
         end
         else if({FS_r,FS} == 2'b01 && s_rdy_i == 1'b1 && fs_cap_o == 1'b0)begin
            fs_cap_o <= 1'b1;
         end
         else begin
            fs_cap_o <= 1'b0;
         end
    end
而且对上面这段程序也不太理解,正常来说ui_rstn都是1,那么    FS_r <= (!rstn_i) ?  1'b1 : FS; 这句话其实就是FS_r 一直等于FS,那么这句话 FS_r,FS} == 2'b01 应该怎么满足呢?感觉无法达到这个触发条件

发表评论已发布 2

巴掌大的巴掌

发表于 2021-6-10 15:47:39 | 显示全部楼层

我的W0_FS_I信号,每次只能维持一个时钟周期,是时间的问题吗?还有希望您能解答一下上面提问的滤波的原理,这个还是不太明白。

A1_Vincent

发表于 2021-10-18 16:56:43 | 显示全部楼层

“FS_r <= (!rstn_i) ?  1'b1 : FS; 这句话其实就是FS_r 一直等于FS”,你这个理解是有问题的,实际上并不是一直等于,此处使用了非阻塞赋值,只在时钟上升沿时候使FS_r(经过一定时间延迟)锁存为FS。在锁存的时钟上升沿时刻,FS_r的值仍是上一个时钟上升沿锁定的FS值,故{FS_r,FS} == 2'b01表达的意思是FS由上一时刻的0(锁存在FS_r中的值)变为当前的FS 1值,也就是FS出现了一个由低到高的跳变。建议楼主去看看阻塞赋值和非阻塞赋值的区别。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则