数字IC常见问题-序列检测的两种解法

本文提出两种方法,抛砖引玉,欢迎大佬们拿出更好的办法砸过来!!

最近一个学弟问了我一道题,是一道序列检测的小题,还是很有趣的。题目是这样: 设计序列信号检测器,具体要求:当输入码流为 111000 或 101110 时输出信号为 1,否则输出信号 result 为 0。输入信号有效 valid 为 1 时表示当前输入有效,为 0 时表示无效,之前输入依旧计入序列中并不清零。

喜闻乐见的序列检测。见到这道题,首先见到序列检测第一反应就是状态机

如果要是写状态机,就要做下功课研究一下状态转移,序列检测的状态转移可是暗藏玄机。由于接收过程中,我们并不知道序列何时开始。可能有点说的模糊了,那我们这道题举个例子,首先我们来看我们要检测的两个序列:

首先这两个序列都要检查第一位是否为1,如果第一位检测到1,我们就检测第二位,假设第二位还是1,也就是目前还满足序列一,我们继续检测第三位,第三位检测到为0,不满足序列一,一般来说就想到重新检测了。但是实际上现在检测的序列为“1 1 0”他虽然不满足序列一了,但是这三位的后两位“1 0”是满足序列二的,接下来应该判断下一位是不是1,而不是回到最初的状态。

所以这个状态转移要满足序列的特性,而不是简单地一遍一遍的机械的扫。根据上面我们说的可以画出状态转移图:

注意右下角的红线,这个小红线可是个坑!细看当满足第二个序列的时候,也就是序列为“1 0 1 1 1 0”他的后四位“1 1 1 0”还是满足第一个序列的前四位的!很多小伙伴就忘记了这个,上一个序列结束了检测到了,结束了,还是有可能在已经检测到的序列中在检测出新的序列的!(写这句的时候突然想到一句不恰当的诗,“沉舟侧畔千帆过,病树前头万木春”)

这么复杂的状态转移采取检测这么6个数,是不是太慢烦了呢?于是并这一颗懒省事的心,外加受到启发,想到了曾经的项目:扰码器!

甚至于不用扰码器这么复杂,只需要一组移位寄存器。设置一组包括六个寄存器的移位寄存器,每个时钟沿向后移动一位,并且在每个时钟沿检测一下六个寄存器之中是不是我们存储的想要的序列,是就将result赋1,否则赋0.折腾那么半天的状态转移,简简单单一个移位寄存器就解决了,不得不说移位寄存器大法好啊。

设计电路图大致如下

既然我已经提出了两种办法,不知道各位还有没有更简单,更有效更快速的解决办法呢

#数字芯片设计##学习路径#
全部评论
一般也就是用反馈移位寄存器了
1 回复 分享
发布于 2022-03-17 10:33

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
1
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务