Design a Moore FSM
一个巨大的水库服务几个用户。为了保持水位足够高,三个传感器以5英寸的间距水平放置。当水位超过最高水位线S3,输入水流速度应该为0。当水位线小于最低水位线S1,流速应该开到最大,标称流量阀和补充流量阀都应该打开。当水位线在高和低传感器之间时,水流速度被以下两个因素影响:1.现在水位线2.水位线前于最后传感器的改变。每一个水位线有一个标称流速,在下表展示。如果传感器变化表明 上一时刻水位线比当前水位线更低,标称流速应该发生。如果前一水位线高于现在水位线,这一流量应该是由补充流速阀打开导致的。
module top_module (
input clk,
input reset,
input [3:1] s,
output fr3,
output fr2,
output fr1,
output dfr
);
reg [3:1] state, next_state;
reg flag, next_flag;
always @(*) begin
next_state = s;
if(s == state) next_flag <= flag;
else if(s < state || s == 0) next_flag <= 1;
else next_flag <= 0;
end
always @(posedge clk) begin
if(reset) begin
state <= 0; flag <= 1;
end
else begin
state <= next_state; flag <= next_flag;
end
end
assign fr1 = ~state[3];
assign fr2 = ~state[2];
assign fr3 = ~state[1];
assign dfr = (flag == 1);
endmodule