1.Exams/ece241 2013 q8
实现一个Mealy类型的有限状态机,该状态机识别名为x的输入信号上的序列“101”。您的FSM应具有一个输出信号z,当检测到“101”序列时,该信号被断言为逻辑-1。您的FSM还应具有活动低异步重置。状态机中只能有3个状态。FSM应该识别重叠序列。
根据要求可画得时序图如下所示:
module top_module (
input clk,
input aresetn, // Asynchronous active-low reset
input x,
output z );
parameter A=2'd0,B=2'd1,C=2'd2;
reg [1:0]cs,ns;
always@(posedge clk,negedge aresetn)begin
if(aresetn==1'b0)
cs<=A;
else
cs<=ns;
end
always@(*)begin
case(cs)
A:ns=x?B:A;
B:ns=x?B:C;
C:ns=x?B:A;
default:ns=A;
endcase
end
assign z=(cs==C)&&(x==1);
endmodule
2.Exams/ece241 2014 q5a
【先参照第3题再回来写本题】
您将设计一个单输入单输出串行2的补码器摩尔状态机。输入(x)是从数字的最低有效位开始的一系列位(每个时钟周期一个),输出(Z)是输入的2的补码。机器将接受任意长度的输入数字。该电路需要异步复位。当复位被释放时转换开始,当复位被断言时转换停止。
根据要求可画得时序图如下所示:
module top_module (
input clk,
input areset,
input x,
output z
);
parameter A=3'd0,B=3'd1,C=3'd2,D=3'd3;
reg [2:0]state,next_state;
always@(posedge clk,posedge areset)begin
if(areset)begin
state<=A;
end
else begin
state<=next_state;
end
end
always@(*)begin
case(state)
A:next_state=x?B:A;
B:next_state=x?D:C;
C:next_state=x?D:C;
D:next_state=x?D:C;
default:next_state=A;
endcase
end
assign z=(state==B)||(state==C);
endmodule
3.Exams/ece241 2014 q5b
解题关键:【补码定义】负数的补码等于他的原码自低位向高位,尾数的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。
比如10010100,从右往左(低到高位)找到第一个1,此刻保持这第一个1与右边的0不变,1左边的数进行取反。变成[01101 100]
本题中A代表对[从右往左对1]的寻找,找到了输入1则进入B状态。B状态为对那个1左边的数取反。
module top_module (
input clk,
input areset,
input x,
output z
);
parameter A=1'b0,B=1'b1;
reg state,next_state;
always@(posedge clk,posedge areset)begin
if(areset)
state<=A;
else
state<=next_state;
end
always@(*)begin
case(state)
A:next_state=x?B:A;
B:next_state=B;
default:next_state=A;
endcase
end
assign z=(state==A&&x==1'b1)||(state==B&&x==1'b0);
endmodule