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

Subversion Repositories iso7816_3_master

[/] [iso7816_3_master/] [trunk/] [sources/] [HalfDuplexUartIf.v] - Blame information for rev 3

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

Line No. Rev Author Line
1 2 acapola
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: 
5
// 
6
// Create Date:    19:57:35 10/31/2010 
7
// Design Name: 
8
// Module Name:    HalfDuplexUartIf 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module HalfDuplexUartIf(
22
    input nReset,
23
    input clk,
24
    input [DIVIDER_WIDTH-1:0] clkPerCycle,
25
         input [7:0] dataIn,
26
    input nWeDataIn,
27
    output [7:0] dataOut,
28
    input nCsDataOut,
29
    output [7:0] statusOut,
30
    input nCsStatusOut,
31
    input serialIn,
32
         output serialOut,
33
         output comClk
34
    );
35
//parameters to override
36
parameter DIVIDER_WIDTH = 1;
37
 
38
   reg [7:0] dataReg;
39
 
40
        // Inputs
41
        wire [7:0] txData;
42
        wire [12:0] clocksPerBit;
43
        wire stopBit2=1;
44
        wire oddParity=0; //if 1, parity bit is such that data+parity have an odd number of 1
45
   wire msbFirst=0;  //if 1, bits will be send in the order startBit, b7, b6, b5...b0, parity
46
        reg txPending;
47
        wire ackFlags;
48
 
49
        // Outputs
50
        wire [7:0] rxData;
51
        wire overrunErrorFlag;
52
        wire dataOutReadyFlag;
53
        wire frameErrorFlag;
54
        wire txRun;
55
   wire endOfRx;
56
        wire rxRun;
57
        wire rxStartBit;
58
        wire txFull;
59 3 acapola
        wire isTx;
60 2 acapola
 
61
   wire rxFlagsSet = dataOutReadyFlag | overrunErrorFlag | frameErrorFlag;
62
   reg bufferFull;
63
   reg [1:0] flagsReg;
64
 
65
   assign txData = dataReg;
66
   assign clocksPerBit = 7;
67
 
68
   assign dataOut=dataReg;
69
   assign statusOut[7:0]={txRun, txPending, rxRun, rxStartBit, isTx, flagsReg, bufferFull};
70
 
71
reg waitTxFull0;//internal reg for managing bufferFull bit in Tx
72
 
73
assign ackFlags=~txPending & ~txRun & rxFlagsSet & ((bufferFull & ~nCsDataOut)| ~bufferFull);
74
 
75
always @(posedge clk, negedge nReset) begin
76
   if(~nReset) begin
77
      bufferFull <= 1'b0;
78
      flagsReg <= 1'b0;
79
      txPending <= 1'b0;
80
   end else begin
81
      if(ackFlags) begin
82
         dataReg <= rxData;
83
         flagsReg <= {overrunErrorFlag, frameErrorFlag};
84
         if(rxFlagsSet)
85
            bufferFull <= 1'b1;
86
         else
87
            bufferFull <= 1'b0;
88
      end else if(txPending) begin
89
         if(waitTxFull0) begin
90
            if(~txFull)
91
               waitTxFull0 <= 1'b0;
92
         end else if(txFull) begin//tx actually started, clear txPending and free buffer
93
            txPending <= 1'b0;
94
            bufferFull <= 1'b0; //buffer is empty
95
         end
96
      end else if(~nCsDataOut) begin
97
         bufferFull <= 1'b0;
98
      end else if(~nWeDataIn) begin
99
         dataReg <= dataIn;
100
         bufferFull <= 1'b1;
101
         txPending <= 1'b1;
102
         waitTxFull0 <= txFull;
103
      end
104
   end
105
end
106
 
107
        BasicHalfDuplexUart #(.DIVIDER_WIDTH(DIVIDER_WIDTH))
108
        uart (
109
                .rxData(rxData),
110
                .overrunErrorFlag(overrunErrorFlag),
111
                .dataOutReadyFlag(dataOutReadyFlag),
112
                .frameErrorFlag(frameErrorFlag),
113
                .txRun(txRun),
114
                .endOfRx(endOfRx),
115
      .rxRun(rxRun),
116
                .rxStartBit(rxStartBit),
117
                .txFull(txFull),
118
                .isTx(isTx),
119
                .serialIn(serialIn),
120
                .serialOut(serialOut),
121 3 acapola
                .comClk(comClk),
122 2 acapola
                .txData(txData),
123
                .clocksPerBit(clocksPerBit),
124
                .stopBit2(stopBit2),
125
                .oddParity(oddParity),
126
      .msbFirst(msbFirst),
127
           .startTx(txPending),
128
                .ackFlags(ackFlags),
129
                .clkPerCycle(clkPerCycle),
130
                .clk(clk),
131
                .nReset(nReset)
132
        );
133
 
134
endmodule

powered by: WebSVN 2.1.0

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