序列检测——有限状态机FSM(附verilog代码)

2023-05-16

题目:使用状态机检测“1101”,串行输入的测试序列为“11101101011010”,输出信号为valid有效信号,检测到时输出高,否则为低,考虑序列叠加情况,比如“1101101”,则有两个“1101”。

(不考虑重叠情况的话只是状态转移图有点变化,状态机的写法相似)

本文使用3段式状态机,参考西南交大邸志雄老师课程中第三章第7节关于状态机的写法。

有两个关键点:

两段式状态机:第一个always块采用同步时序描述状态转移;第二个always块组合逻辑判断状态转移条件,描述状态转移规律,并输出结果(组合逻辑输出)。

三段式状态机:第一个always块采用同步时序描述状态转移;第二个always块组合逻辑判断状态转移条件,描述状态转移规律;第三个always块时序逻辑输出结果(寄存器输出)。

同时,需要注意的是,无论二段还是三段,第二段描述状态转移规律用的都是CS(当前状态),三段式状态机的第三段寄存器输出所用状态为NS(下一状态),个中缘由请参考上述 邸志雄老师课程中的讲解,请大家细细体会。

该题目的状态转移图如下所示:

仿真结果如图所示:

 

 

附verilog代码:

module fsm_sequence_detection(
input           clk,
input           rst_n,
input           din,
output          dout
    );
//one hot 编码    
parameter IDLE  = 5'b00001;
parameter S1    = 5'b00010;
parameter S2    = 5'b00100;
parameter S3    = 5'b01000;
parameter S4    = 5'b10000;

reg     dout_r;
assign  dout = dout_r;
reg [4:0] CS,NS;
// 第一段 时序逻辑 描述状态转移
always@(posedge clk )
begin
    if(!rst_n)
        CS <= IDLE;
    else
        CS <= NS;
end
// 第二段 组合逻辑 判断状态转移条件,描述状态转移规律 ,注意case里是CS
always@(*)
begin
    NS <= 5'bx;
    case(CS)
    IDLE: if(din==1) NS <= S1; else NS <= IDLE;
    S1  : if(din==1) NS <= S2; else NS <= IDLE;
    S2  : if(din==0) NS <= S3; else NS <= S2;
    S3  : if(din==1) NS <= S4; else NS <= IDLE;
    S4  : if(din==1) NS <= S2; else NS <= IDLE;
    default: NS <= IDLE;
    endcase
end
// 第三段 时序逻辑 寄存器输出 注意里面是NS。如果输出结果比较多样就用case(NS)选择输出结果
always@(posedge clk )
begin
    if(!rst_n)
        dout_r <= 0;
    else if(NS == S4)
        dout_r <= 1;
    else
        dout_r <= 0;      
end
    
endmodule

仿真代码:

module fsm_test();

reg          clk    ;
reg          rst_n  ;
wire         din    ;
wire         dout   ;
initial begin
clk = 0;
rst_n = 0;
#18
rst_n =1;
end
reg [7:0] seq = 8'b01101101;
assign din = seq[7];
always #5 clk = ~clk;
always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        seq <=8'b01101101;
    else 
        seq<= {seq[6:0],seq[7]};
end
fsm_sequence_detection uut(
.clk     (clk    ),
.rst_n   (rst_n  ),
.din     (din    ),
.dout    (dout   )
    );

endmodule

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列检测——有限状态机FSM(附verilog代码) 的相关文章

  • 警告:Establishing SSL connection without server's identity verification is not recommended

    解决方法 那问题来了 xff0c SSL是什么 xff1f SSL xff08 Secure Socket Layer xff1a 安全套接字层 xff09 利用数据加密 身份验证和消息完整性验证机制 xff0c 为基于TCP等可靠连接的应
  • NestJs-项目创建

    NestJs Nest js 用于构建高效且可伸缩的服务端应用程序的渐进式 Node js 框架 项目创建 构建工具 可以使用 npm yarn pnpm进行包管理 xff0c 但议使用pnpm建议安装nrm镜像源管理工具 xff0c 可以
  • C++ 字符串格式化

    使用snprintf格式化字符串使用boost format格式化字符串使用stringstream格式化字符串 具体示例 使用snprintf格式化字符串 span class token macro property span clas
  • 玩客云 一个百元级的微型服务器

    前言 下面这段基本是copy的 xff0c 就是图个完整 xff0c 不要觉得奇怪哈 玩客云是一款前些年很火的矿机 xff0c 曾经在官网售卖 xffe5 599 xff0c 现在已经沦落到 xffe5 45包邮的田地了 当然这边一般有两种
  • OpenStack双节点部署—M Manila(共享文件系统服务)

    Manila安装 一 数据库配置二 创建服务凭证和API端点三 安装并配置Heat四 启动服务并设置开机自启 一 数据库配置 Controller节点 mysql span class token operator span uroot s
  • Dockerfile简介

    1 什么是dockerfile Dockerfile是一个包含用于组合映像的命令的文本文档 可以使用在命令行中调用任何命令 Docker通过读取Dockerfile中的指令自动生成映像 docker build命令用于从Dockerfile
  • 论文阅读笔记1:EKT: Exercise-aware Knowledge Tracing for Student Performance Prediction

    该篇论文于2019年在IEEE发表 xff0c 作者为 xff1a Qi Liu Zhenya Huang Yu Yin Enhong Chen Hui Xiong Yu Su and Guoping Hu 等 知识追踪 xff08 Kno
  • 树莓派 同时使用有线和无线网卡

    树莓派同时使用有线和无线 使能双网卡待机 添加路由使用规范 备注 192 168 1 0 表明所有以192 168 1开始的网段 都将从后面的设备发送相应的数据 使能双网卡待机 Linux通过设置默认的网络信息实现双网卡待机 设置方法如下
  • c++20 协程本质

    c 43 43 20 协程本质 背景 xff1a 最近因项目关系 xff0c web端 xff0c js异步调用 xff0c 发现跟本门的C 43 43 20 还是有些不一样的 xff0c 本文主要从另外一个角度来看 什么是协程 协程是能暂
  • Manjaro 21安装搜狗输入法

    Manjaro 21安装搜狗输入法 文章目录 Manjaro 21安装搜狗输入法安装输入法Step 1 打开 96 Manjaro Hello 96 点击 96 Application 96 Step 2 切换语言到 96 Chinese
  • Unicode控制字符

    Unicode控制字符 一 前言 在所有主要的Web浏览器中内存中的字符顺序 xff08 逻辑 xff09 与它们显示的顺序 xff08 可视 xff09 是不同的 Unicode 定义了它其中每个字符的方向属性 xff0c 浏览器应用的一
  • tomcat-9.0.36的安装与环境配置

    环境 xff1a 操作系统 xff1a Windows10 64bitTomcat版本 xff1a Tomcat 9 0 36 一 从官网下载tomcat的安装包 1 用浏览器打开Tomcat的官网 官网地址 xff1a https tom
  • 已无线上网的ubuntu机通过网线给其他电脑上网的方法

    首先 xff0c 将ubunt通过无线连上网 用网线将两者连接起来 xff0c 打开ubuntu的有线连接 另一台电脑连接 二者网络地址
  • Pip离线打包与安装

    pip导出与安装 步骤一 xff1a 打包已安装的依赖包 pip freeze gt requirements txt 生成已安装包清单 如本地保留了之前下载的各依赖包 xff0c 直接将各whl tar zip包保存到某个文件夹下 xff
  • Proxmox VE常见问题以及解决办法(持续更新)

    虚拟机出现问题状态为unkonw的解决方法 解决方法 service rrdcached stop rm rf var lib rrdcached service rrdcached start 原帖链接
  • error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found

    错误提醒 错误 1 error MSB8020 The build tools for Visual Studio 2010 Platform Toolset 61 v100 cannot be found To build using t
  • 头文件循环引用验证:#pragma once和#ifndef

    在一个项目中 xff0c 如果两次 xff03 include aaa h xff08 比如bbb h包含了aaa h xff0c 而ccc h即包含bbb h又包含aaa h xff09 就会出错 xff0c 因为相同的类不能定义两次 把
  • 证明,若gcd(n,i) == 1,那么gcd(n,n-i)==1

    证明 xff0c 若gcd n i 61 61 1 那么gcd n n i 61 61 1 解 xff1a 设gcd n i 61 61 1 gcd n n i 61 61 k 61 1 那么n与 n i 的最大公约数为k n k 61 6
  • java 两数组交集/差集/补集 多种方式实现记录

    1 明确概念 首先知道几个单词的意思 xff1a 并集 61 union 交集 61 intersection 补集 61 complement 析取 61 disjunction 减去 61 subtract 1 1 并集 对于两个给定集
  • Webcodecs 遇到的一些坑

    Webcodecs 遇到的一些坑 背景 xff1a 由于需要在web端做一款音视频剪辑软件 xff0c 目前已经做到了软变软解 xff0c 准备介入硬件webcodec解码的时候 xff0c 遇到了一些问题 xff0c 现在把问题整理如下

随机推荐

  • QT添加右键菜单(一):使用QMenu进行实现。

    目录 前言 1 先看效果图 1 要实现弹出菜单栏 xff0c 主要有三步 xff1a 2 Demo具体实现过程如下 xff1a 3 总结 xff1a 前言 实现一个右键菜单 xff0c 使用QMenu进行实现 xff0c 效果图如下 xff
  • from origin ‘null‘ has been blocked by CORS policy: Request header field token is not allowed by Acc

    from origin null has been blocked by CORS policy Request header field token is not allowed by Access Control Allow Heade
  • CCF-CSP201809-3 元素选择器

    题目链接 问题描述 试题编号 xff1a 201809 3试题名称 xff1a 元素选择器时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a id选择器和标签选择器的查询都比较简单 xff0c 稍微麻烦的
  • KODI播放器连接tfcenter webdav文件服务

    下载并配置tfcenter xff08 1 xff09 下载安装包 xff08 免安装 xff09 v1 5 4及以上版本支持 tfcenter安装包https share weiyun com tFAN6x5p xff08 2 xff09
  • 汇编语言(按键控制蜂鸣器实验)

    汇编语言 xff08 按键控制蜂鸣器实验 xff09 各位社区的小伙伴们大家好 xff01 这个是本人写的一个基于80C51单片机的汇编语言小实验 xff0c 主要目的是利用开关来控制蜂鸣器发声 xff0c 代码本人亲测有效 xff01 x
  • Ubuntu16.04几分钟自动断网问题

    方法1 1 打开配置文件 etc ppp options sudo vi etc ppp options 2 在options文件中找到以下两行代码 lcp echo failure 4 lcp echo interval 30 3 把lc
  • Windows 未能启动。原因可能是最近更改了硬件或软件。解决此问题的步骤

    最近使用一键安装软件 xff0c 在win7系统上安装win xp系统 镜像由于金山和360软件拦截了 没有及时关闭 金山和360软件 注意 xff1a 启动列表中出现的 U 盘 xff0c 一般情况是以 USB HDD 打头 原因 xff
  • 联想电脑开机报错0190:Critical low-battery error

    报错信息 xff1a 0190 xff1a Critical low battery error ERROR 0190 Critical low battery error意思是 xff1a 0190 xff1a 电池电量极低错误 给电池充
  • zabbix使用ICMP ping监控网络状态

    简介 zabbix为我们提供了多种监控方式 本文所说的ICMP ping正是zabbix内部的Simple check 简单检查 很实用的小功能 可以实时了解主机的网络状态 Zabbix在监控网络的时候需要查看ping包的丢失率和响应时间
  • RDP远程登录 Windows server系统

    使用 RDP 文件登录 Windows 实例 目录 操作场景适用本地操作系统前提条件操作步骤 Windows 系统使用 RDP 登录 Linux 系统使用 RDP 登录 MacOS 系统使用 RDP 登录 操作场景 RDP 是 Remote
  • 解决webassembly pthread 子线程调用主线程js问题

    解决webassembly pthread 子线程调用主线程js问题 背景 xff1a web端项目做了一段时间后 xff0c 我们需求是加载工程是异步的 xff0c 主线程会调用wasm方法 xff0c wasm内部用pthread创建出
  • linux服务器中用U盘或者移动硬盘拷贝数据

    使用fdisk l查看硬盘个数 看到移动硬盘的设备名是 dev sdb 实施步骤 1 xff0c 以root用户登陆 先加载USB模块 modprobe usb storage 用fdisk l 看看U盘的设备 假如U盘是sda1 2 xf
  • win10键盘锁住了怎么解决

    有win10系统用户在使用的时候 xff0c 发现键盘被锁住了 xff0c 导致无法使用 xff0c 经过分析可能是不小心按到了键盘上的锁住键 锁定键盘的快捷键 笔记本电脑 xff1a Fn 43 Numlock 键 第一种方法 xff1a
  • 用Python读取CSV文件的5种方式

    典型的数据集stocks csv xff1a 一个股票的数据集 xff0c 其实就是常见的表格数据 有股票代码 xff0c 价格 xff0c 日期 xff0c 时间 xff0c 价格变动和成交量 这个数据集其实就是一个表格数据 xff0c
  • 多媒体技术选择题

    理论上 USB1 1的最高传输速率为12Mbps USB2 0的最高传输速率为480Mbps 实际上 只要小于理论值的数字就行了 Flash MX 软件 制作网络交互动画的编辑工具 Photoshop软件 是处理图像 图形的工具 电话质量采
  • C++程序设计选择题

    1 1 在哪种派生方式中 xff0c 派生类可以访问基类中的 protected 成员 B A public 和 private B public 和 protected C protected 和 private D 仅 protecte
  • MySQL之 XtraBackup 备份

    MySQL 系列连载之 XtraBackup 备份原理 xff08 1 xff09 导读 在日常的linux运维工作中 xff0c 大数据量备份与还原 xff0c 始终是个难点 关于mysql的备份和恢复 xff0c 比较传统的是用mysq
  • HP服务器硬盘坏了一块,教你如何快速更换

    一 需求描述 客户公司的一台HP DL360p Gen8服务器硬盘坏了 xff0c 为了防止另外一块硬盘也损坏 xff0c 急需去将坏的硬盘进行更换 服务器更换硬盘不同普通电脑更换硬盘 xff0c 需要人工去导数据 xff0c 服务器更换硬
  • win 7 电脑错误676、734、678、651等解决办法

    错误676 734等解决办法 运营商办理的网络接入方式都会提供宽带账号和密码 在使用拨号上网的时候 xff0c 经常会出现各种错误代码导致不能上网 以下是个人理解的处理办法 觉得实用请分享 xff0c 不喜勿喷 xff01 01 错误691
  • 序列检测——有限状态机FSM(附verilog代码)

    题目 xff1a 使用状态机检测 1101 xff0c 串行输入的测试序列为 11101101011010 xff0c 输出信号为valid有效信号 xff0c 检测到时输出高 xff0c 否则为低 xff0c 考虑序列叠加情况 xff0c