184 lines
5.8 KiB
Verilog
184 lines
5.8 KiB
Verilog
//+FHDR--------------------------------------------------------------------------------------------------------
|
|
// Company:
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// File Name : dacif.v
|
|
// Department :
|
|
// Author : PWY
|
|
// Author's Tel :
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// Relese History
|
|
// Version Date Author Description
|
|
// 0.2 2024-10-09 thfu modify port from 4 to 8 to fit
|
|
// 8 interpolation
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// Keywords :
|
|
//
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// Parameter
|
|
//
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// Purpose :
|
|
//
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// Target Device:
|
|
// Tool versions:
|
|
//-----------------------------------------------------------------------------------------------------------------
|
|
// Reuse Issues
|
|
// Reset Strategy:
|
|
// Clock Domains:
|
|
// Critical Timing:
|
|
// Asynchronous I/F:
|
|
// Synthesizable (y/n):
|
|
// Other:
|
|
//-FHDR--------------------------------------------------------------------------------------------------------
|
|
|
|
module lsdacif (
|
|
input clk
|
|
,input rstn
|
|
//DAC mode select
|
|
,input [1:0] dac_mode_sel //2'b00:NRZ mode;2'b01:Double data mode;
|
|
//2'b10:Double Double data mode;2'b11:reserve;
|
|
,input [1 :0] intp_mode //2'b00:x1;2'b01:x2,'b10:x4;other:reserve;
|
|
//mixer data input
|
|
,input [15:0] din0
|
|
,input [15:0] din1
|
|
,input [15:0] din2
|
|
,input [15:0] din3
|
|
,input [15:0] din4
|
|
,input [15:0] din5
|
|
,input [15:0] din6
|
|
,input [15:0] din7
|
|
|
|
//data output
|
|
,output [15:0] dout0
|
|
,output [15:0] dout1
|
|
,output [15:0] dout2
|
|
,output [15:0] dout3
|
|
,output [15:0] dout4
|
|
,output [15:0] dout5
|
|
,output [15:0] dout6
|
|
,output [15:0] dout7
|
|
|
|
);
|
|
|
|
////////////////////////////////////////////////////
|
|
// regs
|
|
////////////////////////////////////////////////////
|
|
reg [15:0] dout0_r ;
|
|
reg [15:0] dout1_r ;
|
|
reg [15:0] dout2_r ;
|
|
reg [15:0] dout3_r ;
|
|
reg [15:0] dout4_r ;
|
|
reg [15:0] dout5_r ;
|
|
reg [15:0] dout6_r ;
|
|
reg [15:0] dout7_r ;
|
|
|
|
////////////////////////////////////////////////////
|
|
// intp mode select
|
|
////////////////////////////////////////////////////
|
|
/*
|
|
always@(posedge clk) begin
|
|
case(intp_mode)
|
|
2'b00 : begin
|
|
mux_p_0 <= {~din0[15],din0[14:0]};
|
|
mux_p_1 <= 16'h0;
|
|
mux_p_2 <= 16'h0;
|
|
mux_p_3 <= 16'h0;
|
|
end
|
|
2'b01 : begin
|
|
mux_p_0 <= {~din0[15],din0[14:0]};
|
|
mux_p_1 <= {~din1[15],din1[14:0]};
|
|
mux_p_2 <= 16'h0 ;
|
|
mux_p_3 <= 16'h0 ;
|
|
end
|
|
2'b10 : begin
|
|
mux_p_0 <= {~din0[15],din0[14:0]} ;
|
|
mux_p_1 <= {~din1[15],din1[14:0]} ;
|
|
mux_p_2 <= {~din2[15],din2[14:0]} ;
|
|
mux_p_3 <= {~din3[15],din3[14:0]};
|
|
end
|
|
default : begin
|
|
mux_p_0 <= {~din0[15],din0[14:0]} ;
|
|
mux_p_1 <= {~din1[15],din1[14:0]} ;
|
|
mux_p_2 <= {~din2[15],din2[14:0]} ;
|
|
mux_p_3 <= {~din3[15],din3[14:0]} ;
|
|
end
|
|
endcase
|
|
end
|
|
*/
|
|
////////////////////////////////////////////////////
|
|
// mode select
|
|
////////////////////////////////////////////////////
|
|
always @(posedge clk or negedge rstn) begin
|
|
if(rstn == 1'b0) begin
|
|
dout0_r <= 16'h0;
|
|
dout1_r <= 16'h0;
|
|
dout2_r <= 16'h0;
|
|
dout3_r <= 16'h0;
|
|
dout4_r <= 16'h0;
|
|
dout5_r <= 16'h0;
|
|
dout6_r <= 16'h0;
|
|
dout7_r <= 16'h0;
|
|
|
|
end
|
|
else begin
|
|
case(dac_mode_sel)
|
|
2'b00 : begin
|
|
dout0_r <= {~din0[15],din0[14:0]};
|
|
dout1_r <= {~din1[15],din1[14:0]};
|
|
dout2_r <= {~din2[15],din2[14:0]};
|
|
dout3_r <= {~din3[15],din3[14:0]};
|
|
dout4_r <= {~din4[15],din4[14:0]};
|
|
dout5_r <= {~din5[15],din5[14:0]};
|
|
dout6_r <= {~din6[15],din6[14:0]};
|
|
dout7_r <= {~din7[15],din7[14:0]};
|
|
|
|
end
|
|
2'b01 : begin
|
|
dout0_r <= {~din0[15],din0[14:0]};
|
|
dout1_r <= {~din0[15],din0[14:0]};
|
|
dout2_r <= {~din1[15],din1[14:0]};
|
|
dout3_r <= {~din1[15],din1[14:0]};
|
|
dout4_r <= {~din2[15],din2[14:0]};
|
|
dout5_r <= {~din2[15],din2[14:0]};
|
|
dout6_r <= {~din3[15],din3[14:0]};
|
|
dout7_r <= {~din3[15],din3[14:0]};
|
|
|
|
end
|
|
2'b10 : begin
|
|
dout0_r <= {~din0[15],din0[14:0]};
|
|
dout1_r <= {~din0[15],din0[14:0]};
|
|
dout2_r <= {~din0[15],din0[14:0]};
|
|
dout3_r <= {~din0[15],din0[14:0]};
|
|
dout4_r <= {~din1[15],din1[14:0]};
|
|
dout5_r <= {~din1[15],din1[14:0]};
|
|
dout6_r <= {~din1[15],din1[14:0]};
|
|
dout7_r <= {~din1[15],din1[14:0]};
|
|
|
|
end
|
|
default : begin
|
|
dout0_r <= {~din0[15],din0[14:0]};
|
|
dout1_r <= {~din1[15],din1[14:0]};
|
|
dout2_r <= {~din2[15],din2[14:0]};
|
|
dout3_r <= {~din3[15],din3[14:0]};
|
|
dout4_r <= {~din4[15],din4[14:0]};
|
|
dout5_r <= {~din5[15],din5[14:0]};
|
|
dout6_r <= {~din6[15],din6[14:0]};
|
|
dout7_r <= {~din7[15],din7[14:0]};
|
|
|
|
end
|
|
endcase
|
|
end
|
|
end
|
|
|
|
assign dout0 = dout0_r ;
|
|
assign dout1 = dout1_r ;
|
|
assign dout2 = dout2_r ;
|
|
assign dout3 = dout3_r ;
|
|
assign dout4 = dout4_r ;
|
|
assign dout5 = dout5_r ;
|
|
assign dout6 = dout6_r ;
|
|
assign dout7 = dout7_r ;
|
|
|
|
endmodule
|