data/full_repos/permissive/530013823/LuanVan-20210617T090538Z-001/LuanVan/rtl/rsinv_test/ippackage/ipsmacge/core/ipsmacge_txintf.v
data/verilator_xmls/17f45b76-46f1-46d7-8719-cfbc446baedd.xml
module ipsmacge_txintf
    (
     txrst_,
     txclk,

     txhdat,
     txldat,
     txhctl,
     txlctl,
     txherr,
     txlerr,

     igdat,
     igval,
     igen,
     iger,

     up_act,
     up_gmii,
     up_spd
     );


parameter DAT_DW = 8;
parameter MSP_DW = 2;

parameter MRESERVE = 2'b11,
          M1000    = 2'b10,
          M100     = 2'b01,
          M10      = 2'b00;










input               txrst_;
input               txclk;

input  [DAT_DW-1:0] igdat;
input               igval;
input               igen;
input               iger;

output [DAT_DW-1:0] txhdat;
output [DAT_DW-1:0] txldat;
output              txhctl;
output              txlctl;
output              txherr;
output              txlerr;

input [MSP_DW-1:0]  up_spd;
input               up_gmii;
input               up_act;


reg [DAT_DW-1:0]    txhdat;
reg [DAT_DW-1:0]    txldat;
reg                 txhctl;
reg                 txlctl;
reg                 txherr;
reg                 txlerr;





always @(posedge txclk or negedge txrst_)
    begin
    if (!txrst_)
        begin
        txhdat <= {DAT_DW{1'b0}};
        txldat <= {DAT_DW{1'b0}};
        txhctl <= 1'b0;
        txlctl <= 1'b0;
        txherr <= 1'b0;
        txlerr <= 1'b0;
        end
    else if (~up_act)
        begin
        txhdat <= {DAT_DW{1'b0}};
        txldat <= {DAT_DW{1'b0}};
        txhctl <= 1'b0;
        txlctl <= 1'b0;
        txherr <= 1'b0;
        txlerr <= 1'b0;
        end
    else 
        begin
        if (!up_gmii)
            begin
            txherr <= 1'b0;
            txlerr <= 1'b0;

            case (up_spd)
                MRESERVE:
                    begin
                    txhdat <= {DAT_DW{1'b0}};
                    txldat <= {DAT_DW{1'b0}};
                    txhctl <= 1'b0;
                    txlctl <= 1'b0;
                    end
                M1000:
                    begin
                    txhdat <= {4'd0, igdat [3:0]};
                    txldat <= {4'd0, igdat [7:4]};
                    txhctl <= igen;
                    txlctl <= igen ^ iger;
                    end
                default:
                    begin
                    txhdat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txldat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txhctl <= igen;
                    txlctl <= igen ^ iger;
                    end
            endcase
            end
        else
            begin   
            case (up_spd)
                MRESERVE:
                    begin
                    txhdat <= {DAT_DW{1'b0}};
                    txldat <= {DAT_DW{1'b0}};   
                    txhctl <= 1'b0;
                    txlctl <= 1'b0;
                    txherr <= 1'b0;
                    txlerr <= 1'b0;
                    end
                M1000:
                    begin
                    txhdat <= igdat;
                    txldat <= igdat;
                    txhctl <= igen;
                    txlctl <= igen;
                    txherr <= iger;
                    txlerr <= iger;
                    end
                default:
                    begin
                    txhdat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txldat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txhctl <= igen;
                    txlctl <= igen;
                    txherr <= iger;
                    txlerr <= iger;
                    end
            endcase
            end
        end
    end

endmodule
module ipsmacge_txintf
    (
     txrst_,
     txclk,

     txhdat,
     txldat,
     txhctl,
     txlctl,
     txherr,
     txlerr,

     igdat,
     igval,
     igen,
     iger,

     up_act,
     up_gmii,
     up_spd
     );



parameter DAT_DW = 8;
parameter MSP_DW = 2;

parameter MRESERVE = 2'b11,
          M1000    = 2'b10,
          M100     = 2'b01,
          M10      = 2'b00;










input               txrst_;
input               txclk;

input  [DAT_DW-1:0] igdat;
input               igval;
input               igen;
input               iger;

output [DAT_DW-1:0] txhdat;
output [DAT_DW-1:0] txldat;
output              txhctl;
output              txlctl;
output              txherr;
output              txlerr;

input [MSP_DW-1:0]  up_spd;
input               up_gmii;
input               up_act;


reg [DAT_DW-1:0]    txhdat;
reg [DAT_DW-1:0]    txldat;
reg                 txhctl;
reg                 txlctl;
reg                 txherr;
reg                 txlerr;





always @(posedge txclk or negedge txrst_)
    begin
    if (!txrst_)
        begin
        txhdat <= {DAT_DW{1'b0}};
        txldat <= {DAT_DW{1'b0}};
        txhctl <= 1'b0;
        txlctl <= 1'b0;
        txherr <= 1'b0;
        txlerr <= 1'b0;
        end
    else if (~up_act)
        begin
        txhdat <= {DAT_DW{1'b0}};
        txldat <= {DAT_DW{1'b0}};
        txhctl <= 1'b0;
        txlctl <= 1'b0;
        txherr <= 1'b0;
        txlerr <= 1'b0;
        end
    else 
        begin
        if (!up_gmii)
            begin
            txherr <= 1'b0;
            txlerr <= 1'b0;

            case (up_spd)
                MRESERVE:
                    begin
                    txhdat <= {DAT_DW{1'b0}};
                    txldat <= {DAT_DW{1'b0}};
                    txhctl <= 1'b0;
                    txlctl <= 1'b0;
                    end
                M1000:
                    begin
                    txhdat <= {4'd0, igdat [3:0]};
                    txldat <= {4'd0, igdat [7:4]};
                    txhctl <= igen;
                    txlctl <= igen ^ iger;
                    end
                default:
                    begin
                    txhdat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txldat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txhctl <= igen;
                    txlctl <= igen ^ iger;
                    end
            endcase
            end
        else
            begin   
            case (up_spd)
                MRESERVE:
                    begin
                    txhdat <= {DAT_DW{1'b0}};
                    txldat <= {DAT_DW{1'b0}};   
                    txhctl <= 1'b0;
                    txlctl <= 1'b0;
                    txherr <= 1'b0;
                    txlerr <= 1'b0;
                    end
                M1000:
                    begin
                    txhdat <= igdat;
                    txldat <= igdat;
                    txhctl <= igen;
                    txlctl <= igen;
                    txherr <= iger;
                    txlerr <= iger;
                    end
                default:
                    begin
                    txhdat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txldat <= igval ? {4'd0, igdat [3:0]} : {4'd0, igdat [7:4]};
                    txhctl <= igen;
                    txlctl <= igen;
                    txherr <= iger;
                    txlerr <= iger;
                    end
            endcase
            end
        end
    end

endmodule