Archived
add phase compensate to duifei online acq
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
`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
|
||||
@@ -676,6 +676,50 @@ ad9361_phase_cal_coarse u_ad9361_phase_cal
|
||||
// <--------------------------------------------------------------------------->
|
||||
// <----------------------- insert receiver logic below ----------------------->
|
||||
// <--------------------------------------------------------------------------->
|
||||
// weighted summation
|
||||
wire [11:0] vio_sin_0;
|
||||
wire [11:0] vio_sin_1;
|
||||
wire [11:0] vio_sin_2;
|
||||
wire [11:0] vio_sin_3;
|
||||
wire [11:0] vio_cos_0;
|
||||
wire [11:0] vio_cos_1;
|
||||
wire [11:0] vio_cos_2;
|
||||
wire [11:0] vio_cos_3;
|
||||
|
||||
wire [4:0] vio_trunc;
|
||||
wire trunc_overflow;
|
||||
|
||||
wire [15:0] dout_i;
|
||||
wire [15:0] dout_q;
|
||||
|
||||
phase_compensate u_phase_compensate
|
||||
(
|
||||
.clk (sys_clk ), // input clk
|
||||
.rst (sys_rst ), // input rst
|
||||
.vio_sin_0 (vio_sin_0 ), // input [11:0] vio_sin_0
|
||||
.vio_sin_1 (vio_sin_1 ), // input [11:0] vio_sin_1
|
||||
.vio_sin_2 (vio_sin_2 ), // input [11:0] vio_sin_2
|
||||
.vio_sin_3 (vio_sin_3 ), // input [11:0] vio_sin_3
|
||||
.vio_cos_0 (vio_cos_0 ), // input [11:0] vio_cos_0
|
||||
.vio_cos_1 (vio_cos_1 ), // input [11:0] vio_cos_1
|
||||
.vio_cos_2 (vio_cos_2 ), // input [11:0] vio_cos_2
|
||||
.vio_cos_3 (vio_cos_3 ), // input [11:0] vio_cos_3
|
||||
.din_i_0 (rx_cal_ch1_i ), // input [11:0] din_i_0
|
||||
.din_i_1 (rx_cal_ch2_i ), // input [11:0] din_i_1
|
||||
.din_i_2 (rx_cal_ch3_i ), // input [11:0] din_i_2
|
||||
.din_i_3 (rx_cal_ch4_i ), // input [11:0] din_i_3
|
||||
.din_q_0 (rx_cal_ch1_q ), // input [11:0] din_q_0
|
||||
.din_q_1 (rx_cal_ch2_q ), // input [11:0] din_q_1
|
||||
.din_q_2 (rx_cal_ch3_q ), // input [11:0] din_q_2
|
||||
.din_q_3 (rx_cal_ch4_q ), // input [11:0] din_q_3
|
||||
.vio_trunc (vio_trunc ), // input [4:0] vio_trunc
|
||||
|
||||
.dout_i (dout_i ), // output [15:0] dout_i
|
||||
.dout_q (dout_q ), // output [15:0] dout_q
|
||||
.trunc_overflow (trunc_overflow ) // output trunc_overflow
|
||||
);
|
||||
|
||||
// online acquisition
|
||||
wire freq_comp_start ;
|
||||
wire freq_comp_auto_enable_vio;
|
||||
wire freq_comp_start_vio;
|
||||
@@ -952,7 +996,9 @@ ila_rx_data_cnt u_ila_rx
|
||||
.probe6 (rx_cal_ch4_i ), // input wire [11:0] probe6
|
||||
.probe7 (rx_cal_ch4_q ), // input wire [11:0] probe7
|
||||
.probe8 (vio_frequency_auto[11:0] ), // input wire [11:0] probe8
|
||||
.probe9 (chip_cnt ) // input wire [9:0] probe9
|
||||
.probe9 (chip_cnt ), // input wire [9:0] probe9
|
||||
.probe10(dout_i ), // input wire [15:0] probe10
|
||||
.probe11(dout_q ) // input wire [15:0] probe11
|
||||
);
|
||||
|
||||
ila_cal u_ila_cal
|
||||
@@ -1023,4 +1069,19 @@ ila_freq_comp u_ila_freq_comp
|
||||
.probe20(vio_frequency_auto[11:0] ) // input wire [11:0] probe20
|
||||
);
|
||||
|
||||
vio_phase_comp u_vio_phase_comp
|
||||
(
|
||||
.clk (sys_clk ), // input wire clk
|
||||
.probe_in0 (trunc_overflow ), // input wire [0 : 0] probe_in0
|
||||
.probe_out0 (vio_sin_0 ), // output wire [11 : 0] probe_out0
|
||||
.probe_out1 (vio_sin_1 ), // output wire [11 : 0] probe_out1
|
||||
.probe_out2 (vio_sin_2 ), // output wire [11 : 0] probe_out2
|
||||
.probe_out3 (vio_sin_3 ), // output wire [11 : 0] probe_out3
|
||||
.probe_out4 (vio_cos_0 ), // output wire [11 : 0] probe_out4
|
||||
.probe_out5 (vio_cos_1 ), // output wire [11 : 0] probe_out5
|
||||
.probe_out6 (vio_cos_2 ), // output wire [11 : 0] probe_out6
|
||||
.probe_out7 (vio_cos_3 ), // output wire [11 : 0] probe_out7
|
||||
.probe_out8 (vio_trunc ) // output wire [4 : 0] probe_out8
|
||||
);
|
||||
|
||||
endmodule
|
||||
|
||||
@@ -0,0 +1,515 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2023/03/01 10:44:50
|
||||
// Design Name:
|
||||
// Module Name: trunc_32bit_to_12bit
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module trunc_32bit_to_12bit(
|
||||
input clk,
|
||||
input rst,
|
||||
input [31:0] trunc_32bit_in,
|
||||
input [4:0] vio_trunc,
|
||||
|
||||
output reg [11:0] trunc_12bit_out = 12'd0,
|
||||
output reg trunc_overflow = 1'd0
|
||||
);
|
||||
|
||||
always @ (posedge clk) begin
|
||||
if(rst) begin
|
||||
trunc_12bit_out[11:0] <= 12'd0;
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
case(vio_trunc[4:0])
|
||||
5'd0:begin
|
||||
if(trunc_32bit_in[31:31] == 1'd1 || trunc_32bit_in[31:31] == 1'd0) begin
|
||||
if(trunc_32bit_in[31:31] == 1'd0 &&trunc_32bit_in[19] == 1'd1 && trunc_32bit_in[31:20] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[31:20] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:31] == 1'd1 && trunc_32bit_in[19:0] > 20'd524288) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[31:20] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[31:20];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd1:begin
|
||||
if(trunc_32bit_in[31:30] == 2'd3 || trunc_32bit_in[31:30] == 2'd0) begin
|
||||
if(trunc_32bit_in[31:30] == 2'd0 &&trunc_32bit_in[18] == 1'd1 && trunc_32bit_in[30:19] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[30:19] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:30] == 2'd3 && trunc_32bit_in[18:0] > 19'd262144) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[30:19] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[30:19];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd2:begin
|
||||
if(trunc_32bit_in[31:29] == 3'd7 || trunc_32bit_in[31:29] == 3'd0) begin
|
||||
if(trunc_32bit_in[31:29] == 3'd0 &&trunc_32bit_in[17] == 1'd1 && trunc_32bit_in[29:18] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[29:18] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:29] == 3'd7 && trunc_32bit_in[17:0] > 18'd131072) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[29:18] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[29:18];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd3:begin
|
||||
if(trunc_32bit_in[31:28] == 4'd15 || trunc_32bit_in[31:28] == 4'd0) begin
|
||||
if(trunc_32bit_in[31:28] == 4'd0 &&trunc_32bit_in[16] == 1'd1 && trunc_32bit_in[28:17] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[28:17] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:28] == 4'd15 && trunc_32bit_in[16:0] > 17'd65536) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[28:17] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[28:17];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd4:begin
|
||||
if(trunc_32bit_in[31:27] == 5'd31 || trunc_32bit_in[31:27] == 5'd0) begin
|
||||
if(trunc_32bit_in[31:27] == 5'd0 &&trunc_32bit_in[15] == 1'd1 && trunc_32bit_in[27:16] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[27:16] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:27] == 5'd31 && trunc_32bit_in[15:0] > 16'd32768) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[27:16] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[27:16];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd5:begin
|
||||
if(trunc_32bit_in[31:26] == 6'd63 || trunc_32bit_in[31:26] == 6'd0) begin
|
||||
if(trunc_32bit_in[31:26] == 6'd0 &&trunc_32bit_in[14] == 1'd1 && trunc_32bit_in[26:15] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[26:15] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:26] == 6'd63 && trunc_32bit_in[14:0] > 15'd16384) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[26:15] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[26:15];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd6:begin
|
||||
if(trunc_32bit_in[31:25] == 7'd127 || trunc_32bit_in[31:25] == 7'd0) begin
|
||||
if(trunc_32bit_in[31:25] == 7'd0 &&trunc_32bit_in[13] == 1'd1 && trunc_32bit_in[25:14] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[25:14] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:25] == 7'd127 && trunc_32bit_in[13:0] > 14'd8192) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[25:14] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[25:14];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd7:begin
|
||||
if(trunc_32bit_in[31:24] == 8'd255 || trunc_32bit_in[31:24] == 8'd0) begin
|
||||
if(trunc_32bit_in[31:24] == 8'd0 &&trunc_32bit_in[12] == 1'd1 && trunc_32bit_in[24:13] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[24:13] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:24] == 8'd255 && trunc_32bit_in[12:0] > 13'd4096) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[24:13] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[24:13];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd8:begin
|
||||
if(trunc_32bit_in[31:23] == 9'd511 || trunc_32bit_in[31:23] == 9'd0) begin
|
||||
if(trunc_32bit_in[31:23] == 9'd0 &&trunc_32bit_in[11] == 1'd1 && trunc_32bit_in[23:12] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[23:12] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:23] == 9'd511 && trunc_32bit_in[11:0] > 12'd2048) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[23:12] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[23:12];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd9:begin
|
||||
if(trunc_32bit_in[31:22] == 10'd1023 || trunc_32bit_in[31:22] == 10'd0) begin
|
||||
if(trunc_32bit_in[31:22] == 10'd0 &&trunc_32bit_in[10] == 1'd1 && trunc_32bit_in[22:11] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[22:11] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:22] == 10'd1023 && trunc_32bit_in[10:0] > 11'd1024) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[22:11] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[22:11];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd10:begin
|
||||
if(trunc_32bit_in[31:21] == 11'd2047 || trunc_32bit_in[31:21] == 11'd0) begin
|
||||
if(trunc_32bit_in[31:21] == 11'd0 &&trunc_32bit_in[9] == 1'd1 && trunc_32bit_in[21:10] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[21:10] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:21] == 11'd2047 && trunc_32bit_in[9:0] > 10'd512) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[21:10] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[21:10];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd11:begin
|
||||
if(trunc_32bit_in[31:20] == 12'd4095 || trunc_32bit_in[31:20] == 12'd0) begin
|
||||
if(trunc_32bit_in[31:20] == 12'd0 &&trunc_32bit_in[8] == 1'd1 && trunc_32bit_in[20:9] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[20:9] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:20] == 12'd4095 && trunc_32bit_in[8:0] > 9'd256) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[20:9] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[20:9];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd12:begin
|
||||
if(trunc_32bit_in[31:19] == 13'd8191 || trunc_32bit_in[31:19] == 13'd0) begin
|
||||
if(trunc_32bit_in[31:19] == 13'd0 &&trunc_32bit_in[7] == 1'd1 && trunc_32bit_in[19:8] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[19:8] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:19] == 13'd8191 && trunc_32bit_in[7:0] > 8'd128) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[19:8] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[19:8];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd13:begin
|
||||
if(trunc_32bit_in[31:18] == 14'd16383 || trunc_32bit_in[31:18] == 14'd0) begin
|
||||
if(trunc_32bit_in[31:18] == 14'd0 &&trunc_32bit_in[6] == 1'd1 && trunc_32bit_in[18:7] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[18:7] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:18] == 14'd16383 && trunc_32bit_in[6:0] > 7'd64) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[18:7] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[18:7];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd14:begin
|
||||
if(trunc_32bit_in[31:17] == 15'd32767 || trunc_32bit_in[31:17] == 15'd0) begin
|
||||
if(trunc_32bit_in[31:17] == 15'd0 &&trunc_32bit_in[5] == 1'd1 && trunc_32bit_in[17:6] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[17:6] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:17] == 15'd32767 && trunc_32bit_in[5:0] > 6'd32) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[17:6] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[17:6];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd15:begin
|
||||
if(trunc_32bit_in[31:16] == 16'd65535 || trunc_32bit_in[31:16] == 16'd0) begin
|
||||
if(trunc_32bit_in[31:16] == 16'd0 &&trunc_32bit_in[4] == 1'd1 && trunc_32bit_in[16:5] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[16:5] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:16] == 16'd65535 && trunc_32bit_in[4:0] > 5'd16) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[16:5] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[16:5];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd16:begin
|
||||
if(trunc_32bit_in[31:15] == 17'd131071 || trunc_32bit_in[31:15] == 17'd0) begin
|
||||
if(trunc_32bit_in[31:15] == 17'd0 &&trunc_32bit_in[3] == 1'd1 && trunc_32bit_in[15:4] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[15:4] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:15] == 17'd131071 && trunc_32bit_in[3:0] > 4'd8) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[15:4] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[15:4];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd17:begin
|
||||
if(trunc_32bit_in[31:14] == 18'd262143 || trunc_32bit_in[31:14] == 18'd0) begin
|
||||
if(trunc_32bit_in[31:14] == 18'd0 &&trunc_32bit_in[2] == 1'd1 && trunc_32bit_in[14:3] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[14:3] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:14] == 18'd262143 && trunc_32bit_in[2:0] > 3'd4) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[14:3] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[14:3];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd18:begin
|
||||
if(trunc_32bit_in[31:13] == 19'd524287 || trunc_32bit_in[31:13] == 19'd0) begin
|
||||
if(trunc_32bit_in[31:13] == 19'd0 &&trunc_32bit_in[1] == 1'd1 && trunc_32bit_in[13:2] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[13:2] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:13] == 19'd524287 && trunc_32bit_in[1:0] > 2'd2) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[13:2] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[13:2];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
5'd19:begin
|
||||
if(trunc_32bit_in[31:12] == 20'd1048575 || trunc_32bit_in[31:12] == 20'd0) begin
|
||||
if(trunc_32bit_in[31:12] == 20'd0 &&trunc_32bit_in[0] == 1'd1 && trunc_32bit_in[12:1] != 12'd2047) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[12:1] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
if(trunc_32bit_in[31:12] == 20'd1048575 && trunc_32bit_in[0:0] > 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[12:1] + 12'd1;
|
||||
end
|
||||
else begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[12:1];
|
||||
end
|
||||
end
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
default:begin
|
||||
if(trunc_32bit_in[31:11] == 21'd2097151 || trunc_32bit_in[31:11] == 21'd0) begin
|
||||
trunc_12bit_out[11:0] <= trunc_32bit_in[11:0];
|
||||
trunc_overflow <= 1'd0;
|
||||
end else begin
|
||||
if(trunc_32bit_in[31] == 1'd1) begin
|
||||
trunc_12bit_out[11:0] <= -12'd2048;
|
||||
end else begin
|
||||
trunc_12bit_out[11:0] <= 12'd2047;
|
||||
end
|
||||
trunc_overflow <= 1'd1;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
Reference in New Issue
Block a user