这一模块中前面的相对简单,所以没有进行记录。主要注意同步复位还是异步复位即可,具体关于同步复位和异步复位的比较请见之前的博客链接: 同步复位异步复位的比较.
Fsm3
题目:实现以下状态的转换。注意异步复位。。。
module top_module(
input clk,
input in,
input areset,
output out); //
reg [1:0] state,next_state;
parameter A = 2'b00;
parameter B = 2'b01;
parameter C = 2'b10;
parameter D = 2'b11;
// State transition logic
always@(posedge clk ,posedge areset)begin
if(areset)
state <= A;
else
state <= next_state;
end
// State flip-flops with asynchronous reset
always@(*)begin
case(state)
A : if(in)
next_state = B;
else
next_state = A;
B : if(in == 1'b0)
next_state = C;
else
next_state = B;
C : if(in)
next_state = D;
else
next_state = A;
D : if(in)
next_state = B;
else
next_state = C;
endcase
end
// Output logic
assign out = (state == D) ;
endmodule
Design a Moore FSM (储水池控制)
题目:
为了保持水面的高度,三分传感器以5英寸的间隔放置。当水位超出最高的传感器S3时,输入的水流速应该为0。当水位低于最低的传感器S1时,水流速应该为最大,即正常的水流控制器和附加的水流控制器都应该打开。当水位在最上和最下传感器之间时,水流速受两个因素影响:水位和上一个传感器之前的水位变化。每一个水位有一个正常的水流速,如表中所示。如果传感器变化表明先前的水位低于当前的水位,那么正常的水流速控制器应该被打开。如果先前的水位高于当前的水位,那么附加的水流控制器应该也被打开来增加水流速。它是由△FR控制的。设计moore状态机来控制水流速。S1,S2,S3是FSM的输入,FR1,FR2,FR3,△FR是FSM的输出。
module top_module (
input clk,
input reset,
input [3:1] s,
output fr3,
output fr2,
output fr1,
output dfr
);
reg [1:0] state,next_state;
parameter Below_S1 = 2'b00;
parameter S1_S2 = 2'b01;
parameter S2_S3 = 2'b10;
parameter Above_S3 = 2'b11;
always@(posedge clk)begin
if(reset)
state <= Below_S1;
else
state <= next_state;
end
always@(*)begin
case(state)
Below_S1 : if(s == 3'd1)
next_state = S1_S2;
else
next_state = Below_S1;
S1_S2 : if(s == 3'd3)
next_state = S2_S3;
else if(s == 3'd0)
next_state = Below_S1;
else
next_state = S1_S2