Browse Source

Timer and Port source

top_level_design
Christoph Reuss 2 years ago
parent
commit
0ecac8324e
2 changed files with 149 additions and 0 deletions
  1. 87
    0
      timer_port/testbench.sv
  2. 62
    0
      timer_port/timer_top.sv

+ 87
- 0
timer_port/testbench.sv View File

// Code your testbench here
// or browse Examples


`timescale 1ns/1ps;
module tb();
reg inClk, inEN, inTaste;
wire outReadTemp;
wire outTasteAktiv;

reg [7:0] inData;
reg inEndOfConv;
wire outDataValid;
wire [7:0] outData;
timer t1 (.inClk(inClk),
.inTaste(inTaste),
.inEN(inEN),
.outReadTemp(outReadTemp),
.outTasteAktiv(outTasteAktiv));
parallelport p1 (.inData(inData),
.inClk(inClk),
.inTimerMeas(outReadTemp),
.inEndOfConv(inEndOfConv),
.outDataValid(outDataValid),
.outData(outData));
always #83 inClk <= ~inClk;
always #1000000000 inEndOfConv <= ~inEndOfConv;
always #100000000 inData = inData +1;
initial begin
//$dumpfile("dump.vcd");
//$dumpvars;
inClk <= 0;
inEN <= 0;
inTaste <= 0;

inData <= 8'b0;
inEndOfConv <= 0;
#1000000000
inTaste = 1;
#1000000000
#1000000000
#1000000000
inTaste = 0;
#1000000000
inEN <= 1;
#1000000000
inEN <= 0;
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
#1000000000
$stop;
end
endmodule

+ 62
- 0
timer_port/timer_top.sv View File

//clock divider
module timer(input inClk, inTaste, inEN, output reg outReadTemp, outTasteAktiv);
int divide1 = 30000000;
int divide2 = 60000;
logic state = 0;
logic [31:0] count1 = 32'b0;
logic [31:0] count2 = 32'b0;
initial begin
outReadTemp = 0;
outTasteAktiv = 0;
end

always @(posedge inClk or posedge inEN) begin
if(inEN) begin
count1 <= 0;
count2 <= 0;
outReadTemp <= 0;
end
else begin
count1 <= count1 +1;
if(count1>=((2**32)-1))
count1 <= 32'b0;
if(count1 % divide1 == 0)
outReadTemp <= ~outReadTemp;
if(inTaste) begin
count2 <= count2 +1;
if(count2 >= 6000000)
outTasteAktiv = 1;
end
else begin
outTasteAktiv <= 0;
count2 <= 0;
end
end
end
endmodule // clk_divider

module parallelport(input inClk, inTimerMeas, inEndOfConv, [7:0] inData, output reg outDataValid, [7:0] outData);

logic [7:0] storage = 8'b0;
initial begin
outDataValid <= 0;
outData <= 8'b0;
end
always @(posedge inClk) begin
if(inEndOfConv)
storage <= inData;
if(inTimerMeas == 1 && outDataValid == 0) begin
outData = storage;
outDataValid <= 1;
end
else if(inTimerMeas == 0)
outDataValid <= 0;
end
endmodule

Loading…
Cancel
Save