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 10

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

powered by: WebSVN 2.1.0

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