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] - Diff between revs 5 and 6

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

Rev 5 Rev 6
Line 1... Line 1...
`timescale 1ns / 1ps
`timescale 1ns / 1ps
`default_nettype none
`default_nettype none
 
 
module TsAnalyzer(
module TsAnalyzer(
        input wire nReset,
        input wire nReset,
        input wire clk,
 
        input wire isoReset,
        input wire isoReset,
        input wire isoClk,
        input wire isoClk,
        input wire isoVdd,
        input wire isoVdd,
        input wire isoSio,
        input wire isoSio,
        input wire endOfRx,
        input wire endOfRx,
        input wire [7:0] rxData,//assumed to be sent lsb first, high level coding logical 1.
        input wire [7:0] rxData,//assumed to be sent lsb first, high level coding logical 1.
        output reg isActivated,
        output wire isActivated,
        output reg tsReceived,
        output wire tsReceived,
        output reg tsError,
        output wire tsError,
        output reg atrIsEarly,//high if TS received before 400 cycles after reset release
        output wire atrIsEarly,//high if TS received before 400 cycles after reset release
        output reg atrIsLate,//high if TS is still not received after 40000 cycles after reset release
        output wire atrIsLate,//high if TS is still not received after 40000 cycles after reset release
        output reg useIndirectConvention
        output wire useIndirectConvention
        );
        );
 
 
 
 
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 27... Line 26...
reg [7:0] ts;
reg [7:0] ts;
assign atrIsEarly = ~waitTs & (resetCnt<(16'h100+16'd400));
assign atrIsEarly = ~waitTs & (resetCnt<(16'h100+16'd400));
assign atrIsLate = resetCnt>(16'h100+16'd40000);
assign atrIsLate = resetCnt>(16'h100+16'd40000);
assign useIndirectConvention = ~waitTs & (ts==8'hFC);//FC is 3F written LSB first
assign useIndirectConvention = ~waitTs & (ts==8'hFC);//FC is 3F written LSB first
assign tsError = ~waitTs & (ts!=8'h3B) & ~useIndirectConvention;
assign tsError = ~waitTs & (ts!=8'h3B) & ~useIndirectConvention;
always @(posedge comClk, negedge nReset) begin
 
 
assign isActivated = isoReset & isoVdd;
 
 
 
always @(posedge isoClk, negedge nReset) begin
        if(~nReset) begin
        if(~nReset) begin
                resetCnt<=16'b0;
                resetCnt<=16'b0;
                waitTs<=1'b1;
                waitTs<=1'b1;
                isActivated <= 1'b0;
 
        end else if(isActivated) begin
        end else if(isActivated) begin
                if(waitTs) begin
                if(waitTs) begin
                        if(endOfRx) begin
                        if(endOfRx) begin
                                waitTs<=1'b0;
                                waitTs<=1'b0;
                                ts<=dataOut;
                                ts<=rxData;
                        end
                        end
                        resetCnt<=resetCnt+1;
                        resetCnt<=resetCnt+1;
                end
                end
        end else begin
        end else begin
                if(isoVdd & isoReset) begin
                if(isoVdd & isoReset) begin

powered by: WebSVN 2.1.0

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