Merge remote-tracking branch 'origin/ldpc_offload_t1_mr' into integration_2022_wk35b
This commit is contained in:
@@ -21,7 +21,6 @@ The Regents of the University of California: BSD 3-Clause Licence.
|
|||||||
|
|
||||||
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
|
Niels Provos <provos@citi.umich.edu>: BSD 2-Clause Licence.
|
||||||
|
|
||||||
## Credits for source code openair3/GTPV1-U/nw-gtpv1u: ##
|
## Credits for source code openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c and nrLDPC_offload.h: ##
|
||||||
|
|
||||||
Amit Chawre <http://www.amitchawre.net/contact.html>: BSD 2-Clause Licence.
|
|
||||||
|
|
||||||
|
Intel Corporation SPDX-License-Identifier: BSD-3-Clause Licence
|
||||||
|
|||||||
@@ -338,6 +338,27 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//avra is offline, re-enable once it is available
|
||||||
|
//stage ("Test T1 Offload") {
|
||||||
|
// when { expression {doMandatoryTests} }
|
||||||
|
// steps {
|
||||||
|
// script {
|
||||||
|
// triggerSlaveJob ('RAN-T1-Offload-Test', 'Test-T1-Offload')
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// post {
|
||||||
|
// always {
|
||||||
|
// script {
|
||||||
|
// finalizeSlaveJob('RAN-T1-Offload-Test')
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// failure {
|
||||||
|
// script {
|
||||||
|
// currentBuild.result = 'FAILURE'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage ("Images Push to Registries") {
|
stage ("Images Push to Registries") {
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ then
|
|||||||
IS_NFAPI=`echo $FILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
|
IS_NFAPI=`echo $FILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
|
||||||
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FILE || true`
|
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FILE || true`
|
||||||
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FILE || true`
|
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FILE || true`
|
||||||
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc|openair1/PHY/CODING/types.h" || true`
|
IS_EXCEPTION=`echo $FILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/types.h|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_offload.h" || true`
|
||||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
||||||
then
|
then
|
||||||
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
||||||
@@ -184,7 +184,7 @@ do
|
|||||||
IS_NFAPI=`echo $FULLFILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
|
IS_NFAPI=`echo $FULLFILE | egrep -c "nfapi/open-nFAPI|nfapi/oai_integration/vendor_ext" || true`
|
||||||
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FULLFILE || true`
|
IS_OAI_LICENCE_PRESENT=`egrep -c "OAI Public License" $FULLFILE || true`
|
||||||
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FULLFILE || true`
|
IS_BSD_LICENCE_PRESENT=`egrep -c "the terms of the BSD Licence|License-Identifier: BSD-2-Clause" $FULLFILE || true`
|
||||||
IS_EXCEPTION=`echo $FULLFILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|common/utils/itti_analyzer/common/queue.h|openair3/UTILS/tree.h|openair3/UTILS/queue.h|openair3/GTPV1-U/nw-gtpv1u|openair2/UTIL/OPT/ws_|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/crc|openair1/PHY/CODING/types.h" || true`
|
IS_EXCEPTION=`echo $FULLFILE | egrep -c "common/utils/collection/tree.h|common/utils/collection/queue.h|openair2/UTIL/OPT/packet-rohc.h|openair3/NAS/COMMON/milenage.h|openair1/PHY/CODING/types.h|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c|openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_offload.h" || true`
|
||||||
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
if [ $IS_OAI_LICENCE_PRESENT -eq 0 ] && [ $IS_BSD_LICENCE_PRESENT -eq 0 ]
|
||||||
then
|
then
|
||||||
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
if [ $IS_NFAPI -eq 0 ] && [ $IS_EXCEPTION -eq 0 ]
|
||||||
|
|||||||
+62
-23
@@ -56,7 +56,6 @@ class PhySim:
|
|||||||
self.__workSpacePath=''
|
self.__workSpacePath=''
|
||||||
self.__buildLogFile='compile_phy_sim.log'
|
self.__buildLogFile='compile_phy_sim.log'
|
||||||
self.__runLogFile=''
|
self.__runLogFile=''
|
||||||
self.__runResults=[]
|
|
||||||
self.__runLogPath='phy_sim_logs'
|
self.__runLogPath='phy_sim_logs'
|
||||||
|
|
||||||
|
|
||||||
@@ -64,20 +63,20 @@ class PhySim:
|
|||||||
#PRIVATE Methods
|
#PRIVATE Methods
|
||||||
#-----------------
|
#-----------------
|
||||||
|
|
||||||
def __CheckResults_PhySim(self,HTML,CONST,testcase_id):
|
def __CheckResults_LDPCTest(self,HTML,CONST,testcase_id):
|
||||||
mySSH = sshconnection.SSHConnection()
|
mySSH = sshconnection.SSHConnection()
|
||||||
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
#retrieve run log file and store it locally$
|
#retrieve run log file and store it locally$
|
||||||
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__runLogFile, '.')
|
mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, self.__workSpacePath+self.__runLogFile, '.')
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
#parse results looking for Encoding and Decoding mean values
|
#parse results looking for Encoding and Decoding mean values
|
||||||
self.__runResults=[]
|
runResults=[]
|
||||||
with open(self.__runLogFile) as f:
|
with open(self.__runLogFile) as f:
|
||||||
for line in f:
|
for line in f:
|
||||||
if 'mean' in line:
|
if 'mean' in line:
|
||||||
self.__runResults.append(line)
|
runResults.append(line)
|
||||||
#the values are appended for each mean value (2), so we take these 2 values from the list
|
#the values are appended for each mean value (2), so we take these 2 values from the list
|
||||||
info=self.__runResults[0]+self.__runResults[1]
|
info = runResults[0] + runResults[1]
|
||||||
|
|
||||||
#once parsed move the local logfile to its folder for tidiness
|
#once parsed move the local logfile to its folder for tidiness
|
||||||
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
|
os.system('mv '+self.__runLogFile+' '+ self.__runLogPath+'/.')
|
||||||
@@ -89,6 +88,38 @@ class PhySim:
|
|||||||
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
|
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
|
||||||
return HTML
|
return HTML
|
||||||
|
|
||||||
|
def __CheckResults_NRulsimTest(self, HTML, CONST, testcase_id):
|
||||||
|
html_queue = SimpleQueue()
|
||||||
|
#retrieve run log file and store it locally
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
filename = self.__workSpacePath + self.__runLogFile
|
||||||
|
ret = mySSH.copyin(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord, filename, '.')
|
||||||
|
if ret != 0:
|
||||||
|
error_msg = f'could not recover test result file {filename}'
|
||||||
|
logging.error(error_msg)
|
||||||
|
html_queue.put(f'<pre style="background-color:white">{error_msg}</pre>')
|
||||||
|
HTML.CreateHtmlTestRowQueue("could not recover results", 'KO', 1, html_queue)
|
||||||
|
self.exitStatus = 1
|
||||||
|
return HTML
|
||||||
|
|
||||||
|
PUSCH_OK = False
|
||||||
|
with open(self.__runLogFile) as f:
|
||||||
|
PUSCH_OK = 'PUSCH test OK' in f.read()
|
||||||
|
|
||||||
|
# once parsed move the local logfile to its folder for tidiness
|
||||||
|
os.system(f'mv {self.__runLogFile} {self.__runLogPath}/.')
|
||||||
|
|
||||||
|
#updating the HTML with results
|
||||||
|
if PUSCH_OK:
|
||||||
|
html_queue.put('<pre style="background-color:white">succeeded</pre>')
|
||||||
|
HTML.CreateHtmlTestRowQueue(self.runargs, 'OK', 1, html_queue)
|
||||||
|
else:
|
||||||
|
error_msg = 'error: no "PUSCH test OK"'
|
||||||
|
logging.error(error_msg)
|
||||||
|
html_queue.put(f'<pre style="background-color:white">{error_msg}</pre>')
|
||||||
|
HTML.CreateHtmlTestRowQueue(self.runargs, 'KO', 1, html_queue)
|
||||||
|
self.exitStatus = 1
|
||||||
|
return HTML
|
||||||
|
|
||||||
def __CheckBuild_PhySim(self, HTML, CONST):
|
def __CheckBuild_PhySim(self, HTML, CONST):
|
||||||
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
|
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
|
||||||
@@ -100,21 +131,16 @@ class PhySim:
|
|||||||
mySSH.command('rm ' + self.__workSpacePath+self.__runLogFile, '\$', 5)
|
mySSH.command('rm ' + self.__workSpacePath+self.__runLogFile, '\$', 5)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
#check build result from local compile log file
|
#check build result from local compile log file
|
||||||
buildStatus=False
|
|
||||||
with open(self.__buildLogFile) as f:
|
with open(self.__buildLogFile) as f:
|
||||||
#nr_prachsim is the last compile step
|
if 'BUILD SHOULD BE SUCCESSFUL' in f.read():
|
||||||
if 'nr_prachsim compiled' in f.read():
|
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'PhySim')
|
||||||
buildStatus=True
|
self.exitStatus=0
|
||||||
#update HTML based on build status
|
return HTML
|
||||||
if buildStatus:
|
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
|
||||||
HTML.CreateHtmlTestRow(self.buildargs, 'OK', CONST.ALL_PROCESSES_OK, 'LDPC')
|
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
|
||||||
self.exitStatus=0
|
HTML.CreateHtmlTabFooter(False)
|
||||||
else:
|
#exitStatus=1 will do a sys.exit in main
|
||||||
logging.error('\u001B[1m Building Physical Simulators Failed\u001B[0m')
|
self.exitStatus = 1
|
||||||
HTML.CreateHtmlTestRow(self.buildargs, 'KO', CONST.ALL_PROCESSES_OK, 'LDPC')
|
|
||||||
HTML.CreateHtmlTabFooter(False)
|
|
||||||
#exitStatus=1 will do a sys.exit in main
|
|
||||||
self.exitStatus=1
|
|
||||||
return HTML
|
return HTML
|
||||||
|
|
||||||
|
|
||||||
@@ -163,8 +189,7 @@ class PhySim:
|
|||||||
mySSH.command('source oaienv', '\$', 5)
|
mySSH.command('source oaienv', '\$', 5)
|
||||||
mySSH.command('cd cmake_targets', '\$', 5)
|
mySSH.command('cd cmake_targets', '\$', 5)
|
||||||
mySSH.command('mkdir -p log', '\$', 5)
|
mySSH.command('mkdir -p log', '\$', 5)
|
||||||
mySSH.command('chmod 777 log', '\$', 5)
|
mySSH.command(f'./build_oai {self.buildargs} 2>&1 | tee {self.__buildLogFile}', '\$', 1500)
|
||||||
mySSH.command('stdbuf -o0 ./build_oai ' + self.buildargs + ' 2>&1 | stdbuf -o0 tee ' + self.__buildLogFile, 'Bypassing the Tests|build have failed', 1500)
|
|
||||||
|
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
#check build status and update HTML object
|
#check build status and update HTML object
|
||||||
@@ -173,7 +198,8 @@ class PhySim:
|
|||||||
return lHTML
|
return lHTML
|
||||||
|
|
||||||
|
|
||||||
def Run_PhySim(self,htmlObj,constObj,testcase_id):
|
def Run_LDPCTest(self,htmlObj,constObj,testcase_id):
|
||||||
|
self.__workSpacePath = self.eNBSourceCodePath+'/cmake_targets/'
|
||||||
#create run logs folder locally
|
#create run logs folder locally
|
||||||
os.system('mkdir -p ./'+self.__runLogPath)
|
os.system('mkdir -p ./'+self.__runLogPath)
|
||||||
#log file is tc_<testcase_id>.log remotely
|
#log file is tc_<testcase_id>.log remotely
|
||||||
@@ -187,5 +213,18 @@ class PhySim:
|
|||||||
mySSH.close()
|
mySSH.close()
|
||||||
#return updated HTML to main
|
#return updated HTML to main
|
||||||
lHTML = cls_oai_html.HTMLManagement()
|
lHTML = cls_oai_html.HTMLManagement()
|
||||||
lHTML=self.__CheckResults_PhySim(htmlObj,constObj,testcase_id)
|
lHTML=self.__CheckResults_LDPCTest(htmlObj,constObj,testcase_id)
|
||||||
|
return lHTML
|
||||||
|
|
||||||
|
def Run_NRulsimTest(self, htmlObj, constObj, testcase_id):
|
||||||
|
self.__workSpacePath=self.eNBSourceCodePath+'/cmake_targets/'
|
||||||
|
os.system(f'mkdir -p ./{self.__runLogPath}')
|
||||||
|
self.__runLogFile = f'physim_{testcase_id}.log'
|
||||||
|
mySSH = sshconnection.SSHConnection()
|
||||||
|
mySSH.open(self.eNBIpAddr, self.eNBUserName, self.eNBPassWord)
|
||||||
|
mySSH.command(f'cd {self.__workSpacePath}', '\$', 5)
|
||||||
|
mySSH.command(f'sudo {self.__workSpacePath}ran_build/build/nr_ulsim {self.runargs} > {self.__runLogFile} 2>&1', '\$', 30)
|
||||||
|
mySSH.close()
|
||||||
|
#return updated HTML to main
|
||||||
|
lHTML = self.__CheckResults_NRulsimTest(htmlObj, constObj, testcase_id)
|
||||||
return lHTML
|
return lHTML
|
||||||
|
|||||||
+19
-4
@@ -457,9 +457,18 @@ def GetParametersFromXML(action):
|
|||||||
if (string_field is not None):
|
if (string_field is not None):
|
||||||
CONTAINERS.testSvrId = string_field
|
CONTAINERS.testSvrId = string_field
|
||||||
|
|
||||||
else: # ie action == 'Run_PhySim':
|
elif action == 'Run_LDPCTest' or action == 'Run_NRulsimTest':
|
||||||
ldpc.runargs = test.findtext('physim_run_args')
|
ldpc.runargs = test.findtext('physim_run_args')
|
||||||
|
|
||||||
|
elif action == 'LicenceAndFormattingCheck':
|
||||||
|
pass
|
||||||
|
|
||||||
|
elif action == 'Cppcheck_Analysis':
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
logging.error(f"unknown action {action}")
|
||||||
|
|
||||||
|
|
||||||
#check if given test is in list
|
#check if given test is in list
|
||||||
#it is in list if one of the strings in 'list' is at the beginning of 'test'
|
#it is in list if one of the strings in 'list' is at the beginning of 'test'
|
||||||
@@ -914,8 +923,14 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
HTML=ldpc.Build_PhySim(HTML,CONST)
|
HTML=ldpc.Build_PhySim(HTML,CONST)
|
||||||
if ldpc.exitStatus==1:
|
if ldpc.exitStatus==1:
|
||||||
RAN.prematureExit = True
|
RAN.prematureExit = True
|
||||||
elif action == 'Run_PhySim':
|
elif action == 'Run_LDPCTest':
|
||||||
HTML=ldpc.Run_PhySim(HTML,CONST,id)
|
HTML=ldpc.Run_LDPCTest(HTML,CONST,id)
|
||||||
|
if ldpc.exitStatus==1:
|
||||||
|
RAN.prematureExit = True
|
||||||
|
elif action == 'Run_NRulsimTest':
|
||||||
|
HTML=ldpc.Run_NRulsimTest(HTML,CONST,id)
|
||||||
|
if ldpc.exitStatus==1:
|
||||||
|
RAN.prematureExit = True
|
||||||
elif action == 'Build_Image':
|
elif action == 'Build_Image':
|
||||||
CONTAINERS.BuildImage(HTML)
|
CONTAINERS.BuildImage(HTML)
|
||||||
elif action == 'Build_Proxy':
|
elif action == 'Build_Proxy':
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
- Build_Proxy
|
- Build_Proxy
|
||||||
- Build_PhySim
|
- Build_PhySim
|
||||||
- Run_PhySim
|
- Run_LDPCTest
|
||||||
|
- Run_NRulsimTest
|
||||||
- Build_eNB
|
- Build_eNB
|
||||||
- WaitEndBuild_eNB
|
- WaitEndBuild_eNB
|
||||||
- Initialize_eNB
|
- Initialize_eNB
|
||||||
|
|||||||
@@ -26,132 +26,125 @@
|
|||||||
<htmlTabName>Test-ldpc-GPU</htmlTabName>
|
<htmlTabName>Test-ldpc-GPU</htmlTabName>
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021</TestCaseRequestedList>
|
<TestCaseRequestedList>000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>Build_PhySim</class>
|
|
||||||
<desc>Build for physical simulator</desc>
|
|
||||||
<physim_build_args>--phy_simulators --ninja --noavx512</physim_build_args>
|
|
||||||
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000002">
|
<testCase id="000002">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 3872 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 3872 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000003">
|
<testCase id="000003">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000004">
|
<testCase id="000004">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 4224 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 4224 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000005">
|
<testCase id="000005">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000006">
|
<testCase id="000006">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 4576 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 4576 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000007">
|
<testCase id="000007">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000008">
|
<testCase id="000008">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 4928 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 4928 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000009">
|
<testCase id="000009">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000010">
|
<testCase id="000010">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 5280 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 5280 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000011">
|
<testCase id="000011">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000012">
|
<testCase id="000012">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 5632 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 5632 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000013">
|
<testCase id="000013">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000014">
|
<testCase id="000014">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 6336 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 6336 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000015">
|
<testCase id="000015">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000016">
|
<testCase id="000016">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 7040 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 7040 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000017">
|
<testCase id="000017">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000018">
|
<testCase id="000018">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 7744 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 7744 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000019">
|
<testCase id="000019">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000020">
|
<testCase id="000020">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with CPU</desc>
|
<desc>Run LDPC Test with CPU</desc>
|
||||||
<physim_run_args>-l 8448 -s10 -n100</physim_run_args>
|
<physim_run_args>-l 8448 -s10 -n100</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000021">
|
<testCase id="000021">
|
||||||
<class>Run_PhySim</class>
|
<class>Run_LDPCTest</class>
|
||||||
<desc>Run LDPC Test with GPU</desc>
|
<desc>Run LDPC Test with GPU</desc>
|
||||||
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args>
|
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<!--
|
||||||
|
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>build-offload</htmlTabRef>
|
||||||
|
<htmlTabName>Build physical simulators</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>000001</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Build_PhySim</class>
|
||||||
|
<desc>Build physical simulators</desc>
|
||||||
|
<physim_build_args>--phy_simulators --ninja --noavx512</physim_build_args>
|
||||||
|
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
|
||||||
|
</testCase>
|
||||||
|
</testCaseList>
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<!--
|
||||||
|
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>test-t1-offload</htmlTabRef>
|
||||||
|
<htmlTabName>Test T1 Offload</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>000001 000002 000003 000004</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="000001">
|
||||||
|
<class>Run_NRulsimTest</class>
|
||||||
|
<desc>Run T1 Offload nr_ulsim</desc>
|
||||||
|
<physim_run_args>-n2 -s30 -m9 -r50 -R106 -o</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000002">
|
||||||
|
<class>Run_NRulsimTest</class>
|
||||||
|
<desc>Run T1 Offload nr_ulsim</desc>
|
||||||
|
<physim_run_args>-n2 -s30 -m9 -r106 -R106 -o</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000003">
|
||||||
|
<class>Run_NRulsimTest</class>
|
||||||
|
<desc>Run T1 Offload nr_ulsim</desc>
|
||||||
|
<physim_run_args>-n2 -s30 -m16 -r106 -R106 -o</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="000004">
|
||||||
|
<class>Run_NRulsimTest</class>
|
||||||
|
<desc>Run T1 Offload nr_ulsim</desc>
|
||||||
|
<physim_run_args>-n2 -s30 -m9 -r273 -R273 -o</physim_run_args>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -828,6 +828,31 @@ TARGET_LINK_LIBRARIES(benetel_5g pthread dl rt m numa)
|
|||||||
|
|
||||||
##########################################################
|
##########################################################
|
||||||
|
|
||||||
|
# LDPC offload library
|
||||||
|
##########################################################
|
||||||
|
|
||||||
|
# there is no generic way to test for T1 Offload, it simply comes with the
|
||||||
|
# shared object
|
||||||
|
if (EXISTS "/usr/local/lib64/librte_pmd_hpac_sdfec_pmd.so")
|
||||||
|
set(T1_OFFLOAD_FOUND TRUE)
|
||||||
|
else()
|
||||||
|
set(T1_OFFLOAD_FOUND FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(T1_OFFLOAD_FOUND)
|
||||||
|
message(STATUS "T1 Offload support detected")
|
||||||
|
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib64/pkgconfig/")
|
||||||
|
pkg_search_module(LIBDPDK REQUIRED libdpdk=20.05.0)
|
||||||
|
add_library(ldpc_offload MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c)
|
||||||
|
set_target_properties(ldpc_offload PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API")
|
||||||
|
target_compile_options(ldpc_offload PRIVATE ${LIBDPDK_CFLAGS})
|
||||||
|
target_link_libraries(ldpc_offload ${LIBDPDK_LDFLAGS} rte_pmd_hpac_sdfec_pmd "-Wl,-rpath /usr/local/lib64")
|
||||||
|
else()
|
||||||
|
message(STATUS "No T1 Offload support detected")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
##########################################################
|
||||||
|
|
||||||
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
|
include_directories ("${OPENAIR_TARGETS}/ARCH/COMMON")
|
||||||
|
|
||||||
Message("DEADLINE_SCHEDULER flag is ${DEADLINE_SCHEDULER}")
|
Message("DEADLINE_SCHEDULER flag is ${DEADLINE_SCHEDULER}")
|
||||||
@@ -2772,7 +2797,11 @@ target_link_libraries (nr-softmodem pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRA
|
|||||||
target_link_libraries (nr-softmodem ${LIB_LMS_LIBRARIES})
|
target_link_libraries (nr-softmodem ${LIB_LMS_LIBRARIES})
|
||||||
target_link_libraries (nr-softmodem ${T_LIB})
|
target_link_libraries (nr-softmodem ${T_LIB})
|
||||||
|
|
||||||
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
|
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc)
|
||||||
|
|
||||||
|
if(T1_OFFLOAD_FOUND)
|
||||||
|
add_dependencies( nr-softmodem ldpc_offload)
|
||||||
|
endif ()
|
||||||
|
|
||||||
# nr-uesoftmodem is UE implementation
|
# nr-uesoftmodem is UE implementation
|
||||||
#######################################
|
#######################################
|
||||||
@@ -2818,6 +2847,7 @@ if (CUDA_FOUND)
|
|||||||
add_dependencies( nr-uesoftmodem ldpc_cuda)
|
add_dependencies( nr-uesoftmodem ldpc_cuda)
|
||||||
add_dependencies( nr-softmodem ldpc_cuda)
|
add_dependencies( nr-softmodem ldpc_cuda)
|
||||||
endif (CUDA_FOUND)
|
endif (CUDA_FOUND)
|
||||||
|
|
||||||
###################################"
|
###################################"
|
||||||
# Addexecutables for tests
|
# Addexecutables for tests
|
||||||
####################################
|
####################################
|
||||||
@@ -2981,6 +3011,11 @@ add_executable(nr_ulsim
|
|||||||
${T_SOURCE}
|
${T_SOURCE}
|
||||||
${SHLIB_LOADER_SOURCES}
|
${SHLIB_LOADER_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(T1_OFFLOAD_FOUND)
|
||||||
|
add_dependencies( nr_ulsim ldpc_offload)
|
||||||
|
endif ()
|
||||||
|
|
||||||
target_link_libraries(nr_ulsim
|
target_link_libraries(nr_ulsim
|
||||||
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_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_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
|
-Wl,--start-group UTIL SIMU_COMMON SIMU PHY_COMMON PHY_NR_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_LTE_NR L2_NR HASHTABLE X2AP_ENB X2AP_LIB SECU_CN NGAP_GNB NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
|
||||||
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI ${OPENSSL_LIBRARIES} dl
|
m pthread ${ATLAS_LIBRARIES} ${T_LIB} ITTI ${OPENSSL_LIBRARIES} dl
|
||||||
|
|||||||
@@ -536,7 +536,9 @@ void init_eNB_afterRU(void) {
|
|||||||
RC.nb_nr_inst = 1;
|
RC.nb_nr_inst = 1;
|
||||||
for (inst=0; inst<RC.nb_nr_inst; inst++) {
|
for (inst=0; inst<RC.nb_nr_inst; inst++) {
|
||||||
LOG_I(PHY,"RC.nb_nr_CC[inst:%d]:%p\n", inst, RC.gNB[inst]);
|
LOG_I(PHY,"RC.nb_nr_CC[inst:%d]:%p\n", inst, RC.gNB[inst]);
|
||||||
|
|
||||||
gNB = RC.gNB[inst];
|
gNB = RC.gNB[inst];
|
||||||
|
gNB->ldpc_offload_flag = ldpc_offload_flag;
|
||||||
|
|
||||||
phy_init_nr_gNB(gNB,0,0);
|
phy_init_nr_gNB(gNB,0,0);
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,7 @@
|
|||||||
#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
|
#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n"
|
||||||
#define CONFIG_HLP_USRP_THREAD "having extra thead for usrp tx\n"
|
#define CONFIG_HLP_USRP_THREAD "having extra thead for usrp tx\n"
|
||||||
#define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n"
|
#define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n"
|
||||||
|
#define CONFIG_HLP_LDPC_OFFLOAD "enable LDPC offload\n"
|
||||||
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
|
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
|
||||||
|
|
||||||
#define CONFIG_HLP_FLOG "Enable online log \n"
|
#define CONFIG_HLP_FLOG "Enable online log \n"
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
{"D" , CONFIG_HLP_DLBM_PHYTEST,0, u64ptr:&dlsch_slot_bitmap, defintval:0, TYPE_UINT64, 0}, \
|
{"D" , CONFIG_HLP_DLBM_PHYTEST,0, u64ptr:&dlsch_slot_bitmap, defintval:0, TYPE_UINT64, 0}, \
|
||||||
{"U" , CONFIG_HLP_ULBM_PHYTEST,0, u64ptr:&ulsch_slot_bitmap, defintval:0, TYPE_UINT64, 0}, \
|
{"U" , CONFIG_HLP_ULBM_PHYTEST,0, u64ptr:&ulsch_slot_bitmap, defintval:0, TYPE_UINT64, 0}, \
|
||||||
{"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0, iptr:&usrp_tx_thread, defstrval:0, TYPE_INT, 0}, \
|
{"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0, iptr:&usrp_tx_thread, defstrval:0, TYPE_INT, 0}, \
|
||||||
|
{"ldpc-offload-enable", CONFIG_HLP_LDPC_OFFLOAD, 0, iptr:&ldpc_offload_flag, defstrval:0, TYPE_INT, 0}, \
|
||||||
{"uecap_file", CONFIG_HLP_UECAP_FILE, 0, strptr:&uecap_file, defstrval:"./uecap.xml", TYPE_STRING, 0}, \
|
{"uecap_file", CONFIG_HLP_UECAP_FILE, 0, strptr:&uecap_file, defstrval:"./uecap.xml", TYPE_STRING, 0}, \
|
||||||
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
{"s" , CONFIG_HLP_SNR, 0, dblptr:&snr_dB, defdblval:25, TYPE_DOUBLE, 0}, \
|
||||||
}
|
}
|
||||||
@@ -44,6 +45,7 @@ extern uint32_t target_ul_bw;
|
|||||||
extern uint64_t dlsch_slot_bitmap;
|
extern uint64_t dlsch_slot_bitmap;
|
||||||
extern uint64_t ulsch_slot_bitmap;
|
extern uint64_t ulsch_slot_bitmap;
|
||||||
extern char *uecap_file;
|
extern char *uecap_file;
|
||||||
|
extern int ldpc_offload_flag;
|
||||||
|
|
||||||
// In nr-gnb.c
|
// In nr-gnb.c
|
||||||
extern void init_gNB(int single_thread_flag,int wait_for_sync);
|
extern void init_gNB(int single_thread_flag,int wait_for_sync);
|
||||||
|
|||||||
@@ -447,7 +447,7 @@ int main( int argc, char **argv ) {
|
|||||||
|
|
||||||
init_opt() ;
|
init_opt() ;
|
||||||
load_nrLDPClib(NULL);
|
load_nrLDPClib(NULL);
|
||||||
|
|
||||||
if (ouput_vcd) {
|
if (ouput_vcd) {
|
||||||
vcd_signal_dumper_init("/tmp/openair_dump_nrUE.vcd");
|
vcd_signal_dumper_init("/tmp/openair_dump_nrUE.vcd");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ static softmodem_params_t softmodem_params;
|
|||||||
char *parallel_config=NULL;
|
char *parallel_config=NULL;
|
||||||
char *worker_config=NULL;
|
char *worker_config=NULL;
|
||||||
int usrp_tx_thread = 0;
|
int usrp_tx_thread = 0;
|
||||||
|
int ldpc_offload_flag=0;
|
||||||
uint8_t nfapi_mode=0;
|
uint8_t nfapi_mode=0;
|
||||||
|
|
||||||
static mapping softmodem_funcs[] = MAPPING_SOFTMODEM_FUNCTIONS;
|
static mapping softmodem_funcs[] = MAPPING_SOFTMODEM_FUNCTIONS;
|
||||||
|
|||||||
@@ -283,6 +283,7 @@ extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
|||||||
extern int usrp_tx_thread;
|
extern int usrp_tx_thread;
|
||||||
extern uint16_t sl_ahead;
|
extern uint16_t sl_ahead;
|
||||||
extern uint16_t sf_ahead;
|
extern uint16_t sf_ahead;
|
||||||
|
extern int ldpc_offload_flag;
|
||||||
extern int oai_exit;
|
extern int oai_exit;
|
||||||
|
|
||||||
void tx_func(void *param);
|
void tx_func(void *param);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,135 @@
|
|||||||
|
/* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
* Copyright(c) 2017 Intel Corporation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MAIN_H_
|
||||||
|
#define _MAIN_H_
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <sys/queue.h>
|
||||||
|
|
||||||
|
#include <rte_common.h>
|
||||||
|
#include <rte_hexdump.h>
|
||||||
|
#include <rte_log.h>
|
||||||
|
|
||||||
|
#define TEST_SUCCESS 0
|
||||||
|
#define TEST_FAILED -1
|
||||||
|
#define TEST_SKIPPED 1
|
||||||
|
|
||||||
|
#define MAX_BURST 512U
|
||||||
|
#define DEFAULT_BURST 32U
|
||||||
|
#define DEFAULT_OPS 64U
|
||||||
|
#define DEFAULT_ITER 6U
|
||||||
|
|
||||||
|
enum op_data_type {
|
||||||
|
DATA_INPUT = 0,
|
||||||
|
DATA_SOFT_OUTPUT,
|
||||||
|
DATA_HARD_OUTPUT,
|
||||||
|
DATA_HARQ_INPUT,
|
||||||
|
DATA_HARQ_OUTPUT,
|
||||||
|
DATA_NUM_TYPES,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_ASSERT(cond, msg, ...) do { \
|
||||||
|
if (!(cond)) { \
|
||||||
|
printf("TestCase %s() line %d failed: " \
|
||||||
|
msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
|
||||||
|
return TEST_FAILED; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Compare two buffers (length in bytes) */
|
||||||
|
#define TEST_ASSERT_BUFFERS_ARE_EQUAL(a, b, len, msg, ...) do { \
|
||||||
|
if (memcmp((a), (b), len)) { \
|
||||||
|
printf("TestCase %s() line %d failed: " \
|
||||||
|
msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
|
||||||
|
rte_memdump(stdout, "Buffer A", (a), len); \
|
||||||
|
rte_memdump(stdout, "Buffer B", (b), len); \
|
||||||
|
return TEST_FAILED; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define TEST_ASSERT_SUCCESS(val, msg, ...) do { \
|
||||||
|
typeof(val) _val = (val); \
|
||||||
|
if (!(_val == 0)) { \
|
||||||
|
printf("TestCase %s() line %d failed (err %d): " \
|
||||||
|
msg "\n", __func__, __LINE__, _val, \
|
||||||
|
##__VA_ARGS__); \
|
||||||
|
return TEST_FAILED; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define TEST_ASSERT_FAIL(val, msg, ...) \
|
||||||
|
TEST_ASSERT_SUCCESS(!(val), msg, ##__VA_ARGS__)
|
||||||
|
|
||||||
|
#define TEST_ASSERT_NOT_NULL(val, msg, ...) do { \
|
||||||
|
if ((val) == NULL) { \
|
||||||
|
printf("TestCase %s() line %d failed (null): " \
|
||||||
|
msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
|
||||||
|
return TEST_FAILED; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
struct unit_test_case {
|
||||||
|
int (*setup)(void);
|
||||||
|
void (*teardown)(void);
|
||||||
|
int (*testcase)(void);
|
||||||
|
const char *name;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define TEST_CASE(testcase) {NULL, NULL, testcase, #testcase}
|
||||||
|
|
||||||
|
#define TEST_CASE_ST(setup, teardown, testcase) \
|
||||||
|
{setup, teardown, testcase, #testcase}
|
||||||
|
|
||||||
|
#define TEST_CASES_END() {NULL, NULL, NULL, NULL}
|
||||||
|
|
||||||
|
struct unit_test_suite {
|
||||||
|
const char *suite_name;
|
||||||
|
int (*setup)(void);
|
||||||
|
void (*teardown)(void);
|
||||||
|
struct unit_test_case unit_test_cases[];
|
||||||
|
};
|
||||||
|
|
||||||
|
int unit_test_suite_runner(struct unit_test_suite *suite);
|
||||||
|
|
||||||
|
typedef int (test_callback)(void);
|
||||||
|
TAILQ_HEAD(test_commands_list, test_command);
|
||||||
|
struct test_command {
|
||||||
|
TAILQ_ENTRY(test_command) next;
|
||||||
|
const char *command;
|
||||||
|
test_callback *callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
void add_test_command(struct test_command *t);
|
||||||
|
|
||||||
|
/* Register a test function */
|
||||||
|
#define REGISTER_TEST_COMMAND(name, testsuite) \
|
||||||
|
static int test_func_##name(void) \
|
||||||
|
{ \
|
||||||
|
return unit_test_suite_runner(&testsuite); \
|
||||||
|
} \
|
||||||
|
static struct test_command test_struct_##name = { \
|
||||||
|
.command = RTE_STR(name), \
|
||||||
|
.callback = test_func_##name, \
|
||||||
|
}; \
|
||||||
|
RTE_INIT(test_register_##name) \
|
||||||
|
{ \
|
||||||
|
add_test_command(&test_struct_##name); \
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *get_vector_filename(void);
|
||||||
|
|
||||||
|
unsigned int get_num_ops(void);
|
||||||
|
|
||||||
|
unsigned int get_burst_sz(void);
|
||||||
|
|
||||||
|
unsigned int get_num_lcores(void);
|
||||||
|
|
||||||
|
double get_snr(void);
|
||||||
|
|
||||||
|
unsigned int get_iter_max(void);
|
||||||
|
|
||||||
|
bool get_init_device(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -75,6 +75,20 @@ typedef struct nrLDPC_dec_params {
|
|||||||
e_nrLDPC_outMode outMode; /**< Output format */
|
e_nrLDPC_outMode outMode; /**< Output format */
|
||||||
} t_nrLDPC_dec_params;
|
} t_nrLDPC_dec_params;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Structure containing LDPC decoder parameters.
|
||||||
|
*/
|
||||||
|
typedef struct nrLDPCoffload_params {
|
||||||
|
uint8_t BG; /**< Base graph */
|
||||||
|
uint16_t Z;
|
||||||
|
uint16_t Kr;
|
||||||
|
uint8_t rv;
|
||||||
|
uint32_t E;
|
||||||
|
uint16_t n_cb;
|
||||||
|
uint16_t F; /**< Filler bits */
|
||||||
|
uint8_t Qm; /**< Modulation */
|
||||||
|
} t_nrLDPCoffload_params;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Structure containing LDPC decoder processing time statistics.
|
Structure containing LDPC decoder processing time statistics.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#define __NRLDPC_DEFS__H__
|
#define __NRLDPC_DEFS__H__
|
||||||
#include <openair1/PHY/defs_nr_common.h>
|
#include <openair1/PHY/defs_nr_common.h>
|
||||||
#include "openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h"
|
#include "openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_types.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief LDPC encoder
|
\brief LDPC encoder
|
||||||
\param 1 input
|
\param 1 input
|
||||||
@@ -71,5 +72,9 @@ typedef int(*nrLDPC_encoderfunc_t)(unsigned char **,unsigned char **,int,int,sho
|
|||||||
\param p_llrOut Output vector
|
\param p_llrOut Output vector
|
||||||
\param p_profiler LDPC profiler statistics
|
\param p_profiler LDPC profiler statistics
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef int32_t(*nrLDPC_decoderfunc_t)(t_nrLDPC_dec_params* , int8_t*, int8_t* , t_nrLDPC_time_stats* );
|
typedef int32_t(*nrLDPC_decoderfunc_t)(t_nrLDPC_dec_params* , int8_t*, int8_t* , t_nrLDPC_time_stats* );
|
||||||
|
typedef int32_t(*nrLDPC_decoffloadfunc_t)(t_nrLDPC_dec_params* , uint8_t, uint8_t, uint8_t , uint8_t, uint16_t, uint32_t, uint8_t, int8_t*, int8_t* ,uint8_t);
|
||||||
|
typedef int32_t(*nrLDPC_dectopfunc_t)(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -24,14 +24,22 @@
|
|||||||
nrLDPC_decoderfunc_t nrLDPC_decoder;
|
nrLDPC_decoderfunc_t nrLDPC_decoder;
|
||||||
nrLDPC_encoderfunc_t nrLDPC_encoder;
|
nrLDPC_encoderfunc_t nrLDPC_encoder;
|
||||||
nrLDPC_initcallfunc_t nrLDPC_initcall;
|
nrLDPC_initcallfunc_t nrLDPC_initcall;
|
||||||
|
nrLDPC_decoffloadfunc_t nrLDPC_decoder_offload;
|
||||||
|
nrLDPC_dectopfunc_t top_testsuite;
|
||||||
#else
|
#else
|
||||||
/* functions to load the LDPC shared lib, implemented in openair1/PHY/CODING/nrLDPC_load.c */
|
/* functions to load the LDPC shared lib, implemented in openair1/PHY/CODING/nrLDPC_load.c */
|
||||||
extern int load_nrLDPClib(char *version) ;
|
extern int load_nrLDPClib(char *version) ;
|
||||||
|
extern int load_nrLDPClib_offload(void) ;
|
||||||
|
extern int free_nrLDPClib_offload(void) ;
|
||||||
extern int load_nrLDPClib_ref(char *libversion, nrLDPC_encoderfunc_t * nrLDPC_encoder_ptr); // for ldpctest
|
extern int load_nrLDPClib_ref(char *libversion, nrLDPC_encoderfunc_t * nrLDPC_encoder_ptr); // for ldpctest
|
||||||
/* ldpc coder/decoder functions, as loaded by load_nrLDPClib(). */
|
/* ldpc coder/decoder functions, as loaded by load_nrLDPClib(). */
|
||||||
extern nrLDPC_initcallfunc_t nrLDPC_initcall;
|
extern nrLDPC_initcallfunc_t nrLDPC_initcall;
|
||||||
|
|
||||||
extern nrLDPC_decoderfunc_t nrLDPC_decoder;
|
extern nrLDPC_decoderfunc_t nrLDPC_decoder;
|
||||||
extern nrLDPC_encoderfunc_t nrLDPC_encoder;
|
extern nrLDPC_encoderfunc_t nrLDPC_encoder;
|
||||||
|
extern nrLDPC_decoffloadfunc_t nrLDPC_decoder_offload;
|
||||||
|
|
||||||
|
extern nrLDPC_dectopfunc_t top_testsuite;
|
||||||
|
|
||||||
// inline functions:
|
// inline functions:
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -71,6 +71,56 @@ int load_nrLDPClib(char *version) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int load_nrLDPClib_offload(void) {
|
||||||
|
loader_shlibfunc_t shlib_decoffload_fdesc;
|
||||||
|
|
||||||
|
shlib_decoffload_fdesc.fname = "nrLDPC_decod_offload";
|
||||||
|
int ret=load_module_shlib("ldpc_offload",&shlib_decoffload_fdesc,1,NULL);
|
||||||
|
AssertFatal( (ret >= 0),"Error loading ldpc decoder offload");
|
||||||
|
nrLDPC_decoder_offload = (nrLDPC_decoffloadfunc_t)shlib_decoffload_fdesc.fptr;
|
||||||
|
|
||||||
|
t_nrLDPC_dec_params decParams;
|
||||||
|
t_nrLDPC_dec_params* p_decParams = &decParams;
|
||||||
|
int8_t l[68*384];
|
||||||
|
int8_t llrProcBuf[22*384];
|
||||||
|
|
||||||
|
p_decParams->Z = 384;
|
||||||
|
p_decParams->BG = 1;
|
||||||
|
|
||||||
|
AssertFatal(nrLDPC_decoder_offload(p_decParams,0, 0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
25344,
|
||||||
|
8,
|
||||||
|
l,
|
||||||
|
llrProcBuf, 0)>=0,
|
||||||
|
"error loading LDPC decoder offload library\n");
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int free_nrLDPClib_offload(void) {
|
||||||
|
t_nrLDPC_dec_params decParams;
|
||||||
|
t_nrLDPC_dec_params* p_decParams = &decParams;
|
||||||
|
int8_t l[68*384];
|
||||||
|
int8_t llrProcBuf[22*384];
|
||||||
|
|
||||||
|
p_decParams->Z = 384;
|
||||||
|
p_decParams->BG = 1;
|
||||||
|
|
||||||
|
nrLDPC_decoder_offload(p_decParams,0,0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
25344,
|
||||||
|
8,
|
||||||
|
l,
|
||||||
|
llrProcBuf, 2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int load_nrLDPClib_ref(char *libversion, nrLDPC_encoderfunc_t * nrLDPC_encoder_ptr) {
|
int load_nrLDPClib_ref(char *libversion, nrLDPC_encoderfunc_t * nrLDPC_encoder_ptr) {
|
||||||
loader_shlibfunc_t shlib_encoder_fdesc;
|
loader_shlibfunc_t shlib_encoder_fdesc;
|
||||||
|
|
||||||
|
|||||||
@@ -508,8 +508,12 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
|
|||||||
crcTableInit();
|
crcTableInit();
|
||||||
init_scrambling_luts();
|
init_scrambling_luts();
|
||||||
init_pucch2_luts();
|
init_pucch2_luts();
|
||||||
|
|
||||||
load_nrLDPClib(NULL);
|
load_nrLDPClib(NULL);
|
||||||
|
|
||||||
|
if (gNB->ldpc_offload_flag)
|
||||||
|
load_nrLDPClib_offload();
|
||||||
|
|
||||||
init_codebook_gNB(gNB);
|
init_codebook_gNB(gNB);
|
||||||
|
|
||||||
// PBCH DMRS gold sequences generation
|
// PBCH DMRS gold sequences generation
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
|
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
|
||||||
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
||||||
#include "SCHED_NR/sched_nr.h"
|
#include "SCHED_NR/sched_nr.h"
|
||||||
|
#include "SCHED_NR/fapi_nr_l1.h"
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||||
#include "common/utils/LOG/log.h"
|
#include "common/utils/LOG/log.h"
|
||||||
@@ -381,6 +382,23 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
int kc;
|
int kc;
|
||||||
int E;
|
int E;
|
||||||
|
int8_t llrProcBuf[22*384];
|
||||||
|
int ret = 0;
|
||||||
|
int i,j;
|
||||||
|
int8_t enable_ldpc_offload = phy_vars_gNB->ldpc_offload_flag;
|
||||||
|
int16_t z_ol [68*384];
|
||||||
|
int8_t l_ol [68*384];
|
||||||
|
__m128i *pv_ol128 = (__m128i*)&z_ol;
|
||||||
|
__m128i *pl_ol128 = (__m128i*)&l_ol;
|
||||||
|
int no_iteration_ldpc = 2;
|
||||||
|
int length_dec;
|
||||||
|
uint8_t crc_type;
|
||||||
|
int K_bits_F;
|
||||||
|
int16_t z [68*384 + 16] __attribute__ ((aligned(16)));
|
||||||
|
int8_t l [68*384 + 16] __attribute__ ((aligned(16)));
|
||||||
|
|
||||||
|
__m128i *pv = (__m128i*)&z;
|
||||||
|
__m128i *pl = (__m128i*)&l;
|
||||||
|
|
||||||
#ifdef PRINT_CRC_CHECK
|
#ifdef PRINT_CRC_CHECK
|
||||||
prnt_crc_cnt++;
|
prnt_crc_cnt++;
|
||||||
@@ -395,7 +413,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
LOG_E(PHY,"ulsch_decoding.c: NULL harq_process pointer\n");
|
LOG_E(PHY,"ulsch_decoding.c: NULL harq_process pointer\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
uint8_t dtx_det = 0;
|
||||||
t_nrLDPC_dec_params decParams;
|
t_nrLDPC_dec_params decParams;
|
||||||
t_nrLDPC_dec_params* p_decParams = &decParams;
|
t_nrLDPC_dec_params* p_decParams = &decParams;
|
||||||
|
|
||||||
@@ -422,6 +440,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
harq_process->round = nr_rv_to_round(pusch_pdu->pusch_data.rv_index);
|
harq_process->round = nr_rv_to_round(pusch_pdu->pusch_data.rv_index);
|
||||||
|
|
||||||
harq_process->new_rx = false; // flag to indicate if this is a new reception for this harq (initialized to false)
|
harq_process->new_rx = false; // flag to indicate if this is a new reception for this harq (initialized to false)
|
||||||
|
dtx_det = 0;
|
||||||
if (harq_process->round == 0) {
|
if (harq_process->round == 0) {
|
||||||
harq_process->new_rx = true;
|
harq_process->new_rx = true;
|
||||||
harq_process->ndi = pusch_pdu->pusch_data.new_data_indicator;
|
harq_process->ndi = pusch_pdu->pusch_data.new_data_indicator;
|
||||||
@@ -431,6 +450,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
if (harq_process->ndi != pusch_pdu->pusch_data.new_data_indicator) {
|
if (harq_process->ndi != pusch_pdu->pusch_data.new_data_indicator) {
|
||||||
harq_process->new_rx = true;
|
harq_process->new_rx = true;
|
||||||
harq_process->ndi = pusch_pdu->pusch_data.new_data_indicator;
|
harq_process->ndi = pusch_pdu->pusch_data.new_data_indicator;
|
||||||
|
|
||||||
LOG_D(PHY,"Missed ULSCH detection. NDI toggled but rv %d does not correspond to first reception\n",pusch_pdu->pusch_data.rv_index);
|
LOG_D(PHY,"Missed ULSCH detection. NDI toggled but rv %d does not correspond to first reception\n",pusch_pdu->pusch_data.rv_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -546,12 +566,179 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
Kr = harq_process->K;
|
Kr = harq_process->K;
|
||||||
Kr_bytes = Kr>>3;
|
Kr_bytes = Kr>>3;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
|
||||||
|
//if ((enable_ldpc_offload)&& (dtx_det==0))
|
||||||
|
if (enable_ldpc_offload){
|
||||||
|
// if (dtx_det==0) {
|
||||||
|
|
||||||
|
if (harq_process->C == 1) {
|
||||||
|
if (A > 3824)
|
||||||
|
crc_type = CRC24_A;
|
||||||
|
else
|
||||||
|
crc_type = CRC16;
|
||||||
|
|
||||||
|
length_dec = harq_process->B;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
crc_type = CRC24_B;
|
||||||
|
length_dec = (harq_process->B+24*harq_process->C)/harq_process->C;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (r=0; r<harq_process->C; r++) {
|
||||||
|
E = nr_get_E(G, harq_process->C, Qm, n_layers, r);
|
||||||
|
memset(harq_process->c[r],0,Kr_bytes);
|
||||||
|
|
||||||
|
if ((dtx_det==0)&&(pusch_pdu->pusch_data.rv_index==0)){
|
||||||
|
//if (dtx_det==0){
|
||||||
|
if (mcs >9){
|
||||||
|
memcpy((&z_ol[0]),ulsch_llr+r_offset,E*sizeof(short));
|
||||||
|
|
||||||
|
for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++)
|
||||||
|
{
|
||||||
|
pl_ol128[j] = _mm_packs_epi16(pv_ol128[i],pv_ol128[i+1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = nrLDPC_decoder_offload(p_decParams, harq_pid,
|
||||||
|
ULSCH_id,r,
|
||||||
|
pusch_pdu->pusch_data.rv_index,
|
||||||
|
harq_process->F,
|
||||||
|
E,
|
||||||
|
Qm,
|
||||||
|
(int8_t*)&pl_ol128[0],
|
||||||
|
llrProcBuf, 1);
|
||||||
|
if (ret<0) {
|
||||||
|
LOG_E(PHY,"ulsch_decoding.c: Problem in LDPC decoder offload\n");
|
||||||
|
no_iteration_ldpc = ulsch->max_ldpc_iterations + 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
K_bits_F = Kr-harq_process->F;
|
||||||
|
|
||||||
|
t_nrLDPC_time_stats procTime = {0};
|
||||||
|
t_nrLDPC_time_stats* p_procTime = &procTime ;
|
||||||
|
/// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1)
|
||||||
|
int16_t harq_e[3*8448];
|
||||||
|
|
||||||
|
nr_deinterleaving_ldpc(E,
|
||||||
|
Qm,
|
||||||
|
harq_e,
|
||||||
|
ulsch_llr+r_offset);
|
||||||
|
|
||||||
|
if (nr_rate_matching_ldpc_rx(pusch_pdu->maintenance_parms_v3.tbSizeLbrmBytes,
|
||||||
|
p_decParams->BG,
|
||||||
|
p_decParams->Z,
|
||||||
|
harq_process->d[r],
|
||||||
|
harq_e,
|
||||||
|
harq_process->C,
|
||||||
|
pusch_pdu->pusch_data.rv_index,
|
||||||
|
harq_process->new_rx,
|
||||||
|
E,
|
||||||
|
harq_process->F,
|
||||||
|
Kr-harq_process->F-2*(p_decParams->Z))==-1) {
|
||||||
|
|
||||||
|
LOG_E(PHY,"ulsch_decoding.c: Problem in rate_matching\n");
|
||||||
|
no_iteration_ldpc = ulsch->max_ldpc_iterations + 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//set first 2*Z_c bits to zeros
|
||||||
|
memset(&z[0],0,2*harq_process->Z*sizeof(int16_t));
|
||||||
|
//set Filler bits
|
||||||
|
memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t));
|
||||||
|
//Move coded bits before filler bits
|
||||||
|
memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t));
|
||||||
|
//skip filler bits
|
||||||
|
memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t));
|
||||||
|
//Saturate coded bits before decoding into 8 bits values
|
||||||
|
for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++)
|
||||||
|
{
|
||||||
|
pl[j] = _mm_packs_epi16(pv[i],pv[i+1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
no_iteration_ldpc = nrLDPC_decoder(p_decParams,
|
||||||
|
(int8_t*)&pl[0],
|
||||||
|
llrProcBuf,
|
||||||
|
p_procTime);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int m=0; m < Kr>>3; m ++) {
|
||||||
|
harq_process->c[r][m]= (uint8_t) llrProcBuf[m];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_crc((uint8_t*)llrProcBuf,length_dec,harq_process->F,crc_type)) {
|
||||||
|
#ifdef PRINT_CRC_CHECK
|
||||||
|
LOG_I(PHY, "Segment %d CRC OK\n",r);
|
||||||
|
#endif
|
||||||
|
no_iteration_ldpc = 2;
|
||||||
|
} else {
|
||||||
|
#ifdef PRINT_CRC_CHECK
|
||||||
|
LOG_I(PHY, "segment %d CRC NOK\n",r);
|
||||||
|
#endif
|
||||||
|
no_iteration_ldpc = ulsch->max_ldpc_iterations + 1;
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
|
||||||
|
r_offset += E;
|
||||||
|
|
||||||
|
/*for (int k=0;k<8;k++)
|
||||||
|
{
|
||||||
|
printf("output decoder [%d] = 0x%02x \n", k, harq_process->c[r][k]);
|
||||||
|
printf("llrprocbuf [%d] = %x adr %p\n", k, llrProcBuf[k], llrProcBuf+k);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
dtx_det = 0;
|
||||||
|
no_iteration_ldpc = ulsch->max_ldpc_iterations+1;
|
||||||
|
}
|
||||||
|
bool decodeSuccess = (no_iteration_ldpc <= ulsch->max_ldpc_iterations);
|
||||||
|
if (decodeSuccess) {
|
||||||
|
memcpy(harq_process->b+offset,
|
||||||
|
harq_process->c[r],
|
||||||
|
Kr_bytes - (harq_process->F>>3) -((harq_process->C>1)?3:0));
|
||||||
|
offset += (Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0));
|
||||||
|
harq_process->processedSegments++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG_D(PHY,"uplink segment error %d/%d\n",r,harq_process->C);
|
||||||
|
LOG_D(PHY, "ULSCH %d in error\n",ULSCH_id);
|
||||||
|
break; //don't even attempt to decode other segments
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_ULSCH_DECODING,0);
|
||||||
|
|
||||||
|
if ((harq_process->processedSegments==(harq_process->C))) {
|
||||||
|
LOG_D(PHY,"[gNB %d] ULSCH: Setting ACK for slot %d TBS %d\n",
|
||||||
|
phy_vars_gNB->Mod_id,harq_process->slot,harq_process->TBS);
|
||||||
|
harq_process->status = SCH_IDLE;
|
||||||
|
harq_process->round = 0;
|
||||||
|
ulsch->harq_mask &= ~(1 << harq_pid);
|
||||||
|
|
||||||
|
LOG_D(PHY, "ULSCH received ok \n");
|
||||||
|
nr_fill_indication(phy_vars_gNB,harq_process->frame, harq_process->slot, ULSCH_id, harq_pid, 0,0);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
LOG_D(PHY,"[gNB %d] ULSCH: Setting NAK for SFN/SF %d/%d (pid %d, status %d, round %d, TBS %d) r %d\n",
|
||||||
|
phy_vars_gNB->Mod_id, harq_process->frame, harq_process->slot,
|
||||||
|
harq_pid,harq_process->status, harq_process->round,harq_process->TBS,r);
|
||||||
|
harq_process->handled = 1;
|
||||||
|
no_iteration_ldpc = ulsch->max_ldpc_iterations + 1;
|
||||||
|
LOG_D(PHY, "ULSCH %d in error\n",ULSCH_id);
|
||||||
|
nr_fill_indication(phy_vars_gNB,harq_process->frame, harq_process->slot, ULSCH_id, harq_pid, 1,0);
|
||||||
|
}
|
||||||
|
ulsch->last_iteration_cnt = no_iteration_ldpc;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
dtx_det = 0;
|
||||||
void (*nr_processULSegment_ptr)(void*) = &nr_processULSegment;
|
void (*nr_processULSegment_ptr)(void*) = &nr_processULSegment;
|
||||||
|
|
||||||
for (r=0; r<harq_process->C; r++) {
|
for (r=0; r<harq_process->C; r++) {
|
||||||
|
|
||||||
E = nr_get_E(G, harq_process->C, Qm, n_layers, r);
|
E = nr_get_E(G, harq_process->C, Qm, n_layers, r);
|
||||||
|
|
||||||
union ldpcReqUnion id = {.s={ulsch->rnti,frame,nr_tti_rx,0,0}};
|
union ldpcReqUnion id = {.s={ulsch->rnti,frame,nr_tti_rx,0,0}};
|
||||||
notifiedFIFO_elt_t *req = newNotifiedFIFO_elt(sizeof(ldpcDecode_t), id.p, &phy_vars_gNB->respDecode, nr_processULSegment_ptr);
|
notifiedFIFO_elt_t *req = newNotifiedFIFO_elt(sizeof(ldpcDecode_t), id.p, &phy_vars_gNB->respDecode, nr_processULSegment_ptr);
|
||||||
ldpcDecode_t * rdata=(ldpcDecode_t *) NotifiedFifoData(req);
|
ldpcDecode_t * rdata=(ldpcDecode_t *) NotifiedFifoData(req);
|
||||||
@@ -581,5 +768,6 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
|
|||||||
offset += (Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0));
|
offset += (Kr_bytes - (harq_process->F>>3) - ((harq_process->C>1)?3:0));
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -807,7 +807,7 @@ typedef struct PHY_VARS_gNB_s {
|
|||||||
double N0;
|
double N0;
|
||||||
|
|
||||||
unsigned char first_run_I0_measurements;
|
unsigned char first_run_I0_measurements;
|
||||||
|
int ldpc_offload_flag;
|
||||||
|
|
||||||
unsigned char is_secondary_gNB; // primary by default
|
unsigned char is_secondary_gNB; // primary by default
|
||||||
unsigned char is_init_sync; /// Flag to tell if initial synchronization is performed. This affects how often the secondary eNB will listen to the PSS from the primary system.
|
unsigned char is_init_sync; /// Flag to tell if initial synchronization is performed. This affects how often the secondary eNB will listen to the PSS from the primary system.
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
|
|||||||
uint8_t l, number_dmrs_symbols = 0;
|
uint8_t l, number_dmrs_symbols = 0;
|
||||||
uint32_t G;
|
uint32_t G;
|
||||||
uint16_t start_symbol, number_symbols, nb_re_dmrs;
|
uint16_t start_symbol, number_symbols, nb_re_dmrs;
|
||||||
|
uint8_t enable_ldpc_offload = gNB->ldpc_offload_flag;
|
||||||
start_symbol = pusch_pdu->start_symbol_index;
|
start_symbol = pusch_pdu->start_symbol_index;
|
||||||
number_symbols = pusch_pdu->nr_of_symbols;
|
number_symbols = pusch_pdu->nr_of_symbols;
|
||||||
|
|
||||||
@@ -361,14 +361,15 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
|
|||||||
slot_rx,
|
slot_rx,
|
||||||
harq_pid,
|
harq_pid,
|
||||||
G);
|
G);
|
||||||
|
if (enable_ldpc_offload ==0) {
|
||||||
while (gNB->nbDecode > 0) {
|
while (gNB->nbDecode > 0) {
|
||||||
notifiedFIFO_elt_t *req = pullTpool(&gNB->respDecode, &gNB->threadPool);
|
notifiedFIFO_elt_t *req = pullTpool(&gNB->respDecode, &gNB->threadPool);
|
||||||
if (req == NULL)
|
if (req == NULL)
|
||||||
break; // Tpool has been stopped
|
break; // Tpool has been stopped
|
||||||
nr_postDecode(gNB, req);
|
nr_postDecode(gNB, req);
|
||||||
delNotifiedFIFO_elt(req);
|
delNotifiedFIFO_elt(req);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
stop_meas(&gNB->ulsch_decoding_stats);
|
stop_meas(&gNB->ulsch_decoding_stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -493,6 +494,7 @@ void nr_fill_indication(PHY_VARS_gNB *gNB, int frame, int slot_rx, int ULSCH_id,
|
|||||||
gNB->UL_INFO.rx_ind.number_of_pdus++;
|
gNB->UL_INFO.rx_ind.number_of_pdus++;
|
||||||
|
|
||||||
pthread_mutex_unlock(&gNB->UL_INFO_mutex);
|
pthread_mutex_unlock(&gNB->UL_INFO_mutex);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function to fill UL RB mask to be used for N0 measurements
|
// Function to fill UL RB mask to be used for N0 measurements
|
||||||
@@ -779,8 +781,6 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
|||||||
dB_fixed_x10(gNB->pusch_vars[ULSCH_id]->ulsch_power_tot),
|
dB_fixed_x10(gNB->pusch_vars[ULSCH_id]->ulsch_power_tot),
|
||||||
dB_fixed_x10(gNB->pusch_vars[ULSCH_id]->ulsch_noise_power_tot),gNB->pusch_thres);
|
dB_fixed_x10(gNB->pusch_vars[ULSCH_id]->ulsch_noise_power_tot),gNB->pusch_thres);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gNB->pusch_vars[ULSCH_id]->DTX=0;
|
gNB->pusch_vars[ULSCH_id]->DTX=0;
|
||||||
}
|
}
|
||||||
stop_meas(&gNB->rx_pusch_stats);
|
stop_meas(&gNB->rx_pusch_stats);
|
||||||
|
|||||||
@@ -65,7 +65,8 @@ double cpuf;
|
|||||||
uint16_t NB_UE_INST = 1;
|
uint16_t NB_UE_INST = 1;
|
||||||
|
|
||||||
uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
|
uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
|
||||||
|
const short conjugate[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1};
|
||||||
|
const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||||
// needed for some functions
|
// needed for some functions
|
||||||
PHY_VARS_NR_UE *PHY_vars_UE_g[1][1] = { { NULL } };
|
PHY_VARS_NR_UE *PHY_vars_UE_g[1][1] = { { NULL } };
|
||||||
uint16_t n_rnti = 0x1234;
|
uint16_t n_rnti = 0x1234;
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ double cpuf;
|
|||||||
//uint8_t nfapi_mode = 0;
|
//uint8_t nfapi_mode = 0;
|
||||||
uint16_t NB_UE_INST = 1;
|
uint16_t NB_UE_INST = 1;
|
||||||
uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
|
uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
|
||||||
|
const short conjugate[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1};
|
||||||
|
const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||||
// needed for some functions
|
// needed for some functions
|
||||||
PHY_VARS_NR_UE * PHY_vars_UE_g[1][1]={{NULL}};
|
PHY_VARS_NR_UE * PHY_vars_UE_g[1][1]={{NULL}};
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ uint64_t downlink_frequency[MAX_NUM_CCs][4];
|
|||||||
void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq) {}
|
void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq) {}
|
||||||
|
|
||||||
uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
|
uint8_t const nr_rv_round_map[4] = {0, 2, 3, 1};
|
||||||
|
const short conjugate[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1};
|
||||||
|
const short conjugate2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||||
double cpuf;
|
double cpuf;
|
||||||
//uint8_t nfapi_mode = 0;
|
//uint8_t nfapi_mode = 0;
|
||||||
uint16_t NB_UE_INST = 1;
|
uint16_t NB_UE_INST = 1;
|
||||||
|
|||||||
@@ -275,6 +275,7 @@ channel_desc_t *UE2gNB[NUMBER_OF_UE_MAX][NUMBER_OF_gNB_MAX];
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
|
||||||
char c;
|
char c;
|
||||||
int i;
|
int i;
|
||||||
double SNR, snr0 = -2.0, snr1 = 2.0;
|
double SNR, snr0 = -2.0, snr1 = 2.0;
|
||||||
@@ -323,6 +324,8 @@ int main(int argc, char **argv)
|
|||||||
double effTP[100];
|
double effTP[100];
|
||||||
float eff_tp_check = 100;
|
float eff_tp_check = 100;
|
||||||
uint8_t snrRun;
|
uint8_t snrRun;
|
||||||
|
int ldpc_offload_flag = 0;
|
||||||
|
uint8_t max_rounds = 4;
|
||||||
int chest_type[2] = {0};
|
int chest_type[2] = {0};
|
||||||
|
|
||||||
int enable_ptrs = 0;
|
int enable_ptrs = 0;
|
||||||
@@ -358,7 +361,7 @@ int main(int argc, char **argv)
|
|||||||
/* initialize the sin-cos table */
|
/* initialize the sin-cos table */
|
||||||
InitSinLUT();
|
InitSinLUT();
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "a:b:c:d:ef:g:h:i:kl:m:n:p:q:r:s:t:u:w:y:z:C:F:G:H:I:M:N:PR:S:T:U:L:ZW:")) != -1) {
|
while ((c = getopt(argc, argv, "a:b:c:d:ef:g:h:i:kl:m:n:op:q:r:s:t:u:v:w:y:z:C:F:G:H:I:M:N:PR:S:T:U:L:ZW:")) != -1) {
|
||||||
printf("handling optarg %c\n",c);
|
printf("handling optarg %c\n",c);
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
||||||
@@ -476,6 +479,10 @@ int main(int argc, char **argv)
|
|||||||
case 'n':
|
case 'n':
|
||||||
n_trials = atoi(optarg);
|
n_trials = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'o':
|
||||||
|
ldpc_offload_flag = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'p':
|
case 'p':
|
||||||
extended_prefix_flag = 1;
|
extended_prefix_flag = 1;
|
||||||
@@ -502,6 +509,10 @@ int main(int argc, char **argv)
|
|||||||
mu = atoi(optarg);
|
mu = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'v':
|
||||||
|
max_rounds = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
start_rb = atoi(optarg);
|
start_rb = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
@@ -626,6 +637,7 @@ int main(int argc, char **argv)
|
|||||||
printf("-s Starting SNR, runs from SNR0 to SNR0 + 10 dB if ending SNR isn't given\n");
|
printf("-s Starting SNR, runs from SNR0 to SNR0 + 10 dB if ending SNR isn't given\n");
|
||||||
printf("-m MCS value\n");
|
printf("-m MCS value\n");
|
||||||
printf("-n Number of trials to simulate\n");
|
printf("-n Number of trials to simulate\n");
|
||||||
|
printf("-o ldpc offload flag\n");
|
||||||
printf("-p Use extended prefix mode\n");
|
printf("-p Use extended prefix mode\n");
|
||||||
printf("-q MCS table\n");
|
printf("-q MCS table\n");
|
||||||
printf("-t Delay spread for multipath channel\n");
|
printf("-t Delay spread for multipath channel\n");
|
||||||
@@ -634,6 +646,7 @@ int main(int argc, char **argv)
|
|||||||
//printf("-x Transmission mode (1,2,6 for the moment)\n");
|
//printf("-x Transmission mode (1,2,6 for the moment)\n");
|
||||||
printf("-y Number of TX antennas used at UE\n");
|
printf("-y Number of TX antennas used at UE\n");
|
||||||
printf("-z Number of RX antennas used at gNB\n");
|
printf("-z Number of RX antennas used at gNB\n");
|
||||||
|
printf("-v Set the max rounds\n");
|
||||||
printf("-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file\n");
|
printf("-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file\n");
|
||||||
//printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n");
|
//printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n");
|
||||||
printf("-F Input filename (.txt format) for RX conformance testing\n");
|
printf("-F Input filename (.txt format) for RX conformance testing\n");
|
||||||
@@ -666,7 +679,6 @@ int main(int argc, char **argv)
|
|||||||
get_softmodem_params()->do_ra = 0;
|
get_softmodem_params()->do_ra = 0;
|
||||||
get_softmodem_params()->usim_test = 1;
|
get_softmodem_params()->usim_test = 1;
|
||||||
|
|
||||||
|
|
||||||
if (snr1set == 0)
|
if (snr1set == 0)
|
||||||
snr1 = snr0 + 10;
|
snr1 = snr0 + 10;
|
||||||
|
|
||||||
@@ -790,9 +802,12 @@ int main(int argc, char **argv)
|
|||||||
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
||||||
cfg->carrier_config.num_tx_ant.value = 1;
|
cfg->carrier_config.num_tx_ant.value = 1;
|
||||||
cfg->carrier_config.num_rx_ant.value = n_rx;
|
cfg->carrier_config.num_rx_ant.value = n_rx;
|
||||||
|
|
||||||
// nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,0,0x01);
|
// nr_phy_config_request_sim(gNB,N_RB_DL,N_RB_DL,mu,0,0x01);
|
||||||
|
gNB->ldpc_offload_flag = ldpc_offload_flag;
|
||||||
gNB->chest_freq = chest_type[0];
|
gNB->chest_freq = chest_type[0];
|
||||||
gNB->chest_time = chest_type[1];
|
gNB->chest_time = chest_type[1];
|
||||||
|
|
||||||
phy_init_nr_gNB(gNB,0,1);
|
phy_init_nr_gNB(gNB,0,1);
|
||||||
/* RU handles rxdataF, and gNB just has a pointer. Here, we don't have an RU,
|
/* RU handles rxdataF, and gNB just has a pointer. Here, we don't have an RU,
|
||||||
* so we need to allocate that memory as well. */
|
* so we need to allocate that memory as well. */
|
||||||
@@ -858,6 +873,7 @@ int main(int argc, char **argv)
|
|||||||
unsigned char harq_pid = 0;
|
unsigned char harq_pid = 0;
|
||||||
|
|
||||||
NR_gNB_ULSCH_t *ulsch_gNB = gNB->ulsch[UE_id];
|
NR_gNB_ULSCH_t *ulsch_gNB = gNB->ulsch[UE_id];
|
||||||
|
|
||||||
//nfapi_nr_ul_config_ulsch_pdu *rel15_ul = &ulsch_gNB->harq_processes[harq_pid]->ulsch_pdu;
|
//nfapi_nr_ul_config_ulsch_pdu *rel15_ul = &ulsch_gNB->harq_processes[harq_pid]->ulsch_pdu;
|
||||||
nfapi_nr_ul_tti_request_t *UL_tti_req = malloc(sizeof(*UL_tti_req));
|
nfapi_nr_ul_tti_request_t *UL_tti_req = malloc(sizeof(*UL_tti_req));
|
||||||
NR_Sched_Rsp_t *Sched_INFO = malloc(sizeof(*Sched_INFO));
|
NR_Sched_Rsp_t *Sched_INFO = malloc(sizeof(*Sched_INFO));
|
||||||
@@ -891,7 +907,6 @@ int main(int argc, char **argv)
|
|||||||
uint16_t n_rb1 = 75;
|
uint16_t n_rb1 = 75;
|
||||||
|
|
||||||
uint16_t pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA; // | PUSCH_PDU_BITMAP_PUSCH_PTRS;
|
uint16_t pdu_bit_map = PUSCH_PDU_BITMAP_PUSCH_DATA; // | PUSCH_PDU_BITMAP_PUSCH_PTRS;
|
||||||
uint8_t max_rounds = 4;
|
|
||||||
uint8_t crc_status = 0;
|
uint8_t crc_status = 0;
|
||||||
|
|
||||||
unsigned char mod_order = nr_get_Qm_ul(Imcs, mcs_table);
|
unsigned char mod_order = nr_get_Qm_ul(Imcs, mcs_table);
|
||||||
@@ -1056,6 +1071,7 @@ int main(int argc, char **argv)
|
|||||||
double blerStats[4][100];
|
double blerStats[4][100];
|
||||||
double berStats[4][100];
|
double berStats[4][100];
|
||||||
double snrStats[100];
|
double snrStats[100];
|
||||||
|
double ldpcDecStats[100] = {0};
|
||||||
memset(errors_scrambling, 0, sizeof(uint32_t)*4*100);
|
memset(errors_scrambling, 0, sizeof(uint32_t)*4*100);
|
||||||
memset(n_errors, 0, sizeof(int)*4*100);
|
memset(n_errors, 0, sizeof(int)*4*100);
|
||||||
memset(round_trials, 0, sizeof(int)*4*100);
|
memset(round_trials, 0, sizeof(int)*4*100);
|
||||||
@@ -1623,6 +1639,8 @@ int main(int argc, char **argv)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ldpcDecStats[snrRun] = gNB->ulsch_decoding_stats.trials?inMicroS(gNB->ulsch_decoding_stats.diff/gNB->ulsch_decoding_stats.trials):0;
|
||||||
|
|
||||||
if(n_trials==1)
|
if(n_trials==1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1669,8 +1687,11 @@ int main(int argc, char **argv)
|
|||||||
LOG_MM(opStatsFile,"BER_round3",berStats[3],snrRun,1,7);
|
LOG_MM(opStatsFile,"BER_round3",berStats[3],snrRun,1,7);
|
||||||
LOG_MM(opStatsFile,"EffRate",effRate,snrRun,1,7);
|
LOG_MM(opStatsFile,"EffRate",effRate,snrRun,1,7);
|
||||||
LOG_MM(opStatsFile,"EffTP",effTP,snrRun,1,7);
|
LOG_MM(opStatsFile,"EffTP",effTP,snrRun,1,7);
|
||||||
|
|
||||||
free(test_input_bit);
|
free(test_input_bit);
|
||||||
free(estimated_output_bit);
|
free(estimated_output_bit);
|
||||||
|
if (gNB->ldpc_offload_flag)
|
||||||
|
free_nrLDPClib_offload();
|
||||||
|
|
||||||
if (output_fd)
|
if (output_fd)
|
||||||
fclose(output_fd);
|
fclose(output_fd);
|
||||||
|
|||||||
@@ -465,7 +465,7 @@ static int rfsimulator_write_internal(rfsimulator_state_t *t, openair0_timestamp
|
|||||||
pthread_mutex_unlock(&Sockmutex);
|
pthread_mutex_unlock(&Sockmutex);
|
||||||
|
|
||||||
LOG_D(HW,"sent %d samples at time: %ld->%ld, energy in first antenna: %d\n",
|
LOG_D(HW,"sent %d samples at time: %ld->%ld, energy in first antenna: %d\n",
|
||||||
nsamps, timestamp, timestamp+nsamps, signal_energy(samplesVoid[0], nsamps) );
|
nsamps, timestamp, timestamp+nsamps, signal_energy(samplesVoid[0], nsamps) );
|
||||||
return nsamps;
|
return nsamps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+323
@@ -0,0 +1,323 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 99;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = (
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x010203; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x112233; // 0 false, else true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
nr_cellid = 12345678L
|
||||||
|
|
||||||
|
# tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
pusch_AntennaPorts = 2;
|
||||||
|
min_rxtxtime_pdsch = 2;
|
||||||
|
ul_prbblacklist = "51,52,53,54"
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 11;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3301.68 MHz + 22*12*30e-3 MHz = 3309.6
|
||||||
|
#absoluteFrequencySSB = 620640;
|
||||||
|
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
|
||||||
|
absoluteFrequencySSB = 621312;
|
||||||
|
# this is 3503.28 MHz + 22*12*30e-3 MHz = 3511.2
|
||||||
|
#absoluteFrequencySSB = 634080;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#absoluteFrequencySSB = 640032;
|
||||||
|
#dl_frequencyBand = 78;
|
||||||
|
# this is 3301.68 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 620112;
|
||||||
|
# this is 3300.60 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 620040;
|
||||||
|
# this is 3502.56 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 633552;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 640032;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 11;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
#pdsch-ConfigCommon
|
||||||
|
#pdschTimeDomainAllocationList (up to 16 entries)
|
||||||
|
initialDLBWPk0_0 = 0;
|
||||||
|
#initialULBWPmappingType
|
||||||
|
#0=typeA,1=typeB
|
||||||
|
initialDLBWPmappingType_0 = 0;
|
||||||
|
#this is SS=1,L=13
|
||||||
|
initialDLBWPstartSymbolAndLength_0 = 40;
|
||||||
|
|
||||||
|
initialDLBWPk0_1 = 0;
|
||||||
|
initialDLBWPmappingType_1 = 0;
|
||||||
|
#this is SS=1,L=5
|
||||||
|
initialDLBWPstartSymbolAndLength_1 = 57;
|
||||||
|
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 12;
|
||||||
|
preambleReceivedTargetPower = -104;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
|
# pusch-ConfigCommon (up to 16 elements)
|
||||||
|
initialULBWPk2_0 = 6;
|
||||||
|
initialULBWPmappingType_0 = 1
|
||||||
|
# this is SS=2 L=13
|
||||||
|
initialULBWPstartSymbolAndLength_0 = 41;
|
||||||
|
|
||||||
|
initialULBWPk2_1 = 6;
|
||||||
|
initialULBWPmappingType_1 = 1;
|
||||||
|
# this is SS=0 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_1 = 52;
|
||||||
|
|
||||||
|
initialULBWPk2_2 = 7;
|
||||||
|
initialULBWPmappingType_2 = 1;
|
||||||
|
# this is SS=10 L=4
|
||||||
|
initialULBWPstartSymbolAndLength_2 = 52;
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = ( { ipv4 = "192.168.69.131";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "em1";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.18.196/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "em1";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.18.196/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
pusch_TargetSNRx10 = 200;
|
||||||
|
pucch_TargetSNRx10 = 200;
|
||||||
|
ulsch_max_slots_inactivity=10;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
pusch_proc_threads = 3;
|
||||||
|
prach_dtx_threshold = 120;
|
||||||
|
pucch0_dtx_threshold = 50;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 2
|
||||||
|
nb_rx = 2
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [78];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 75;
|
||||||
|
eNB_instances = [0];
|
||||||
|
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||||
|
bf_weights = [0x00007fff, 0x0000];
|
||||||
|
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||||
|
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||||
|
## beamforming 2x2 matrix:
|
||||||
|
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||||
|
## beamforming 4x4 matrix:
|
||||||
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
|
||||||
|
sdr_addrs = "addr=192.168.30.2,second_addr=192.168.50.2,clock_source=internal,time_source=internal"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_SINGLE_THREAD";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
f1ap_log_level ="debug";
|
||||||
|
f1ap_log_verbosity ="medium";
|
||||||
|
};
|
||||||
@@ -0,0 +1,313 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 99;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = (
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x010203; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x000001; // 0 false, else true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
nr_cellid = 12345678L
|
||||||
|
|
||||||
|
# tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
pusch_AntennaPorts = 2;
|
||||||
|
min_rxtxtime_pdsch = 5;
|
||||||
|
ul_prbblacklist = "51,52,53,54"
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 11;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3301.68 MHz + 22*12*30e-3 MHz = 3309.6
|
||||||
|
#absoluteFrequencySSB = 620640;
|
||||||
|
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
|
||||||
|
absoluteFrequencySSB = 621312;
|
||||||
|
# this is 3503.28 MHz + 22*12*30e-3 MHz = 3511.2
|
||||||
|
#absoluteFrequencySSB = 634080;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#absoluteFrequencySSB = 640032;
|
||||||
|
#dl_frequencyBand = 78;
|
||||||
|
# this is 3301.68 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 620112;
|
||||||
|
# this is 3300.60 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 620040;
|
||||||
|
# this is 3502.56 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 633552;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 640032;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 11;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 12;
|
||||||
|
preambleReceivedTargetPower = -104;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
# pusch_TargetSNRx10 = 200;
|
||||||
|
# pucch_TargetSNRx10 = 150;
|
||||||
|
ulsch_max_frame_inactivity = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
prach_dtx_threshold = 120;
|
||||||
|
thread_pool_size = 4;
|
||||||
|
# pucch0_dtx_threshold = 150;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 2
|
||||||
|
nb_rx = 2
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [78];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 75;
|
||||||
|
eNB_instances = [0];
|
||||||
|
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||||
|
bf_weights = [0x00007fff, 0x0000];
|
||||||
|
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||||
|
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||||
|
## beamforming 2x2 matrix:
|
||||||
|
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||||
|
## beamforming 4x4 matrix:
|
||||||
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
|
||||||
|
sf_extension = 0
|
||||||
|
sdr_addrs = "addr=192.168.82.52,second_addr=192.168.83.52,clock_source=internal,time_source=internal"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_RU_L1_SPLIT";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
security = {
|
||||||
|
# preferred ciphering algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nea0, nea1, nea2, nea3
|
||||||
|
ciphering_algorithms = ( "nea0" );
|
||||||
|
|
||||||
|
# preferred integrity algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nia0, nia1, nia2, nia3
|
||||||
|
integrity_algorithms = ( "nia2", "nia0" );
|
||||||
|
|
||||||
|
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||||
|
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||||
|
drb_ciphering = "yes";
|
||||||
|
drb_integrity = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
f1ap_log_level ="debug";
|
||||||
|
f1ap_log_verbosity ="medium";
|
||||||
|
};
|
||||||
@@ -0,0 +1,316 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
|
||||||
|
plmn_list = ({
|
||||||
|
mcc = 208;
|
||||||
|
mnc = 99;
|
||||||
|
mnc_length = 2;
|
||||||
|
snssaiList = (
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x010203; // 0 false, else true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sst = 1;
|
||||||
|
sd = 0x000001; // 0 false, else true
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
nr_cellid = 12345678L
|
||||||
|
|
||||||
|
# tr_s_preference = "local_mac"
|
||||||
|
|
||||||
|
////////// Physical parameters:
|
||||||
|
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
pdsch_AntennaPorts = 1;
|
||||||
|
pusch_AntennaPorts = 2;
|
||||||
|
#pusch_TargetSNRx10 = 200;
|
||||||
|
#pucch_TargetSNRx10 = 200;
|
||||||
|
ul_prbblacklist = "79,80,81,82"
|
||||||
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
|
pdcch_ConfigSIB1 = (
|
||||||
|
{
|
||||||
|
controlResourceSetZero = 11;
|
||||||
|
searchSpaceZero = 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3301.68 MHz + 22*12*30e-3 MHz = 3309.6
|
||||||
|
#absoluteFrequencySSB = 620640;
|
||||||
|
# this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68
|
||||||
|
absoluteFrequencySSB = 621312;
|
||||||
|
# this is 3503.28 MHz + 22*12*30e-3 MHz = 3511.2
|
||||||
|
#absoluteFrequencySSB = 634080;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#absoluteFrequencySSB = 640032;
|
||||||
|
#dl_frequencyBand = 78;
|
||||||
|
# this is 3301.68 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 620112;
|
||||||
|
# this is 3300.60 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 620040;
|
||||||
|
# this is 3502.56 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 633552;
|
||||||
|
# this is 3600.48 MHz
|
||||||
|
#dl_absoluteFrequencyPointA = 640032;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 162;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=0,L=106 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 31899;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 11;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 162;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 31899;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 12;
|
||||||
|
preambleReceivedTargetPower = -104;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = ( { ipv4 = "192.168.70.132";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.129/24";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.129/24";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
MACRLCs = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_s_preference = "local_L1";
|
||||||
|
tr_n_preference = "local_RRC";
|
||||||
|
#pusch_TargetSNRx10 = 200;
|
||||||
|
#pucch_TargetSNRx10 = 200;
|
||||||
|
ulsch_max_frame_inactivity = 1;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
L1s = (
|
||||||
|
{
|
||||||
|
num_cc = 1;
|
||||||
|
tr_n_preference = "local_mac";
|
||||||
|
prach_dtx_threshold = 120;
|
||||||
|
thread_pool_size = 8;
|
||||||
|
# pucch0_dtx_threshold = 150;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
RUs = (
|
||||||
|
{
|
||||||
|
local_rf = "yes"
|
||||||
|
nb_tx = 2
|
||||||
|
nb_rx = 2
|
||||||
|
att_tx = 0
|
||||||
|
att_rx = 0;
|
||||||
|
bands = [78];
|
||||||
|
max_pdschReferenceSignalPower = -27;
|
||||||
|
max_rxgain = 75;
|
||||||
|
eNB_instances = [0];
|
||||||
|
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
||||||
|
bf_weights = [0x00007fff, 0x0000];
|
||||||
|
##beamforming 1x4 matrix: 1 layer x 4 antennas
|
||||||
|
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
|
||||||
|
## beamforming 2x2 matrix:
|
||||||
|
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
|
||||||
|
## beamforming 4x4 matrix:
|
||||||
|
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
|
||||||
|
sf_extension = 0
|
||||||
|
sdr_addrs = "addr=192.168.82.52,second_addr=192.168.83.52,clock_source=internal,time_source=internal"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
THREAD_STRUCT = (
|
||||||
|
{
|
||||||
|
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
|
||||||
|
parallel_config = "PARALLEL_RU_L1_SPLIT";
|
||||||
|
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
|
||||||
|
worker_config = "WORKER_ENABLE";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
security = {
|
||||||
|
# preferred ciphering algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nea0, nea1, nea2, nea3
|
||||||
|
ciphering_algorithms = ( "nea0" );
|
||||||
|
|
||||||
|
# preferred integrity algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nia0, nia1, nia2, nia3
|
||||||
|
integrity_algorithms = ( "nia2", "nia0" );
|
||||||
|
|
||||||
|
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||||
|
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||||
|
drb_ciphering = "yes";
|
||||||
|
drb_integrity = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config :
|
||||||
|
{
|
||||||
|
global_log_level ="info";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="info";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="info";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
f1ap_log_level ="debug";
|
||||||
|
f1ap_log_verbosity ="medium";
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user