5 //-------------------- Instantiate Xilinx glbl module ----------------------
\r
6 // - this is needed to get ModelSim to work because e.g. I/O buffer models
\r
7 // refer directly to glbl.GTS and similar signals
\r
11 xlnx_glbl glbl( .GSR( GSR ), .GTS( GTS ) );
\r
13 reg VLOG_ExitSignal = 0;
\r
17 //-------------------------------------------------------------------------
\r
29 //--- 10/100/1000BASE-T Ethernet PHY (MII/GMII)
\r
37 wire PHY_GTX_CLK; // GMII only
\r
51 reg [1:4] Button = 4'b0000;
\r
53 //-------------------------------------------------------------------------
\r
54 // Local declarations
\r
55 //-------------------------------------------------------------------------
\r
57 //-------------------------------------------------------------------------
\r
58 // Instantiation of sub-modules
\r
59 //-------------------------------------------------------------------------
\r
64 .Reset_n ( Reset_n ),
\r
65 .Clk_100M( Clk_100M ),
\r
66 .Clk_125M( Clk_125M ),
\r
68 .RS232_TXD( RS232_TXD ),
\r
69 .RS232_RXD( RS232_RXD ),
\r
71 .USB_TXD( USB_TXD ),
\r
72 .USB_RXD( USB_RXD ),
\r
74 //--- 10/100/1000BASE-T Ethernet PHY (MII/GMII)
\r
75 .PHY_RESET_n( PHY_RESET_n ),
\r
77 .PHY_RXC ( PHY_RXC ),
\r
78 .PHY_RXD ( PHY_RXD ),
\r
79 .PHY_RXDV( PHY_RXDV ),
\r
80 .PHY_RXER( PHY_RXER ),
\r
82 .PHY_GTX_CLK( PHY_GTX_CLK ), // GMII only
\r
83 .PHY_TXC ( PHY_TXC ),
\r
84 .PHY_TXD ( PHY_TXD ),
\r
85 .PHY_TXEN ( PHY_TXEN ),
\r
86 .PHY_TXER ( PHY_TXER ),
\r
88 .PHY_COL( PHY_COL ),
\r
89 .PHY_CRS( PHY_CRS ),
\r
91 .PHY_MDC ( PHY_MDC ),
\r
92 .PHY_MDIO( PHY_MDIO ),
\r
99 //-------------------------------------------------------------------------
\r
100 // MII/GMII Ethernet PHY model
\r
102 reg [2:0] Speed = 3'b000;
\r
105 .Gtx_clk( PHY_GTX_CLK ),
\r
106 .Rx_clk ( PHY_RXC ),
\r
107 .Tx_clk ( PHY_TXC ),
\r
108 .Tx_er ( PHY_TXER ),
\r
109 .Tx_en ( PHY_TXEN ),
\r
111 .Rx_er ( PHY_RXER ),
\r
112 .Rx_dv ( PHY_RXDV ),
\r
120 //-------------------------------------------------------------------------
\r
121 // Generate all clocks & reset
\r
122 //-------------------------------------------------------------------------
\r
124 // Core master clock (100 MHz)
\r
135 // GMII master clock (125 MHz)
\r
154 //--- Emulate UART Transmitter --------------------------------------------
\r
156 parameter PRESCALER_16X = 3;
\r
161 reg [1023:0] TxMsg;
\r
165 always @( negedge Reset_n or posedge Clk_100M )
\r
178 if ( Prescaler == ((PRESCALER_16X + 1)*16 -1) )
\r
181 Prescaler <= Prescaler + 1;
\r
183 if ( Prescaler==0 )
\r
189 begin // Send start bit!
\r
190 TxBit = (TxLen-1)*8;
\r
197 1: // Send next data bit
\r
199 // Send next data bit
\r
200 TXD = TxMsg[ TxBit ];
\r
202 if ( (TxBit % 8)==0 )
\r
203 // Next send two stop bits
\r
207 2: // First of two stop bits
\r
213 3: // Second of two stop bits
\r
218 // Done with transmission!
\r
225 assign RS232_RXD = TXD;
\r
226 assign USB_RXD = 1;
\r
228 //--- Send commands to the DUT --------------------------------------------
\r
233 while ( ~Reset_n ) #10;
\r
235 // Wait a couple of clock edges before continuing to allow
\r
236 // internal logic to get out of reset
\r
238 @( posedge Clk_100M );
\r
240 // Wait for the "READY" message to complete transmission
\r
245 TxMsg = "W 0022 0002 ";
\r
248 @( posedge Clk_100M );
\r
252 TxMsg = "W 8000 8003 ";
\r
255 @( posedge Clk_100M );
\r
259 TxMsg = "W 8001 0011 ";
\r
262 @( posedge Clk_100M );
\r
266 TxMsg = "W 8002 1234 ";
\r
269 @( posedge Clk_100M );
\r
273 TxMsg = "W 8003 5678 ";
\r
276 @( posedge Clk_100M );
\r
280 TxMsg = "W 8004 9ABC ";
\r
283 @( posedge Clk_100M );
\r
287 TxMsg = "W 8005 DEF0 ";
\r
290 @( posedge Clk_100M );
\r
294 TxMsg = "W 8006 C5C0 ";
\r
297 @( posedge Clk_100M );
\r
301 TxMsg = "W 8007 BABE ";
\r
304 @( posedge Clk_100M );
\r
311 @( posedge Clk_100M );
\r
316 TxMsg = "W 1000 0001 ";
\r
319 @( posedge Clk_100M );
\r
323 // Read back that PG has been enabled!
\r
327 @( posedge Clk_100M );
\r
338 //--- Directly accesses a register on the internal Wishbone bus, bypassing the UART interface
\r