关于本次P0,提供我个人的一点拙见
第一题
题目描述:
给定五个8bit输入,输出一个8bit的在五个输入中没出现的最小正整数。
这里首先考虑到这里必然最大的输出也只是6(因为只有5个数),那么这思路就来了。利用一个6bit的中间量hot
(有点独热码的那个意思,因为只会有一项为1,其余为0)来处理。
如果某一个数小于等于5,那就将这个hot
的对应位置为1。然后将每个输入的hot
或起来,那么就得到了个6bit 2进制数,其中有1的位置代表存在该数(由于计数是从0开始,所以最终得到结果的时候需要加个1)
电路图如图所示:
把这个作为一个子电路,对每一个input进行处理,再将得到的hot
或起来。
最后利用一个bit finder找最低位的0就可以了。这里因为引入的是6位,就能够解决输入为1 2 3 4 5的问题。如果使用5位就需要特判。
第二题
题目描述:
输入为2bit方向信号,1bit clk,1bit reset(异步复位,直接接在寄存器reset端即可)。
类似课下的navigation的题目,这里题目要求使用mealy状态机。最开始位于1处,根据输入的2bit方向信息前往下一个位置,如果没有(或者撞墙)则停留在当前位置。输出为下一步的位置标号。
输出4bit位置信号
**状态转移图:**直接根据题目信息即可得到状态转移图。这里直接使用4bit二进制码或者3bit二进制码来表示状态即可。
**打真值表:**略
Mealy型状态机:
补充好status状态转移部分和output输出逻辑即可。
需要注意的是:
这里可以直接在寄存器前面接输出(如上图红线部分,当然这里是使用状态的编码从1开始而且为4bit的情况,其他状态也可以进行修改),在计组讨论区中也有讨论,其实也就是Mealy机的实现模式~~,具体可参见这篇博客~~(还没写)。
还有一些打表的小细节:
第三题
题目描述:
输入:多个4bit二进制数作为一个16进制数
判断输入的序列中是否存在指定的序列,并得到对应输出。
输入序列 | 输出 |
---|---|
EEE | 1 |
A0E | 2 |
0A0 | 3 |
其他 | 0 |
输出:2bit output
题目要求使用moore机
实现
状态转移图:
**打真值表:**略
moore机
:
当然这里还有更加偷巧的办法,比如:
然后对每个state进行判断就睡简单的组合逻辑了(这里我并没有测试过,不知道具体实施能否行得通,欢迎批评指正)