This repository has been archived on 2024-01-14. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
vivado-202401/projects/duifei/duifei_online_acq_par/rtl/phase_compensate.v
T

197 lines
7.7 KiB
Verilog
Executable File

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2023/05/16 02:00:43
// Design Name:
// Module Name: phase_compensate
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module phase_compensate(
input clk ,
input rst ,
input [11:0] vio_sin_0 ,
input [11:0] vio_sin_1 ,
input [11:0] vio_sin_2 ,
input [11:0] vio_sin_3 ,
input [11:0] vio_cos_0 ,
input [11:0] vio_cos_1 ,
input [11:0] vio_cos_2 ,
input [11:0] vio_cos_3 ,
input [11:0] din_i_0 ,
input [11:0] din_i_1 ,
input [11:0] din_i_2 ,
input [11:0] din_i_3 ,
input [11:0] din_q_0 ,
input [11:0] din_q_1 ,
input [11:0] din_q_2 ,
input [11:0] din_q_3 ,
input [4:0] vio_trunc ,
output [15:0] dout_i ,
output [15:0] dout_q ,
output trunc_overflow
);
wire [63:0] dout_comp_0;
wire [63:0] dout_comp_1;
wire [63:0] dout_comp_2;
wire [63:0] dout_comp_3;
cmpy_12_12 cmpy_12_12_0 (
.aclk(clk), // input wire aclk
.s_axis_a_tvalid(1'd1), // input wire s_axis_a_tvalid
.s_axis_a_tdata({{4{vio_sin_0[11]}},vio_sin_0[11:0],{4{vio_cos_0[11]}},vio_cos_0[11:0]}), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(1'd1), // input wire s_axis_b_tvalid
.s_axis_b_tdata({{4{din_q_0[11]}},din_q_0[11:0],{4{din_i_0[11]}},din_i_0[11:0]}), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(dout_comp_0) // output wire [63 : 0] m_axis_dout_tdata
);
cmpy_12_12 cmpy_12_12_1 (
.aclk(clk), // input wire aclk
.s_axis_a_tvalid(1'd1), // input wire s_axis_a_tvalid
.s_axis_a_tdata({{4{vio_sin_1[11]}},vio_sin_1[11:0],{4{vio_cos_1[11]}},vio_cos_1[11:0]}), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(1'd1), // input wire s_axis_b_tvalid
.s_axis_b_tdata({{4{din_q_1[11]}},din_q_1[11:0],{4{din_i_1[11]}},din_i_1[11:0]}), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(dout_comp_1) // output wire [63 : 0] m_axis_dout_tdata
);
cmpy_12_12 cmpy_12_12_2 (
.aclk(clk), // input wire aclk
.s_axis_a_tvalid(1'd1), // input wire s_axis_a_tvalid
.s_axis_a_tdata({{4{vio_sin_2[11]}},vio_sin_2[11:0],{4{vio_cos_2[11]}},vio_cos_2[11:0]}), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(1'd1), // input wire s_axis_b_tvalid
.s_axis_b_tdata({{4{din_q_2[11]}},din_q_2[11:0],{4{din_i_2[11]}},din_i_2[11:0]}), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(dout_comp_2) // output wire [63 : 0] m_axis_dout_tdata
);
cmpy_12_12 cmpy_12_12_3 (
.aclk(clk), // input wire aclk
.s_axis_a_tvalid(1'd1), // input wire s_axis_a_tvalid
.s_axis_a_tdata({{4{vio_sin_3[11]}},vio_sin_3[11:0],{4{vio_cos_3[11]}},vio_cos_3[11:0]}), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(1'd1), // input wire s_axis_b_tvalid
.s_axis_b_tdata({{4{din_q_3[11]}},din_q_3[11:0],{4{din_i_3[11]}},din_i_3[11:0]}), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(dout_comp_3) // output wire [63 : 0] m_axis_dout_tdata
);
wire [11:0] dout_trunc_0i, dout_trunc_0q;
wire [11:0] dout_trunc_1i, dout_trunc_1q;
wire [11:0] dout_trunc_2i, dout_trunc_2q;
wire [11:0] dout_trunc_3i, dout_trunc_3q;
wire [11:0] trunc_overflow_0i, trunc_overflow_0q;
wire [11:0] trunc_overflow_1i, trunc_overflow_1q;
wire [11:0] trunc_overflow_2i, trunc_overflow_2q;
wire [11:0] trunc_overflow_3i, trunc_overflow_3q;
trunc_32bit_to_12bit trunc_32bit_to_12bit_0i(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_0[24]}},dout_comp_0[24:0]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_0i),
.trunc_overflow(trunc_overflow_0i)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_0q(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_0[56]}},dout_comp_0[56:32]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_0q),
.trunc_overflow(trunc_overflow_0q)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_1i(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_1[24]}},dout_comp_1[24:0]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_1i),
.trunc_overflow(trunc_overflow_1i)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_1q(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_1[56]}},dout_comp_1[56:32]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_1q),
.trunc_overflow(trunc_overflow_1q)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_2i(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_2[24]}},dout_comp_2[24:0]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_2i),
.trunc_overflow(trunc_overflow_2i)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_2q(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_2[56]}},dout_comp_2[56:32]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_2q),
.trunc_overflow(trunc_overflow_2q)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_3i(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_3[24]}},dout_comp_3[24:0]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_3i),
.trunc_overflow(trunc_overflow_3i)
);
trunc_32bit_to_12bit trunc_32bit_to_12bit_3q(
.clk(clk),
.rst(rst),
.trunc_32bit_in({{7{dout_comp_3[56]}},dout_comp_3[56:32]}),
.vio_trunc(vio_trunc),
.trunc_12bit_out(dout_trunc_3q),
.trunc_overflow(trunc_overflow_3q)
);
reg [15:0] data_i_combine = 16'd0;
reg [15:0] data_q_combine = 16'd0;
always @ (posedge clk) begin
if(rst) begin
data_i_combine[15:0] <= 16'd0;
data_q_combine[15:0] <= 16'd0;
end
else begin
data_i_combine[15:0] <= {{4{dout_trunc_0i[11]}},dout_trunc_0i[11:0]} + {{4{dout_trunc_1i[11]}},dout_trunc_1i[11:0]} + {{4{dout_trunc_2i[11]}},dout_trunc_2i[11:0]} + {{4{dout_trunc_3i[11]}},dout_trunc_3i[11:0]};
data_q_combine[15:0] <= {{4{dout_trunc_0q[11]}},dout_trunc_0q[11:0]} + {{4{dout_trunc_1q[11]}},dout_trunc_1q[11:0]} + {{4{dout_trunc_2q[11]}},dout_trunc_2q[11:0]} + {{4{dout_trunc_3q[11]}},dout_trunc_3q[11:0]};
end
end
assign dout_i[15:0] = data_i_combine[15:0];
assign dout_q[15:0] = data_q_combine[15:0];
assign trunc_overflow = trunc_overflow_3q || trunc_overflow_2q || trunc_overflow_1q || trunc_overflow_0q || trunc_overflow_3i || trunc_overflow_2i || trunc_overflow_1i || trunc_overflow_0i;
endmodule