这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 求助如何理解这句SyncClk

共3条 1/1 1 跳转至

求助如何理解这句SyncClk

菜鸟
2015-12-08 15:32:41     打赏
详情:always@(posedge iClk or negedge iResetN)
begin
 if(!iResetN)
 begin
  SerialDataLast<=1'b0;
 end
 else
 begin
  SyncClk<=({SerialDataLast,iSerialData}==2'b10)?1'b0:1'b1;
  SerialDataLast<=iSerialData;
serialdata已经被赋给serialdatalast,怎么会出现({SerialDataLast,iSerialData}==2'b10),这样写的目的是什么?望大神赐教,感激不尽。



关键词: 求助     verilog    

院士
2015-12-08 20:13:28     打赏
2楼

这个友情帮顶一下了。

FPGA好多年不碰了,实在是想不起来了。


菜鸟
2015-12-17 22:44:30     打赏
3楼

首先解释一下大括号的用法,大括号就是合并信号,题主中的这句{SerialDataLast,iSerialData}的意思就是将这两个信号合并起来变成一个2bit的总线的意思,其中高位为SerialDataLast,低位为iSerialData。

楼主看到这肯定要骂娘我婆婆妈妈了,稍安勿躁,且听我慢慢道来.....

首先理解一下SyncClk这个信号是什么鬼,根据程序给SyncClk赋值这句,说明了当{SerialDataLast,iSerialData}这个家伙为2'b10的时候为0,否则为1。那么{SerialDataLast,iSerialData}==2'b10是什么情况,就是当SerialDataLast为1,iSerialData为0啦,好啦这都不是重点,重点来了,楼主不理解serialdata已经被赋给serialdatalast”这个含义,没错,是已经赋值过去了,赋值的就是当前的serialdata的值,但是这个always块块是每来一个posedge iClk的时候执行一次,也就是说在下一次执行这个always块块到SyncClk<=({SerialDataLast,iSerialData}==2'b10)?1'b0:1'b1;这句话的时候,是不是serialdatalast这个的值就是上一次posedge iClk执行的时候的iSerialData值呢?你说是不是,是不是.... 当然是啦....而iSerialData是本次iClk执行的时候的值,这样这句话实际上就是判定了这种情况,当上一个时钟的时候iSerialData为1,而现在这个时钟的时刻iSerialData为0的时候Sync的值变为0。

好了,结束了,其实就是一个同步判定iSerialData下降沿的逻辑。


BTW:如果楼主觉得这个always块块理解起来复杂,有个简答的办法快速理解,把always块块理解为C语言里面的while(1)死循环,每次执行一次就行会好理解了,当然这个当循环理解还是有条件的,入门的话这么理解会快一些。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]