diff --git a/timer_port/timer_top.sv b/timer_port/timer_top.sv index fea9288..76677ac 100644 --- a/timer_port/timer_top.sv +++ b/timer_port/timer_top.sv @@ -1,61 +1,97 @@ -//clock divider +/*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); - int divide1 = 30000000; - int divide2 = 60000; + //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 + 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