Merge remote-tracking branch 'origin/develop-nr' into nr_fapi_for_push
This commit is contained in:
@@ -362,7 +362,7 @@ pipeline {
|
|||||||
stage ("Test physical simulators") {
|
stage ("Test physical simulators") {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
timeout (time: 20, unit: 'MINUTES') {
|
timeout (time: 45, unit: 'MINUTES') {
|
||||||
try {
|
try {
|
||||||
gitlabCommitStatus(name: "Test phy-sim") {
|
gitlabCommitStatus(name: "Test phy-sim") {
|
||||||
sh "./ci-scripts/oai-ci-vm-tool test --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
sh "./ci-scripts/oai-ci-vm-tool test --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
|
||||||
|
|||||||
@@ -51,14 +51,10 @@ def eNB_Repository
|
|||||||
def eNB_Branch
|
def eNB_Branch
|
||||||
def eNB_CommitID
|
def eNB_CommitID
|
||||||
def eNB_AllowMergeRequestProcess = false
|
def eNB_AllowMergeRequestProcess = false
|
||||||
def eNB_TargetBranch
|
def eNB_TargetBranch = "develop-nr"
|
||||||
def PROJECT_NAME = "test-boris"
|
def GIT_COMMIT_AUTHOR
|
||||||
def GIT_COMMIT_AUTHORi
|
|
||||||
def GIT_COMMIT_EMAIL
|
def GIT_COMMIT_EMAIL
|
||||||
def testStageName
|
def testStageName
|
||||||
// Reversing list because pop() will take the last (right-most) element
|
|
||||||
//def modeList = ['TesteNB', 'TestUE', 'TesteNB'].reverse()
|
|
||||||
|
|
||||||
// Global Parameters not to break the main.py command line and code.
|
// Global Parameters not to break the main.py command line and code.
|
||||||
def ADB_IPAddress = "none"
|
def ADB_IPAddress = "none"
|
||||||
def ADB_Username = "none"
|
def ADB_Username = "none"
|
||||||
@@ -201,12 +197,12 @@ pipeline {
|
|||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --ADBIPAddress=${ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBTargetBranch=${eNB_TargetBranch} --ADBIPAddress=${ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} ${mainPythonAllXmlFiles}"
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
||||||
for (xmlFile in myXmlTestSuite) {
|
for (xmlFile in myXmlTestSuite) {
|
||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --UEIPAddress=${params.eNB_IPAddress} --UEUserName=${eNB_Username} --UEPassword=${eNB_Password} --eNBBranch=${eNB_Branch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --UESourceCodePath=${params.eNB_SourceCodePath} --eNBRepository=${eNB_Repository} --eNBCommitID=${eNB_CommitID} --ADBIPAddress=${ADB_IPAddress} --EPCIPAddress=${EPC_IPAddress} --XMLTestFile=${xmlFile}"
|
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --UEIPAddress=${params.eNB_IPAddress} --UEUserName=${eNB_Username} --UEPassword=${eNB_Password} --UESourceCodePath=${params.eNB_SourceCodePath} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBTargetBranch=${eNB_TargetBranch} --ADBIPAddress=${ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --EPCIPAddress=${EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=/tmp/${EPC_Username} --EPCType=ltebox --XMLTestFile=${xmlFile}"
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
buildStageStatus = false
|
buildStageStatus = false
|
||||||
|
|||||||
+46
-15
@@ -56,6 +56,7 @@ OAI_UE_PROCESS_COULD_NOT_SYNC = -21
|
|||||||
OAI_UE_PROCESS_ASSERTION = -22
|
OAI_UE_PROCESS_ASSERTION = -22
|
||||||
OAI_UE_PROCESS_FAILED = -23
|
OAI_UE_PROCESS_FAILED = -23
|
||||||
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE = -24
|
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE = -24
|
||||||
|
OAI_UE_PROCESS_SEG_FAULT = -25
|
||||||
OAI_UE_PROCESS_OK = +6
|
OAI_UE_PROCESS_OK = +6
|
||||||
|
|
||||||
UE_STATUS_DETACHED = 0
|
UE_STATUS_DETACHED = 0
|
||||||
@@ -175,7 +176,6 @@ class SSHConnection():
|
|||||||
self.UELogFile = ''
|
self.UELogFile = ''
|
||||||
self.Build_OAI_UE_args = ''
|
self.Build_OAI_UE_args = ''
|
||||||
self.Initialize_OAI_UE_args = ''
|
self.Initialize_OAI_UE_args = ''
|
||||||
self.Initialize_OAI_eNB_args = ''
|
|
||||||
self.clean_repository = True
|
self.clean_repository = True
|
||||||
self.flexranCtrlInstalled = False
|
self.flexranCtrlInstalled = False
|
||||||
self.flexranCtrlStarted = False
|
self.flexranCtrlStarted = False
|
||||||
@@ -762,13 +762,18 @@ class SSHConnection():
|
|||||||
self.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface + '-softmodem -O ' + lSourcePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
self.command('echo "ulimit -c unlimited && ./ran_build/build/' + self.air_interface + '-softmodem -O ' + lSourcePath + '/' + ci_full_config_file + extra_options + '" > ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
self.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
self.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
self.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
self.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5)
|
||||||
self.command('echo ' + lPassWord + ' | sudo -S -E daemon --inherit --unsafe --name=enb' + str(self.eNB_instance) + '_daemon --chdir=' + lSourcePath + '/cmake_targets -o ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
self.command('hostnamectl','\$', 5)
|
||||||
|
result = re.search('CentOS Linux 7', str(self.ssh.before))
|
||||||
|
if result is not None:
|
||||||
|
self.command('echo $USER; nohup sudo ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10)
|
||||||
|
else:
|
||||||
|
self.command('echo ' + lPassWord + ' | sudo -S -E daemon --inherit --unsafe --name=enb' + str(self.eNB_instance) + '_daemon --chdir=' + lSourcePath + '/cmake_targets -o ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
|
||||||
self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log'
|
self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log'
|
||||||
if extra_options != '':
|
if extra_options != '':
|
||||||
self.eNBOptions[int(self.eNB_instance)] = extra_options
|
self.eNBOptions[int(self.eNB_instance)] = extra_options
|
||||||
time.sleep(6)
|
time.sleep(6)
|
||||||
doLoop = True
|
doLoop = True
|
||||||
loopCounter = 10
|
loopCounter = 20
|
||||||
while (doLoop):
|
while (doLoop):
|
||||||
loopCounter = loopCounter - 1
|
loopCounter = loopCounter - 1
|
||||||
if (loopCounter == 0):
|
if (loopCounter == 0):
|
||||||
@@ -983,14 +988,20 @@ class SSHConnection():
|
|||||||
tunnelInterfaceStatus = False
|
tunnelInterfaceStatus = False
|
||||||
else:
|
else:
|
||||||
tunnelInterfaceStatus = True
|
tunnelInterfaceStatus = True
|
||||||
|
else:
|
||||||
|
tunnelInterfaceStatus = True
|
||||||
|
|
||||||
self.close()
|
self.close()
|
||||||
if fullSyncStatus and gotSyncStatus and tunnelInterfaceStatus:
|
if fullSyncStatus and gotSyncStatus and tunnelInterfaceStatus:
|
||||||
self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'OK', ALL_PROCESSES_OK, 'OAI UE')
|
self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'OK', ALL_PROCESSES_OK, 'OAI UE')
|
||||||
logging.debug('\u001B[1m Initialize OAI UE Completed\u001B[0m')
|
logging.debug('\u001B[1m Initialize OAI UE Completed\u001B[0m')
|
||||||
else:
|
else:
|
||||||
self.htmlUEFailureMsg = 'oaitun_ue1 interface is either NOT mounted or NOT configured'
|
if self.air_interface == 'lte':
|
||||||
self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'KO', OAI_UE_PROCESS_NO_TUNNEL_INTERFACE, 'OAI UE')
|
self.htmlUEFailureMsg = 'oaitun_ue1 interface is either NOT mounted or NOT configured'
|
||||||
|
self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'KO', OAI_UE_PROCESS_NO_TUNNEL_INTERFACE, 'OAI UE')
|
||||||
|
else:
|
||||||
|
self.htmlUEFailureMsg = 'nr-uesoftmodem did NOT synced'
|
||||||
|
self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'KO', OAI_UE_PROCESS_COULD_NOT_SYNC, 'OAI UE')
|
||||||
logging.error('\033[91mInitialize OAI UE Failed! \033[0m')
|
logging.error('\033[91mInitialize OAI UE Failed! \033[0m')
|
||||||
self.AutoTerminateUEandeNB()
|
self.AutoTerminateUEandeNB()
|
||||||
|
|
||||||
@@ -2557,7 +2568,8 @@ class SSHConnection():
|
|||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
status_queue = SimpleQueue()
|
status_queue = SimpleQueue()
|
||||||
# in noS1 config, no need to check status from EPC
|
# in noS1 config, no need to check status from EPC
|
||||||
result = re.search('noS1', str(self.Initialize_eNB_args))
|
# in gNB also currently no need to check
|
||||||
|
result = re.search('noS1|band78', str(self.Initialize_eNB_args))
|
||||||
if result is None:
|
if result is None:
|
||||||
p = Process(target = SSH.CheckHSSProcess, args = (status_queue,))
|
p = Process(target = SSH.CheckHSSProcess, args = (status_queue,))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
@@ -3129,6 +3141,10 @@ class SSHConnection():
|
|||||||
statMsg = 'UE showed ' + str(nrCRCOK) + ' PDSCH decoding message(s)'
|
statMsg = 'UE showed ' + str(nrCRCOK) + ' PDSCH decoding message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
self.htmlUEFailureMsg += statMsg + '\n'
|
self.htmlUEFailureMsg += statMsg + '\n'
|
||||||
|
if not frequency_found:
|
||||||
|
statMsg = 'NR-UE could NOT synch!'
|
||||||
|
logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
|
self.htmlUEFailureMsg += statMsg + '\n'
|
||||||
if uciStatMsgCount > 0:
|
if uciStatMsgCount > 0:
|
||||||
statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)'
|
||||||
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m')
|
||||||
@@ -3143,20 +3159,32 @@ class SSHConnection():
|
|||||||
self.htmlUEFailureMsg += statMsg + '\n'
|
self.htmlUEFailureMsg += statMsg + '\n'
|
||||||
if foundSegFault:
|
if foundSegFault:
|
||||||
logging.debug('\u001B[1;37;41m UE ended with a Segmentation Fault! \u001B[0m')
|
logging.debug('\u001B[1;37;41m UE ended with a Segmentation Fault! \u001B[0m')
|
||||||
return ENB_PROCESS_SEG_FAULT
|
if not nrUEFlag:
|
||||||
|
return OAI_UE_PROCESS_SEG_FAULT
|
||||||
|
else:
|
||||||
|
if not frequency_found:
|
||||||
|
return OAI_UE_PROCESS_SEG_FAULT
|
||||||
if foundAssertion:
|
if foundAssertion:
|
||||||
logging.debug('\u001B[1;30;43m UE showed an assertion! \u001B[0m')
|
logging.debug('\u001B[1;30;43m UE showed an assertion! \u001B[0m')
|
||||||
self.htmlUEFailureMsg += 'UE showed an assertion!\n'
|
self.htmlUEFailureMsg += 'UE showed an assertion!\n'
|
||||||
if not mib_found or not frequency_found:
|
if not nrUEFlag:
|
||||||
return OAI_UE_PROCESS_ASSERTION
|
if not mib_found or not frequency_found:
|
||||||
|
return OAI_UE_PROCESS_ASSERTION
|
||||||
|
else:
|
||||||
|
if not frequency_found:
|
||||||
|
return OAI_UE_PROCESS_ASSERTION
|
||||||
if foundRealTimeIssue:
|
if foundRealTimeIssue:
|
||||||
logging.debug('\u001B[1;37;41m UE faced real time issues! \u001B[0m')
|
logging.debug('\u001B[1;37;41m UE faced real time issues! \u001B[0m')
|
||||||
self.htmlUEFailureMsg += 'UE faced real time issues!\n'
|
self.htmlUEFailureMsg += 'UE faced real time issues!\n'
|
||||||
#return ENB_PROCESS_REALTIME_ISSUE
|
#return ENB_PROCESS_REALTIME_ISSUE
|
||||||
if no_cell_sync_found and not mib_found:
|
if nrUEFlag:
|
||||||
logging.debug('\u001B[1;37;41m UE could not synchronize ! \u001B[0m')
|
if not frequency_found:
|
||||||
self.htmlUEFailureMsg += 'UE could not synchronize!\n'
|
return OAI_UE_PROCESS_COULD_NOT_SYNC
|
||||||
return OAI_UE_PROCESS_COULD_NOT_SYNC
|
else:
|
||||||
|
if no_cell_sync_found and not mib_found:
|
||||||
|
logging.debug('\u001B[1;37;41m UE could not synchronize ! \u001B[0m')
|
||||||
|
self.htmlUEFailureMsg += 'UE could not synchronize!\n'
|
||||||
|
return OAI_UE_PROCESS_COULD_NOT_SYNC
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def TerminateeNB(self):
|
def TerminateeNB(self):
|
||||||
@@ -3379,13 +3407,16 @@ class SSHConnection():
|
|||||||
logging.debug('\u001B[1m' + ueAction + ' Failed \u001B[0m')
|
logging.debug('\u001B[1m' + ueAction + ' Failed \u001B[0m')
|
||||||
self.htmlUEFailureMsg = '<b>' + ueAction + ' Failed</b>\n' + self.htmlUEFailureMsg
|
self.htmlUEFailureMsg = '<b>' + ueAction + ' Failed</b>\n' + self.htmlUEFailureMsg
|
||||||
self.CreateHtmlTestRow('N/A', 'KO', logStatus, 'UE')
|
self.CreateHtmlTestRow('N/A', 'KO', logStatus, 'UE')
|
||||||
# for NR-UE at the moment keep running
|
|
||||||
if self.air_interface == 'lte':
|
if self.air_interface == 'lte':
|
||||||
# In case of sniffing on commercial eNBs we have random results
|
# In case of sniffing on commercial eNBs we have random results
|
||||||
# Not an error then
|
# Not an error then
|
||||||
if (logStatus != OAI_UE_PROCESS_COULD_NOT_SYNC) or (ueAction != 'Sniffing'):
|
if (logStatus != OAI_UE_PROCESS_COULD_NOT_SYNC) or (ueAction != 'Sniffing'):
|
||||||
self.Initialize_OAI_UE_args = ''
|
self.Initialize_OAI_UE_args = ''
|
||||||
self.AutoTerminateUEandeNB()
|
self.AutoTerminateUEandeNB()
|
||||||
|
else:
|
||||||
|
if (logStatus == OAI_UE_PROCESS_COULD_NOT_SYNC):
|
||||||
|
self.Initialize_OAI_UE_args = ''
|
||||||
|
self.AutoTerminateUEandeNB()
|
||||||
else:
|
else:
|
||||||
logging.debug('\u001B[1m' + ueAction + ' Completed \u001B[0m')
|
logging.debug('\u001B[1m' + ueAction + ' Completed \u001B[0m')
|
||||||
self.htmlUEFailureMsg = '<b>' + ueAction + ' Completed</b>\n' + self.htmlUEFailureMsg
|
self.htmlUEFailureMsg = '<b>' + ueAction + ' Completed</b>\n' + self.htmlUEFailureMsg
|
||||||
@@ -3938,7 +3969,7 @@ class SSHConnection():
|
|||||||
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - eNB process not found</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - eNB process not found</td>\n')
|
||||||
elif (processesStatus == OAI_UE_PROCESS_FAILED):
|
elif (processesStatus == OAI_UE_PROCESS_FAILED):
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - OAI UE process not found</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - OAI UE process not found</td>\n')
|
||||||
elif (processesStatus == ENB_PROCESS_SEG_FAULT):
|
elif (processesStatus == ENB_PROCESS_SEG_FAULT) or (processesStatus == OAI_UE_PROCESS_SEG_FAULT):
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - ' + machine + ' process ended in Segmentation Fault</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - ' + machine + ' process ended in Segmentation Fault</td>\n')
|
||||||
elif (processesStatus == ENB_PROCESS_ASSERTION) or (processesStatus == OAI_UE_PROCESS_ASSERTION):
|
elif (processesStatus == ENB_PROCESS_ASSERTION) or (processesStatus == OAI_UE_PROCESS_ASSERTION):
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - ' + machine + ' process ended in Assertion</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - ' + machine + ' process ended in Assertion</td>\n')
|
||||||
|
|||||||
@@ -24,15 +24,16 @@
|
|||||||
<htmlTabRef>run-OAI-gNB-NR-UE-USRP</htmlTabRef>
|
<htmlTabRef>run-OAI-gNB-NR-UE-USRP</htmlTabRef>
|
||||||
<htmlTabName>run OAI gNB and OAI NR UE USRP</htmlTabName>
|
<htmlTabName>run OAI gNB and OAI NR UE USRP</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>4</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
090101 000001 090102 000002 090108 090109
|
090101 000001 090102 000002 090108 090109
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="090101">
|
<testCase id="090101">
|
||||||
<class>Initialize_OAI_eNB</class>
|
<class>Initialize_eNB</class>
|
||||||
<desc>Initialize gNB USRP</desc>
|
<desc>Initialize gNB USRP</desc>
|
||||||
<Initialize_OAI_eNB_args>-O ../../../ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf</Initialize_OAI_eNB_args>
|
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.106PRB.usrpn300.conf</Initialize_eNB_args>
|
||||||
<air_interface>NR</air_interface>
|
<air_interface>NR</air_interface>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>run-OAI-gNB-NR-UE-USRP</htmlTabRef>
|
||||||
|
<htmlTabName>run OAI gNB and OAI NR UE USRP</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
090108 090109
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="090108">
|
||||||
|
<class>Terminate_OAI_UE</class>
|
||||||
|
<desc>Terminate NR UE</desc>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="090109">
|
||||||
|
<class>Terminate_eNB</class>
|
||||||
|
<desc>Terminate gNB</desc>
|
||||||
|
<air_interface>NR</air_interface>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -2655,42 +2655,51 @@ add_executable(nr_dlschsim
|
|||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlschsim.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${UTIL_SRC}
|
||||||
${T_SOURCE})
|
${T_SOURCE})
|
||||||
target_link_libraries(nr_dlschsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} dl)
|
target_link_libraries(nr_dlschsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
add_executable(nr_pbchsim
|
add_executable(nr_pbchsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pbchsim.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${UTIL_SRC}
|
||||||
${T_SOURCE})
|
${T_SOURCE})
|
||||||
target_link_libraries(nr_pbchsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} dl)
|
target_link_libraries(nr_pbchsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
#PUCCH ---> Prashanth
|
#PUCCH ---> Prashanth
|
||||||
add_executable(nr_pucchsim
|
add_executable(nr_pucchsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pucchsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/pucchsim.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${UTIL_SRC}
|
||||||
${T_SOURCE})
|
${T_SOURCE})
|
||||||
target_link_libraries(nr_pucchsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} dl)
|
target_link_libraries(nr_pucchsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
#PUCCH ---> Prashanth
|
#PUCCH ---> Prashanth
|
||||||
|
|
||||||
add_executable(nr_dlsim
|
add_executable(nr_dlsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/dlsim.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
${OPENAIR_DIR}/common/utils/system.c
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${UTIL_SRC}
|
||||||
${T_SOURCE})
|
${T_SOURCE})
|
||||||
target_link_libraries(nr_dlsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} dl)
|
target_link_libraries(nr_dlsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
add_executable(nr_ulschsim
|
add_executable(nr_ulschsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulschsim.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${UTIL_SRC}
|
||||||
${T_SOURCE})
|
${T_SOURCE})
|
||||||
target_link_libraries(nr_ulschsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} dl)
|
target_link_libraries(nr_ulschsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB CONFIG_LIB MAC_NR_COMMON -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
add_executable(nr_ulsim
|
add_executable(nr_ulsim
|
||||||
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
|
${OPENAIR1_DIR}/SIMULATION/NR_PHY/ulsim.c
|
||||||
${OPENAIR_DIR}/common/utils/backtrace.c
|
${OPENAIR_DIR}/common/utils/backtrace.c
|
||||||
|
${OPENAIR_DIR}/common/utils/system.c
|
||||||
|
${UTIL_SRC}
|
||||||
${T_SOURCE})
|
${T_SOURCE})
|
||||||
target_link_libraries(nr_ulsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} dl)
|
target_link_libraries(nr_ulsim -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON RRC_LIB NR_RRC_LIB CONFIG_LIB L2_NR -Wl,--end-group m pthread ${ATLAS_LIBRARIES} ${T_LIB} ${ITTI_LIB} dl)
|
||||||
|
|
||||||
|
|
||||||
foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim)
|
foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim)
|
||||||
|
|||||||
@@ -367,6 +367,11 @@ const char* eurecomFunctionsNames[] = {
|
|||||||
"dlsch_decoding5",
|
"dlsch_decoding5",
|
||||||
"dlsch_decoding6",
|
"dlsch_decoding6",
|
||||||
"dlsch_decoding7",
|
"dlsch_decoding7",
|
||||||
|
"dlsch_segmentation",
|
||||||
|
"dlsch_deinterleaving",
|
||||||
|
"dlsch_rate_matching",
|
||||||
|
"dlsch_ldpc",
|
||||||
|
"dlsch_compine_seg",
|
||||||
"dlsch_pmch_decoding",
|
"dlsch_pmch_decoding",
|
||||||
"rx_pdcch",
|
"rx_pdcch",
|
||||||
"dci_decoding",
|
"dci_decoding",
|
||||||
|
|||||||
@@ -348,6 +348,11 @@ typedef enum {
|
|||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING5,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING5,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING6,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING6,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING7,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING7,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_SEGMENTATION,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC,
|
||||||
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_COMBINE_SEG,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH,
|
||||||
VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING,
|
VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING,
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ typedef struct {
|
|||||||
} T_cache_t;
|
} T_cache_t;
|
||||||
|
|
||||||
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD functions (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_FUNCTIONS (232)
|
#define VCD_NUM_FUNCTIONS (237)//(232)
|
||||||
|
|
||||||
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
/* number of VCD variables (to be kept up to date! see in T_messages.txt) */
|
||||||
#define VCD_NUM_VARIABLES (185)
|
#define VCD_NUM_VARIABLES (185)
|
||||||
|
|||||||
@@ -2613,6 +2613,31 @@ ID = VCD_FUNCTION_DLSCH_DECODING7
|
|||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
FORMAT = int,value
|
FORMAT = int,value
|
||||||
VCD_NAME = dlsch_decoding7
|
VCD_NAME = dlsch_decoding7
|
||||||
|
ID = VCD_FUNCTION_DLSCH_SEGMENTATION
|
||||||
|
DESC = VCD function DLSCH_SEGMENTATION
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = dlsch_segmentation
|
||||||
|
ID = VCD_FUNCTION_DLSCH_DEINTERLEAVING
|
||||||
|
DESC = VCD function DLSCH_DEINTERLEAVING
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = dlsch_deinterleaving
|
||||||
|
ID = VCD_FUNCTION_DLSCH_RATE_MATCHING
|
||||||
|
DESC = VCD function DLSCH_RATE_MATCHING
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = dlsch_rate_matching
|
||||||
|
ID = VCD_FUNCTION_DLSCH_LDPC
|
||||||
|
DESC = VCD function DLSCH_LDPC
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = dlsch_ldpc
|
||||||
|
ID = VCD_FUNCTION_DLSCH_COMBINE_SEG
|
||||||
|
DESC = VCD function DLSCH_COMBINE_SEG
|
||||||
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
FORMAT = int,value
|
||||||
|
VCD_NAME = dlsch_compine_seg
|
||||||
ID = VCD_FUNCTION_DLSCH_PMCH_DECODING
|
ID = VCD_FUNCTION_DLSCH_PMCH_DECODING
|
||||||
DESC = VCD function DLSCH_PMCH_DECODING
|
DESC = VCD function DLSCH_PMCH_DECODING
|
||||||
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
GROUP = ALL:VCD:ENB:VCD_FUNCTION
|
||||||
|
|||||||
@@ -684,6 +684,27 @@ static void* gNB_thread_prach( void* param ) {
|
|||||||
extern void init_td_thread(PHY_VARS_gNB *);
|
extern void init_td_thread(PHY_VARS_gNB *);
|
||||||
extern void init_te_thread(PHY_VARS_gNB *);
|
extern void init_te_thread(PHY_VARS_gNB *);
|
||||||
|
|
||||||
|
static void* process_stats_thread(void* param) {
|
||||||
|
|
||||||
|
PHY_VARS_gNB *gNB = (PHY_VARS_gNB*)param;
|
||||||
|
|
||||||
|
reset_meas(&gNB->dlsch_encoding_stats);
|
||||||
|
reset_meas(&gNB->dlsch_scrambling_stats);
|
||||||
|
reset_meas(&gNB->dlsch_modulation_stats);
|
||||||
|
|
||||||
|
wait_sync("process_stats_thread");
|
||||||
|
|
||||||
|
while(!oai_exit)
|
||||||
|
{
|
||||||
|
sleep(1);
|
||||||
|
print_meas(&gNB->dlsch_encoding_stats, "pdsch_encoding", NULL, NULL);
|
||||||
|
print_meas(&gNB->dlsch_scrambling_stats, "pdsch_scrambling", NULL, NULL);
|
||||||
|
print_meas(&gNB->dlsch_modulation_stats, "pdsch_modulation", NULL, NULL);
|
||||||
|
}
|
||||||
|
return(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void init_gNB_proc(int inst) {
|
void init_gNB_proc(int inst) {
|
||||||
int i=0;
|
int i=0;
|
||||||
int CC_id;
|
int CC_id;
|
||||||
@@ -731,6 +752,7 @@ void init_gNB_proc(int inst) {
|
|||||||
threadCreate( &L1_proc_tx->pthread, gNB_L1_thread_tx, gNB,"L1_proc_tx", -1, OAI_PRIORITY_RT);
|
threadCreate( &L1_proc_tx->pthread, gNB_L1_thread_tx, gNB,"L1_proc_tx", -1, OAI_PRIORITY_RT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(opp_enabled == 1) threadCreate(&proc->L1_stats_thread, process_stats_thread,(void *)gNB, "time_meas", -1, OAI_PRIORITY_RT_LOW);
|
||||||
//pthread_create( &proc->pthread_prach, attr_prach, gNB_thread_prach, gNB );
|
//pthread_create( &proc->pthread_prach, attr_prach, gNB_thread_prach, gNB );
|
||||||
char name[16];
|
char name[16];
|
||||||
|
|
||||||
|
|||||||
+32
-23
@@ -1075,30 +1075,39 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
|
|||||||
cfg->rx_bw = 1.5e6;
|
cfg->rx_bw = 1.5e6;
|
||||||
} else AssertFatal(1==0,"Unknown N_RB %d\n",N_RB);
|
} else AssertFatal(1==0,"Unknown N_RB %d\n",N_RB);
|
||||||
} else if (mu == NR_MU_1) {
|
} else if (mu == NR_MU_1) {
|
||||||
if(N_RB == 217) {
|
if(N_RB == 273) {
|
||||||
if (fp->threequarter_fs) {
|
if (fp->threequarter_fs) {
|
||||||
cfg->sample_rate=92.16e6;
|
AssertFatal(0 == 1,"three quarter sampling not supported for N_RB 273\n");
|
||||||
cfg->samples_per_frame = 921600;
|
|
||||||
cfg->tx_bw = 40e6;
|
|
||||||
cfg->rx_bw = 40e6;
|
|
||||||
} else {
|
} else {
|
||||||
cfg->sample_rate=122.88e6;
|
cfg->sample_rate=122.88e6;
|
||||||
cfg->samples_per_frame = 1228800;
|
cfg->samples_per_frame = 1228800;
|
||||||
cfg->tx_bw = 40e6;
|
cfg->tx_bw = 100e6;
|
||||||
cfg->rx_bw = 40e6;
|
cfg->rx_bw = 100e6;
|
||||||
|
}
|
||||||
|
} else if(N_RB == 217) {
|
||||||
|
if (fp->threequarter_fs) {
|
||||||
|
cfg->sample_rate=92.16e6;
|
||||||
|
cfg->samples_per_frame = 921600;
|
||||||
|
cfg->tx_bw = 80e6;
|
||||||
|
cfg->rx_bw = 80e6;
|
||||||
|
} else {
|
||||||
|
cfg->sample_rate=122.88e6;
|
||||||
|
cfg->samples_per_frame = 1228800;
|
||||||
|
cfg->tx_bw = 80e6;
|
||||||
|
cfg->rx_bw = 80e6;
|
||||||
}
|
}
|
||||||
} else if(N_RB == 106) {
|
} else if(N_RB == 106) {
|
||||||
if (fp->threequarter_fs) {
|
if (fp->threequarter_fs) {
|
||||||
cfg->sample_rate=46.08e6;
|
cfg->sample_rate=46.08e6;
|
||||||
cfg->samples_per_frame = 460800;
|
cfg->samples_per_frame = 460800;
|
||||||
cfg->tx_bw = 20e6;
|
cfg->tx_bw = 40e6;
|
||||||
cfg->rx_bw = 20e6;
|
cfg->rx_bw = 40e6;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cfg->sample_rate=61.44e6;
|
cfg->sample_rate=61.44e6;
|
||||||
cfg->samples_per_frame = 614400;
|
cfg->samples_per_frame = 614400;
|
||||||
cfg->tx_bw = 20e6;
|
cfg->tx_bw = 40e6;
|
||||||
cfg->rx_bw = 20e6;
|
cfg->rx_bw = 40e6;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
AssertFatal(0==1,"N_RB %d not yet supported for numerology %d\n",N_RB,mu);
|
AssertFatal(0==1,"N_RB %d not yet supported for numerology %d\n",N_RB,mu);
|
||||||
@@ -1693,7 +1702,7 @@ void init_RU_proc(RU_t *ru) {
|
|||||||
threadCreate( &proc->pthread_prach, ru_thread_prach, (void *)ru,"RACH", -1, OAI_PRIORITY_RT );
|
threadCreate( &proc->pthread_prach, ru_thread_prach, (void *)ru,"RACH", -1, OAI_PRIORITY_RT );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_nprocs()>=2) {
|
if (get_thread_worker_conf() == WORKER_ENABLE) {
|
||||||
if (ru->feprx) nr_init_feprx_thread(ru);
|
if (ru->feprx) nr_init_feprx_thread(ru);
|
||||||
|
|
||||||
if (ru->feptx_ofdm) nr_init_feptx_thread(ru);
|
if (ru->feptx_ofdm) nr_init_feptx_thread(ru);
|
||||||
@@ -1987,8 +1996,8 @@ void set_function_spec_param(RU_t *ru) {
|
|||||||
ru->fh_north_out = fh_if4p5_north_out; // send_IF4p5 on reception
|
ru->fh_north_out = fh_if4p5_north_out; // send_IF4p5 on reception
|
||||||
ru->fh_south_out = tx_rf; // send output to RF
|
ru->fh_south_out = tx_rf; // send output to RF
|
||||||
ru->fh_north_asynch_in = fh_if4p5_north_asynch_in; // TX packets come asynchronously
|
ru->fh_north_asynch_in = fh_if4p5_north_asynch_in; // TX packets come asynchronously
|
||||||
ru->feprx = (get_nprocs()<=2) ? nr_fep_full : nr_fep_full_2thread; // RX DFTs
|
ru->feprx = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_fep_full_2thread : nr_fep_full; // RX DFTs
|
||||||
ru->feptx_ofdm = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread; // this is fep with idft only (no precoding in RRU)
|
ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_feptx_ofdm_2thread : nr_feptx_ofdm; // this is fep with idft only (no precoding in RRU)
|
||||||
ru->feptx_prec = NULL;
|
ru->feptx_prec = NULL;
|
||||||
ru->nr_start_if = nr_start_if; // need to start the if interface for if4p5
|
ru->nr_start_if = nr_start_if; // need to start the if interface for if4p5
|
||||||
ru->ifdevice.host_type = RRU_HOST;
|
ru->ifdevice.host_type = RRU_HOST;
|
||||||
@@ -2009,8 +2018,8 @@ void set_function_spec_param(RU_t *ru) {
|
|||||||
malloc_IF4p5_buffer(ru);
|
malloc_IF4p5_buffer(ru);
|
||||||
} else if (ru->function == gNodeB_3GPP) {
|
} else if (ru->function == gNodeB_3GPP) {
|
||||||
ru->do_prach = 0; // no prach processing in RU
|
ru->do_prach = 0; // no prach processing in RU
|
||||||
ru->feprx = (get_nprocs()<=2) ? nr_fep_full : nr_fep_full_2thread; // RX DFTs
|
ru->feprx = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_fep_full_2thread : nr_fep_full; // RX DFTs
|
||||||
ru->feptx_ofdm = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread; // this is fep with idft and precoding
|
ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_feptx_ofdm_2thread : nr_feptx_ofdm; // this is fep with idft and precoding
|
||||||
ru->feptx_prec = NULL; // this is fep with idft and precoding
|
ru->feptx_prec = NULL; // this is fep with idft and precoding
|
||||||
ru->fh_north_in = NULL; // no incoming fronthaul from north
|
ru->fh_north_in = NULL; // no incoming fronthaul from north
|
||||||
ru->fh_north_out = NULL; // no outgoing fronthaul to north
|
ru->fh_north_out = NULL; // no outgoing fronthaul to north
|
||||||
@@ -2039,13 +2048,13 @@ void set_function_spec_param(RU_t *ru) {
|
|||||||
|
|
||||||
case REMOTE_IF5: // the remote unit is IF5 RRU
|
case REMOTE_IF5: // the remote unit is IF5 RRU
|
||||||
ru->do_prach = 0;
|
ru->do_prach = 0;
|
||||||
ru->feprx = (get_nprocs()<=2) ? nr_fep_full : nr_fep_full_2thread; // this is frequency-shift + DFTs
|
ru->feprx = nr_fep_full; // this is frequency-shift + DFTs
|
||||||
ru->feptx_prec = feptx_prec; // need to do transmit Precoding + IDFTs
|
ru->feptx_prec = feptx_prec; // need to do transmit Precoding + IDFTs
|
||||||
ru->feptx_ofdm = (get_nprocs()<=2) ? nr_feptx_ofdm : nr_feptx_ofdm_2thread; // need to do transmit Precoding + IDFTs
|
ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_ENABLE) ? nr_feptx_ofdm_2thread : nr_feptx_ofdm; // need to do transmit Precoding + IDFTs
|
||||||
ru->fh_south_in = fh_if5_south_in; // synchronous IF5 reception
|
ru->fh_south_in = fh_if5_south_in; // synchronous IF5 reception
|
||||||
ru->fh_south_out = fh_if5_south_out; // synchronous IF5 transmission
|
ru->fh_south_out = fh_if5_south_out; // synchronous IF5 transmission
|
||||||
ru->fh_south_asynch_in = NULL; // no asynchronous UL
|
ru->fh_south_asynch_in = NULL; // no asynchronous UL
|
||||||
ru->start_rf = NULL; // no local RF
|
ru->start_rf = NULL; // no local RF
|
||||||
ru->stop_rf = NULL;
|
ru->stop_rf = NULL;
|
||||||
ru->nr_start_if = nr_start_if; // need to start if interface for IF5
|
ru->nr_start_if = nr_start_if; // need to start if interface for IF5
|
||||||
ru->ifdevice.host_type = RAU_HOST;
|
ru->ifdevice.host_type = RAU_HOST;
|
||||||
|
|||||||
@@ -574,44 +574,44 @@ typedef struct {
|
|||||||
} nfapi_nr_dl_config_bch_pdu;
|
} nfapi_nr_dl_config_bch_pdu;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
nfapi_tl_t tl;
|
nfapi_tl_t tl;
|
||||||
uint16_t length;
|
uint16_t length;
|
||||||
uint8_t pdu_index;
|
uint8_t pdu_index;
|
||||||
uint16_t rnti;
|
uint16_t rnti;
|
||||||
uint16_t nb_mod_symbols;
|
uint16_t nb_mod_symbols;
|
||||||
uint8_t time_allocation_type;
|
uint8_t time_allocation_type;
|
||||||
uint8_t freq_allocation_type;
|
uint8_t freq_allocation_type;
|
||||||
uint8_t start_prb;
|
uint16_t start_prb;
|
||||||
uint8_t n_prb;
|
uint16_t n_prb;
|
||||||
uint8_t start_symbol;
|
uint8_t start_symbol;
|
||||||
uint8_t nb_symbols;
|
uint8_t nb_symbols;
|
||||||
uint8_t mcs_idx;
|
uint8_t mcs_idx;
|
||||||
uint8_t ndi;
|
uint8_t ndi;
|
||||||
uint8_t nb_codewords;
|
uint8_t nb_codewords;
|
||||||
uint8_t nb_layers;
|
uint8_t nb_layers;
|
||||||
uint16_t coding_rate;
|
uint16_t coding_rate;
|
||||||
uint8_t modulation;
|
uint8_t modulation;
|
||||||
uint8_t modulation_order;
|
uint8_t modulation_order;
|
||||||
uint16_t transport_block_size;
|
uint16_t transport_block_size;
|
||||||
uint8_t nb_re_dmrs;
|
uint8_t nb_re_dmrs;
|
||||||
uint8_t time_alloc_list_flag;
|
uint8_t time_alloc_list_flag;
|
||||||
uint8_t time_alloc_list;
|
uint8_t time_alloc_list;
|
||||||
uint8_t rbg_list;
|
uint8_t rbg_list;
|
||||||
uint8_t virtual_resource_block_assignment_flag;
|
uint8_t virtual_resource_block_assignment_flag;
|
||||||
uint32_t resource_block_coding;
|
uint32_t resource_block_coding;
|
||||||
uint8_t redundancy_version;
|
uint8_t redundancy_version;
|
||||||
uint8_t transport_blocks;
|
uint8_t transport_blocks;
|
||||||
uint8_t transmission_scheme;
|
uint8_t transmission_scheme;
|
||||||
uint8_t number_of_subbands;
|
uint8_t number_of_subbands;
|
||||||
uint8_t codebook_index[NFAPI_MAX_NUM_SUBBANDS];
|
uint8_t codebook_index[NFAPI_MAX_NUM_SUBBANDS];
|
||||||
uint8_t ue_category_capacity;
|
uint8_t ue_category_capacity;
|
||||||
uint8_t pa;
|
uint8_t pa;
|
||||||
uint8_t delta_power_offset_index;
|
uint8_t delta_power_offset_index;
|
||||||
uint8_t ngap;
|
uint8_t ngap;
|
||||||
uint8_t transmission_mode;
|
uint8_t transmission_mode;
|
||||||
uint8_t num_bf_prb_per_subband;
|
uint8_t num_bf_prb_per_subband;
|
||||||
uint8_t num_bf_vector;
|
uint8_t num_bf_vector;
|
||||||
nfapi_bf_vector_t bf_vector[NFAPI_MAX_BF_VECTORS];
|
nfapi_bf_vector_t bf_vector[NFAPI_MAX_BF_VECTORS];
|
||||||
}nfapi_nr_dl_config_dlsch_pdu_rel15_t;
|
}nfapi_nr_dl_config_dlsch_pdu_rel15_t;
|
||||||
#define NFAPI_NR_DL_CONFIG_REQUEST_DLSCH_PDU_REL15_TAG
|
#define NFAPI_NR_DL_CONFIG_REQUEST_DLSCH_PDU_REL15_TAG
|
||||||
|
|
||||||
|
|||||||
@@ -376,9 +376,11 @@ int send_mac_subframe_indications(vnf_p7_t* vnf_p7)
|
|||||||
if(curr->in_sync == 1)
|
if(curr->in_sync == 1)
|
||||||
{
|
{
|
||||||
// ask for subframes in the future
|
// ask for subframes in the future
|
||||||
uint16_t sfn_sf_adv = increment_sfn_sf_by(curr->sfn_sf, 2);
|
//uint16_t sfn_sf_adv = increment_sfn_sf_by(curr->sfn_sf, 2);
|
||||||
|
|
||||||
vnf_p7->_public.subframe_indication(&(vnf_p7->_public), curr->phy_id, sfn_sf_adv);
|
//vnf_p7->_public.subframe_indication(&(vnf_p7->_public), curr->phy_id, sfn_sf_adv);
|
||||||
|
// suggestion fix by Haruki NAOI
|
||||||
|
vnf_p7->_public.subframe_indication(&(vnf_p7->_public), curr->phy_id, curr->sfn_sf);
|
||||||
}
|
}
|
||||||
|
|
||||||
curr = curr->next;
|
curr = curr->next;
|
||||||
|
|||||||
@@ -271,17 +271,17 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
|
|||||||
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
||||||
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
||||||
|
|
||||||
start_meas(tinput);
|
if(tinput != NULL) start_meas(tinput);
|
||||||
for (i=0; i<block_length; i++) {
|
for (i=0; i<block_length; i++) {
|
||||||
c[i] = (test_input[i/8]&(1<<(i&7)))>>(i&7);
|
c[i] = (test_input[i/8]&(1<<(i&7)))>>(i&7);
|
||||||
//printf("c(%d,%d)=%d\n",j,i,temp);
|
//printf("c(%d,%d)=%d\n",j,i,temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_meas(tinput);
|
if(tinput != NULL) stop_meas(tinput);
|
||||||
|
|
||||||
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
||||||
// extend matrix
|
// extend matrix
|
||||||
start_meas(tprep);
|
if(tprep != NULL) start_meas(tprep);
|
||||||
for (i1=0; i1 < ncols; i1++)
|
for (i1=0; i1 < ncols; i1++)
|
||||||
{
|
{
|
||||||
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
||||||
@@ -296,11 +296,11 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
stop_meas(tprep);
|
if(tprep != NULL) stop_meas(tprep);
|
||||||
//parity check part
|
//parity check part
|
||||||
start_meas(tparity);
|
if(tparity != NULL) start_meas(tparity);
|
||||||
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
||||||
stop_meas(tparity);
|
if(tparity != NULL) stop_meas(tparity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
||||||
@@ -308,12 +308,12 @@ int ldpc_encoder_optim(unsigned char *test_input,unsigned char *channel_input,sh
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start_meas(toutput);
|
if(toutput != NULL) start_meas(toutput);
|
||||||
// information part and puncture columns
|
// information part and puncture columns
|
||||||
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
||||||
memcpy(&channel_input[block_length-2*Zc], &d[0], ((nrows-no_punctured_columns) * Zc-removed_bit)*sizeof(unsigned char));
|
memcpy(&channel_input[block_length-2*Zc], &d[0], ((nrows-no_punctured_columns) * Zc-removed_bit)*sizeof(unsigned char));
|
||||||
|
|
||||||
stop_meas(toutput);
|
if(toutput != NULL) stop_meas(toutput);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,7 +408,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
|||||||
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
||||||
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
||||||
|
|
||||||
start_meas(tinput);
|
if(tinput != NULL) start_meas(tinput);
|
||||||
#if 0
|
#if 0
|
||||||
for (i=0; i<block_length; i++) {
|
for (i=0; i<block_length; i++) {
|
||||||
for (j=0; j<n_segments; j++) {
|
for (j=0; j<n_segments; j++) {
|
||||||
@@ -441,11 +441,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stop_meas(tinput);
|
if(tinput != NULL) stop_meas(tinput);
|
||||||
|
|
||||||
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
||||||
// extend matrix
|
// extend matrix
|
||||||
start_meas(tprep);
|
if(tprep != NULL) start_meas(tprep);
|
||||||
for (i1=0; i1 < ncols; i1++)
|
for (i1=0; i1 < ncols; i1++)
|
||||||
{
|
{
|
||||||
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
||||||
@@ -460,11 +460,11 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
stop_meas(tprep);
|
if(tprep != NULL) stop_meas(tprep);
|
||||||
//parity check part
|
//parity check part
|
||||||
start_meas(tparity);
|
if(tparity != NULL) start_meas(tparity);
|
||||||
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
||||||
stop_meas(tparity);
|
if(tparity != NULL) stop_meas(tparity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
||||||
@@ -472,7 +472,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start_meas(toutput);
|
if(toutput != NULL) start_meas(toutput);
|
||||||
// information part and puncture columns
|
// information part and puncture columns
|
||||||
/*
|
/*
|
||||||
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
||||||
@@ -513,7 +513,7 @@ int ldpc_encoder_optim_8seg(unsigned char **test_input,unsigned char **channel_i
|
|||||||
AssertFatal(1==0,"Need AVX2 for now\n");
|
AssertFatal(1==0,"Need AVX2 for now\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stop_meas(toutput);
|
if(toutput != NULL) stop_meas(toutput);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -613,7 +613,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
|||||||
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
memset(c,0,sizeof(unsigned char) * ncols * Zc);
|
||||||
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
memset(d,0,sizeof(unsigned char) * nrows * Zc);
|
||||||
|
|
||||||
start_meas(tinput);
|
if(tinput != NULL) start_meas(tinput);
|
||||||
#if 0
|
#if 0
|
||||||
for (i=0; i<block_length; i++) {
|
for (i=0; i<block_length; i++) {
|
||||||
//for (j=0; j<n_segments; j++) {
|
//for (j=0; j<n_segments; j++) {
|
||||||
@@ -649,11 +649,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stop_meas(tinput);
|
if(tinput != NULL) stop_meas(tinput);
|
||||||
|
|
||||||
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
if ((BG==1 && Zc>176) || (BG==2 && Zc>64)) {
|
||||||
// extend matrix
|
// extend matrix
|
||||||
start_meas(tprep);
|
if(tprep != NULL) start_meas(tprep);
|
||||||
for (i1=0; i1 < ncols; i1++)
|
for (i1=0; i1 < ncols; i1++)
|
||||||
{
|
{
|
||||||
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
memcpy(&c_extension[2*i1*Zc], &c[i1*Zc], Zc*sizeof(unsigned char));
|
||||||
@@ -668,11 +668,11 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
stop_meas(tprep);
|
if(tprep != NULL) stop_meas(tprep);
|
||||||
//parity check part
|
//parity check part
|
||||||
start_meas(tparity);
|
if(tparity != NULL) start_meas(tparity);
|
||||||
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
encode_parity_check_part_optim(c_extension, d, BG, Zc, Kb);
|
||||||
stop_meas(tparity);
|
if(tparity != NULL) stop_meas(tparity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
if (encode_parity_check_part_orig(c, d, BG, Zc, Kb, block_length)!=0) {
|
||||||
@@ -680,7 +680,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
start_meas(toutput);
|
if(toutput != NULL) start_meas(toutput);
|
||||||
// information part and puncture columns
|
// information part and puncture columns
|
||||||
/*
|
/*
|
||||||
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
memcpy(&channel_input[0], &c[2*Zc], (block_length-2*Zc)*sizeof(unsigned char));
|
||||||
@@ -726,7 +726,7 @@ int ldpc_encoder_optim_8seg_multi(unsigned char **test_input,unsigned char **cha
|
|||||||
AssertFatal(1==0,"Need AVX2 for now\n");
|
AssertFatal(1==0,"Need AVX2 for now\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stop_meas(toutput);
|
if(toutput != NULL) stop_meas(toutput);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,10 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
|
|||||||
int frame,
|
int frame,
|
||||||
uint8_t slot,
|
uint8_t slot,
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
nfapi_nr_config_request_t *config) {
|
nfapi_nr_config_request_t *config,
|
||||||
|
time_stats_t *dlsch_encoding_stats,
|
||||||
|
time_stats_t *dlsch_scrambling_stats,
|
||||||
|
time_stats_t *dlsch_modulation_stats) {
|
||||||
|
|
||||||
NR_DL_gNB_HARQ_t *harq = dlsch->harq_processes[dci_alloc->harq_pid];
|
NR_DL_gNB_HARQ_t *harq = dlsch->harq_processes[dci_alloc->harq_pid];
|
||||||
nfapi_nr_dl_config_dlsch_pdu_rel15_t *rel15 = &harq->dlsch_pdu.dlsch_pdu_rel15;
|
nfapi_nr_dl_config_dlsch_pdu_rel15_t *rel15 = &harq->dlsch_pdu.dlsch_pdu_rel15;
|
||||||
@@ -89,7 +92,9 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
|
|||||||
|
|
||||||
/// CRC, coding, interleaving and rate matching
|
/// CRC, coding, interleaving and rate matching
|
||||||
AssertFatal(harq->pdu!=NULL,"harq->pdu is null\n");
|
AssertFatal(harq->pdu!=NULL,"harq->pdu is null\n");
|
||||||
|
start_meas(dlsch_encoding_stats);
|
||||||
nr_dlsch_encoding(harq->pdu, frame, slot, dlsch, frame_parms);
|
nr_dlsch_encoding(harq->pdu, frame, slot, dlsch, frame_parms);
|
||||||
|
stop_meas(dlsch_encoding_stats);
|
||||||
#ifdef DEBUG_DLSCH
|
#ifdef DEBUG_DLSCH
|
||||||
printf("PDSCH encoding:\nPayload:\n");
|
printf("PDSCH encoding:\nPayload:\n");
|
||||||
for (int i=0; i<harq->B>>7; i++) {
|
for (int i=0; i<harq->B>>7; i++) {
|
||||||
@@ -107,6 +112,7 @@ printf("\n");
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// scrambling
|
/// scrambling
|
||||||
|
start_meas(dlsch_scrambling_stats);
|
||||||
for (int q=0; q<rel15->nb_codewords; q++)
|
for (int q=0; q<rel15->nb_codewords; q++)
|
||||||
memset((void*)scrambled_output[q], 0, (encoded_length>>5)*sizeof(uint32_t));
|
memset((void*)scrambled_output[q], 0, (encoded_length>>5)*sizeof(uint32_t));
|
||||||
uint16_t n_RNTI = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? \
|
uint16_t n_RNTI = (pdcch_params.search_space_type == NFAPI_NR_SEARCH_SPACE_TYPE_UE_SPECIFIC)? \
|
||||||
@@ -120,6 +126,7 @@ printf("\n");
|
|||||||
Nid,
|
Nid,
|
||||||
n_RNTI,
|
n_RNTI,
|
||||||
scrambled_output[q]);
|
scrambled_output[q]);
|
||||||
|
stop_meas(dlsch_scrambling_stats);
|
||||||
#ifdef DEBUG_DLSCH
|
#ifdef DEBUG_DLSCH
|
||||||
printf("PDSCH scrambling:\n");
|
printf("PDSCH scrambling:\n");
|
||||||
for (int i=0; i<encoded_length>>8; i++) {
|
for (int i=0; i<encoded_length>>8; i++) {
|
||||||
@@ -130,12 +137,13 @@ for (int i=0; i<encoded_length>>8; i++) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Modulation
|
/// Modulation
|
||||||
|
start_meas(dlsch_modulation_stats);
|
||||||
for (int q=0; q<rel15->nb_codewords; q++)
|
for (int q=0; q<rel15->nb_codewords; q++)
|
||||||
nr_modulation(scrambled_output[q],
|
nr_modulation(scrambled_output[q],
|
||||||
encoded_length,
|
encoded_length,
|
||||||
Qm,
|
Qm,
|
||||||
mod_symbs[q]);
|
mod_symbs[q]);
|
||||||
|
stop_meas(dlsch_modulation_stats);
|
||||||
#ifdef DEBUG_DLSCH
|
#ifdef DEBUG_DLSCH
|
||||||
printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_symbols);
|
printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_symbols);
|
||||||
for (int i=0; i<nb_symbols>>3; i++) {
|
for (int i=0; i<nb_symbols>>3; i++) {
|
||||||
|
|||||||
@@ -74,7 +74,11 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
|
|||||||
int frame,
|
int frame,
|
||||||
uint8_t slot,
|
uint8_t slot,
|
||||||
NR_DL_FRAME_PARMS *frame_parms,
|
NR_DL_FRAME_PARMS *frame_parms,
|
||||||
nfapi_nr_config_request_t *config);
|
nfapi_nr_config_request_t *config,
|
||||||
|
time_stats_t *dlsch_encoding_stats,
|
||||||
|
time_stats_t *dlsch_scrambling_stats,
|
||||||
|
time_stats_t *dlsch_modulation_stats);
|
||||||
|
|
||||||
|
|
||||||
void free_gNB_dlsch(NR_gNB_DLSCH_t *dlsch);
|
void free_gNB_dlsch(NR_gNB_DLSCH_t *dlsch);
|
||||||
|
|
||||||
|
|||||||
@@ -366,7 +366,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
|||||||
|
|
||||||
//printf("segment Z %d k %d Kr %d BG %d\n", *pz,dlsch->harq_processes[harq_pid]->K,Kr,BG);
|
//printf("segment Z %d k %d Kr %d BG %d\n", *pz,dlsch->harq_processes[harq_pid]->K,Kr,BG);
|
||||||
|
|
||||||
//start_meas(te_stats);
|
|
||||||
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
|
for (r=0; r<dlsch->harq_processes[harq_pid]->C; r++) {
|
||||||
//d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
|
//d_tmp[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
|
||||||
//channel_input[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
|
//channel_input[r] = &dlsch->harq_processes[harq_pid]->d[r][0];
|
||||||
@@ -398,7 +397,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
|||||||
//ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
|
//ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,d_tmp,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
|
||||||
ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,dlsch->harq_processes[harq_pid]->d,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
|
ldpc_encoder_optim_8seg(dlsch->harq_processes[harq_pid]->c,dlsch->harq_processes[harq_pid]->d,Kr,BG,dlsch->harq_processes[harq_pid]->C,NULL,NULL,NULL,NULL);
|
||||||
|
|
||||||
//stop_meas(te_stats);
|
|
||||||
//printf("end ldpc encoder -- output\n");
|
//printf("end ldpc encoder -- output\n");
|
||||||
|
|
||||||
#ifdef DEBUG_DLSCH_CODING
|
#ifdef DEBUG_DLSCH_CODING
|
||||||
@@ -425,7 +423,6 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
|||||||
mod_order,nb_rb);
|
mod_order,nb_rb);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//start_meas(rm_stats);
|
|
||||||
#ifdef DEBUG_DLSCH_CODING
|
#ifdef DEBUG_DLSCH_CODING
|
||||||
printf("rvidx in encoding = %d\n", rel15.redundancy_version);
|
printf("rvidx in encoding = %d\n", rel15.redundancy_version);
|
||||||
#endif
|
#endif
|
||||||
@@ -447,14 +444,11 @@ int nr_dlsch_encoding(unsigned char *a,int frame,
|
|||||||
for (int i =0; i<16; i++)
|
for (int i =0; i<16; i++)
|
||||||
printf("output ratematching e[%d]= %d r_offset %d\n", i,dlsch->harq_processes[harq_pid]->e[i+r_offset], r_offset);
|
printf("output ratematching e[%d]= %d r_offset %d\n", i,dlsch->harq_processes[harq_pid]->e[i+r_offset], r_offset);
|
||||||
#endif
|
#endif
|
||||||
//stop_meas(rm_stats);
|
|
||||||
|
|
||||||
//start_meas(i_stats);
|
|
||||||
nr_interleaving_ldpc(E,
|
nr_interleaving_ldpc(E,
|
||||||
mod_order,
|
mod_order,
|
||||||
dlsch->harq_processes[harq_pid]->e+r_offset,
|
dlsch->harq_processes[harq_pid]->e+r_offset,
|
||||||
dlsch->harq_processes[harq_pid]->f+r_offset);
|
dlsch->harq_processes[harq_pid]->f+r_offset);
|
||||||
//stop_meas(i_stats);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_DLSCH_CODING
|
#ifdef DEBUG_DLSCH_CODING
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
* \warning
|
* \warning
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||||
#include "PHY/defs_nr_UE.h"
|
#include "PHY/defs_nr_UE.h"
|
||||||
#include "PHY/phy_extern_nr_ue.h"
|
#include "PHY/phy_extern_nr_ue.h"
|
||||||
#include "PHY/CODING/coding_extern.h"
|
#include "PHY/CODING/coding_extern.h"
|
||||||
@@ -307,6 +308,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
|
|
||||||
LOG_I(PHY,"DLSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d\n",harq_pid,A,G, harq_process->mcs, harq_process->Nl, nb_symb_sch,nb_rb);
|
LOG_I(PHY,"DLSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d\n",harq_pid,A,G, harq_process->mcs, harq_process->Nl, nb_symb_sch,nb_rb);
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_SEGMENTATION, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
if (harq_process->round == 0) {
|
if (harq_process->round == 0) {
|
||||||
// This is a new packet, so compute quantities regarding segmentation
|
// This is a new packet, so compute quantities regarding segmentation
|
||||||
harq_process->B = A+24;
|
harq_process->B = A+24;
|
||||||
@@ -324,6 +327,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_SEGMENTATION, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
p_decParams->Z = harq_process->Z;
|
p_decParams->Z = harq_process->Z;
|
||||||
//printf("dlsch decoding nr segmentation Z %d\n", p_decParams->Z);
|
//printf("dlsch decoding nr segmentation Z %d\n", p_decParams->Z);
|
||||||
|
|
||||||
@@ -406,11 +411,16 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
start_meas(dlsch_deinterleaving_stats);
|
start_meas(dlsch_deinterleaving_stats);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
nr_deinterleaving_ldpc(E,
|
nr_deinterleaving_ldpc(E,
|
||||||
harq_process->Qm,
|
harq_process->Qm,
|
||||||
harq_process->w[r], // [hna] w is e
|
harq_process->w[r], // [hna] w is e
|
||||||
dlsch_llr+r_offset);
|
dlsch_llr+r_offset);
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
//for (int i =0; i<16; i++)
|
//for (int i =0; i<16; i++)
|
||||||
// printf("rx output deinterleaving w[%d]= %d r_offset %d\n", i,harq_process->w[r][i], r_offset);
|
// printf("rx output deinterleaving w[%d]= %d r_offset %d\n", i,harq_process->w[r][i], r_offset);
|
||||||
|
|
||||||
@@ -434,6 +444,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
harq_process->round);
|
harq_process->round);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
if (nr_rate_matching_ldpc_rx(Ilbrm,
|
if (nr_rate_matching_ldpc_rx(Ilbrm,
|
||||||
Tbslbrm,
|
Tbslbrm,
|
||||||
p_decParams->BG,
|
p_decParams->BG,
|
||||||
@@ -444,12 +456,15 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
harq_process->rvidx,
|
harq_process->rvidx,
|
||||||
(harq_process->round==0)?1:0,
|
(harq_process->round==0)?1:0,
|
||||||
E)==-1) {
|
E)==-1) {
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT);
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
stop_meas(dlsch_rate_unmatching_stats);
|
stop_meas(dlsch_rate_unmatching_stats);
|
||||||
#endif
|
#endif
|
||||||
LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
|
LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
|
||||||
return(dlsch->max_ldpc_iterations + 1);
|
return(dlsch->max_ldpc_iterations + 1);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT);
|
||||||
#if UE_TIMING_TRACE
|
#if UE_TIMING_TRACE
|
||||||
stop_meas(dlsch_rate_unmatching_stats);
|
stop_meas(dlsch_rate_unmatching_stats);
|
||||||
#endif
|
#endif
|
||||||
@@ -515,12 +530,16 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
pl[j] = _mm_packs_epi16(pv[i],pv[i+1]);
|
pl[j] = _mm_packs_epi16(pv[i],pv[i+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
no_iteration_ldpc = nrLDPC_decoder(p_decParams,
|
no_iteration_ldpc = nrLDPC_decoder(p_decParams,
|
||||||
(int8_t*)&pl[0],
|
(int8_t*)&pl[0],
|
||||||
llrProcBuf,
|
llrProcBuf,
|
||||||
p_nrLDPC_procBuf[r],
|
p_nrLDPC_procBuf[r],
|
||||||
p_procTime);
|
p_procTime);
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
|
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
|
||||||
if (check_crc((uint8_t*)llrProcBuf,length_dec,harq_process->F,crc_type)) {
|
if (check_crc((uint8_t*)llrProcBuf,length_dec,harq_process->F,crc_type)) {
|
||||||
printf("\x1B[34m" "Segment %d CRC OK\n",r);
|
printf("\x1B[34m" "Segment %d CRC OK\n",r);
|
||||||
@@ -642,6 +661,9 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
printf("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3);
|
printf("F %d, Fbytes %d\n",harq_process->F,harq_process->F>>3);
|
||||||
printf("C %d\n",harq_process->C);
|
printf("C %d\n",harq_process->C);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_COMBINE_SEG, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
for (r=0; r<harq_process->C; r++) {
|
for (r=0; r<harq_process->C; r++) {
|
||||||
|
|
||||||
memcpy(harq_process->b+offset,
|
memcpy(harq_process->b+offset,
|
||||||
@@ -661,6 +683,8 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_COMBINE_SEG, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
dlsch->last_iteration_cnt = ret;
|
dlsch->last_iteration_cnt = ret;
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
|
|||||||
@@ -491,6 +491,8 @@ typedef struct gNB_L1_proc_t_s {
|
|||||||
pthread_t pthread_single;
|
pthread_t pthread_single;
|
||||||
/// pthread structure for asychronous RX/TX processing thread
|
/// pthread structure for asychronous RX/TX processing thread
|
||||||
pthread_t pthread_asynch_rxtx;
|
pthread_t pthread_asynch_rxtx;
|
||||||
|
/// pthread structure for printing time meas
|
||||||
|
pthread_t L1_stats_thread;
|
||||||
/// flag to indicate first RX acquisition
|
/// flag to indicate first RX acquisition
|
||||||
int first_rx;
|
int first_rx;
|
||||||
/// flag to indicate first TX transmission
|
/// flag to indicate first TX transmission
|
||||||
|
|||||||
@@ -200,7 +200,10 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
|||||||
&gNB->pdcch_vars.dci_alloc[i],
|
&gNB->pdcch_vars.dci_alloc[i],
|
||||||
gNB->nr_gold_pdsch_dmrs[slot],
|
gNB->nr_gold_pdsch_dmrs[slot],
|
||||||
gNB->common_vars.txdataF,
|
gNB->common_vars.txdataF,
|
||||||
AMP, frame, slot, fp, cfg);
|
AMP, frame, slot, fp, cfg,
|
||||||
|
&gNB->dlsch_encoding_stats,
|
||||||
|
&gNB->dlsch_scrambling_stats,
|
||||||
|
&gNB->dlsch_modulation_stats);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
#include "common/ran_context.h"
|
#include "common/ran_context.h"
|
||||||
#include "common/config/config_userapi.h"
|
#include "common/config/config_userapi.h"
|
||||||
#include "common/utils/LOG/log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
|
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||||
|
#include "T.h"
|
||||||
#include "PHY/defs_gNB.h"
|
#include "PHY/defs_gNB.h"
|
||||||
#include "PHY/defs_nr_common.h"
|
#include "PHY/defs_nr_common.h"
|
||||||
#include "PHY/defs_nr_UE.h"
|
#include "PHY/defs_nr_UE.h"
|
||||||
@@ -117,7 +119,7 @@ int main(int argc, char **argv)
|
|||||||
//logInit();
|
//logInit();
|
||||||
randominit(0);
|
randominit(0);
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "df:hpg:i:j:n:l:m:r:s:S:y:z:M:N:F:R:P:L:")) != -1) {
|
while ((c = getopt(argc, argv, "df:hpVg:i:j:n:l:m:r:s:S:y:z:M:N:F:R:P:L:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
/*case 'f':
|
/*case 'f':
|
||||||
write_output_file = 1;
|
write_output_file = 1;
|
||||||
@@ -190,6 +192,10 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
ouput_vcd = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'S':
|
case 'S':
|
||||||
snr1 = atof(optarg);
|
snr1 = atof(optarg);
|
||||||
snr1set = 1;
|
snr1set = 1;
|
||||||
@@ -288,6 +294,7 @@ int main(int argc, char **argv)
|
|||||||
printf("%s -h(elp) -p(extended_prefix) -N cell_id -f output_filename -F input_filename -g channel_model -n n_frames -t Delayspread -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant -i Intefrence0 -j Interference1 -A interpolation_file -C(alibration offset dB) -N CellId\n", argv[0]);
|
printf("%s -h(elp) -p(extended_prefix) -N cell_id -f output_filename -F input_filename -g channel_model -n n_frames -t Delayspread -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant -i Intefrence0 -j Interference1 -A interpolation_file -C(alibration offset dB) -N CellId\n", argv[0]);
|
||||||
printf("-h This message\n");
|
printf("-h This message\n");
|
||||||
printf("-p Use extended prefix mode\n");
|
printf("-p Use extended prefix mode\n");
|
||||||
|
printf("-V Enable VCD dumb functions\n");
|
||||||
//printf("-d Use TDD\n");
|
//printf("-d Use TDD\n");
|
||||||
printf("-n Number of frames to simulate\n");
|
printf("-n Number of frames to simulate\n");
|
||||||
printf("-s Starting SNR, runs from SNR0 to SNR0 + 5 dB. If n_frames is 1 then just SNR is simulated\n");
|
printf("-s Starting SNR, runs from SNR0 to SNR0 + 5 dB. If n_frames is 1 then just SNR is simulated\n");
|
||||||
@@ -319,6 +326,9 @@ int main(int argc, char **argv)
|
|||||||
if (snr1set == 0)
|
if (snr1set == 0)
|
||||||
snr1 = snr0 + 10;
|
snr1 = snr0 + 10;
|
||||||
|
|
||||||
|
if (ouput_vcd)
|
||||||
|
vcd_signal_dumper_init("/tmp/openair_dump_nr_dlschsim.vcd");
|
||||||
|
|
||||||
gNB2UE = new_channel_desc_scm(n_tx, n_rx, channel_model,
|
gNB2UE = new_channel_desc_scm(n_tx, n_rx, channel_model,
|
||||||
61.44e6, //N_RB2sampling_rate(N_RB_DL),
|
61.44e6, //N_RB2sampling_rate(N_RB_DL),
|
||||||
40e6, //N_RB2channel_bandwidth(N_RB_DL),
|
40e6, //N_RB2channel_bandwidth(N_RB_DL),
|
||||||
@@ -527,10 +537,15 @@ int main(int argc, char **argv)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0, VCD_FUNCTION_IN);
|
||||||
|
|
||||||
ret = nr_dlsch_decoding(UE, channel_output_fixed, &UE->frame_parms,
|
ret = nr_dlsch_decoding(UE, channel_output_fixed, &UE->frame_parms,
|
||||||
dlsch0_ue, dlsch0_ue->harq_processes[0], frame, nb_symb_sch,
|
dlsch0_ue, dlsch0_ue->harq_processes[0], frame, nb_symb_sch,
|
||||||
slot,harq_pid, is_crnti, llr8_flag);
|
slot,harq_pid, is_crnti, llr8_flag);
|
||||||
|
|
||||||
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DECODING0, VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
if (ret > dlsch0_ue->max_ldpc_iterations)
|
if (ret > dlsch0_ue->max_ldpc_iterations)
|
||||||
n_errors++;
|
n_errors++;
|
||||||
|
|
||||||
@@ -624,6 +639,9 @@ int main(int argc, char **argv)
|
|||||||
if (input_fd)
|
if (input_fd)
|
||||||
fclose(input_fd);
|
fclose(input_fd);
|
||||||
|
|
||||||
|
if (ouput_vcd)
|
||||||
|
vcd_signal_dumper_close();
|
||||||
|
|
||||||
return (n_errors);
|
return (n_errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -610,6 +610,8 @@ int main(int argc, char **argv)
|
|||||||
dl_config->dl_config_list[0].dci_config_pdu.dci_config_rel15.coreset.cce_reg_interleaved_shift_index = cell_id;
|
dl_config->dl_config_list[0].dci_config_pdu.dci_config_rel15.coreset.cce_reg_interleaved_shift_index = cell_id;
|
||||||
dl_config->dl_config_list[0].dci_config_pdu.dci_config_rel15.coreset.precoder_granularity = PRECODER_GRANULARITY_SAME_AS_REG_BUNDLE;
|
dl_config->dl_config_list[0].dci_config_pdu.dci_config_rel15.coreset.precoder_granularity = PRECODER_GRANULARITY_SAME_AS_REG_BUNDLE;
|
||||||
dl_config->dl_config_list[0].dci_config_pdu.dci_config_rel15.coreset.pdcch_dmrs_scrambling_id = cell_id;
|
dl_config->dl_config_list[0].dci_config_pdu.dci_config_rel15.coreset.pdcch_dmrs_scrambling_id = cell_id;
|
||||||
|
uint8_t gnb_start_symbol = Sched_INFO.DL_req->dl_config_request_body.dl_config_pdu_list[1].dlsch_pdu.dlsch_pdu_rel15.start_symbol;
|
||||||
|
dl_config->dl_config_list[0].dlsch_config_pdu.dlsch_config_rel15.start_symbol = gnb_start_symbol;
|
||||||
|
|
||||||
uint32_t number_of_search_space_per_slot=1;
|
uint32_t number_of_search_space_per_slot=1;
|
||||||
uint32_t first_symbol_index=0;
|
uint32_t first_symbol_index=0;
|
||||||
|
|||||||
Reference in New Issue
Block a user