明德扬状态机方法实现1101序列检测VHDL代码

文章介绍了状态机的基本概念,包括它是如何描述系统行为的,以及有限状态机的Moore机和Mealy机的区别。接着,通过明德扬四段式方法,展示了如何使用Verilog实现1101序列检测的状态机设计,包括状态转移和条件判断等关键部分。
摘要由CSDN通过智能技术生成

1、状态机的概述

        状态机是一种数学模型,用于描述系统的行为。它由一组状态、输入和输出以及转换规则组成。状态机可以分为有限状态机和无限状态机两种类型。有限状态机在任意时刻只能处于有限的状态集合中,而无限状态机可以处于无限个状态中。

        在有限状态机中,状态之间的转换是根据输入和转移规则进行的。输入可以来自外部环境或内部逻辑条件,转移规则指定了在哪些输入下从一个状态转移到另一个状态。每个状态都可以关联一个输出,表示在该状态下系统的行为。

        状态机可以用于描述各种系统,如计算机程序、自动控制系统、通信协议等。在计算机程序中,状态机可以用于解决一些复杂的问题,如语法分析、编译器设计、网络协议实现等。

2、有限状态机可以分为以下几种类型:

  1. Moore机:在Moore机中,每个状态都有一个特定的输出,输出只与当前状态有关,与输入无关。

  2. Mealy机:与Moore机不同,Mealy机的输出不仅取决于当前状态,也取决于输入。因此,Mealy机输出的变化更加灵活。

3、采用明德扬四段式实现1101序列检测

.第一段:

与Verilog代码一样采用时序逻辑表示state_n与stata_c的关系

  --one
   PROCESS (clk, rst_n)
   BEGIN
      IF (rst_n = '0') THEN
         state_c <= IDLE;
      ELSIF (clk'EVENT AND clk = '1') THEN
         state_c <= state_n;
      END IF;
   END PROCESS;

第二段:状态转移段

 PROCESS (state_c,idle2s1_start,s12idle_start,s12s2_start,s22s3_start,s32idle_start)
   BEGIN
      CASE state_c IS
         WHEN IDLE =>
            IF (idle2s1_start = '1') THEN
               state_n <= S1;
            ELSE
               state_n <= state_c;
            END IF;
         WHEN S1 =>
            IF (s12s2_start = '1') THEN
               state_n <= S2;
            ELSIF (s12idle_start = '1') THEN
               state_n <= IDLE;
            ELSE
               state_n <= state_c;
            END IF;
         WHEN S2 =>
            IF (s22s3_start = '1') THEN
               state_n <= S3;
            ELSE
               state_n <= state_c;
            END IF;
         WHEN S3=>
            IF (s32idle_start = '1') THEN
               state_n <= IDLE;
            ELSE
               state_n <= state_c;
            END IF;
         WHEN OTHERS =>
            state_n <= IDLE;
      END CASE;
   END PROCESS;

第三段:状态转移条件

idle2s1_start <= '1' WHEN state_c = IDLE AND din = '1' ELSE '0';
s12idle_start <= '1' WHEN state_c = S1 AND din = '0' ELSE '0';
s12s2_start <= '1' WHEN state_c = S1 AND din = '1' ELSE '0';
s22s3_start  <= '1' WHEN state_c = S2 AND din = '0' ELSE '0';
s32idle_start <= '1' WHEN state_c =S3 ELSE '0';

第四段:可以用时序逻辑或者组合逻辑表示输出

 --output
   PROCESS (clk, rst_n)
   BEGIN
      IF (rst_n = '0') THEN
         dout <= '0';
      ELSIF (clk'EVENT AND clk = '1') THEN
         IF (state_c = S3 AND din = '1') THEN
            dout <= '1';
         ELSE
            dout <= '0';
         END IF;
      END IF;
   END PROCESS;

Quartus编译后查看状态转移图:

 参考:明德扬四段状态机

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA一只小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值