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

Subversion Repositories cheap_ethernet

[/] [cheap_ethernet/] [trunk/] [Ethernet_test/] [TENBASET_TxD.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 graver
`timescale 1ns / 1ps
2
// 10BASE-T transmit interface (based on fpga4fun.com version)
3
module TENBASET_TxD(clk20,
4
        SendingPacket, pkt_data, rdaddress, ShiftData, ShiftCount, CRCflush, CRC, readram,
5
        Ethernet_TDp, Ethernet_TDm);
6
 
7
input clk20;    // a 20MHz clock (this code won't work with a different frequency)
8
input [7:0] pkt_data;
9
output [10:0] rdaddress;
10
input SendingPacket;
11
output ShiftData;
12
output [3:0] ShiftCount;
13
input CRCflush;
14
input CRC;
15
output readram;
16
output Ethernet_TDp, Ethernet_TDm;      // the two differential 10BASE-T outputs
17
 
18
 
19
reg [10:0] rdaddress = 0;
20
reg [3:0] ShiftCount = 0;
21
wire readram = (ShiftCount == 15);
22
reg [7:0] ShiftData = 0;
23
reg [17:0] LinkPulseCount = 0;
24
reg LinkPulse = 0;
25
reg SendingPacketData = 0;
26
reg [2:0] idlecount = 0;
27
reg qo = 0;
28
reg qoe = 0;
29
reg Ethernet_TDp = 0;
30
reg Ethernet_TDm = 0;
31
 
32
 
33
//////////////////////////////////////////////////////////////////////
34
// 10BASE-T's magic
35
 
36
always @(posedge clk20) begin
37
        ShiftCount <= SendingPacket ? ShiftCount + 1 : 15;
38
        if (ShiftCount == 15)
39
                rdaddress <= SendingPacket ? rdaddress + 1 : 0;
40
        if (ShiftCount[0])
41
                ShiftData <= readram ? pkt_data : {1'b0, ShiftData[7:1]};
42
end
43
 
44
// generate the NLP
45
always @(posedge clk20) begin
46
        LinkPulseCount <= SendingPacket ? 0 : LinkPulseCount + 1;
47
        LinkPulse <= &LinkPulseCount[17:1];
48
end
49
 
50
wire dataout = CRCflush ? CRC : ShiftData[0];
51
 
52
// TP_IDL, shift-register and manchester encoder
53
always @(posedge clk20) begin
54
        SendingPacketData <= SendingPacket;
55
        if (SendingPacketData)
56
                idlecount <= 0;
57
        else if (~&idlecount)
58
                idlecount <= idlecount + 1;
59
        qo <= SendingPacketData ? ~dataout ^ ShiftCount[0] : 1;
60
        qoe <= SendingPacketData | LinkPulse | (idlecount < 6);
61
        Ethernet_TDp <= (qoe ? qo : 1'b0);
62
        Ethernet_TDm <= (qoe ? ~qo : 1'b0);
63
end
64
 
65
endmodule

powered by: WebSVN 2.1.0

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