在上一篇博文中, 我采用穷举法来寻找合适的状态序列——这是低效的, 且很容易出错.
这里介绍一种科学的方法, 可以帮助我们快速确定合适的状态序列.
在本题中, 要求实现序列信号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 |
之后的步骤与上一篇博文相同, 这里不再赘述. 读者在阅读本篇文章后, 能掌握这种快速确定状态序列的方法即可.