数字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

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
01-17 08:34
门头沟学院 Java
想找对象的单身狗在努力存钱:这工资不低了,再高点人家要招博士硕士的
点赞 评论 收藏
分享
评论
1
9
分享

创作者周榜

更多
牛客网
牛客企业服务