diff --git a/labor_3/Übungen/ampel/sim/sim.tcl b/labor_3/Übungen/ampel/sim/sim.tcl index 1b31acb..5b719a5 100644 --- a/labor_3/Übungen/ampel/sim/sim.tcl +++ b/labor_3/Übungen/ampel/sim/sim.tcl @@ -20,4 +20,5 @@ vsim -c -t ps tb_ampel #get wave do wave.do -run 1500 us \ No newline at end of file +run 1500 us +#run 400 us \ No newline at end of file diff --git a/labor_3/Übungen/ampel/sim/wave.do b/labor_3/Übungen/ampel/sim/wave.do index 784ce4b..7bac44f 100644 --- a/labor_3/Übungen/ampel/sim/wave.do +++ b/labor_3/Übungen/ampel/sim/wave.do @@ -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} diff --git a/labor_3/Übungen/ampel/sim/work/_info b/labor_3/Übungen/ampel/sim/work/_info index 1ca19de..67c8b77 100644 --- a/labor_3/Übungen/ampel/sim/work/_info +++ b/labor_3/Übungen/ampel/sim/work/_info @@ -2,12 +2,21 @@ m255 K3 13 cModel Technology +<<<<<<< HEAD Z0 dC:\Users\Musab Erdem\Desktop\labor_eds\labor_3\Übungen\ampel\sim vampel Z1 IAVFK:UCi>e]M?9Rf^BY>j0 Z2 VRO2_FXGbKEQ9T>>>>>> 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 diff --git a/labor_3/Übungen/ampel/src/ampel.v b/labor_3/Übungen/ampel/src/ampel.v index ea5a876..59d64f4 100644 --- a/labor_3/Übungen/ampel/src/ampel.v +++ b/labor_3/Übungen/ampel/src/ampel.v @@ -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 \ No newline at end of file +<<<<<<< HEAD +endmodule +======= +endmodule +>>>>>>> 1b9840c27cab5a0b6374c25e1f14bde0476c9b45