没有采用状态机写法 直接按照逻辑表达式输出
构建一个两位饱和计数器。
当 train_valid = 1 且 train_taken = 1 时,计数器递增(最多 3)。当 train_valid = 1 且 train_taken = 0 时,它会递减(降至最小值 0)。不训练 (train_valid = 0) 时,计数器保持其值不变。
AreSet 是一种异步复位,可将计数器重置为弱未采用 (2'B01)。输出状态 [1:0] 是两位计数器值。
module top_module(
input clk,
input areset,
input train_valid,
input train_taken,
output [1:0] state
);
always@(posedge clk,posedge areset)
begin
if(areset)
state<=2'b01;
else
begin
if( train_valid)
begin
if(train_taken)
begin
if(state<3)
state<=state+1'b1;
else
state<=2'b11;
end
else
begin
if(state>0)
state<=state-1'b1;
else
state<=0;
end
end
else
state<=state;
end
end
endmodule