NR HDL SIB1恢复
本例展示了如何设计适合于HDL代码生成和硬件实现的5G NR系统信息块类型1 (SIB1)恢复模型。
简介
SIB1恢复需要单元搜索、主信息块(MIB)解码、恢复SIB1网格(包含CORESET0和SIB1的资源网格区域),并从SIB1网格解码CORESET0 PDCCH和SIB1 PDSCH。单元格搜索和MIB恢复的过程在NR HDL细胞搜索而且NR HDL MIB恢复分别的例子。中描述了用于实现SIB1网格恢复、CORESET0解码和SIB1解码的其他模型用于NR SIB1恢复的硬件加速器的例子。本例着重于SIB1 Recovery Simulink模型,并使用MATLAB参考生成测试输入并验证模型的行为。
本例中描述的Simulink®模型是针对5G NR频率范围1 (FR1)的SIB1恢复的定点HDL优化实现。这个例子是一个相关的集合,更多信息请参见NR HDL参考应用概述.
文件结构
本示例使用这些文件。
仿真软件模型
nrhdlSIB1Recovery.slx
该Simulink模型将SSB检测器、SSB解码器、SIB1解调器、CORESET0解码器和SIB1解码器的处理结合成一个集成模型,演示了完整的SIB1网格恢复过程。此模型引用nrhdlDDCFR1Core
,nrhdlSSBDetectionFR1Core
,nrhdlSSBDecodingCore
,nrhdlPolarDecodingChainCore
,nrhdlSIB1DemodulationCore
,nrhdlCORESET0DecodingCore
,nrhdlLDPCDecodingChainCore
模型。nrhdlDDCFR1Core.slx
:这个模型实现了一个DDC来为SIB1和ssb创建样例流。nrhdlSSBDetectionFR1Core.slx
:该模型实现了SSB检测算法。nrhdlSSBDecodingCore.slx
:该模型实现了SSB解码算法。nrhdlPolarDecodingChainCore.slx
:该模型实现公共极性解码链。nrhdlSIB1DemodulationCore.slx
:该模型实现了SIB1解调算法。nrhdlCORESET0DecodingCore.slx
:该模型实现CORESET0解码算法。nrhdlLDPCDecodingChainCore.slx
:该模型实现了SIB1 LDPC解码算法。
模型数据字典
nrhdlReceiverData.sldd
:这个Simulink数据字典包含定义示例模型中包含的总线的总线对象。
MATLAB代码
runSIB1RecoveryModel.m
:该脚本使用MATLAB参考执行SSB检测算法的搜索模式,然后运行nrhdlSIB1Recovery
用Simulink模型对SSB进行解调和解码,然后对SIB1网格进行解调。脚本使用为嵌入式软件或硬件加速器设计的MATLAB代码执行CORESET0和SIB1解码nrhdlSIB1Recovery
模型。nrhdlexamples
:包含MATLAB参考代码和用于验证实现模型的实用函数的包。
NR HDL SIB1恢复
此图显示了nrhdlSIB1Recovery
模型。模型的顶层从MATLAB基本工作空间读取信号,将它们传递给SIB1恢复子系统,并将输出写回工作空间。该模型通过一组硬件加速器实现SIB1恢复,当部署到SoC设备时,这些硬件加速器由软件控制。该设计工作在基带5G波形上,并执行初始访问直到SIB1解码。
SIB1恢复子系统
的SIB1复苏
子系统引用模型并结合它们来创建完整的SIB1恢复设计。本例的附录包含子系统接口的完整描述。子系统可以在四种模式下运行,软件控制回路协调过程,为每个阶段设置输入和监视输出。
搜索:该操作在给定的频率偏移和子载波间距下搜索ssb。它执行三个相关性,每个PSS序列一个。通过运行重复的搜索操作,子载波间距扫描和粗频率搜索算法可以在软件中执行,以创建一个选定载波频率的ssb列表。
解调:该操作重新获取并OFDM解调从搜索步骤中发现的SSB中选择的单个SSB。每个检测到的SSB都有一个独特的时间参考和PSS序列,因此可以在重复传输上重新获取。一旦SSB被解调,SSB就被解码以获取MIB。如果sib1En设置并调度SIB1传输,则与重新获取的SSB对应的SIB1网格将被OFDM解调并输出到软件。
CORESET0 Decode:该操作对CORESET0进行解码,通过跨每个搜索空间和监视槽位执行盲搜索来恢复SIB1 DCI。该算法操作从上一步中恢复的SIB1网格中提取的数据。提取这些数据的过程在软件中进行。
SIB1 Decode:该操作执行LDPC解码、代码块去分割和CRC解码,以恢复最终的SIB1负载。输入数据从软件中的SIB1网格中提取,使用上一步中的DCI来选择分配的符号。
在这些示例中可以找到关于SIB1恢复子系统引用的每个模型的更多信息。
的NR HDL细胞搜索例子的细节:
nrhdlDDCFR1Core
nrhdlSSBDetectionFR1Core
的NR HDL MIB恢复例子的细节:
nrhdlSSBDecodingCore
nrhdlPolarDecodingChainCore
的用于NR SIB1恢复的硬件加速器例子的细节:
nrhdlSIB1DemodulationCore
nrhdlCORESET0DecodingCore
nrhdlLDPCDecodingChainCore
SIB1恢复模拟设置
框图显示了这个示例实现的模拟设置。橙色块突出显示了MATLAB参考和Simulink HDL实现之间的比较点。runSIB1RecoveryModelFR2脚本运行仿真,MATLAB代码表示软件控制算法,Simulink仿真执行FPGA处理。5G Toolbox™功能用于生成测试波形。使用MATLAB参考代码执行SSB搜索阶段,而不是运行Simulink仿真。MATLAB参考提供了等效的结果,并提高了仿真速度,因为它比Simulink仿真运行得更快。MATLAB SSB搜索的结果被传递给MATLAB和Simulink实现的SIB1恢复,并直接比较输出网格。Simulink SIB1网格的解码方法有两种。默认选项使用nrhdlSIB1Recovery
模型模拟CORESET0和SIB1解码的硬件加速器。第二种选择使用MATLAB只解码算法。当设计部署到SoC时,第一个选项通过将计算卸载到FPGA减少了由嵌入式处理器执行的计算。第二种方法在软件中执行所有处理,允许在不重建FPGA位流的情况下轻松修改和更新算法。
SIB1复苏模拟
使用runSIB1RecoveryModel
脚本来运行SIB1恢复模拟。该脚本在MATLAB命令提示符中显示其进度,并生成输入和输出的图形以供分析。该脚本还支持多种模拟用例。文中显示了完整的案例集及其参数。
模拟案例单边带模式共同PDCCH副载波间距配置SIB1信噪比dB Lmax最强的单边带索引 _______________ ___________ _________________________ _________________ ______ ___________________ ____ " SimCase 1”“案例C“30 164 50 4 8”SimCase 2”“案例B“15 100 6 3 4”SimCase 3”“案例”30 4 20 2 8“SimCase 4”“情况”15 84 7 0 4
这个例子显示了运行“SimCase 1”的结果。用MATLAB和Simulink生成的资源网格及其相对均方误差(MSE)显示出来。此比较验证了Simulink实现与MATLAB参考非常匹配。网格图被标记为突出显示已解码的PDCCH和PDSCH。脚本的最后阶段解码CORESET0、显示dci和解码SIB1。显示SIB1解码的结果,并将MATLAB和Simulink中的SIB1位进行比较,以验证它们是否匹配。
runSIB1RecoveryModel;
生成测试波形。利用MATLAB的参考资料搜索ssb。NCellID2 timegoffset pssCorrelation pssenergerfrequencyoffset ________ ____________ ______________ _________ _______________ 0 4416 0.81822 0.90289 5059 0 17568 0.65152 0.71764 4996 0 35136 1.6417 1.8089 5019 0 48288 1.2927 1.4275 5036 0 65856 5.1698 5.6955 4943 0 79008 1.1552 1.2723 5005 0 96576 2.065 2.2723 5015 0 1.0973e+05 1.0295 1.1339 4993使用MATLAB参考恢复SIB1网格。解码SSB使用MATLAB参考。使用MATLAB参考恢复SIB1网格。利用Simulink模型恢复SIB1网格。nrhdlSIB1Recovery运行。启动串行模型参考仿真构建。nrhdlCORESET0DecodingCore的模型参考模拟目标是最新的。nrhdlDDCFR1Core的模型参考模拟目标是最新的。 ### Model reference simulation target for nrhdlLDPCDecodingChainCore is up to date. ### Model reference simulation target for nrhdlPolarDecodingChainCore is up to date. ### Model reference simulation target for nrhdlSIB1DemodulationFR1Core is up to date. ### Model reference simulation target for nrhdlSSBDecodingCore is up to date. ### Model reference simulation target for nrhdlSSBDetectionFR1Core is up to date. Build Summary 0 of 7 models built (7 models already up to date) Build duration: 0h 0m 1.0194s .......... MATLAB and Simulink grids relative MSE : -62.0132 dB Extracting CORESET0 candidates from the SIB1 grid. Decoding CORESET0 candidates using MATLAB reference. Decoding CORESET0 candidates using Simulink. Running nrhdlSIB1Recovery.slx ### Starting serial model reference simulation build. ### Model reference simulation target for nrhdlCORESET0DecodingCore is up to date. ### Model reference simulation target for nrhdlDDCFR1Core is up to date. ### Model reference simulation target for nrhdlLDPCDecodingChainCore is up to date. ### Model reference simulation target for nrhdlPolarDecodingChainCore is up to date. ### Model reference simulation target for nrhdlSIB1DemodulationFR1Core is up to date. ### Model reference simulation target for nrhdlSSBDecodingCore is up to date. ### Model reference simulation target for nrhdlSSBDetectionFR1Core is up to date. Build Summary 0 of 7 models built (7 models already up to date) Build duration: 0h 0m 0.8094s .......... DCI from MATLAB: RIV: 528 TDDIndex: 0 VRBToPRBInterleaving: 0 ModCoding: 0 RV: 0 SIIndicator: 0 Reserved: 0 DCI from Simulink: RIV: 528 TDDIndex: 0 VRBToPRBInterleaving: 0 ModCoding: 0 RV: 0 SIIndicator: 0 Reserved: 0 DCI successfully decoded from Simulink grid with hardware acceleration Extracting LDPC codeword from the SIB1 grid. Decoding SIB1 using MATLAB reference. Decoding SIB1 using Simulink. Running nrhdlSIB1Recovery.slx ### Starting serial model reference simulation build. ### Model reference simulation target for nrhdlCORESET0DecodingCore is up to date. ### Model reference simulation target for nrhdlDDCFR1Core is up to date. ### Model reference simulation target for nrhdlLDPCDecodingChainCore is up to date. ### Model reference simulation target for nrhdlPolarDecodingChainCore is up to date. ### Model reference simulation target for nrhdlSIB1DemodulationFR1Core is up to date. ### Model reference simulation target for nrhdlSSBDecodingCore is up to date. ### Model reference simulation target for nrhdlSSBDetectionFR1Core is up to date. Build Summary 0 of 7 models built (7 models already up to date) Build duration: 0h 0m 0.85057s .......... SIB1 successfully decoded from Simulink grid with hardware acceleration SIB1 bits from MATLAB and Simulink match
HDL代码生成和实现结果
要为这个示例生成HDL代码,您必须拥有HDL Coder™产品。使用makehdl
而且makehdltb
命令生成HDL代码和用于的HDL测试台架nrhdlSIB1Recovery / SIB1恢复
子系统。合成的HDL代码用于Xilinx®Zynq®UltraScale+ RFSoC ZCU111评估板。下表显示了站点位置和路由资源的利用结果。该设计满足时钟频率为245.76 MHz的定时。
nrhdlsib1recover模型的资源利用率:
资源使用情况_______________ ______ Slice寄存器116600 Slice LUTs 79117 RAMB18 409 RAMB36 17 DSP48 275
若要将nrhdlSIB1Recovery模型部署到硬件平台并从空信号中恢复SIB1,请参阅在fpga和soc上部署NR HDL参考应用程序的例子。
附录
SIB1复苏接口
输入
dataIn: 14位有符号复值信号,以61.44 Msps采样。
validIn: 1位控制信号进行验证dataIn.
receiverParams:包含用于SSB搜索、解调和SIB1网格恢复的参数值的总线信号。
receiverStart:用于启动搜索或解调操作的1位控制信号。
coreset0DecodingIn:包含CORESET0解码输入数据的总线信号。
sib1LDPCDecodingIn:包含SIB1 LDPC解码输入数据的总线信号。
receiverParams公共汽车
frequencyOffset: 32位有符号值,指定要校正的频率偏移量。该信号连接到一个32位蓄能器的NCO。使用这个方程将值转换为Hz:frequencyOffset_Hz=frequencyOffset* 61.44e6 / 2^32。
subcarrierSpacing:指定子载波间距的2位无符号值。将此信号设置为0以选择15kHz,或1以选择30kHz。
模式:指定操作模式的1位无符号值。在搜索模式下将此信号设置为0,在demod模式下设置为1。
timingOffset: 21位无符号值,指定待解调SSB开始的时间偏移量。指定样本中的时间偏移为61.44 Msps,从0到1228799。该参数仅适用于demod模式。
NCellID2: 2位无符号值,指定待解调SSB的PSS(0、1或2)。该参数仅适用于demod模式。
Lmax: 2位无符号数,表示一次突发的最大ssb个数。取值为0表示4个,取值为1表示8个,取值为2表示64个。
sib1En: 1位非ssigned number,在MIB解码成功后启用SIB1网格恢复。
minChanBW: 2位无符号值,指定最小通道带宽。0表示5mhz, 1表示10mhz, 2表示40mhz。
ssbPattern:指定SSB模式的2位无符号值。0表示“Case A”,1表示“Case B”,2表示“Case C”。
coreset0DecodingIn公共汽车
gridDataIn: 16位signed CORESET0候选OFDM网格数据。
gridCtrlIn:采样控制总线信号进行验证gridDataIn.
NSym:当前资源元素组(REG)的4位OFDM符号号。
baseRBIdx:当前REG的7位基本CORESET0资源块索引。
searchSpaces:长度为3的3位无符号向量,表示聚合级别4、8和16上的搜索空间数量。
coreset0Syms: 2位无符号值,即CORESET0所跨越的OFDM符号的数量。
coreset0RBs: 2位无符号值,指定资源块的数量。0表示24,1表示48,2表示96。
NSlot: 7位无符号值,指定第一个被监视的CORESET0槽位的槽位号。
NCellID: 10位无符号值,为解调后SSB的cell ID。
sib1LDPCDecodingIn公共汽车
ldpcDta: 16位signed LDPC码字LLR数据。
ldpcCtrl:用于验证的示例控制总线ldpcData.
G:输入码字的15位长度。
ldpcZc: 16位无符号值,表示LDPC码字使用的提升大小。
tbs: 12位无符号值,表示已解码输出数据的长度。
输出
detectionStatus: 4位无符号值,表示当前SSB检测的进度。有关此信号的可能值,请参阅下一节。
ssbReport: ssbDetectionReportBus类型的总线。
reportValid: 1位控制信号,用于验证ssbReport输出。
ssbGrid: 16位有符号复值,即SSB资源网格数据。
ssbGridValid: 1位控制信号,用于验证ssbGrid输出。
pbchStatus: 2位无符号值,表示PBCH解码的进度。有关该信号可能值的更多信息,请参见下面。
bchStatus: 3位无符号值,表示BCH解码的进度。有关该信号可能值的更多信息,请参见下面。
ssbIndex3Lsb: 3位无符号值,是由DMRS搜索过程和Lmax计算的SSB索引的3个最低有效位。
pbchPayload: 32位无符号值,包含MIB和附加的PBCH定时数据。
ssbDecodeValid: 1位控制信号进行验证ssbIndex3Lsb而且pbchPayload.
sib1DemodStatus: 2位无符号值,表示SIB1网格解调操作的进度。
sib1Grid: 16位带符号复值SIB1资源网格数据。
sib1GridValid: 1位控制信号,用于验证sib1Grid输出。
coreset0Resources: coreset0ResourcesBus类型的总线。
coreset0Occasion: coreset0conditionbus类型的总线。
parsedMIB: MIBBus类型的总线。
coreset0Status: 3位无符号值,表示CORESET0解码过程的进度。
dciData: 41位无符号数据,包含最终解码的DCI。
firstOrSecondSlot: 1位值,指示是否在第一个(0)或第二个(1)监视槽位中找到已解码的DCI。
dciSearchFailed: 1位值,表示CORESET0 DCI搜索失败。
dciValid: 1位值,表示搜索完成。
dciNextFrame: 1位信号,在可输入下一个候选时向信号提供背压。
sib1Status: 3位无符号值,表示SIB1解码过程的进度。
sib1Bits: 1位数据,即最终解码的SIB1有效负载。
sib1BitsCtrl:用于验证的示例控制总线sib1Bits
sib1Err: 1位值,表示是否SIB1 CRC失败。
ssbDetectionReportBus
NCellID2: 2位无符号值,即检测到SSB的PSS(0,1或2)。
timingOffset: 21位无符号值,为检测到的SSB的时间偏移量。采样的时间偏移量为61.44 Msp,从0到1228799。
frequencyOffset: 32位有符号值,即检测到SSB的频率偏移量。这个信号的单位和frequencyOffset输入。
pssCorrelation: 32位无符号值,即PSS相关性的强度。
pssThreshold: 32位无符号值,为检测到PSS时的阈值。
sssCorrelation: 32位无符号值,即SSS相关性强度。此信号仅在demod模式下返回。
sssThreshold: 32位无符号值,为SSS阈值。该值仅在demod模式下返回。
NCellID: 10位无符号值,为解调后SSB的cell ID。该值仅在demod模式下返回。
coreset0ResourcesBus
resourceBlocks: 2位无符号值,指定资源块的数量。0表示24,1表示48,2表示96。
ofdmSymbols: 2位无符号值,即CORESET0所跨越的OFDM符号的数量。
frequencyOffset: 32位有符号值,指定从SSB到CORESET0的相对频率偏移量。该信号连接到一个32位蓄能器的NCO。使用这个方程将值转换为Hz:frequencyOffset_Hz=frequencyOffset* 61.44e6 / 2^32。
muxPattern: 2位无符号值,指定CORESET0多路复用模式。
coreset0OccasionBus
slotOffset: 5位无符号值,即从偶数帧头到第一个被监控槽位的槽位偏移。
firstSymbol: 3位无符号值,指定槽位中第一个被占用的OFDM符号。
MIBBus
sfn: 10位无符号值,即系统帧号(SFN)。
scsCommon: 1位无符号值,指定公共子载波间距。0表示15khz, 1表示30khz。
Kssb: 5位无符号值,即SSB与整个资源块网格之间的偏移量。
drmsTypeAPos: 1位无符号值,指定PDSCH分配类型A的DMRS符号的位置,其中0表示位置2,1表示位置3。
pdcchConfigSIB1: 8位无符号值,包含CORESET0的配置
cellBarred: 1位值,指示单元是否被禁止。
intraFreqReselection: 1位值,表示是否允许频率内重选。
hrf: 1位值,即半帧位。
ssbIdx: 6位值,为SSB的索引。
检测状态信号状态
0
:空闲——初始状态。等待第一次启动脉冲。1
:搜索模式——搜索PSS。2
:搜索模式—操作完成,未找到PSS。3.
:搜索模式——操作完成,找到一个或多个pss。4
: Demod模式——等待指定的PSS定时偏移。5
: Demod模式—操作完成,PSS未找到。6
: Demod模式——找到指定的PSS。解调资源网格并寻找SSS。7
: Demod模式——操作完成,没有发现SSS。返回解调后的资源网格。8
: Demod模式—操作完成,找到SSS。返回解调后的资源网格。
PBCH Status信号状态
0
:闲置1
: SSB网格的数据读入2
:执行DMRS搜索3.
:进行PBCH符号解调
BCH Status信号状态
0
:闲置1
:恢复速率2
:极性解码3.
: CRC错误4
: CRC通过,MIB检测到
SIB1 Demod Status信号状态
0
:初始状态。等待启动脉冲。1
:等待CORESET0定时场合。2
: OFDM解调并输出SIB1网格数据。
CORESET0解码状态信号状态
0
:初始状态。等待启动脉冲。1
:执行信道估计、均衡、符号解调和解乱。2
:执行极性速率恢复。3.
:进行极性和CRC解码。4
:候选解码失败,等待下一次尝试。5
:解码所有没有成功的候选人。6
:成功解码候选DCI。
SIB1解码状态信号状态
0
:初始状态。等待启动脉冲。1
:执行LDPC速率恢复。2
:进行LDPC解码。3.
: CRC解码。4
: SIB1解码失败。5
:成功解码SIB1。