• 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

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

  • 相关阅读:
    信号弹图像立体匹配算法研究
    shader 开发实战
    从0-1搭建一个web项目vue3+vite+ts+element-plus(脚手架分析)
    Linux网络之传输层协议tcp/udp
    上半年住户存款增加10.33万亿元,平均每天约571亿存款涌向银行
    【JS面试题】面试官:“[1,2,3].map(parseInt)“ 输出结果是什么?答上来就算你通过面试
    【flutter】架构之商城main入口
    【Vivado那些事儿】使用 Python 提取 ILA 数据
    GPDB-内核原理-如何指定发送数据目的地
    三网话费接口API文档
  • 原文地址:https://blog.csdn.net/pangyou3s/article/details/133848861