1 //**************************************************************************
\r
2 // *************************************************************************
\r
3 // * LATTICE SEMICONDUCTOR CONFIDENTIAL *
\r
4 // * PROPRIETARY NOTE *
\r
6 // * This software contains information confidential and proprietary *
\r
7 // * to Lattice Semiconductor Corporation. It shall not be reproduced *
\r
8 // * in whole or in part, or transferred to other documents, or disclosed *
\r
9 // * to third parties, or used for any purpose other than that for which *
\r
10 // * it was obtained, without the prior written consent of Lattice *
\r
11 // * Semiconductor Corporation. All rights reserved. *
\r
13 // *************************************************************************
\r
14 //**************************************************************************
\r
16 `timescale 1ns/100ps
\r
18 module sgmii_channel_smi (
\r
20 // Control Interface
\r
25 debug_link_timer_short,
\r
26 rx_compensation_err,
\r
46 disparity_cntl_out_8bi,
\r
48 serdes_recovered_clk,
\r
54 err_decode_mode_8bi,
\r
65 input rst_n ; // System Reset, Active Low
\r
66 input signal_detect ;
\r
67 input gbe_mode ; // GBE Mode (0=SGMII 1=GBE)
\r
68 input sgmii_mode ; // SGMII PCS Mode (0=MAC 1=PHY)
\r
69 input debug_link_timer_short ; // (0=NORMAL 1=SHORT)
\r
70 output rx_compensation_err; // Active high pulse indicating RX_CTC_FIFO either underflowed or overflowed
\r
72 input in_clk_mii ; // G/MII Transmit clock 2.5Mhz/25Mhz/125Mhz
\r
73 input [7:0] data_in_mii ; // G/MII Tx data
\r
74 input en_in_mii ; // G/MII data valid
\r
75 input err_in_mii ; // G/MII Tx error
\r
77 input out_clk_mii ; // G/MII Receice clock 2.5Mhz/25Mhz/125MHz
\r
78 output [7:0] data_out_mii ; // G/MII Rx data
\r
79 output dv_out_mii ; // G/MII Rx data valid
\r
80 output err_out_mii ; // G/MII Rx error
\r
81 output col_out_mii ; // G/MII collision detect
\r
82 output crs_out_mii ; // G/MII carrier sense detect
\r
84 output [7:0] data_out_8bi ; // 8BI Tx Data
\r
85 output kcntl_out_8bi ; // 8BI Tx Kcntl
\r
86 output disparity_cntl_out_8bi ; // 8BI Tx Kcntl
\r
88 input serdes_recovered_clk ;
\r
89 input [7:0] data_in_8bi ; // 8BI Rx Data
\r
90 input kcntl_in_8bi ; // 8BI Rx Kcntl
\r
91 input even_in_8bi ; // 8BI Rx Even
\r
92 input disp_err_in_8bi ; // 8BI Rx Disparity Error
\r
93 input cv_err_in_8bi ; // 8BI Rx Coding Violation Error
\r
94 input err_decode_mode_8bi ; // 8BI Error Decode Mode (0=NORMAL, 1=DECODE_MODE)
\r
96 input in_clk_gmii ; // GMII Transmit clock 125Mhz
\r
97 input out_clk_gmii ; // GMII Receive clock 125Mhz
\r
101 input [4:0] port_id;
\r
108 // Internal Signals
\r
110 wire mr_an_complete;
\r
112 wire [15:0] mr_lp_adv_ability;
\r
114 wire mr_main_reset;
\r
116 wire mr_restart_an;
\r
117 wire [15:0] mr_adv_ability;
\r
118 wire mr_loopback_enable;
\r
119 wire [1:0] mr_speed_selection;
\r
120 wire mr_power_down;
\r
122 wire mr_duplex_mode;
\r
124 wire mr_unidir_enable;
\r
127 wire [1:0] operational_rate;
\r
137 USER_NAME USER_NAME_U (
\r
140 .signal_detect (signal_detect),
\r
141 .gbe_mode (gbe_mode),
\r
142 .sgmii_mode (sgmii_mode),
\r
143 .debug_link_timer_short (debug_link_timer_short),
\r
144 .force_isolate (mr_isolate),
\r
145 .force_loopback (mr_loopback_enable),
\r
146 .force_unidir (mr_unidir_enable),
\r
147 .operational_rate (operational_rate),
\r
148 .rx_compensation_err (rx_compensation_err),
\r
151 .an_link_ok (an_link_ok),
\r
152 .tx_clk_125 (in_clk_gmii),
\r
153 .serdes_recovered_clk (serdes_recovered_clk),
\r
154 .rx_clk_125 (out_clk_gmii),
\r
160 .tx_clk_mii (in_clk_mii),
\r
161 .tx_d (data_in_mii),
\r
162 .tx_en (en_in_mii),
\r
163 .tx_er (err_in_mii),
\r
166 .rx_clk_mii (out_clk_mii),
\r
167 .rx_d (data_out_mii),
\r
168 .rx_dv (dv_out_mii),
\r
169 .rx_er (err_out_mii),
\r
170 .col (col_out_mii),
\r
171 .crs (crs_out_mii),
\r
174 .tx_data (data_out_8bi),
\r
175 .tx_kcntl (kcntl_out_8bi),
\r
176 .tx_disparity_cntl (disparity_cntl_out_8bi),
\r
180 .rx_data (data_in_8bi),
\r
181 .rx_kcntl (kcntl_in_8bi),
\r
182 .rx_even (even_in_8bi),
\r
183 .rx_disp_err (disp_err_in_8bi),
\r
184 .rx_cv_err (cv_err_in_8bi),
\r
185 .rx_err_decode_mode (err_decode_mode_8bi),
\r
187 // Management Interface I/O
\r
188 .mr_adv_ability (mr_adv_ability),
\r
189 .mr_an_enable (mr_an_enable),
\r
190 .mr_main_reset (mr_main_reset),
\r
191 .mr_restart_an (mr_restart_an),
\r
193 .mr_an_complete (mr_an_complete),
\r
194 .mr_lp_adv_ability (mr_lp_adv_ability),
\r
195 .mr_page_rx (mr_page_rx)
\r
200 // SMI Register Interface for SGMII IP Core
\r
201 register_interface_smi ri (
\r
205 .gbe_mode (gbe_mode),
\r
206 .sgmii_mode (sgmii_mode),
\r
212 .mdout_en (mdout_en),
\r
213 .port_id (port_id),
\r
215 // Register Outputs
\r
216 .mr_main_reset (mr_main_reset),
\r
217 .mr_loopback_enable (mr_loopback_enable),
\r
218 .mr_speed_selection (mr_speed_selection),
\r
219 .mr_an_enable (mr_an_enable),
\r
220 .mr_power_down (mr_power_down),
\r
221 .mr_isolate (mr_isolate),
\r
222 .mr_restart_an (mr_restart_an),
\r
223 .mr_duplex_mode (mr_duplex_mode),
\r
224 .mr_col_test (mr_col_test),
\r
225 .mr_unidir_enable (mr_unidir_enable),
\r
227 .mr_adv_ability (mr_adv_ability),
\r
230 .mr_stat_1000base_x_fd (1'b1), // SUPPORTED
\r
231 .mr_stat_1000base_x_hd (1'b0),
\r
232 .mr_stat_1000base_t_fd (1'b0),
\r
233 .mr_stat_1000base_t_hd (1'b0),
\r
235 .mr_stat_100base_t4 (1'b0),
\r
236 .mr_stat_100base_x_fd (1'b0),
\r
237 .mr_stat_100base_x_hd (1'b0),
\r
238 .mr_stat_10mbps_fd (1'b0),
\r
239 .mr_stat_10mbps_hd (1'b0),
\r
240 .mr_stat_100base_t2_fd (1'b0),
\r
241 .mr_stat_100base_t2_hd (1'b0),
\r
243 .mr_stat_extended_stat (1'b1), // SUPPORTED
\r
244 .mr_stat_unidir_able (mr_unidir_enable),
\r
245 .mr_stat_preamb_supr (1'b0),
\r
246 .mr_stat_an_complete (mr_an_complete),
\r
247 .mr_stat_remote_fault (1'b0),
\r
248 .mr_stat_an_able (1'b1), // SUPPORTED
\r
249 .mr_stat_link_stat (an_link_ok),
\r
250 .mr_stat_jab_det (1'b0),
\r
251 .mr_stat_extended_cap (1'b0),
\r
253 .mr_page_rx (mr_page_rx),
\r
254 .mr_lp_adv_ability (mr_lp_adv_ability)
\r
259 // (G)MII Rate Resolution for SGMII IP Core
\r
260 rate_resolution rate_resolution (
\r
261 .gbe_mode (gbe_mode),
\r
262 .sgmii_mode (sgmii_mode),
\r
263 .an_enable (mr_an_enable),
\r
264 .advertised_rate (mr_adv_ability[11:10]),
\r
265 .link_partner_rate (mr_lp_adv_ability[11:10]),
\r
266 .non_an_rate (mr_speed_selection), // speed selected when auto-negotiation disabled
\r
268 .operational_rate (operational_rate)
\r
275 // Bidirectional Assignments
\r
276 assign mdio = mdout_en ? mdout : 1'bz; // MDIO Output
\r
277 assign mdin = mdio; // MDIO Input
\r