对于该题,出了S1,S2,S3对应的状态机外不难写外,还有dfr的设置,其变化阶段在每次时钟的上升沿时判断,当S有变化时判断是水位线往下还是往上,往下走则dfr=1,往上则为0,其它情况不变
module top_module (
input clk,
input reset,
input [3:1] s,
output fr3,
output fr2,
output fr1,
output dfr
);
reg [3:0] fr,next_fr;
always @(*) begin
if(s[3:1]==3'b111) begin
next_fr[3:1]=3'b000;
end
else if(s[3:1]==3'b011)begin
next_fr[3:1]=3'b100;
end
else if(s[3:1]==3'b001) begin
next_fr[3:1]=3'b110;
end
else if(s[3:1]==3'b000) begin
next_fr[3:1]=3'b111;
end
end
always @(*)begin
end
always @(posedge clk) begin
if(reset)begin
fr<=4'b1111;
end
else begin
fr[3:1]<=next_fr[3:1];
if(next_fr[3:1]!=fr[3:1])begin
if(next_fr[3:1]>fr[3:1]) fr[0]<=1'b1;
else fr[0]<=1'b0;
end
end
end
assign {fr1,fr2,fr3,dfr}=fr;
endmodule