|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我下面的这段设计有问题,在100MHz时不能工作,在25MHz时可以正常工作,很奇怪。
我估计是我的 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
复制代码 |
|