/*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