FSM mit 2 States erstellt und getestet

This commit is contained in:
sessleral71711 2022-06-02 09:26:16 +02:00
parent 48610eeb8c
commit 71b0458554
2 changed files with 74 additions and 74 deletions

View File

@ -1,59 +1,48 @@
module Fsm module Fsm
( (
input wire clk, input wire clk,
input wire tim_ready, input wire inAlarmAmpel,
input wire alarm, input wire inDataValid,
output logic adc_en, input wire inTasteAktiv,
output logic tim_en, output logic outAlarm_R,
output logic fram_c_en, output logic outSendData,
output logic led_c_en output logic outTimerEN
); );
real S0 = 0; real IDLE = 0;
real S1 = 1; real ALARM = 1;
real S2 = 2;
real S3 = 3;
real S4 = 4;
real S5 = 5;
real S6 = 6;
logic[2:0] state; logic state;
initial begin initial begin
#0 state <= 0; #0 state <= IDLE;
#0 adc_en <= 0; #0 outAlarm_R <= 0;
#0 tim_en <= 0; #0 outSendData <= 0;
#0 fram_c_en <= 0; #0 outTimerEN <= 0;
#0 led_c_en <= 0;
end end
always @(posedge clk) begin always @(posedge clk) begin
case(state) case(state)
S0: begin IDLE: begin
adc_en <= 1'b1; if(inDataValid) begin
tim_en <= 1'b1; outSendData <= 1;
state <= S1;
end
S1: begin
adc_en <= 1'b0;
tim_en <= 1'b0;
if(tim_ready) begin
fram_c_en <= 1'b1;
led_c_en <= 1'b1;
state <= S2;
end end
else begin else begin
// do nothing outSendData <= 0;
end
if(inAlarmAmpel) begin
outAlarm_R <= 1;
state <= ALARM;
end end
end end
S2: begin ALARM: begin
fram_c_en <= 0'b0; if(inDataValid) begin
led_c_en <= 0'b0; outSendData <= 1;
if(alarm) begin
// taster
end end
else begin else begin
if(tim_ready) begin outSendData <= 0;
end end
state <= S0; if(inTasteAktiv) begin
outAlarm_R <= 0;
state <= IDLE;
end end
end end
default: ; default: ;

View File

@ -3,29 +3,26 @@
module tb_Fsm; module tb_Fsm;
wire clk; wire clk;
logic tim_ready; logic inAlarmAmpel;
logic alarm; logic inDataValid;
wire adc_en; logic inTasteAktiv;
wire tim_en; wire outAlarm_R;
wire fram_c_en; wire outSendData;
wire led_c_en; wire outTimerEN;
Clk_generator clk_gen(.clk(clk)); Clk_generator clk_gen(.clk(clk));
Fsm myfsm Fsm myfsm
( (
.clk(clk), .clk(clk),
.tim_ready(tim_ready), .inAlarmAmpel(inAlarmAmpel),
.alarm(alarm), .inDataValid(inDataValid),
.adc_en(adc_en), .inTasteAktiv(inTasteAktiv),
.tim_en(tim_en), .outAlarm_R(outAlarm_R),
.fram_c_en(fram_c_en), .outSendData(outSendData),
.led_c_en(led_c_en) .outTimerEN(outTimerEN)
); );
always @(posedge clk) begin
#1 tim_ready <= ~tim_ready;
end
initial begin initial begin
$dumpfile("tb_Fsm.vcd"); $dumpfile("tb_Fsm.vcd");
@ -34,8 +31,22 @@ module tb_Fsm;
end end
initial begin initial begin
#0 tim_ready = 1'b0; #0 inAlarmAmpel = 1'b0;
#0 alarm = 1'b0; #0 inDataValid = 1'b0;
#0 inTasteAktiv = 1'b0;
end end
initial begin
#4 inAlarmAmpel = 1'b1;
#5 inAlarmAmpel = 1'b0;
#8 inDataValid = 1'b1;
#9 inDataValid = 1'b0;
#10 inTasteAktiv = 1'b1;
#11 inTasteAktiv = 1'b0;
end
endmodule endmodule