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
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);
ByteSetAsm(SVRReg);
WAIT_MPU_STOP;
@ -28,7 +28,7 @@ void ChannelEqu_Proc(
// available address space for channelEqu
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_dm3 = InputNoise + 0x1000;
@ -66,14 +66,10 @@ void ChannelEqu_Proc(
int NRE = 4096;
int ShiftFactor[] = {7,1,0,0,0,0,0,0,0,0,0,0};
int NumCB = 2;
const int16_t dataPilotDiff = 5;
const int16_t dataPilotDiff = 6;
// int16_t baseScale = -2;
for(int ii=0;ii<32;ii++)
{
Lut_agcFactor[ii] = 0;
}
for(int i=0;i<NumCB;i++)
{
@ -98,7 +94,10 @@ void ChannelEqu_Proc(
DMA_TAG_G2L,
1);
ape_csu_task_lookup(DMA_TAG_G2L, 1);
for(int ii=0;ii<32;ii++)
{
Lut_agcFactor[ii] = 0;
}
AgcShiftForFftInt32(
(int)CfgAgcShift,
@ -142,12 +141,16 @@ void ChannelEqu_Proc(
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);
SVRReg[0] = MPU_ADDR(CfgByteCopy);
ByteCopyAsm(SVRReg);
WAIT_MPU_STOP;
if(i==1){
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 *InData_dm0_ptr = channelEst_dm0_ptr + 0x2000;
ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer(
(uint64_t)(InputData_ddr_ptr + 68) ,
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
4096*4,
DMA_TAG_G2L,
1);
WAIT_MPU_STOP;
for(int j=0;j<numSym;j++){
if(j==0){
ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(InputData_ddr_ptr + (68+4096)*j + 68) ,
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
4096*4,
DMA_TAG_G2L,
1);
}
ape_csu_task_lookup(DMA_TAG_G2L, 1);
for(int j=0;j<numSym;j++)
{
AgcShiftForFftInt32(
(int)CfgAgcShift,
MPU_ADDR(Fft_outputdata_dm3_ptr),
@ -212,7 +216,7 @@ void ChannelEqu_Proc(
/* -------------- 拉齐信道估计FFT ------------*/
int16_t dataFftScale = Scalep[0] & (0xFFFF);
int16_t shiftScale = pilotFFtScale - dataFftScale - dataPilotDiff;
int16_t shiftScale = -(pilotFFtScale - dataFftScale - dataPilotDiff);
int cc = i;
int ccc = j;
@ -221,16 +225,12 @@ void ChannelEqu_Proc(
if(shiftScale!=0){
Lut_agcMultiSymFactor[0] = shiftScale;
//tmp0暂存移位后FFT结果
AgcShiftMultiSym((int)CfgAgcMultiSym, MPU_ADDR(Fft_est_dm3_ptr), 8192,1, MPU_ADDR(tmp0),MPU_ADDR(Lut_agcMultiSymFactor));
AgcShiftMultiSym((int)CfgAgcMultiSym, MPU_ADDR(channelEst_dm0_ptr), 8192,1, MPU_ADDR(Fft_est_dm3_ptr),MPU_ADDR(Lut_agcMultiSymFactor));
SVRReg[0] = MPU_ADDR(CfgAgcMultiSym);
AgcShiftMultiSymAsm(SVRReg);
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);
EQ1Part2Asm(SVRReg);
WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 16, *Equ_Output_2);
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, 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){
@ -362,6 +369,7 @@ void ChannelEqu_Proc(
DMA_TAG_L2G,
1);
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 *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 *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;
ByteSet(ConfigByteSet,0,MPU_ADDR(channelEstOutAddr),32768);
SVRReg[0] = MPU_ADDR(ConfigByteSet);
ByteSetAsm(SVRReg);
int numSub = 2;
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++){
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_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,
MPU_ADDR(Pilot_orig_LUT),
MPU_ADDR(PilotTrans),
@ -87,7 +89,7 @@ void ChannelEst_Proc(
SVRReg[0] = MPU_ADDR(ConfigAddr_channelEst);
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 = InputCPAddr + 1024;
uint32_t *freEstOutAddr = (uint32_t *)(temp_dm1_ptr + 0x0020);
int32_t *freEstOutAddr = (uint32_t *)(temp_dm1_ptr + 0x0020);
ByteCopy((int)CfgByteCopy,
@ -85,17 +85,18 @@ void FreOff_Proc(
time0 = time1;
// Low-pass Filter
/*if(storedfreoffestvalue > 600000){
if(storedfreoffestvalue > 600000){
storedfreoffestvalue = freEstOutAddr[0];
}
else{
storedfreoffestvalue = 0.7*storedfreoffestvalue + 0.3*freEstOutAddr[0];
}
freEstOutAddr[0] = storedfreoffestvalue;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 12, freEstOutAddr[0]);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 13, 0xa0870);
freEstOutAddr[0] = storedfreoffestvalue;*/
freEstOutAddr[0] = storedfreoffestvalue;
// Frequency Offset Compensate
uint32_t *available_ptr_dm2 = temp_dm2_ptr;
@ -108,7 +109,7 @@ void FreOff_Proc(
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 *fre_comp_exp_ptr = available_ptr_dm2;
@ -125,7 +126,7 @@ void FreOff_Proc(
cordicSCAsm(SVRReg);
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),
time_data_length*4,
DMA_TAG_G2L,
@ -146,7 +147,7 @@ void FreOff_Proc(
ape_csu_task_lookup(DMA_TAG_G2L, 1);
WAIT_MPU_STOP;
SVRReg[0] = MPU_ADDR(ConfigAddr_comp);
freOffCompAsm(SVRReg);
freOffCompAsm1(SVRReg);
WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 21, *output_data_ptr);

View File

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

View File

@ -78,8 +78,8 @@ void Transform_Proc(
uint32_t loop_idx;
for (loop_idx = 0; loop_idx < 4; loop_idx++)
{
db_real_tmp[loop_idx] = *(db_real + loop_idx) * 1.42;
db_imag_tmp[loop_idx] = *(db_imag + loop_idx) * 1.42;
db_real_tmp[loop_idx] = *(db_real + loop_idx) * 1;
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);
SVRReg[0] = MPU_ADDR(Cfg_DeTransform2);

View File

@ -28,13 +28,16 @@ freOffCompAsm1:
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);
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:
BIU0: Wait 0 || BIU1: Wait 0 || IMA0: Wait 0 || IMA1: Wait 0 || BIU3: Wait 0;
MFetch: REPEAT @(15);
MFetch: REPEAT @(20);
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;
ratio = blockLenSrc / blockLenDst;
mod_val = blockLenSrc / blockLenDst;
mod_val = blockLenSrc % blockLenDst;
cp_type = 1;
}
if(0 == mod_val)
if(0 != mod_val)
{
printf("csu2Dto2D para not support!\n");
return 1;