Verilog -- 序列檢測器及其最小狀態數
筆試題:序列檢測器檢測11011001序列,最少需要幾個狀態?
Mearly 型:
State\Input | 0 | 1 |
---|---|---|
IDLE | 0\0 | 1\0 |
0 | 0\0 | 1\0 |
1 | 0\0 | 11\0 |
11 | 110\0 | 11\0 |
110 | 0\0 | 1101\0 |
1101 | 0\0 | 11011\0 |
11011 | 110110\0 | 11\0 |
110110 | 1101100\0 | 1101\0 |
1101100 | 0\0 | 11011001\1 |
11011001 | 0\0 | 11\0 |
表格中的值代表:nextstate\output
化簡:
下面的狀態可以合並:IDLE / 0 /, 1 /11011001
所以最少的狀態數=8.
因為mearly型的輸出與輸入和當前態都有關,所以可以做到序列最后一位進入狀態機匹配后立即產生高電平。
注意
這里的最后一個狀態在輸入1的時候可以跳轉到11狀態,實際上,在某個輸入下不匹配序列或者已經匹配完一整串序列時,都應該檢查將這一輸入拼接到串里后,序列中是否會出現能夠匹配上面某個狀態序列的子串,如果存在,則將這一輸入對應的狀態跳轉到匹配的最長子串所表示的狀態中。
moore型
State\Input | 0 | 1 | output |
---|---|---|---|
IDLE | 0 | 1 | 0 |
0 | 0 | 1 | 0 |
1 | 0 | 11 | 0 |
11 | 110 | 11 | 0 |
110 | 0 | 1101 | 0 |
1101 | 0 | 11011 | 0 |
11011 | 110110 | 11 | 0 |
110110 | 1101100 | 1101 | 0 |
1101100 | 0 | 11011001 | 0 |
11011001 | 0 | 11 | 1 |
表格中的值代表:nextstate
化簡:
下面的狀態可以合並:IDLE / 0
所以最少的狀態數:8+1=9.
因為moore型的輸出只與當前態都有關,所以序列最后一位進入狀態機匹配后還要等待一個周期進入最后的狀態才能輸出高電平。
總結
- 對於Mearly型描述的序列檢測器,序列長度為\(n\),對於最少需要的狀態數,需要看最后一個狀態是否能跳轉到除了起始狀態的其他狀態,如果能,則最少需要的狀態就是\(n\)(因為可以和初始狀態合並),如果不可以,則最少需要的狀態就是\(n+1\)。
- 對於Moore型描述的序列檢測器,序列長度為\(n\),則最少需要的狀態數就是\(n+1\)。
- mearly型的輸出在序列的最后一個比特輸入完后立即產生
- moore型的輸出因為無法根據輸入改變而改變,所以其輸出會比mearly型慢一拍。
ps:仿真代碼有時間再寫吧。。。