二进制补码冷知识:从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