一、介绍
状态机分类
摩尔(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