module SmcDataMux #( parameter CmdRegWidth = 32, parameter AddrRegWidth= 12, parameter FifoNum = 7, parameter Fifo0WriteAddrL = 12'h0+12'h24, parameter Fifo0WriteAddrS = 12'h0+12'h26, parameter Fifo1WriteAddrL = 12'h50+12'h24, parameter Fifo1WriteAddrS = 12'h50+12'h26, parameter Fifo2WriteAddrL = 12'hF0+12'h24, parameter Fifo2WriteAddrS = 12'hF0+12'h26, parameter Fifo3WriteAddrL = 12'h140+12'h24, parameter Fifo3WriteAddrS = 12'h140+12'h26, parameter Fifo4WriteAddrL = 12'h190+12'h24, parameter Fifo4WriteAddrS = 12'h190+12'h26, parameter Fifo5WriteAddrL = 12'h1e0+12'h24, parameter Fifo5WriteAddrS = 12'h1e0+12'h26, parameter Fifo6WriteAddrL = 12'h230+12'h24, parameter Fifo6WriteAddrS = 12'h230+12'h26 ) ( input Clk_i, input Rst_i, input SmcVal_i, input [CmdRegWidth/2-1:0] SmcData_i, input [AddrRegWidth-1:0] SmcAddr_i, output reg ToRegMapVal_o, output reg [CmdRegWidth-1:0] ToRegMapData_o, output reg [AddrRegWidth-1:0] ToRegMapAddr_o, output reg [FifoNum-1:0] ToFifoVal_o, output reg [CmdRegWidth*FifoNum-1:0] ToFifoData_o ); //================================================================================ // REG/WIRE //================================================================================ //================================================================================ // ASSIGNMENTS //================================================================================ //================================================================================ // LOCALPARAMS //================================================================================ //================================================================================ // CODING //================================================================================ always @(posedge Clk_i or posedge Rst_i) begin if (Rst_i) begin ToRegMapVal_o <= 1'b0; ToRegMapData_o <= 32'h0; ToRegMapAddr_o <= 12'h0; ToFifoVal_o <= 7'h0; ToFifoData_o <= 32'h0; end else begin if (SmcAddr_i == Fifo0WriteAddrL||SmcAddr_i==Fifo1WriteAddrL||SmcAddr_i==Fifo2WriteAddrL||SmcAddr_i==Fifo3WriteAddrL||SmcAddr_i==Fifo4WriteAddrL||SmcAddr_i==Fifo5WriteAddrL||SmcAddr_i==Fifo6WriteAddrL||SmcAddr_i == Fifo0WriteAddrS||SmcAddr_i==Fifo1WriteAddrS||SmcAddr_i==Fifo2WriteAddrS||SmcAddr_i==Fifo3WriteAddrS||SmcAddr_i==Fifo4WriteAddrS||SmcAddr_i==Fifo5WriteAddrS||SmcAddr_i==Fifo6WriteAddrS) begin case(SmcAddr_i) Fifo0WriteAddrL: begin ToFifoVal_o[0] <= SmcVal_i; ToFifoData_o[32*0+:32] <= SmcData_i; end Fifo1WriteAddrL: begin ToFifoVal_o[1] <= SmcVal_i; ToFifoData_o[32*1-1+:32] <= SmcData_i; end Fifo2WriteAddrL: begin ToFifoVal_o[2] <= SmcVal_i; ToFifoData_o[32*2-1+:32] <= SmcData_i; end Fifo3WriteAddrL: begin ToFifoVal_o[3] <= SmcVal_i; ToFifoData_o[32*3-1+:32] <= SmcData_i; end Fifo4WriteAddrL: begin ToFifoVal_o[4] <= SmcVal_i; ToFifoData_o[32*4-1+:32] <= SmcData_i; end Fifo5WriteAddrL: begin ToFifoVal_o[5] <= SmcVal_i; ToFifoData_o[32*5-1+:32] <= SmcData_i; end Fifo6WriteAddrL: begin ToFifoVal_o[6] <= SmcVal_i; ToFifoData_o[32*6-1+:32] <= SmcData_i; end endcase end else begin ToRegMapVal_o <= SmcVal_i; ToRegMapData_o <= SmcData_i; ToRegMapAddr_o <= SmcAddr_i; end end end endmodule