Timer and Port source
This commit is contained in:
parent
ad550a9ac6
commit
0ecac8324e
87
timer_port/testbench.sv
Normal file
87
timer_port/testbench.sv
Normal file
@ -0,0 +1,87 @@
|
||||
// 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
timer_port/timer_top.sv
Normal file
62
timer_port/timer_top.sv
Normal file
@ -0,0 +1,62 @@
|
||||
//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…
x
Reference in New Issue
Block a user