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);
|
module timer(input inClk, inTaste, inEN, output reg outReadTemp, outTasteAktiv);
|
||||||
|
//Wird genutzt um den Eingangstakt zu teilen.
|
||||||
int divide1 = 30000000;
|
int divide1 = 30000000;
|
||||||
int divide2 = 60000;
|
int divide2 = 60000;
|
||||||
|
|
||||||
|
//Interne Zwischenspeicher;
|
||||||
logic state = 0;
|
logic state = 0;
|
||||||
logic [31:0] count1 = 32'b0;
|
logic [31:0] count1 = 32'b0;
|
||||||
logic [31:0] count2 = 32'b0;
|
logic [31:0] count2 = 32'b0;
|
||||||
|
|
||||||
|
//Initialisierung
|
||||||
initial begin
|
initial begin
|
||||||
outReadTemp = 0;
|
outReadTemp = 0;
|
||||||
outTasteAktiv = 0;
|
outTasteAktiv = 0;
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge inClk or posedge inEN) begin
|
always @(posedge inClk or posedge inEN) begin
|
||||||
|
//Bei positiver Flanke und inEN auf HIGH wird Timer gestoppt
|
||||||
if(inEN) begin
|
if(inEN) begin
|
||||||
count1 <= 0;
|
count1 <= 0;
|
||||||
count2 <= 0;
|
count2 <= 0;
|
||||||
outReadTemp <= 0;
|
outReadTemp <= 0;
|
||||||
end
|
end
|
||||||
|
//sonst wird counter1 inkrementiert
|
||||||
else begin
|
else begin
|
||||||
count1 <= count1 +1;
|
count1 <= count1 +1;
|
||||||
if(count1>=((2**32)-1))
|
if(count1>=((2**32)-1))
|
||||||
count1 <= 32'b0;
|
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)
|
if(count1 % divide1 == 0)
|
||||||
outReadTemp <= ~outReadTemp;
|
outReadTemp <= ~outReadTemp;
|
||||||
|
|
||||||
|
//Bei positiver Flanke wird Taster abgefragt
|
||||||
|
//Solange Taster HIGH ist wird counter2 erhöht
|
||||||
if(inTaste) begin
|
if(inTaste) begin
|
||||||
count2 <= count2 +1;
|
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)
|
if(count2 >= 6000000)
|
||||||
outTasteAktiv = 1;
|
outTasteAktiv = 1;
|
||||||
end
|
end
|
||||||
|
//Wenn Taster losgelassen wird, dann wird Ausgang und counter2 zurück gesetzt.
|
||||||
else begin
|
else begin
|
||||||
outTasteAktiv <= 0;
|
outTasteAktiv <= 0;
|
||||||
count2 <= 0;
|
count2 <= 0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endmodule // clk_divider
|
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);
|
module parallelport(input inClk, inTimerMeas, inEndOfConv, [7:0] inData, output reg outDataValid, [7:0] outData);
|
||||||
|
|
||||||
|
//Zwischenspeicher der Daten
|
||||||
logic [7:0] storage = 8'b0;
|
logic [7:0] storage = 8'b0;
|
||||||
|
|
||||||
|
//Initalisierung
|
||||||
initial begin
|
initial begin
|
||||||
outDataValid <= 0;
|
outDataValid <= 0;
|
||||||
outData <= 8'b0;
|
outData <= 8'b0;
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge inClk) begin
|
always @(posedge inClk) begin
|
||||||
|
//Wenn inEndOfConv HIGH ist, dann werden die Daten in den Zwischenspeicher gelegt
|
||||||
if(inEndOfConv)
|
if(inEndOfConv)
|
||||||
storage <= inData;
|
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
|
if(inTimerMeas == 1 && outDataValid == 0) begin
|
||||||
outData = storage;
|
outData = storage;
|
||||||
outDataValid <= 1;
|
outDataValid <= 1;
|
||||||
end
|
end
|
||||||
|
//Wenn inTimerMeas LOW ist, dann wird outDataValid auf LOW gesetzt
|
||||||
else if(inTimerMeas == 0)
|
else if(inTimerMeas == 0)
|
||||||
outDataValid <= 0;
|
outDataValid <= 0;
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user