如何用fpga实现频率测量啊?还有begin end的时序问题

2012年08月14日 22:40    发布者:eqgyzgs
这是我的代码,目的是设计一个同步捕获的计数器用来测频,大家看看能行吗
always@(posedge clk or negedge rest or negedge softrest)//1s分频,clk为系统时钟,rest硬件复位,softrest软件复位
if((!rest)||(!softrest)) fre_1Hz<=0;
else if(fre_1Hz<50000000-1) fre_1Hz<=fre_1Hz+1;
  else fre_1Hz<=0;
always@(fre_1Hz)
if(fre_1Hz==50000000-1) fre_1Hz_flag=1;
else fre_1Hz_flag=0;
always@(posedge fre1 or posedge clk negedge rest or negedge softrest)//fre1为捕获端口
if((!rest)||(!softrest)) fre_cnt1<=0;
else if(clk)
   if(!fre_1Hz_flag) fre_cnt1<=fre_cnt1+1;
   else
    begin
     {fre1buf,fre1buf,fre1buf,fre1buf,fre1buf}<={{2'b01,fre_cnt1,2'b01},{2'b01,fre_cnt1,2'b01},{2'b01,fre_cnt1,2'b01},{2'b01,fre_cnt1,2'b01},{2'b01,fre_cnt1,2'b01}};//编码发送
     fre_cnt1<=0;//计数清零
    end

我就是第三个always弄不清楚,编码是发生在fre1的上升沿,还是说在clk的上升沿就发生,计数清零又是发生在什么时候?我一直都是begin end中的时序不太明白,begin end中若是有多条语句,则执行一次begin end需要的是1个时钟还是多个时钟?

网友评论

asyou 2012年08月15日
你等级太低,先看语法吧!
eqgyzgs 2012年08月15日
asyou 发表于 2012-8-15 09:30 static/image/common/back.gif
你等级太低,先看语法吧!

就是因为教程没看懂啊...
一.顺序块
顺序块有以下特点:
1) 块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行。
2) 每条语句的延迟时间是相对于前一条语句的仿真时间而言的。
3) 直到最后一条语句执行完,程序流程控制才跳出该语句块。

没明确上一条语句执行完的标志是什么,是电路的建立时间还是时钟,大神解释一下啊
asyou 2012年08月17日
eqgyzgs 发表于 2012-8-15 18:41 static/image/common/back.gif
就是因为教程没看懂啊...
一.顺序块
顺序块有以下特点:


你看教程的时候把它编译成RTL,看它的电路就可以了,begin。。。end只是一个限定关键字而已!
eqgyzgs 2012年08月18日
asyou 发表于 2012-8-17 10:09 static/image/common/back.gif
你看教程的时候把它编译成RTL,看它的电路就可以了,begin。。。end只是一个限定关键字而已!

这个...还不知道怎么编译成RTL,才接触两个月,不知道额
daizhi1970 2012年08月18日
O(∩_∩)O谢谢
whb_fei 2012年09月05日
做频率测量,基频要准,分频时最好不要用计数,用锁相环最好。。。
ty1932 2012年09月29日
你之前没做过其他芯片么? 比如 51 或者 ARM
ty1932 2012年09月29日
零基础学硬逻辑 会有很多东西你都无法理解的   每个字都认识 就是不知道他在说什么