CO-P0-logisim相关


关于本次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进行判断就睡简单的组合逻辑了(这里我并没有测试过,不知道具体实施能否行得通,欢迎批评指正)


文章作者: hugo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hugo !
  目录