计数时序求助

2019-03-25 09:08发布

各位专家,小弟新手一枚。遇到个问题,在此求助指导下,谢谢。
在我FPGA设计中,有两个时钟信号, 一个74.25MHz,一个400MHz。两信号周期比为5.38倍左右。小弟要对400MHz信号上升沿进行计数,但计数周期为一个74.25MHZ的 时钟。即每当74.25MHz上升沿到来时,计数清零,从新开始记数,即为0、1、2、3、4、0、1、2、3、4、0、1、2、3、4……循环下去,恳 请各位不吝指导。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
碧水2012
1楼-- · 2019-03-25 15:21
 精彩回答 2  元偷偷看……
shangliyongzhe
2楼-- · 2019-03-25 16:18
谢谢您。这样是实现不了的。else if(clk_74m)   count <= 0; 实现了清零,但clk_74m为高电平时并没有进行记数,只是在其为低电平的半个周期内进行了记数。
仙猫
3楼-- · 2019-03-25 19:22

reg clk_74m_bak = 0;

 

always @(posedge clk_400m)

begin

  clk_74m_bak <= clk_74m;

  if ((clk_74m_bak == 0) && (clk_74m == 1))

    counter <= 0;

  else

    counter <= counter + 1;

end

仙猫
4楼-- · 2019-03-26 00:12
      
碧水2012
5楼-- · 2019-03-26 05:35
哦 因为400m频率比74m快相当于在74m为高的时候扫描了高信号几次所以在此期间都被值0 了 用另外这个看看能不能达到要求:
always@(posedge clk_400m)
                begin
                        if(ret)
                                begin
                                        count <= 3'd0;
                                        state_74m_pg <= 0;
                                end
                        else
                                begin
                                        case(state_74m_pg)
                                                0:begin
                                                                        if(clk_74m)
                                                                                begin
                                                                                        count <= 3'd0;
                                                                                        state_74m_pg <= 1;
                                                                                end
                                                                        else
                                                                                begin
                                                                                        count <= count + 3'd1;
                                                                                        state_74m_pg <= 0;
                                                                                end
                                                                end
                                                1:begin
                                                                        if(!clk_74m)
                                                                                begin
                                                                                        count <= count + 3'd1;
                                                                                        state_74m_pg <= 0;
                                                                                end
                                                                        else
                                                                                begin
                                                                                        count <= count + 3'd1;
                                                                                        state_74m_pg <= 1;
                                                                                end
                                                                end
                                                default:begin
                                                                        count <=  3'd0;
                                                                        state_74m_pg <= 0;
                                                                  end
                                        endcase
                                end
                end
因为是用400m扫描74m所以在clk_400m上升沿来之前如果74m的上升沿来了那么count值0 要等到clk_400m的上升沿来的时候 不知道能不能用 希望对你有所帮助
碧水2012
6楼-- · 2019-03-26 09:58
楼上的高手!膜拜!学习了!

一周热门 更多>