在上一篇博文中, 我採用窮舉法來尋找合適的狀態序列——這是低效的, 且很容易出錯.
這裏介紹一種科學的方法, 可以幫助我們快速確定合適的狀態序列.
在本題中, 要求實現序列信號00010111, 那麼我們先選擇兩位: 00->00->01->10->01->11->11->10->00->...... 有重複狀態, 捨棄;
接下來選擇三位: 000->001->010->101->011->111->110->100->000->...... 沒有重複狀態, 則選擇該方案進行設計.
由此得到狀態序列表.
CLK順序 | Q2 | Q1 | Q0 |
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 |
3 | 1 | 0 | 1 |
4 | 0 | 1 | 1 |
5 | 1 | 1 | 1 |
6 | 1 | 1 | 0 |
7 | 1 | 0 | 0 |
8 | 0 | 0 | 0 |
觀察狀態序列表後, 我們可以清楚地看到, 要求產生的序列信號00010111正好在Q2端順序產生, 所以這裏直接將Q2引出, 作爲序列信號產生端, 而不用再去添加輸出變量了.
採用這種方法確定合適的狀態序列, 是既準確又高效的.
根據上面的分析得到下表.
CLK順序 | Q2 | Q1 | Q0 | D0 |
0 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
2 | 0 | 1 | 0 | 1 |
3 | 1 | 0 | 1 | 1 |
4 | 0 | 1 | 1 | 1 |
5 | 1 | 1 | 1 | 0 |
6 | 1 | 1 | 0 | 0 |
7 | 1 | 0 | 0 | 0 |
8 | 0 | 0 | 0 | 1 |
之後的步驟與上一篇博文相同, 這裏不再贅述. 讀者在閱讀本篇文章後, 能掌握這種快速確定狀態序列的方法即可.