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

Subversion Repositories iso7816_3_master

[/] [iso7816_3_master/] [trunk/] [test/] [iso7816_3_t0_analyzer.v] - Diff between revs 6 and 7

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 6 Rev 7
Line 32... Line 32...
        output reg cardTx,
        output reg cardTx,
        output reg termTx,
        output reg termTx,
        output wire guardTime,
        output wire guardTime,
        output wire overrunError,
        output wire overrunError,
        output wire frameError,
        output wire frameError,
        output reg [7:0] lastByte
        output reg [7:0] lastByte,
 
        output reg [31:0] bytesCnt
        );
        );
parameter DIVIDER_WIDTH = 1;
parameter DIVIDER_WIDTH = 1;
 
 
reg [8:0] tsCnt;//counter to start ATR 400 cycles after reset release
reg [8:0] tsCnt;//counter to start ATR 400 cycles after reset release
 
 
Line 46... Line 47...
localparam P1_I = 8*2;
localparam P1_I = 8*2;
localparam P2_I = 8*1;
localparam P2_I = 8*1;
localparam P3_I = 0;
localparam P3_I = 0;
reg [CLA_I+7:0] tpduHeader;
reg [CLA_I+7:0] tpduHeader;
 
 
//wire COM_statusOut=statusOut;
//wire COM_clk=isoClk;
wire COM_clk=isoClk;
//integer COM_errorCnt;
integer COM_errorCnt;
//wire txPending=1'b0;
wire txPending=1'b0;
//wire txRun=1'b0;
wire txRun=1'b0;
 
 
 
wire rxRun, rxStartBit, overrunErrorFlag, frameErrorFlag, bufferFull;
wire rxRun, rxStartBit, overrunErrorFlag, frameErrorFlag, bufferFull;
assign overrunErrorFlag = overrunError;
assign overrunErrorFlag = overrunError;
assign frameErrorFlag = frameError;
assign frameErrorFlag = frameError;
 
 
wire [7:0] rxData;
wire [7:0] rxData;
reg nCsDataOut;
reg ackFlags;
 
 
wire msbFirst = useIndirectConvention;
wire msbFirst = useIndirectConvention;
wire sioHighValue = ~useIndirectConvention;
wire sioHighValue = ~useIndirectConvention;
wire oddParity = 1'b0;
wire oddParity = 1'b0;
 
 
wire [7:0] dataOut = sioHighValue ? rxData : ~rxData;
wire [7:0] dataOut = sioHighValue ? rxData : ~rxData;
 
 
 
 
`include "ComRxDriverTasks.v"
//`include "ComRxDriverTasks.v"
 
 
wire endOfRx;
wire endOfRx;
 
 
wire stopBit2 = useT0;//1 if com use 2 stop bits --> 12 ETU / byte
wire stopBit2 = useT0;//1 if com use 2 stop bits --> 12 ETU / byte
 
 
RxCoreSelfContained #(
RxCoreSelfContained #(
                .DIVIDER_WIDTH(DIVIDER_WIDTH),
                .DIVIDER_WIDTH(DIVIDER_WIDTH),
                .CLOCK_PER_BIT_WIDTH(4'd13))
                .CLOCK_PER_BIT_WIDTH(4'd13),
 
                .PRECISE_STOP_BIT(1'b1))
        rxCore (
        rxCore (
    .dataOut(rxData),
    .dataOut(rxData),
    .overrunErrorFlag(overrunError),
    .overrunErrorFlag(overrunError),
    .dataOutReadyFlag(bufferFull),
    .dataOutReadyFlag(bufferFull),
    .frameErrorFlag(frameError),
    .frameErrorFlag(frameError),
    .endOfRx(endOfRx),
    .endOfRx(endOfRx),
    .run(rxRun),
    .run(rxRun),
    .startBit(rxStartBit),
    .startBit(rxStartBit),
         .stopBit(guardTime),
         .stopBit(guardTime),
    .clkPerCycle(clkPerCycle),
    .clkPerCycle(clkPerCycle),
    .clocksPerBit(cyclesPerEtu),
    .clocksPerBit(cyclesPerEtu-1),
    .stopBit2(stopBit2),
    .stopBit2(stopBit2),
    .oddParity(oddParity),
    .oddParity(oddParity),
    .msbFirst(msbFirst),
    .msbFirst(msbFirst),
         .ackFlags(nCsDataOut),
         .ackFlags(ackFlags),
    .serialIn(isoSio),
    .serialIn(isoSio),
    .comClk(isoClk),
    .comClk(isoClk),
    .clk(clk),
    .clk(clk),
    .nReset(nReset)
    .nReset(nReset)
    );
    );
Line 138... Line 139...
wire [7:0] tdiData;//value of TDi
wire [7:0] tdiData;//value of TDi
assign {tdiCnt,tdiData}=tdiStruct;
assign {tdiCnt,tdiData}=tdiStruct;
 
 
wire [1:0] nIfBytes;
wire [1:0] nIfBytes;
HammingWeight hammingWeight(.dataIn(tdiData[7:4]), .hammingWeight(nIfBytes));
HammingWeight hammingWeight(.dataIn(tdiData[7:4]), .hammingWeight(nIfBytes));
reg [7:0] bytesCnt;
reg [7:0] tempBytesCnt;
 
always @(posedge isoClk, negedge nReset) begin
 
        if(~nReset) begin
 
                lastByte<=8'b0;
 
                ackFlags<=1'b0;
 
                bytesCnt<=32'b0;
 
        end else if(ackFlags) begin
 
                ackFlags<=1'b0;
 
        end else if(frameErrorFlag|bufferFull) begin
 
                lastByte<=dataOut;
 
                ackFlags<=1'b1;
 
                bytesCnt<=bytesCnt+1'b1;
 
        end
 
end
always @(posedge isoClk, negedge nReset) begin
always @(posedge isoClk, negedge nReset) begin
        if(~nReset) begin
        if(~nReset) begin
                fiCode<=4'b0001;
                fiCode<=4'b0001;
                diCode<=4'b0001;
                diCode<=4'b0001;
                useT0<=1'b1;
                useT0<=1'b1;
                useT1<=1'b0;
                useT1<=1'b0;
                useT15<=1'b0;
                useT15<=1'b0;
                waitCardTx<=1'b0;
                waitCardTx<=1'b0;
                waitTermTx<=1'b0;
                waitTermTx<=1'b0;
                lastByte<=8'b0;
 
                fsmState<=ATR_TDI;
                fsmState<=ATR_TDI;
                atrHasTck<=1'b0;
                atrHasTck<=1'b0;
                bytesCnt<=8'h0;
                tempBytesCnt<=8'h0;
                tdiStruct<=12'h0;
                tdiStruct<=12'h0;
                atrCompleted<=1'b0;
                atrCompleted<=1'b0;
        end else if(isActivated) begin
        end else if(isActivated) begin
                if(~tsReceived) begin
                if(~tsReceived) begin
                        waitCardTx<=1'b1;
                        waitCardTx<=1'b1;
                end else if(~atrCompleted) begin
                end else if(~atrCompleted) begin
                        //ATR analysis
                        //ATR analysis
                        case(fsmState)
                        case(fsmState)
                                ATR_TDI: begin
                                ATR_TDI: begin
                                        if(endOfRx) begin
                                        if(endOfRx) begin
                                                if(bytesCnt==nIfBytes) begin //TDi bytes
                                                if(tempBytesCnt==nIfBytes) begin //TDi bytes
                                                        bytesCnt <= 2'h0;
                                                        tempBytesCnt <= 2'h0;
                                                        tdiStruct <= {tdiCnt+1,dataOut};
                                                        tdiStruct <= {tdiCnt+1,dataOut};
                                                        if(4'h0==tdiCnt) begin//this is T0
                                                        if(4'h0==tdiCnt) begin//this is T0
                                                                atrK <= dataOut[3:0];
                                                                atrK <= dataOut[3:0];
                                                                fsmState <= (4'b0!=dataOut[7:4]) ? ATR_TDI :
                                                                fsmState <= (4'b0!=dataOut[7:4]) ? ATR_TDI :
                                                                                                (4'b0!=dataOut[3:0]) ? ATR_HISTORICAL : T0_HEADER;
                                                                                                (4'b0!=dataOut[3:0]) ? ATR_HISTORICAL : T0_HEADER;
Line 176... Line 188...
                                                                fsmState <= (4'b0!=dataOut[7:4]) ? ATR_TDI :
                                                                fsmState <= (4'b0!=dataOut[7:4]) ? ATR_TDI :
                                                                                                (4'b0!=atrK) ? ATR_HISTORICAL : T0_HEADER;
                                                                                                (4'b0!=atrK) ? ATR_HISTORICAL : T0_HEADER;
                                                        end
                                                        end
                                                end else begin //TA, TB or TC bytes
                                                end else begin //TA, TB or TC bytes
                                                        //TODO: get relevant info
                                                        //TODO: get relevant info
                                                        bytesCnt <= bytesCnt+1;
                                                        tempBytesCnt <= tempBytesCnt+1;
                                                end
                                                end
                                        end
                                        end
                                end
                                end
                                ATR_HISTORICAL: begin
                                ATR_HISTORICAL: begin
                                        if(endOfRx) begin
                                        if(endOfRx) begin
                                                if(bytesCnt==atrK) begin
                                                if(tempBytesCnt==atrK) begin
                                                        atrCompleted <= ~atrHasTck;
                                                        atrCompleted <= ~atrHasTck;
                                                        fsmState <= atrHasTck ? ATR_TCK : T0_HEADER;
                                                        fsmState <= atrHasTck ? ATR_TCK : T0_HEADER;
                                                end else begin
                                                end else begin
                                                        bytesCnt <= bytesCnt+1;
                                                        tempBytesCnt <= tempBytesCnt+1;
                                                end
                                                end
                                        end
                                        end
                                end
                                end
                                ATR_TCK: begin
                                ATR_TCK: begin
                                        if(endOfRx) begin
                                        if(endOfRx) begin

powered by: WebSVN 2.1.0

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