微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 比较器的延时问题

比较器的延时问题

时间:10-02 整理:3721RD 点击:
我下面的这段设计有问题,在100MHz时不能工作,在25MHz时可以正常工作,很奇怪。
我估计是我的 24bit比较器 的延时大于了一个时钟周期10ns,所以才出错了。
请高手指教啊!

  1. // sequence detector
  2. module seqdet_m(
  3. input clk, // 100MHz
  4. input rst_n,
  5. input [23:0]data,
  6. output wire detected,
  7. output wire[2:0]state
  8. );

  9. parameter StartFlag0 = 24'hE065ca,
  10.           StartFlag1 = 24'h03afd7,
  11.           StartFlag2 = 24'h1f4c92,
  12.           StartFlag3 = 24'hd90a8b,
  13.           StartFlag4 = 24'h668fac;
  14. parameter S_START = 3'b000,
  15.           S_A     = 3'b001,
  16.           S_B     = 3'b010,
  17.           S_C     = 3'b011,
  18.           S_D     = 3'b100,
  19.           S_E     = 3'b101;

  20. reg[2:0] current_state,next_state;

  21. always@(posedge clk)
  22.     if(!rst_n) current_state <= S_START;
  23.     else current_state <= next_state;
  24. always@(current_state or data)
  25.     case(current_state)
  26.     S_START : next_state = (data[23:0] == StartFlag0)?S_A:S_START;
  27.     S_A : next_state = (data[23:0] == StartFlag1)?S_B:S_START;
  28.     S_B : next_state = (data[23:0] == StartFlag2)?S_C:S_START;
  29.     S_C : next_state = (data[23:0] == StartFlag3)?S_D:S_START;
  30.     S_D : next_state = (data[23:0] == StartFlag4)?S_E:S_START;
  31.     default : next_state = S_START;
  32.     endcase

  33. assign detected = (current_state == S_E)?1:0;
  34. assign state = current_state;
  35. endmodule

复制代码

时序分析报告会给出延迟信息,可以看看是不是比较器花费的时间;
和约束也有一定关系,可以约束这个电路跑100M看看。


没有啊,我用altera的EP2C20484C7跑你这代码,CTA跑到了380Mhz, critical path也才7个ns啊



  Thanks a million ! 时序约束一下果然变好了。



   嗯,谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top