我看历程中的LTE上行配置SSL时,有个参数
UInt32 Rprime, //Number of allocation subcarriers.
然后又定义了一个:
UInt8 prbList[45]={1, 2, 3, 4, 5, 6, 8, 9, 10,12,15,16, 18,20,24,25, 27,30,32,36, 40,45,48,50, 54,60,64,72, 75,80,
81,90,96,100,108,120,128,144,150,160,162,180,192,200,216};
使用的时候是
Rprime1 = 12 * prbList[Rprime];
将Rprime作为数组的index,是不是说明Rprime不能大于45,也就是说支持的最大子载波不能超过45?
对于定义的UInt8 prbList[45]={1, 2, 3, 4, 5, 6, 8, 9, 10,12,15,16, 18,20,24,25, 27,30,32,36, 40,45,48,50, 54,60,64,72, 75,80,
81,90,96,100,108,120,128,144,150,160,162,180,192,200,216};这个数组中的数字有代表什么?
具体工程为:
Bcp_testProject
文件为:test_lte_ul.c,配置SSL在第872行
wenhao zhang:
回复 Kevin Cai:
谢谢你的回复
1.那么我可不可以使用modulation 模块的软调制,然后在用SSL模块实现软解调,这两个是模块是不是可以实现互逆,也就是说我用一块BCP中的softMOD生成调制符号,然后用另一块BCP中的SSL实现软解调。上述方案可不可行?
2,使用软调制输出的调制符号和硬调制输出的调制符号的取值范围貌似不一样,这个是由什么决定的呢?我个人理解是调制后的符号值的范围应该是一样的吧,对于软调制输出的值应该在哪里做限定?
3.SSL模块配置时需要两个参数scale1, scale2,这个应该配置成多少,由什么决定?
prepare_sslhdr_cfg (&sslHdrCfg, radioStd, allocIdx, modulation, numSymbPerSumbfrm, 1, rms, 2, cInit, numRiSubcs, numAckSubcs, scale1, scale2);
4.MOD在soft模式时,输入如果直接用RateMatching的输出硬信息(0x00,0x01)可以么?还是要将(0x00,0x01)映射为(0x7f,0x81)再输入到MOD呢?还是RM可以在输入时bit的情况下直接输出软信息(这个UGuider也没有说明,我推理应该不行)?
实在抱歉,一下子问您这么多问题,因为我要做一个LTE PUSCH的点对点链路,收端和端都想使用BCP。
非常感谢,期待您的回复。
wenhao zhang:
回复 Kevin Cai:
谢谢你的回答
1.对于MOD在soft和hard模式下的输出,我这里好像范围不太一致,您知道是什么原因么?
计算出来的数在hard模式下:
在soft模式下:
是不是我哪里参数不对:
我的soft配置为:
/* Header 5: Modulation header */ prepare_modhdr_cfg (&modHdrCfg, radioStd, 33, // number of subcarrier, not used,6,//modulation, 2, // mode 1024,//rms 12, //numOFDMsymPerSubfrm, not used 0, //numCqiSubcs 0, //numRiSubcs 0, //numAckSubcs cInit, 0); //qformat
hard模式为:
/* Header 5: Modulation header */ prepare_modhdr_cfg (&modHdrCfg, radioStd, 0, // number of subcarrier, not used, modulation, 0, //uncompressed mode 1024,//rms 0, //numOFDMsymPerSubfrm, not used 0, //numCqiSubcs 0, //numRiSubcs 0, //numAckSubcs cInit, 0); //qformat
2.对于SSL,配置SSLheader时有这段代码:
for (uu = 0; uu < 25; uu++){ if (numPrbInPusch[uu] == numSubcarrier/12) { allocIdx = uu; break; } }
prepare_sslhdr_cfg (&sslHdrCfg, radioStd, allocIdx, modulation, numSymbPerSumbfrm, 1, rms, 2, cInit, numRiSubcs, numAckSubcs, scale1, scale2);
是不是说uu的最大值只能取到25么?这样allocIdx的最大值是不是也就只能是25,如果我要配置1200个子载波,就需要uu=33也就是allocIdx=33,是不是SSL支持不了到1200个子载波?
再次麻烦你,请您见谅,期待您的回复,非常感谢!
Kevin Cai:
回复 wenhao zhang:
Hi, 您好!
1. soft和hard的输出格式是不一样的,具体见BCP手册4.6.1.2 Output Data节,您可以先对照格式看一下输出
2. 没有规定uu最大是25, 对于1200个字载波,需要100个PRB, 您只要在numPrbInPusch数组里有100这个元素就可以
谢谢!
wenhao zhang:
回复 Kevin Cai:
谢谢你的回复,
现在对于RD模块又有很多问题:
1,比如说1个TB里面还有13个block,那么RD的output是被存放在13个buff中?是不是会将每一个buff都配置一个descriptor?
2,一个descriptor只能带1个buff么还是可以有多个buff,这个参数在哪里配置?对于descriptor的packetbuff的大小是不是设定的要大于需要传输的data量?
现在情况是,我将SSL和RD一起使用,应该是有13个block,在执行下面程序时,numRxPackets 的值总有时是6,有时是1,还有时是2,您知道有可能哪里配置错了么?
* Wait on data to be received from BCP and validate it */
for (i = 0; i < 400; i ++); while ((numRxPackets = Bcp_rxGetNumOutputEntries (hRx)) == 0); for (i = 0; i < numRxPackets; i ++) { /* Data could arrive scattered across multiple linked descriptors. * Collect data from all linked descriptors and validate it. */ rxDataTotalLen = 0;
Bcp_recv (hRx, &hRxDrvBuffer, &pRxDataBuffer, &rxDataBufferLen, &pRxPsInfo, &rxPsInfoLen, &rxFlowId, &rxSrcId, &rxDestnTag);
rxDataTotalLen += rxDataBufferLen;
/* Check if there are any descriptors linked to this Rx desc */ while (hRxDrvBuffer) { /* Save original Rx desc handle. */ hTmp = hRxDrvBuffer;
if ((hRxDrvBuffer = Cppi_getNextBD (Cppi_getDescType (hRxDrvBuffer), hRxDrvBuffer))) { Bcp_rxProcessDesc (hRx, hRxDrvBuffer, &hVoid, &pRxDataBuffer, &rxDataBufferLen, &pRxPsInfo, &rxPsInfoLen, &rxFlowId, &rxSrcId, &rxDestnTag);
rxDataTotalLen += rxDataBufferLen; } Bcp_rxFreeRecvBuffer (hRx, hTmp, BCP_TEST_SIZE_HOST_DESC); }
}
麻烦您了,非常感谢
Kevin Cai:
回复 wenhao zhang:
Hi, 您好!
1. 是的,放在13个buff,每一个buff都配置一个descriptor, 更多相关内容, 您可以查看文档 KeyStone Architecture Multicore Navigator User Guide (SPRUGR9F)
2.4节 2.4 Descriptors
2. 是的,只能一个。通常情况下descriptor的packetbuff大于需要传输的data量, 如果不大于,会自动分为多个descriptor输出
3. 您可以尝试一下设置descriptor的packetbuff大于需要传输的data量
谢谢!
wenhao zhang:
回复 Kevin Cai:
谢谢你,
问题解决了,就是因为buff大小太小,加上polling模式下等待时间不够。
Q1:现在对于BCP的RD输出的值进行TCP3D译码,两者之间怎么处理比较简单,而且时效性高,有没有历程可以参考?
Q2:对于BCP中RD输出的值,的结构为
前门的Turbo Decoder driver infomation和最后的16-byte array with the initial beta states(这个是不是tail bit 用?)是在TCP3D的哪里用到的?我看了一下历程,貌似没有提到BCP给出的这种数据形式。
Q3:每次一调用TCP3d是不是都要进行一次寄存器和中断的配置,有没有可能只配置一次,以后就直接传输数据就行了?历程中对于task的动态申请在实时要求高的应用中是不是可以用静态代替?
谢谢您,期待您的回复。
Kevin Cai:
回复 wenhao zhang:
Hi, 您好!
1. 高效的方式是BCP-TCP3d互连, 您可以参考MCSDK; 简单的方式是软件触发TCP3d
2. Turbo Decoder driver infomation保存了编码块长度和编号信息, 这是TCP3d所需要的,您可以参考:
TCP3d手册:KeyStone Architecture Turbo Decoder Coprocessor (TCP3d) User Guide (SPRUGS0)
4.6.1 TCP3D Input Configuration Register 0 (TCP3D_IC_CFG0_P0/P1)
16-byte array with the initial beta states的使用, 您可以参考上述TCP3d手册:
3.3.8 Initial Beta States Computation
3. 每次译码的数据不同, 在软件触发的模式下,您需要每次配置
谢谢!
wenhao zhang:
回复 Kevin Cai:
谢谢您的回复
Q1.能不能对于BCP-TCP3D的互联提供点具体的资料,您所说的MCSDK的哪一部分,能不能具体说明一下。
Q2. 我按照例程对于13个block,blocksize为5842的码块进行译码,发现用时差不多达到了90w的Cycle,感觉太慢了,对于TCP的译码速度应该是怎么样的呢?
Q3. TCP3D 有没有提供CRC校验,即按照212协议上给出的TB块的CRC校验?
麻烦您了,再次表示感谢
TI中文支持网

