Verilog HDL 有限状态机的设计

Verilog HDL 有限状态机的设计

                                           【转自教科书】

有限状态机根据输出逻辑的不同可以分为Mealy状态机和Moore状态机,两者设计方法基本一致,唯一不同的是输出结果是否取决于输入信号。
Mealy 状态机:输出结果不仅取决于当前状态,还与输入信号有关;
Moore 状态机:输出结果只取决于系统当前状态。


有限状态机可分为三个主要变量:现状态、次状态和输出结果。

有限状态机的设计,根据使用的Always过程块的不同而分为:
【一段式】上述三个状态都放在一个always过程快中描述。而这种方法包含所有的逻辑设计,使得整体设计变得复杂增加设计难度。

【两段式】把现状态用一个always过程块描述,次状态和输出结果用另一个always过程块描述。

【三段式】分别把三个变量用三个always过程块分开描述。

现对下图进行两段式和三段式状态机设计:

状态机的状态转换图

两段式设计:

module state_ji(clk,rst,q,a,b,c,d,state,nextstate);
    input clk,rst,a,b,c,d;
    output q,state,nextstate;
    reg[2:0] q;
    reg[1:0] state,nextstate;
    parameter s0=2'b00, s1=2'b01, s2=2'b10, s3=2'b11;

    always@(posedge clk)
        begin
            if(rst) state <= s0;
            else    state <= nextstate;
        end
/*********************************************/     
//两段式状态机:把现状态写进一个always模块,
//          次状态和输出值写进一个always模块     
    always@(state or a or b or c or d)
        begin
            case(state )
                s0:begin
                    q <= 3'b001;
                        if(a)   nextstate <= s1;
                        else    nextstate <= s0;
                    end
                s1:begin
                    q <= 3'b010;
                        if(b)   nextstate <= s2;
                        else    nextstate <= s0;
                    end
                s2:begin
                    q <= 3'b100;
                        if(c)   nextstate <= s3;
                        else    nextstate <= s0;
                    end
                s3:begin
                    q <= 3'b111;
                        if(d)   nextstate <= s0;
                        else    nextstate <= s2;
                    end
            endcase
        end
endmodule

三段式设计:

module state_ji(clk,rst,q,a,b,c,d,state,nextstate);
    input clk,rst,a,b,c,d;
    output q,state,nextstate;
    reg[2:0] q;
    reg[1:0] state,nextstate;
    parameter s0=2'b00, s1=2'b01, s2=2'b10, s3=2'b11;

//三段式状态机:把现状态、次状态、输出值分别写进三个always模块
    always@(posedge clk)
        begin
            if(rst) state <= s0;
            else    state <= nextstate;
        end

    always@(state or a or b or c or d)
        begin
            case(state )
                s0:begin
                        if(a)   nextstate <= s1;
                        else    nextstate <= s0;
                    end
                s1:begin
                        if(b)   nextstate <= s2;
                        else    nextstate <= s0;
                    end
                s2:begin
                        if(c)   nextstate <= s3;
                        else    nextstate <= s0;
                    end
                s3:begin
                        if(d)   nextstate <= s0;
                        else    nextstate <= s2;
                    end
            endcase
        end

    always@(state)
        begin
            case(state)
                s0: q = 3'b001;
                s1: q = 3'b010;
                s2: q = 3'b100;
                s3: q = 3'b111;
            endcase
        end
******************************************************************/
endmodule
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VerilogHDL有限状态是通过组合逻辑和时序逻辑的混合方式来实现的,其中组合逻辑用于判断当前的状态和输入信号,并输出下一个状态的控制信号;时序逻辑用于同步控制信号和状态寄存器的状态,确保状态在时钟上升沿时进行状态转移。 在VerilogHDL中,有限状态通常由状态寄存器、组合逻辑和控制信号三部分组成。状态寄存器用于存储当前状态,控制信号用于控制状态转移,组合逻辑用于根据当前状态和输入信号生成控制信号。 VerilogHDL有限状态的实现步骤如下: 1. 定义状态寄存器和状态编码:定义状态寄存器用于存储当前状态,每个状态都有一个唯一的状态编码。 2. 定义输入信号和输出信号:定义输入信号和输出信号,这些信号将用于控制状态转移和生成输出数据。 3. 定义状态转移条件和控制信号:定义状态转移条件和控制信号,这些条件和信号将用于确定下一个状态和控制输出数据。 4. 实现组合逻辑:根据当前状态和输入信号,实现组合逻辑来生成控制信号。 5. 实现时序逻辑:使用时钟信号同步控制信号和状态寄存器的状态,确保状态在时钟上升沿时进行状态转移。 6. 测试和调试:对实现的有限状态进行测试和调试,确保它能够正确地实现所需的功能。 总的来说,VerilogHDL有限状态是一种非常强大的设计工具,能够帮助设计者实现高效、可靠的控制电路。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值