linxiaolong 发表于 2010-3-20 10:43:39

FPGA接收串口数据部分请教

在网上找了一个源码,有点疑问,如下:

always@(posedge clksend)                                         
    begin
       WR_R1 <= RI;
       WR_R2 <= WR_R1;
       WR_R3 <= WR_R2;
    end

assign    WR = (~WR_R3)&(WR_R2)&(WR_R1);        //控制写信号

请问:为什么要这样啊??

linxiaolong 发表于 2010-3-20 10:45:44

小弟是初学者,问的问题有点简单。

tear086 发表于 2010-3-20 12:58:18

你自己动手画下波形,看一下就知道什么意思。

linxiaolong 发表于 2010-3-20 16:45:21

好的

caozhu 发表于 2010-5-1 02:31:16

边缘滤波

xingchen 发表于 2010-5-10 13:11:32

always@(posedge clksend)      
    begin
       WR_R1 <= RI;
       WR_R2 <= WR_R1;
       WR_R3 <= WR_R2;
    end

assign    WR = (~WR_R3)&(WR_R2)&(WR_R1);
RI是输入端口,WR_R1保存最近的RI短裤的状态,WR_R2是上一次的状态,一次类推。WR应该是“1”有效吧,如果是就是边沿检测,WR_R3是上上次状态为“0”,紧跟着2次都为“1”时,发生“0”到“1”的跳变,此时WR=1。当WR=1时认为来RI来了上升沿。

flybabys 发表于 2010-5-12 09:17:31

实际上是典型的异步信号同步化去抖动的写法!
对于外部输入的信号,采用内部时钟采集边沿的时候,一般都这样写!
诸如PS2的时钟等,都要这样,增加其抗干扰的性能
页: [1]
查看完整版本: FPGA接收串口数据部分请教