//////////////////////////////////////////////////////////////////////////////// // Copyright (c) 2016-2020 xinshi, Inc. All rights reserved. //////////////////////////////////////////////////////////////////////////////// //Vendor: Hunan xinshi network //Version:1.1 //Filename: goe.v //Target Device: Altera //Dscription: Transmit pkt to port or cpu // 1)Just Transmit pkt / module goe #( parameter Local_id = 5 )( input clk, input rst_n, input [255:0] uda2goe_md, input [1039:0] uda2goe_pfv, //uda pkt waiting for transmit input uda2goe_data_wr, input [133:0] uda2goe_data, input uda2goe_valid_wr, input uda2goe_md_valid, output reg goe2uda_alf, //pkt waiting for transmit output reg pktout_data_wr, output reg [133:0] pktout_data, output reg pktout_data_valid_wr, output reg pktout_data_valid, input pktout_ready ); //*********************************** // Transport Pkt //*********************************** //assign pktout_data_valid = pktout_data_valid_wr; always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) begin goe2uda_alf <= 1'b1; end else begin goe2uda_alf <= ~pktout_ready; end end reg [1:0]state; localparam idle=2'b00, trans=2'b01; reg write_en; //assign gme2uke_alf = ~pktout_ready always @(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) begin pktout_data_wr <= 1'b0; pktout_data_valid_wr <= 1'b0; pktout_data <= 134'b0; pktout_data_valid<=1'b0; pktout_data_valid_wr<=1'b0; write_en<=1'b0; state<=idle; end else begin case(state) idle:begin pktout_data_wr <= 1'b0; pktout_data_valid_wr <= 1'b0; pktout_data <= 134'b0; pktout_data_valid<=1'b0; write_en<=1'b0; if(uda2goe_data_wr==1'b1 && uda2goe_data[133:132]==2'b01)begin write_en<=uda2goe_data[61]; pktout_data_wr <= ~uda2goe_data[61]; pktout_data <= uda2goe_data; state<=trans; end else begin state<=idle; end end trans:begin pktout_data_wr <= 1'b0; pktout_data_valid_wr <= 1'b0; pktout_data <= 134'b0; pktout_data_valid<=1'b0; if(uda2goe_data_wr==1'b1 && uda2goe_data[133:132]==2'b10)begin pktout_data_wr <= ~write_en; pktout_data <= uda2goe_data; pktout_data_valid <= ~write_en; pktout_data_valid_wr <= ~write_en; state<=idle; end else if(uda2goe_data_wr)begin pktout_data_wr <= ~write_en; pktout_data <= uda2goe_data; state<=trans; end else begin state<=trans; end end default:begin state<=idle;end endcase end end endmodule /********************************** Initial Inst goe goe( .clk(), .rst_n(), //uda module's pkt waiting for transmit .uda2goe_data_wr(), .uda2goe_data(), .uda2goe_valid_wr(), .uda2goe_valid(), .goe2uda_alf(), //transmit to up cpu .goe2up_data_wr(), .goe2up_data(), .goe2up_valid_wr(), .goe2up_valid(), .up2goe_alf(), //transmit to down port .goe2down_data_wr(), .goe2down_data(), .goe2down_valid_wr(), .goe2down_valid(), .down2goe_alf() ); **********************************/