Kommentare in Sourcecode ergänzt
This commit is contained in:
parent
c7c804a5f9
commit
6a86450a97
@ -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);
|
||||
//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
|
||||
|
Loading…
x
Reference in New Issue
Block a user