Recv_symb部分拉齐,Recv的transform问题遗留待修复

This commit is contained in:
HUOHUO 2025-06-01 21:10:35 -07:00
parent 7d39a9bf84
commit a9cc2350f1
7 changed files with 88 additions and 74 deletions

View File

@ -20,7 +20,7 @@ void ChannelEqu_Proc(
// Temporary input for test // Temporary input for test
uint32_t * InputNoise = ((((uint32_t)&temp_dm3_ptr[0] + 4095)>>12)<<12); uint32_t * InputNoise = ((((uint32_t)&temp_dm3_ptr[0] + 4095)>>12)<<12);
ByteSet(ConfigByteSet,0,MPU_ADDR(InputNoise),16384); ByteSet(ConfigByteSet,0,MPU_ADDR(InputNoise),32768);
SVRReg[0] = MPU_ADDR(ConfigByteSet); SVRReg[0] = MPU_ADDR(ConfigByteSet);
ByteSetAsm(SVRReg); ByteSetAsm(SVRReg);
WAIT_MPU_STOP; WAIT_MPU_STOP;
@ -28,7 +28,7 @@ void ChannelEqu_Proc(
// available address space for channelEqu // available address space for channelEqu
uint32_t * available_ptr_dm0 = temp_dm0_ptr; uint32_t * available_ptr_dm0 = temp_dm0_ptr;
uint32_t * available_ptr_dm1 = temp_dm1_ptr; uint32_t * available_ptr_dm1 = temp_dm1_ptr + 0x1000;
uint32_t * available_ptr_dm2 = temp_dm2_ptr; uint32_t * available_ptr_dm2 = temp_dm2_ptr;
uint32_t * available_ptr_dm3 = InputNoise + 0x1000; uint32_t * available_ptr_dm3 = InputNoise + 0x1000;
@ -66,14 +66,10 @@ void ChannelEqu_Proc(
int NRE = 4096; int NRE = 4096;
int ShiftFactor[] = {7,1,0,0,0,0,0,0,0,0,0,0}; int ShiftFactor[] = {7,1,0,0,0,0,0,0,0,0,0,0};
int NumCB = 2; int NumCB = 2;
const int16_t dataPilotDiff = 5; const int16_t dataPilotDiff = 6;
// int16_t baseScale = -2; // int16_t baseScale = -2;
for(int ii=0;ii<32;ii++)
{
Lut_agcFactor[ii] = 0;
}
for(int i=0;i<NumCB;i++) for(int i=0;i<NumCB;i++)
{ {
@ -98,7 +94,10 @@ void ChannelEqu_Proc(
DMA_TAG_G2L, DMA_TAG_G2L,
1); 1);
ape_csu_task_lookup(DMA_TAG_G2L, 1); for(int ii=0;ii<32;ii++)
{
Lut_agcFactor[ii] = 0;
}
AgcShiftForFftInt32( AgcShiftForFftInt32(
(int)CfgAgcShift, (int)CfgAgcShift,
@ -142,12 +141,16 @@ void ChannelEqu_Proc(
1); 1);
*/ */
ByteCopy((int)CfgByteCopy, MPU_ADDR(Fft_est_dm3_ptr),MPU_ADDR(channelEst_dm0_ptr + 4096),16384);
SVRReg[0] = MPU_ADDR(CfgByteCopy);
ByteCopyAsm(SVRReg);
WAIT_MPU_STOP;
//构造第二根天线 //构造第二根天线
ByteCopy((int)CfgByteCopy, MPU_ADDR(channelEst_dm0_ptr),MPU_ADDR(Fft_est_dm3_ptr + 4096),16384); ByteCopy((int)CfgByteCopy, MPU_ADDR(channelEst_dm0_ptr),MPU_ADDR(Fft_est_dm3_ptr + 4096),16384);
SVRReg[0] = MPU_ADDR(CfgByteCopy); SVRReg[0] = MPU_ADDR(CfgByteCopy);
ByteCopyAsm(SVRReg); ByteCopyAsm(SVRReg);
WAIT_MPU_STOP;
if(i==1){ if(i==1){
InputData_ddr_ptr = InputData_ddr_ptr + 7*(68+4096) + 1024 + 72; InputData_ddr_ptr = InputData_ddr_ptr + 7*(68+4096) + 1024 + 72;
} }
@ -157,19 +160,20 @@ void ChannelEqu_Proc(
int *Fft_outputdata_dm3_ptr = Fft_est_dm3_ptr + 0x2000; int *Fft_outputdata_dm3_ptr = Fft_est_dm3_ptr + 0x2000;
int *InData_dm0_ptr = channelEst_dm0_ptr + 0x2000; int *InData_dm0_ptr = channelEst_dm0_ptr + 0x2000;
ape_csu_task_lookup(DMA_TAG_G2L, 1); for(int j=0;j<numSym;j++){
ape_csu_dma_1D_G2L_ch0ch1_transfer(
(uint64_t)(InputData_ddr_ptr + 68) , if(j==0){
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr), ape_csu_task_lookup(DMA_TAG_G2L, 1);
4096*4, ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(InputData_ddr_ptr + (68+4096)*j + 68) ,
DMA_TAG_G2L, (uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
1); 4096*4,
WAIT_MPU_STOP; DMA_TAG_G2L,
1);
}
ape_csu_task_lookup(DMA_TAG_G2L, 1);
for(int j=0;j<numSym;j++)
{
AgcShiftForFftInt32( AgcShiftForFftInt32(
(int)CfgAgcShift, (int)CfgAgcShift,
MPU_ADDR(Fft_outputdata_dm3_ptr), MPU_ADDR(Fft_outputdata_dm3_ptr),
@ -212,7 +216,7 @@ void ChannelEqu_Proc(
/* -------------- 拉齐信道估计FFT ------------*/ /* -------------- 拉齐信道估计FFT ------------*/
int16_t dataFftScale = Scalep[0] & (0xFFFF); int16_t dataFftScale = Scalep[0] & (0xFFFF);
int16_t shiftScale = pilotFFtScale - dataFftScale - dataPilotDiff; int16_t shiftScale = -(pilotFFtScale - dataFftScale - dataPilotDiff);
int cc = i; int cc = i;
int ccc = j; int ccc = j;
@ -221,16 +225,12 @@ void ChannelEqu_Proc(
if(shiftScale!=0){ if(shiftScale!=0){
Lut_agcMultiSymFactor[0] = shiftScale; Lut_agcMultiSymFactor[0] = shiftScale;
//tmp0暂存移位后FFT结果 AgcShiftMultiSym((int)CfgAgcMultiSym, MPU_ADDR(channelEst_dm0_ptr), 8192,1, MPU_ADDR(Fft_est_dm3_ptr),MPU_ADDR(Lut_agcMultiSymFactor));
AgcShiftMultiSym((int)CfgAgcMultiSym, MPU_ADDR(Fft_est_dm3_ptr), 8192,1, MPU_ADDR(tmp0),MPU_ADDR(Lut_agcMultiSymFactor));
SVRReg[0] = MPU_ADDR(CfgAgcMultiSym); SVRReg[0] = MPU_ADDR(CfgAgcMultiSym);
AgcShiftMultiSymAsm(SVRReg); AgcShiftMultiSymAsm(SVRReg);
WAIT_MPU_STOP; WAIT_MPU_STOP;
ByteCopy((int)CfgByteCopy, MPU_ADDR(tmp0),MPU_ADDR(Fft_est_dm3_ptr),16384*2);
SVRReg[0] = MPU_ADDR(CfgByteCopy);
ByteCopyAsm(SVRReg);
WAIT_MPU_STOP;
} }
@ -279,13 +279,20 @@ void ChannelEqu_Proc(
SVRReg[0]= MPU_ADDR(CfgEQ1Part2); SVRReg[0]= MPU_ADDR(CfgEQ1Part2);
EQ1Part2Asm(SVRReg); EQ1Part2Asm(SVRReg);
WAIT_MPU_STOP; WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 16, *Equ_Output_2); TRACE(TRACE_RECEIVER_SYMB_ADDR, 16, *Equ_Output_2);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 17, *(Equ_Output_2+1)); TRACE(TRACE_RECEIVER_SYMB_ADDR, 17, *(Equ_Output_2+1));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 18, *(Equ_Output_2+2)); TRACE(TRACE_RECEIVER_SYMB_ADDR, 18, *(Equ_Output_2+2));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 19, *(Equ_Output_2+3)); TRACE(TRACE_RECEIVER_SYMB_ADDR, 19, *(Equ_Output_2+3));
//ape_csu_task_lookup(DMA_TAG_G2L, 1);
// ape_csu_dma_1D_L2G_ch0ch1_transfer(
// (uint64_t)DM_TO_CSU_ADDR((Equ_Output_2)),
// (uint64_t)res_ptr,
// 4096*4 ,
// DMA_TAG_L2G,
// 1);
//提前准备下一块数据 //提前准备下一块数据
if(j<numSym-1){ if(j<numSym-1){
@ -362,6 +369,7 @@ void ChannelEqu_Proc(
DMA_TAG_L2G, DMA_TAG_L2G,
1); 1);
res_ptr = res_ptr + 16384; res_ptr = res_ptr + 16384;
} }

View File

@ -27,17 +27,19 @@ void ChannelEst_Proc(
uint32_t *ConfigAddr_channelEst = receiver_symb_config_dm0_ptr + g_receiver_symb_table_param.ChannelEst_CFG4_Offset; uint32_t *ConfigAddr_channelEst = receiver_symb_config_dm0_ptr + g_receiver_symb_table_param.ChannelEst_CFG4_Offset;
uint32_t *cfg_transform8 = receiver_symb_config_dm0_ptr + g_receiver_symb_table_param.Transform8_CFG14_Offset; uint32_t *cfg_transform8 = receiver_symb_config_dm0_ptr + g_receiver_symb_table_param.Transform8_CFG14_Offset;
uint32_t *Pilot_orig_LUT = receiver_symb_config_dm2_ptr; int32_t *Pilot_orig_LUT = receiver_symb_config_dm2_ptr;
uint32_t *InputPilotAddr = (uint32_t *)time_data_dm0_ptr; uint32_t *InputPilotAddr = (uint32_t *)time_data_dm0_ptr;
uint32_t *channelEstOutAddr = (uint32_t *)(temp_dm1_ptr); uint32_t *channelEstOutAddr = (uint32_t *)((((uint32_t)temp_dm1_ptr + 4096)>>12)<<12);
uint32_t *ConfigByteSet = receiver_symb_config_dm0_ptr + g_receiver_symb_table_param.ByteSet_CFG15_Offset; uint32_t *ConfigByteSet = receiver_symb_config_dm0_ptr + g_receiver_symb_table_param.ByteSet_CFG15_Offset;
ByteSet(ConfigByteSet,0,MPU_ADDR(channelEstOutAddr),32768);
SVRReg[0] = MPU_ADDR(ConfigByteSet);
ByteSetAsm(SVRReg);
int numSub = 2; int numSub = 2;
int sliceIndex[2] = {1024,31268}; // position of pilot int sliceIndex[2] = {1024,31268}; // position of pilot
ByteSet(ConfigByteSet,0,MPU_ADDR(channelEstOutAddr),32768);
SVRReg[0] = MPU_ADDR(ConfigByteSet);
ByteSetAsm(SVRReg);
WAIT_MPU_STOP;
for(int subIndex=0;subIndex<numSub;subIndex++){ for(int subIndex=0;subIndex<numSub;subIndex++){
time_data_ddr_ptr = COMPENSATED_DATA_DDR_PTR + sliceIndex[subIndex]*4; time_data_ddr_ptr = COMPENSATED_DATA_DDR_PTR + sliceIndex[subIndex]*4;
@ -60,7 +62,7 @@ void ChannelEst_Proc(
double db_real[4] = {-0.3827, 0.8660, -0.7071, 0.5}; double db_real[4] = {-0.3827, 0.8660, -0.7071, 0.5};
double db_imag[4] = {0.9239, 0.5, -0.7071, 0.8660}; double db_imag[4] = {0.9239, 0.5, -0.7071, 0.8660};
uint32_t *PilotTrans = temp_dm3_ptr; int32_t *PilotTrans = temp_dm3_ptr;
Transform((int)cfg_transform8, Transform((int)cfg_transform8,
MPU_ADDR(Pilot_orig_LUT), MPU_ADDR(Pilot_orig_LUT),
MPU_ADDR(PilotTrans), MPU_ADDR(PilotTrans),
@ -87,7 +89,7 @@ void ChannelEst_Proc(
SVRReg[0] = MPU_ADDR(ConfigAddr_channelEst); SVRReg[0] = MPU_ADDR(ConfigAddr_channelEst);
channelEstAsm(SVRReg); channelEstAsm(SVRReg);
//WAIT_MPU_STOP; WAIT_MPU_STOP;
} }
//保证最后一次微码计算结束再搬出 //保证最后一次微码计算结束再搬出

View File

@ -44,7 +44,7 @@ void FreOff_Proc(
uint32_t *InputPilotAddr = temp_dm2_ptr; uint32_t *InputPilotAddr = temp_dm2_ptr;
//uint32_t *InputPilotAddr = InputCPAddr + 1024; //uint32_t *InputPilotAddr = InputCPAddr + 1024;
uint32_t *freEstOutAddr = (uint32_t *)(temp_dm1_ptr + 0x0020); int32_t *freEstOutAddr = (uint32_t *)(temp_dm1_ptr + 0x0020);
ByteCopy((int)CfgByteCopy, ByteCopy((int)CfgByteCopy,
@ -85,17 +85,18 @@ void FreOff_Proc(
time0 = time1; time0 = time1;
// Low-pass Filter // Low-pass Filter
/*if(storedfreoffestvalue > 600000){ if(storedfreoffestvalue > 600000){
storedfreoffestvalue = freEstOutAddr[0]; storedfreoffestvalue = freEstOutAddr[0];
} }
else{ else{
storedfreoffestvalue = 0.7*storedfreoffestvalue + 0.3*freEstOutAddr[0]; storedfreoffestvalue = 0.7*storedfreoffestvalue + 0.3*freEstOutAddr[0];
} }
freEstOutAddr[0] = storedfreoffestvalue;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 12, freEstOutAddr[0]); TRACE(TRACE_RECEIVER_SYMB_ADDR, 12, freEstOutAddr[0]);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 13, 0xa0870); TRACE(TRACE_RECEIVER_SYMB_ADDR, 13, 0xa0870);
freEstOutAddr[0] = storedfreoffestvalue;*/ freEstOutAddr[0] = storedfreoffestvalue;
// Frequency Offset Compensate // Frequency Offset Compensate
uint32_t *available_ptr_dm2 = temp_dm2_ptr; uint32_t *available_ptr_dm2 = temp_dm2_ptr;
@ -108,7 +109,7 @@ void FreOff_Proc(
for(int i=0;i<4;i++) for(int i=0;i<4;i++)
{ {
int res_ptr_offset = i*count*128; int res_ptr_offset = i*count*128*4;
int *input_data_ptr = available_ptr_dm3; int *input_data_ptr = available_ptr_dm3;
int *fre_comp_exp_ptr = available_ptr_dm2; int *fre_comp_exp_ptr = available_ptr_dm2;
@ -125,7 +126,7 @@ void FreOff_Proc(
cordicSCAsm(SVRReg); cordicSCAsm(SVRReg);
ape_csu_task_lookup(DMA_TAG_G2L, 1); ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)time_data_ddr_ptr, ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)time_data_ddr_ptr + res_ptr_offset,
(uint64_t)DM_TO_CSU_ADDR(input_data_ptr), (uint64_t)DM_TO_CSU_ADDR(input_data_ptr),
time_data_length*4, time_data_length*4,
DMA_TAG_G2L, DMA_TAG_G2L,
@ -146,7 +147,7 @@ void FreOff_Proc(
ape_csu_task_lookup(DMA_TAG_G2L, 1); ape_csu_task_lookup(DMA_TAG_G2L, 1);
WAIT_MPU_STOP; WAIT_MPU_STOP;
SVRReg[0] = MPU_ADDR(ConfigAddr_comp); SVRReg[0] = MPU_ADDR(ConfigAddr_comp);
freOffCompAsm(SVRReg); freOffCompAsm1(SVRReg);
WAIT_MPU_STOP; WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 21, *output_data_ptr); TRACE(TRACE_RECEIVER_SYMB_ADDR, 21, *output_data_ptr);

View File

@ -115,33 +115,33 @@ void Receiver_Symb_Init()
1); 1);
#endif #endif
uint32_t ptr1,ptr2,len1,len2; // uint32_t ptr1,ptr2,len1,len2;
ret = osp_get_cfgfile("channel_est_1_Quan.dat", // ret = osp_get_cfgfile("channel_est_1_Quan.dat",
(uint32_t *)&(ptr1), // (uint32_t *)&(ptr1),
(int32_t *)&(len1)); // (int32_t *)&(len1));
if(-1 == ret) // if(-1 == ret)
{ // {
LOG_ERROR_S("channel_est_1_Quan not found!\n"); // LOG_ERROR_S("channel_est_1_Quan not found!\n");
} // }
ape_csu_dma_1D_G2L_ch2ch3_transfer((uint64_t)(ptr1), // ape_csu_dma_1D_G2L_ch2ch3_transfer((uint64_t)(ptr1),
(uint64_t)CHANNELEST_DATA_DDR_PTR,//第一次固定搬移到dm0 // (uint64_t)CHANNELEST_DATA_DDR_PTR,//第一次固定搬移到dm0
len1, // len1,
DMA_TAG_G2G, // DMA_TAG_G2G,
1); // 1);
ret = osp_get_cfgfile("EquIn_Quan.dat", // ret = osp_get_cfgfile("EquIn_Quan.dat",
(uint32_t *)&(ptr2), // (uint32_t *)&(ptr2),
(int32_t *)&(len2)); // (int32_t *)&(len2));
if(-1 == ret) // if(-1 == ret)
{ // {
LOG_ERROR_S("timedatasym.dat not found!\n"); // LOG_ERROR_S("timedatasym.dat not found!\n");
} // }
ape_csu_dma_1D_G2L_ch2ch3_transfer((uint64_t)(ptr2), // ape_csu_dma_1D_G2L_ch2ch3_transfer((uint64_t)(ptr2),
(uint64_t)COMPENSATED_DATA_DDR_PTR,//第一次固定搬移到dm0 // (uint64_t)COMPENSATED_DATA_DDR_PTR,//第一次固定搬移到dm0
len2, // len2,
DMA_TAG_G2G, // DMA_TAG_G2G,
1); // 1);
} }

View File

@ -78,8 +78,8 @@ void Transform_Proc(
uint32_t loop_idx; uint32_t loop_idx;
for (loop_idx = 0; loop_idx < 4; loop_idx++) for (loop_idx = 0; loop_idx < 4; loop_idx++)
{ {
db_real_tmp[loop_idx] = *(db_real + loop_idx) * 1.42; db_real_tmp[loop_idx] = *(db_real + loop_idx) * 1;
db_imag_tmp[loop_idx] = *(db_imag + loop_idx) * 1.42; db_imag_tmp[loop_idx] = *(db_imag + loop_idx) * 1;
} }
Transform((int)Cfg_DeTransform2,MPU_ADDR(InputAddr_Trans),MPU_ADDR(TransTemp), 2, &db_real_tmp[0], &db_imag_tmp[0], -1); Transform((int)Cfg_DeTransform2,MPU_ADDR(InputAddr_Trans),MPU_ADDR(TransTemp), 2, &db_real_tmp[0], &db_imag_tmp[0], -1);
SVRReg[0] = MPU_ADDR(Cfg_DeTransform2); SVRReg[0] = MPU_ADDR(Cfg_DeTransform2);

View File

@ -28,13 +28,16 @@ freOffCompAsm1:
MFetch: REPEAT @(10); MFetch: REPEAT @(10);
BIU0: Wait 0 || BIU1: Wait 0 || IMA0: Wait 10 || IMA1: Wait 10 || BIU3: Wait 15; BIU0: Wait 0 || BIU1: Wait 0 || IMA0: Wait 10 || IMA1: Wait 14 || BIU3: Wait 17;
MFetch: Lpto %ENDFRECOMP @(KI0); MFetch: Lpto %ENDFRECOMP @(KI0);
BIU0: Load(T0)(A++) -> IMA0.T3(Mode0) || BIU1: Load(T1)(A++) -> IMA0.T2(Mode0) || IMA0: 0 + T2*T3(ShiftMode0)(C)(S)(SSS)(T) -> BIU3.T1(Mode0) || BIU3: Store(T1,T3)(A++)(Mode0); // BIU0: Load(T0)(A++) -> IMA0.T3(Mode0) || BIU1: Load(T1)(A++) -> IMA0.T2(Mode0) || IMA0: 0 + T2*T3(ShiftMode0)(C)(S)(SSS)(T) -> BIU3.T1(Mode0) || BIU3: Store(T1,T3)(A++)(Mode0);
BIU0: Load(T0)(A++) -> IMA0.T3(Mode0) || BIU1: Load(T1)(A++) -> IMA0.T2(Mode0) || IMA0: 0 + T2*T3(ShiftMode0)(C)(S)(SSS)(T) -> IMA1.T1(Mode0) ||
IMA1: T1 << 4(S) -> BIU3.T1(Mode0) || BIU3: Store(T1,T3)(A++)(Mode0);
ENDFRECOMP: ENDFRECOMP:
BIU0: Wait 0 || BIU1: Wait 0 || IMA0: Wait 0 || IMA1: Wait 0 || BIU3: Wait 0; BIU0: Wait 0 || BIU1: Wait 0 || IMA0: Wait 0 || IMA1: Wait 0 || BIU3: Wait 0;
MFetch: REPEAT @(15); MFetch: REPEAT @(20);
MFetch:MPU.STOP; MFetch:MPU.STOP;

View File

@ -417,10 +417,10 @@ int ape_csu_dma_2Dto2D_transfer(uint64_t addrSrc, uint16_t blockLenSrc, uint64_t
{ {
loop = dataLen / blockLenDst; loop = dataLen / blockLenDst;
ratio = blockLenSrc / blockLenDst; ratio = blockLenSrc / blockLenDst;
mod_val = blockLenSrc / blockLenDst; mod_val = blockLenSrc % blockLenDst;
cp_type = 1; cp_type = 1;
} }
if(0 == mod_val) if(0 != mod_val)
{ {
printf("csu2Dto2D para not support!\n"); printf("csu2Dto2D para not support!\n");
return 1; return 1;