【个人向4】Verilog基础手撕:状态机三段式写法,Tb与仿真

文章简介

个人学习总结4 - Verilog最基础部分
个人向!!!
状态机是Verilog常用的内容,某些面试也会涉及到手撕FSM
参考:数字逻辑基础与Verilog设计(英文原书第3版)McGrawHill Education
参考:机械工业出版社中文翻译版 - 国外电子与电气工程技术丛书
参考:清华大学出版社 - 数字IC设计入门
此文章包括Moore FSM和Mealy FSM两种状态机的编写,Testbench与仿真
个人NTU在读,欢迎指正


基本运算符、基本语法、基本模块编写与仿真可见之前的文章 :)


目录

文章简介

目录

1. Moore型状态机

Verilog代码

Testbench代码

仿真结果

2. Mealy型状态机

Verilog代码

Testbench代码

仿真结果

!状态机写法完全掌握


1. Moore型状态机

- Moore型:每个状态自带输出,即输出只和状态有关,外部的输入只能控制状态转换。

Verilog代码

module test1
(
    input clk, rst_n, W, A,
    output reg sensor, motor,
    output reg [1:0] state
);
    //各状态通常定义为本地参数,采用格雷码
    localparam IDLE = 2'b00, DETECT = 2'b01, EXECUTION = 2'b11;
    //定义当前态和下一态
    reg [1:0] next_state;
    //状态机本身>>>
    //第 1 段,时序逻辑转换状态-----------------
    always @(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            state <= IDLE;
        else
            state <= next_state;
    end
    //第 2 段,状态转换条件---------------------
    always @(*)
    begin
        case(state)
            IDLE:
            begin
                if(W == 0)
                    next_state = IDLE;
                else if(A == 1)
                    next_state = DETECT;
                else
                    next_state = IDLE;
            end
            DETECT:
            begin
                if(W == 0)
                    next_state = IDLE;
                else if(A == 1)
                    next_state = EXECUTION;
                else
                    next_state = DETECT;
            end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值