verilog 状态机的分类及编写方式

本节主要谈一谈Verilog的状态机实现模板,并浅析比较。

1 一段式状态机 (单always块结构):

always @(posedge clk or posedge rst) begin
    if(rst)
        FSM <= S0
    else begin
        case(FSM)
        S0:begin
            Out_0;          //输出
            if(condition1)        FSM<= S1;//状态转移
            else if (condition2)  FSM<= S2;//状态转移
            …
            end
        S1:begin
            Out_1;          //输出
            if(condition3)       FSM<= S3;//状态转移
            else if (condition4) FSM <=S4; 
            …
            end
            ……
        default: begin
            Out_0;          //输出
            if(condition0) FSM<= S0;//状态转移
                   end
        endcase
        end
    end

单always块把组合逻辑和时序逻辑放在一个时序always块描述。输出时为寄存器输出,所以无毛刺。但是这种方式会产生多余的触发器(因为把组合逻辑也放在时序逻辑中实现),而且代码难以修改调试。对于那些简单的状态机,一段式方便理解。但是对于复杂状态机,代码难于更改,条件复杂带来电路开销大,工作性能(电路最高频率)亦受限,因此实际中这种结构很少使用。
2 两段式状态机 (双always块结构):

//时序逻辑,这段一般是不变的,描述从现态转移到次态
always @
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值