首页 > 其他分享 >数字IC手撕代码-序列检测(移位寄存器写法)

数字IC手撕代码-序列检测(移位寄存器写法)

时间:2022-09-22 11:01:08浏览次数:52  
标签:检测 代码 寄存器 序列 IC 写法 移位

大家好我是酸菜鱼,这个系列着重讲解数字ic或FPGA实习面试及秋招面试的高频手撕代码题。

本文具体内容涉及:利用移位寄存器 写序列检测。

        一说到序列检测,你脑子里要立马跳出两种解法,一种是状态机写法, 一种是移位寄存器写法,看过一个面经,面试官让手撕一个 五位01序列的序列检测,作者用状态机写的,写完被批评代码太复杂,再写一个简单的方法(也即移位寄存器方法)最后没写出来。虽然第二种方法更简单更好用,但是我们两种方法都得会。

序列检测有什么用?

        如果让你实现一个电子锁,输入密码,密码正确就开,密码错误就不开,你会如何写代码?用if-else嵌套嘛,如果第一个数对了,再去判断第二个数? 

 

  这种方法在输入密码位数比较少的时候可行,但是如果密码位数很多,if-else 被综合出来就是一个MUX,如果循环嵌套很多,那就是级联MUX一连串长的逻辑会有很大的delay,所以这种方法是不可取的。 

移位寄存器写法 

  移位寄存器写法的序列检测,会比状态机写法的简单很多,只需要给一组寄存器,用来存储输入数据,再和指定序列比较就行了。比如检测一长一点的序列,序列检测:1100_1101具体代码很简单,代码如下 。

代码:

     主要思路就是:每周期读入一个信号din,然后存入data信号的最低位一个周期存一位,如果连续来的八个信号正好是我们要检测的序列1100_1101,那么data里存的就是这个信号,判断data就和我们要检测的信号相等。

Testbench: 

 

 波形图:

 

   detect信号检测到了序列 1100_1101 信号拉高。结果和我们预想的一致,但是代码简洁了许多,在没有要求的情况下,手撕代码就采用这种移位寄存器的方式。

标签:检测,代码,寄存器,序列,IC,写法,移位
From: https://www.cnblogs.com/jerry-caiyu/p/16718440.html

相关文章

  • 数字IC手撕代码-序列检测(状态机写法)
    大家好我是酸菜鱼,这个系列着重讲解数字ic或FPGA实习面试及秋招面试的高频手撕代码题 具体内容涉及:        一说到序列检测,你脑子里要立马跳出两种解法,一种是状......
  • elasticsearch生成证书的两种方式
    1.elasticsearch-certgen方式注意:这种方式如果以后新增节点导致证书得重新生成并放到es所有节点2.elasticsearch-certutil方式##(1)创建证书$pwd/alidata1/admin......
  • static关键字
    static为编程语言中的一个关键字,是一种修饰符,既可以修饰变量也可以修饰方法在类中,用static声明的成员变量为静态成员变量,也称之为类变量,类变量的生命周期和类相同,在整个......
  • Java并发编程解析 | 基于JDK源码解析Java领域中并发锁之同步器Semaphore,CyclicBarrier
    苍穹之边,浩瀚之挚,眰恦之美;悟心悟性,善始善终,惟善惟道!——朝槿《朝槿兮年说》写在开头在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享......
  • JAVA字符串转Unicode编码
    importjava.util.ArrayList;publicclassHello{publicstaticvoidmain(String[]args){Strings="我爱JAVA";System.out.println(s2uni......
  • Python commandline-config简洁命令行配置工具: 一个供用户以Python Dict或JSON格式编
    本文介绍了一个可以直接用pip安装的python工具包commandline-config,适合经常写python代码跑实验的研究生们,工具可以通过Python原生字典dict(支持嵌套)的形式来写实验的参数配......
  • static
    一静态局部变量静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整......
  • 有关static关键字的探究
    static为编程语言中的一个关键字,是一种修饰符,既可以修饰变量也可以修饰方法在类中,用static声明的成员变量为静态成员变量,也称之为类变量,类变量的生命周期和类相同,在整个应......
  • 静态static
    静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释......
  • elasticsearch8.1源码编译笔记
    环境idea2022.1.3jdk17macos10.14.6gradle7.4.2(代码自动下载)前置准备idea设置JDK17idea设置gradleJVM为ProjectJVMgradle设置aliyun加速(可选),有时设......