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

Subversion Repositories turbo8051

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /turbo8051/trunk
    from Rev 36 to Rev 37
    Reverse comparison

Rev 36 → Rev 37

/rtl/gmac/mac/filelist_mac.f
6,7 → 6,6
g_cfg_mgmt.v
s2f_sync.v
g_md_intf.v
g_ad_fltr.v
g_deferral_rx.v
g_rx_top.v
g_mii_intf.v
/rtl/gmac/mac/g_mac_core.v
50,9 → 50,6
app_reset_n,
 
app_clk,
app_send_pause_i,
app_send_pause_active_o,
app_send_jam_i,
 
// Reg Bus Interface Signal
reg_cs,
127,9 → 124,6
// Application Clock Related Declaration
//-----------------------------------------------------------------------
input app_clk;
input app_send_pause_i;
output app_send_pause_active_o;
input app_send_jam_i;
 
// Conntrol Bus Sync with Application Clock
//---------------------------------
251,8 → 245,6
.rx_commit_wr (rx_commit_wr_o),
.commit_write_done (rx_commit_write_done_o),
.rx_rewind_wr (rx_rewind_wr_o),
//transistor interface
.rx2tx_pause_tx (rx2tx_pause_o),
//mii interface
.phy_rx_clk (phy_rx_clk),
.mi2rx_strt_rcv (mi2rx_strt_rcv),
271,17 → 263,12
.cf2rx_rx_ch_en (cf2rx_ch_en),
.cf2rx_strp_pad_en (cf2rx_strp_pad_en),
.cf2rx_snd_crc (cf2rx_snd_crc),
.cf2rx_pause_en (cf2rx_pause_en),
.cf2rx_rcv_runt_pkt_en (cf2rx_runt_pkt_en),
.cf_macmode (cf_mac_mode_o),
.cf2df_dfl_single_rx (cf2df_dfl_single_rx),
.ap2rx_rx_fifo_err (rx_fifo_error_i),
//A200 change Port added for crs based flow control
.phy_crs (phy_crs),
//A200 change crs flow control enable signal
.crs_flow_control_enable (cfg_crs_flow_ctrl_enb_i),
//A200 change pause detected pulse for counter
.pause_frame_detected ()
.phy_crs (phy_crs)
);
wire [4:0] cf2md_regad,cf2md_phyad;
382,14 → 369,11
 
wire [7:0] cf2df_dfl_single;
wire [47:0] cf_mac_sa;
wire [15:0] cf2tx_pause_quanta;
wire cf2tx_force_bad_fcs;
wire cf2tx_tstate_mode;
wire set_fifo_undrn;
g_tx_top U_tx_top (
.app_clk (app_clk) ,
.send_pause_active (app_send_pause_active_o),
.set_fifo_undrn (tx_set_fifo_undrn_o),
//Outputs
414,14 → 398,8
.phy_tx_en (phy_tx_en),
.phy_tx_er (phy_tx_er),
//application
.app_send_pause (app_send_pause_i),
//rx_top
.rx2tx_pause (rx2tx_pause_o),
//configuration
.cf2tx_tstate_mode (cf2tx_tstate_mode),
.cf2tx_ch_en (cf2tx_ch_en),
.cf2df_dfl_single (cf2df_dfl_single),
.cf2tx_pad_enable (cf2tx_pad_enable),
428,7 → 406,6
.cf2tx_append_fcs (cf2tx_append_fcs),
.cf_mac_mode (cf_mac_mode_o),
.cf_mac_sa (cf_mac_sa),
.cf2tx_pause_quanta (cf2tx_pause_quanta),
.cf2tx_force_bad_fcs (cf2tx_force_bad_fcs),
//FIFO data
517,10 → 494,8
 
// Config In
.cfg_uni_mac_mode_change_i (cfg_uni_mac_mode_change_i),
.cfg_crs_flow_ctrl_enb_i (cfg_crs_flow_ctrl_enb_i),
 
//CHANNEL enable
.cf2tx_tstate_mode (cf2tx_tstate_mode),
.cf2tx_ch_en (cf2tx_ch_en),
//CHANNEL CONTROL TX
.cf2df_dfl_single (cf2df_dfl_single),
532,14 → 507,10
.cf2rx_ch_en (cf2rx_ch_en),
.cf2rx_strp_pad_en (cf2rx_strp_pad_en),
.cf2rx_snd_crc (cf2rx_snd_crc),
.cf2rx_pause_en (cf2rx_pause_en),
.cf2rx_addrchk_en (),
.cf2rx_runt_pkt_en (cf2rx_runt_pkt_en),
.cf2af_broadcast_disable (cf2af_broadcast_disable),
.cf_mac_sa (cf_mac_sa),
.cfg_ip_sa (cfg_ip_sa),
.cfg_mac_filter (cfg_mac_filter),
.cf2tx_pause_quanta (cf2tx_pause_quanta),
.cf2tx_force_bad_fcs (cf2tx_force_bad_fcs),
//MDIO CONTROL & DATA
.cf2md_datain (cf2md_datain),
589,7 → 560,6
// Signal from Application to transmit JAM
.df2rx_dfl_dn (df2rx_dfl_dn),
.app_send_jam (app_send_jam_i),
// Inputs from Transmit FSM
.tx2mi_strt_preamble (tx2mi_strt_preamble),
/rtl/gmac/mac/g_rx_top.v
64,7 → 64,6
rx_commit_wr,
commit_write_done,
rx_rewind_wr,
rx2tx_pause_tx,
mi2rx_strt_rcv,
mi2rx_rcv_vld,
mi2rx_rx_byte,
77,7 → 76,6
cf2rx_rx_ch_en,
cf2rx_strp_pad_en,
cf2rx_snd_crc,
cf2rx_pause_en,
cf2df_dfl_single_rx,
cf2rx_rcv_runt_pkt_en,
cf_macmode,
85,11 → 83,7
df2rx_dfl_dn,
ap2rx_rx_fifo_err,
//A200 change Port added for crs based flow control
phy_crs,
//A200 change crs flow control enable signal
crs_flow_control_enable,
//A200 change pause detected pulse for counter
pause_frame_detected
phy_crs
);
 
input app_reset_n;
115,7 → 109,6
output rx_commit_wr;
output commit_write_done;
output rx_rewind_wr;
output rx2tx_pause_tx;
input mi2rx_strt_rcv;
input mi2rx_rcv_vld;
input [7:0] mi2rx_rx_byte;
128,7 → 121,6
input cf2rx_rx_ch_en;
input cf2rx_strp_pad_en;
input cf2rx_snd_crc;
input cf2rx_pause_en;
input cf2rx_rcv_runt_pkt_en;
input cf_macmode;
input [7:0] cf2df_dfl_single_rx;
138,11 → 130,7
 
//A200 change Port added for crs based flow control
input phy_crs;
//A200 change crs flow control enable signal
input crs_flow_control_enable;
 
//A200 change pause detected pulse for counter
output pause_frame_detected;
 
 
g_rx_fsm u_rx_fsm(
164,8 → 152,6
.rx2ap_commit_write(rx_commit_wr),
.rx2ap_rewind_write(rx_rewind_wr),
// To address filtering block
// Pause control to Tx block
.rx2tx_pause_tx(rx2tx_pause_tx),
.commit_write_done(commit_write_done),
// Global Signals
185,36 → 171,17
// Signal from CRC check block
.rc2rx_crc_ok(rc2rx_crc_ok),
// Signals from Address filtering block
.af2rx_pause_frame(af2rx_pause_frame),
// Signals from Config Management Block
.cf2rx_max_pkt_sz(cf2rx_max_pkt_sz),
.cf2rx_rx_ch_en(cf2rx_rx_ch_en),
.cf2rx_strp_pad_en(cf2rx_strp_pad_en),
.cf2rx_snd_crc(cf2rx_snd_crc),
.cf2rx_pause_en(cf2rx_pause_en),
.cf2rx_rcv_runt_pkt_en(cf2rx_rcv_runt_pkt_en),
.cf2rx_gigabit_xfr(cf_macmode),
//A200 change Port added for crs based flow control
.phy_crs(phy_crs),
//A200 change crs flow control enable signal
.crs_flow_control_enable(crs_flow_control_enable),
//A200 change pause detected pulse for counter
.pause_frame_detected(pause_frame_detected)
.phy_crs(phy_crs)
);
 
g_ad_fltr u_ad_fltr(
.phy_rx_clk(phy_rx_clk),
.rx_reset_n(rx_reset_n),
.app_clk(app_clk),
.scan_mode(scan_mode),
//MII Interface
.mi2af_rcv_vld(mi2rx_rcv_vld),
.mi2af_strt_rcv(mi2rx_strt_rcv),
.mi2af_end_rcv(mi2rx_end_rcv),
.mi2af_rx_data(mi2rx_rx_byte),
//RX_FSM Interface
.af2rf_pause_frame(af2rx_pause_frame)
);
g_rx_crc32 u_rx_crc32 (
// CRC Valid signal to rx_fsm
/rtl/gmac/mac/g_tx_top.v
55,7 → 55,6
***********************************************************************/
module g_tx_top(
app_clk,
send_pause_active,
set_fifo_undrn,
81,14 → 80,8
//MII interface
phy_tx_en,
phy_tx_er,
//application
app_send_pause,
//rx_top
rx2tx_pause,
//configuration
cf2tx_tstate_mode,
cf2tx_ch_en,
cf2df_dfl_single,
cf2tx_pad_enable,
95,7 → 88,6
cf2tx_append_fcs,
cf_mac_mode,
cf_mac_sa,
cf2tx_pause_quanta,
cf2tx_force_bad_fcs,
//FIFO data
app_tx_dt_in,
111,7 → 103,6
input tx_reset_n;
input tx_clk; // Transmit clock
input app_send_pause;
input [8:0] app_tx_dt_in;
input app_tx_fifo_empty;
input app_tx_rdy;
118,7 → 109,6
input phy_tx_en; // Transmit data Enable
input phy_tx_er; // Transmit Error
input cf2tx_tstate_mode; // OFN auth intf fix
input cf2tx_ch_en; // Transmit channel Enable
input [7:0] cf2df_dfl_single;
input cf2tx_pad_enable; // Padding Enabled
125,11 → 115,9
input cf2tx_append_fcs; // Append CRC to packets
input cf2tx_force_bad_fcs; // force bad fcs
input [47:0] cf_mac_sa; // MAC Source Address
input [15:0] cf2tx_pause_quanta; // Pause Quanta used when sending a pause frame
input cf_mac_mode; // Gigabit or 10/100
 
input rx2tx_pause;
input mi2tx_byte_ack; // Transmit byte ack from RMII
output tx_commit_read;
147,7 → 135,6
output tx_ch_en; // MANDAR
 
output send_pause_active; // condor fix
output set_fifo_undrn;// Description: At GMII Interface ,
// abug after a transmit fifo underun was found.
// The packet after a packet that
176,7 → 163,6
// Instantiate Transmit State machine block
g_tx_fsm U_tx_fsm(
.send_pause_active_out(send_pause_active), // condor fix
.app_clk(app_clk), // condor fix
.set_fifo_undrn(set_fifo_undrn), // E3C fix
 
203,19 → 189,14
.app_tx_fifo_empty(app_tx_fifo_empty),
//dfl and back off
.df2tx_dfl_dn(df2tx_dfl_dn),
.app_send_pause(app_send_pause),
//inputs from FCS
.tc2tx_fcs(tc2tx_fcs),
.cf2tx_tstate_mode(cf2tx_tstate_mode),
.cf2tx_ch_en(cf2tx_ch_en),
.cf2tx_pad_enable(cf2tx_pad_enable),
.cf2tx_append_fcs(cf2tx_append_fcs),
.cf_mac_mode(cf_mac_mode),
.cf_mac_sa(cf_mac_sa),
.cf2tx_pause_quanta(cf2tx_pause_quanta),
.cf2tx_force_bad_fcs(cf2tx_force_bad_fcs),
//RX pause frame received
.rx2tx_pause(rx2tx_pause),
//MII
.mi2tx_byte_ack(mi2tx_byte_ack),
.tx_clk(tx_clk),
/rtl/gmac/mac/g_mii_intf.v
94,7 → 94,6
cf_silent_mode,
 
// Signal from Application to transmit JAM
app_send_jam,
df2rx_dfl_dn,
 
// Inputs from Transmit FSM
152,7 → 151,6
input cf_mac_mode; // Mac Mode 0--> 10/100 Mode, 1--> 1000 Mode
input cf_chk_rx_dfl; // Check for Deferal
input cf_silent_mode; // PHY Inactive
input app_send_jam; // Send a Jam Sequence (From the Application)
input df2rx_dfl_dn; // Deferal Done in Rx Clock Domain
input tx2mi_strt_preamble; // Tx FSM indicates to MII to generate
// preamble on the line
179,8 → 177,6
/*** REG & WIRE DECLARATIONS FOR LOCAL SIGNALS ***************/
 
reg [4:0] tx_preamble_cnt_val;
reg [4:0] jam_count;
reg [4:0] jam_count_reg;
 
 
reg strt_rcv_in;
202,7 → 198,7
parameter mii_tx_idle_st = 4'd0, mii_tx_pre_st = 4'd1,
mii_tx_byte_st = 4'd2, mii_tx_end_st = 4'd3,
mii_tx_jam_st = 4'd4, mii_tx_nibble_st = 4'd5,
mii_tx_nibble_st = 4'd5,
mii_tx_nibble_end_st = 4'd6, mii_tx_dibit_st = 4'd7,
mii_tx_dibit_end_st = 4'd8;
 
209,7 → 205,6
reg [3:0] mii_tx_cur_st;
reg [3:0] mii_tx_nxt_st;
wire send_jam;
wire receive_detect;
wire pre_condition;
wire sfd_condition;
223,12 → 218,9
reg tx_ext_in;
reg tx_pre_in;
reg tx_sfd_in;
reg tx_jam_in;
reg tx_xfr_ack_in;
reg inc_preamble_cntr;
reg rst_preamble_cntr;
reg inc_jam_cntr;
reg rst_jam_cntr;
reg [1:0] tx_xfr_cnt, rx_xfr_cnt, tx_slot_xfr_cnt;
reg rx_dv;
reg rx_er;
308,8 → 300,8
 
always @(mii_tx_cur_st or tx2mi_strt_preamble or tx2mi_end_transmit or cf_mac_mode
or cf2mi_rmii_en or tx_preamble_cnt_val or byte_boundary_tx
or jam_count or tx_xfr_cnt or send_jam or receive_detect
or receive_detect_pulse or jam_count_reg or jam_count or cfg_uni_mac_mode_change)
or tx_xfr_cnt or receive_detect
or receive_detect_pulse or cfg_uni_mac_mode_change)
begin
mii_tx_nxt_st = mii_tx_cur_st;
318,11 → 310,8
tx_sfd_in = 1'b0;
tx_err_in = 1'b0;
tx_ext_in = 1'b0;
tx_jam_in = 1'b0;
inc_preamble_cntr = 1'b0;
rst_preamble_cntr = 1'b0;
inc_jam_cntr = 1'b0;
rst_jam_cntr = 1'b0;
tx_xfr_ack_in = 1'b0;
casex(mii_tx_cur_st) // synopsys parallel_case full_case
422,24 → 411,6
end
end*/
mii_tx_jam_st:
begin
if(jam_count == jam_count_reg)
begin
tx_en_in = 1'b1;
tx_jam_in = 1'b1;
rst_jam_cntr = 1'b1;
mii_tx_nxt_st = mii_tx_idle_st;
end
else
begin
tx_en_in = 1'b1;
tx_jam_in = 1'b1;
inc_jam_cntr = 1'b1;
mii_tx_nxt_st = mii_tx_jam_st;
end
end
 
mii_tx_end_st:
// This state checks for the end of transfer
// and extend for carrier extension
590,29 → 561,17
begin
if (cf_mac_mode)
phy_txd[7:0] <= (tx_pre_in) ? 8'b01010101 : ((tx_sfd_in) ?
8'b11010101 : ((tx_jam_in) ? 8'b11111111 :
((tx_ext_in) ? 8'b00001111: tx2mi_tx_byte)));
8'b11010101 : ((tx_ext_in) ? 8'b00001111: tx2mi_tx_byte));
else if (!cf_mac_mode && !cf2mi_rmii_en)
phy_txd[3:0] <= (tx_pre_in) ? 4'b0101 : ((tx_sfd_in) ?
4'b1101 : ((tx_jam_in) ? 4'b1111 : tx_nibble_in)) ;
4'b1101 : tx_nibble_in) ;
else if (!cf_mac_mode && cf2mi_rmii_en)
phy_txd[1:0] <= (tx_pre_in) ? 2'b01 : ((tx_sfd_in) ?
2'b11 : ((tx_jam_in) ? 2'b11 : tx_dibit_in)) ;
2'b11 : tx_dibit_in) ;
end
end
assign receive_detect_pulse = receive_detect && !d_receive_detect;
 
always @(posedge phy_tx_clk or negedge tx_reset_n)
begin
if(!tx_reset_n)
jam_count_reg <= 5'd0;
else if(cf_mac_mode)
jam_count_reg <= GMII_JAM_COUNT;
else if(cf2mi_rmii_en)
jam_count_reg <= RMII_JAM_COUNT;
else if(!cf2mi_rmii_en)
jam_count_reg <= MII_JAM_COUNT;
end
 
always @(posedge phy_tx_clk or negedge tx_reset_n)
begin
708,16 → 667,6
tx_preamble_cnt_val <= tx_preamble_cnt_val + 1;
end
// Jam Counter
always @(posedge phy_tx_clk or negedge tx_reset_n)
begin
if(!tx_reset_n)
jam_count <= 5'd0;
else if(rst_jam_cntr)
jam_count <= 5'd0;
else if(inc_jam_cntr)
jam_count <= jam_count + 1;
end
 
always @(posedge phy_rx_clk or negedge rx_reset_n)
1007,14 → 956,6
end
 
 
half_dup_dble_reg U_dble_reg0 (
//outputs
.sync_out_pulse(send_jam),
//inputs
.in_pulse(app_send_jam),
.dest_clk(phy_tx_clk),
.reset_n(tx_reset_n)
);
 
half_dup_dble_reg U_dble_reg1 (
//outputs
/rtl/gmac/mac/g_rx_fsm.v
72,8 → 72,6
rx2ap_commit_write,
rx2ap_rewind_write,
// To address filtering block
// Pause control to Tx block
rx2tx_pause_tx,
//commit
commit_write_done,
93,22 → 91,15
ap2rx_rx_fifo_err,
// Signal from CRC check block
rc2rx_crc_ok,
// Signals from Address filtering block
af2rx_pause_frame,
// Signals from Config Management Block
cf2rx_max_pkt_sz,
cf2rx_rx_ch_en,
cf2rx_strp_pad_en,
cf2rx_snd_crc,
cf2rx_pause_en,
cf2rx_rcv_runt_pkt_en,
cf2rx_gigabit_xfr,
//A200 change Port added for crs based flow control
phy_crs,
//A200 change crs flow control enable signal
crs_flow_control_enable,
//A200 change pause detected pulse for counter
pause_frame_detected
phy_crs
);
 
135,13 → 126,9
// in the FIFO has a error
// Ignore the packet and restart from the
// end of previous packet
output rx2tx_pause_tx; // pause frame detected pause transmit
output clr_rx_error_from_rx_fsm;
output commit_write_done;
 
output pause_frame_detected; //A200 change bringing out a pulse to count number
//pause frames received.
 
input reset_n; // reset from mac application interface
input phy_rx_clk; // Reference clock used for RX
160,8 → 147,6
input rc2rx_crc_ok; // CRC of the receiving packet is OK.
// Generated by CRC block
input af2rx_pause_frame; // Detected a pause frame
 
input [15:0] cf2rx_max_pkt_sz; // max packet size
input cf2rx_rx_ch_en; // Receive Enabled
169,7 → 154,6
input cf2rx_snd_crc; // Append CRC to the data
// ( This automatically means padding
// will be enabled)
input cf2rx_pause_en; // This is set when flow control is enabled
input cf2rx_rcv_runt_pkt_en; // Receive needs to receive
input cf2rx_gigabit_xfr;
input mi2rx_extend;
176,8 → 160,6
 
//A200 change Port added for crs based flow control
input phy_crs;
//A200 change crs flow control enable signal
input crs_flow_control_enable;
/******* WIRE & REG DECLARATION FOR INPUT AND OUTPUTS ********/
187,15 → 169,10
reg rx2ap_rx_fsm_wrt;
wire [31:0] rx_sts_dt;
reg [31:0] rx_sts;
wire rx2tx_pause_tx;
//Renamed to rx2tx_pause_tx_int as rx2tx_pause_tx is genrated in CRS
//condition also
reg rx2tx_pause_tx_int;
 
/*** REG & WIRE DECLARATIONS FOR LOCAL SIGNALS ***************/
reg commit_write;
reg rewind_write;
wire pause_dn;
wire look_at_length_field;
reg send_crc;
reg rcv_pad_data;
219,9 → 196,6
reg commit_write_done;
reg check_padding;
reg check_padding_in;
reg gen_pause_det;
reg pause_opcode_detected;
reg ld_pause_quanta_1,ld_pause_quanta_2;
reg [2:0] padding_len_reg;
reg [15:0] rcv_length_reg;
reg [15:0] length_counter;
228,10 → 202,6
reg [18:0] rx_fsm_cur_st;
reg [18:0] rx_fsm_nxt_st;
reg [15:0] pause_quanta;
reg [1:0] c_pause_ptr;
reg [15:0] pause_count;
reg [8:0] pause_quanta_count;
reg crc_stat_reg;
reg rx_runt_pkt_reg;
reg large_pkt_reg;
247,8 → 217,6
wire ld_buf,ld_buf1,ld_buf2,ld_buf3,ld_buf4;
reg lengthfield_error;
reg lengthfield_err_reg;
reg pause_frame_detected;
reg pause_seen;
reg addr_stat_chk;
reg clr_rx_error_from_rx_fsm;
266,11 → 234,7
rx_fsm_getpaddt_nib1_st = 19'b0000000000000100000,
rx_fsm_updstat_st = 19'b0000000000001000000,
rx_fsm_chkval_st = 19'b0000000000010000000,
rx_fsm_pausectrl_st = 19'b0000000000100000000,
rx_fsm_extend_st = 19'b0000000100000000000,
rx_fsm_pausequanta_byte1_st = 19'b0000001000000000000,
rx_fsm_pausequanta_byte2_st = 19'b0000010000000000000,
rx_fsm_wt4_pause_end_st = 19'b0000100000000000000;
rx_fsm_extend_st = 19'b0000000100000000000;
/***************** WIRE ASSIGNMENTS *************************/
wire [6:0] dec_pad_length;
353,17 → 317,6
assign adj_cf2rx_max_pkt_sz = cf2rx_max_pkt_sz;
 
 
always @(posedge phy_rx_clk or negedge reset_n) begin
if(!reset_n)
pause_opcode_detected <= 1'b0;
else
begin
if(rx_fsm_cur_st == rx_fsm_pausequanta_byte1_st)
pause_opcode_detected <= 1'b1;
else if(rx_fsm_cur_st == rx_fsm_idle_st)
pause_opcode_detected <= 1'b0;
end
end
// Following state machine is to receive nibbles from the RMII/MII
// block and packetize them to 32 bits with information of EOP and
370,16 → 323,15
// valid bytes. It also discards packets which are less than minimum
// frame size. It performs Address validity and Data validity.
always @(rx_fsm_cur_st or mi2rx_strt_rcv or rx_ch_en or cf2rx_strp_pad_en
or cf2rx_snd_crc or cf2rx_pause_en or look_at_length_field
or cf2rx_snd_crc or look_at_length_field
or mi2rx_rcv_vld or first_dword or rc2rx_crc_ok
or mi2rx_end_rcv or mi2rx_rx_byte or mi2rx_extend
or inc_length_counter or rcv_length_reg or commit_write_done
or crc_count or shift_counter or bytes_to_fifo
or af2rx_pause_frame or cf2rx_rcv_runt_pkt_en
or cf2rx_rcv_runt_pkt_en
or inc_rcv_byte_count or send_runt_packet
or pause_frame_detected or rcv_byte_count or first_dword
or rcv_byte_count or first_dword
or commit_condition or rx_fifo_full or ap2rx_rx_fifo_err )
//or pause_opcode_detected)
begin
rx_fsm_nxt_st = rx_fsm_cur_st;
set_tag1_flag = 1'b0;
400,18 → 352,13
gen_eop = 1'b0;
error = 1'b0;
byte_boundary= 1'b0;
gen_pause_det = 1'b0;
ld_pause_quanta_1 = 1'b0;
ld_pause_quanta_2 = 1'b0;
send_crc = 1'b0;
rcv_pad_data = 1'b0;
inc_shift_counter = 1'b0;
send_data_to_fifo = 1'b0;
lengthfield_error = 1'b0;
pause_seen = 1'b0;
addr_stat_chk = 1'b0;
clr_rx_error_from_rx_fsm = 1'b0;
//pause_opcode_detected = 1'b0;
 
 
casex(rx_fsm_cur_st) // synopsys parallel_case full_case
420,7 → 367,6
// Continues accepting data only if
// receive has been enabled
begin
//pause_opcode_detected = 1'b0;
if(ap2rx_rx_fifo_err)
begin
clr_rx_error_from_rx_fsm = 1'b1;
460,14 → 406,7
 
else if(mi2rx_rcv_vld && inc_rcv_byte_count[14:0] == 15'd6)
begin
if(cf2rx_pause_en && af2rx_pause_frame)
begin
pause_seen = 1;
rx_fsm_nxt_st = rx_fsm_lk4srcad_nib1_st;
rewind_write = 1'b1;
end
else
rx_fsm_nxt_st = rx_fsm_lk4srcad_nib1_st;
rx_fsm_nxt_st = rx_fsm_lk4srcad_nib1_st;
end
else
begin
501,9 → 440,6
end
else if(mi2rx_rcv_vld && inc_rcv_byte_count[14:0] == 15'd12)
begin
if(pause_frame_detected)
rx_fsm_nxt_st = rx_fsm_pausectrl_st;
else
rx_fsm_nxt_st = rx_fsm_lk4len_byte1_st;
end
else
788,122 → 724,6
rx_fsm_nxt_st = rx_fsm_idle_st;
end
rx_fsm_pausectrl_st:
// collecting odd nibbles of pause control
// in case of termination of packet
// or carrier sense error then generate eop
// and generate status
begin
if(mi2rx_end_rcv)
begin
set_incomplete_frm = 1'b1;
error = 1'b1;
gen_eop = 1'b1;
rx_fsm_nxt_st = rx_fsm_chkval_st;
if(cf2rx_rcv_runt_pkt_en)
commit_write = 1'b1;
else
rewind_write = 1'b1;
end
else if(mi2rx_rcv_vld)
case(inc_rcv_byte_count[1:0])
2'b01 : if(mi2rx_rx_byte != 8'h88)
rx_fsm_nxt_st = rx_fsm_wt4_pause_end_st;
2'b10 : if(mi2rx_rx_byte != 8'h08)
rx_fsm_nxt_st = rx_fsm_wt4_pause_end_st;
2'b11 : if(mi2rx_rx_byte != 8'h00)
rx_fsm_nxt_st = rx_fsm_wt4_pause_end_st;
2'b00 : begin
if(mi2rx_rx_byte != 8'h01)
rx_fsm_nxt_st = rx_fsm_wt4_pause_end_st;
else
rx_fsm_nxt_st = rx_fsm_pausequanta_byte1_st;
end
endcase
else
rx_fsm_nxt_st = rx_fsm_pausectrl_st;
end // case: rx_fsm_pausectrl_nib1_st
rx_fsm_pausequanta_byte1_st:
// This state collects the odd nibbles of the receive data
begin
//pause_opcode_detected = 1'b1;
if(ap2rx_rx_fifo_err)
begin
rewind_write = 1'b1;
rx_fsm_nxt_st = rx_fsm_idle_st;
end
else if(mi2rx_end_rcv)
begin
set_incomplete_frm = 1'b1;
error = 1'b1;
gen_eop = 1'b1;
rx_fsm_nxt_st = rx_fsm_chkval_st;
if(cf2rx_rcv_runt_pkt_en)
commit_write = 1'b1;
else
rewind_write = 1'b1;
end
else if(mi2rx_rcv_vld)
begin
ld_pause_quanta_1 = 1'b1;
rx_fsm_nxt_st = rx_fsm_pausequanta_byte2_st;
end
else
rx_fsm_nxt_st = rx_fsm_pausequanta_byte1_st;
end // case: rx_fsm_pausequanta_nib1_st
rx_fsm_pausequanta_byte2_st:
// This state collects the even nibbles of the receive data.
begin
//pause_opcode_detected = 1'b1;
if(ap2rx_rx_fifo_err)
begin
rewind_write = 1'b1;
rx_fsm_nxt_st = rx_fsm_idle_st;
end
else if(mi2rx_end_rcv)
begin
set_incomplete_frm = 1'b1;
error = 1'b1;
gen_eop = 1'b1;
rx_fsm_nxt_st = rx_fsm_chkval_st;
end
else if(mi2rx_rcv_vld )
begin
ld_pause_quanta_2 = 1'b1;
rx_fsm_nxt_st = rx_fsm_wt4_pause_end_st;
end
else
rx_fsm_nxt_st = rx_fsm_pausequanta_byte2_st;
end // case: rx_fsm_pausequanta_nib2_st
rx_fsm_wt4_pause_end_st:
begin
//pause_opcode_detected = 1'b1;
if(ap2rx_rx_fifo_err)
begin
rewind_write = 1'b1;
rx_fsm_nxt_st = rx_fsm_idle_st;
end
else if(mi2rx_end_rcv)
begin
if(rcv_byte_count[14:0] < 15'd64) // mfilardo
begin
lengthfield_error = 1;
rx_fsm_nxt_st = rx_fsm_idle_st;
end
else if(rc2rx_crc_ok)
begin
gen_pause_det = 1;
rx_fsm_nxt_st = rx_fsm_idle_st;
end
else
rx_fsm_nxt_st = rx_fsm_idle_st;
end
else
rx_fsm_nxt_st = rx_fsm_wt4_pause_end_st;
end // case: rx_fsm_wt4_pause_end_st
default:
begin
rx_fsm_nxt_st = rx_fsm_idle_st;
963,77 → 783,8
assign send_runt_packet = cf2rx_rcv_runt_pkt_en &&
(rcv_byte_count[15:8] == 8'd0 && rcv_byte_count[7:0] < 8'd64);
//
// Detect pause control frame
always @(posedge phy_rx_clk
or negedge reset_n)
begin
if(!reset_n)
pause_frame_detected <= 1'b0;
else if(mi2rx_end_rcv)
pause_frame_detected <= 1'b0;
else if(af2rx_pause_frame && cf2rx_pause_en && pause_seen)
pause_frame_detected <= 1'b1;
end // always @ (posedge phy_rx_clk...
// counter used for decrementing pause to transmit
always @(posedge phy_rx_clk
or negedge reset_n)
begin
if(!reset_n)
pause_count <= 16'b0;
else
begin
if(~cf2rx_pause_en)
pause_count <= 'h0;
else if(gen_pause_det & pause_opcode_detected)
pause_count <= pause_quanta;
//else if(pause_quanta_count == 9'd511)
else if( ( cf2rx_gigabit_xfr && (pause_quanta_count[5:0] == 6'd63 )) ||
(~cf2rx_gigabit_xfr && (pause_quanta_count[6:0] == 7'd127)) ) // mfilardo pause bit time fix. A pause quanta should be 512 bit times.
pause_count <= pause_count - 1;
end // else: !if(!reset_n)
end // always @ (posedge phy_rx_clk...
// counter used for decrementing pause quanta count
// which is 512 bit times
always @(posedge phy_rx_clk
or negedge reset_n)
begin
if(!reset_n)
pause_quanta_count <= 9'b0;
else
begin
if(pause_dn)
pause_quanta_count <= 9'b0;
else if(rx2tx_pause_tx_int)
pause_quanta_count <= pause_quanta_count + 1;
end // else: !if(!reset_n)
end
 
assign pause_dn = ~|pause_count & rx2tx_pause_tx_int;
//A200 change :
//When phy_crs input is asserted rx2tx_pause_tx which stops the
//frame transmission. Same function has been done on receiving pause
//frame so phy_crs is ored with pause receive signal when config is
//zero.
assign rx2tx_pause_tx = rx2tx_pause_tx_int |
(phy_crs & ~crs_flow_control_enable);
 
// Generation pause to tx_fsm
always @(posedge phy_rx_clk
or negedge reset_n)
begin
if(!reset_n)
rx2tx_pause_tx_int <= 1'b0;
else
begin
if(pause_dn)
rx2tx_pause_tx_int <= 1'b0;
else if(gen_pause_det)
rx2tx_pause_tx_int <= 1'b1;
end // else: !if(!reset_n)
end // always @ (posedge phy_rx_clk...
assign inc_rcv_byte_count = rcv_byte_count + 16'h1;
1354,34 → 1105,4
end // else: !if(!reset_n)
end // always @ (posedge phy_rx_clk...
// This is used load the pause quanta value on received
// pause control frame
always @(posedge phy_rx_clk or negedge reset_n)
begin
if(!reset_n)
begin
pause_quanta <= 16'b0;
c_pause_ptr <= 2'b0;
end // if (reset_n)
else if (rx_ch_en)
begin
if(mi2rx_strt_rcv)
begin
pause_quanta <= 16'b0;
c_pause_ptr <= 2'b0;
end
else
begin
if(ld_pause_quanta_1)
begin
pause_quanta[15:8] <= mi2rx_rx_byte;
end
else if(ld_pause_quanta_2)
begin
pause_quanta[7:0] <= mi2rx_rx_byte;
end
end // else: !if(mi2rx_strt_rcv)
end // else: !if(!reset_n)
end
endmodule
/rtl/gmac/mac/g_tx_fsm.v
86,25 → 86,17
//dfl and back
df2tx_dfl_dn,
//application
app_send_pause,
//FCS
tc2tx_fcs,
//Configuration
cf2tx_tstate_mode,
cf2tx_ch_en,
cf2tx_pad_enable,
cf2tx_append_fcs,
cf_mac_mode,
cf_mac_sa,
cf2tx_pause_quanta,
cf2tx_force_bad_fcs,
 
//RX pause
rx2tx_pause,
send_pause_active_out,
app_clk,
set_fifo_undrn,
124,7 → 116,6
 
input cf2tx_ch_en; //transmit enable application clock
input cf2tx_tstate_mode; //used for OFN's tstate enable on authentication interface
input app_tx_rdy; //tx fifo management, enough buffer to tx
input tx_end_frame; //Current DWORD marks end of frame
input [7:0] app_tx_dt_in; //double word data from the TX fifo mgmt
131,7 → 122,6
input app_tx_fifo_empty; //TX fifo is empty, if there were a data
//data request when app_tx_fifo_empty is asserted
//would result in FIFO underrun and error cond
input app_send_pause;
input [31:0] tc2tx_fcs;
//defferral inputs
145,14 → 135,7
//irrespective of this signal
input cf_mac_mode; // 1 is GMII 0 10/100
input [47:0] cf_mac_sa;
input [15:0] cf2tx_pause_quanta;
input cf2tx_force_bad_fcs;
//RX pause frame received
input rx2tx_pause; //in full duplex mode, the RX has received
//a pause frame, hence the TX is requested to
//hold transfers after the transmission of the
//current transfer. level signal
//from MII or RMII
input mi2tx_byte_ack; //MII interface accepted last byte
input tx_clk;
input tx_reset_n;
180,7 → 163,6
input phy_tx_en; // mfilardo ofn auth fix.
input app_clk;
output send_pause_active_out;
output set_fifo_undrn; // Description: At GMII Interface ,
// abug after a transmit fifo underun was found.
// The packet after a packet that
197,9 → 179,6
parameter dt_xfr_st = 12'b000000000001;
parameter dt_pad_st = 12'b000000000010;
parameter dt_fcs_st = 12'b000000000100;
parameter dt_pause_xfr_st = 12'b000010000000;
parameter dt_pause_pad_st = 12'b000100000000;
parameter dt_pause_fcs_st = 12'b001000000000;
wire tx_commit_read;
249,12 → 228,7
reg clr_first_dfl, set_first_dfl;
wire tx_lst_xfr;
wire tx_pause_sync;
reg inc_pause_index, clr_pause_index;
reg send_pause_active;
wire send_pause_sync;
reg [4:0] pause_index;
reg tx_lst_xfr_fcs_reg;
wire [15:0] tx_byte_cntr_int;
263,20 → 237,7
 
reg app_tx_rdy_dly;
 
reg send_pause_active_s1;
reg send_pause_active_out;
 
always @(posedge app_clk or negedge app_reset_n) begin
if (!app_reset_n) begin
send_pause_active_s1 <= 1'b0;
send_pause_active_out <= 1'b0;
end
else begin
send_pause_active_s1 <= send_pause_active;
send_pause_active_out <= send_pause_active_s1;
end
end
 
always @(posedge tx_clk or negedge tx_reset_n) begin
if (!tx_reset_n) begin
app_tx_rdy_dly <= 1'b0;
300,8 → 261,7
assign tx_lst_xfr = tx_lst_xfr_dt || tx_lst_xfr_fcs;
//To take care of 1 less byte count when fcs is not appended.
assign tx_byte_cntr_int = ((curr_dt_st == dt_fcs_st) ||
(curr_dt_st == dt_pause_fcs_st)) ? tx_byte_cntr : tx_byte_cntr + 16'h1;
assign tx_byte_cntr_int = (curr_dt_st == dt_fcs_st) ? tx_byte_cntr : tx_byte_cntr + 16'h1;
always @(posedge tx_clk or negedge tx_reset_n)
begin
325,15 → 285,6
half_dup_dble_reg U_dble_reg1 (
//outputs
.sync_out_pulse(tx_pause_sync),
//inputs
.in_pulse(rx2tx_pause),
.dest_clk(tx_clk),
.reset_n(tx_reset_n)
);
half_dup_dble_reg U_dble_reg2 (
//outputs
.sync_out_pulse(tx_ch_en),
344,14 → 295,6
);
half_dup_dble_reg U_dble_reg3 (
//outputs
.sync_out_pulse(send_pause_sync),
//inputs
.in_pulse(app_send_pause),
.dest_clk(tx_clk),
.reset_n(tx_reset_n)
);
 
half_dup_dble_reg U_dble_reg4 (
//outputs
391,11 → 334,11
always @(curr_dt_st or mi2tx_byte_ack or app_tx_fifo_empty
or tx_end_frame_reg or commit_read_sent
or tx_byte_cntr or tx_fcs_dn_reg or cf2tx_pad_enable or tx_ch_en
or df2tx_dfl_dn or tx_pause_sync or app_tx_rdy
or df2tx_dfl_dn or app_tx_rdy
or strt_fcs_reg
or tx_end_frame or tx_clk
or cf2tx_append_fcs
or app_tx_rdy_dly or send_pause_sync or pause_index or cur_idle_st_del)
or app_tx_rdy_dly or cur_idle_st_del)
begin
nxt_dt_st = curr_dt_st;
tx_fsm_rd = 0;
413,9 → 356,6
clr_fifo_undrn = 0;
clr_first_dfl = 0;
set_first_dfl = 0;
send_pause_active = 0;
inc_pause_index = 0;
clr_pause_index = 0;
case (curr_dt_st)
dt_idle_st :
begin
428,22 → 368,16
//in the case of full duplex
if (tx_ch_en) //config, channel enable
begin
if (send_pause_sync && df2tx_dfl_dn)
begin
// this ifdef is a bug fix. A pending pause can cause ifg to be 1 cycle short.
nxt_dt_st = dt_pause_xfr_st;
strt_preamble = 1;
end
else if (app_tx_rdy && df2tx_dfl_dn && !tx_pause_sync)
begin
tx_fsm_rd = 1;
nxt_dt_st = dt_xfr_st;
strt_preamble = 1;
end
else
nxt_dt_st = dt_idle_st;
if (app_tx_rdy && df2tx_dfl_dn)
begin
tx_fsm_rd = 1;
nxt_dt_st = dt_xfr_st;
strt_preamble = 1;
end
else
nxt_dt_st = dt_idle_st;
end // if (tx_ch_en)
else
else
nxt_dt_st = dt_idle_st;
end // case: dt_idle_st
587,60 → 521,8
end // else: !if(tx_fcs_dn)
end // case: dt_fcs_st
dt_pause_xfr_st :
begin
tx_byte_valid = 1;
send_pause_active = 1;
// Send the Pause Frame out
if (mi2tx_byte_ack)
begin
if (pause_index == 5'd18)
begin
clr_pause_index = 1;
nxt_dt_st = dt_pause_pad_st;
end
else
begin
inc_pause_index = 1;
nxt_dt_st = dt_pause_xfr_st;
end
end
else
begin
nxt_dt_st = dt_pause_xfr_st;
end
end // case: dt_pause_xfr_st
dt_pause_pad_st :
begin
// Append Padding to the Packet
tx_byte_valid = 1;
set_pad_byte = 1;
if (mi2tx_byte_ack && (tx_byte_cntr == CORE_PAYLOAD_SIZE - 1))
begin
strt_fcs = 1;
nxt_dt_st = dt_pause_fcs_st;
end // if (mi2tx_byte_ack &&
// (tx_byte_cntr == CORE_PAYLOAD_SIZE - 1))
else
nxt_dt_st = dt_pause_pad_st;
end // case: dt_pause_pad_st
dt_pause_fcs_st :
begin
// Wait for the FCS to be sent
if (tx_fcs_dn_reg)
begin
e_tx_sts_vld = 1;
nxt_dt_st = dt_idle_st;
end
else
begin
nxt_dt_st = dt_pause_fcs_st;
end
end // case: dt_pause_fcs_st
default :
begin
nxt_dt_st = dt_idle_st;
838,19 → 720,6
end // else: !if(!tx_reset_n)
end // always @ (posedge tx_clk or negedge tx_reset_n)
//Pause index counters
always @(posedge tx_clk or negedge tx_reset_n)
begin
if (!tx_reset_n)
pause_index <= 5'd0;
else
begin
if (clr_pause_index)
pause_index <= 5'd0;
else if (inc_pause_index)
pause_index <= pause_index + 1;
end // else: !if(!tx_reset_n)
end // always @ (posedge tx_clk or negedge tx_reset_n)
//Data mux, is controlled either by the mux select from the
//primary data flow or from the FCS mux select. When PAD
857,60 → 726,15
//data option is used bytes of all zeros are transmitted
always @(fcs_active or app_tx_dt_in or tc2tx_fcs
or send_bad_fcs or fcs_mux_select or
set_pad_byte or tx_fsm_dt_reg or send_pause_active or pause_index
or cf_mac_sa or cf2tx_pause_quanta)
set_pad_byte or tx_fsm_dt_reg )
begin
if (send_pause_active)
begin
case (pause_index)
5'd0 :
tx_byte = 8'h01;
5'd1 :
tx_byte = 8'h80;
5'd2 :
tx_byte = 8'hc2;
5'd3 :
tx_byte = 8'h00;
5'd4 :
tx_byte = 8'h00;
5'd5 :
tx_byte = 8'h01;
5'd6 :
tx_byte = cf_mac_sa[7:0];
5'd7 :
tx_byte = cf_mac_sa[15:8];
5'd8 :
tx_byte = cf_mac_sa[23:16];
5'd9 :
tx_byte = cf_mac_sa[31:24];
5'd10 :
tx_byte = cf_mac_sa[39:32];
5'd11 :
tx_byte = cf_mac_sa[47:40];
5'd12 :
tx_byte = 8'h88;
5'd13 :
tx_byte = 8'h08;
5'd14 :
tx_byte = 8'h00;
5'd15 :
tx_byte = 8'h01;
5'd16 :
tx_byte = cf2tx_pause_quanta[15:8];
5'd17 :
tx_byte = cf2tx_pause_quanta[7:0];
default :
tx_byte = 8'h00;
endcase // case (mux_select)
end
else if (!fcs_active && !set_pad_byte)
begin
if (!fcs_active && !set_pad_byte)
begin
//primary data flow
tx_byte = tx_fsm_dt_reg[7:0];
// $stop;
end // if (!fcs_active)
tx_byte = tx_fsm_dt_reg[7:0];
end // if (!fcs_active)
else if (fcs_active)
begin
begin
tx_byte = tc2tx_fcs[7:0];
case (fcs_mux_select)
3'd0 :
/rtl/gmac/mac/g_cfg_mgmt.v
85,7 → 85,6
cf2mi_rmii_en,
 
cfg_uni_mac_mode_change_i,
cfg_crs_flow_ctrl_enb_i,
 
//CHANNEL enable
cf2tx_ch_en,
99,18 → 98,13
cf2rx_ch_en,
cf2rx_strp_pad_en,
cf2rx_snd_crc,
cf2rx_pause_en,
cf2rx_addrchk_en,
cf2rx_runt_pkt_en,
cf2af_broadcast_disable,
cf_mac_sa,
cfg_ip_sa,
cfg_mac_filter,
 
cf2tx_pause_quanta,
cf2rx_max_pkt_sz,
cf2tx_force_bad_fcs,
cf2tx_tstate_mode,
//MDIO CONTROL & DATA
cf2md_datain,
cf2md_regad,
125,68 → 119,62
//---------------------------------
// Reg Bus Interface Signal
//---------------------------------
input reg_cs ;
input reg_wr ;
input [3:0] reg_addr ;
input [31:0] reg_wdata ;
input [3:0] reg_be ;
input reg_cs ;
input reg_wr ;
input [3:0] reg_addr ;
input [31:0] reg_wdata ;
input [3:0] reg_be ;
// Outputs
output [31:0] reg_rdata ;
output reg_ack ;
output [31:0] reg_rdata ;
output reg_ack ;
 
input rx_sts_vld ; // rx status valid indication, sync w.r.t app clk
input [7:0] rx_sts ; // rx status bits
input rx_sts_vld ; // rx status valid indication, sync w.r.t app clk
input [7:0] rx_sts ; // rx status bits
 
input tx_sts_vld ; // tx status valid indication, sync w.r.t app clk
input tx_sts ; // tx status bits
input tx_sts_vld ; // tx status valid indication, sync w.r.t app clk
input tx_sts ; // tx status bits
 
//List of Inputs
 
input app_clk, app_reset_n;
input md2cf_cmd_done; // Read/Write MDIO completed
input md2cf_status; // MDIO transfer error
input [15:0] md2cf_data; // Data from PHY for a
// mdio read access
input app_clk ;
input app_reset_n ;
input md2cf_cmd_done ; // Read/Write MDIO completed
input md2cf_status ; // MDIO transfer error
input [15:0] md2cf_data ; // Data from PHY for a
// mdio read access
//List of Outputs
output cf2mi_rmii_en; // Working in RMII when set to 1
output cf_mac_mode; // mac mode set this to 1 for 100Mbs/10Mbs
output cf_chk_rx_dfl; // Check for RX Deferal
output [47:0] cf_mac_sa;
output [31:0] cfg_ip_sa;
output [31:0] cfg_mac_filter;
output [15:0] cf2tx_pause_quanta;
output cf2tx_ch_en; //enable the TX channel
output cf_silent_mode; // PHY Inactive
output [7:0] cf2df_dfl_single; //number of clk ticks for dfl
output [7:0] cf2df_dfl_single_rx; //number of clk ticks for dfl
output cf2mi_rmii_en ; // Working in RMII when set to 1
output cf_mac_mode ; // mac mode set this to 1 for 100Mbs/10Mbs
output cf_chk_rx_dfl ; // Check for RX Deferal
output [47:0] cf_mac_sa ;
output [31:0] cfg_ip_sa ;
output [31:0] cfg_mac_filter ;
output cf2tx_ch_en ; //enable the TX channel
output cf_silent_mode ; //PHY Inactive
output [7:0] cf2df_dfl_single ; //number of clk ticks for dfl
output [7:0] cf2df_dfl_single_rx ; //number of clk ticks for dfl
output cf2tx_tstate_mode; //used for OFN's tstate enable on authentication interface
output cf2tx_pad_enable; //enable padding, < 64 bytes
output cf2tx_append_fcs; //append CRC for TX frames
output cf2rx_ch_en; //Enable RX channel
output cf2rx_strp_pad_en; //strip the padded bytes on RX frame
output cf2rx_snd_crc; //send FCS to application, else strip
//the FCS before sending to application
output cf2rx_pause_en; //enable flow control for full duplex using
//pause control frames
output cf2mi_loopback_en; // TX to RX loop back enable
output cf2rx_addrchk_en; //check the destination address, filter
output cf2rx_runt_pkt_en; //don't throw packets less than 64 bytes
output cf2af_broadcast_disable;
output [15:0] cf2md_datain;
output [4:0] cf2md_regad;
output [4:0] cf2md_phyad;
output cf2md_op;
output cf2md_go;
output cf2tx_pad_enable ; //enable padding, < 64 bytes
output cf2tx_append_fcs; //append CRC for TX frames
output cf2rx_ch_en; //Enable RX channel
output cf2rx_strp_pad_en; //strip the padded bytes on RX frame
output cf2rx_snd_crc; //send FCS to application, else strip
//the FCS before sending to application
output cf2mi_loopback_en; // TX to RX loop back enable
output cf2rx_runt_pkt_en; //don't throw packets less than 64 bytes
output [15:0] cf2md_datain;
output [4:0] cf2md_regad;
output [4:0] cf2md_phyad;
output cf2md_op;
output cf2md_go;
 
output [15:0] cf2rx_max_pkt_sz; //max rx packet size
output cf2tx_force_bad_fcs; //force bad fcs on tx
output [15:0] cf2rx_max_pkt_sz; //max rx packet size
output cf2tx_force_bad_fcs; //force bad fcs on tx
 
output cfg_uni_mac_mode_change_i;
output cfg_crs_flow_ctrl_enb_i;
output cfg_uni_mac_mode_change_i;
 
// Wire assignments for output signals
231,13 → 219,9
wire [7:0] mac_sa_out_4;
wire [7:0] mac_sa_out_5;
wire [7:0] mac_sa_out_6;
wire [7:0] pause_quanta_out_1;
wire [7:0] pause_quanta_out_2;
wire [47:0] cf_mac_sa;
wire [15:0] cf2tx_pause_quanta;
wire [15:0] cf2rx_max_pkt_sz;
wire cf2tx_force_bad_fcs;
wire cf2tx_tstate_mode;
reg force_bad_fcs;
reg cont_force_bad_fcs;
wire [31:0] mdio_stat_out;
411,7 → 395,6
assign cf2tx_ch_en = tx_cntrl_out_1[0];
assign cf2tx_pad_enable = tx_cntrl_out_1[3];
assign cf2tx_append_fcs = tx_cntrl_out_1[4];
assign cf2tx_tstate_mode = tx_cntrl_out_1[6];
assign cf2tx_force_bad_fcs = tx_cntrl_out_1[7];
 
assign reg_0[15:0] = {tx_cntrl_out_2,tx_cntrl_out_1};
421,7 → 404,6
// BIT[0] = Receive Channel Enable
// BIT[1] = Strip Padding from the Receive data
// BIT[2] = Send CRC along with data to the host
// BIT[3] = Enable pause frame detect
// BIT[4] = Check RX Deferral
// BIT[5] = Receive Address Check Enable
// BIT[6] = Receive Runt Packet
441,11 → 423,8
assign cf2rx_ch_en = rx_cntrl_out_1[0];
assign cf2rx_strp_pad_en = rx_cntrl_out_1[1];
assign cf2rx_snd_crc = rx_cntrl_out_1[2];
assign cf2rx_pause_en = rx_cntrl_out_1[3];
assign cf_chk_rx_dfl = rx_cntrl_out_1[4];
assign cf2rx_addrchk_en = rx_cntrl_out_1[5];
assign cf2rx_runt_pkt_en = rx_cntrl_out_1[6];
assign cf2af_broadcast_disable = rx_cntrl_out_1[7];
 
 
assign reg_1[7:0] = {rx_cntrl_out_1};
506,7 → 485,6
assign cf2mi_rmii_en = mac_mode_out[1];
assign cf2mi_loopback_en = mac_mode_out[2];
assign cf_silent_mode = mac_mode_out[5];
assign cfg_crs_flow_ctrl_enb_i = mac_mode_out[6];
assign cfg_uni_mac_mode_change_i = mac_mode_out[7];
 
 
712,37 → 690,11
);
 
assign reg_8[15:0] = cf2rx_max_pkt_sz[15:0];
//========================================================================//
//Pause Quanta Register 24
 
generic_register #(8,0 ) pause_quanta_reg_1 (
.we ({8{sw_wr_en_9 & wr_be[0] }}),
.data_in (reg_wdata[7:0] ),
.reset_n (app_reset_n ),
.clk (app_clk ),
//List of Outs
.data_out (pause_quanta_out_1[7:0] )
);
 
generic_register #(8,0 ) pause_quanta_reg_2 (
.we ({8{sw_wr_en_9 & wr_be[1] }}),
.data_in (reg_wdata[15:8] ),
.reset_n (app_reset_n ),
.clk (app_clk ),
//List of Outs
.data_out (pause_quanta_out_2[7:0] )
);
assign reg_9 = 0; // free
 
 
assign cf2tx_pause_quanta = {pause_quanta_out_1 , pause_quanta_out_2};
 
 
assign reg_9[15:0] = cf2tx_pause_quanta;
 
 
 
//-----------------------------------------------------------------------
// RX-Clock Static Counter Status Signal
//-----------------------------------------------------------------------

powered by: WebSVN 2.1.0

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