This commit is contained in:
2024-02-27 11:54:17 +01:00
4 changed files with 272 additions and 11 deletions

View File

@@ -20,4 +20,5 @@ vsim -c -t ps tb_ampel
#get wave
do wave.do
run 1500 us
run 1500 us
#run 400 us

View File

@@ -3,17 +3,52 @@ quietly WaveActivateNextPane {} 0
add wave -noupdate /tb_ampel/CLK
add wave -noupdate /tb_ampel/RSTn
add wave -noupdate /tb_ampel/SW
add wave -noupdate -expand -subitemconfig {{/tb_ampel/HAUPTSTR_LINKS[2]} {-color Red} {/tb_ampel/HAUPTSTR_LINKS[1]} {-color Gold}} /tb_ampel/HAUPTSTR_LINKS
add wave -noupdate -expand -subitemconfig {{/tb_ampel/NEBENSTR_LINKS[2]} {-color Red} {/tb_ampel/NEBENSTR_LINKS[1]} {-color Gold}} /tb_ampel/NEBENSTR_LINKS
add wave -noupdate -expand -subitemconfig {{/tb_ampel/FUSSGAENGER_LINKS[1]} {-color Red}} /tb_ampel/FUSSGAENGER_LINKS
add wave -noupdate -expand -subitemconfig {{/tb_ampel/HAUPTSTR_RECHTS[2]} {-color Red} {/tb_ampel/HAUPTSTR_RECHTS[1]} {-color Gold}} /tb_ampel/HAUPTSTR_RECHTS
add wave -noupdate -expand -subitemconfig {{/tb_ampel/NEBENSTR_RECHTS[2]} {-color Red} {/tb_ampel/NEBENSTR_RECHTS[1]} {-color Gold}} /tb_ampel/NEBENSTR_RECHTS
add wave -noupdate -expand -subitemconfig {{/tb_ampel/FUSSGAENGER_RECHTS[1]} {-color Red}} /tb_ampel/FUSSGAENGER_RECHTS
add wave -noupdate -subitemconfig {{/tb_ampel/HAUPTSTR_LINKS[2]} {-color Red -height 15} {/tb_ampel/HAUPTSTR_LINKS[1]} {-color Gold -height 15}} /tb_ampel/HAUPTSTR_LINKS
add wave -noupdate -subitemconfig {{/tb_ampel/NEBENSTR_LINKS[2]} {-color Red -height 15} {/tb_ampel/NEBENSTR_LINKS[1]} {-color Gold -height 15}} /tb_ampel/NEBENSTR_LINKS
add wave -noupdate -subitemconfig {{/tb_ampel/FUSSGAENGER_LINKS[1]} {-color Red -height 15}} /tb_ampel/FUSSGAENGER_LINKS
add wave -noupdate -subitemconfig {{/tb_ampel/HAUPTSTR_RECHTS[2]} {-color Red -height 15} {/tb_ampel/HAUPTSTR_RECHTS[1]} {-color Gold -height 15}} /tb_ampel/HAUPTSTR_RECHTS
add wave -noupdate -subitemconfig {{/tb_ampel/NEBENSTR_RECHTS[2]} {-color Red -height 15} {/tb_ampel/NEBENSTR_RECHTS[1]} {-color Gold -height 15}} /tb_ampel/NEBENSTR_RECHTS
add wave -noupdate -subitemconfig {{/tb_ampel/FUSSGAENGER_RECHTS[1]} {-color Red -height 15}} /tb_ampel/FUSSGAENGER_RECHTS
add wave -noupdate /tb_ampel/ampel/CLOCK_50
add wave -noupdate /tb_ampel/ampel/KEY
add wave -noupdate /tb_ampel/ampel/LEDH_L
add wave -noupdate /tb_ampel/ampel/LEDH_R
add wave -noupdate /tb_ampel/ampel/LEDN_L
add wave -noupdate /tb_ampel/ampel/LEDN_R
add wave -noupdate /tb_ampel/ampel/LEDF_L
add wave -noupdate /tb_ampel/ampel/LEDF_R
add wave -noupdate /tb_ampel/ampel/DBG
add wave -noupdate /tb_ampel/ampel/CLKDIV1
add wave -noupdate /tb_ampel/ampel/CLKDIV2
add wave -noupdate /tb_ampel/ampel/CLKDIV3
add wave -noupdate /tb_ampel/ampel/MELDER
add wave -noupdate /tb_ampel/ampel/MELDER_Q
add wave -noupdate /tb_ampel/ampel/MELDER_QQ
add wave -noupdate /tb_ampel/ampel/MELDER_ACK
add wave -noupdate /tb_ampel/ampel/CLOCK_ENABLE
add wave -noupdate /tb_ampel/ampel/START_WARTEN
add wave -noupdate /tb_ampel/ampel/STATE
add wave -noupdate /tb_ampel/ampel/HAUPTSTR
add wave -noupdate /tb_ampel/ampel/NEBENSTR
add wave -noupdate /tb_ampel/ampel/FUSSGAENGER
add wave -noupdate /tb_ampel/ampel/WARTEZAEHLER
add wave -noupdate /tb_ampel/ampel/WARTEWERT
add wave -noupdate /tb_ampel/ampel/en_div_1
add wave -noupdate /tb_ampel/ampel/en_div_2
add wave -noupdate /tb_ampel/ampel/en_div_3
add wave -noupdate /tb_ampel/ampel/q_div_1
add wave -noupdate /tb_ampel/ampel/q_div_2
add wave -noupdate /tb_ampel/ampel/q_div_3
add wave -noupdate /tb_ampel/ampel/tc_div_1
add wave -noupdate /tb_ampel/ampel/tc_div_2
add wave -noupdate /tb_ampel/ampel/tc_div_3
add wave -noupdate /tb_ampel/ampel/RESET
add wave -noupdate /tb_ampel/ampel/WARTEN_FERTIG
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {{Cursor 1} {833117378 ps} 0}
WaveRestoreCursors {{Cursor 1} {157723025 ps} 0}
quietly wave cursor active 1
configure wave -namecolwidth 150
configure wave -valuecolwidth 100
configure wave -valuecolwidth 39
configure wave -justifyvalue left
configure wave -signalnamewidth 0
configure wave -snapdistance 10
@@ -26,4 +61,4 @@ configure wave -griddelta 40
configure wave -timeline 0
configure wave -timelineunits ns
update
WaveRestoreZoom {0 ps} {1575 us}
WaveRestoreZoom {0 ps} {420 us}

View File

@@ -2,12 +2,21 @@ m255
K3
13
cModel Technology
<<<<<<< HEAD
Z0 dC:\Users\Musab Erdem\Desktop\labor_eds\labor_3\<5C>bungen\ampel\sim
vampel
Z1 IAVFK:UCi>e]M?9Rf^BY>j0
Z2 VRO2_FXGbKEQ9T<W2M?dVH1
Z3 dC:\Users\Musab Erdem\Desktop\labor_eds\labor_3\<5C>bungen\ampel\sim
Z4 w1708618307
=======
Z0 dC:\Users\Erdem\Desktop\labor_eds\labor_3\<5C>bungen\ampel\sim
vampel
Z1 IaQGYY?BdBf@agb6lTWYkz3
Z2 VRO2_FXGbKEQ9T<W2M?dVH1
Z3 dC:\Users\Erdem\Desktop\labor_eds\labor_3\<5C>bungen\ampel\sim
Z4 w1708681481
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
Z5 8../src/ampel.v
Z6 F../src/ampel.v
L0 20
@@ -16,9 +25,15 @@ r1
31
o-O0
!i10b 1
<<<<<<< HEAD
Z8 !s100 S?HeNBV[mV3T>a:hdNfS10
!s85 0
Z9 !s108 1708618418.950000
=======
Z8 !s100 V^If:`L@9b]?^9XGzD5z@3
!s85 0
Z9 !s108 1708681485.221000
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
Z10 !s107 ../src/ampel.v|
Z11 !s90 -reportprogress|300|../src/ampel.v|+define+SIMULATION|
!s101 -O0
@@ -29,7 +44,11 @@ vmod_n_counter_10bit
IlLNUY`h`GTJ1?TjLj1BUS2
VOCKRzhG[H7hm^_`n>48^e3
R3
<<<<<<< HEAD
Z13 w1708542298
=======
Z13 w1708675165
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
8../src/mod_n_counter_10bit.v
F../src/mod_n_counter_10bit.v
L0 1
@@ -37,7 +56,11 @@ R7
r1
!s85 0
31
<<<<<<< HEAD
!s108 1708618419.009000
=======
!s108 1708681485.276000
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
!s107 ../src/mod_n_counter_10bit.v|
!s90 -reportprogress|300|../src/mod_n_counter_10bit.v|
!s101 -O0
@@ -55,7 +78,11 @@ r1
31
o-O0
Z18 !s100 1oY2jolgFK??ee;z]EH8c2
<<<<<<< HEAD
Z19 !s108 1708618418.897000
=======
Z19 !s108 1708681485.163000
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
Z20 !s107 tb_ampel.v|
Z21 !s90 -reportprogress|300|tb_ampel.v|
!i10b 1

View File

@@ -52,14 +52,24 @@ wire en_div_1;
wire en_div_2;
wire en_div_3;
<<<<<<< HEAD
wire tc_div_1;
wire tc_div_2;
wire tc_div_3;
=======
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
wire [9:0] q_div_1;
wire [9:0] q_div_2;
wire [9:0] q_div_3;
<<<<<<< HEAD
=======
wire tc_div_1;
wire tc_div_2;
wire tc_div_3;
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
// R Gr
parameter FUSS_AUS = 2'b00;
parameter FUSS_ROT = 2'b10;
@@ -99,18 +109,31 @@ assign LEDF_R = FUSSGAENGER;
`define PHASEVAL 8
//clock divider to generate 1 Hz
<<<<<<< HEAD
//
=======
//Clock Enable Generation
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
assign en_div_1 = 1'b1;
assign en_div_2 = tc_div_1;
assign en_div_3 = tc_div_1 & tc_div_2;
<<<<<<< HEAD
always begin
CLOCK_ENABLE = tc_div_3;
end
// synchronisze KEY to CLOCK_50
always @(posedge CLOCK_50) begin
=======
always @(tc_div_3) begin
CLOCK_ENABLE <= tc_div_3;
end
// synchronisze KEY to CLOCK_50
always @(posedge CLOCK_50 or posedge ~KEY[0]) begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
MELDER_Q = ~KEY[0];
MELDER_QQ = MELDER_Q;
end
@@ -119,6 +142,7 @@ end
// Melder zuruecksetzen wenn die Anforderung von der Statemachine verarbeitet
// wurde. Die Ampelanlage gibt den FUSSGAENGERn nur dann gruen wenn
// ein Melder anstehst...
<<<<<<< HEAD
always @(posedge CLOCK_50 or negedge RESET) begin
if (RESET)
MELDER <= 1'b0;
@@ -149,6 +173,42 @@ always @(posedge CLOCK_50 or RESET) begin
end
always @(posedge CLOCK_50 or negedge RESET)
=======
always @(posedge CLOCK_50 or posedge RESET) begin
if (RESET)
MELDER <= 1'b0;
else begin
case ({MELDER_QQ,MELDER_ACK})
2'b00: ;
2'b01: MELDER <= 1'b0;
2'b10: MELDER <= 1'b1;
2'b11: MELDER <= ~MELDER;
endcase
end
end
//Wartezaehler
assign WARTEN_FERTIG = (WARTEZAEHLER == 1'b0);
always @(posedge CLOCK_50 or posedge RESET) begin
if (RESET) begin
WARTEZAEHLER <= WARTEWERT;
end
else if (CLOCK_ENABLE) begin
if (~WARTEN_FERTIG) begin
WARTEZAEHLER <= WARTEZAEHLER - 1'b1;
end
else if (START_WARTEN) begin
START_WARTEN <= ~START_WARTEN;
WARTEZAEHLER <= WARTEWERT;
end
end
end
always @(posedge CLOCK_50 or posedge RESET)
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
if (RESET)
begin
HAUPTSTR <= AUTO_GRUEN;
@@ -162,12 +222,21 @@ always @(posedge CLOCK_50 or negedge RESET)
if (CLOCK_ENABLE)
case (STATE)
4'd0: begin
<<<<<<< HEAD
if(WARTEN_FERTIG) begin
=======
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd0;
end
else begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_GRUEN;
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `HAUPT_GRUEN_DAUER;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
end
@@ -175,29 +244,63 @@ always @(posedge CLOCK_50 or negedge RESET)
4'd1: begin
if(WARTEN_FERTIG) begin
HAUPTSTR = AUTO_GELB;
=======
STATE <= 4'd1;
end
end
4'd1: begin
if(~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd1;
end
else begin
HAUPTSTR <= AUTO_GELB;
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `GELB_DAUER;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
end
end
4'd2: begin
if(WARTEN_FERTIG && MELDER) begin
=======
STATE <= 4'd2;
end
end
4'd2: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd2;
end
else if (WARTEN_FERTIG && MELDER) begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `FUSS_WARTEN;
<<<<<<< HEAD
MELDER_ACK <= 1'b1;
end else if (WARTEN_FERTIG && ~MELDER) begin
=======
MELDER_ACK <= 1'b1;
STATE <= 4'd3;
end
else if (WARTEN_FERTIG && ~MELDER) begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `ALLE_ROT_DAUER;
<<<<<<< HEAD
end else if(~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
@@ -205,12 +308,25 @@ always @(posedge CLOCK_50 or negedge RESET)
end
4'd3: begin
if(WARTEN_FERTIG) begin
=======
STATE <= 4'd4;
end
end
4'd3: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd3;
end
else begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_GRUEN;
START_WARTEN <= 1'b1;
WARTEWERT <= `FUSS_GRUEN_DAUER;
MELDER_ACK <= 1'b0;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
@@ -230,11 +346,37 @@ always @(posedge CLOCK_50 or negedge RESET)
end
4'd5: begin
if(WARTEN_FERTIG) begin
=======
STATE <= 4'd2;
end
end
4'd4: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd4;
end
else begin
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_GELB | AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `GELB_DAUER;
STATE <= 4'd5;
end
end
4'd5: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd5;
end
else begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_GRUEN;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `NEBEN_GRUEN_DAUER;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
@@ -242,11 +384,23 @@ always @(posedge CLOCK_50 or negedge RESET)
end
4'd6: begin
if(WARTEN_FERTIG) begin
=======
STATE <= 4'd6;
end
end
4'd6: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd6;
end
else begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_GELB;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `GELB_DAUER;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
@@ -254,11 +408,23 @@ always @(posedge CLOCK_50 or negedge RESET)
end
4'd7: begin
if(WARTEN_FERTIG) begin
=======
STATE <= 4'd7;
end
end
4'd7: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd7;
end
else begin
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
HAUPTSTR <= AUTO_ROT;
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `ALLE_ROT_DAUER;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
@@ -267,20 +433,40 @@ always @(posedge CLOCK_50 or negedge RESET)
4'd8: begin
if(WARTEN_FERTIG) begin
HAUPTSTR <= AUTO_GELB|AUTO_ROT;
=======
STATE <= 4'd8;
end
end
4'd8: begin
if (~WARTEN_FERTIG) begin
START_WARTEN <= 1'b0;
STATE <= 4'd8;
end
else begin
HAUPTSTR <= AUTO_GELB | AUTO_ROT;
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
NEBENSTR <= AUTO_ROT;
FUSSGAENGER <= FUSS_ROT;
START_WARTEN <= 1'b1;
WARTEWERT <= `GELB_DAUER;
<<<<<<< HEAD
end else begin
START_WARTEN <= 1'b0;
=======
STATE <= 4'd0;
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
end
end
default:
STATE <= 4'd1;
endcase
<<<<<<< HEAD
mod_n_counter_10bit #(.N(`DIVVAL1)) clock_divider_1(
=======
mod_n_counter_10bit #(.N(`DIVVAL1)) divider_1(
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
.CLK(CLOCK_50),
.RST(RESET),
.EN(en_div_1),
@@ -288,7 +474,11 @@ mod_n_counter_10bit #(.N(`DIVVAL1)) clock_divider_1(
.TC(tc_div_1)
);
<<<<<<< HEAD
mod_n_counter_10bit #(.N(`DIVVAL1)) clock_divider_2(
=======
mod_n_counter_10bit #(.N(`DIVVAL1)) divider_2(
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
.CLK(CLOCK_50),
.RST(RESET),
.EN(en_div_2),
@@ -296,7 +486,11 @@ mod_n_counter_10bit #(.N(`DIVVAL1)) clock_divider_2(
.TC(tc_div_2)
);
<<<<<<< HEAD
mod_n_counter_10bit #(.N(`DIVVAL3)) clock_divider_3(
=======
mod_n_counter_10bit #(.N(`DIVVAL3)) divider_3(
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45
.CLK(CLOCK_50),
.RST(RESET),
.EN(en_div_3),
@@ -304,4 +498,8 @@ mod_n_counter_10bit #(.N(`DIVVAL3)) clock_divider_3(
.TC(tc_div_3)
);
endmodule
<<<<<<< HEAD
endmodule
=======
endmodule
>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45