module top_module (
input clk,
input areset,
input x,
output z
);
// parameter [1:0]idle=2'd0;
parameter [1:0]A=2'd0;
parameter [1:0]B=2'd1;
reg [1:0]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;
endcase
end
always@(*)begin
case(state)
A:z<=x?1:0;
B:z<=x?0:1;
default:z<=0;
endcase
end
//assign z=(state==A & x==2'b0)?0:(state==A & x==2'd1)?1:(state==B & x==2'd1)?0:(state==B & x==2'd0)?1:0;
endmodule
关键在于最后的组合电路,输出z采用了case语句去进行解释说明.相较于assign一行语句更加简单和直观
本文介绍了一个简单的状态机设计案例,使用Verilog HDL语言实现。通过有限状态机FSM的两个状态A和B,展示了如何根据输入信号x的变化来改变输出信号z的状态。此设计采用always块来同步复位和状态转移,并利用case语句清晰地定义了不同状态下的行为。
1177

被折叠的 条评论
为什么被折叠?



