推荐答案
测试一下
题目
用Verilog实现一个10010序列检测器,当检测到10010序列(包括重叠的情况时,序列检测器输出1,否则输出0,请画出状态转移框图并写出verilog代码。(15分)
参考答案与知识点
参考答案
ç¶æè½¬ç§»å¾ï¼éç¨ Moore åç¶ææºï¼å®ä¹ 6 ä¸ªç¶æï¼S0ï¼åå§ï¼æªå¹é
å°ä»»ä½åºåï¼ãS1ï¼å¹é
å° '1'ï¼ãS2ï¼å¹é
å° '10'ï¼ãS3ï¼å¹é
å° '100'ï¼ãS4ï¼å¹é
å° '1001'ï¼ãS5ï¼å¹é
å° '10010' å¹¶è¾åº 1ï¼ãç¶æè½¬ç§»å¦ä¸ï¼
- S0: è¾å
¥ 0 â S0ï¼è¾å
¥ 1 â S1ã
- S1: è¾å
¥ 0 â S2ï¼è¾å
¥ 1 â S1ï¼éå ï¼å 为 '1' èªèº«ææå¹é
ï¼ã
- S2: è¾å
¥ 0 â S3ï¼è¾å
¥ 1 â S1ï¼å 为æ«å°¾ '10' å 1 åæ '101'ï¼ä»
æåä¸ä¸ª '1' å¹é
ï¼ã
- S3: è¾å
¥ 0 â S0ï¼'1000' æ å¹é
ï¼ï¼è¾å
¥ 1 â S4ã
- S4: è¾å
¥ 0 â S5ï¼è¾å
¥ 1 â S1ï¼'10011' ä»
æåä¸ä¸ª '1' å¹é
ï¼ã
- S5ï¼è¾åº 1ï¼: è¾å
¥ 0 â S2ï¼éå ï¼æ«å°¾ '10' å 0 åæ '100'ï¼å¹é
å° '100'ï¼ï¼è¾å
¥ 1 â S1ï¼éå ï¼æ«å°¾ '0' å 1 åæ '01'ï¼ä»
å个 '1' å¹é
ï¼ã
Verilog 代ç éç¨ä¸æ®µå¼ç¶ææºï¼
```verilog
module seq_detector(
input clk,
input rst_n,
input din,
output reg dout
);
parameter S0=4'd0, S1=4'd1, S2=4'd2, S3=4'd3, S4=4'd4, S5=4'd5;
reg [3:0] state, next_state;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) state <= S0;
else state <= next_state;
end
always @(*) begin
next_state = state;
case(state)
S0: next_state = din ? S1 : S0;
S1: next_state = din ? S1 : S2;
S2: next_state = din ? S1 : S3;
S3: next_state = din ? S4 : S0;
S4: next_state = din ? S1 : S5;
S5: next_state = din ? S1 : S2;
default: next_state = S0;
endcase
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n) dout <= 1'b0;
else dout <= (state == S5) ? 1'b1 : 1'b0;
end
endmodule
```
注æï¼ç¶æ S5 è¾åº 1ï¼éå å¤çä½ç°å¨ S5 ç转移ä¸ï¼è¾å
¥ 0 åå° S2ï¼å¹é
'100'ï¼ï¼è¾å
¥ 1 åå° S1ï¼å¹é
å个 '1'ï¼ã
涉及知识点
- Verilog
- verilog
- 状态机
- sta