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); //控制写信号
请问:为什么要这样啊?? 小弟是初学者,问的问题有点简单。 你自己动手画下波形,看一下就知道什么意思。 好的 边缘滤波 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来了上升沿。 实际上是典型的异步信号同步化去抖动的写法!
对于外部输入的信号,采用内部时钟采集边沿的时候,一般都这样写!
诸如PS2的时钟等,都要这样,增加其抗干扰的性能
页:
[1]