Line 1... |
Line 1... |
/*
|
/*
|
Author: Sebastien Riou (acapola)
|
Author: Sebastien Riou (acapola)
|
Creation date: 17:16:40 01/09/2011
|
Creation date: 17:16:40 01/09/2011
|
|
|
$LastChangedDate: 2011-01-29 13:16:17 +0100 (Sat, 29 Jan 2011) $
|
$LastChangedDate: 2011-02-13 16:20:10 +0100 (Sun, 13 Feb 2011) $
|
$LastChangedBy: acapola $
|
$LastChangedBy: acapola $
|
$LastChangedRevision: 11 $
|
$LastChangedRevision: 15 $
|
$HeadURL: file:///svn/iso7816_3_master/iso7816_3_master/trunk/sources/Iso7816_3_Master.v $
|
$HeadURL: file:///svn/iso7816_3_master/iso7816_3_master/trunk/sources/Iso7816_3_Master.v $
|
|
|
This file is under the BSD licence:
|
This file is under the BSD licence:
|
Copyright (c) 2011, Sebastien Riou
|
Copyright (c) 2011, Sebastien Riou
|
|
|
Line 37... |
Line 37... |
input wire startActivation,//Starts activation sequence
|
input wire startActivation,//Starts activation sequence
|
input wire startDeactivation,//Starts deactivation sequence
|
input wire startDeactivation,//Starts deactivation sequence
|
input wire [7:0] dataIn,
|
input wire [7:0] dataIn,
|
input wire nWeDataIn,
|
input wire nWeDataIn,
|
input wire [12:0] cyclesPerEtu,
|
input wire [12:0] cyclesPerEtu,
|
output wire [7:0] dataOut,
|
output reg [7:0] dataOut,
|
input wire nCsDataOut,
|
input wire nCsDataOut,
|
output wire [7:0] statusOut,
|
output wire [7:0] statusOut,
|
input wire nCsStatusOut,
|
input wire nCsStatusOut,
|
output reg isActivated,//set to high by activation sequence, set to low by deactivation sequence
|
output reg isActivated,//set to high by activation sequence, set to low by deactivation sequence
|
output wire useIndirectConvention,
|
output wire useIndirectConvention,
|
Line 62... |
Line 62... |
wire serialOut;
|
wire serialOut;
|
assign isoSio = isTx ? serialOut : 1'bz;
|
assign isoSio = isTx ? serialOut : 1'bz;
|
pullup(isoSio);
|
pullup(isoSio);
|
wire comClk;
|
wire comClk;
|
|
|
|
wire stopBit2=1'b1;//0: 1 stop bit, 1: 2 stop bits
|
|
wire msbFirst = useIndirectConvention;//if 1, bits order is: startBit, b7, b6, b5...b0, parity
|
|
wire oddParity = 1'b0;//if 1, parity bit is such that data+parity have an odd number of 1
|
|
wire sioHighValue = ~useIndirectConvention;//apply only to data bits
|
|
|
|
wire [7:0] uart_dataOut;
|
|
wire [7:0] uart_dataIn = sioHighValue ? dataIn : ~dataIn;
|
|
always @(*) dataOut = sioHighValue ? uart_dataOut : ~uart_dataOut;
|
|
|
|
|
HalfDuplexUartIf #(
|
HalfDuplexUartIf #(
|
.DIVIDER_WIDTH(1'b1),
|
.DIVIDER_WIDTH(1'b1),
|
.CLOCK_PER_BIT_WIDTH(4'd13)
|
.CLOCK_PER_BIT_WIDTH(4'd13)
|
)
|
)
|
uart (
|
uart (
|
.nReset(nReset),
|
.nReset(nReset),
|
.clk(clk),
|
.clk(clk),
|
.clkPerCycle(1'b0),
|
.clkPerCycle(1'b0),
|
.dataIn(dataIn),
|
.dataIn(uart_dataIn),
|
.nWeDataIn(nWeDataIn),
|
.nWeDataIn(nWeDataIn),
|
.clocksPerBit(cyclesPerEtu),
|
.clocksPerBit(cyclesPerEtu),
|
.dataOut(dataOut),
|
.stopBit2(stopBit2),
|
|
.oddParity(oddParity),
|
|
.msbFirst(msbFirst),
|
|
.dataOut(uart_dataOut),
|
.nCsDataOut(nCsDataOut),
|
.nCsDataOut(nCsDataOut),
|
.statusOut(statusOut),
|
.statusOut(statusOut),
|
.nCsStatusOut(nCsStatusOut),
|
.nCsStatusOut(nCsStatusOut),
|
.serialIn(isoSio),
|
.serialIn(isoSio),
|
.serialOut(serialOut),
|
.serialOut(serialOut),
|
Line 105... |
Line 118... |
isActivated <= 1'b0;
|
isActivated <= 1'b0;
|
end else if(isActivated) begin
|
end else if(isActivated) begin
|
if(waitTs) begin
|
if(waitTs) begin
|
if(statusOut[0]) begin
|
if(statusOut[0]) begin
|
waitTs<=1'b0;
|
waitTs<=1'b0;
|
ts<=dataOut;
|
case(dataOut)
|
|
8'h3B: ts<=dataOut;
|
|
8'h03: ts<=8'h3F;
|
|
default: ts<=dataOut;
|
|
endcase
|
end
|
end
|
resetCnt<=resetCnt+1;
|
resetCnt<=resetCnt+1;
|
end
|
end
|
if(startDeactivation) begin
|
if(startDeactivation) begin
|
isoVdd <= 1'b0;
|
isoVdd <= 1'b0;
|