实现功能:检测出串行输入数据4位Data二进制序列0101,当检测到该序列的时候,out=1,否则out=0

(1)给出状态编码,画出状态图

(2)门电路实现

(3)verilog实现

首先规定Q3Q2Q1为刚输入的三位数,接下来要输入的数是A,Z为输入A以后的状态机的输出结果,则可以画出状态转换图如下:

然后根据状态图,我们可以得到状态表:

从而推导出激励方程,根据卡诺图化简得到序列检测的门级检测电路如下:

(3)根据状态图写出verilog代码:

mealy型状态机的输出与其输入以及当前状态有关:

module  xuliejiance(input clk,rst,q
output out);
reg [:]state,nexts;
parameter s1='d0,
s2='d1,s3=3'd2,s4='d3,s5=3'd4,
s6='d5,s7=3'd6,s8='d7; always@(posedge clk ir negedge rst)
begin
if(~rst)
state<='d0;
else
state<=nextstate;
end always@(q,state)
case(state)
:if(q==)
nextstate='d1;
else
nextstate='d0;
:if(q==)
nextstate='d3;
else
nextstate='d2;
:if(q==)
nextstate='d5;
else
nextstate='d4;
:if(q==)
nextstate='d5;
else
nextstate='d6;
:if(q==)
nextstate='d0;
else
nextstate='d1;
:if(q==)
nextstate='d0;
else
nextstate='d3;
:if(q==)
nextstate='d0;
else
nextstate='d4;
:if(q==)
nextstate='d7;
else
nextstate='d6;
default:
nextstate<='d0;
endcase
assign out=(state==3'd2)&&(x==0);
endmodule

moore型状态机的输出只与其当前状态有关:

module xuliejiance(
input clk,rst,q,
output out);
reg [:] state,nextstate;
parameter s0='d0,s1=3'd1,s2='d2,s3=3'd3,s4='d4;
always @(posedge clk or negedge rst)
begin
if(~rst)
state<='d0;
else
state<=nextstate;
end always@(*)
begin
case(state)
s0:
begin
if(q==)
nextstate=s1;
else
nextstate=s0;
end
s1:
begin
if(q==)
nextstate=s2;
else
nextstate=s0;
end
s2:
begin
if(q==)
nextstate=s2;
else
nextstate=s3;
end
s3:
begin
if(q==)
nextstate=s4;
else
nextstate=s0;
end
s4:
begin
if(q==)
nextstate=s0;
else
nextstate=s1;
end end
assign out=(state==s4)?1:0;
endmodule

以上写的都是两段式的状态机的实现,此外我们可以用更加正式的三段式的状态机实现

以下是一个可以用与参考的状态机的东西:

我们以1101序列检测器为例:

1101序列检测器Mealy状态机状态转移图

1101序列检测器Moore状态机状态转移图

我们以Mealy状态机为例

一段式状态机(部分核心代码):

两段式状态机(部分核心代码):

三段式状态机(部分核心代码):

FPGA 状态机-序列检测器verilog的更多相关文章

  1. 基于FPGA的序列检测器10010

    最近在学习状态机,用状态机实现序列检测器10010. 思路如下: 1. S0代表当前数据0,如果检测到0就停在S0,如果检测到1就进入S1. 2. S1代表当前数据1,如果检测到0就进入S2,如果检测 ...

  2. 10010序列检测器的三段式状态机实现(verilog)

    序列检测器是时序数字电路设计中经典的教学范例,夏宇闻的<verilog数字系统设计教程>一书中有这个例子,用verilog设计一个“10010”序列的检测器.看完后我觉得F和G两个状态多余 ...

  3. 每天进步一点点------基础实验_12_有限状态机 :Moore型序列检测器

    /********************************************************************************* * Company : * Eng ...

  4. 每天进步一点点------基础实验_13_有限状态机 :Mealy型序列检测器

    /********************************************************************************* * Company : * Eng ...

  5. fpga 状态机 检测1011序列

    1011 可以使用4个状态:s0,s1,s2,s3. 即:(1)s0有0或1两个状态,当s0位0时,进入s0状态,自身打圈.为1那么进入下个状态s1来检测0. (2)s1有0或1两种情况,s1为1时s ...

  6. i2c状态机方法设计-verilog

    2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...

  7. lattice diamond fpga 状态机的理解

    比如序列检测101,需要三个状态 :so,s1,s2. 思路:(1)s0状态有两种情况0或1,若为0时在自身打圈,是1时进入s1状态. (2)s1状态有两种0或1,若为1自身打圈,因为1可以作为下次检 ...

  8. 【FPGA篇章四】FPGA状态机:三段式以及书写方法

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 状态机是fpga设计中极其重要的一种技巧,状态机通过不同的状态迁移来完成特定的逻辑操作,掌握状态机的写法可以使fpga的开发事半功倍. 状态 ...

  9. FPGA 状态机设计

    数字系统有两大类有限状态机(Finite State Machine,FSM):Moore状态机和Mealy状态机. Moore状态机 其最大特点是输出只由当前状态确定,与输入无关.Moore状态机的 ...

随机推荐

  1. MyBatis:配置解析

    配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configur ...

  2. Java SE 5.0(JDK 1.5)新特性

    目录 自动装箱与拆箱 枚举(常用来设计单例模式) 静态导入static import 可变参数(Varargs) 内省(Introspector) 泛型(Generics) For-Each循环 ja ...

  3. python导出oracle中的表内容,并生成excel文件

    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK; ### 如果oracle表中有中文输出,为防止乱码,执行脚本前,需要先制定字符集: #!/usr/bin/pyth ...

  4. SpringCloud学习之手把手教你用IDEA搭建入门项目【番外篇】(一)

    之前的文章里,我曾经搭建了一个Springcloud项目,但是那个时候我对于SpringCloud架构的很多组件不甚清楚,只是通过查找资料然后动手稀里糊涂的把一个项目成功搭建起来了,其中有很多不合理和 ...

  5. jdk1.6以后 对synchronized锁做了哪些优化

    1.适应自旋锁 自旋锁:为了减少线程状态改变带来的消耗 不停地执行当前线程 2.锁消除: 不可能存在共享数据竞争的锁进行消除 3.锁粗化: 将连续的加锁 精简到只加一次锁 4.轻量级锁: 无竞争条件下 ...

  6. MySQL读写分离如何实现?

    主要说下读写分离, 当我们的数据量很大时,数据库服务器的压力变大,这时候我们需要从架构方面来解决这一问题,在一个网站中读的操作很多,写的操作很少,这时候我们需要配置读写分离,把读操作和写操作分离出来, ...

  7. Java 知识点(一)

    博主对 Java知识点的整理基于 c语言,整理内容为 Java的重点及与 c语言的差异点或编程通要知识点.水平有限,欢迎指正.(参考书籍<Java 核心技术 卷Ⅰ>) Java 的类名:名 ...

  8. Express+MySQL实现图片上传到服务器并把路径保存到数据库中

    demo准备:mysql5.7.20 express4.0 处理图片文件的中间件Multer 先搭建服务器并展示html页面 const express = require("express ...

  9. share团队冲刺5

    团队冲刺第五天 昨天:按钮操作,自定义按钮及各种原件样式 今天:设置按钮按下效果,界面布局 问题:无

  10. js 输出语句document.write()及动态改变元素中内容innerHTML的使用

    操作 HTML 元素 如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) 方法. 请使用 "id" 属性来标 ...