1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*Timer soll signalisieren, wenn 10 Sekunden vorbei sind.
- Zusätzlich soll der Taster abgefragt werden. Wenn der Taster für 1 Sekunde aktiv ist, soll es signalisiert werden.
-
- inClk: Eingang für Clock 12MHz
- inTaste: Eingang Taster
- inEN: Enable Pin, wenn HIGH dann stoppt Timer
- outReadTemp: signalisiert, dass 10 Sekunden vorbei sind
- outTasteAktiv: signalisiert, dass der Taster betätigt wurde
- */
-
-
- module timer(input inClk, inTaste, inEN, output reg outReadTemp, outTasteAktiv);
- //Wird genutzt um den Eingangstakt zu teilen.
- int divide1 = 30000000;
- int divide2 = 60000;
-
- //Interne Zwischenspeicher;
- logic state = 0;
- logic [31:0] count1 = 32'b0;
- logic [31:0] count2 = 32'b0;
-
- //Initialisierung
- initial begin
- outReadTemp = 0;
- outTasteAktiv = 0;
- end
-
- always @(posedge inClk or posedge inEN) begin
- //Bei positiver Flanke und inEN auf HIGH wird Timer gestoppt
- if(inEN) begin
- count1 <= 0;
- count2 <= 0;
- outReadTemp <= 0;
- end
- //sonst wird counter1 inkrementiert
- else begin
- count1 <= count1 +1;
- if(count1>=((2**32)-1))
- count1 <= 32'b0;
- //wenn counter1 durch divide1 teilbar ist, so wird outReadTemp getoggelt --> es erfolgt ca. alle 5 Sekunden ein toggeln
- //outReadTemp ist für 5 Sekunden HIGH und 5 Sekunden LOW
- if(count1 % divide1 == 0)
- outReadTemp <= ~outReadTemp;
-
- //Bei positiver Flanke wird Taster abgefragt
- //Solange Taster HIGH ist wird counter2 erhöht
- if(inTaste) begin
- count2 <= count2 +1;
- //Sobald counter2 den Wert 6 000 000 übersteigt, wird outTasteAktiv auf HIGH gesetzt --> Taster wurde 1 Sekunde betätigt
- if(count2 >= 6000000)
- outTasteAktiv = 1;
- end
- //Wenn Taster losgelassen wird, dann wird Ausgang und counter2 zurück gesetzt.
- else begin
- outTasteAktiv <= 0;
- count2 <= 0;
- end
- end
- end
- endmodule // clk_divider
-
-
- /*Parallelport, soll die Daten des ADC alle 10 Sekunden auslesen und auf den Bus legen.
-
- inClk: Eingang für Clock 12MHz
- inTimerMeas: Eingang des 10 Sekunden Takt des Timers
- inEndOdConv: Eingang vom ADC; Signalisiert valide Daten im ADC
- [7:0] inData: Eingang der Daten (parallel)
- outDataValid: Signalisiert, dass Daten auf Bus vaild sind
- [7:0] outData: Ausgang der Daten (parallel)
- */
-
- module parallelport(input inClk, inTimerMeas, inEndOfConv, [7:0] inData, output reg outDataValid, [7:0] outData);
-
- //Zwischenspeicher der Daten
- logic [7:0] storage = 8'b0;
-
- //Initalisierung
- initial begin
- outDataValid <= 0;
- outData <= 8'b0;
- end
-
- always @(posedge inClk) begin
- //Wenn inEndOfConv HIGH ist, dann werden die Daten in den Zwischenspeicher gelegt
- if(inEndOfConv)
- storage <= inData;
- //Wenn inTimerMeas HIGH ist, dann werden die Daten aus dem Zwischenspeicher in das Ausgangsregister gelegt
- //Außerdem wird outDataValid auf HIGH gesetzt, was dem Bus signalisiert, dass die Daten gelesen werden können
- if(inTimerMeas == 1 && outDataValid == 0) begin
- outData = storage;
- outDataValid <= 1;
- end
- //Wenn inTimerMeas LOW ist, dann wird outDataValid auf LOW gesetzt
- else if(inTimerMeas == 0)
- outDataValid <= 0;
- end
- endmodule
|