Verilog | 负数补码与状态机

文章介绍了摩尔和米利状态机的概念,并分别用这两种状态机实现了负数的2的补码计算。摩尔状态机中,输出取决于当前状态,而米利状态机的输出则与当前状态和输入有关。文中给出了用Verilog编写的两个状态机模块示例,用于处理任意长度的输入数字,进行2的补码运算。
摘要由CSDN通过智能技术生成

一、介绍

状态机分类

摩尔(Moore)状态机:当前输出只与当前状态有关

米利(Mealy)状态机:当前输出不仅与当前状态有关,还与当前输入有关

补码

使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

正数的补码是其本身,负数的补码是原码取反加一(符号位不改变)

二、负数补码实现

思路:负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。

摩尔状态机实现

设计一个单输入单输出串行2的补码器摩尔状态机。输入(x)是从数字的最低有效位开始的一系列位(每个时钟周期一个),输出(Z)是输入的2的补码。机器将接受任意长度的输入数字。该电路需要异步复位。当复位被释放时转换开始,当复位被断言时转换停止。

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

米利状态机实现

在这里插入图片描述


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值