比较器的延时问题
时间:10-02
整理:3721RD
点击:
我下面的这段设计有问题,在100MHz时不能工作,在25MHz时可以正常工作,很奇怪。
我估计是我的 24bit比较器 的延时大于了一个时钟周期10ns,所以才出错了。
请高手指教啊!
我估计是我的 24bit比较器 的延时大于了一个时钟周期10ns,所以才出错了。
请高手指教啊!
- // sequence detector
- module seqdet_m(
- input clk, // 100MHz
- input rst_n,
- input [23:0]data,
- output wire detected,
- output wire[2:0]state
- );
- parameter StartFlag0 = 24'hE065ca,
- StartFlag1 = 24'h03afd7,
- StartFlag2 = 24'h1f4c92,
- StartFlag3 = 24'hd90a8b,
- StartFlag4 = 24'h668fac;
- parameter S_START = 3'b000,
- S_A = 3'b001,
- S_B = 3'b010,
- S_C = 3'b011,
- S_D = 3'b100,
- S_E = 3'b101;
- reg[2:0] current_state,next_state;
- always@(posedge clk)
- if(!rst_n) current_state <= S_START;
- else current_state <= next_state;
- always@(current_state or data)
- case(current_state)
- S_START : next_state = (data[23:0] == StartFlag0)?S_A:S_START;
- S_A : next_state = (data[23:0] == StartFlag1)?S_B:S_START;
- S_B : next_state = (data[23:0] == StartFlag2)?S_C:S_START;
- S_C : next_state = (data[23:0] == StartFlag3)?S_D:S_START;
- S_D : next_state = (data[23:0] == StartFlag4)?S_E:S_START;
- default : next_state = S_START;
- endcase
- assign detected = (current_state == S_E)?1:0;
- assign state = current_state;
- endmodule
时序分析报告会给出延迟信息,可以看看是不是比较器花费的时间;
和约束也有一定关系,可以约束这个电路跑100M看看。
没有啊,我用altera的EP2C20484C7跑你这代码,CTA跑到了380Mhz, critical path也才7个ns啊
Thanks a million ! 时序约束一下果然变好了。
嗯,谢谢!
