• 1、验证1101序列(Moore)


    题目要求:
    用Moore型状态机验证1101序列。

    题目描述:
    用使用状态机验证1101序列,注意:允许重复子序列。如图
    在这里插入图片描述
    端口描述:

    module moore_1101(
    
    input clk,//时钟信号
    
    input clr,//reset复位信号,高电平有效
    
    input din,//输入序列
    
    output dout //输出结果
    
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    方法一:状态机的通用解法——基础状态转移方程

    module moore_1101(
    	input clk,//时钟信号
    	input clr,//reset复位信号,高电平有效
    	input din,//输入序列
    	output reg dout //输出结果
    );
    
    	reg [2 : 0] curr, next;//状态保存
        parameter temp = 3'd0, s1 = 3'd1, s2 = 3'd2, s3 = 3'd3, s4 = 3'd4;
        
        always @ (posedge clk) begin
            if (clr) curr = temp;
            else curr = next;
        end//这一段需要用阻塞赋值
        
        always @ (*) begin
            case(curr)
                temp: next <= din ? s1 : temp;//闲置状态
                s1: next <= din ? s2 : temp;//已有一个1的状态,再得到一个1进s2,得到0则进闲置
                s2: next <= din ? s2 : s3;//已有11的状态,再得到1进s2,得到0进s3
                s3: next <= din ? s4 : temp;//已有110的状态,再得到一个1进s4,得到0进闲置
                s4: next <= din ? s2 : temp;//已经1101,再得到一个1进s2,得到0进闲置
            endcase
        end//状态转移
                
        always @ (posedge clk) begin
            if (clr) dout <= 0;
            else dout <= ((curr == s4) ? 1 : 0);
        end//这一段可以用阻塞赋值也可以用非阻塞赋值
        
    endmodule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    方法二: D触发器灵活得出状态转移方程

    假设需对 n n n位序列进行检测,则最多需要 n n n D D D触发器(很好理解,最多的情况就是储存全部信息,每位一个 D D D触发器)
    以四位为例,于是有D触发器 D 0 , D 1 , D 2 , D 3 D_0,D_1,D_2,D_3 D0,D1,D2,D3,现态为 q 0 , q 1 , q 2 , q 3 q_0,q_1,q_2,q_3 q0,q1,q2,q3
    显然状态转移方程为
    D 0 = c i n D_0= \rm cin D0=cin
    D 1 = D 0 D_1=D_0 D1=D0
    D 2 = D 1 D_2=D_1 D2=D1
    D 3 = D 2 D_3=D_2 D3=D2
    注意:如果状态转移方程不显然,则需严格按照设计状态-状态化简-状态转移真值表-状态转移方程过程进行来得出转移方程,相关内容在数电-同步时序电路。

    module moore_1101(
    	input clk,//时钟信号
    	input clr,//reset复位信号,高电平有效
    	input din,//输入序列
    	output dout //输出结果
    );
    	reg q3 = 0, q2 = 0, q1 = 0, q0 = 0;
        
        always @ (posedge clk) begin
            if (!clr) begin
                q0 <= din;
                q1 <= q0;
                q2 <= q1;
                q3 <= q2;
            end
            
            else begin
                q0 <= 0;
                q1 <= 0;
                q2 <= 0;
                q3 <= 0;
            end
        end
        assign dout = (({q3, q2, q1, q0} == 4'b1101) ? 1 : 0); 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    方法三:
    在这里插入图片描述

  • 相关阅读:
    Unity IL2CPP 游戏分析入门
    Vue 3 组合式编程:革新前端开发的新时代
    致远OA wpsAssistServlet 任意文件上传漏洞
    虚幻引擎:如何才能对音波(声音资产)进行逻辑设置和操作
    TCP发送窗口、接收窗口以及其工作原理
    【前端缓存】localStorage是同步还是异步的?为什么?
    大数据课程K18——Spark的ALS算法与显式矩阵分解
    Java面试题以及答案--SpringBoot
    Adult数据集预处理
    刘馨蔓:“她是行走的发光体”|OneFlow U
  • 原文地址:https://blog.csdn.net/pangyou3s/article/details/133848861