lin-win-share/DA4008_V1.3/rtl/comm/dout_mux.v

80 lines
3.1 KiB
Verilog

//+FHDR--------------------------------------------------------------------------------------------------------
// Company:
//-----------------------------------------------------------------------------------------------------------------
// File Name : modout_mux.v
// Department :
// Author : PWY
// Author's Tel :
//-----------------------------------------------------------------------------------------------------------------
// Relese History
// Version Date Author Description
// 0.1 2024-05-13 PWY debug top-level
//-----------------------------------------------------------------------------------------------------------------
// Keywords :
//
//-----------------------------------------------------------------------------------------------------------------
// Parameter
//
//-----------------------------------------------------------------------------------------------------------------
// Purpose :
//
//-----------------------------------------------------------------------------------------------------------------
// Target Device:
// Tool versions:
//-----------------------------------------------------------------------------------------------------------------
// Reuse Issues
// Reset Strategy:
// Clock Domains:
// Critical Timing:
// Asynchronous I/F:
// Synthesizable (y/n):
// Other:
//-FHDR--------------------------------------------------------------------------------------------------------
module dout_mux #(
parameter PARALLEL = 64
)(
//system port
input clk // System Main Clock
,input rst_n // Spi Reset active low
//---------------from ctrl regfile------------------------------------
,input [2 :0] sel //3'h0: mix; 3'h1:enve_i; 3'h2:drag_q
// 3'h3: cos ; 3'h4: sin
//data0
,input [7:0] data0 [PARALLEL-1 : 0]
,input data0_vld
//data1
,input [7:0] data1 [PARALLEL-1 : 0]
,input data1_vld
//data2
,input [7:0] data2 [PARALLEL-1 : 0]
,input data2_vld
//mux out data
,output [7:0] mux_data [PARALLEL-1 : 0]
,output mux_data_vld
);
wire mux_data_vld_w = (sel == 3'd1) ? data0_vld:
(sel == 3'd2) ? data1_vld:
(sel == 3'd4) ? data2_vld:
1'b0 ;
sirv_gnrl_dffr #(1) mux_data_vld_dffr (mux_data_vld_w, mux_data_vld, clk, rst_n);
wire [7 :0] mux_data_w [PARALLEL-1 : 0];
genvar k;
generate
for(k = 0; k < PARALLEL; k = k + 1) begin
assign mux_data_w[k] = (sel == 3'd1) ? data0[k]:
(sel == 3'd2) ? data1[k]:
(sel == 3'd4) ? data2[k]:
32'd0 ;
sirv_gnrl_dffr #(8) mux_data_dffr (mux_data_w[k], mux_data[k], clk, rst_n);
end
endgenerate
endmodule