OpenCores
URL https://opencores.org/ocsvn/iso7816_3_master/iso7816_3_master/trunk

Subversion Repositories iso7816_3_master

[/] [iso7816_3_master/] [trunk/] [test/] [tsAnalyzer.v] - Blame information for rev 5

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 acapola
`timescale 1ns / 1ps
2
`default_nettype none
3
 
4
module TsAnalyzer(
5
        input wire nReset,
6
        input wire clk,
7
        input wire isoReset,
8
        input wire isoClk,
9
        input wire isoVdd,
10
        input wire isoSio,
11
        input wire endOfRx,
12
        input wire [7:0] rxData,//assumed to be sent lsb first, high level coding logical 1.
13
        output reg isActivated,
14
        output reg tsReceived,
15
        output reg tsError,
16
        output reg atrIsEarly,//high if TS received before 400 cycles after reset release
17
        output reg atrIsLate,//high if TS is still not received after 40000 cycles after reset release
18
        output reg useIndirectConvention
19
        );
20
 
21
 
22
reg [8:0] tsCnt;//counter to start ATR 400 cycles after reset release
23
 
24
reg [16:0] resetCnt;
25
reg waitTs;
26
assign tsReceived = ~waitTs;
27
reg [7:0] ts;
28
assign atrIsEarly = ~waitTs & (resetCnt<(16'h100+16'd400));
29
assign atrIsLate = resetCnt>(16'h100+16'd40000);
30
assign useIndirectConvention = ~waitTs & (ts==8'hFC);//FC is 3F written LSB first
31
assign tsError = ~waitTs & (ts!=8'h3B) & ~useIndirectConvention;
32
always @(posedge comClk, negedge nReset) begin
33
        if(~nReset) begin
34
                resetCnt<=16'b0;
35
                waitTs<=1'b1;
36
                isActivated <= 1'b0;
37
        end else if(isActivated) begin
38
                if(waitTs) begin
39
                        if(endOfRx) begin
40
                                waitTs<=1'b0;
41
                                ts<=dataOut;
42
                        end
43
                        resetCnt<=resetCnt+1;
44
                end
45
        end else begin
46
                if(isoVdd & isoReset) begin
47
                        resetCnt<=resetCnt + 1;
48
                end else begin
49
                        resetCnt<=16'b0;
50
                end
51
        end
52
end
53
 
54
endmodule
55
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.