HDLBits练习汇总-13-时序逻辑设计测试--状态机(一)

news2024/11/18 9:42:02

简单摩尔状态机1(Fsm1)

是一个摩尔状态机,具有两种状态,一种输入,一种输出。实现此状态机。请注意,重置状态为 B。使用异步复位。

Fsm1

模块声明

module top_module(
    input clk,
    input areset,    // Asynchronous reset to state B
    input in,
    output out);

答案

module top_module(
    input clk,
    input areset,    // Asynchronous reset to state B
    input in,
    output out);//  

    parameter A=0, B=1; 
    reg state, next_state;

    always @(*) begin    // This is a combinational always block
        // State transition logic
        case (state)
            B:begin
                if (in=='b0) begin
                    next_state = A;
                end else begin
                    next_state = state;
                end
            end
            A:begin
                if (in=='b0) begin
                    next_state = B;
                end else begin
                    next_state = state;
                end
            end
            default:next_state = A;
        endcase
    end

    always @(posedge clk, posedge areset) begin    // This is a sequential always block
        // State flip-flops with asynchronous reset
            if(areset=='b1)
                state<=B;
            else begin
                state<=next_state;
            end
    end

    // Output logic
    assign out = (state == B);

endmodule

简单摩尔状态机2(Fsm1s)

这是一个摩尔状态机,具有两种状态,一种输入,一种输出。实现此状态机。请注意,重置状态为 B。与简单摩尔状态机1,本例使用同步复位。

Fsm2

模块声明

module top_module(
    input clk,
    input reset,    // synchronous reset to state B
    input in,
    output out);

答案

module top_module(
    input clk,
    input reset,    // synchronous reset to state B
    input in,
    output out);//  

    parameter A=0, B=1; 
    reg state, next_state;

    always @(*) begin    // This is a combinational always block
        // State transition logic
        case (state)
            B:begin
                if (in=='b0) begin
                    next_state = A;
                end else begin
                    next_state = state;
                end
            end
            A:begin
                if (in=='b0) begin
                    next_state = B;
                end else begin
                    next_state = state;
                end
            end
            default:next_state = A;
        endcase
    end

    always @(posedge clk) begin    // This is a sequential always block
        // State flip-flops with synchronous reset
            if(reset=='b1)
                state<=B;
            else begin
                state<=next_state;
            end
    end

    // Output logic
    assign out = (state == B);

endmodule

简单摩尔状态机3(Fsm2)

这是一个摩尔状态机,具有两个状态、两个输入和一个输出。实现此状态机。使用异步复位。

Fsm3

模块声明

module top_module(
    input clk,
    input areset,    // Asynchronous reset to OFF
    input j,
    input k,
    output out);

答案

module top_module(
    input clk,
    input areset,    // Asynchronous reset to OFF
    input j,
    input k,
    output out); //  

    parameter OFF=0, ON=1; 
    reg state, next_state;

    always @(*) begin
        // State transition logic
         if(areset=='b1)
             next_state = OFF;
         else begin
            case (state)
                OFF:begin
                    if (j=='b1) begin
                        next_state = ON;
                    end 
                    else begin
                        next_state = state;
                    end
                end
                ON:begin
                    if (k=='b1) begin
                        next_state = OFF;
                    end 
                    else begin
                        next_state = state;
                    end
                end
            endcase
        end
    end

    always @(posedge clk, posedge areset) begin
        // State flip-flops with asynchronous reset
         if(areset=='b1)
                state<=OFF;
            else begin
                state<=next_state;
            end
    end

    // Output logic
    assign out = (state == ON);

endmodule

简单摩尔状态机4(Fsm2s)

这是一个摩尔状态机,具有两个状态、两个输入和一个输出。实现此状态机。使用同步复位。

fsm4

模块声明

module top_module(
    input clk,
    input areset,    // synchronous reset to OFF
    input j,
    input k,
    output out);

答案

module top_module(
    input clk,
    input reset,    // synchronous reset to OFF
    input j,
    input k,
    output out); //  

    parameter OFF=0, ON=1; 
    reg state, next_state;

    always @(*) begin
        // State transition logic
         if(reset=='b1)
             next_state = OFF;
         else begin
            case (state)
                OFF:begin
                    if (j=='b1) begin
                        next_state = ON;
                    end 
                    else begin
                        next_state = state;
                    end
                end
                ON:begin
                    if (k=='b1) begin
                        next_state = OFF;
                    end 
                    else begin
                        next_state = state;
                    end
                end
            endcase
        end
    end

    always @(posedge clk) begin
        // State flip-flops with synchronous reset
         if(reset=='b1)
                state<=OFF;
            else begin
                state<=next_state;
            end
    end

    // Output logic
    assign out = (state == ON);

endmodule

状态转换(Fsm3comb)

以下是具有一个输入、一个输出和四个状态的 Moore 状态机的状态转换表。使用以下状态编码:A=2’b00、B=2’b01、C=2’b10、D=2’b11。

仅实现此状态机的状态转换逻辑和输出逻辑(组合逻辑部分)。给定当前状态 ,根据状态转换表计算和输出。

Fsm3comb

模块声明

module top_module(
    input in,
    input [1:0] state,
    output [1:0] next_state,
    output out
);

答案

module top_module(
    input in,
    input [1:0] state,
    output [1:0] next_state,
    output out); //

    parameter A=0, B=1, C=2, D=3;

    // State transition logic: next_state = f(state, in)
    always @(*) begin
        case (state)
            A: next_state = (in=='b1)? B:A;
            B: next_state = (in=='b1)? B:C;
            C: next_state = (in=='b1)? D:A;
            D: next_state = (in=='b1)? B:C;
        endcase
    end
    // Output logic:  out = f(state) for a Moore state machine
    assign out = (state==D);
endmodule

简单独热状态转换(Fsm3onehot)

以下是具有一个输入、一个输出和四个状态的 Moore 状态机的状态转换表。使用以下独热状态编码:A=4’b0001、B=4’b0010、C=4’b0100、D=4’b1000。

通过假设独热编码的检查来导出状态转换和输出逻辑方程。仅实现此状态机的状态转换逻辑和输出逻辑(组合逻辑部分)。(测试平台将使用非一个热输入进行测试,以确保您不会尝试做更复杂的事情)。

状态转移

模块声明

module top_module(
    input in,
    input [3:0] state,
    output [3:0] next_state,
    output out); 

答案

module top_module(
    input in,
    input [3:0] state,
    output [3:0] next_state,
    output out); //

    parameter A=0, B=1, C=2, D=3;

    // State transition logic: Derive an equation for each state flip-flop.
    assign next_state[A] = (!in)&&(state[A]||state[C]);
    assign next_state[B] = in&&(state[A]||state[B]||state[D]);
    assign next_state[C] = (!in)&&(state[B]||state[D]);
    assign next_state[D] = in&&state[C];

    // Output logic: 
    assign out = (state[D]=='b1);

endmodule

简单摩尔状态机5(Fsm3)

以下是具有一个输入、一个输出和四个状态的 Moore 状态机的状态转换表。实现此状态机。包括将 FSM 重置为状态 A 的异步复位。

简单摩尔状态机5

模块声明

module top_module(
    input clk,
    input in,
    input areset,
    output out); 

答案

根据状态转移表可以绘制状态转移图,根据状态转移图编写状态机代码。

状态转移图

module top_module(
    input clk,
    input in,
    input areset,
    output out); //

    //parameter define
    parameter N=2,
            A=0,
            B=1,
            C=2,
            D=3;
            
    //初始化寄存器
    reg [N-1:0]state_c;
    reg [N-1:0]state_n;
    //同步时序always模块,格式化描述次态寄存器迁移到现态寄存器
    always @(posedge clk or posedge areset)begin
        if(areset)begin
            state_c <= A;
        end
        else begin
            state_c <= state_n;
        end
    end

    //组合逻辑always模块,描述状态转移条件判断
    always@(*)begin
        case(state_c)
        A:
            if(in==1)
                state_n = B;
            else
                state_n = state_c;
        B:
            if(in==0)
                state_n = C;
            else
                state_n = state_c;
        C:
            if(in==1)
                state_n = D;
            else
                state_n = A;
        D:
            if(in==1)
                state_n = B;
            else
                state_n = C;
        endcase
    end
    // Output logic
    assign out = (state_c==D);
    
endmodule

简单摩尔状态机6(Fsm3s)

以下是具有一个输入、一个输出和四个状态的 Moore 状态机的状态转换表。实现此状态机。包括将 FSM 重置为状态 A 的同步复位,这题与上题 的问题相同,但具有同步复位。

状态转移表

模块声明

module top_module(
    input clk,
    input in,
    input reset,
    output out); 

答案

module top_module(
    input clk,
    input in,
    input reset,
    output out); //

    //parameter define
    parameter N=2,
            A=0,
            B=1,
            C=2,
            D=3;
            
    //初始化寄存器
    reg [N-1:0]state_c;
    reg [N-1:0]state_n;
    //同步时序always模块,格式化描述次态寄存器迁移到现态寄存器
    always @(posedge clk)begin
        if(reset=='b1)begin
            state_c <= A;
        end
        else begin
            state_c <= state_n;
        end
    end

    //组合逻辑always模块,描述状态转移条件判断
    always@(*)begin
        case(state_c)
        A:
            if(in==1)
                state_n = B;
            else
                state_n = state_c;
        B:
            if(in==0)
                state_n = C;
            else
                state_n = state_c;
        C:
            if(in==1)
                state_n = D;
            else
                state_n = A;
        D:
            if(in==1)
                state_n = B;
            else
                state_n = C;
        endcase
    end
    // Output logic
    assign out = (state_c==D);
    
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础数学复习(3)——曲线拟合

文章目录基础概念曲线拟合的流程极小化损失函数线性最小二乘超定方程组的最小二乘解&#xff08;必考&#xff09;例题&#xff08;必考&#xff09;使用法方程计算拟合方程使用最小二乘法求解总结基础概念 曲线拟合的流程 选取函数类选取参数的准则&#xff1a;极小化损失函…

实习-------数据库基础

检索数据 1、如果使用DISTINCT关键字&#xff0c;它必须直接放在列名的前面。不能部分使用DISTINCT&#xff0c;DISTINCT关键字应用于所有列而不仅是前置它的列 例如&#xff1a;SELECT DISTINCT vend_id告诉MySQL只返回不同&#xff08;唯一&#xff09;的vend_id行 2、带一…

(六)devops持续集成开发——jenkins的全局工具配置之node环境安装及配置

前言 本节内容主要是关于jenkins集成node组件&#xff0c;从而实现前端node项目的流水线CICD发布功能。我们需要先安装好前端组件node,并在jenkins中配置好node组件&#xff0c;这样就可以流水线发布一个前端工程了。 正文 安装node组件①上传node安装包 ②解压node安装包 t…

用纯python脚本玩转UU加速器

1. 前言 之前几期内容&#xff0c;我们出过纯py形式的Android自动化脚本。同学们一直让再出一下纯py形式的Windows脚本&#xff0c;今天我们以UU加速器为例&#xff0c;给大家出一个简单的学习demo。 2. UU加速器的自动化demo 今天的练习demo也非常简单&#xff0c;大致内容…

张勇用最严厉的内部信,敲打阿里云,也在提振阿里士气

“「客户第一」的价值观&#xff0c;从来都不是高高挂在公司墙上的标语&#xff0c;而是支撑我们每一天获得成长的基石”。这应该是阿里巴巴董事局主席兼CEO张勇&#xff0c;自2015年来最严厉的一封内部信。信件里&#xff0c;张勇一改往日温情形象&#xff0c;措辞严厉的批评了…

pybind11 | 绑定CGAL几何算法(numpy数据交换)

文章目录一 前言二 numpy数据交换2.1 pybind11对numpy的支持2.2 Numpy VF(py::array_t)与CGAL mesh(Surface Mesh)之间的转换三 绑定CGAL算法示例3.1 示例函数3.2 绑定部分代码3.3 示例完整代码四 编译生成和测试4.1 编译生成pyd文件4.2 Python调用测试五 总结参考和拓展一 前言…

day04 IDEA数组

第一部分 : IDEA开发工具 参见 &#xff1a;IEDA的安装请参考文件夹PPT中的 04_IDEA.ppt 1.数组 1.1 数组介绍 ​ 数组就是存储数据长度固定的容器&#xff0c;存储多个数据的数据类型要一致。 1.2 数组的定义格式 1.2.1 第一种格式 ​ 数据类型[] 数组名 ​ 示例&…

【Linux】进程创建|进程终止|进程等待|进程程序替换

索引1.进程创建fork函数初识&#x1f60a;我们先来看这样的一个程序:写时拷贝fork返回值的三个问题2.进程终止进程退出场景进程常见退出方法进程退出码&#xff1a;3.进程等待进程等待的方法wait方法waitpid方法获取子进程status进程的阻塞等待方式&#xff1a;进程的非阻塞等待…

vue实现导入表格数据【纯前端实现】

一、文章引导 #mermaid-svg-3VJi5rNvrLDOy2MT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3VJi5rNvrLDOy2MT .error-icon{fill:#552222;}#mermaid-svg-3VJi5rNvrLDOy2MT .error-text{fill:#552222;stroke:#55222…

WSL Ubuntu SSH

WSL中的IP wsl中的ubuntu的ip是动态分配的&#xff0c;每次开机都不一样&#xff0c;而且动态分配的ip和windows系统中的ip不在同一网段&#xff0c;但是我发现在windows中能ping通wsl中ubuntu的ip&#xff0c;这说明子系统与虚拟机不同&#xff0c;在查看ubuntu系统ip时&…

第010课 - docker安装mysql

第010课 - docker安装mysql docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ # 这个里面是容器内mysql相关的日志 -v /mydata/mysql/data:/var/lib/mysql \ # 这个里面是msyql数据相关的内容 -v /mydata/mysql/conf:/etc/mysql \ # 这个里面是容…

数据结构进阶 二叉树OJ题

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍几道二叉树的oj题 二叉树OJ题题目一 根据二叉树创建字符串题目二 二叉树的层序遍历题目三 二叉树的最近公共祖先题目一 根据…

华为机试 HJ35 蛇形矩阵

华为机试 HJ35 蛇形矩阵[HJ35 蛇形矩阵](https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e)方法一&#xff1a;顺序填表方法2&#xff1a;数学规律HJ35 蛇形矩阵 描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如&#xff0c;当输入5…

【数据结构】链表基础知识讲解

文章目录链表链表的结构使用链表的优点模拟实现链表链表 在之前的学习中我们讲解了顺序表ArrayList&#xff0c;Java模拟实现顺序表&#xff0c;如果需要大家可以去看一看&#xff0c;顺序表底层的实现逻辑其实就是数组&#xff0c;在物理存储结构和逻辑上都是连续的&#xff…

Eth 03 -以太网驱动Eth的配置

以太网的配置,下面这张图描述了以太网的配置参数: EthCtrlConfig:单个控制器的配置EthCtrlEnableMii :启用/禁用用于收发器访问的媒体独立接口 (MII)EthCtrlEnableRxInterrupt:启用/禁用接收中断EthCtrlEnableTxInterrupt:启用/禁用传输中断EthCtrlIdx:指定已配置控制…

【BUUCTF】MISC(第一页wp)

文章目录签到金三胖二维码你竟然赶我走大白N种方法解决乌镇峰会种图基础破解wireshark文件中的秘密图片exifLSBLSB隐写&#xff08;最低有效位隐写&#xff09;&#xff1a;zip伪加密ZIP 文件由**三个部分**组成&#xff1a;**压缩源文件数据区**&#xff1a;**压缩源文件目录区…

FS4412环境搭建

目录 一、开发板硬件资源介绍 二、交叉开发环境 2.1安装交叉编译工具链 2.2配置全局变量​编辑 2.3测试​编辑 2.4终端 2.5安装串口驱动 2.6上电测试 三、地址映射表 一、开发板硬件资源介绍 中间红色的是samsung的主控&#xff0c;四个粉色的256M的内存条&#xff0…

STM32F4SysTick记录

滴哒主要用于延时和实时系统 模板为原子串口实验源码&#xff0c;入口为24行 120行为滴哒定时器的CTRL寄存器位时钟源设置 这个参数的必要性是用于溢出时间的计算参数之一 可以设置为HCLK或HCLK的8分频 延时函数理解 设置LOAD是设置重装载值 设置VAL清空计数值以及标志位 …

强大的ANTLR4(2)

每次在命令行里输入文本有点麻烦&#xff0c;可以将hello slb保存于hello.txt文本文件中&#xff0c;然后运行命令&#xff1a; antlr4-parse Hello.g4 r -tokens hello.txt出现如下内容&#xff1a; [0,0:4hello,<hello>,1:0] [1,6:8slb,<ID>,1:6] [2,9:8<EO…

JDBC开荒

docker 创建MySQL 一、简介 Java DataBase Connectivity &#xff0c;是Java程序访问数据库的标准接口 Java访问DB的时候&#xff0c;并不是直接通过TCP连接的&#xff0c;而是通过JDBC接口&#xff0c;而JDBC接口又是通过JDBC驱动来访问的 JDBC是Java标准库自带的&#xff0…