Compare commits

..

5 Commits

3 changed files with 108 additions and 0 deletions

4
fsm/Clk_generator.sv Normal file
View File

@ -0,0 +1,4 @@
module Clk_generator #(CLK_PERIOD = 2) (output logic clk);
initial #0 clk <= 0;
always #(CLK_PERIOD/2) clk=~clk;
endmodule

52
fsm/Fsm.sv Normal file
View File

@ -0,0 +1,52 @@
module Fsm
(
input wire clk,
input wire inAlarmAmpel,
input wire inDataValid,
input wire inTasteAktiv,
output logic outAlarm_R,
output logic outSendData,
output logic outTimerEN
);
real IDLE = 0;
real ALARM = 1;
logic state;
initial begin
#0 state <= IDLE;
#0 outAlarm_R <= 0;
#0 outSendData <= 0;
#0 outTimerEN <= 0;
end
always @(posedge clk) begin
case(state)
IDLE: begin
if(inDataValid) begin
outSendData <= 1;
end
else begin
outSendData <= 0;
end
if(inAlarmAmpel) begin
outAlarm_R <= 1;
state <= ALARM;
end
end
ALARM: begin
if(inDataValid) begin
outSendData <= 1;
end
else begin
outSendData <= 0;
end
if(inTasteAktiv) begin
outAlarm_R <= 0;
state <= IDLE;
end
end
default: ;
endcase
end
endmodule

52
fsm/tb_Fsm.sv Normal file
View File

@ -0,0 +1,52 @@
`include "Clk_generator.sv"
`include "Fsm.sv"
module tb_Fsm;
wire clk;
logic inAlarmAmpel;
logic inDataValid;
logic inTasteAktiv;
wire outAlarm_R;
wire outSendData;
wire outTimerEN;
Clk_generator clk_gen(.clk(clk));
Fsm myfsm
(
.clk(clk),
.inAlarmAmpel(inAlarmAmpel),
.inDataValid(inDataValid),
.inTasteAktiv(inTasteAktiv),
.outAlarm_R(outAlarm_R),
.outSendData(outSendData),
.outTimerEN(outTimerEN)
);
initial begin
$dumpfile("tb_Fsm.vcd");
$dumpvars(0, tb_Fsm);
#50 $finish;
end
initial begin
#0 inAlarmAmpel = 1'b0;
#0 inDataValid = 1'b0;
#0 inTasteAktiv = 1'b0;
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