hdlbits 状态机写二进制补码

二进制补码冷知识:从LSB到MSB,第一个1时正式开始补码输出1,之后则开始取反(遇1输出0,遇0输出1)。
默认为负数:用两种状态机来写
在这里插入图片描述

区别:Moore型状态机的输出信号是直接由状态寄存器译码得到,而Mealy型状态机则是以现时的输入信号结合即将变成次态的现态,编码成输出信号。
1.moore状态机,输出只与当前状态有关

module top_module (
    input clk,
    input areset,
    input x,
    output z
); 
parameter s0=0,s1=1,s2=2;
    reg[1:0]state,next;
    always@(*)begin
        case(state)
            s0:next=x?s1:s0;
            s1:next=x?s2:s1;
            s2:next=x?s2:s1;
        endcase
    end
    always@(posedge clk,posedge areset)begin
        if(areset)
            state<=s0;
        else
            state<=next;
    end
    assign z=(state==s1);
endmodule

2.mealy状态机,输出不止与当前状态有关,还与输入有关

module top_module (
    input clk,
    input areset,
    input x,
    output z
); 
    parameter A=0,B=1;
    reg state,next;
    always@(*)begin
        case(state)
            A:next=x?B:A;
            B:next=B;
        endcase
    end
    always@(posedge clk,posedge areset)begin
        if(areset)
            state<=A;
        else
            state<=next;
    end
    assign z=x&&(state==A)||~x&&(state==B);
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值