Browse Source

Kommentare in Sourcecode ergänzt

main
Christoph Reuss 2 years ago
parent
commit
6a86450a97
1 changed files with 44 additions and 8 deletions
  1. 44
    8
      timer_port/timer_top.sv

+ 44
- 8
timer_port/timer_top.sv View File

//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);
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 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…
Cancel
Save