From 66363de1e87adac93f9f8d05969deda9feac0637 Mon Sep 17 00:00:00 2001 From: Ravi Sankar Korada Date: Wed, 1 Aug 2012 17:06:44 -0400 Subject: [PATCH] Commited by migration script --- Settings.xdc.xdt | 23 + build/buildlib.xs | 535 ++ config.bld | 105 + docs/Module.xs | 55 + docs/ReleaseNotes_TCP3DDriver.doc | Bin 0 -> 128512 bytes docs/ReleaseNotes_TCP3DDriver.pdf | Bin 0 -> 273367 bytes docs/TCP3D_DRV_doxconfig.xdt | 255 + docs/TCP3D_DriverSDS.pdf | Bin 0 -> 418268 bytes docs/TCP3D_LLD_SoftwareManifest.pdf | Bin 0 -> 29587 bytes docs/doxy/rundoxy.bat | 1 + docs/doxy/template/asapimain.h | 63 + docs/doxy/template/doxygen.h | 96 + docs/doxy/tifooter.htm | 4 + docs/doxy/tiheader.htm | 12 + docs/doxy/tilogo.gif | Bin 0 -> 1137 bytes docs/doxy/titagline.gif | Bin 0 -> 653 bytes docs/eclipse/sample.xml.xdt | 26 + docs/eclipse/toc_cdoc_sample.xml | 12 + docs/tifooter.htm | 4 + docs/tiheader.htm | 12 + docs/tilogo.gif | Bin 0 -> 1137 bytes docs/titagline.gif | Bin 0 -> 653 bytes example/Module.xs | 71 + example/macros.ini | 1 + example/simtci6634/c66/bios/link.cmd | 7 + example/simtci6634/c66/bios/sample_config.cfg | 134 + .../tcp3dSimtci6634C66BiosExampleProject.txt | 16 + example/simtci6634/c66/bios/tcp3d_osal.c | 61 + example/src/CpIntc_local.c | 144 + example/src/sample.h | 215 + example/src/sample_cfg.c | 1771 +++++ example/src/sample_cs.c | 503 ++ example/src/sample_init.c | 217 + example/src/sample_int_reg.c | 482 ++ example/src/tcp3d_codeBlkSeg.c | 208 + example/src/tcp3d_codeBlkSeg.h | 81 + example/src/tcp3d_drv_sample.h | 155 + example/src/tcp3d_drv_sample_init.c | 448 ++ example/src/tcp3d_drv_types.h | 78 + example/src/tcp3d_example_main.c | 1336 ++++ example/src/tcp3d_example_main.h | 237 + example/src/tcp3d_inputConfigPrep.c | 314 + example/src/tcp3d_itg.c | 366 + example/src/tcp3d_main.h | 234 + example/src/tcp3d_multi_inst.h | 135 + example/src/tcp3d_single_inst.h | 90 + example/src/tcp3d_testset_functions.c | 681 ++ example/testvectors/lte/block0_cfgreg.dat | 35 + example/testvectors/lte/block0_hard_dec.bin | 2 + example/testvectors/lte/block0_hard_dec.dat | 32 + example/testvectors/lte/block0_llrs.bin | Bin 0 -> 3072 bytes example/testvectors/lte/block0_llrs.dat | 1024 +++ example/testvectors/lte/block0_soft_dec.bin | Bin 0 -> 3072 bytes example/testvectors/lte/block0_soft_dec.dat | 1024 +++ example/testvectors/lte/block0_status.bin | Bin 0 -> 12 bytes example/testvectors/lte/block0_status.dat | 3 + example/testvectors/lte/block0_tail_llrs.dat | 6 + example/testvectors/lte/block1_cfgreg.dat | 35 + example/testvectors/lte/block1_hard_dec.bin | 1 + example/testvectors/lte/block1_hard_dec.dat | 33 + example/testvectors/lte/block1_llrs.bin | Bin 0 -> 3168 bytes example/testvectors/lte/block1_llrs.dat | 1056 +++ example/testvectors/lte/block1_soft_dec.bin | Bin 0 -> 3168 bytes example/testvectors/lte/block1_soft_dec.dat | 1056 +++ example/testvectors/lte/block1_status.bin | Bin 0 -> 12 bytes example/testvectors/lte/block1_status.dat | 3 + example/testvectors/lte/block1_tail_llrs.dat | 6 + example/testvectors/lte/block2_cfgreg.dat | 35 + example/testvectors/lte/block2_hard_dec.bin | 1 + example/testvectors/lte/block2_hard_dec.dat | 34 + example/testvectors/lte/block2_llrs.bin | Bin 0 -> 3264 bytes example/testvectors/lte/block2_llrs.dat | 1088 +++ example/testvectors/lte/block2_tail_llrs.dat | 6 + example/testvectors/lte/block3_cfgreg.dat | 35 + example/testvectors/lte/block3_hard_dec.bin | 1 + example/testvectors/lte/block3_hard_dec.dat | 35 + example/testvectors/lte/block3_llrs.bin | Bin 0 -> 3360 bytes example/testvectors/lte/block3_llrs.dat | 1120 +++ example/testvectors/lte/block3_soft_dec.bin | 1 + example/testvectors/lte/block3_soft_dec.dat | 1120 +++ example/testvectors/lte/block3_status.bin | Bin 0 -> 12 bytes example/testvectors/lte/block3_status.dat | 3 + example/testvectors/lte/block3_tail_llrs.dat | 6 + example/testvectors/lte/block4_cfgreg.dat | 35 + example/testvectors/lte/block4_hard_dec.bin | Bin 0 -> 8 bytes example/testvectors/lte/block4_hard_dec.dat | 2 + example/testvectors/lte/block4_llrs.bin | Bin 0 -> 120 bytes example/testvectors/lte/block4_llrs.dat | 40 + example/testvectors/lte/block4_tail_llrs.dat | 6 + example/testvectors/lte/block5_cfgreg.dat | 35 + example/testvectors/lte/block5_hard_dec.bin | Bin 0 -> 768 bytes example/testvectors/lte/block5_hard_dec.dat | 192 + example/testvectors/lte/block5_llrs.bin | Bin 0 -> 18432 bytes example/testvectors/lte/block5_llrs.dat | 6144 +++++++++++++++++ example/testvectors/lte/block5_tail_llrs.dat | 6 + example/testvectors/lte/number_of_blocks.dat | 1 + .../lte/reference/block0_coded_bits.dat | 99 + .../lte/reference/block0_info_bits.dat | 32 + .../lte/reference/block0_inp_cfg.dat | 15 + .../lte/reference/block1_coded_bits.dat | 102 + .../lte/reference/block1_info_bits.dat | 33 + .../lte/reference/block1_inp_cfg.dat | 15 + .../lte/reference/block2_coded_bits.dat | 105 + .../lte/reference/block2_info_bits.dat | 34 + .../lte/reference/block2_inp_cfg.dat | 15 + .../lte/reference/block3_coded_bits.dat | 108 + .../lte/reference/block3_info_bits.dat | 35 + .../lte/reference/block3_inp_cfg.dat | 15 + .../lte/reference/block4_coded_bits.dat | 6 + .../lte/reference/block4_info_bits.dat | 2 + .../lte/reference/block4_inp_cfg.dat | 15 + .../lte/reference/block5_coded_bits.dat | 579 ++ .../lte/reference/block5_info_bits.dat | 192 + .../lte/reference/block5_inp_cfg.dat | 15 + example/testvectors/wcdma/block0_cfgreg.dat | 35 + example/testvectors/wcdma/block0_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block0_hard_dec.dat | 4 + example/testvectors/wcdma/block0_llrs.bin | 1 + example/testvectors/wcdma/block0_llrs.dat | 100 + example/testvectors/wcdma/block0_soft_dec.bin | Bin 0 -> 300 bytes example/testvectors/wcdma/block0_soft_dec.dat | 100 + example/testvectors/wcdma/block0_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block0_status.dat | 3 + .../testvectors/wcdma/block0_tail_llrs.dat | 6 + example/testvectors/wcdma/block10_cfgreg.dat | 35 + .../testvectors/wcdma/block10_hard_dec.bin | Bin 0 -> 104 bytes .../testvectors/wcdma/block10_hard_dec.dat | 26 + example/testvectors/wcdma/block10_llrs.bin | Bin 0 -> 2442 bytes example/testvectors/wcdma/block10_llrs.dat | 814 +++ .../testvectors/wcdma/block10_soft_dec.bin | Bin 0 -> 2430 bytes .../testvectors/wcdma/block10_soft_dec.dat | 810 +++ example/testvectors/wcdma/block10_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block10_status.dat | 3 + .../testvectors/wcdma/block10_tail_llrs.dat | 6 + example/testvectors/wcdma/block11_cfgreg.dat | 35 + .../testvectors/wcdma/block11_hard_dec.bin | Bin 0 -> 104 bytes .../testvectors/wcdma/block11_hard_dec.dat | 26 + example/testvectors/wcdma/block11_llrs.bin | Bin 0 -> 2460 bytes example/testvectors/wcdma/block11_llrs.dat | 820 +++ .../testvectors/wcdma/block11_soft_dec.bin | Bin 0 -> 2460 bytes .../testvectors/wcdma/block11_soft_dec.dat | 820 +++ example/testvectors/wcdma/block11_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block11_status.dat | 3 + .../testvectors/wcdma/block11_tail_llrs.dat | 6 + example/testvectors/wcdma/block12_cfgreg.dat | 35 + .../testvectors/wcdma/block12_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block12_hard_dec.dat | 4 + example/testvectors/wcdma/block12_llrs.bin | Bin 0 -> 321 bytes example/testvectors/wcdma/block12_llrs.dat | 107 + .../testvectors/wcdma/block12_soft_dec.bin | Bin 0 -> 303 bytes .../testvectors/wcdma/block12_soft_dec.dat | 101 + example/testvectors/wcdma/block12_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block12_status.dat | 3 + .../testvectors/wcdma/block12_tail_llrs.dat | 6 + example/testvectors/wcdma/block13_cfgreg.dat | 35 + .../testvectors/wcdma/block13_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block13_hard_dec.dat | 4 + example/testvectors/wcdma/block13_llrs.bin | 1 + example/testvectors/wcdma/block13_llrs.dat | 100 + .../testvectors/wcdma/block13_soft_dec.bin | Bin 0 -> 300 bytes .../testvectors/wcdma/block13_soft_dec.dat | 100 + example/testvectors/wcdma/block13_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block13_status.dat | 3 + .../testvectors/wcdma/block13_tail_llrs.dat | 6 + example/testvectors/wcdma/block14_cfgreg.dat | 35 + .../testvectors/wcdma/block14_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block14_hard_dec.dat | 4 + example/testvectors/wcdma/block14_llrs.bin | Bin 0 -> 318 bytes example/testvectors/wcdma/block14_llrs.dat | 106 + .../testvectors/wcdma/block14_soft_dec.bin | Bin 0 -> 306 bytes .../testvectors/wcdma/block14_soft_dec.dat | 102 + example/testvectors/wcdma/block14_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block14_status.dat | 3 + .../testvectors/wcdma/block14_tail_llrs.dat | 6 + example/testvectors/wcdma/block15_cfgreg.dat | 35 + .../testvectors/wcdma/block15_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block15_hard_dec.dat | 4 + example/testvectors/wcdma/block15_llrs.bin | Bin 0 -> 315 bytes example/testvectors/wcdma/block15_llrs.dat | 105 + .../testvectors/wcdma/block15_soft_dec.bin | Bin 0 -> 309 bytes .../testvectors/wcdma/block15_soft_dec.dat | 103 + example/testvectors/wcdma/block15_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block15_status.dat | 3 + .../testvectors/wcdma/block15_tail_llrs.dat | 6 + example/testvectors/wcdma/block16_cfgreg.dat | 35 + .../testvectors/wcdma/block16_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block16_hard_dec.dat | 4 + example/testvectors/wcdma/block16_llrs.bin | Bin 0 -> 312 bytes example/testvectors/wcdma/block16_llrs.dat | 104 + .../testvectors/wcdma/block16_soft_dec.bin | Bin 0 -> 312 bytes .../testvectors/wcdma/block16_soft_dec.dat | 104 + example/testvectors/wcdma/block16_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block16_status.dat | 3 + .../testvectors/wcdma/block16_tail_llrs.dat | 6 + example/testvectors/wcdma/block17_cfgreg.dat | 35 + .../testvectors/wcdma/block17_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block17_hard_dec.dat | 4 + example/testvectors/wcdma/block17_llrs.bin | Bin 0 -> 333 bytes example/testvectors/wcdma/block17_llrs.dat | 111 + .../testvectors/wcdma/block17_soft_dec.bin | Bin 0 -> 315 bytes .../testvectors/wcdma/block17_soft_dec.dat | 105 + example/testvectors/wcdma/block17_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block17_status.dat | 3 + .../testvectors/wcdma/block17_tail_llrs.dat | 6 + example/testvectors/wcdma/block18_cfgreg.dat | 35 + .../testvectors/wcdma/block18_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block18_hard_dec.dat | 4 + example/testvectors/wcdma/block18_llrs.bin | Bin 0 -> 321 bytes example/testvectors/wcdma/block18_llrs.dat | 107 + .../testvectors/wcdma/block18_soft_dec.bin | Bin 0 -> 303 bytes .../testvectors/wcdma/block18_soft_dec.dat | 101 + example/testvectors/wcdma/block18_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block18_status.dat | 3 + .../testvectors/wcdma/block18_tail_llrs.dat | 6 + example/testvectors/wcdma/block19_cfgreg.dat | 35 + .../testvectors/wcdma/block19_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block19_hard_dec.dat | 4 + example/testvectors/wcdma/block19_llrs.bin | Bin 0 -> 330 bytes example/testvectors/wcdma/block19_llrs.dat | 110 + .../testvectors/wcdma/block19_soft_dec.bin | Bin 0 -> 318 bytes .../testvectors/wcdma/block19_soft_dec.dat | 106 + example/testvectors/wcdma/block19_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block19_status.dat | 3 + .../testvectors/wcdma/block19_tail_llrs.dat | 6 + example/testvectors/wcdma/block1_cfgreg.dat | 35 + example/testvectors/wcdma/block1_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block1_hard_dec.dat | 4 + example/testvectors/wcdma/block1_llrs.bin | Bin 0 -> 321 bytes example/testvectors/wcdma/block1_llrs.dat | 107 + example/testvectors/wcdma/block1_soft_dec.bin | Bin 0 -> 303 bytes example/testvectors/wcdma/block1_soft_dec.dat | 101 + example/testvectors/wcdma/block1_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block1_status.dat | 3 + .../testvectors/wcdma/block1_tail_llrs.dat | 6 + example/testvectors/wcdma/block20_cfgreg.dat | 35 + .../testvectors/wcdma/block20_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block20_hard_dec.dat | 4 + example/testvectors/wcdma/block20_llrs.bin | Bin 0 -> 327 bytes example/testvectors/wcdma/block20_llrs.dat | 109 + .../testvectors/wcdma/block20_soft_dec.bin | Bin 0 -> 321 bytes .../testvectors/wcdma/block20_soft_dec.dat | 107 + example/testvectors/wcdma/block20_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block20_status.dat | 3 + .../testvectors/wcdma/block20_tail_llrs.dat | 6 + example/testvectors/wcdma/block21_cfgreg.dat | 35 + .../testvectors/wcdma/block21_hard_dec.bin | Bin 0 -> 252 bytes .../testvectors/wcdma/block21_hard_dec.dat | 63 + example/testvectors/wcdma/block21_llrs.bin | Bin 0 -> 6000 bytes example/testvectors/wcdma/block21_llrs.dat | 2000 ++++++ .../testvectors/wcdma/block21_soft_dec.bin | Bin 0 -> 6000 bytes .../testvectors/wcdma/block21_soft_dec.dat | 2000 ++++++ example/testvectors/wcdma/block21_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block21_status.dat | 3 + .../testvectors/wcdma/block21_tail_llrs.dat | 6 + example/testvectors/wcdma/block22_cfgreg.dat | 35 + .../testvectors/wcdma/block22_hard_dec.bin | Bin 0 -> 100 bytes .../testvectors/wcdma/block22_hard_dec.dat | 25 + example/testvectors/wcdma/block22_llrs.bin | Bin 0 -> 2400 bytes example/testvectors/wcdma/block22_llrs.dat | 800 +++ .../testvectors/wcdma/block22_soft_dec.bin | Bin 0 -> 2400 bytes .../testvectors/wcdma/block22_soft_dec.dat | 800 +++ example/testvectors/wcdma/block22_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block22_status.dat | 3 + .../testvectors/wcdma/block22_tail_llrs.dat | 6 + example/testvectors/wcdma/block23_cfgreg.dat | 35 + .../testvectors/wcdma/block23_hard_dec.bin | Bin 0 -> 104 bytes .../testvectors/wcdma/block23_hard_dec.dat | 26 + example/testvectors/wcdma/block23_llrs.bin | Bin 0 -> 2442 bytes example/testvectors/wcdma/block23_llrs.dat | 814 +++ .../testvectors/wcdma/block23_soft_dec.bin | Bin 0 -> 2430 bytes .../testvectors/wcdma/block23_soft_dec.dat | 810 +++ example/testvectors/wcdma/block23_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block23_status.dat | 3 + .../testvectors/wcdma/block23_tail_llrs.dat | 6 + example/testvectors/wcdma/block24_cfgreg.dat | 35 + .../testvectors/wcdma/block24_hard_dec.bin | Bin 0 -> 104 bytes .../testvectors/wcdma/block24_hard_dec.dat | 26 + example/testvectors/wcdma/block24_llrs.bin | Bin 0 -> 2460 bytes example/testvectors/wcdma/block24_llrs.dat | 820 +++ .../testvectors/wcdma/block24_soft_dec.bin | Bin 0 -> 2460 bytes .../testvectors/wcdma/block24_soft_dec.dat | 820 +++ example/testvectors/wcdma/block24_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block24_status.dat | 3 + .../testvectors/wcdma/block24_tail_llrs.dat | 6 + example/testvectors/wcdma/block25_cfgreg.dat | 35 + .../testvectors/wcdma/block25_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block25_hard_dec.dat | 4 + example/testvectors/wcdma/block25_llrs.bin | Bin 0 -> 330 bytes example/testvectors/wcdma/block25_llrs.dat | 110 + .../testvectors/wcdma/block25_soft_dec.bin | Bin 0 -> 318 bytes .../testvectors/wcdma/block25_soft_dec.dat | 106 + example/testvectors/wcdma/block25_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block25_status.dat | 3 + .../testvectors/wcdma/block25_tail_llrs.dat | 6 + example/testvectors/wcdma/block26_cfgreg.dat | 35 + .../testvectors/wcdma/block26_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block26_hard_dec.dat | 4 + example/testvectors/wcdma/block26_llrs.bin | Bin 0 -> 327 bytes example/testvectors/wcdma/block26_llrs.dat | 109 + .../testvectors/wcdma/block26_soft_dec.bin | Bin 0 -> 321 bytes .../testvectors/wcdma/block26_soft_dec.dat | 107 + example/testvectors/wcdma/block26_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block26_status.dat | 3 + .../testvectors/wcdma/block26_tail_llrs.dat | 6 + example/testvectors/wcdma/block27_cfgreg.dat | 35 + .../testvectors/wcdma/block27_hard_dec.bin | Bin 0 -> 252 bytes .../testvectors/wcdma/block27_hard_dec.dat | 63 + example/testvectors/wcdma/block27_llrs.bin | Bin 0 -> 6000 bytes example/testvectors/wcdma/block27_llrs.dat | 2000 ++++++ .../testvectors/wcdma/block27_soft_dec.bin | Bin 0 -> 6000 bytes .../testvectors/wcdma/block27_soft_dec.dat | 2000 ++++++ example/testvectors/wcdma/block27_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block27_status.dat | 3 + .../testvectors/wcdma/block27_tail_llrs.dat | 6 + example/testvectors/wcdma/block28_cfgreg.dat | 35 + .../testvectors/wcdma/block28_hard_dec.bin | 2 + .../testvectors/wcdma/block28_hard_dec.dat | 25 + example/testvectors/wcdma/block28_llrs.bin | Bin 0 -> 2400 bytes example/testvectors/wcdma/block28_llrs.dat | 800 +++ .../testvectors/wcdma/block28_soft_dec.bin | Bin 0 -> 2400 bytes .../testvectors/wcdma/block28_soft_dec.dat | 800 +++ example/testvectors/wcdma/block28_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block28_status.dat | 3 + .../testvectors/wcdma/block28_tail_llrs.dat | 6 + example/testvectors/wcdma/block29_cfgreg.dat | 35 + .../testvectors/wcdma/block29_hard_dec.bin | Bin 0 -> 104 bytes .../testvectors/wcdma/block29_hard_dec.dat | 26 + example/testvectors/wcdma/block29_llrs.bin | Bin 0 -> 2442 bytes example/testvectors/wcdma/block29_llrs.dat | 814 +++ .../testvectors/wcdma/block29_soft_dec.bin | Bin 0 -> 2430 bytes .../testvectors/wcdma/block29_soft_dec.dat | 810 +++ example/testvectors/wcdma/block29_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block29_status.dat | 3 + .../testvectors/wcdma/block29_tail_llrs.dat | 6 + example/testvectors/wcdma/block2_cfgreg.dat | 35 + example/testvectors/wcdma/block2_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block2_hard_dec.dat | 4 + example/testvectors/wcdma/block2_llrs.bin | Bin 0 -> 318 bytes example/testvectors/wcdma/block2_llrs.dat | 106 + example/testvectors/wcdma/block2_soft_dec.bin | Bin 0 -> 306 bytes example/testvectors/wcdma/block2_soft_dec.dat | 102 + example/testvectors/wcdma/block2_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block2_status.dat | 3 + .../testvectors/wcdma/block2_tail_llrs.dat | 6 + example/testvectors/wcdma/block30_cfgreg.dat | 35 + .../testvectors/wcdma/block30_hard_dec.bin | Bin 0 -> 104 bytes .../testvectors/wcdma/block30_hard_dec.dat | 26 + example/testvectors/wcdma/block30_llrs.bin | Bin 0 -> 2460 bytes example/testvectors/wcdma/block30_llrs.dat | 820 +++ .../testvectors/wcdma/block30_soft_dec.bin | Bin 0 -> 2460 bytes .../testvectors/wcdma/block30_soft_dec.dat | 820 +++ example/testvectors/wcdma/block30_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block30_status.dat | 3 + .../testvectors/wcdma/block30_tail_llrs.dat | 6 + example/testvectors/wcdma/block31_cfgreg.dat | 35 + .../testvectors/wcdma/block31_hard_dec.bin | Bin 0 -> 16 bytes .../testvectors/wcdma/block31_hard_dec.dat | 4 + example/testvectors/wcdma/block31_llrs.bin | 1 + example/testvectors/wcdma/block31_llrs.dat | 100 + .../testvectors/wcdma/block31_soft_dec.bin | Bin 0 -> 300 bytes .../testvectors/wcdma/block31_soft_dec.dat | 100 + example/testvectors/wcdma/block31_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block31_status.dat | 3 + .../testvectors/wcdma/block31_tail_llrs.dat | 6 + example/testvectors/wcdma/block3_cfgreg.dat | 35 + example/testvectors/wcdma/block3_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block3_hard_dec.dat | 4 + example/testvectors/wcdma/block3_llrs.bin | Bin 0 -> 315 bytes example/testvectors/wcdma/block3_llrs.dat | 105 + example/testvectors/wcdma/block3_soft_dec.bin | Bin 0 -> 309 bytes example/testvectors/wcdma/block3_soft_dec.dat | 103 + example/testvectors/wcdma/block3_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block3_status.dat | 3 + .../testvectors/wcdma/block3_tail_llrs.dat | 6 + example/testvectors/wcdma/block4_cfgreg.dat | 35 + example/testvectors/wcdma/block4_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block4_hard_dec.dat | 4 + example/testvectors/wcdma/block4_llrs.bin | Bin 0 -> 312 bytes example/testvectors/wcdma/block4_llrs.dat | 104 + example/testvectors/wcdma/block4_soft_dec.bin | Bin 0 -> 312 bytes example/testvectors/wcdma/block4_soft_dec.dat | 104 + example/testvectors/wcdma/block4_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block4_status.dat | 3 + .../testvectors/wcdma/block4_tail_llrs.dat | 6 + example/testvectors/wcdma/block5_cfgreg.dat | 35 + example/testvectors/wcdma/block5_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block5_hard_dec.dat | 4 + example/testvectors/wcdma/block5_llrs.bin | Bin 0 -> 333 bytes example/testvectors/wcdma/block5_llrs.dat | 111 + example/testvectors/wcdma/block5_soft_dec.bin | Bin 0 -> 315 bytes example/testvectors/wcdma/block5_soft_dec.dat | 105 + example/testvectors/wcdma/block5_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block5_status.dat | 3 + .../testvectors/wcdma/block5_tail_llrs.dat | 6 + example/testvectors/wcdma/block6_cfgreg.dat | 35 + example/testvectors/wcdma/block6_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block6_hard_dec.dat | 4 + example/testvectors/wcdma/block6_llrs.bin | Bin 0 -> 330 bytes example/testvectors/wcdma/block6_llrs.dat | 110 + example/testvectors/wcdma/block6_soft_dec.bin | Bin 0 -> 318 bytes example/testvectors/wcdma/block6_soft_dec.dat | 106 + example/testvectors/wcdma/block6_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block6_status.dat | 3 + .../testvectors/wcdma/block6_tail_llrs.dat | 6 + example/testvectors/wcdma/block7_cfgreg.dat | 35 + example/testvectors/wcdma/block7_hard_dec.bin | Bin 0 -> 16 bytes example/testvectors/wcdma/block7_hard_dec.dat | 4 + example/testvectors/wcdma/block7_llrs.bin | Bin 0 -> 327 bytes example/testvectors/wcdma/block7_llrs.dat | 109 + example/testvectors/wcdma/block7_soft_dec.bin | Bin 0 -> 321 bytes example/testvectors/wcdma/block7_soft_dec.dat | 107 + example/testvectors/wcdma/block7_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block7_status.dat | 3 + .../testvectors/wcdma/block7_tail_llrs.dat | 6 + example/testvectors/wcdma/block8_cfgreg.dat | 35 + example/testvectors/wcdma/block8_hard_dec.bin | Bin 0 -> 252 bytes example/testvectors/wcdma/block8_hard_dec.dat | 63 + example/testvectors/wcdma/block8_llrs.bin | Bin 0 -> 6000 bytes example/testvectors/wcdma/block8_llrs.dat | 2000 ++++++ example/testvectors/wcdma/block8_soft_dec.bin | Bin 0 -> 6000 bytes example/testvectors/wcdma/block8_soft_dec.dat | 2000 ++++++ example/testvectors/wcdma/block8_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block8_status.dat | 3 + .../testvectors/wcdma/block8_tail_llrs.dat | 6 + example/testvectors/wcdma/block9_cfgreg.dat | 35 + example/testvectors/wcdma/block9_hard_dec.bin | 1 + example/testvectors/wcdma/block9_hard_dec.dat | 25 + example/testvectors/wcdma/block9_llrs.bin | Bin 0 -> 2400 bytes example/testvectors/wcdma/block9_llrs.dat | 800 +++ example/testvectors/wcdma/block9_soft_dec.bin | Bin 0 -> 2400 bytes example/testvectors/wcdma/block9_soft_dec.dat | 800 +++ example/testvectors/wcdma/block9_status.bin | Bin 0 -> 12 bytes example/testvectors/wcdma/block9_status.dat | 3 + .../testvectors/wcdma/block9_tail_llrs.dat | 6 + .../testvectors/wcdma/number_of_blocks.dat | 1 + example/testvectors/wimax/block0_cfgreg.dat | 35 + example/testvectors/wimax/block0_hard_dec.bin | Bin 0 -> 48 bytes example/testvectors/wimax/block0_hard_dec.dat | 12 + example/testvectors/wimax/block0_llrs.bin | Bin 0 -> 1152 bytes example/testvectors/wimax/block0_llrs.dat | 384 ++ example/testvectors/wimax/block0_soft_dec.bin | 1 + example/testvectors/wimax/block0_soft_dec.dat | 384 ++ example/testvectors/wimax/block0_status.bin | Bin 0 -> 12 bytes example/testvectors/wimax/block0_status.dat | 3 + .../testvectors/wimax/block0_tail_llrs.dat | 6 + example/testvectors/wimax/block1_cfgreg.dat | 35 + example/testvectors/wimax/block1_hard_dec.bin | Bin 0 -> 480 bytes example/testvectors/wimax/block1_hard_dec.dat | 120 + example/testvectors/wimax/block1_llrs.bin | Bin 0 -> 11520 bytes example/testvectors/wimax/block1_llrs.dat | 3840 +++++++++++ .../testvectors/wimax/block1_tail_llrs.dat | 6 + example/testvectors/wimax/block2_cfgreg.dat | 35 + example/testvectors/wimax/block2_hard_dec.bin | Bin 0 -> 8 bytes example/testvectors/wimax/block2_hard_dec.dat | 2 + example/testvectors/wimax/block2_llrs.bin | Bin 0 -> 144 bytes example/testvectors/wimax/block2_llrs.dat | 48 + example/testvectors/wimax/block2_soft_dec.bin | 1 + example/testvectors/wimax/block2_soft_dec.dat | 48 + example/testvectors/wimax/block2_status.bin | Bin 0 -> 12 bytes example/testvectors/wimax/block2_status.dat | 3 + .../testvectors/wimax/block2_tail_llrs.dat | 6 + example/testvectors/wimax/block3_cfgreg.dat | 35 + example/testvectors/wimax/block3_hard_dec.bin | Bin 0 -> 12 bytes example/testvectors/wimax/block3_hard_dec.dat | 3 + example/testvectors/wimax/block3_llrs.bin | Bin 0 -> 216 bytes example/testvectors/wimax/block3_llrs.dat | 72 + example/testvectors/wimax/block3_soft_dec.bin | 1 + example/testvectors/wimax/block3_soft_dec.dat | 72 + example/testvectors/wimax/block3_status.bin | Bin 0 -> 12 bytes example/testvectors/wimax/block3_status.dat | 3 + .../testvectors/wimax/block3_tail_llrs.dat | 6 + example/testvectors/wimax/block4_cfgreg.dat | 35 + example/testvectors/wimax/block4_hard_dec.bin | Bin 0 -> 28 bytes example/testvectors/wimax/block4_hard_dec.dat | 7 + example/testvectors/wimax/block4_llrs.bin | Bin 0 -> 648 bytes example/testvectors/wimax/block4_llrs.dat | 216 + example/testvectors/wimax/block4_soft_dec.bin | 1 + example/testvectors/wimax/block4_soft_dec.dat | 216 + example/testvectors/wimax/block4_status.bin | Bin 0 -> 12 bytes example/testvectors/wimax/block4_status.dat | 3 + .../testvectors/wimax/block4_tail_llrs.dat | 6 + .../testvectors/wimax/number_of_blocks.dat | 1 + .../wimax/reference/block0_coded_bits.dat | 36 + .../wimax/reference/block0_info_bits.dat | 12 + .../wimax/reference/block0_inp_cfg.dat | 15 + .../wimax/reference/block1_coded_bits.dat | 360 + .../wimax/reference/block1_info_bits.dat | 120 + .../wimax/reference/block1_inp_cfg.dat | 15 + .../wimax/reference/block2_coded_bits.dat | 6 + .../wimax/reference/block2_info_bits.dat | 2 + .../wimax/reference/block2_inp_cfg.dat | 15 + .../wimax/reference/block3_coded_bits.dat | 9 + .../wimax/reference/block3_info_bits.dat | 3 + .../wimax/reference/block3_inp_cfg.dat | 15 + .../wimax/reference/block4_coded_bits.dat | 21 + .../wimax/reference/block4_info_bits.dat | 7 + .../wimax/reference/block4_inp_cfg.dat | 15 + install/tcp3d.mpi | 1842 +++++ package.bld | 212 + package.xdc | 15 + package.xs | 53 + projectCreate.bat | 150 + setupenv.bat | 87 + src/Module.xs | 54 + src/tcp3d_betaState.c | 323 + src/tcp3d_drv.c | 2297 ++++++ src/tcp3d_drv_priv.h | 141 + src/tcp3d_isr.c | 127 + src/tcp3d_reg.c | 349 + src/tcp3d_utils.c | 105 + src/tcp3d_utils.h | 145 + tcp3d_drv.h | 1523 ++++ tcp3d_drv_types.h | 78 + tcp3d_osal.h | 106 + tcp3dver.h.xdt | 100 + test/Module.xs | 73 + test/gen_test_vectors/GenConfig_lte.m | 58 + test/gen_test_vectors/GenConfig_wcdma.m | 58 + test/gen_test_vectors/GenConfig_wimax.m | 58 + test/gen_test_vectors/LTE/config_1.cfg | 37 + test/gen_test_vectors/LTE/config_10.cfg | 37 + test/gen_test_vectors/LTE/config_100.cfg | 37 + test/gen_test_vectors/LTE/config_11.cfg | 37 + test/gen_test_vectors/LTE/config_12.cfg | 37 + test/gen_test_vectors/LTE/config_13.cfg | 37 + test/gen_test_vectors/LTE/config_14.cfg | 37 + test/gen_test_vectors/LTE/config_15.cfg | 37 + test/gen_test_vectors/LTE/config_16.cfg | 37 + test/gen_test_vectors/LTE/config_17.cfg | 37 + test/gen_test_vectors/LTE/config_18.cfg | 37 + test/gen_test_vectors/LTE/config_19.cfg | 37 + test/gen_test_vectors/LTE/config_2.cfg | 37 + test/gen_test_vectors/LTE/config_20.cfg | 37 + test/gen_test_vectors/LTE/config_21.cfg | 37 + test/gen_test_vectors/LTE/config_22.cfg | 37 + test/gen_test_vectors/LTE/config_23.cfg | 37 + test/gen_test_vectors/LTE/config_24.cfg | 37 + test/gen_test_vectors/LTE/config_25.cfg | 37 + test/gen_test_vectors/LTE/config_26.cfg | 37 + test/gen_test_vectors/LTE/config_27.cfg | 37 + test/gen_test_vectors/LTE/config_28.cfg | 37 + test/gen_test_vectors/LTE/config_29.cfg | 37 + test/gen_test_vectors/LTE/config_3.cfg | 37 + test/gen_test_vectors/LTE/config_30.cfg | 37 + test/gen_test_vectors/LTE/config_31.cfg | 37 + test/gen_test_vectors/LTE/config_32.cfg | 37 + test/gen_test_vectors/LTE/config_33.cfg | 37 + test/gen_test_vectors/LTE/config_34.cfg | 37 + test/gen_test_vectors/LTE/config_35.cfg | 37 + test/gen_test_vectors/LTE/config_36.cfg | 37 + test/gen_test_vectors/LTE/config_37.cfg | 37 + test/gen_test_vectors/LTE/config_38.cfg | 37 + test/gen_test_vectors/LTE/config_39.cfg | 37 + test/gen_test_vectors/LTE/config_4.cfg | 37 + test/gen_test_vectors/LTE/config_40.cfg | 37 + test/gen_test_vectors/LTE/config_41.cfg | 37 + test/gen_test_vectors/LTE/config_42.cfg | 37 + test/gen_test_vectors/LTE/config_43.cfg | 37 + test/gen_test_vectors/LTE/config_44.cfg | 37 + test/gen_test_vectors/LTE/config_45.cfg | 37 + test/gen_test_vectors/LTE/config_46.cfg | 37 + test/gen_test_vectors/LTE/config_47.cfg | 37 + test/gen_test_vectors/LTE/config_48.cfg | 37 + test/gen_test_vectors/LTE/config_49.cfg | 37 + test/gen_test_vectors/LTE/config_5.cfg | 37 + test/gen_test_vectors/LTE/config_50.cfg | 37 + test/gen_test_vectors/LTE/config_51.cfg | 37 + test/gen_test_vectors/LTE/config_52.cfg | 37 + test/gen_test_vectors/LTE/config_53.cfg | 37 + test/gen_test_vectors/LTE/config_54.cfg | 37 + test/gen_test_vectors/LTE/config_55.cfg | 37 + test/gen_test_vectors/LTE/config_56.cfg | 37 + test/gen_test_vectors/LTE/config_57.cfg | 37 + test/gen_test_vectors/LTE/config_58.cfg | 37 + test/gen_test_vectors/LTE/config_59.cfg | 37 + test/gen_test_vectors/LTE/config_6.cfg | 37 + test/gen_test_vectors/LTE/config_60.cfg | 37 + test/gen_test_vectors/LTE/config_61.cfg | 37 + test/gen_test_vectors/LTE/config_62.cfg | 37 + test/gen_test_vectors/LTE/config_63.cfg | 37 + test/gen_test_vectors/LTE/config_64.cfg | 37 + test/gen_test_vectors/LTE/config_65.cfg | 37 + test/gen_test_vectors/LTE/config_66.cfg | 37 + test/gen_test_vectors/LTE/config_67.cfg | 37 + test/gen_test_vectors/LTE/config_68.cfg | 37 + test/gen_test_vectors/LTE/config_69.cfg | 37 + test/gen_test_vectors/LTE/config_7.cfg | 37 + test/gen_test_vectors/LTE/config_70.cfg | 37 + test/gen_test_vectors/LTE/config_71.cfg | 37 + test/gen_test_vectors/LTE/config_72.cfg | 37 + test/gen_test_vectors/LTE/config_73.cfg | 37 + test/gen_test_vectors/LTE/config_74.cfg | 37 + test/gen_test_vectors/LTE/config_75.cfg | 37 + test/gen_test_vectors/LTE/config_76.cfg | 37 + test/gen_test_vectors/LTE/config_77.cfg | 37 + test/gen_test_vectors/LTE/config_78.cfg | 37 + test/gen_test_vectors/LTE/config_79.cfg | 37 + test/gen_test_vectors/LTE/config_8.cfg | 37 + test/gen_test_vectors/LTE/config_80.cfg | 37 + test/gen_test_vectors/LTE/config_81.cfg | 37 + test/gen_test_vectors/LTE/config_82.cfg | 37 + test/gen_test_vectors/LTE/config_83.cfg | 37 + test/gen_test_vectors/LTE/config_84.cfg | 37 + test/gen_test_vectors/LTE/config_85.cfg | 37 + test/gen_test_vectors/LTE/config_86.cfg | 37 + test/gen_test_vectors/LTE/config_87.cfg | 37 + test/gen_test_vectors/LTE/config_88.cfg | 37 + test/gen_test_vectors/LTE/config_89.cfg | 37 + test/gen_test_vectors/LTE/config_9.cfg | 37 + test/gen_test_vectors/LTE/config_90.cfg | 37 + test/gen_test_vectors/LTE/config_91.cfg | 37 + test/gen_test_vectors/LTE/config_92.cfg | 37 + test/gen_test_vectors/LTE/config_93.cfg | 37 + test/gen_test_vectors/LTE/config_94.cfg | 37 + test/gen_test_vectors/LTE/config_95.cfg | 37 + test/gen_test_vectors/LTE/config_96.cfg | 37 + test/gen_test_vectors/LTE/config_97.cfg | 37 + test/gen_test_vectors/LTE/config_98.cfg | 37 + test/gen_test_vectors/LTE/config_99.cfg | 37 + test/gen_test_vectors/LTE/config_list.cfg | 80 + test/gen_test_vectors/LTE_200/GenConfig_lte.m | 58 + test/gen_test_vectors/WCDMA/config_1.cfg | 37 + test/gen_test_vectors/WCDMA/config_10.cfg | 37 + test/gen_test_vectors/WCDMA/config_100.cfg | 37 + test/gen_test_vectors/WCDMA/config_11.cfg | 37 + test/gen_test_vectors/WCDMA/config_12.cfg | 37 + test/gen_test_vectors/WCDMA/config_13.cfg | 37 + test/gen_test_vectors/WCDMA/config_14.cfg | 37 + test/gen_test_vectors/WCDMA/config_15.cfg | 37 + test/gen_test_vectors/WCDMA/config_16.cfg | 37 + test/gen_test_vectors/WCDMA/config_17.cfg | 37 + test/gen_test_vectors/WCDMA/config_18.cfg | 37 + test/gen_test_vectors/WCDMA/config_19.cfg | 37 + test/gen_test_vectors/WCDMA/config_2.cfg | 37 + test/gen_test_vectors/WCDMA/config_20.cfg | 37 + test/gen_test_vectors/WCDMA/config_21.cfg | 37 + test/gen_test_vectors/WCDMA/config_22.cfg | 37 + test/gen_test_vectors/WCDMA/config_23.cfg | 37 + test/gen_test_vectors/WCDMA/config_24.cfg | 37 + test/gen_test_vectors/WCDMA/config_25.cfg | 37 + test/gen_test_vectors/WCDMA/config_26.cfg | 37 + test/gen_test_vectors/WCDMA/config_27.cfg | 37 + test/gen_test_vectors/WCDMA/config_28.cfg | 37 + test/gen_test_vectors/WCDMA/config_29.cfg | 37 + test/gen_test_vectors/WCDMA/config_3.cfg | 37 + test/gen_test_vectors/WCDMA/config_30.cfg | 37 + test/gen_test_vectors/WCDMA/config_31.cfg | 37 + test/gen_test_vectors/WCDMA/config_32.cfg | 37 + test/gen_test_vectors/WCDMA/config_33.cfg | 37 + test/gen_test_vectors/WCDMA/config_34.cfg | 37 + test/gen_test_vectors/WCDMA/config_35.cfg | 37 + test/gen_test_vectors/WCDMA/config_36.cfg | 37 + test/gen_test_vectors/WCDMA/config_37.cfg | 37 + test/gen_test_vectors/WCDMA/config_38.cfg | 37 + test/gen_test_vectors/WCDMA/config_39.cfg | 37 + test/gen_test_vectors/WCDMA/config_4.cfg | 37 + test/gen_test_vectors/WCDMA/config_40.cfg | 37 + test/gen_test_vectors/WCDMA/config_41.cfg | 37 + test/gen_test_vectors/WCDMA/config_42.cfg | 37 + test/gen_test_vectors/WCDMA/config_43.cfg | 37 + test/gen_test_vectors/WCDMA/config_44.cfg | 37 + test/gen_test_vectors/WCDMA/config_45.cfg | 37 + test/gen_test_vectors/WCDMA/config_46.cfg | 37 + test/gen_test_vectors/WCDMA/config_47.cfg | 37 + test/gen_test_vectors/WCDMA/config_48.cfg | 37 + test/gen_test_vectors/WCDMA/config_49.cfg | 37 + test/gen_test_vectors/WCDMA/config_5.cfg | 37 + test/gen_test_vectors/WCDMA/config_50.cfg | 37 + test/gen_test_vectors/WCDMA/config_51.cfg | 37 + test/gen_test_vectors/WCDMA/config_52.cfg | 37 + test/gen_test_vectors/WCDMA/config_53.cfg | 37 + test/gen_test_vectors/WCDMA/config_54.cfg | 37 + test/gen_test_vectors/WCDMA/config_55.cfg | 37 + test/gen_test_vectors/WCDMA/config_56.cfg | 37 + test/gen_test_vectors/WCDMA/config_57.cfg | 37 + test/gen_test_vectors/WCDMA/config_58.cfg | 37 + test/gen_test_vectors/WCDMA/config_59.cfg | 37 + test/gen_test_vectors/WCDMA/config_6.cfg | 37 + test/gen_test_vectors/WCDMA/config_60.cfg | 37 + test/gen_test_vectors/WCDMA/config_61.cfg | 37 + test/gen_test_vectors/WCDMA/config_62.cfg | 37 + test/gen_test_vectors/WCDMA/config_63.cfg | 37 + test/gen_test_vectors/WCDMA/config_64.cfg | 37 + test/gen_test_vectors/WCDMA/config_65.cfg | 37 + test/gen_test_vectors/WCDMA/config_66.cfg | 37 + test/gen_test_vectors/WCDMA/config_67.cfg | 37 + test/gen_test_vectors/WCDMA/config_68.cfg | 37 + test/gen_test_vectors/WCDMA/config_69.cfg | 37 + test/gen_test_vectors/WCDMA/config_7.cfg | 37 + test/gen_test_vectors/WCDMA/config_70.cfg | 37 + test/gen_test_vectors/WCDMA/config_71.cfg | 37 + test/gen_test_vectors/WCDMA/config_72.cfg | 37 + test/gen_test_vectors/WCDMA/config_73.cfg | 37 + test/gen_test_vectors/WCDMA/config_74.cfg | 37 + test/gen_test_vectors/WCDMA/config_75.cfg | 37 + test/gen_test_vectors/WCDMA/config_76.cfg | 37 + test/gen_test_vectors/WCDMA/config_77.cfg | 37 + test/gen_test_vectors/WCDMA/config_78.cfg | 37 + test/gen_test_vectors/WCDMA/config_79.cfg | 37 + test/gen_test_vectors/WCDMA/config_8.cfg | 37 + test/gen_test_vectors/WCDMA/config_80.cfg | 37 + test/gen_test_vectors/WCDMA/config_81.cfg | 37 + test/gen_test_vectors/WCDMA/config_82.cfg | 37 + test/gen_test_vectors/WCDMA/config_83.cfg | 37 + test/gen_test_vectors/WCDMA/config_84.cfg | 37 + test/gen_test_vectors/WCDMA/config_85.cfg | 37 + test/gen_test_vectors/WCDMA/config_86.cfg | 37 + test/gen_test_vectors/WCDMA/config_87.cfg | 37 + test/gen_test_vectors/WCDMA/config_88.cfg | 37 + test/gen_test_vectors/WCDMA/config_89.cfg | 37 + test/gen_test_vectors/WCDMA/config_9.cfg | 37 + test/gen_test_vectors/WCDMA/config_90.cfg | 37 + test/gen_test_vectors/WCDMA/config_91.cfg | 37 + test/gen_test_vectors/WCDMA/config_92.cfg | 37 + test/gen_test_vectors/WCDMA/config_93.cfg | 37 + test/gen_test_vectors/WCDMA/config_94.cfg | 37 + test/gen_test_vectors/WCDMA/config_95.cfg | 37 + test/gen_test_vectors/WCDMA/config_96.cfg | 37 + test/gen_test_vectors/WCDMA/config_97.cfg | 37 + test/gen_test_vectors/WCDMA/config_98.cfg | 37 + test/gen_test_vectors/WCDMA/config_99.cfg | 37 + test/gen_test_vectors/WCDMA/config_list.cfg | 80 + .../WCDMA_200/GenConfig_wcdma.m | 58 + test/gen_test_vectors/WIMAX/config_1.cfg | 37 + test/gen_test_vectors/WIMAX/config_10.cfg | 37 + test/gen_test_vectors/WIMAX/config_100.cfg | 37 + test/gen_test_vectors/WIMAX/config_11.cfg | 37 + test/gen_test_vectors/WIMAX/config_12.cfg | 37 + test/gen_test_vectors/WIMAX/config_13.cfg | 37 + test/gen_test_vectors/WIMAX/config_14.cfg | 37 + test/gen_test_vectors/WIMAX/config_15.cfg | 37 + test/gen_test_vectors/WIMAX/config_16.cfg | 37 + test/gen_test_vectors/WIMAX/config_17.cfg | 37 + test/gen_test_vectors/WIMAX/config_18.cfg | 37 + test/gen_test_vectors/WIMAX/config_19.cfg | 37 + test/gen_test_vectors/WIMAX/config_2.cfg | 37 + test/gen_test_vectors/WIMAX/config_20.cfg | 37 + test/gen_test_vectors/WIMAX/config_21.cfg | 37 + test/gen_test_vectors/WIMAX/config_22.cfg | 37 + test/gen_test_vectors/WIMAX/config_23.cfg | 37 + test/gen_test_vectors/WIMAX/config_24.cfg | 37 + test/gen_test_vectors/WIMAX/config_25.cfg | 37 + test/gen_test_vectors/WIMAX/config_26.cfg | 37 + test/gen_test_vectors/WIMAX/config_27.cfg | 37 + test/gen_test_vectors/WIMAX/config_28.cfg | 37 + test/gen_test_vectors/WIMAX/config_29.cfg | 37 + test/gen_test_vectors/WIMAX/config_3.cfg | 37 + test/gen_test_vectors/WIMAX/config_30.cfg | 37 + test/gen_test_vectors/WIMAX/config_31.cfg | 37 + test/gen_test_vectors/WIMAX/config_32.cfg | 37 + test/gen_test_vectors/WIMAX/config_33.cfg | 37 + test/gen_test_vectors/WIMAX/config_34.cfg | 37 + test/gen_test_vectors/WIMAX/config_35.cfg | 37 + test/gen_test_vectors/WIMAX/config_36.cfg | 37 + test/gen_test_vectors/WIMAX/config_37.cfg | 37 + test/gen_test_vectors/WIMAX/config_38.cfg | 37 + test/gen_test_vectors/WIMAX/config_39.cfg | 37 + test/gen_test_vectors/WIMAX/config_4.cfg | 37 + test/gen_test_vectors/WIMAX/config_40.cfg | 37 + test/gen_test_vectors/WIMAX/config_41.cfg | 37 + test/gen_test_vectors/WIMAX/config_42.cfg | 37 + test/gen_test_vectors/WIMAX/config_43.cfg | 37 + test/gen_test_vectors/WIMAX/config_44.cfg | 37 + test/gen_test_vectors/WIMAX/config_45.cfg | 37 + test/gen_test_vectors/WIMAX/config_46.cfg | 37 + test/gen_test_vectors/WIMAX/config_47.cfg | 37 + test/gen_test_vectors/WIMAX/config_48.cfg | 37 + test/gen_test_vectors/WIMAX/config_49.cfg | 37 + test/gen_test_vectors/WIMAX/config_5.cfg | 37 + test/gen_test_vectors/WIMAX/config_50.cfg | 37 + test/gen_test_vectors/WIMAX/config_51.cfg | 37 + test/gen_test_vectors/WIMAX/config_52.cfg | 37 + test/gen_test_vectors/WIMAX/config_53.cfg | 37 + test/gen_test_vectors/WIMAX/config_54.cfg | 37 + test/gen_test_vectors/WIMAX/config_55.cfg | 37 + test/gen_test_vectors/WIMAX/config_56.cfg | 37 + test/gen_test_vectors/WIMAX/config_57.cfg | 37 + test/gen_test_vectors/WIMAX/config_58.cfg | 37 + test/gen_test_vectors/WIMAX/config_59.cfg | 37 + test/gen_test_vectors/WIMAX/config_6.cfg | 37 + test/gen_test_vectors/WIMAX/config_60.cfg | 37 + test/gen_test_vectors/WIMAX/config_61.cfg | 37 + test/gen_test_vectors/WIMAX/config_62.cfg | 37 + test/gen_test_vectors/WIMAX/config_63.cfg | 37 + test/gen_test_vectors/WIMAX/config_64.cfg | 37 + test/gen_test_vectors/WIMAX/config_65.cfg | 37 + test/gen_test_vectors/WIMAX/config_66.cfg | 37 + test/gen_test_vectors/WIMAX/config_67.cfg | 37 + test/gen_test_vectors/WIMAX/config_68.cfg | 37 + test/gen_test_vectors/WIMAX/config_69.cfg | 37 + test/gen_test_vectors/WIMAX/config_7.cfg | 37 + test/gen_test_vectors/WIMAX/config_70.cfg | 37 + test/gen_test_vectors/WIMAX/config_71.cfg | 37 + test/gen_test_vectors/WIMAX/config_72.cfg | 37 + test/gen_test_vectors/WIMAX/config_73.cfg | 37 + test/gen_test_vectors/WIMAX/config_74.cfg | 37 + test/gen_test_vectors/WIMAX/config_75.cfg | 37 + test/gen_test_vectors/WIMAX/config_76.cfg | 37 + test/gen_test_vectors/WIMAX/config_77.cfg | 37 + test/gen_test_vectors/WIMAX/config_78.cfg | 37 + test/gen_test_vectors/WIMAX/config_79.cfg | 37 + test/gen_test_vectors/WIMAX/config_8.cfg | 37 + test/gen_test_vectors/WIMAX/config_80.cfg | 37 + test/gen_test_vectors/WIMAX/config_81.cfg | 37 + test/gen_test_vectors/WIMAX/config_82.cfg | 37 + test/gen_test_vectors/WIMAX/config_83.cfg | 37 + test/gen_test_vectors/WIMAX/config_84.cfg | 37 + test/gen_test_vectors/WIMAX/config_85.cfg | 37 + test/gen_test_vectors/WIMAX/config_86.cfg | 37 + test/gen_test_vectors/WIMAX/config_87.cfg | 37 + test/gen_test_vectors/WIMAX/config_88.cfg | 37 + test/gen_test_vectors/WIMAX/config_89.cfg | 37 + test/gen_test_vectors/WIMAX/config_9.cfg | 37 + test/gen_test_vectors/WIMAX/config_90.cfg | 37 + test/gen_test_vectors/WIMAX/config_91.cfg | 37 + test/gen_test_vectors/WIMAX/config_92.cfg | 37 + test/gen_test_vectors/WIMAX/config_93.cfg | 37 + test/gen_test_vectors/WIMAX/config_94.cfg | 37 + test/gen_test_vectors/WIMAX/config_95.cfg | 37 + test/gen_test_vectors/WIMAX/config_96.cfg | 37 + test/gen_test_vectors/WIMAX/config_97.cfg | 37 + test/gen_test_vectors/WIMAX/config_98.cfg | 37 + test/gen_test_vectors/WIMAX/config_99.cfg | 37 + test/gen_test_vectors/WIMAX/config_list.cfg | 100 + .../WIMAX_200/GenConfig_wimax.m | 58 + test/gen_test_vectors/cleanTestVect.bat | 4 + test/gen_test_vectors/genTestVect.bat | 60 + test/gen_test_vectors/genTestVect_200.bat | 32 + test/gen_test_vectors/include/cfg_param.h | 94 + test/gen_test_vectors/include/sim_param.h | 272 + test/gen_test_vectors/include/typedefs.h | 81 + .../msvc/Debug/GenTestVectors.exe | Bin 0 -> 245870 bytes test/gen_test_vectors/msvc/GenTestVectors.dsp | 112 + .../sim_config/LTE/lte_list.cfg | 20 + .../sim_config/LTE/test10_config1.cfg | 36 + .../sim_config/LTE/test10_config2.cfg | 36 + .../sim_config/LTE/test10_config3.cfg | 36 + .../sim_config/LTE/test10_config4.cfg | 36 + .../sim_config/LTE/test10_config5.cfg | 36 + .../sim_config/LTE/test10_config6.cfg | 36 + .../sim_config/LTE/test10_list.cfg | 6 + .../sim_config/LTE/test1_config1.cfg | 38 + .../sim_config/LTE/test1_config2.cfg | 38 + .../sim_config/LTE/test1_config3.cfg | 38 + .../sim_config/LTE/test1_config4.cfg | 38 + .../sim_config/LTE/test1_config5.cfg | 36 + .../sim_config/LTE/test1_config6.cfg | 36 + .../sim_config/LTE/test1_list.cfg | 6 + .../sim_config/LTE/test4_config1.cfg | 37 + .../sim_config/LTE/test4_config2.cfg | 37 + .../sim_config/LTE/test4_config3.cfg | 37 + .../sim_config/LTE/test4_config4.cfg | 37 + .../sim_config/LTE/test4_list.cfg | 4 + .../sim_config/LTE/test7_config1.cfg | 37 + .../sim_config/LTE/test7_config2.cfg | 37 + .../sim_config/LTE/test7_config3.cfg | 37 + .../sim_config/LTE/test7_config4.cfg | 37 + .../sim_config/LTE/test7_list.cfg | 4 + .../sim_config/WCDMA/test11_config1.cfg | 36 + .../sim_config/WCDMA/test11_config10.cfg | 36 + .../sim_config/WCDMA/test11_config11.cfg | 36 + .../sim_config/WCDMA/test11_config12.cfg | 36 + .../sim_config/WCDMA/test11_config2.cfg | 36 + .../sim_config/WCDMA/test11_config3.cfg | 36 + .../sim_config/WCDMA/test11_config4.cfg | 36 + .../sim_config/WCDMA/test11_config5.cfg | 36 + .../sim_config/WCDMA/test11_config6.cfg | 36 + .../sim_config/WCDMA/test11_config7.cfg | 36 + .../sim_config/WCDMA/test11_config8.cfg | 36 + .../sim_config/WCDMA/test11_config9.cfg | 36 + .../sim_config/WCDMA/test11_list.cfg | 12 + .../sim_config/WCDMA/test3_config1.cfg | 40 + .../sim_config/WCDMA/test3_config10.cfg | 36 + .../sim_config/WCDMA/test3_config11.cfg | 36 + .../sim_config/WCDMA/test3_config12.cfg | 36 + .../sim_config/WCDMA/test3_config2.cfg | 40 + .../sim_config/WCDMA/test3_config3.cfg | 42 + .../sim_config/WCDMA/test3_config4.cfg | 42 + .../sim_config/WCDMA/test3_config5.cfg | 40 + .../sim_config/WCDMA/test3_config6.cfg | 41 + .../sim_config/WCDMA/test3_config7.cfg | 36 + .../sim_config/WCDMA/test3_config8.cfg | 36 + .../sim_config/WCDMA/test3_config9.cfg | 36 + .../sim_config/WCDMA/test3_list.cfg | 12 + .../sim_config/WCDMA/test6_config1.cfg | 37 + .../sim_config/WCDMA/test6_config2.cfg | 37 + .../sim_config/WCDMA/test6_list.cfg | 2 + .../sim_config/WCDMA/test9_config1.cfg | 37 + .../sim_config/WCDMA/test9_config2.cfg | 37 + .../sim_config/WCDMA/test9_list.cfg | 2 + .../sim_config/WCDMA/wcdma_list.cfg | 28 + .../sim_config/WIMAX/test2_config1.cfg | 38 + .../sim_config/WIMAX/test2_config2.cfg | 38 + .../sim_config/WIMAX/test2_config3.cfg | 38 + .../sim_config/WIMAX/test2_config4.cfg | 38 + .../sim_config/WIMAX/test2_config5.cfg | 38 + .../sim_config/WIMAX/test2_list.cfg | 5 + .../sim_config/WIMAX/test5_config1.cfg | 37 + .../sim_config/WIMAX/test5_config2.cfg | 37 + .../sim_config/WIMAX/test5_config3.cfg | 37 + .../sim_config/WIMAX/test5_config4.cfg | 37 + .../sim_config/WIMAX/test5_list.cfg | 4 + .../sim_config/WIMAX/test8_config1.cfg | 37 + .../sim_config/WIMAX/test8_config2.cfg | 37 + .../sim_config/WIMAX/test8_config3.cfg | 37 + .../sim_config/WIMAX/test8_config4.cfg | 37 + .../sim_config/WIMAX/test8_list.cfg | 4 + .../sim_config/WIMAX/wimax_list.cfg | 13 + .../sim_config/test12_config1.cfg | 38 + .../sim_config/test12_config10.cfg | 36 + .../sim_config/test12_config11.cfg | 36 + .../sim_config/test12_config12.cfg | 36 + .../sim_config/test12_config2.cfg | 36 + .../sim_config/test12_config3.cfg | 36 + .../sim_config/test12_config4.cfg | 36 + .../sim_config/test12_config5.cfg | 36 + .../sim_config/test12_config6.cfg | 36 + .../sim_config/test12_config7.cfg | 36 + .../sim_config/test12_config8.cfg | 36 + .../sim_config/test12_config9.cfg | 36 + .../sim_config/test12_list.cfg | 12 + .../sim_config/test13_config1.cfg | 38 + .../sim_config/test13_config2.cfg | 36 + .../sim_config/test13_config3.cfg | 36 + .../sim_config/test13_config4.cfg | 36 + .../sim_config/test13_list.cfg | 5 + .../simulator/config_list.cfg | 1 + .../simulator/debug/Test_c_model.exe | Bin 0 -> 258167 bytes .../gen_test_vectors/src/GenTestVectorsMain.c | 427 ++ test/gen_test_vectors/src/conv2bin.c | 124 + test/gen_test_vectors/src/initial_beta_calc.c | 266 + test/gen_test_vectors/src/load_config.c | 531 ++ test/gen_test_vectors/src/set_reg.c | 653 ++ .../test0_lte/block0_cfgreg.dat | 35 + test/gen_test_vectors/test0_lte/config_1.cfg | 37 + .../test0_lte/config_list.cfg | 1 + .../test0_lte/number_of_blocks.dat | 1 + .../gen_test_vectors/test0_wcdma/config_1.cfg | 37 + .../test0_wcdma/config_list.cfg | 1 + .../gen_test_vectors/test0_wimax/config_1.cfg | 37 + .../test0_wimax/config_list.cfg | 1 + .../test1_lte/block0_cfgreg.dat | 35 + .../test1_lte/block1_cfgreg.dat | 35 + .../test1_lte/block2_cfgreg.dat | 35 + .../test1_lte/block3_cfgreg.dat | 35 + .../test1_lte/block4_cfgreg.dat | 35 + .../test1_lte/block5_cfgreg.dat | 35 + .../test1_lte/test1_config1.cfg | 38 + .../test1_lte/test1_config2.cfg | 38 + .../test1_lte/test1_config3.cfg | 38 + .../test1_lte/test1_config4.cfg | 38 + .../test1_lte/test1_config5.cfg | 36 + .../test1_lte/test1_config6.cfg | 36 + .../gen_test_vectors/test1_lte/test1_list.cfg | 6 + .../test1_wcdma/test1_config1.cfg | 39 + .../test1_wcdma/test1_config10.cfg | 40 + .../test1_wcdma/test1_config11.cfg | 40 + .../test1_wcdma/test1_config12.cfg | 40 + .../test1_wcdma/test1_config2.cfg | 39 + .../test1_wcdma/test1_config3.cfg | 41 + .../test1_wcdma/test1_config4.cfg | 41 + .../test1_wcdma/test1_config5.cfg | 39 + .../test1_wcdma/test1_config6.cfg | 39 + .../test1_wcdma/test1_config7.cfg | 40 + .../test1_wcdma/test1_config8.cfg | 40 + .../test1_wcdma/test1_config9.cfg | 40 + .../test1_wcdma/test1_list.cfg | 32 + .../test1_wimax/test1_config1.cfg | 38 + .../test1_wimax/test1_config2.cfg | 38 + .../test1_wimax/test1_config3.cfg | 38 + .../test1_wimax/test1_config4.cfg | 38 + .../test1_wimax/test1_config5.cfg | 38 + .../test1_wimax/test1_list.cfg | 5 + .../test2_lte/test2_config1.cfg | 37 + .../test2_lte/test2_config2.cfg | 37 + .../test2_lte/test2_config3.cfg | 37 + .../test2_lte/test2_config4.cfg | 37 + .../gen_test_vectors/test2_lte/test2_list.cfg | 4 + .../test2_wcdma/test2_config1.cfg | 36 + .../test2_wcdma/test2_config2.cfg | 36 + .../test2_wcdma/test2_config3.cfg | 36 + .../test2_wcdma/test2_config4.cfg | 36 + .../test2_wcdma/test2_config5.cfg | 36 + .../test2_wcdma/test2_config6.cfg | 37 + .../test2_wcdma/test2_list.cfg | 6 + .../test2_wimax/test2_config1.cfg | 37 + .../test2_wimax/test2_config2.cfg | 37 + .../test2_wimax/test2_config3.cfg | 37 + .../test2_wimax/test2_config4.cfg | 37 + .../test2_wimax/test2_list.cfg | 4 + .../test3_lte/test3_config1.cfg | 38 + .../test3_lte/test3_config2.cfg | 38 + .../test3_lte/test3_config3.cfg | 38 + .../test3_lte/test3_config4.cfg | 38 + .../test3_lte/test3_config5.cfg | 36 + .../test3_lte/test3_config6.cfg | 36 + .../gen_test_vectors/test3_lte/test3_list.cfg | 6 + .../test3_wcdma/test3_config1.cfg | 36 + .../test3_wcdma/test3_config2.cfg | 36 + .../test3_wcdma/test3_config3.cfg | 36 + .../test3_wcdma/test3_config4.cfg | 37 + .../test3_wcdma/test3_config5.cfg | 36 + .../test3_wcdma/test3_config6.cfg | 36 + .../test3_wcdma/test3_config7.cfg | 36 + .../test3_wcdma/test3_config8.cfg | 37 + .../test3_wcdma/test3_config9.cfg | 36 + .../test3_wcdma/test3_list.cfg | 9 + .../test3_wimax/test3_config1.cfg | 38 + .../test3_wimax/test3_config2.cfg | 38 + .../test3_wimax/test3_config3.cfg | 38 + .../test3_wimax/test3_config4.cfg | 38 + .../test3_wimax/test3_config5.cfg | 38 + .../test3_wimax/test3_list.cfg | 5 + .../test4_lte/test4_config1.cfg | 38 + .../test4_lte/test4_config2.cfg | 38 + .../test4_lte/test4_config3.cfg | 38 + .../test4_lte/test4_config4.cfg | 38 + .../test4_lte/test4_config5.cfg | 36 + .../test4_lte/test4_config6.cfg | 36 + .../gen_test_vectors/test4_lte/test4_list.cfg | 6 + test/macros.ini | 1 + test/simtci6634/c66/bios/link_test.cmd | 7 + .../tcp3dSimtci6634C66BiosTestProject.txt | 18 + test/simtci6634/c66/bios/tcp3d_drv_test.cfg | 125 + test/simtci6634/c66/bios/tcp3d_osal.h | 56 + test/src/CpIntc_local.c | 144 + test/src/sample.h | 215 + test/src/sample_cfg.c | 1771 +++++ test/src/sample_cs.c | 503 ++ test/src/sample_init.c | 217 + test/src/sample_int_reg.c | 482 ++ test/src/tcp3d_codeBlkSeg.c | 208 + test/src/tcp3d_codeBlkSeg.h | 81 + test/src/tcp3d_drv_sample.h | 155 + test/src/tcp3d_drv_sample_init.c | 448 ++ test/src/tcp3d_drv_types.h | 78 + test/src/tcp3d_inputConfigPrep.c | 314 + test/src/tcp3d_itg.c | 366 + test/src/tcp3d_main.c | 1429 ++++ test/src/tcp3d_main.h | 234 + test/src/tcp3d_multi_inst.h | 135 + test/src/tcp3d_profile.h | 135 + test/src/tcp3d_single_inst.h | 90 + test/src/tcp3d_testset_functions.c | 681 ++ 1044 files changed, 99703 insertions(+) create mode 100644 Settings.xdc.xdt create mode 100644 build/buildlib.xs create mode 100644 config.bld create mode 100644 docs/Module.xs create mode 100644 docs/ReleaseNotes_TCP3DDriver.doc create mode 100644 docs/ReleaseNotes_TCP3DDriver.pdf create mode 100644 docs/TCP3D_DRV_doxconfig.xdt create mode 100644 docs/TCP3D_DriverSDS.pdf create mode 100644 docs/TCP3D_LLD_SoftwareManifest.pdf create mode 100755 docs/doxy/rundoxy.bat create mode 100644 docs/doxy/template/asapimain.h create mode 100644 docs/doxy/template/doxygen.h create mode 100644 docs/doxy/tifooter.htm create mode 100644 docs/doxy/tiheader.htm create mode 100644 docs/doxy/tilogo.gif create mode 100644 docs/doxy/titagline.gif create mode 100644 docs/eclipse/sample.xml.xdt create mode 100644 docs/eclipse/toc_cdoc_sample.xml create mode 100644 docs/tifooter.htm create mode 100644 docs/tiheader.htm create mode 100644 docs/tilogo.gif create mode 100644 docs/titagline.gif create mode 100644 example/Module.xs create mode 100644 example/macros.ini create mode 100644 example/simtci6634/c66/bios/link.cmd create mode 100644 example/simtci6634/c66/bios/sample_config.cfg create mode 100644 example/simtci6634/c66/bios/tcp3dSimtci6634C66BiosExampleProject.txt create mode 100644 example/simtci6634/c66/bios/tcp3d_osal.c create mode 100644 example/src/CpIntc_local.c create mode 100644 example/src/sample.h create mode 100644 example/src/sample_cfg.c create mode 100644 example/src/sample_cs.c create mode 100644 example/src/sample_init.c create mode 100644 example/src/sample_int_reg.c create mode 100644 example/src/tcp3d_codeBlkSeg.c create mode 100644 example/src/tcp3d_codeBlkSeg.h create mode 100644 example/src/tcp3d_drv_sample.h create mode 100644 example/src/tcp3d_drv_sample_init.c create mode 100644 example/src/tcp3d_drv_types.h create mode 100644 example/src/tcp3d_example_main.c create mode 100644 example/src/tcp3d_example_main.h create mode 100644 example/src/tcp3d_inputConfigPrep.c create mode 100644 example/src/tcp3d_itg.c create mode 100644 example/src/tcp3d_main.h create mode 100644 example/src/tcp3d_multi_inst.h create mode 100644 example/src/tcp3d_single_inst.h create mode 100644 example/src/tcp3d_testset_functions.c create mode 100644 example/testvectors/lte/block0_cfgreg.dat create mode 100644 example/testvectors/lte/block0_hard_dec.bin create mode 100644 example/testvectors/lte/block0_hard_dec.dat create mode 100644 example/testvectors/lte/block0_llrs.bin create mode 100644 example/testvectors/lte/block0_llrs.dat create mode 100644 example/testvectors/lte/block0_soft_dec.bin create mode 100644 example/testvectors/lte/block0_soft_dec.dat create mode 100644 example/testvectors/lte/block0_status.bin create mode 100644 example/testvectors/lte/block0_status.dat create mode 100644 example/testvectors/lte/block0_tail_llrs.dat create mode 100644 example/testvectors/lte/block1_cfgreg.dat create mode 100644 example/testvectors/lte/block1_hard_dec.bin create mode 100644 example/testvectors/lte/block1_hard_dec.dat create mode 100644 example/testvectors/lte/block1_llrs.bin create mode 100644 example/testvectors/lte/block1_llrs.dat create mode 100644 example/testvectors/lte/block1_soft_dec.bin create mode 100644 example/testvectors/lte/block1_soft_dec.dat create mode 100644 example/testvectors/lte/block1_status.bin create mode 100644 example/testvectors/lte/block1_status.dat create mode 100644 example/testvectors/lte/block1_tail_llrs.dat create mode 100644 example/testvectors/lte/block2_cfgreg.dat create mode 100644 example/testvectors/lte/block2_hard_dec.bin create mode 100644 example/testvectors/lte/block2_hard_dec.dat create mode 100644 example/testvectors/lte/block2_llrs.bin create mode 100644 example/testvectors/lte/block2_llrs.dat create mode 100644 example/testvectors/lte/block2_tail_llrs.dat create mode 100644 example/testvectors/lte/block3_cfgreg.dat create mode 100644 example/testvectors/lte/block3_hard_dec.bin create mode 100644 example/testvectors/lte/block3_hard_dec.dat create mode 100644 example/testvectors/lte/block3_llrs.bin create mode 100644 example/testvectors/lte/block3_llrs.dat create mode 100644 example/testvectors/lte/block3_soft_dec.bin create mode 100644 example/testvectors/lte/block3_soft_dec.dat create mode 100644 example/testvectors/lte/block3_status.bin create mode 100644 example/testvectors/lte/block3_status.dat create mode 100644 example/testvectors/lte/block3_tail_llrs.dat create mode 100644 example/testvectors/lte/block4_cfgreg.dat create mode 100644 example/testvectors/lte/block4_hard_dec.bin create mode 100644 example/testvectors/lte/block4_hard_dec.dat create mode 100644 example/testvectors/lte/block4_llrs.bin create mode 100644 example/testvectors/lte/block4_llrs.dat create mode 100644 example/testvectors/lte/block4_tail_llrs.dat create mode 100644 example/testvectors/lte/block5_cfgreg.dat create mode 100644 example/testvectors/lte/block5_hard_dec.bin create mode 100644 example/testvectors/lte/block5_hard_dec.dat create mode 100644 example/testvectors/lte/block5_llrs.bin create mode 100644 example/testvectors/lte/block5_llrs.dat create mode 100644 example/testvectors/lte/block5_tail_llrs.dat create mode 100644 example/testvectors/lte/number_of_blocks.dat create mode 100644 example/testvectors/lte/reference/block0_coded_bits.dat create mode 100644 example/testvectors/lte/reference/block0_info_bits.dat create mode 100644 example/testvectors/lte/reference/block0_inp_cfg.dat create mode 100644 example/testvectors/lte/reference/block1_coded_bits.dat create mode 100644 example/testvectors/lte/reference/block1_info_bits.dat create mode 100644 example/testvectors/lte/reference/block1_inp_cfg.dat create mode 100644 example/testvectors/lte/reference/block2_coded_bits.dat create mode 100644 example/testvectors/lte/reference/block2_info_bits.dat create mode 100644 example/testvectors/lte/reference/block2_inp_cfg.dat create mode 100644 example/testvectors/lte/reference/block3_coded_bits.dat create mode 100644 example/testvectors/lte/reference/block3_info_bits.dat create mode 100644 example/testvectors/lte/reference/block3_inp_cfg.dat create mode 100644 example/testvectors/lte/reference/block4_coded_bits.dat create mode 100644 example/testvectors/lte/reference/block4_info_bits.dat create mode 100644 example/testvectors/lte/reference/block4_inp_cfg.dat create mode 100644 example/testvectors/lte/reference/block5_coded_bits.dat create mode 100644 example/testvectors/lte/reference/block5_info_bits.dat create mode 100644 example/testvectors/lte/reference/block5_inp_cfg.dat create mode 100644 example/testvectors/wcdma/block0_cfgreg.dat create mode 100644 example/testvectors/wcdma/block0_hard_dec.bin create mode 100644 example/testvectors/wcdma/block0_hard_dec.dat create mode 100644 example/testvectors/wcdma/block0_llrs.bin create mode 100644 example/testvectors/wcdma/block0_llrs.dat create mode 100644 example/testvectors/wcdma/block0_soft_dec.bin create mode 100644 example/testvectors/wcdma/block0_soft_dec.dat create mode 100644 example/testvectors/wcdma/block0_status.bin create mode 100644 example/testvectors/wcdma/block0_status.dat create mode 100644 example/testvectors/wcdma/block0_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block10_cfgreg.dat create mode 100644 example/testvectors/wcdma/block10_hard_dec.bin create mode 100644 example/testvectors/wcdma/block10_hard_dec.dat create mode 100644 example/testvectors/wcdma/block10_llrs.bin create mode 100644 example/testvectors/wcdma/block10_llrs.dat create mode 100644 example/testvectors/wcdma/block10_soft_dec.bin create mode 100644 example/testvectors/wcdma/block10_soft_dec.dat create mode 100644 example/testvectors/wcdma/block10_status.bin create mode 100644 example/testvectors/wcdma/block10_status.dat create mode 100644 example/testvectors/wcdma/block10_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block11_cfgreg.dat create mode 100644 example/testvectors/wcdma/block11_hard_dec.bin create mode 100644 example/testvectors/wcdma/block11_hard_dec.dat create mode 100644 example/testvectors/wcdma/block11_llrs.bin create mode 100644 example/testvectors/wcdma/block11_llrs.dat create mode 100644 example/testvectors/wcdma/block11_soft_dec.bin create mode 100644 example/testvectors/wcdma/block11_soft_dec.dat create mode 100644 example/testvectors/wcdma/block11_status.bin create mode 100644 example/testvectors/wcdma/block11_status.dat create mode 100644 example/testvectors/wcdma/block11_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block12_cfgreg.dat create mode 100644 example/testvectors/wcdma/block12_hard_dec.bin create mode 100644 example/testvectors/wcdma/block12_hard_dec.dat create mode 100644 example/testvectors/wcdma/block12_llrs.bin create mode 100644 example/testvectors/wcdma/block12_llrs.dat create mode 100644 example/testvectors/wcdma/block12_soft_dec.bin create mode 100644 example/testvectors/wcdma/block12_soft_dec.dat create mode 100644 example/testvectors/wcdma/block12_status.bin create mode 100644 example/testvectors/wcdma/block12_status.dat create mode 100644 example/testvectors/wcdma/block12_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block13_cfgreg.dat create mode 100644 example/testvectors/wcdma/block13_hard_dec.bin create mode 100644 example/testvectors/wcdma/block13_hard_dec.dat create mode 100644 example/testvectors/wcdma/block13_llrs.bin create mode 100644 example/testvectors/wcdma/block13_llrs.dat create mode 100644 example/testvectors/wcdma/block13_soft_dec.bin create mode 100644 example/testvectors/wcdma/block13_soft_dec.dat create mode 100644 example/testvectors/wcdma/block13_status.bin create mode 100644 example/testvectors/wcdma/block13_status.dat create mode 100644 example/testvectors/wcdma/block13_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block14_cfgreg.dat create mode 100644 example/testvectors/wcdma/block14_hard_dec.bin create mode 100644 example/testvectors/wcdma/block14_hard_dec.dat create mode 100644 example/testvectors/wcdma/block14_llrs.bin create mode 100644 example/testvectors/wcdma/block14_llrs.dat create mode 100644 example/testvectors/wcdma/block14_soft_dec.bin create mode 100644 example/testvectors/wcdma/block14_soft_dec.dat create mode 100644 example/testvectors/wcdma/block14_status.bin create mode 100644 example/testvectors/wcdma/block14_status.dat create mode 100644 example/testvectors/wcdma/block14_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block15_cfgreg.dat create mode 100644 example/testvectors/wcdma/block15_hard_dec.bin create mode 100644 example/testvectors/wcdma/block15_hard_dec.dat create mode 100644 example/testvectors/wcdma/block15_llrs.bin create mode 100644 example/testvectors/wcdma/block15_llrs.dat create mode 100644 example/testvectors/wcdma/block15_soft_dec.bin create mode 100644 example/testvectors/wcdma/block15_soft_dec.dat create mode 100644 example/testvectors/wcdma/block15_status.bin create mode 100644 example/testvectors/wcdma/block15_status.dat create mode 100644 example/testvectors/wcdma/block15_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block16_cfgreg.dat create mode 100644 example/testvectors/wcdma/block16_hard_dec.bin create mode 100644 example/testvectors/wcdma/block16_hard_dec.dat create mode 100644 example/testvectors/wcdma/block16_llrs.bin create mode 100644 example/testvectors/wcdma/block16_llrs.dat create mode 100644 example/testvectors/wcdma/block16_soft_dec.bin create mode 100644 example/testvectors/wcdma/block16_soft_dec.dat create mode 100644 example/testvectors/wcdma/block16_status.bin create mode 100644 example/testvectors/wcdma/block16_status.dat create mode 100644 example/testvectors/wcdma/block16_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block17_cfgreg.dat create mode 100644 example/testvectors/wcdma/block17_hard_dec.bin create mode 100644 example/testvectors/wcdma/block17_hard_dec.dat create mode 100644 example/testvectors/wcdma/block17_llrs.bin create mode 100644 example/testvectors/wcdma/block17_llrs.dat create mode 100644 example/testvectors/wcdma/block17_soft_dec.bin create mode 100644 example/testvectors/wcdma/block17_soft_dec.dat create mode 100644 example/testvectors/wcdma/block17_status.bin create mode 100644 example/testvectors/wcdma/block17_status.dat create mode 100644 example/testvectors/wcdma/block17_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block18_cfgreg.dat create mode 100644 example/testvectors/wcdma/block18_hard_dec.bin create mode 100644 example/testvectors/wcdma/block18_hard_dec.dat create mode 100644 example/testvectors/wcdma/block18_llrs.bin create mode 100644 example/testvectors/wcdma/block18_llrs.dat create mode 100644 example/testvectors/wcdma/block18_soft_dec.bin create mode 100644 example/testvectors/wcdma/block18_soft_dec.dat create mode 100644 example/testvectors/wcdma/block18_status.bin create mode 100644 example/testvectors/wcdma/block18_status.dat create mode 100644 example/testvectors/wcdma/block18_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block19_cfgreg.dat create mode 100644 example/testvectors/wcdma/block19_hard_dec.bin create mode 100644 example/testvectors/wcdma/block19_hard_dec.dat create mode 100644 example/testvectors/wcdma/block19_llrs.bin create mode 100644 example/testvectors/wcdma/block19_llrs.dat create mode 100644 example/testvectors/wcdma/block19_soft_dec.bin create mode 100644 example/testvectors/wcdma/block19_soft_dec.dat create mode 100644 example/testvectors/wcdma/block19_status.bin create mode 100644 example/testvectors/wcdma/block19_status.dat create mode 100644 example/testvectors/wcdma/block19_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block1_cfgreg.dat create mode 100644 example/testvectors/wcdma/block1_hard_dec.bin create mode 100644 example/testvectors/wcdma/block1_hard_dec.dat create mode 100644 example/testvectors/wcdma/block1_llrs.bin create mode 100644 example/testvectors/wcdma/block1_llrs.dat create mode 100644 example/testvectors/wcdma/block1_soft_dec.bin create mode 100644 example/testvectors/wcdma/block1_soft_dec.dat create mode 100644 example/testvectors/wcdma/block1_status.bin create mode 100644 example/testvectors/wcdma/block1_status.dat create mode 100644 example/testvectors/wcdma/block1_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block20_cfgreg.dat create mode 100644 example/testvectors/wcdma/block20_hard_dec.bin create mode 100644 example/testvectors/wcdma/block20_hard_dec.dat create mode 100644 example/testvectors/wcdma/block20_llrs.bin create mode 100644 example/testvectors/wcdma/block20_llrs.dat create mode 100644 example/testvectors/wcdma/block20_soft_dec.bin create mode 100644 example/testvectors/wcdma/block20_soft_dec.dat create mode 100644 example/testvectors/wcdma/block20_status.bin create mode 100644 example/testvectors/wcdma/block20_status.dat create mode 100644 example/testvectors/wcdma/block20_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block21_cfgreg.dat create mode 100644 example/testvectors/wcdma/block21_hard_dec.bin create mode 100644 example/testvectors/wcdma/block21_hard_dec.dat create mode 100644 example/testvectors/wcdma/block21_llrs.bin create mode 100644 example/testvectors/wcdma/block21_llrs.dat create mode 100644 example/testvectors/wcdma/block21_soft_dec.bin create mode 100644 example/testvectors/wcdma/block21_soft_dec.dat create mode 100644 example/testvectors/wcdma/block21_status.bin create mode 100644 example/testvectors/wcdma/block21_status.dat create mode 100644 example/testvectors/wcdma/block21_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block22_cfgreg.dat create mode 100644 example/testvectors/wcdma/block22_hard_dec.bin create mode 100644 example/testvectors/wcdma/block22_hard_dec.dat create mode 100644 example/testvectors/wcdma/block22_llrs.bin create mode 100644 example/testvectors/wcdma/block22_llrs.dat create mode 100644 example/testvectors/wcdma/block22_soft_dec.bin create mode 100644 example/testvectors/wcdma/block22_soft_dec.dat create mode 100644 example/testvectors/wcdma/block22_status.bin create mode 100644 example/testvectors/wcdma/block22_status.dat create mode 100644 example/testvectors/wcdma/block22_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block23_cfgreg.dat create mode 100644 example/testvectors/wcdma/block23_hard_dec.bin create mode 100644 example/testvectors/wcdma/block23_hard_dec.dat create mode 100644 example/testvectors/wcdma/block23_llrs.bin create mode 100644 example/testvectors/wcdma/block23_llrs.dat create mode 100644 example/testvectors/wcdma/block23_soft_dec.bin create mode 100644 example/testvectors/wcdma/block23_soft_dec.dat create mode 100644 example/testvectors/wcdma/block23_status.bin create mode 100644 example/testvectors/wcdma/block23_status.dat create mode 100644 example/testvectors/wcdma/block23_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block24_cfgreg.dat create mode 100644 example/testvectors/wcdma/block24_hard_dec.bin create mode 100644 example/testvectors/wcdma/block24_hard_dec.dat create mode 100644 example/testvectors/wcdma/block24_llrs.bin create mode 100644 example/testvectors/wcdma/block24_llrs.dat create mode 100644 example/testvectors/wcdma/block24_soft_dec.bin create mode 100644 example/testvectors/wcdma/block24_soft_dec.dat create mode 100644 example/testvectors/wcdma/block24_status.bin create mode 100644 example/testvectors/wcdma/block24_status.dat create mode 100644 example/testvectors/wcdma/block24_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block25_cfgreg.dat create mode 100644 example/testvectors/wcdma/block25_hard_dec.bin create mode 100644 example/testvectors/wcdma/block25_hard_dec.dat create mode 100644 example/testvectors/wcdma/block25_llrs.bin create mode 100644 example/testvectors/wcdma/block25_llrs.dat create mode 100644 example/testvectors/wcdma/block25_soft_dec.bin create mode 100644 example/testvectors/wcdma/block25_soft_dec.dat create mode 100644 example/testvectors/wcdma/block25_status.bin create mode 100644 example/testvectors/wcdma/block25_status.dat create mode 100644 example/testvectors/wcdma/block25_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block26_cfgreg.dat create mode 100644 example/testvectors/wcdma/block26_hard_dec.bin create mode 100644 example/testvectors/wcdma/block26_hard_dec.dat create mode 100644 example/testvectors/wcdma/block26_llrs.bin create mode 100644 example/testvectors/wcdma/block26_llrs.dat create mode 100644 example/testvectors/wcdma/block26_soft_dec.bin create mode 100644 example/testvectors/wcdma/block26_soft_dec.dat create mode 100644 example/testvectors/wcdma/block26_status.bin create mode 100644 example/testvectors/wcdma/block26_status.dat create mode 100644 example/testvectors/wcdma/block26_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block27_cfgreg.dat create mode 100644 example/testvectors/wcdma/block27_hard_dec.bin create mode 100644 example/testvectors/wcdma/block27_hard_dec.dat create mode 100644 example/testvectors/wcdma/block27_llrs.bin create mode 100644 example/testvectors/wcdma/block27_llrs.dat create mode 100644 example/testvectors/wcdma/block27_soft_dec.bin create mode 100644 example/testvectors/wcdma/block27_soft_dec.dat create mode 100644 example/testvectors/wcdma/block27_status.bin create mode 100644 example/testvectors/wcdma/block27_status.dat create mode 100644 example/testvectors/wcdma/block27_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block28_cfgreg.dat create mode 100644 example/testvectors/wcdma/block28_hard_dec.bin create mode 100644 example/testvectors/wcdma/block28_hard_dec.dat create mode 100644 example/testvectors/wcdma/block28_llrs.bin create mode 100644 example/testvectors/wcdma/block28_llrs.dat create mode 100644 example/testvectors/wcdma/block28_soft_dec.bin create mode 100644 example/testvectors/wcdma/block28_soft_dec.dat create mode 100644 example/testvectors/wcdma/block28_status.bin create mode 100644 example/testvectors/wcdma/block28_status.dat create mode 100644 example/testvectors/wcdma/block28_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block29_cfgreg.dat create mode 100644 example/testvectors/wcdma/block29_hard_dec.bin create mode 100644 example/testvectors/wcdma/block29_hard_dec.dat create mode 100644 example/testvectors/wcdma/block29_llrs.bin create mode 100644 example/testvectors/wcdma/block29_llrs.dat create mode 100644 example/testvectors/wcdma/block29_soft_dec.bin create mode 100644 example/testvectors/wcdma/block29_soft_dec.dat create mode 100644 example/testvectors/wcdma/block29_status.bin create mode 100644 example/testvectors/wcdma/block29_status.dat create mode 100644 example/testvectors/wcdma/block29_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block2_cfgreg.dat create mode 100644 example/testvectors/wcdma/block2_hard_dec.bin create mode 100644 example/testvectors/wcdma/block2_hard_dec.dat create mode 100644 example/testvectors/wcdma/block2_llrs.bin create mode 100644 example/testvectors/wcdma/block2_llrs.dat create mode 100644 example/testvectors/wcdma/block2_soft_dec.bin create mode 100644 example/testvectors/wcdma/block2_soft_dec.dat create mode 100644 example/testvectors/wcdma/block2_status.bin create mode 100644 example/testvectors/wcdma/block2_status.dat create mode 100644 example/testvectors/wcdma/block2_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block30_cfgreg.dat create mode 100644 example/testvectors/wcdma/block30_hard_dec.bin create mode 100644 example/testvectors/wcdma/block30_hard_dec.dat create mode 100644 example/testvectors/wcdma/block30_llrs.bin create mode 100644 example/testvectors/wcdma/block30_llrs.dat create mode 100644 example/testvectors/wcdma/block30_soft_dec.bin create mode 100644 example/testvectors/wcdma/block30_soft_dec.dat create mode 100644 example/testvectors/wcdma/block30_status.bin create mode 100644 example/testvectors/wcdma/block30_status.dat create mode 100644 example/testvectors/wcdma/block30_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block31_cfgreg.dat create mode 100644 example/testvectors/wcdma/block31_hard_dec.bin create mode 100644 example/testvectors/wcdma/block31_hard_dec.dat create mode 100644 example/testvectors/wcdma/block31_llrs.bin create mode 100644 example/testvectors/wcdma/block31_llrs.dat create mode 100644 example/testvectors/wcdma/block31_soft_dec.bin create mode 100644 example/testvectors/wcdma/block31_soft_dec.dat create mode 100644 example/testvectors/wcdma/block31_status.bin create mode 100644 example/testvectors/wcdma/block31_status.dat create mode 100644 example/testvectors/wcdma/block31_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block3_cfgreg.dat create mode 100644 example/testvectors/wcdma/block3_hard_dec.bin create mode 100644 example/testvectors/wcdma/block3_hard_dec.dat create mode 100644 example/testvectors/wcdma/block3_llrs.bin create mode 100644 example/testvectors/wcdma/block3_llrs.dat create mode 100644 example/testvectors/wcdma/block3_soft_dec.bin create mode 100644 example/testvectors/wcdma/block3_soft_dec.dat create mode 100644 example/testvectors/wcdma/block3_status.bin create mode 100644 example/testvectors/wcdma/block3_status.dat create mode 100644 example/testvectors/wcdma/block3_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block4_cfgreg.dat create mode 100644 example/testvectors/wcdma/block4_hard_dec.bin create mode 100644 example/testvectors/wcdma/block4_hard_dec.dat create mode 100644 example/testvectors/wcdma/block4_llrs.bin create mode 100644 example/testvectors/wcdma/block4_llrs.dat create mode 100644 example/testvectors/wcdma/block4_soft_dec.bin create mode 100644 example/testvectors/wcdma/block4_soft_dec.dat create mode 100644 example/testvectors/wcdma/block4_status.bin create mode 100644 example/testvectors/wcdma/block4_status.dat create mode 100644 example/testvectors/wcdma/block4_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block5_cfgreg.dat create mode 100644 example/testvectors/wcdma/block5_hard_dec.bin create mode 100644 example/testvectors/wcdma/block5_hard_dec.dat create mode 100644 example/testvectors/wcdma/block5_llrs.bin create mode 100644 example/testvectors/wcdma/block5_llrs.dat create mode 100644 example/testvectors/wcdma/block5_soft_dec.bin create mode 100644 example/testvectors/wcdma/block5_soft_dec.dat create mode 100644 example/testvectors/wcdma/block5_status.bin create mode 100644 example/testvectors/wcdma/block5_status.dat create mode 100644 example/testvectors/wcdma/block5_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block6_cfgreg.dat create mode 100644 example/testvectors/wcdma/block6_hard_dec.bin create mode 100644 example/testvectors/wcdma/block6_hard_dec.dat create mode 100644 example/testvectors/wcdma/block6_llrs.bin create mode 100644 example/testvectors/wcdma/block6_llrs.dat create mode 100644 example/testvectors/wcdma/block6_soft_dec.bin create mode 100644 example/testvectors/wcdma/block6_soft_dec.dat create mode 100644 example/testvectors/wcdma/block6_status.bin create mode 100644 example/testvectors/wcdma/block6_status.dat create mode 100644 example/testvectors/wcdma/block6_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block7_cfgreg.dat create mode 100644 example/testvectors/wcdma/block7_hard_dec.bin create mode 100644 example/testvectors/wcdma/block7_hard_dec.dat create mode 100644 example/testvectors/wcdma/block7_llrs.bin create mode 100644 example/testvectors/wcdma/block7_llrs.dat create mode 100644 example/testvectors/wcdma/block7_soft_dec.bin create mode 100644 example/testvectors/wcdma/block7_soft_dec.dat create mode 100644 example/testvectors/wcdma/block7_status.bin create mode 100644 example/testvectors/wcdma/block7_status.dat create mode 100644 example/testvectors/wcdma/block7_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block8_cfgreg.dat create mode 100644 example/testvectors/wcdma/block8_hard_dec.bin create mode 100644 example/testvectors/wcdma/block8_hard_dec.dat create mode 100644 example/testvectors/wcdma/block8_llrs.bin create mode 100644 example/testvectors/wcdma/block8_llrs.dat create mode 100644 example/testvectors/wcdma/block8_soft_dec.bin create mode 100644 example/testvectors/wcdma/block8_soft_dec.dat create mode 100644 example/testvectors/wcdma/block8_status.bin create mode 100644 example/testvectors/wcdma/block8_status.dat create mode 100644 example/testvectors/wcdma/block8_tail_llrs.dat create mode 100644 example/testvectors/wcdma/block9_cfgreg.dat create mode 100644 example/testvectors/wcdma/block9_hard_dec.bin create mode 100644 example/testvectors/wcdma/block9_hard_dec.dat create mode 100644 example/testvectors/wcdma/block9_llrs.bin create mode 100644 example/testvectors/wcdma/block9_llrs.dat create mode 100644 example/testvectors/wcdma/block9_soft_dec.bin create mode 100644 example/testvectors/wcdma/block9_soft_dec.dat create mode 100644 example/testvectors/wcdma/block9_status.bin create mode 100644 example/testvectors/wcdma/block9_status.dat create mode 100644 example/testvectors/wcdma/block9_tail_llrs.dat create mode 100644 example/testvectors/wcdma/number_of_blocks.dat create mode 100644 example/testvectors/wimax/block0_cfgreg.dat create mode 100644 example/testvectors/wimax/block0_hard_dec.bin create mode 100644 example/testvectors/wimax/block0_hard_dec.dat create mode 100644 example/testvectors/wimax/block0_llrs.bin create mode 100644 example/testvectors/wimax/block0_llrs.dat create mode 100644 example/testvectors/wimax/block0_soft_dec.bin create mode 100644 example/testvectors/wimax/block0_soft_dec.dat create mode 100644 example/testvectors/wimax/block0_status.bin create mode 100644 example/testvectors/wimax/block0_status.dat create mode 100644 example/testvectors/wimax/block0_tail_llrs.dat create mode 100644 example/testvectors/wimax/block1_cfgreg.dat create mode 100644 example/testvectors/wimax/block1_hard_dec.bin create mode 100644 example/testvectors/wimax/block1_hard_dec.dat create mode 100644 example/testvectors/wimax/block1_llrs.bin create mode 100644 example/testvectors/wimax/block1_llrs.dat create mode 100644 example/testvectors/wimax/block1_tail_llrs.dat create mode 100644 example/testvectors/wimax/block2_cfgreg.dat create mode 100644 example/testvectors/wimax/block2_hard_dec.bin create mode 100644 example/testvectors/wimax/block2_hard_dec.dat create mode 100644 example/testvectors/wimax/block2_llrs.bin create mode 100644 example/testvectors/wimax/block2_llrs.dat create mode 100644 example/testvectors/wimax/block2_soft_dec.bin create mode 100644 example/testvectors/wimax/block2_soft_dec.dat create mode 100644 example/testvectors/wimax/block2_status.bin create mode 100644 example/testvectors/wimax/block2_status.dat create mode 100644 example/testvectors/wimax/block2_tail_llrs.dat create mode 100644 example/testvectors/wimax/block3_cfgreg.dat create mode 100644 example/testvectors/wimax/block3_hard_dec.bin create mode 100644 example/testvectors/wimax/block3_hard_dec.dat create mode 100644 example/testvectors/wimax/block3_llrs.bin create mode 100644 example/testvectors/wimax/block3_llrs.dat create mode 100644 example/testvectors/wimax/block3_soft_dec.bin create mode 100644 example/testvectors/wimax/block3_soft_dec.dat create mode 100644 example/testvectors/wimax/block3_status.bin create mode 100644 example/testvectors/wimax/block3_status.dat create mode 100644 example/testvectors/wimax/block3_tail_llrs.dat create mode 100644 example/testvectors/wimax/block4_cfgreg.dat create mode 100644 example/testvectors/wimax/block4_hard_dec.bin create mode 100644 example/testvectors/wimax/block4_hard_dec.dat create mode 100644 example/testvectors/wimax/block4_llrs.bin create mode 100644 example/testvectors/wimax/block4_llrs.dat create mode 100644 example/testvectors/wimax/block4_soft_dec.bin create mode 100644 example/testvectors/wimax/block4_soft_dec.dat create mode 100644 example/testvectors/wimax/block4_status.bin create mode 100644 example/testvectors/wimax/block4_status.dat create mode 100644 example/testvectors/wimax/block4_tail_llrs.dat create mode 100644 example/testvectors/wimax/number_of_blocks.dat create mode 100644 example/testvectors/wimax/reference/block0_coded_bits.dat create mode 100644 example/testvectors/wimax/reference/block0_info_bits.dat create mode 100644 example/testvectors/wimax/reference/block0_inp_cfg.dat create mode 100644 example/testvectors/wimax/reference/block1_coded_bits.dat create mode 100644 example/testvectors/wimax/reference/block1_info_bits.dat create mode 100644 example/testvectors/wimax/reference/block1_inp_cfg.dat create mode 100644 example/testvectors/wimax/reference/block2_coded_bits.dat create mode 100644 example/testvectors/wimax/reference/block2_info_bits.dat create mode 100644 example/testvectors/wimax/reference/block2_inp_cfg.dat create mode 100644 example/testvectors/wimax/reference/block3_coded_bits.dat create mode 100644 example/testvectors/wimax/reference/block3_info_bits.dat create mode 100644 example/testvectors/wimax/reference/block3_inp_cfg.dat create mode 100644 example/testvectors/wimax/reference/block4_coded_bits.dat create mode 100644 example/testvectors/wimax/reference/block4_info_bits.dat create mode 100644 example/testvectors/wimax/reference/block4_inp_cfg.dat create mode 100644 install/tcp3d.mpi create mode 100644 package.bld create mode 100644 package.xdc create mode 100644 package.xs create mode 100755 projectCreate.bat create mode 100755 setupenv.bat create mode 100644 src/Module.xs create mode 100644 src/tcp3d_betaState.c create mode 100644 src/tcp3d_drv.c create mode 100644 src/tcp3d_drv_priv.h create mode 100644 src/tcp3d_isr.c create mode 100644 src/tcp3d_reg.c create mode 100644 src/tcp3d_utils.c create mode 100644 src/tcp3d_utils.h create mode 100644 tcp3d_drv.h create mode 100644 tcp3d_drv_types.h create mode 100644 tcp3d_osal.h create mode 100644 tcp3dver.h.xdt create mode 100644 test/Module.xs create mode 100644 test/gen_test_vectors/GenConfig_lte.m create mode 100644 test/gen_test_vectors/GenConfig_wcdma.m create mode 100644 test/gen_test_vectors/GenConfig_wimax.m create mode 100644 test/gen_test_vectors/LTE/config_1.cfg create mode 100644 test/gen_test_vectors/LTE/config_10.cfg create mode 100644 test/gen_test_vectors/LTE/config_100.cfg create mode 100644 test/gen_test_vectors/LTE/config_11.cfg create mode 100644 test/gen_test_vectors/LTE/config_12.cfg create mode 100644 test/gen_test_vectors/LTE/config_13.cfg create mode 100644 test/gen_test_vectors/LTE/config_14.cfg create mode 100644 test/gen_test_vectors/LTE/config_15.cfg create mode 100644 test/gen_test_vectors/LTE/config_16.cfg create mode 100644 test/gen_test_vectors/LTE/config_17.cfg create mode 100644 test/gen_test_vectors/LTE/config_18.cfg create mode 100644 test/gen_test_vectors/LTE/config_19.cfg create mode 100644 test/gen_test_vectors/LTE/config_2.cfg create mode 100644 test/gen_test_vectors/LTE/config_20.cfg create mode 100644 test/gen_test_vectors/LTE/config_21.cfg create mode 100644 test/gen_test_vectors/LTE/config_22.cfg create mode 100644 test/gen_test_vectors/LTE/config_23.cfg create mode 100644 test/gen_test_vectors/LTE/config_24.cfg create mode 100644 test/gen_test_vectors/LTE/config_25.cfg create mode 100644 test/gen_test_vectors/LTE/config_26.cfg create mode 100644 test/gen_test_vectors/LTE/config_27.cfg create mode 100644 test/gen_test_vectors/LTE/config_28.cfg create mode 100644 test/gen_test_vectors/LTE/config_29.cfg create mode 100644 test/gen_test_vectors/LTE/config_3.cfg create mode 100644 test/gen_test_vectors/LTE/config_30.cfg create mode 100644 test/gen_test_vectors/LTE/config_31.cfg create mode 100644 test/gen_test_vectors/LTE/config_32.cfg create mode 100644 test/gen_test_vectors/LTE/config_33.cfg create mode 100644 test/gen_test_vectors/LTE/config_34.cfg create mode 100644 test/gen_test_vectors/LTE/config_35.cfg create mode 100644 test/gen_test_vectors/LTE/config_36.cfg create mode 100644 test/gen_test_vectors/LTE/config_37.cfg create mode 100644 test/gen_test_vectors/LTE/config_38.cfg create mode 100644 test/gen_test_vectors/LTE/config_39.cfg create mode 100644 test/gen_test_vectors/LTE/config_4.cfg create mode 100644 test/gen_test_vectors/LTE/config_40.cfg create mode 100644 test/gen_test_vectors/LTE/config_41.cfg create mode 100644 test/gen_test_vectors/LTE/config_42.cfg create mode 100644 test/gen_test_vectors/LTE/config_43.cfg create mode 100644 test/gen_test_vectors/LTE/config_44.cfg create mode 100644 test/gen_test_vectors/LTE/config_45.cfg create mode 100644 test/gen_test_vectors/LTE/config_46.cfg create mode 100644 test/gen_test_vectors/LTE/config_47.cfg create mode 100644 test/gen_test_vectors/LTE/config_48.cfg create mode 100644 test/gen_test_vectors/LTE/config_49.cfg create mode 100644 test/gen_test_vectors/LTE/config_5.cfg create mode 100644 test/gen_test_vectors/LTE/config_50.cfg create mode 100644 test/gen_test_vectors/LTE/config_51.cfg create mode 100644 test/gen_test_vectors/LTE/config_52.cfg create mode 100644 test/gen_test_vectors/LTE/config_53.cfg create mode 100644 test/gen_test_vectors/LTE/config_54.cfg create mode 100644 test/gen_test_vectors/LTE/config_55.cfg create mode 100644 test/gen_test_vectors/LTE/config_56.cfg create mode 100644 test/gen_test_vectors/LTE/config_57.cfg create mode 100644 test/gen_test_vectors/LTE/config_58.cfg create mode 100644 test/gen_test_vectors/LTE/config_59.cfg create mode 100644 test/gen_test_vectors/LTE/config_6.cfg create mode 100644 test/gen_test_vectors/LTE/config_60.cfg create mode 100644 test/gen_test_vectors/LTE/config_61.cfg create mode 100644 test/gen_test_vectors/LTE/config_62.cfg create mode 100644 test/gen_test_vectors/LTE/config_63.cfg create mode 100644 test/gen_test_vectors/LTE/config_64.cfg create mode 100644 test/gen_test_vectors/LTE/config_65.cfg create mode 100644 test/gen_test_vectors/LTE/config_66.cfg create mode 100644 test/gen_test_vectors/LTE/config_67.cfg create mode 100644 test/gen_test_vectors/LTE/config_68.cfg create mode 100644 test/gen_test_vectors/LTE/config_69.cfg create mode 100644 test/gen_test_vectors/LTE/config_7.cfg create mode 100644 test/gen_test_vectors/LTE/config_70.cfg create mode 100644 test/gen_test_vectors/LTE/config_71.cfg create mode 100644 test/gen_test_vectors/LTE/config_72.cfg create mode 100644 test/gen_test_vectors/LTE/config_73.cfg create mode 100644 test/gen_test_vectors/LTE/config_74.cfg create mode 100644 test/gen_test_vectors/LTE/config_75.cfg create mode 100644 test/gen_test_vectors/LTE/config_76.cfg create mode 100644 test/gen_test_vectors/LTE/config_77.cfg create mode 100644 test/gen_test_vectors/LTE/config_78.cfg create mode 100644 test/gen_test_vectors/LTE/config_79.cfg create mode 100644 test/gen_test_vectors/LTE/config_8.cfg create mode 100644 test/gen_test_vectors/LTE/config_80.cfg create mode 100644 test/gen_test_vectors/LTE/config_81.cfg create mode 100644 test/gen_test_vectors/LTE/config_82.cfg create mode 100644 test/gen_test_vectors/LTE/config_83.cfg create mode 100644 test/gen_test_vectors/LTE/config_84.cfg create mode 100644 test/gen_test_vectors/LTE/config_85.cfg create mode 100644 test/gen_test_vectors/LTE/config_86.cfg create mode 100644 test/gen_test_vectors/LTE/config_87.cfg create mode 100644 test/gen_test_vectors/LTE/config_88.cfg create mode 100644 test/gen_test_vectors/LTE/config_89.cfg create mode 100644 test/gen_test_vectors/LTE/config_9.cfg create mode 100644 test/gen_test_vectors/LTE/config_90.cfg create mode 100644 test/gen_test_vectors/LTE/config_91.cfg create mode 100644 test/gen_test_vectors/LTE/config_92.cfg create mode 100644 test/gen_test_vectors/LTE/config_93.cfg create mode 100644 test/gen_test_vectors/LTE/config_94.cfg create mode 100644 test/gen_test_vectors/LTE/config_95.cfg create mode 100644 test/gen_test_vectors/LTE/config_96.cfg create mode 100644 test/gen_test_vectors/LTE/config_97.cfg create mode 100644 test/gen_test_vectors/LTE/config_98.cfg create mode 100644 test/gen_test_vectors/LTE/config_99.cfg create mode 100644 test/gen_test_vectors/LTE/config_list.cfg create mode 100644 test/gen_test_vectors/LTE_200/GenConfig_lte.m create mode 100644 test/gen_test_vectors/WCDMA/config_1.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_10.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_100.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_11.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_12.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_13.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_14.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_15.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_16.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_17.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_18.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_19.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_2.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_20.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_21.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_22.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_23.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_24.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_25.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_26.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_27.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_28.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_29.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_3.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_30.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_31.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_32.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_33.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_34.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_35.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_36.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_37.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_38.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_39.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_4.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_40.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_41.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_42.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_43.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_44.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_45.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_46.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_47.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_48.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_49.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_5.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_50.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_51.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_52.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_53.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_54.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_55.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_56.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_57.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_58.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_59.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_6.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_60.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_61.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_62.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_63.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_64.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_65.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_66.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_67.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_68.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_69.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_7.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_70.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_71.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_72.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_73.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_74.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_75.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_76.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_77.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_78.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_79.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_8.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_80.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_81.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_82.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_83.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_84.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_85.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_86.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_87.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_88.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_89.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_9.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_90.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_91.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_92.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_93.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_94.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_95.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_96.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_97.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_98.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_99.cfg create mode 100644 test/gen_test_vectors/WCDMA/config_list.cfg create mode 100644 test/gen_test_vectors/WCDMA_200/GenConfig_wcdma.m create mode 100644 test/gen_test_vectors/WIMAX/config_1.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_10.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_100.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_11.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_12.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_13.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_14.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_15.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_16.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_17.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_18.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_19.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_2.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_20.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_21.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_22.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_23.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_24.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_25.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_26.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_27.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_28.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_29.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_3.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_30.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_31.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_32.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_33.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_34.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_35.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_36.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_37.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_38.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_39.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_4.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_40.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_41.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_42.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_43.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_44.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_45.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_46.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_47.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_48.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_49.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_5.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_50.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_51.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_52.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_53.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_54.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_55.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_56.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_57.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_58.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_59.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_6.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_60.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_61.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_62.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_63.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_64.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_65.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_66.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_67.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_68.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_69.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_7.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_70.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_71.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_72.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_73.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_74.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_75.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_76.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_77.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_78.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_79.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_8.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_80.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_81.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_82.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_83.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_84.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_85.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_86.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_87.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_88.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_89.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_9.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_90.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_91.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_92.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_93.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_94.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_95.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_96.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_97.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_98.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_99.cfg create mode 100644 test/gen_test_vectors/WIMAX/config_list.cfg create mode 100644 test/gen_test_vectors/WIMAX_200/GenConfig_wimax.m create mode 100755 test/gen_test_vectors/cleanTestVect.bat create mode 100755 test/gen_test_vectors/genTestVect.bat create mode 100755 test/gen_test_vectors/genTestVect_200.bat create mode 100644 test/gen_test_vectors/include/cfg_param.h create mode 100644 test/gen_test_vectors/include/sim_param.h create mode 100644 test/gen_test_vectors/include/typedefs.h create mode 100755 test/gen_test_vectors/msvc/Debug/GenTestVectors.exe create mode 100644 test/gen_test_vectors/msvc/GenTestVectors.dsp create mode 100644 test/gen_test_vectors/sim_config/LTE/lte_list.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_config5.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_config6.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test10_list.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_config5.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_config6.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test1_list.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test4_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test4_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test4_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test4_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test4_list.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test7_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test7_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test7_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test7_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/LTE/test7_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config10.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config11.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config12.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config5.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config6.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config7.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config8.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_config9.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test11_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config10.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config11.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config12.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config5.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config6.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config7.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config8.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_config9.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test3_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test6_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test6_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test6_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test9_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test9_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/test9_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WCDMA/wcdma_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test2_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test2_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test2_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test2_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test2_config5.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test2_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test5_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test5_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test5_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test5_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test5_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test8_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test8_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test8_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test8_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/test8_list.cfg create mode 100644 test/gen_test_vectors/sim_config/WIMAX/wimax_list.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config10.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config11.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config12.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config5.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config6.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config7.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config8.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_config9.cfg create mode 100644 test/gen_test_vectors/sim_config/test12_list.cfg create mode 100644 test/gen_test_vectors/sim_config/test13_config1.cfg create mode 100644 test/gen_test_vectors/sim_config/test13_config2.cfg create mode 100644 test/gen_test_vectors/sim_config/test13_config3.cfg create mode 100644 test/gen_test_vectors/sim_config/test13_config4.cfg create mode 100644 test/gen_test_vectors/sim_config/test13_list.cfg create mode 100644 test/gen_test_vectors/simulator/config_list.cfg create mode 100755 test/gen_test_vectors/simulator/debug/Test_c_model.exe create mode 100644 test/gen_test_vectors/src/GenTestVectorsMain.c create mode 100644 test/gen_test_vectors/src/conv2bin.c create mode 100644 test/gen_test_vectors/src/initial_beta_calc.c create mode 100644 test/gen_test_vectors/src/load_config.c create mode 100644 test/gen_test_vectors/src/set_reg.c create mode 100644 test/gen_test_vectors/test0_lte/block0_cfgreg.dat create mode 100644 test/gen_test_vectors/test0_lte/config_1.cfg create mode 100644 test/gen_test_vectors/test0_lte/config_list.cfg create mode 100644 test/gen_test_vectors/test0_lte/number_of_blocks.dat create mode 100644 test/gen_test_vectors/test0_wcdma/config_1.cfg create mode 100644 test/gen_test_vectors/test0_wcdma/config_list.cfg create mode 100644 test/gen_test_vectors/test0_wimax/config_1.cfg create mode 100644 test/gen_test_vectors/test0_wimax/config_list.cfg create mode 100644 test/gen_test_vectors/test1_lte/block0_cfgreg.dat create mode 100644 test/gen_test_vectors/test1_lte/block1_cfgreg.dat create mode 100644 test/gen_test_vectors/test1_lte/block2_cfgreg.dat create mode 100644 test/gen_test_vectors/test1_lte/block3_cfgreg.dat create mode 100644 test/gen_test_vectors/test1_lte/block4_cfgreg.dat create mode 100644 test/gen_test_vectors/test1_lte/block5_cfgreg.dat create mode 100644 test/gen_test_vectors/test1_lte/test1_config1.cfg create mode 100644 test/gen_test_vectors/test1_lte/test1_config2.cfg create mode 100644 test/gen_test_vectors/test1_lte/test1_config3.cfg create mode 100644 test/gen_test_vectors/test1_lte/test1_config4.cfg create mode 100644 test/gen_test_vectors/test1_lte/test1_config5.cfg create mode 100644 test/gen_test_vectors/test1_lte/test1_config6.cfg create mode 100644 test/gen_test_vectors/test1_lte/test1_list.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config1.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config10.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config11.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config12.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config2.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config3.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config4.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config5.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config6.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config7.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config8.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_config9.cfg create mode 100644 test/gen_test_vectors/test1_wcdma/test1_list.cfg create mode 100644 test/gen_test_vectors/test1_wimax/test1_config1.cfg create mode 100644 test/gen_test_vectors/test1_wimax/test1_config2.cfg create mode 100644 test/gen_test_vectors/test1_wimax/test1_config3.cfg create mode 100644 test/gen_test_vectors/test1_wimax/test1_config4.cfg create mode 100644 test/gen_test_vectors/test1_wimax/test1_config5.cfg create mode 100644 test/gen_test_vectors/test1_wimax/test1_list.cfg create mode 100644 test/gen_test_vectors/test2_lte/test2_config1.cfg create mode 100644 test/gen_test_vectors/test2_lte/test2_config2.cfg create mode 100644 test/gen_test_vectors/test2_lte/test2_config3.cfg create mode 100644 test/gen_test_vectors/test2_lte/test2_config4.cfg create mode 100644 test/gen_test_vectors/test2_lte/test2_list.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_config1.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_config2.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_config3.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_config4.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_config5.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_config6.cfg create mode 100644 test/gen_test_vectors/test2_wcdma/test2_list.cfg create mode 100644 test/gen_test_vectors/test2_wimax/test2_config1.cfg create mode 100644 test/gen_test_vectors/test2_wimax/test2_config2.cfg create mode 100644 test/gen_test_vectors/test2_wimax/test2_config3.cfg create mode 100644 test/gen_test_vectors/test2_wimax/test2_config4.cfg create mode 100644 test/gen_test_vectors/test2_wimax/test2_list.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_config1.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_config2.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_config3.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_config4.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_config5.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_config6.cfg create mode 100644 test/gen_test_vectors/test3_lte/test3_list.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config1.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config2.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config3.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config4.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config5.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config6.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config7.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config8.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_config9.cfg create mode 100644 test/gen_test_vectors/test3_wcdma/test3_list.cfg create mode 100644 test/gen_test_vectors/test3_wimax/test3_config1.cfg create mode 100644 test/gen_test_vectors/test3_wimax/test3_config2.cfg create mode 100644 test/gen_test_vectors/test3_wimax/test3_config3.cfg create mode 100644 test/gen_test_vectors/test3_wimax/test3_config4.cfg create mode 100644 test/gen_test_vectors/test3_wimax/test3_config5.cfg create mode 100644 test/gen_test_vectors/test3_wimax/test3_list.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_config1.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_config2.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_config3.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_config4.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_config5.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_config6.cfg create mode 100644 test/gen_test_vectors/test4_lte/test4_list.cfg create mode 100644 test/macros.ini create mode 100644 test/simtci6634/c66/bios/link_test.cmd create mode 100644 test/simtci6634/c66/bios/tcp3dSimtci6634C66BiosTestProject.txt create mode 100644 test/simtci6634/c66/bios/tcp3d_drv_test.cfg create mode 100644 test/simtci6634/c66/bios/tcp3d_osal.h create mode 100644 test/src/CpIntc_local.c create mode 100644 test/src/sample.h create mode 100644 test/src/sample_cfg.c create mode 100644 test/src/sample_cs.c create mode 100644 test/src/sample_init.c create mode 100644 test/src/sample_int_reg.c create mode 100644 test/src/tcp3d_codeBlkSeg.c create mode 100644 test/src/tcp3d_codeBlkSeg.h create mode 100644 test/src/tcp3d_drv_sample.h create mode 100644 test/src/tcp3d_drv_sample_init.c create mode 100644 test/src/tcp3d_drv_types.h create mode 100644 test/src/tcp3d_inputConfigPrep.c create mode 100644 test/src/tcp3d_itg.c create mode 100644 test/src/tcp3d_main.c create mode 100644 test/src/tcp3d_main.h create mode 100644 test/src/tcp3d_multi_inst.h create mode 100644 test/src/tcp3d_profile.h create mode 100644 test/src/tcp3d_single_inst.h create mode 100644 test/src/tcp3d_testset_functions.c diff --git a/Settings.xdc.xdt b/Settings.xdc.xdt new file mode 100644 index 0000000..56cebde --- /dev/null +++ b/Settings.xdc.xdt @@ -0,0 +1,23 @@ +%%{ +/*! + * This template implements the Settings.xdc + */ + /* Versioning */ + var ver = this; + for each(i=0;i 1; i--) { + pkgroot+="/.."; + } + + makefile.writeLine("\n# ROOT Directory"); + makefile.writeLine("export ROOTDIR := "+pkgroot); + + makefile.writeLine("\n# INCLUDE Directory"); + makefile.writeLine("export INCDIR := "+getxdcpath+";$(ROOTDIR)"); + + makefile.writeLine("\n# Common Macros used in make"); + makefile.writeLine("\nifndef RM"); + makefile.writeLine("export RM = rm -f"); + makefile.writeLine("endif"); + + makefile.writeLine("\nifndef CP"); + makefile.writeLine("export CP = cp -p"); + makefile.writeLine("endif"); + + makefile.writeLine("\nexport MKDIR = mkdir -p"); + + makefile.writeLine("\nifndef RMDIR"); + makefile.writeLine("export RMDIR = rm -rf"); + makefile.writeLine("endif"); + + makefile.writeLine("\nifndef SED"); + makefile.writeLine("export SED = sed"); + makefile.writeLine("endif"); + + makefile.writeLine("\nifndef MAKE"); + makefile.writeLine("export MAKE = make"); + makefile.writeLine("endif"); + + makefile.writeLine("\n# PHONY Targets"); + makefile.writeLine(".PHONY: all clean cleanall "); + + makefile.writeLine("\n# FORCE Targets"); + makefile.writeLine("FORCE: "); + + makefile.writeLine("\n# all rule"); + makefile.writeLine("all: .executables"); + makefile.writeLine(".executables: .libraries"); + makefile.writeLine(".libraries:"); + + makefile.writeLine("\n# Clean Rule"); + makefile.writeLine("clean:: clean_package"); + makefile.writeLine("# Clean Top Level Object Directory "); + makefile.writeLine("clean_package :\n\t$(RMDIR) $(LIBDIR)/*/"); + makefile.writeLine("\t$(RMDIR) package/cfg"); + } + else + { + try{ + makefile = fileModule.open("makefile", "a"); + } catch (ex) + { + print("makefile cannot be written to. Please check Writing Permissions."); + java.lang.System.exit(1); + } + + } + + return makefile; +} + +function createLibMake(makelibname,targetname, objectPath) +{ + var tooldir; + var stringname=String(targetname).replace("(xdc.bld.ITarget.Module)",""); + if(stringname.match("ARM11")) + { + tooldir="TI_ARM11_GEN_INSTALL_PATH"; + } + else + { + tooldir="C6X_GEN_INSTALL_PATH"; + } + switch(stringname) + { + case String(C66LE): + targetname=C66LE; + break; + case String(C66BE): + targetname=C66BE; + break; + + } + var fileModule = xdc.module('xdc.services.io.File'); + try{ + var dstFile = new java.io.File(makelibname); + dstFile.getParentFile().mkdirs(); + libmakefile = fileModule.open(makelibname, "w"); + /* Add to Archive list */ + } catch (ex) + { + print(makelibname+" cannot be written to. Please check Writing Permissions."); + java.lang.System.exit(1); + } + libmakefile.writeLine("#*******************************************************************************"); + libmakefile.writeLine("#* FILE PURPOSE: Lower level makefile for Creating Component Libraries"); + libmakefile.writeLine("#*******************************************************************************"); + libmakefile.writeLine("#* FILE NAME: "+makelibname); + libmakefile.writeLine("#*"); + libmakefile.writeLine("#* DESCRIPTION: Defines Source Files, Compilers flags and build rules"); + libmakefile.writeLine("#*"); + libmakefile.writeLine("#*"); + libmakefile.writeLine("#*******************************************************************************"); + libmakefile.writeLine("#"); + libmakefile.writeLine(""); + libmakefile.writeLine("#"); + libmakefile.writeLine("# Macro definitions referenced below"); + libmakefile.writeLine("#"); + libmakefile.writeLine("empty ="); + libmakefile.writeLine("space =$(empty) $(empty)"); + + if(stringname.match("ti.targets")) + { + + var rtslibtemp = targetname.lnkOpts.suffix.toString().split("/"); + var rtslib; + for(n=0;n> $@.dep; \\"); + makefilename.writeLine(" $(RM) $@.pp "); + } + else if(fileExt == "asm") + { + makefilename.writeLine("\t$(AC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fa $< "); + } + else if(fileExt == "sa") + { + makefilename.writeLine("\t$(AC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< "); + } + makefilename.writeLine("\n#Create Empty rule for dependency"); + makefilename.writeLine("$("+objectliststring+"):"+makefilename.$private.fd); + makefilename.writeLine(makefilename.$private.fd+":"); + makefilename.writeLine("\n#Include Depedency for "+srcString+" Files"); + makefilename.writeLine("ifneq (clean,$(MAKECMDGOALS))"); + makefilename.writeLine(" -include $("+objectliststring+":%.$(OBJEXT)=%.$(OBJEXT).dep)"); + makefilename.writeLine("endif"); + +} + +/************************************************************************** + * FUNCTION NAME : buildLibrary + ************************************************************************** + * DESCRIPTION : + * Utility function which will build a specific library + **************************************************************************/ +var makefilelocal; +function buildLibrary (libOptions, libName, target, libFiles) +{ + var lldFullLibraryPath = "./lib/c66/" + libName; + var lldFullBuildPath = "./build/c66/" + libName; + var lldFullLibraryPathMake = "$(LIBDIR)/" + "c66/" + libName; + + /* Create Main make file in the root of package folder */ + makefilelocal = createMake(makefilelocal); + + /* Write the rule to make library in main makefile */ + lib = lldFullBuildPath+".a"+target.suffix; + libMake = lldFullLibraryPathMake+".a"+target.suffix; + var objectPath= "./package/"+lldFullBuildPath; + makefilelocal.writeLine("\n\n# Make rule to create "+libMake+" library"); + makefilelocal.writeLine(".libraries: "+ libMake); + makefilelocal.writeLine(libMake+": FORCE\n\t$(MAKE) -f "+lib+".mk $@"); + + /* Create Library make file in the lib folder */ + var makefilelib= createLibMake(lib+".mk",target,objectPath); + + /* Rule to clean library in main makefile */ + makefilelocal.writeLine("# Rule to clean "+libMake+" library"); + makefilelocal.writeLine("clean ::\n\t$(RM) "+ libMake); + librule="\n\n"+libMake+" :"; + + /* Add files to be compiled */ + /* Separate out the C and assembly files */ + var cfiles= new Array(); + var afiles= new Array(); + var safiles= new Array(); + for each(var srcFile in libFiles) + { + var srcFile=String(srcFile); + var dot = srcFile.lastIndexOf("."); + var extension = srcFile.substr(dot,srcFile.length); + if(extension == ".c") + { + cfiles.push(srcFile); + } + else if(extension == ".sa") + { + safiles.push(srcFile); + } + else if(extension == ".asm") + { + afiles.push(srcFile); + } + else + { + print("ERROR: Unsupported file extension"); + java.lang.System.exit(1); + } + } + if(cfiles.length > 0) + { + makeAddObjects("COMMONSRC",makefilelib,cfiles,libOptions,"c",target); + librule += " $(COMMONSRCCOBJS)"; + } + if(afiles.length > 0) + { + makeAddObjects("COMMONSRC",makefilelib,afiles,libOptions,"asm",target); + librule += " $(COMMONSRCASMOBJS)"; + } + if(safiles.length > 0) + { + makeAddObjects("COMMONSRC",makefilelib,safiles,libOptions,"sa",target); + librule += " $(COMMONSRCSAOBJS)"; + } + + makefilelib.writeLine(librule); + makefilelib.writeLine("\t@echo archiving $? into $@ ..."); + makefilelib.writeLine("\tif [ ! -d $(LIBDIR)/c66 ]; then $(MKDIR) $(LIBDIR)/c66 ; fi;"); + makefilelib.writeLine("\t$(ARIN) $@ $?"); + makefilelib.close(); + + /* Create the Epilogue; which executes after all the builds are completed. + * This is used to generate the benchmark information for the built library. + * Also add the benchmarking information file to the package. */ + Pkg.makeEpilogue += ".libraries: benchmarking_" + target.suffix + "\n"; + Pkg.makeEpilogue += "benchmarking_" + target.suffix + ":"; + Pkg.makeEpilogue += "\n\t ofd6x.exe -x " + lldFullLibraryPath + ".a" + target.suffix + " > tmp.xml"; + Pkg.makeEpilogue += "\n\t sectti.exe tmp.xml > " + lldFullLibraryPath + ".a" + target.suffix + "_size.txt"; + Pkg.makeEpilogue += "\n\t $(RM) tmp.xml\n\n"; + Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix + "_size.txt"; + Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullBuildPath + ".a" + target.suffix + ".mk"; + Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix; + + /* We need to clean after ourselves; extend the 'clean' target to take care of this. */ + Pkg.makeEpilogue += "clean::\n"; + Pkg.makeEpilogue += "\t$(RM) " + lldFullBuildPath + ".a" + target.suffix + "_size.txt\n"; + // Pkg.makeEpilogue += "\t$(RM) " + lldFullBuildPath + ".a" + target.suffix + ".mk\n"; + Pkg.makeEpilogue += "\t$(RMDIR) " + "$(LIBDIR)/" + "c66/ \n\n"; + + return lib; +} + +/************************************************************************** + * FUNCTION NAME : createMiniPkg + ************************************************************************** + * DESCRIPTION : + * The function is responsible for creating the mini tar package + * The MINI package has the following files:- + * - Driver Source Files. + * - Header files (exported and internal driver files) + * - Simple Makefiles. + **************************************************************************/ +function createMiniPkg(pkgName) +{ + /* Get the package Name. */ + var packageRepository = xdc.getPackageRepository(Pkg.name); + var packageBase = xdc.getPackageBase(Pkg.name); + var packageName = packageBase.substring(packageRepository.length + 1); + + /* Convert the Package name by replacing back slashes with forward slashes. This is required because + * otherwise with long names the tar is unable to change directory. */ + var newPkgName = new java.lang.String(packageRepository); + var newPkgRep = newPkgName.replace('\\', '/'); + + /* Step1: Create the MINI Package and add the simple Big and Little Endian Makefiles to the package */ + Pkg.makeEpilogue += "release: mini_pkg\n"; + Pkg.makeEpilogue += "mini_pkg:\n"; + Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -cf packages/" + pkgName + "_mini.tar " + + packageName + "simpleC66LE.mak " + packageName + "simpleC66BE.mak\n"; + + /* Step2: Add the exported header files to the package */ + var includeFiles = libUtility.listAllFiles (".h", ".", false); + for (var k = 0 ; k < includeFiles.length; k++) + Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + + packageName + includeFiles[k] + "\n"; + + /* Step3: Add the internal header files to the package */ + includeFiles = libUtility.listAllFiles (".h", "include", true); + for (var k = 0 ; k < includeFiles.length; k++) + Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + + packageName + includeFiles[k] + "\n"; + + /* Step4: Add the PDSP firmware files to the package */ + includeFiles = libUtility.listAllFiles (".h", "firmware", true); + for (var k = 0 ; k < includeFiles.length; k++) + Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + + packageName + includeFiles[k] + "\n"; + + /* Step5: Add the device specific files to the package */ + includeFiles = libUtility.listAllFiles (".c", "device", true); + for (var k = 0 ; k < includeFiles.length; k++) + Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + + packageName + includeFiles[k] + "\n"; + + /* Step4: Add the driver source files to the package; the filter should have generated a source listing */ + Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -T src.lst -rf packages/" + pkgName + "_mini.tar " + "\n"; + + /* Ensure that we clean up the mini package */ + Pkg.makeEpilogue += "clean::\n"; + Pkg.makeEpilogue += "\t $(RM) packages/" + pkgName + "_mini.tar\n"; +} diff --git a/config.bld b/config.bld new file mode 100644 index 0000000..5b3be13 --- /dev/null +++ b/config.bld @@ -0,0 +1,105 @@ +/****************************************************************************** + * FILE PURPOSE: Build configuration Script for the TCP3D Driver + ****************************************************************************** + * FILE NAME: config.bld + * + * DESCRIPTION: + * This file contains the build configuration script for the TCP3D driver + * and is responsible for configuration of the paths for the various + * tools required to build the driver. + * + * Copyright (C) 2011, Texas Instruments, Inc. + *****************************************************************************/ + +/* Set package attribute as ZIP or TAR */ +Pkg.attrs.archiver = "tar"; + +/* Get the Tools Base directory from the Environment Variable. */ +var toolsBaseDir = java.lang.System.getenv("XDCCGROOT"); + +/* Get the base directory for the TCP3D Driver Package */ +var tcp3dDriverPath = new java.io.File(".//").getPath(); + +var tcp3dDriverInstallType; + +/* Read the part number from the environment variable. */ +var tcp3dPartNumber = java.lang.System.getenv("PARTNO"); + +if(tcp3dPartNumber == null) +{ + tcp3dPartNumber = "keystone2"; +} + +/* Include Path */ +var tcp3dIncludePath = " -i" + tcp3dDriverPath + "/src" + " -i" + tcp3dDriverPath + " -i" + tcp3dDriverPath + "/test"; + +/* Configure the TCP3D Release Version Information */ +/* We use the information from compatibility key. It require 3 steps: */ +/* remove SPACE and TAB, convert to string and split to make array */ +var tcp3dDriverReleaseVersion = (""+Pkg.version.replace(/\s/g, "")).split(','); + +/* TCP3D Driver Coverity Analysis: Check the environment variable to determine if Static + * Analysis has to be done on the TCP3D Driver Code base or not? */ +var tcp3dDriverCoverityAnalysis = java.lang.System.getenv("LLDCOV"); + +/* C66 ELF compiler configuration for Little Endian Mode. */ +var C66LE = xdc.useModule('ti.targets.elf.C66'); +C66LE.rootDir = toolsBaseDir; +C66LE.ccOpts.prefix = "-mo -o3 -q -k -eo.o"; + +/* C66 ELF compiler configuration for Big Endian Mode. */ +var C66BE = xdc.useModule('ti.targets.elf.C66_big_endian'); +C66BE.rootDir = toolsBaseDir; +C66BE.ccOpts.prefix = "-mo -o3 -q -k -eo.o"; + +/* Check if we need to run the STATIC Analysis or not? */ +var coverityAnalysis = java.lang.System.getenv("STATIC_ANALYZE"); + +/* Setup the Coverity Filters to perform Static Analysis. */ +if (coverityAnalysis == "ON") { + var coverityInstallPath = java.lang.System.getenv("STATIC_ANALYZE_PATH"); + var cfgBase = xdc.getPackageBase("tisb.coverity.filters") + "cfg"; + + var coverityFilter = [ + { + moduleName: "tisb.coverity.filters.Coverity", + params: { + cfgDir: cfgBase, // The Coverity configuration file directory + rootDir: coverityInstallPath, + outDir: xdc.csd() + "cov_out", + analyzeLibs: true + } + }, + ]; + + /* Run the coverity filters on the LE Build only. */ + C66LE.profiles["release"].filters = coverityFilter; +} + +/* Check if we need to create the Makefiles? */ +var miniBuild = java.lang.System.getenv("MINI_PACKAGE"); + +if (miniBuild == "ON") +{ + /* Add the filter for simple Makefile generation. */ + var makeC66LEFilter = { + moduleName: "build.filter.Make", + params: { + makefileName: "simpleC66LE.mak", + } + }; + C66LE.profiles["release"].filters[C66LE.profiles["release"].filters.length++] = makeC66LEFilter; + + var makeC66BEFilter = { + moduleName: "build.filter.Make", + params: { + makefileName: "simpleC66BE.mak", + } + }; + C66BE.profiles["release"].filters[C66BE.profiles["release"].filters.length++] = makeC66BEFilter; +} + +/* List all the build targets here. */ +Build.targets = [ C66LE, C66BE ]; + +var devices = ["tci6634/c66"/*,"tci6636/c66","tci6638/c66"*/]; diff --git a/docs/Module.xs b/docs/Module.xs new file mode 100644 index 0000000..282032c --- /dev/null +++ b/docs/Module.xs @@ -0,0 +1,55 @@ +/****************************************************************************** + * FILE PURPOSE: TCP3D Driver DOCS Module specification file. + ****************************************************************************** + * FILE NAME: module.xs + * + * DESCRIPTION: + * This file contains the module specification for the TCP3D Driver Documentation . + * + * Copyright (C) 2008, Texas Instruments, Inc. + *****************************************************************************/ + +/* Load the library utility. */ +var libUtility = xdc.loadCapsule ("../build/buildlib.xs"); + +/************************************************************************** + * FUNCTION NAME : modBuild + ************************************************************************** + * DESCRIPTION : + * The function is used to build the TCP3D driver documentation and add it + * to the package. + **************************************************************************/ +function modBuild() +{ + /* Create the actual PROLOGUE Section for the Documentation.*/ + Pkg.makePrologue += "release: tcp3d_document_generation\n"; + Pkg.makePrologue += "tcp3d_document_generation:\n"; + Pkg.makePrologue += "\t @echo ----------------------------\n"; + Pkg.makePrologue += "\t @echo Generating TCP3D Driver Documentation\n"; + Pkg.makePrologue += "\t doxygen docs/TCP3D_DRV_doxconfig\n"; + Pkg.makePrologue += "\t @echo TCP3D Driver Documentation Generated \n"; + Pkg.makePrologue += "\t @echo ----------------------------\n"; + + /* Add the documentation file to the package. */ + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/TCP3D_DRV_APIIF.chm"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/TCP3D_DriverSDS.pdf"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/tifooter.htm"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/tiheader.htm"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/tilogo.gif"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/titagline.gif"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/doxy/html"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/TCP3D_LLD_SoftwareManifest.pdf"; + Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/ReleaseNotes_TCP3DDriver.pdf"; + + if ( tcp3dDriverInstallType == "SETUP" ) + { + Pkg.makePrologue += "all: eclipse_plugin_generation\n"; + Pkg.makePrologue += "eclipse_plugin_generation:\n"; + Pkg.makePrologue += "\t @echo ----------------------------\n"; + Pkg.makePrologue += "\t @echo TCP3D Eclipse Plugin Generation\n"; + Pkg.makePrologue += "\t xs xdc.tools.eclipsePluginGen -o . -x ./docs/eclipse/sample.xml -c ./docs/eclipse/toc_cdoc_sample.xml\n"; + Pkg.makePrologue += "\t @echo TCP3D Eclipse Plugin Generated \n"; + Pkg.makePrologue += "\t @echo ----------------------------\n"; + } +} + diff --git a/docs/ReleaseNotes_TCP3DDriver.doc b/docs/ReleaseNotes_TCP3DDriver.doc new file mode 100644 index 0000000000000000000000000000000000000000..2e573ab7c97a9e1d8755f641986b6694a70bd685 GIT binary patch literal 128512 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

VM3YGx2(LR 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

t`dCf5Wcm@q;izM2SrZx? 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�bw9t2$8x0i)uD{4ChIG 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

  • cC(`^h-V4C$z%Br_xf^UYyE8C=zt~{> z?ybPdA?RV8d5iB#PH<5RK=$}yGz^b-P~Qh}_|xI2(hv8 z(+JTSiX;R{Ohz@ID(T1*=XLClcy%l!ps7dKHP_VU8@^B#2-A#P;w?l8!Fi{8$-#@3(FQFigX#ODQ6V>gZ|v8)T7VPWxKZe` z#Jk!CuuHf5x=f)^rztR|xCKlQqORHGkULw<7T1Sc@Zy>w02VQU$h~`~ar9AE4Kzcor9{%>rOnCKxQ;z$pNiVS3im+y-{h>NMVO^b9Kv$4JdcCeI~TeKs)vy#nj!IPdC5Zhr2}CoAEA zEFa&u>h`N=-JIii2QSUK^7b`mq-fA{o8PT(Z=;!O*u+;j?wCA?zpyqm_g zdToBLq3hJ`Kc4Y3$W5=3cmkHEAkg@_3-WoC3ae%%5)xrr_dTg7+eFqU4B#_#!R_AW zi>m5*lnL0TiBcm`nD|X56Kz(*t}vXhM{Yw2?G(aFeds;1Jt!Ti_Pxy6eWV# zFosYFZ=o(kDxRx5Acn9UqiLTLvejR}9Ero`=$krtsM1GN(cn1X=-fEM-MEi{!x5dt zkzu~m3?vPR7(@#M&S$&E4IkO2#y+f;a0@@oCx%bzK-9wXacnXTzKmafY!abWlZ>|d z0%`BeRcGPeGfkTE?MO>{ z2JrvWZT>EMpo;^EzlBJXQFJUb{t?fG5YA>ReV8AH3Zj0F^4xf=1}DQH zj~7k8uIsK>4s5vm!fCoDalGf}>sLK<-{Nbpjk-XJOePRQ-&{Q>68Xo*7d|f~+f`AJ zg&Ti=|4$y7$VnoVCpZM~DZuOo07c@c5kI6m3o&n^H5Sf>)v&f@=nz>3(cL9_EYnR- zVNRvzFqR}ta6im%w0?{k$9QXEU}%?aC+GopCm7cN+_{LRX~s)?8I9JMjAx8zif69p z0?(D6>pV*mTRj^SZ#do%{^{~Ku$i$&EtXi)_7Z*16$F^o(b-r!i z=M?5JKzcY{h-LqifnziSg zIcFT@x%k4}_x|jQrPn|5m%FYzf6X~DRu=qrZ}o|H)jvOZ$745K`>RvhAu3-Us+wMf zsPv)5PuNT(aa#boGL*$)qPE$bF4uWJ9e z>VXY@n=F1fiazh1Y7n2Y0X%>^ej}PlFo6~{RHAfL-o_=hHW4K_!NY)Vx@Pb`f+Z$X z^-)H23zCJNuNh&nX6ctN1bB(F3xLA!f@XNv&fnf!%a&;w^v#r-GXmtZg;Fot;ybze-Pi3+DL7;Z*gwPzG(kL)^jCZr&3McJTRN} zp?G*;=L}y|94c5rGc=kZjYfDtq@WL)JX6$B69|kEF+mdR*OdgS;7T9r z>n58KvP19ngBpN0@?JlP1aj0HK_i$Y=$R!r!{iK0#+cVx_DS$?9~twJF&`N_LK@6I zoWB7B+lQghs1UUqX&a;f__k-%xyf_>_x7w^yXSisoSqr;%FlkjYfRd8_obKIz2>sZ z*Z6<6c=4|uS+wX8>iU-Z&$#uCH*W2{zqQnP(pf8BdTGU3)5p9&fAt*~oV99I)wE=J%EdT@QWmB!PE7;m7z1%EGj&d*pjel1SI1*XxtJsE_b-O)ft1PS!~Ir zaz4Vu*tt#b2w%kiJ9DsL-i~k+K}mAg05Q4<_WuAi!#w5TE{k_#)3Z%4H_`JLR|08n zXUfrF%YgcWGnWPfE}BiGyX_M3=S&Fv~^Vr`r=6& zNJ@+O5(KF{xIh!J$)sV>4NaU=VSFRXTZ)IVYZQ2)N|pdtA3ls>aBc)?-Ku`Wt_E8k zmGe-kHKmQ1x4q4@eM0}dS@)c=eeFe0wRU%Et4{x~>*jO@B;M&ywY-9xy`?+P|K2Zu zdG6SYTU6?I7hm$7Ute(h;7^u4^3M9prvI#1j&Tz2cX)8iyP4N_tlDtn@_t>i=y1q#Xry>DZYoz(5k}qgh!TqD+X^Zpjp?lE z?PI5rpTU)ft1J}m7|NKC@hT*An$ADt-sygw+v9$pJK+9;v-*LgJk;OFVs-!rbQ`=r z_P@Dbi}U~%b(f>n{TEim;u|uu)L$hkW20CO84JkVemJewE{}M5CiO5>QZterJ=5Ev zIq7uFRNwK*ycD&JdZ~Y`HpYao&*>rS5a-|(^!X;IF=OrPtqD9peXa+63DzM86uL*i z@XZQEp)8mLIaFVysQ|s?4vj-aV46m~xvo)br2B{--Sm~AQcbszcGNkwiEtM3Q+=6K zyU7o{9v&fjJAE_CpaOnU&$jW9EP~^6?fK(`69OmZCgnl6i@kx~-1PkC88(YDnOp%= zRNl@FQ1|MhYo%+Ai`wnNt~Bp*alB&Zg?O4=a%);kM$^(6C7#LIOvaGK(qg1I#YW|2 zk1-^QGX+uf2#PH5u@D(LK7t~PBR54%J0m!f4n`uOpb`rP0=Y~k91M7a!GOT?VJZ*o zKA(uk?KTGCaF#7Z3RIzBlk+((;L!py71)AL0~I@7_hz)9&f3a|$80bX+!H(yq=C}p zo@}HvKCcN|@OZ=zJ=4$I%RE_3;oz|>j}hO)f6Nc@G!KvMFHW2<4b%$^eGsBV4A)Kv zjY^~GUH zVfui$%$L78EHRc*XAj;r!KbCno`#bw{j@Rtwm6;XUJENIsP{*`;oCGdngq zMjewZXU1kHvd3|ZttdxBYA_kh1dDMtlVz^to=QAlG);=0ki0CqG`gbk*66zE#we3x zKon*XQbdX|XE9co#;DsAZ*Vt9Q%YJBQyLRi!cEQ1B14HxJjpsE&Z4vI>~Z!w7dWlX z0er2V&L)c85pHCNtiA9w+VbJkAN}JW4pUJVqm2f>iAL`uZyH zmE_~2;@)bc{KJO!sLkzd276UO^0d{&yNXdCu`k8l`P{l|ubRH@%)uK-|2drQ?ddx9 zmdmUC_`#E|7(e^2>#Kj6Q8V|(t8VWt-Z5{+^=A>2Q*H6k1?@dcz7mhWpi{qMJlPvR zw3|MWegt)(-TD=IFD{}o>Om&6=o4r9&+&doJioBed$G7s+TgdhhuRt^i<8^t`sbD| z@PD_oBy?NR-qOTIgE5Ruj9c`#H%H@P7WBQ~h;PUW$#%!}bU2x9H_=qq=GK@qR80$v z32JOpq^a0cZlasy&Sj&FFm*r4*Moy(`pd(Mo%MuWUpMo2lH3iDj;1{BIAzM?iIe64 z3kw0~sSTa?f(_4Zf9;mC+UIjj0vsl^Lg_0jHwrkV-Za+ipv3RH<&puMoU-1kxxFP>|wh zDAF&P(?$hRVfX?Y35%i<_A}YA%|?Y8DxtBENZBY$v4KJ^9L77BLA)w3$f4|&Decz*2Owm2TNPDWGdN^OeblJNAL=iMNMYxi2{!L;su;! zvjrRzB87S>fE4cQgO1z|}kBQliZ3`}sk9_WoMuq?8ec!xVH2#O;Xij?AUC1kQ$AkXx(;W9buIaV%PW>Sz9y#asL<52>w z1>)dTQ?^u63aLC%+f*j2X-XdC?tFb*fWn$1p3nj%q$R@$IRcb}iD_&Ie;gVLQK1PY z4cYK?+gjUB+aB8io7q;#z@&zW*$zH^C09AS-%X($*C zQqzNLgF6i#Vh*0nM>&kR#oSHY0gmS6(xJ^Hjt-|3n0&5o4^mDf(tdEMMqd;qm4cXQQ{#R}PiK)6CsY-K+bignE>ou#bFd1yIY`W-K8o zHaTMSLv1J&iXcU8f&?5`8@2_&2g4pgj;*_L)Yh+k74WH= zEF1BhulW^!JV7#e!hTjaH77oaf>b#@g5C+YL=x5;l zbWkaM%-hPoFf|EH?sx|6L@(plLw{Bdp+oqPVo#!!k_u}b$AxBv9tdv^??SuqF69IK zp5i(!jGcy&J!?pEia>HodstTRD9%WdjB_Y9Jx0aSS}c~-lt{5;ct~?gTXS=%O({Ce zMxSY+8OBU2j-aphWD;hjh(t+guO#`rO0dviNEVcxo~5$sR5sg?QVIh@*Xtn#qi9G` z!kF@6(uO+_0+Q*4Av8cKx+9#_B9U-7q-dD*Cx=48j&{oA(}Gl?m}=9CMTf&ldo(Ab zr8+v4a9C+?3#WAS5{{&LQwvg$rM9QcDLs{LP3c03O|4ArOzlY>fUyDUE#0R?a4)7- z;+M$Z1*JnFnxbe(?pNxfCu*X-bhyX!l4rN)V-M|-JAYG0`l$p^jGZNXXR-EO>4R=1 zo9&aheF0Xf%1RF4IYjJ$%2~#M+A)Lb$x5Swp>jlMRQmqI z82b8c;Di_TRZt&}R_*)lJ;?!MdRG;Qn8$k32(jHeL?Vs>?-1#RWdRl91 zD?31FMpg@C5#{J89L!O>jAS%woJ1v%5c(SM;v8O}gRsE1kQ}0(r?3NCfX$NmO znL91G-8@8WGFx+|2HcR&H8f;%O43dn53#nGtXA5j*aKdp51hd7_d+ly!lWNlTNG6d zD@r0rVF8D0yOeMcd9qqE8P*aB0KluB40<()d{ER^>2~a}+cBer!Wfvc9z-aoCrfOu zC)b->kXxDCowMWu1Iq1Us(v(j_GL$e<2k@I7|cbH-K5q`kcxLp=dV_yv@ z$JK$-So1PyUgxqxmh6>aG2?A0V=o_qh6@^%%Grh>{y&3i;&rWyM;z z&qUuuak6xxJcpgboh&eEX$;%uY4>$X)7Z(}M1gTw>`c%SWYTQPlk$PGkulA9SQm|~ z{v>VVlXjCkNd#~dHKMi1j4t;kt#W^$`>OiZD6*hOihG98GParZ8DB)PlKo~C@QID0 zJ;axVfuTeFaO4JtKJOQ#vPiazxV^!$D2Ym0B8?5iN!T-g_O3FAFsXfP?Wd*rgKex%5e^Oc?TqeQCDF5WX9yPjy$c{!JNQmb^0E&XOl_Fbhh#C}Vblu0xcT{)a(vIaHEkE_6r=R!|Th~4P z5jE+7>RW5^Z0yD?K5cFF?FV1Pld8Y}+XvOx$RCEMP(L8aTtJdI%A*6iL;@sS?OVv{Z~zl+ZUcWScZt2{n zOPfsA?3kv>O>+XLHC+4(ci24vaayfq0f;GvEOK;mLqI5cEm=JXeO&#V)J zWZDa4#tQ{TO2@TKhOpVl7V0XLr`GB&1aBnFwIoAG!`c9@Y+Mvt3F2@7H|XRe&eLOS zV>@F9Vswl!5|-CFTm%h5adOAx`A62ZDt&t^dn?AC)N#h{JOlBKdMAVeF*bqy(N(Vh z)bJf>%Hu-43bQ`qjBXh^NdBzghODzBMgSq!w?>;F+K1Q8I%b2iho}R+|81CGcN9_d z5Ay&@OC?(lyUeLI^j|y5W4^lcwIz4VS$v~TdJFG(ctQ2EcP{Kd>A@?jJ1Bc~@{x}7 z{14}>DUHA5Q)91+e_LtB^!Xh#egO<%Gvov>Pl!&MKoOUCaKZz}yyD;I|IBX*;zf^H8vozW-r3+?&ik0snANQ zVZ1}u#*J&`liiN%>B9A?)}-2Pq9O2AqbSy%>Xt`Pw!Nf9-=AWDOG=8-|ang4Gt8 z!W1d7)ECf)my_%3Q}uQ9ly-PmhG|tTmkNGtzURl+-&;8GjB_8JFl+X{-@bV*nbz8s zt#{qEY0|{TU;O#>(_en%ae91+Sm)I+DU2;$d1mv;EfGGXq*lzkX~*(La_K!%Gdum~ zcg;WMys$42KmPb7Ki)=|*-D7(aR#3LM9+ZGFAJV*&Ir8}qS;V6)D!9rEre)#EVMhsgx*gQN=>R=2kU!) z$_D%$CBDBV#lPml!vcKdgu3YsLm~bTY2TKaYGFwK*u-f`g98 zlHh8KMUZOR$;bI9UyJPXNwOkj8f&yQkMn7i&o?3^!`lrAbER!Am))lD={V^hr?te0 zcPQybK&H5sPD`3#*94wYfJwyEFvbhOHWZ6`P%qh_-7E*f4AW!lwJoqMvaPh4ZF18n z=2h779+V+FOXbQF^`4Ssn4!bh(< zE*x+>!!_QxdfSgqS$>|OE@}hx_`zeIIB?eUS5VuGQi!1+j=BCfC*F0oF*2-xxq9Zw z;@Nu0imXy2I#HUOJwv&f+o^mZeUY_4fF4jNry&R29M|IGIImA}`ovg<3<1C|)F`BJ z+8NqTjn=euR?{+BC6+}FW8qC&V8vuF{Q@f}i!^1mnkdCVVO1sNc#PT+FLmqA9GKxj&rd%r?$2+Uix+*5)`TaADl+#kiS*?9XYeX7^}2WQW@&wR@|y}cb7Xl%JF!ikm@FcK`2i!a~j5G zr_-z`PEk}a8Rl7Y(Ofq7n0w7;b6{e#7KhP|sdE+hP2{@0N9k1-C?-Wdb}QD51p;3! zn&qhnC2#;4S`yRp)V-20T!oN{?Z`!AOoqW6zkk?iV++l(XJDG*HnHyeGppB&d8`4lXC z8SZ5~Ps`9Jy2tG=^DL-c-s~d{XbPe^bPo)v5?t&i4JWbQ+VjJ)8IGIa$h(1Q;?WXg zHa>a*_o#t37#P;Nb-eo80CgK)S!2ncl6GlzUG>4GM*mJRgbBiyG09S!tV}aSha%h8HH!4I*3oB-$gu{q-(sx{V77t z4#>2hf;Tb_JI4qJCv2R((LUX7vdh9b4~{OomcL$m^c>EV!}4IpAB}ggr^f&3oBy?) z{BH9H#=gwauVB0$J^B@J4#8$m;4)dlt^e+?hJW|bzu7#pK2bLTHtiT)t$oZqffT;~ zW#nRb#;JoZnFG~0av|3S>s;)hi^bZfa*o`k@%ESZ7%#jMk>$acM(xMA39|M~(_++s z+VENWNe@}?jXYE^Y1U+9EPaXR^1x-m#oi@>o4vON9=5La-WzzdxY7EQ`w8!cz~=A{ z_rWHg9m_a_O}F#61gIYrRuonj9&$fic&_P{rgxf{2H^US>VafYO(tV%tU*vb{&bs) z+S1t6;WW7%%mZJ{l4duHoMGRN7egZrk{Hc-^2et2VO zv9h0Jc4HsjVHVoScOLzzjVX`Ib=|NXS%K2D4jn)x_>qSW_6tmbsjuClN?(1U*9#Bb zio);^&(JgE3Xs`~TB`4pBUE+NMq%=?k6N+2?s+E7xK`g!Wjbxs&YwTD=e04{^(n5JtX_o}v&IU4f zo;|qB&=0@lxt_5npZMKby+ncL!S=JjYeT33C!TP5h^-u4(aUijZ_E`EN#7$EeX=b2 zVxh3rgdI`MS#b>Dvo~t0Evf=0pRH$1A%sj;n?q4qn0d+)$i!zLXVm8duyBBI{)2AXr?^wtQ$k0ae)mtIvNwlHOy@I zPQ!z-b%{-Qv*W4olc{ITJD6Sc-Kim0^}dqu0(7WCqyr&?(bwVq;<^R2b_OeWz`&pqe&JO9XL*8cX|Yp>V$ zSl{~Aw^o)(+vIKPPTVE!RSz*Ys&4db@ZRP*=zZS5KV$_7dS;K>Pz*D{r#)6-??@Y7 zw-OrxN65k5);l5 z!jzBb#xS&z$#!SFncg!p+dzJIJ|0(BJPp zGq0q(gdwJqT`={KVrhh0OZ*CtokSU25u3|pxA{FPtG`&;rUEwDTkM1W26o{6KF)(Q zYEDiLNwayC{3deZ4#v*1kZ+R#8%FRQdrM0;Wxc!BiTy)N9gWnD1jeJ&@c%5~gNsis zsw(I2wu(%!SEn#3h=`fsivy@+{F6OAS45^?h2tOX4Jd++oQ%p%1p~FRoI+Y{%aU@w ztFD9*M9jVKrGK?y!>sykK&h-)5^2AFUP7Pmw@`ji2I|3zd zfA`((gpwJw3Hmkyl zpG_|D8P%Gl&e(Q@2N2ot{6XC2=VLgwox>^aFn1h8k%V*jN_OUv=z>qFW8J5xvp(3= ziE5IN*<M{KHS*=r?aRkala!R*yN%@!mZ2jOz-+XnZS!b{t zD*tlJTVp4&{-sy3YPsW$En7}F@gtAE*i@r;7>$PN<=FM|vmiPC?Uvhj?Yxs{^uGp; z{%WAiD0(FxifgWvZjydmb4%5B%^uCZ(j%oON>w(6Ua5J>VDKxW6{reVjWCjD5b{@m z0y2W*aVG}K4Ho-Rs4eU(K*+>9D$4CLr9$NgT8yivp)$-nk5kgz8rMcFam#?^HH*aJ zs2w7I7FArmqYfI4h7aiks*xDsM(L)CDL!UxQ=H9oC8aJvXqgw4y24&erf|31a#61U z07R$aiQN%0izT~&9l=zNj;2WX$}=Qe4~2Fff#HP{ocn!^on%)7qVL!bCghtB!V24!o* zedQgIj+z^^H-*>L+!5YX^GNufnjPWoH3vO9MnR-OI~5R0sZ^o#Gssg~W#Il4++ z{b7SjkoQ`wT}4exeuJRDsza+p{k6WDJO^qcRkgL%RsMQRT-+q#;$lE|J(9=`Dut4F zoU~&YCmxNfrz0ODB-z(CVHrPwWaDS|^BONFXg@0j zQ>?J#Z9+%Qv96%U$}eUj$BVDra!vbftG)@75AWD#blUgrp;a>@z4<;ml(RuEI=6i8 zoVyl{{x!$H>@_!(^TVT`Fw{hw!!Z?}nd>>m(8>Z&}1)&QWmH z#)%oCVU%L2vH9~)r%V)4zL%3FP-{NV|3>Tp=I)y|;>$_9N9}Yncllq)ioewO_S<7u zefj4+guMflBu)1>I6ZCK)3$9*+qP|YPg~Qr?P=S#ZClf}s;#e{_uXf|@4tKYY*j^O z+_=aa5qUDJBJ2LHBzQYq{7Yz_srK(_>-2a~O1Q8_tIUDH(Ab4pFYkECtuzgTixAVJ+l}d3wAtl2sXMn zdHlG_H%NRK@YE&z!3{+yqejpuQpW#`o~(O^yPmppO@ zD#ld1;ue?@6Yk2zx_(odULgYgBkUA`#AQap{ntLqsm-N|N&z&k@9V!P#S>2-BfHsXj8LR?f%Tu>0Yu!fSJ8D5Beq!^f^Mg|_ohNqu#tQ=Q4I-i%%sJJ4d=rZ ztQ@(&bIw4+gww_V9zndD_s2_U3Z7RB znuV2f9Kgau^egsjYqzL?xFz+X%)*89B~>EYo@JWmkzHy_2g_ZQHn*(aWe!R1z8-n1 z8ugi(!Y3~mp1i$n2EUJ3V$XCwg(CiTPz`IB8Mi67aROmt9~wtpv0C<6;mQjg5d$7| z{LZfVdli1q&iQRA%kd+avxHo@whTA$#(!JF2%~<`MMzNmU3ToOL&bl{oC7WCPP2Y{=d|N`bZR9af z7A0ZGoh65-HsqMhfUto_9W7Fh5KJbjN1M#0!p=aSlHy*cyAObQqaIb`X_suMf``ya z9kpZ`BRGB|N$8d5|3pZ7K!Dq+F>hj^z1U1j#No^=W#HJ9lzr^gn<_%5NuU;Pg5B2ANTSfPX$e0*`K;?=Pz(SnUFu&J#8Tq)*FS( z!h<|fu}I~1IuYT55H!M{+TBgv4ibDuu(1QWNO18I?C%dg*uWum9nyCO3)id(I@M8h zW^fW`Y5!fFi0^_OGqF27O)++Nme!znW*M9h+_Bu`%5xqt+jr~pXxgaxXXv)TYf$^@kZMb_{$;KC0f~n{28&M@C803k${P3bYC?*~q7K*@K5h z&U~cQs*)WBSQk2`#jYKzid;GRAymSvK_Bdc)_$~Pde?KVVIzmKQmq-TIj&Ky zVW+FG2kh)vLn0?FZ5lef{c5zuQ_N^M7L#4ybcWJ2%ovK!-7??(m36uM{KojVyGQ+; z$&=hn#nuFi%mz_#{UMSascTz4I*Zr*45MM-(fp*_tGm1oD9@ERm_a3GzrJrD`O&e*MpM*ro2kTz z7XZB9^G{)~Vz#|+ak=jD^SdQUwvfIBgpZ|pzBj01U2#GyO0u##FcOU+b>1J zQ0E9oqs_*!1xhQiZc1s{dh(eau3rmZct3D`KD&5=f=g9$6kp<32sT~+4mLx|)n0B? zYbJB$Yzwe|UZly~*no5qi=pS|c*XR%KJnGyQ9N??ZYBQi_!hBCGaCLa_j-;a2>N#E z9M?6ELZ?IM!su631L_0M$}_~A?DPZrj+h&Fk8)kr&6_Er%6qAU`Px4EFagBPz#iUv z3?t1X!LOGPBtiBHI)-o~O{9UyaI9%Lgt&&%O?(z)Q9bo5=Zd63F{J}x?e{xES4zBh za`fd2xw7d}jpT;%L2>p|yQiy1sTePLj~RE(ngV8Pv8k451rBGVuHPzuDaEqcr&*$O zgvRB>DwS6YF+oH*2b1Fqh$GtOk$Y|2Va&ig9z=cmz#9x4BK%E`VHZ=R=*o>j7fW5< z-e#hsjUFjV>;!Ii11UyhJv?yxcH1!Pv4;G-F!n!YqGG3dfPpz)S00yadti)XOBak1 zUeZ||lA#kxkt)_QxH2v2SE+nPDIMU#Ax~tEk4N=COkDd+DDc%I66@!YBb3r5+#x8GvLN2*fFFj}9@cr9uDp|5d!~vN_;~FJO z79d!JRh^MgQOECwWXYS=GgXPm9WoVl20R%(&Oi=wCDis0PO(AQ)6deUBN$L4ja zQXoxUTp;J6=*0#QsY%|XX_m}RW$rPBQBgF;cJBJMd_vUa+4gewn)Aw5hkIrpv!&*z zeZgdhSn{f8)05gJrHF%orZ!~GDwgfqC1*Fs`p3e>^rsS&Y|TO~^&k#j9X5-%n0}-c z*vggh3ycm^z;$c~Y{`o^CAt3cuJ!>Dy-(%HnpP7l60EkjBeRs2A#YTTOt9lBQ;F#G zIE*U)1BYlzK@74+E!@76le^&bKMF;GQr6ep4y_u?h}Y`HZ_GI(?8(}*@WP@#&;la zl@Q@hjocal!?xiuyqeRWvaZ={ zIsl071Y9F9A)`n>1tj=(LcBVXZNxpF3wc z7`RMq363$#myt^bHck+qTmRa@%m-(#!+B=4dQM92=s?QG<;eTVKL?fZ zy1=3es6_5b=nGhDSfgL%!#tYI5rZ(+zARpmL0PzeruvhP^ax!noe$+B;e!{f zEF|K$bTlm8&ei;pP4bieMrLa^?&O$rtW=$aEoAMZtB#^ua7qu*=)d8}8bouViPRcj z2~BI#gHNU{Ie%7b&1-Ls#z;>NEeEW*fw1uw|}HINWQ~xNYh) z{)&1od7h?Pm%TRi!(1a+#IR2KBE^WDmZ}+T?TqXpWr8$SGetVZnTD3;2TerBjh1AK zX_IY}vCD0A!Z{tH)^!Wt^hMlzgK3AYfU^X%(VDH-@~zG7#4@IBPhC#!$F}FXT6uGO zWsyu-(_-^lU7LH!L)=3e0PCsx!T7!I680$T0X9?dCVvjw$&NK^NL?g<93lV<{KbHG zG>2&Rao1YVm9Uj+6e~bIp^I@NBCs#tsHX83P@&l(V$W5u7mNJYJ1||zZ;JVh{w36M|1o*Y3NwohiONDrk?g!+6A`?>f z76{K zGD6nvZS1q3Gn4BrA(={WhZGwBg)mOS?vo#EQu^eEZGMkRwAnLKGCC`-Bx~tdP$f{|p;Iu5-C2fHOV%!H6BlKekCRE5MO~Jxpox*&L*fqkucumKcT|V5{{*s?@zKcdC?Un?k za;v??`JkF@ko$v3(KC{1AD=J!p0hD>PfWlNfBbl!baaEQw}@`C>$Xa-U}Z4vEP5h3 zDsok$^Yh#xm+DX&yxRH&`!jt{b)lkLAIw+Lht#uBwC1NP;7@K>Tp*JR^$~c9(V5L8 z?DVh<+z5aPDd{MU>L~J-$y~LP8zTzbh^)bgu5Mj}6(iCdFCvnfIwC_|s(_@`h+yYV zp~0UPqb5C#U%gK8xg%~5mQ8jC7`jFNxR6Y zT*`!LEflhj*G*8!58-i%>%eJcXq~$o@f+Hg5sn0h zx`}RxAODc4d&vp&`-`6P@68>GX1dldyV#1lQ{Iw&_g=>6R;tv)%_P;E^gdzlK)yls zwcI!AV+&fikGE*oDt;{%=FeOFR@lIvS_slt!X5%3h~<=6?E0dPa13(Sk8cIzR@Th@ zachgr3&vK%q!wk)xS34QT4y>CzX>gfC{m13o>joTl~oW0*^V99u*0@>WzlR~GY7pU zMxW=pAYwGSV~3l*f#DF{#P8;3l7}# ztOGR;J^9A|m_Aa*f%#W^I0r6c?*r0=_k56EXI4_<1oVzQOdqR5+HNUgLJ{7W0j625 zN)-WhVFC>RUpMC+68&A>vJz&uyb8GTiVs#@K0M>k?0-St(W7$Su=H1JpV)TOb^86< zw`rbt$Gfcu*A2IZL;t#G$-Cm~_pQgh;1|eA=DRfCd4V4_qDw48%f)To#vmXl2~yG`Wm z)L-9{wsukpqqm3%V*mVngI;}oDiJ^^(Jn3chhJ%kMYsC!gL3J$-SfLlC`sWI2ku~vw#YLy!JjFRm8}Poh#32SL zJ>_LVADQb_c!XGG>pG>HXBT%ay-qnmI)?*#L9Tb^JpNXG$RS~-tX5bA}Zua|YQt;_S1Y9!+Aw8>CEK<(kRFkKCb6bVYqQp+Hz` zk(Qr;XTI#W33+(bV}`)e0hL0={(LUs5Jx0+00Ii^mHj1%M>4u%B4SFm=Qu6jS0kFX z!=njyTMfpsT#o6^kFM;pl4`MnFv(b7dYP-E*y+*P29YBc@p&-!_|LT#&)as)tw;jQ znw2!-BeQ1sYMwQUReh=N^K0{|rif!JRKFsQlkF?aN{=ngEZ8l#7dy)ypi=3p?dM~$ zW3XG&tMgX$$4t9Zc#OCVK1Lr)FBNACubj%WOLS`5_2^oo^ji8{;HnW}`2ksvSBERl z7v1I`W59LRi`|9364)C0P2C?*;?ije%0&VU8%m#{5go+ps&W--%NLQK#jeli|F4(d zWB#iNO-I~2lOaqjw4X-W1-g)$4U!?m=?x6B+1wHu#9X+Kj`BL;s2 zF}(IWI&%+_A(<1+bVO~$EoH+?sbWpLP!L6ixi}O)*qO?RMOh zcyuxLmn_ieaMFj`gkDvbWROc~e#2n$ z+4eXJdIpD@Clm(`Bk7psN=CmDiIpx9HX0FWffdaN zSKV0q>rvbghmjr2vC&(qkqJ+0~BaYrwhhxI%mg0 z)>lA{F4+$}_uiLbS(5@V5|$BrpGaN4D?wMGl^TW3gT=0&ZooGtuQ5wzt{gv1B7La+ ziMH_x$~iAM4bDJ1yDn0RF9c*1I#yWHgLz4=M+V8MM-;gXygjh$!koolI_FJJl6jI# zI}RifOUNWNS7=unQ}D(=BZQq7U7qK6t+@4lN`+q%^QBBqm}*Sk3mv*dEDBrXXFHWC zoVy~kd>Bn*_A4OUE*<2coSb==bM}}J?&%tPA6(rN(mJdii zR4TbYQM1rLx_(3}(N3>9&*cp;Rw0ek)CpPaZ~u9a#1BtnWxQ5h$Tg%)^l#0-_O#XF!fg` zH-#HAwNxIECKza3hzI1QvsQ~=Y^ePPuQGS3u6#!cGfOIbxI*$M2~?70w)Z}=tX^w> zQs{h`&+?poFoK1&u;!+`bUAA3iE^@QMr=sXnFSA_x`gp&X39rU@+sk~!O*o3${fAh z`px->{KCU2iGjS1`m4AStW_bl#G(dn)*)Yhp7j`Q2^vf?Jht_<*#I(rmQ`1<0%9RuU* zN}Tx26HZLZ;wxG17B&cXcmKNAQ63U9?gW*O{yw>_=j%9gb~Q=Z!^xEgx2GwJP48 z3HljwzsTQEPMf^T&l6OS7RHwN0@F>n*T$Xz_jqH!$OW&;@;>2A*fi=K=H@-B?zPP5 zvs)~PdPNkFt$I;+> zQZ{jCW1VdGQoQC#oJ8dHk?wT+@5JE{>$?^%FO0(h!Ipn7Ka)S=D79eJraGz6Q9s~^;OwiB2OyBGd*!VM z29C*muAslye{LV_658_Gf;UPIijsrpA|R0Rc(!|TPup`LcCF@~p6bi?$o_JDL`ov} zd|@T4Wk$&^_JKV#EmkXUDX9r%g@VaD4N*RA3dHuOZvVqzVPb_PVN%-FVqTk>1nL33 zwUxTsEBpbX3W_T+A`6&32(a**JkPMu$@c^8v7_XYh&+{e0Bw4Rq?3qzC=Q40P!{gW z{+V&^l`xP5F>TK;37IDI_ze{ri{#YFHpog4Bwa+@?E6TeA#~lcF6MNK8rPGccz&+E zyctV?6H59iXui zN^nzeH5oWzW}&Q8Fhb~2Co}VQNUMzuh`ELgZ!+&*2Fb_oZ6*EzKev&5k6zMApK=fg zldE&i^LqVrWW+gkBqtd5E#aZ#1JSVLP_h)n@GfK<7iil{(+FE}zg_L8!o#Q}U4V{> zKpEu!Ez6tiRR~!o%?3*s4r5NVpg@V5$DQIxyg0ckNj{ZvfkQ@9Ag*kc$Q5m8@#%{1 zmhsDHz&^$8Y!*I=`8;p{_qa#z!I66uvbnqV6Urebj-Oq$Ai~RjJE7c^e=wO1uf-5c zV!L_w;>I`KVaVHO#vUlc7~vn}pW>gv57_~EBr6}>my#QgKBBml zC?~xqb0%XUwE4XV%{_2|HZo|}iTgzoc`|88UML@_79V7hC}s?j)*`p+b^lctrXd~( z6&s7n^P{PUcsT2zHS9Yg!7~%(U`HU1fmkw@Q=bZxtHwy;^FqSj)XQ z-`MNLe#=&(ZntY-4z_A?^nzDH{_VP84J$L&2FaP24t=Is#RcgO|G*gBnY06QN9};# z)n4WK)}6=)d!xU~0D^BS4uYTfvx`ilpHQqH#kxvF)FvCEH-o$Vqw8t&8!)%H zCfX1UbpY}9H)2X9qcD`g-;xd$YTv=4OckN5tb6!Tv^R$kQ?053U`t&pN~_dttF)e~ z=$Dp#TGXoYRdv?8Sx{4U?|eSC&(E*J(~&3SO`#Cp^%P_FwqZB$L89`OeyCMb9g>oNYhck_YNic52*_phvL~(hNQ% zPH^+x?>hdtH!N{{?tVY=*k|#%{o&eoIYosyPC({vAO?SbPhy0QFl3($1h0h}pPS~$ zkG2oA2Tl=W=q?W@v_LOcE7-~|MXUXQCENnadoKa^Zz#hXq+%iH$zb_Ea4G#xtKTvW zXlz1tYcUb}6*)ml_Gop2DjZPlP+@zQo4r5e+pwlbdojT*U_p?;`jEcw{ei&K*af8w z2xr7D9)L>&cXmKv2pUoV$?d1s0L>L7^Nw+Tp;-m#FckO^Vtm8*4t2c8tP`s3fO#c| z&KqFm9+5I`#L)EaTDiyh-DoawRhH@~iiLpNfh7k;fDdn&4Q>0Q21Vv?e ztW8Pe>11-V(eqM8C`g*~XHKUsT*A8a1@un{Q<|2)N>mCcm&ivA8LJNq6ccZOYn!>) z0eXI%55?Ea!7|7!$y6Zb08RDyx2Mx5C4k276i--B!suY6=u;zi&;^*Vy!SCnL_SHx zILSkNxkGlPHgScv9df6Enl!ClrecC#R2hoDz;xwXVg#`k(N zOxaY&zWBP}i1%|i`CaS#Ywb^fGTBMl5&Mnm$Q*}m;r1!{t^5hJds2`VUksE%W5n>S z<)|oX$o`eEy-Wom!UE)e(Sfbw0?FKW+(LO2zgqc?464TBoMo9JwgrnRfajGv@frzAO&pJPxPOYtEJ}&i z6eE#LP?aqzeQ%-zh+Yuv4Y|%wmVR(n3Y9#nJQ)00lm!e@xq_IR;rg<3p-MJ_RLw(H ztKt{C`x1o%DNquXkciq1-ccR&-VEX3de^oY^bs^oC5h1hw8CuPR`#^4i z1K~3fWIy;xpPwQWl_-i89m#})+QW!Ta`zojU38+1k>{rypl1p`e6(~Tx@>5p7Yh|& za7hojH1SpC40;sW+3D{;q1$&+x zFEp=+o@k0=kwLZR7^LSI6aW+XN%Uyv?0uaSo^UkFri!itA@AdIUNWG6K$itinRb$g zRZQ_-O%+k0HDcC#RfIqOX0q0wS<+7CZ+p=`WP_oD&cPm06m)@Fm4GQP!l%&w22az6 zGELJ5i)8Gn_eeTih(Lj4!uT@8`vD+@crK7QQuFke5E z!o!L2yFB4((TGR=)q7>3It#vd2);d(sdAZ ze)U%*luYqjz9>WPID?qKU$M2!ztYi|x?~lnBq9`GPIR8*JU?GGe_r?z9Z6eX_%R(R zN~cwaNYM(y8%A*Vqcw@p`3ZE3${KnmXz^P`u78=*3Pvk>17L@kRW*caA)n@T2x%k` zyQ!}2l*tV=&H2-=O_YyG40}A|D(PjwJkjQk}$o+%}pU*cKS!4eB3v0KRgvyS@kWOzwB21sIERumCMkb}g zF9zX-{&hR=ZjNzSJUi$;=UX zbB5A$v~d!5Ud18VJk!}oVKjO=!a_1{zBz}t?f3pXXV`OdKjWO@j0(DPDMKs3O0A25 zPNua>?faSnGUAkld+%-OVX3fxnQ3TOI>VV=T|_s*tCir9SDCyz&ux+8Vq7pmGs*#N z6&P+qw;WTxFI|8`>RQ`vp}aGnW{cEF?(-;7k6Fcb5Y1kU4JK<>Er~%MqG9c(LIDF! z?IEukAjKgOM}sy_n$65E0VM$&bwSN~5x8zxC_@fwZxOoJjUz%~6#ViVwwzNBrtC&PyIHNyxTZ!57t@oO*%-%~-MK)Oo~wy{XxvsyIRb?0 zkHjSQubO&XeHXbOuD7K##k|)fG)Y%?8&llZQCtd6TUE-pS>0s>$u+iyD_km0#KrGA z6Gs#RUcgW)c?>@3ci*&%vv*AOq8zKh#QNx8GXzCs{&rhay3(F_Ta11NnP^jaBj>p4 z_}FxKTy@dD_d&uu(`xwmZPQm$R);lq^O=qwZ{#YjwvF1jq|jM>U*~0x+e9dSW9zDd zhWm+&x3@-)Rxd)+`@%cgcwVs?Zt5HFoelLnd7(syJv#c&@1Oo>1VUyhF&?C9wx6{k z&gC-b9_Palv8Ox{!Zq?4>@=p^e};7YT5^^y?SL6H-a6XcuLfW6f4R~z$sgk6=c zrChpGC|Vu=2I4l<0q+6vXfWPc5@NGVMU*jg6Qx|T+uqiMdrdlRXgkS=BuuiVe+=bFm29 z#B)VNOL+0P(QDE;V{VNG26p`Vos;vK?&NGzogb-+{)i*&>1rp}KB;aam@T0k>v_ix zIoWiLr+=@<%HU3=BPR$c;2$)RSf2a&JZ_icCvsMvJVw^gaxqJ5*L~8GT-R02%7x3V z|D}7lJc(6OTF8{S+_AaUS?TC&b2r@4v94C5zw6fIxm!6eQx!ON=r9`i-tWqf+01L( z-qmGkUSZU7opS9Ian9Pv%*@Sec63%|9*c0+LhO|)ETBA+g)Xe?oa1KQ_iNdnO^N47&pnshtdt z@kte1C^1i8-%H*A&OS@x;FS0~OD9oSkc3T#`6R^KsLLY+PB@2%VhU+-7v&olH@SFn zaiv?~3wRj`oF#c*60V56)%k;>cBRYghkaSrrp9iLhVlrYg{(4r}F@V`5K7NlO4pq-3msCT6 zl8w7fiVlx(#p1v!TdEA*NL5QTKxauEn`U&Wj{PUO;F5YUC%J}{RfX!=_7<3KmXgFW z^_VK6ZkCkvm?pz-N^tMRGgj(gdc(LsvRBwODkosN#FoUDHH)Q<<=a-7uLu1S31Zc= zWoS}1pjVUIDkG&A2^r?K$eWr_pvt=?q04b{l0g$$rK;3QQ(=<- zsF9M6pin;)DIIjwC>4YajA&7zvI#LH%gJUu^>^w>B#^{L9DucnNk}b|l367SHYS3U z2Z0G@mnJ@{D3Os-T7rt^YgJsNMom^6Knt#lRLz&Yt~8dJvLhGGL)G1N-)&3T*8WkY zE)tPrMVBH`3vWVcEVUG+Z}&6;ygsGZ-o_k zS>~7+Nd`gW*NT7nTW7R(TXmG9Sef{MSWrt#FvkVL?BK|Bfr|vs*5z&aoHhtFnOCEo zw3G2-M&^F~u5xp7b63U~g8rK}vikSV;QPT)@@L1s*hZqkx>|W&x{LarUKXe?=^2A_ zc!zP=8gv|*FNy`dXV~JdpT%9%ap<(alAu8h>*@W4Oj;|IMMO$hXK|sv>Ufa!E)l{K z^j#rM>0Ra63r6Uzo+rawBktgy6BPxK_-utD<>B>)zG{A#-VyLcZg~&;QE%Qo+-)WA zn31-;HQq+~%8PA|_{-CK=6HYJ7N1$yFQ6wn^D0>448wy>HOgBVWl7; zd3@mzK#(QScpn+FJhSiLIXUqlB5f%(89enxtS1ohu#=Sl#4u<$tlYhisH)%?vWp1m`qVFg(-ZQ#agzU;);hEb77igfD!-VeD#8mCQbMY}87M#0VRr4|oGA zUMa-aU>)^rRCnT1+4gjSDI;B`u~1s>MmsCZO?x=*(I7We+!DybZcTlI`>lOjMm+=B zLYe5Sv`@^v%!@Hr=HfXH(Xmdl(=iS3?CG;E=BA4PK3~Z!O4U2=?JFN7y|Rcy+w! z%DjFOmB72aI8FS)f0}7Uw3ykB^x?OCVQ|I~u#Uf_oVBIqV4JpGj3bBahr~JRLFG6+ z!UYwlzkkv**?Y~`S6ZSOk~7xR5{AEl5ooo=g!cJ4^4Me9G=*mfkBpDl*&;g>(@ z#OhSrEj}+^71?-C^bL4by;_vW$11j=H#8b;=QVV!9dg~Zdik(+%?$JA@OQU*FQv#H zhi+pt$@|?r2b~h6>c5-{)w?N*8m$#tAF`}?4*9%1!U?Zwn=>>?M4YiMVRgI9oS8$q z+TXiqGWA^ML~$^v`Q>YL*ZVw>>kb*`YD@$GBT$>xSy!Ar@2)_q_fo>8X&yj(=s)sB z0X9z-6dgW3QtjSYOCIXOt%JtC!PWToZOuD;$Vm8~x;7y*8zYeT_szk<39PfQ zu>7a|+xlM_HbzFm|Fis0>R--3y8r6^vu9^w`fp+9Amm_X{=eyec>l_>0WnZGfqLvf zng441cl#fkK;Hjp@89}Ay#MV1D=X`NeEVn54D7?d-uzQ%B>cDapX2|_`FGF4$wl~2 z`B&>7+5c+%Qv-5z3IE5?{o~DlhK`q)LCn(Tm#Gtjn2q5tQxQ{RdlORz8B;s+UlxQc z>}>q}@G$=ly?a)$@`PO=BU0x*I)8B}l#OtL6ckmQ*x%VusW%WX1}Y_{6e7saZZi(a zOcg0wZ0noJ=_{*C^B3}!sor;v4OMWsO1sATSvN>+kd40XIeb5p^0E+;e*2}A;rr}X ztT&K#ot13Nkx4(d)DHu3cI^r~NW`2kEA&;d>$M9OnjiEC!`{NMo(BG@q%wk+-}zFH zifsH}C^L`8w>Snk-7@rtM=X9r4`wBlaf5eJ(bN`g2Vz3nkETk7h7PBq9HaH5!L=HN3 zOQT0Q)_3bV7bbp5>4NEey8QjhQmU809Gs>PkPBp)dh(#I2yC(=yhYw6m19}8;Os$N zNS9>0B>0{1Wc>ei(*JXA{r}G#D-#nV$Nx2rOoU8K%&hFJ|8puYe4q_fmewAfud>-# z64NhuSQ5vADoMfCgp$U_QP98!gOntpDk4Nc)#zZXs@UoOG^uS+H)1sAn2|Ss66MjqHHUGRB^PxZHnt03c+V(oyKHl_Vfkyh4AVJQm zE{nr*)_Zl1DfDgv8rSZvqUtgQ?r*OL;W)zSS%uGb+8MEe@Np};`~|T}fWu?yH1*!; zf$>^X*tOF-mM9kcx!dmdZOrudVe@TbgcL7bc<^rn++vy19~^C;$<|Nxe!Sg zHotngqUok2LbBgj9Q|^*F!j0K7N*pfK(7%&tA8-M9lg_JT&{Wj{tL0Yoz>QWV{Z2% z1~Gyf`EYw&PxJ^nb6zPh?zz1A0$bC2RLa8n2u8Tq6=|mH8qO{Cj+bvr<#W~TE~va8 z(%{RFX7s4jo6OmB8)0^=d_~uIY2dd*7JYAS=+J>~q{tlCUFRV>l6GX$#5TH$(H z6WF%o*NSuOb#vN3u!jGmNyMOC!oIH2i26w%E;tiXH0^tue%!v3GGyc-W5c2Nk>I9a zEseUmQ8Nn7WQ3986nR6wlUYr>qveX7sk=Ets|kqE4IU-ij#H}`T>a}1DiM_I!mkR` zR*4noLkUl)w?*pB-}t{jQ$_AJlJ{OGMPeW*4KfxJeSRR`JM%j6KY?ri zzJ=%Jp4K~XZL)r|#I>~&G%K|KeOT0(JLDR=ZPtZu`DLqv+K33y=|VTw_)PMEkIjpC z;f&$RIb=!K;hknSZCxI8f}1ec3LyzGrBG&j`%s=95q2oUPLuTF-9X<;b!<&5Iqlvw zze-KV1^vR#dg?jhI&M;u&-!wak@rdWIsNEaKY_zyH0b>e0t(Ts6$aV#;DaX&%meV& zgIWP>f&-9&H9oMDBf@R58ua#lVWg;4AQ??>7Qjo^WZv*gM=PN z3HX_U)JfEErRcG^+Ff@h$4J)Aqh2lUz%l<&I?o;qTguK%odw6)J`=i5#n{Pyodp}h zdGis;UEGoBz-N6^N$*DJ>-_>LRR~6CD2E9?mZ^W4iGhC(l`Xj1XdI{|iTFXb1`_(n zmF1A2n^3Sv+%cBh2g<=E=0wYTzFCB%#}N+m&DA|)qW|0rKb zlAJ}sDtYjmDpkUrpm*Cg?NE?4LG zk4s}T;#A&m9tXr@L!&F7A^wzvsej^lCGM~(=lS~$&=Nx>@FV;W3@PXM2OZ#uQ;irs zf)1GBh;k)AX{P%X?j+zyLKURwDF}qX#o}lb#j5+$53KGWOZz15D1$}|$YKTC9xS2R#jO2?MWV>$6L_(k4(=J{-cXBoZSGzY&KYxb zVxbSpIMuxncj9>AQO9-$N$_%E>a&th&8O1D!=heR>OUt_)`OX@j$&~0#WfspcU}H<5#TeSDa7R2z zrXS;RV7~{1ZLN;;CZi|U4}LkY-$%K$rA_f>%NSePRk}mD!>1iGJ+Ph=>PCPaTQQDr z#@*>VJixu7yK{2{e-XQ*-wdJ|+ZkvXt4gpRHnOF#>sva|c7%UnADgIEc_T^L*SfoG zjqwgWxZd}?%YKe|#PI!%JLch@ z*Y+U!Kw!5-L+%sXj$$X4XH8Oi{g9IJC<*8SImf`z>9hU&#m(vcja=kan}LG z&9|2o_qcc5cOftMp5%AZKl z$`^3n;;txJ_pEnfUr}G^?1L$d659ccN(%erPI&n^{o$IXDtGW6vL5Pm#kdyZz-I88 zeX2WzG5cM&1CCoSTb5747dl?yPm&z6>p|yr>DA!lv5vav$%?Aj=@85*)S*&AtN^ct9zQEyJKH}{tM#ivv3Gx7kjHrpGjCh;o*?*Q=@;)SHM z%yw|+2J&tsL7-3jpvSo6k@wSI_rOo;6Vo+OU=)q>?CJ=#w-HdfEGyDKJb7n3E3S6HlLnFz=zVpleFv(1)ERqBESboNXqWeu=&(1 z0=j?%(1Nzr>juz5O2%jNB7hIr22>?s^NC#qY$+|c0afYPd|DO(xmy zc87}1$DF|GbqiV6Z(rK-6`|~ur?B`sE~8u6>VFfT?TdhwqT(KUwhx!G(;A>bdN!Yq zMZl%fLW{JlpRCnuh0=mPumk0b0Ck`oG1~_^P)}b-R=)^HEh@H8%;*M+ zvzMJR0IiU-`D88vY=KsQZc(%OR4f9jfCSJjVm6=1MF1U;0Ct6z&8J}zFr~D>0o0*o z`yc~qOUn95TD?XB+kmR1Y(9yL0NMYOzyuyEA)^~8Ltb{82^>^HwhwTi9?&O2t5>nI zQ(T}xQbxC;)$4speDN`EhMmQ$Wx?swdkyQygWf!#DWv$zZ}yjhqhZ@nyhUhv#-zTt za>2a8>Er7#M8(wjB$$Sw@tjrjT6?#HtcJm|A+xs1QvN#Kg$;9^S(C=(^O>RlkPWko z^;z^k7xFy7=F+;CVwNjX%-}y)@-ldHC;4S!9vfG^G}ktaHO)p%n@5IfQ4G70Wnvl` zv&11I4(*QXqYD2z4D4t9UD9P@?Q2oTbwNk+Cl@FPIonpH0zlKrYDQnvD8SxYaj~aL zRIOUHI&2As|GOp~d4+1Vs2a@*ao2EDDF+5Lf;rPNF{nPuS-5UYuSR4yH)ZwWf8B5s zppYTI$IOlVmEGd%$G7)0X<&M?Qh=CCBdUH4FDypG_7}zEtCoo>9&od~LY(5c-!?j2 zG_&dRaQdH~IigrAs{GfrC!V@Q{{?LP9Y^bU$!gK&tCk>ywr`@##3hN=@!8h#JVwa^ zvh|t|$Ha-z*2p|hcUmU@b!%8_kwSsD`#&BuR>3ZU1Vmq1Gwr$(CZQHhO+sVYXZ5vmNZ{Fwr*6P)Nt9qZ^)vNnd)kaEMUnRg` zZ$V7E4qdnAc*ZaeecN3nMAxR(O{b0W_313kz>!5aBw8U~E4)%*joP+lT$h=DE+<#F zHtpIrX?q#Lej#788SN2b*1f_$qmVVEaeUTADZ@=}zxvPDVD8!f`MUU(N{=;fi@w)- zwpzA%E!;eKE~-6r;s0;Z+gPY34Z<4S3bEw88hOs1i~{Y;eEQ`^FJsuwYUBUMFJ}^ zkm@D+KaS;Dy#7Jio~D9paA24+zyCu!6QkZn21kKt#hg9AWj$kFwQLdIfJiM6B`iD*Q-_|HsIGSR9x|G4!AhTR^bbi0g&v?=6XnS}4M=6uJ+Q3^7J6)XfIF z*NWw?1sDDF=V;Z6&~{O6m`1gdOtg#{M8(F&xdKMC;NVUf|3}Mz>mSZp8|H^Mm>|Et zM1aZOxC>F#Z{mop!DL-4f5ekxs}m+B9tM$s`+Ap_j1&>H)+S^mRE00(*(%(!?bN7-8R({sLVdhRNk$16S@EEDLs%ef+ELtiT|6VX2lK0hWjrHENB2)7nnU|rBbvs0 zQU}BbhR+{=DqtG6JQzm;}fI?hBEEh6ae@Uc!R? z0UE^NZphJTWMuui;W@f}O`W}{=)iE%(1^PS!4b!hd$i}1=|7qseEf{)$$wnv!^QrG z##q)>*uN@s=_!Do)iJKYi`Iaz_-)#6W8uq5#XesNaVg1Z{-1CbAcy+~sD|2L;WDEB zbGc}_y`V%U0$w75TDF~bvOlah?RjRy-|)5IFgS5Zuit(f5jrqW2q)d+KDdDaO4uN! zCjIBpyrd_x>~B*E$xG9d5OsXGcaQfJxW0ar-4&R;M`G0y?{Y~uLM` z627lu=f~fF^Nzt94WGn{tEp?n&UdI`!qt`H|4&KsOjg2`Qz^UuXbEL#s3A2adkOo; zOyV~ZQrw4a$bbAZqhH7Vrot>o{S%rR+q4_u8)R8qNEbqcU z#m(2vet&h~nY?}&$q!|Q9x>ZCR9M)$RdTV#t7f`*t3-N# z;Dv}*V2Vxcqh#dVycoCM&aZINjwIw}rQ~j7ewv6uEGq7|^}aFbo?)L*$nLw$`~SzH z7H5P1Hqf!#EWfn$Cj&#AKy>eca~}z{pn(Ie{1j?FUu0AeIm`*lVRbkQ@)zTWi7D|r z)8PT5(d^ih86g7;?V{e%3*cY4k~V&ly83>Yb#JiyKj!N(jqx=^1>g;+zHR@vgpDpq zMD#T8tDlZYA#LFJ?XS2CIMMNVpuh1b`3ORxM@7VS_K=o@E7q?~9V8G<$Vh=ugH7uk zBt!&U?Cj~sw;}Ny*+2h?1Q?+Q@6Ek?+G=TUGh~M~sOzb!6QZ}bH2RlcMNC`_7RyTf zhX88q@>|SBOy7L{Pd+s+xqyZSVkjJY5zHac3ODFud&%($Dak2m%#_Kgv!0@@t%a?u zUH9>rkm}t(115lh|Fggzu`7bT^?xU4cxH3weT+bNE!Ntn|ZfLf;sO(LK z7)>zx7?hOY`%?mgRQA3@oWD9i+C88lic3*TS77wb>{KuO2O@z&IC>Bm!zKZqT`b4X z|KEh32lo8`nXs3=y!v1GNq_s~5SO^e*J4tPFXa15c7DW)nV2_Ye7smaJ)0kt=eU}h zPseLW&Cd_c^3#{_^ptq#Ai27_&C^w6^psaHpbMVb|NXhWJMkY(>=Cy=VV*SMi}1A> zv;RB4J<1c3;Rr768b=b>V3B>HzjD&!O2~~1e~DlOJ1QH&j2HmV92U(xGaph`HwSw= z^rGnXfs|x|e`W20dHYfn*pZ+&I+5HzH%0)5 z$K-?&`#!M;tE{vVjlpATb=_J&jn1>b8IoYPn|N~pDD^R1XOZ0_K7m#qu{v|VuN`i~ z^!?Orf5-WS7DPUhhKc67n68H}><@;*VS10`Ck70Qfc%Djcyx4nH-l&b&hX7^(-Za7 zw3KvIH1yWCjvmFmcH}I)VyzmsRzwX5yx^A!qRZY!U^RgdjiX(<3=m~y_AMwNxH3|b zam%Z(6X<;F^a?%W_+X!vPcu6!FS~o4kXKdTtAcwSpi=?!&M~~`aG~DSL@j>_*-blc zGV$o3?oxmLSnpTM;clBiM}zIXu%AA5(yGF)Z0}+fQ#Q$WR8=+r+9<@K=2ZVp29~)g zyr3b7mRx+XzzW8S9`w5mys~nTB7l-7upX=0HXAe7-d4v&C39C#PaOd*MJ52#0F-jz z#``=_l0$k;5wmr|!29v3sDHY*H4wI@&DoQ_h+vn4iN47}Q%BvVdUZ5>{Ip$Vzqsm| z1i#Ahv?0ZX&38Vtv{jXC_VIjqWd+-3Kjn1AXZ~Wfqc`^hlBz#5bOj6UpQ>}cYhs)c z1>4eU$S^Fs^q94Xn{Y%J=iq(j2D^n_`tu zP0}Us_uW`CzmJiMrxv#+neKW5(nE=J8wy&phhb-F3(W>D1-p(O^%SRN63KaOnk5-t zj#_~j3dZ0f!IjkmLt^KzIE!@IrqF^G3yke>&wkzgj8E>9kn0rKnq0+JucvPVr#a-i z7GD_O?|_$|t)3Ew1w$xL-ca48*~B6;tZT7}{m)N(-CW;5b*i@r#*rptAA5uT;~Yu$ zxvP7I!zTma)7FOG=J2H3mrMNH=^TP7eUk2{t{fpJs3?pp~aA(I+J%7=sQeE|!^!yDEwc${kd> zeT%U-8g)w?0H2ING>`AutL6=N;7PRoDkv{3Q8x#laN)T2Ps+OdGosUIbnwI6OHMOjOdox!;S4L!Q&ZGTjk2HET9rOKI){)1$h{#T+NeQHEL`X*j`l7(LuT}&gJ7jx#s8~xpWrtvh*CcTjH4* zJcFmhc5NXmm6)7)j*JvH7^|-p6w@^ruYDkQA>-9oT*|qiJ#q$IjA6<0|3yo&{Apad_maWytdsd88Jihn>~h)yMMv$l2_O12N4F6j}V=>i-84dKTPv1b^y ztuz-k*=(o-2~Oc?uRo*7XYVpg@5ST3+eIwHTej|fY_q$ks* z)2n%ho}-*q@s;V0YW&rDM0%2DO?3gLfDgtWjz{GaJ|i!_6Fw82SvBDcKGWJwKNO3; zFo5uho7e+>BTvkmPW9y*JRx9mS)_4yK)hGc#^UxAko;1#J*qra+~`au<>q*Cvvlh^ zCfK9fqaM37(jENvS)0A+;?l+Uhp(uLD^XEW)lstUWJzy2qbrlijYXQ7hWDVUeX>km zM>=o#N#oy?onqJ$a@ca#7HSNi6en@q-DbZ7c&7INSyWyB#(i)sP4SfZLOW$hQ}B`N zsplD;OtO|8y^|jwBU@U}zKG}SA|fd=UT?_ck>o?n5EFB3yWx`3G;>+Y@w}{#U5c*F z)(b?cc(j2O@k%3?S|TYWF;#L%3HMQ?=?BGj zmmH}KAukfDb@R-?*wD9YrE96e>zdWIhW}U7It{%1wqs1&&ncj@NTVR5s>-l!=F zN)Hj$kc6Odt9A~?#m3RXJ*hVdGO03YJB}Z|YC_QxOod7XmufPpFzGNU8SdR`+^S?| z&%~9&tsLEVLg5mOg@S8ZrBqGb&7X;H+hk%NWty96&K@7)$enS`^8{LS_QhJ{Kt(_M z*=4}2_DFAS?9S@QU}5{(dU9%7o>p!9{!vJDnFK8bFFgrgc3g5Sj=S*_Z=(m4v1HcF zXK!vF33*0XP+QTiXjgZfwWz#BBYKYUmO@EaT5nDdHHCT)sp2%S(Q6cc#XoTvLZADj z%nHVQu^mO)*Q#ewrJhF0ua7+>%9B#CvbuWed)j->JgJm|1%UN~aX_nPj6jS)jGjj8 znP6dJVB%yjIi^&Q%cD?FP-vPwfOiYn#k!?fthcuu=Hj%OWLvzqgB_+uD}_B2U7F9* z(I$A9%Fp6k$w|;)UeMwfR3Gn4lhx^O3>Obb(HdfnH~WtlSCe?9h^@UtYT@_0m!3vR&oHf+Sjdc2QtpK(gYQL$; zIlM(3Be+ODgkl|6i;ipWk88Ia(O*(Q`LrbijiY7`GY5lW z+bXtec?kH0kzPpGCLOx94UEW|UK$)tgV!cS={`HUuJ}!UEonZxA6EBr1Zm9o5?(93 zb{>JRSr|qOm-r$NeUS|6gP#bG98+pV(x4eX-91;D+dsa~KZuunLZvb%MlyyK)=QruIwtZRpzL3Vy-B92fAL(9aEkk87}9BUdr6{^6|Iv(uJ<9E*$)Ysqp2K%<%)9nu{yj>L4T{NSO zRrj`<#j>jHu9AEuQ2ZBLIPQHP(kdlsix*q+v*!6bV}UY4yvJ6D#K9+(p~IaPFsJT+ z5_B#q{;Ix9R1?2@_~4`gJIKa8+g>*PbpU$$JTdN&llQ=;?!$={cdNjhz!P~)2xt)x zDUdXeuqF@nGK|HB5ia^FCHRu`5B0}(wm2eF2xIb7Se-hUP!;OmsOspNX6j|?vn{dp zaE)l1J}WR*oh&%^0IB4%G9 z&?JZO51L$=3!Uh_G#CmYzo0wYT)@E`_o&7r2JfeU203iJ{mP~$~ZdSD^?w747&LQD#qW(fFwMAYG_yFBkl zLqh`%Xf{{i_1G^oUT=*@ukll~X&3e5r-4pW2@`@<0SNxEqlw6Cpg(YHw3bL~$hQ_- zYph2$wwRoVL|v@od>EgkN}G6|1Wu7;Ofsq&*G@N|g<818g-xg$`^Hz$9;_3iAuX#o zPKivt$<@(nFBO8|+D{?&Ww89HawF2c?rTWZZK-P)U1b@ES7i zdp^8m+?ZX=X)Ou1)N^|1rtlj2^wM&UTS|!C?79fy3yQT&vz!Me!ntzt|#f2Ywsx$76(-H3Sg$X1Z}8+mneJK(7#DsYS|UkNvWv z#Vb~Jr+8x#M>5?CVxxymGvIT54Cp}P5}|%kiZSIShg*e9v~oyljn!2sAEIl})utvb z5cgZHMzKcm-fEY4# zh;LJYZC`f|tx)NLB)Y@UMQ)+aiJ_Y2x{A9W*>l~ZOB@2XNqeUCoiuSqdvV6KH5|HL z%ZHJtnx@(pVx1Y{FfRsdx(f|O1Xzk+)~T4k)B}LL%a5pLD^*7l;uz9nweFQ>MqIBB zb^L{3PNt`^Y&VDWrnoS)Xwdd4sZEZm)?W;&kwJ#}Ng~=pf5*|IpU$_!RI&R)v_@(w z(6NS>EvcLw3=*}t(+GH}Eyjm&inasGIYjqG7{1$svMA}8Uzll{)4qLb;_XX+f@(Fy zI9wfd`$hYObK80)TP2fhyln(+_@4Oz??xH0qboK1N;}kg#pGKqyZ8E3@vdAu?-+iH zexrOOxQ3gtVWq_QaQBou=(Rg3TZ)yn-SkLi7#J!^q-Xh@~#y)@@E`05f z>@5pjmbuU>B`|GLo!}w4fWPOKniAn7 zkJg>x_bg6bFi{RPnhw~rX6FA4#?tmoS@Ac|AWKJEwrWTkhz=im*P1*V;ijTwk@ULY?u~Ao8JKqMk%W z-C?JDl(z8q(%v|;2O{0HMql#e15-@A8ldj1D0fQO6r%UEM$znA*^}4Ywx>}QTUf&| z3~8H44a(YNwdlKuZISq6*S2_@l=sm0>}`4xfGu6*t|6`ip8JAdo1NNNO$ND2^THkjAK0k;V<{UWM#Y%qH@r<*4P&rL^g$VS;6{9h902 zZUEu6Z;R+#SSP=1<*Ih&%m~fg5SB^Y1KY8VQeb*D4hl!<=5Spym}Lo}pR9@R zaI${qj<-KsM_rL}ho-fBu0ow!-KuYp;-imY+8eJ4ws+~aM(+}!n(uA^J%TD-@W&a06{OX%R%WmS4%*JHsN~{o19?^uapVxP^Uu2bCyG}F2 z85!JUx1+=v(mP%2#7)E+V~z0wM_>x3yy!x`(PqR5PGIHMde1Cp!{X|J@ zw}f~JA2ZNlM>CM&seAQ!K_aQ%3^JS;oakle=U{*Wqtz33GqHb?tQJlN1-$T zZqIJPxV$1Qgwlw>RK~H(k-ZP$?{va%L=Wc>>-)Xp1zQX2SitXH{6Cz4_@IC%LLb&Z z&Cf%;wBYXtgbMvbo=i&PfPVad%lWW>Ft;O#_A~~`Yl`}|%Cf-6nnCYgbYFGDD(hcB z-&^w00UKiSSE5uCn}zkPqX^ncL^%AIfQ)e`wnec6v712V)zZnw{1 zrRO-?PsjI8c{(%vyW!bv{mDKlhsrq+koCm$Y`6nU18->Uw$|IxX>7Td+kcB+pvL6* z_f=tgDL`N?yd;9XN7q7Pd~o`L9n5#V>i)gXI9v4>gSry(3%vdD|H!N6i)20bg<8|F z*jjycI|BC*77$$JN8t&v74`$~m^KboDDb6NUre8Q5(wrDpta&&jIT$ev8w)cw)4NmY zEMC(?7~Rl#Q@|_ScKDN^)pNHl43KyheZz)J8s|+Oz(94|?nO6ZJJ<=ho3}_o@DprX z;GmD%E>GHz45PU&%~gUTx&2?u3~)^T8B6H7s^14i$Ss3Hq(_Voy4k?Im&QMtliuv z^9v|%+)_C?C5M$6(M(323%4uxOH2O!q{~EtQ}a5#ij7LOt>xQA+uk~CzN77Jn&bUC z8J2pP>-s=jTa>&rN1iAbD8`bGo~X(p(XB~FdwiAfWs`gDno@Qh==cth4&4#xN_;JZ z&F`+P_zu&|nyh;2ls-hsfLW&vqE+)K_7eiu8q#;8SQf-UCx8+183WZ!R#ppENGFlT zZ_42q$4D=F-5ta3#M13J1^ucbGCMbNQ|SzS>X_o(N3EoWEHHN5-VWMb-Tiq1dp|wX zvj$P~*6o7{xn~4mSI;UxzXv8o@}gq#*;pIIm4#dznl;Qeg0no3Y!lu{?TGXqZ&7|w zjv|-ds^hoZGF~_K*7|LKWZtUn=)K8`^3MAlxO6#)pRPvP_Kn`czNzn6J!A-q{J{K( z-kv~SJ|Z8$zE1lFh1?_e^q-c59xQ2C+GBIqbxx%S;61XG=4XQW=r`f>o$p?geG^Fo z)$e6}&@+Tty=Lvjgzma=p>wHmu5!7|V413r>4ZV&hht$z(@PO<5)mKpMe+efXx3MD zq6zWq$+0FG#TVxM!AFXHEg_2k)MqxODeDxaMXmfgt#lIb2S(i=GjGA4>hX&UpxwaT zm^w82)Z!Lc{@$6QuvB!NZk{k9WQJewoB5I9``od*#zK0!)NSY$G%(1ItZavZ{nymF zTp9F|slFkWfsUa*IAzquIod2&&-YvzA z@3#f8UT_<)*XUx~6TUCtnno(k_l5tf2uhHPBuQd zPdeSqfriC2iPF>IlA4f#%?Pc%Kl6crXdR zV#Y}J;0Zl;kDm82BarzzTKQvk;RIy}=&ojJjNhb~Q?S26C!mqDaOpe1d_4 zmdrRuAg`V@X=IFry>3!BXpj|SymX0WZR`|gfK#eur1TpWL%OdRUGRjE&{-{e3$TQ)hdcpaQnO zjx3MNUN&ul9HFNJjDfdJQ-EFpDZso7f@jpWlSnpimQhn%`jD0ZytFbG6O5fW5o~3> zTF!fHYn1R2vqhq&LDA_pX&YqFO+&hlbvIK6yjKVAU|UND8t*I(%h`5AtwzY;%5w8ykfqeY;M zD2tP$z(IIaDID<#)Sc}^QaRdoNjcX+Z3c%Uz=0RJ_M6-Wt&y!&uV8undyJs}YpeeI zn!lW)9g80s1$~8;j)g|1aeT;X$CQ)U}=zBs+123{h zZ$zQvGQPk45i}%GAowh>cL9&qHIisoXmv+4UcP6!<@6h)kUtJ4K9XoX{b${EeEm%d zZ7cM5!J6V%cPhL5^)REAeHXWGoAw39E(0EVeOZT4&604snb^;)%6!D?(&_9AI_cqy z;cJc~Aab5hS5G)4-m zZ*lW4++lh-`u#rlOcHle8eS_8)_3l;S8PzL5F9f42p*m8=+=$y;Tvhw_#^Jg{$JV? z^1&?3s@Pyt;Nj&{j($A!{&fIEc=$cyn3ySkGM#N?9vObX#Zn~7i z*B1ZJRzlMka}dxcyH_XUL%#+B8L`8_C6>MLR$>1XDX@gnLK1zrH(JK_oV~9P8g@@A zwP0RK!%aH~XdL)^)f%RhA~l(9T99GCdz}D!)SUGgVi}|Y288C^mvka&p0DNE>ZNL& z_4Zv-%K`up7rWwyzvGOc=6m<|L^bT}cly)hWk?&GZFQedq3X}B*1KCL+|}nt!lT`u zhnSgXcA+5RA8^QeRXzxh_-M?QRpLxRH)wdMAKEiD=qeqd0oBu@o7Le}Av@^o*&F+i z0hr4Xp#ZM|;%Q7`#Bl{xBpSyls*jT9WlMtZ=Fy;beYG|aqOiSic9gJ-IWEhXUA$sO z=cz~q{2XnH3I?2r{ob|bwQ&sOq#p3Hq^Xxo8`g~lp`Li@46uMHHuI#=UpdUyQMx>( zLDJxgt~Fqg_+#0N$$~lh!M4wi97*%e2r$7mwgmfZ zAN^||&?J;Qi8-WB4T(7O99zJDoqiX`UI7FDiA6;l;^|-70+uiWlk@agodjs@==ANu z;HmxS;nQ?-FzEJXXf*IHq^>FZoudQzx}Tm|1h{d%8u0aS3R`!6YuoUNcl&cKMQUnd zb+f#-KUCYLIVy8#9H6~^!1!Ew+Vb$3V;HkJWqI(@Mi6jh#t%i~94b>H$hK;d=pLz4 zN@mQ|GZG{U7zYK4+r!keDD!hMawMag%MAGfx`U@XPPyOUzTIDFE^GF?^9iASgh zT$^IHuUNE*b*)@%)wV__PY+g50e2DluaF6gb{Cc{scq;QN{Y`ZlbCBFGOIw%3u`N> zXlF%RRYuxT<#I=dF-M9l7oY$3F8$qcRG}cR=29#*86FJ(t0uq7svZmx^c8*DKR5wC z{%#cp@3MlEAW*eIrxZ`VezX~ZVp9iCF5n$%N`O)r@X`TXLDvs?J5W=lC?Z5?(85WZ zr}qO-z_b4}J()bNw9w}L-dku)xWn(ATj;c@cr(!cr1oU|Bu(8`ncK^XA+=gYE$Kn@ zHhy{0g`_LclX~7qlr6jD*U>#{Q-oE*`-D4p#_Vmy6pEKwpa_&NT;p)_D@CPH-6~rR z*I9kZSZV1<*?9n{GD()pVM+R%03tC{Vof0qc06J6h>G1AZ zJc%?zS~PLeG)N%9iM>cT<^Wj%CxUXm_w4!X{%pLQK$8fO<8N&q!JZRW@$Evi2E1JGAX~Ny0-zJNRy?i#DWOvX2Qptb!|zK_Ql#5|XJu z`&CJWaz9O+NAo8g(~tM>9RXFX=!EFP_$Zd7dW;fQ5lkP24#IQ%?c%Q`UQgwWv?mrn zf<^vt1U%meHtM7=I6dGgqY0N&e9et5i@2@OKBd0rM;_BRbhx5arC*S`LTZF_lNXX2 zk2V@ixEeBPpAXB=mz?Yp#Ewg35pWzAX~NW_?h?(D3}HD4Q$Y6xs)wiLDX%V1%6`eW zhu|GaIE#Dr0|0v|c2fqnDcn;GSuyxSX6PgT%iFTkf&AJ~X7vuv1v2;vG854RuOkvh zCTjdND3ytld?;84rsePN0EV^YGkqoKW|>bm$DVws#*;i@2*G9HO!EoT;ZsM>pM2I* zBuk)XZcwDid~{_6e&E=ANYx^>#F8V`Mv4dXqxG@o?0W`4oYc$!Dt*n zH2QT?p{NAPk-Bi?AFvAk&2K7mba8r747lq7D)E@^!V{jKy1l_i(P@yFjcNttOouFQ z7r^5gk+~zgmuiuVeqLE6^O<}V&abL}uUX%t<_EH|n5Cg=xSe6gDtWoI)Z*Mu+1pM*$1caVKU=RthjQm#$LUf?Ao`+kT%^Po z;hi|KJnOl_n5snS~1(9{c}Lc;1DqO<7Pwx3Rzs6cRCF9~j+_|t>e>3{Ob9u>_v`^iezT5+;Wt2ZNcE&5~sfSG& zdn%+P+?zemKc!)mvOa+2F9@cGf22$F3(Mj474d^3@%_Lutk*0pzEK_KMkJAjl3tu< zn_*sZR!qZ+cbd|Mmc#OT63YPYWR%u6?$8CIv86qFF8%ri9!D)$9QQXnY`5gXqY*2yAa)7=N>q2frz zT41rNoy}%jofr|NkcQ!fiD(TZ!w~04RITTV5I&nUM1>@X!4vhHj~ns@jP!Rjja3Dm zL=8-A1yrfr`HBx1Z^Yi_zZK}@zts=Y7AG2mI=#-k+W=lJ%`V)&Pu6zfcAD?Mv0rdM zj1OhvA?m98bo`2XVRqxX?w0ayGFY0Mz72hTdcEwaas%r;zwt7m#el3Bv9Q|qS;7?H z@Bjfbio9-7b}8+YuPx4cHwAyXR@}&aiN9)JZSPhcg7`>|7RDV5voq6G9itTWWB|wD zPNiyyaG+X&O+kH6eN-22rT20NeGlK9-&IRo=P!q$`B=~;996`Qjwn)uRHN33XQ@Wy zC>B<*B~%SJ7!kwjZdAq#wgU~>AYj4%Nb(>)KtB4aw$y&29MvbfV+mwVgB^z)q^qGU z2!mMK2Czf+OQy@+)0HxsEHF*BlP8w1D?W_VMNDbmR(Lu&Qfco=($8^)D=|-&;&kT2 znwlsST$$uzPM7XcY-du%Ni;jgK%+r(#h*1`*$74T=E2{ST)&Q6E=^(+;m$2t4?W=LjUIu} z+F}wW3fleTN|14DkXAp1=E^0dPJHtl&FWRF(ngyTA7}lRqPjzOh((1X=BNW^4*N_I2ZcDTCh|7c^A+leo*HL>!IjvL@MJLM z^d93z6wzBL%kgNn1$7=aCgR`hN{~00BQKqAe|kn?DOCT5c$CupEUXm=;+`J>02fokyBsW)GDO)0pRkfcY3)S2n6CE0jzOS1Q(}zDhZ!rKl zP75^VwbvY3_;Q{A?TU9?_!a}~Rz&0=>rQ6Nd9zLjw*BiI7H%D$9fks;zu}$3y~E$b z0mFp?cJo>am-c10DHbUvDK0HFbX#PAHcioa0> zhvg$u^&30I*$G>kjiHn7jTPr9d`YUsBe^TsE0`AHbR3$*w;P_i6hI&S_X3nn+Qe4I)VR=Ejq9;cmr})*}xfSKkNeNQ$5`!9FmEjBN1Y%~P z;ivDMpFPWLlpC71bMi0ue@LUh(nq{q9)Ceph5Bi*UBfVzs+uW>x#b>g$*@TOA~;k< ze>I&2J$`&ERRZc)4Xc%u)d0}l#4+sB2@_VdC2X&}IPhkjAmNanRp(Blayx5L)w3#t zKG%iV5{YutxEa+YidIMdT61$T`lb;FQWVw}vj#jetd-LENn&6R0;vp>9LeE0bcp3d zd&Vhp>_u%=>UL7b=V;nZ&ewhva@0Z`@Hax1I4ByPdc%#@A(s;1mXH4QsINwys~I>il=rssQSl!5MR zW7p{pmihh80l=S$a*O?Wx(Y#&H*4io(+(k1s>sA519nr~wWOb0#*8$`VLl zj?F4Y6|xdf;|zVX5Dt;V3uwKl?frVsN)`Qk&7wHXKq>mrCXm3hPL&-~74f=`zs3C1 zb5*Ws(PMZtaTv{sQxaoHW0r584kRVy?eiLSJOnr@&QK@{DVY8nNG|LvT=$Y>u9gjx z7A1WggHLQ_e16YPI|@C2&(AV*Mz|T5XCv?cRy58m61P{AD>s<40hgr5&GWKqq2c|h z;v@$v;%HFM#T_J3GNKyd#tIwB`RmjxI4vDm!Bu-v<$0ad-`Nz{&Fx9S>W}cCnvZ=A zkVBs^dDKtFTWK+$PiW6b)oX(*?|Uj-alY1@Fu4g`m%3Sq;_CBFB|yziTe(cbwF zwF7lG3qplR_~@JS@AJPTRdC%xNPj8&;f6+T*Ie`=Oh~t?wQ-N`gHwwqb&Y)GEMO%P z{?vtYCIzLl3rk7vIF=AbH^EiSYOoHHDtaBf5m0Ry@NAamXv1V$hnJWtm1k!a%Qw zXxBLuco^sxFxGulg>TF*PmDTPzA@KLSi?aFb z&FCEy8vVGjy!F2S&*6C492$LE57*$SC4HbNu4^`KoQmhn z#n0jC(W0?NZxNd?TpI#rUdxJHAq}!MN=X_e<<0P|b{1xxo9JzH7PpJ8vaNngGc9@h z-%)*A#CVYDvGI_<_xh?xm$!^~ZB3_Uon@;Nu%E}B_kXjGj8XL2Pmo3DE-MaAot@7% z3f3Suzrci6U+M8;H6t-d;#z9nBUR<$!yA#c&!}p+nnL@# zixJSZ_?K@tdev?!Q)iL%z^Qj3nAQ4ShZC5idGXe*6@h@aAbprqdP6Yx=%47Ea3jX% z-MPZa#^dh1&X0>7V}dyO{MxFR1|#!biGxJha6hJgWl6oSGU2VC%sp_0^si1f-fFp3 zj*GZ?zlbM#!Y31WVHgDcFU0sm7W6bFWTypLgzw05cZR^q47I zW;hu`)0i4aF-lFD#zIAXmndu6{tW44{P}fIMs#!3(Ifl#H!ye}&}Y9YAfEuj_N+h~ z0j^eg)0W(6OJdf6L5dFG-b^{Tk~(MCQ(5frT$+N++@HFnkCAuJS%v#c|W)0ESAd@W8Z#Z)pjw(nCDoa(4`YFcca~; zHNCysk7M9#y9*P=6TKM|{PxE;X>%}~F?v}0uWl~7dV7%h7FK-j1EHK)x6EJs4nr%h z(d#r2cHMoLH&!yR)uw3I76^5cJF33lbC7kaORNS4(fRzVbiP|jjx(bAAF=aTWf{T% zFGTQ>hk0x~esbz^JnH$q)ovLHa#YLjQ_MC+v9_hAqGioM04FA%9lUDCY z2s&|WQ!j{?Jx{K@J8~}ucc((m6V|e%S6F}i58)T*vyA+1r%$-N3OiNB4{ovHu;A+b z5}n_Vl%-mT61zh*YPzy87kH+*XB(K*x5hgZQz>TZFAeinqn!&OpcuceWH(5@(0DWo z@t1B_nBHHe@&45|HEGm8slQWeQFjWM>(Bg8Fn7rx$Ah4BwR@{0I=$CpSrz{vn))%hlKOjCe#3pK;-coFrsk%y>!#N7 z-m9h9R@@3ox!!2({3n1$YXFjJ4T@t-9ciDJS`gAmzX3RDF#Zo2vUsXD7g{VVBQ`jR z0y`24w?rtvD`akU8b3cW*a9L3c zd!Yn+3+8B&Zv`^Z&-TZ|GXA1qY)tBdhS!-GH`*EmL5)zDLNZ+9xV=v60>Rtx>H6jNlOZ14G8 zPb@@s)3e6z;aS$x{+iqT%RKZJ^tYRInP8vN%pZKI7YMJs2c19p+(-u+4RP6m*O z?Ur-pHnCW~;!;m08vH^7KmllyND(SB@<~h7EOIo8WE4y=b4$ppU^l<#27#E-`2)a+ z%VQU*3)Lf*N&nC{W?`}7mi6U#kp5va@%FTIvHV;@A*j->{ikdi8GfS#moxlYv%kH6 zIWQ$;0E!u&&bG0!A&=euPijwo5fm4l<^ZG$j1MV*nBmtxtOjfb>> z0`wVLr$&C-)6z0Bm==p&Cf;Cu$1v@$oVPP&wQ#)>?&3L>VOAb=Na&&rnjLf zpoaHBV7TiIyAB6KDkbp(>sWkyQRnvjR2_$q zB0)qiXq}Aoj1X|#Kt7ZV>Zuq`Q4wEsf0m~*E&J4uDS3to*%(wfqGhlSR4ChGD1g-5?&0JaF;u=G6g`CqjW18lWVUWKbMRHsGw@x;LrL zEgb3r^QZm}w=-V_rZ9Y!`AQ*KkwGYy0Dd&K-nv4(c*9W^*%o1HHlW?z$lJTa3Cy~Q zjo%ZmOmgk%;<_f;Uxf7}G9_ZcCUi6U174f~7t zN+L6dl3*Iq!If*6Qf{q0@fOYDB6VnYmbaB7-ti-&Q38dOvivW7_ATUG%vl3?A}>>( z=F{yddgv3wPW6E2^Bu~rigt@U+cfyvYS}oqYS+K`!kT6GL`L`Ih;QN&r^Cj7GMLg8 zBZ?`CM~khtXV~?T<>8m zTBQ3LEK2XD$$r0uvB4WaVUB4e^!yR!=?^ryc22ln)4|&AcKY7PS$)!e>W}jc_JsJk zTn*3v+>5Du3B78lNSm|TPHHKL>wEow0A4_$zvEwGiXOo7aw{`Wxu`I6yH3$*lLzZN zLBu3T*+^p}0@LO$s}zDTHVwb?LsR&RBC--XsvRP-6lDn}>>OnD&=3+h3TJafy5i$F z!@}8D$r-rw2G5e$H!J68x*Vbh3^HCD%^<;C;LIP9LG4q@uE56fZ;(~DO@{Ri^s0r7rjM1-zFiZ>8JZh*W!(H*4 z`YI+FRD?`OEL|bPTeHPVkoB8KomY8wd9U#83~-1svz*x^7~Pk!`|11HdxU$XyTgA^ zf5&&s`3w4W@mJCr`rjF+V}hG7P2#89Z~i{_qIjCanvS!6j%LijCoJZZz7}&2-D@6_ zx6#|oSJTtGwLFYHk-{coe$ISEm3-oX4lfoI^WjetjiaWv4Q_#Y92Z5V;Y--+a za8YHC8*bIV)Psb&I10-|>|}1aE|U+2lzF zYoZ73_3ZN;@Gzb;F4qhsgv^@gvgv^7O%o%TR17#-J2B($(zYqGNk=Z&1Q=YM0@yM&j++&X^C6)N7!>o`v>m@9jJ5Z= zG1ksOVa=Iwta?bv1l86?O^u^Xqeoc^(e%_9F%C!wW}3uoIQ(grSWQq1H7j1Apyo)r z#%T@6h$BI5E2!<$w|H%f*S5@LOSPG6ZpmNsEB2aIAz^q@SG*3QkBvE5ubykEX)p(9 zutYSe`M`gL_UyUmin|N4`^R5-?A<>+_3-nn_n>bZCI9Z0t#{GwFMsAUyKi#s|5t=w ze;08-d1Aw8yiL6m*Tu=0~MR?ehh*#9}$M zE4wR4hfKDk5z~VW=xBsnU`(nUi_Aryi_j5!JmE#TVQl=Cvl)k-HF3Oz348%v{@nxE z;9a2KKZ3Hk1th7~bOt#@yY!$aqBs!icPAz)q}{MVYdbr&Hr_~D)f0+VW^D*ae3xy~ zwrD$HV{QKYGYrdcdT>W0%E1-zmjI~lz|C9Zr>2RwzN2Gxx}$RyTec-V8tzD>T%KgY zolJPrAu8pHhtOZeBQZ!?=gbF}ZmimjO+dXG0Q3+6OxW^sH@nf}p~S^oSKr8_H~Nnp z89g@jiO~&}h_|^@7jEz|MNp%^nTHIaA?7B+<4S`)b~>5rT)d8Cw89Pd3t9s zptzf*s;fobY5bO{ucb3cd6<@HUy$-|IzI!c+39qdO*0APNPvIHf%Q-VUWZHQgjTgU zES+?F=!sl%7m4rca~|X&W4wu4h)^&cCS+ z5E$v}m7V3C>dr&>J2&oxQ$rS^veS0pOFgKEcyW3f6%P_Ulb%EE$obG#Y~dws~5 zOf)q%H&z-MwktW5EGDwa?TKw66l#xzsQ&7pLTyBy3U!gOGeiv+21C^4xoryS_Vt9& zNNPt2ZQl{z5X6TE+o^%ZJ_YsnRa;bglLAplLq`Z*TDmMmZOvS!P@BD*Ld4Y0)g!O^ z>cS~0vbj6SADSKqWj94so5~j@OrurF0lucwPdfDYYdx-t^$w{E!g?sC+fc*}$mWBb=wuohwhsALC(goMn=rt*tYaocW+*fmP3<2y=Z*z zC%^i^_wVkv*sI*GO0I_7eS5kq!vj}uZeIIysk~v&vq!(vTzU9k(WRM(#{PCmHL_-J zfH$&RCTE^i<3 zXY**H9KU$qmWsz?z)GL8V&U}f*qUph59qov+@=EKO1zyXijeokVcSQ7tUmDa08jY9 zA4e=apACrAmjrDo!$2}xsiq1jY7hi^BucIkE%@LXg@vk_>B1l)61gK&!O$ ze3P`4(?*uDfw;8JHXN-ufF-MBjXyC}!54)~+EYAHzdTX7JWZx@3T>^r)+S0@?=J)B!cU=j$AGU8c*#p`YPQO^ zO<>$CCdA}S+iaU*zHPDXL>rT1(Qw;D+awIBZAdZsG7LMD>xYv3~xsV^4I zM3M`PO)bW%sbW_pQtd`cs)Zs?iD8x9F7bX}+&s&pc^--UBtOT$!W(!HQi%c;jThy@ zaABe_Suo5LW()Lu0YN##V&O!=P?%_ad><)*(o)0$fv!&#U+L_y*EIiGuAZvq3WSU% zHW5sQjQ$YfOaU$o>RI=c5yvosSQMyeQbb8yvXHB*>1vVzq-8`9(-4p9l?J-Shz9q5 zw(HW#pwq^e)wPS=Y7@`M-Q~tl_PJ|4Ya1?#xqPA=aF=YzVSHfq>RUE%zfyf-?Rz^E zUnm|=C8bMI_m{3JRfg6=R~6-W+{w3XXD-sLM~KXH;1!4Y#X>dEdSvD}6~~GoOzLW^ zgxsxB;>n1T1h%Nt$C$AOA+p>IX}ct~0jxlh>9BD2r%%DrW~;9*@p0!jM|E~PS!cIb zj}dNDz#ZZpitdf>!)mx;FXrJ17O@1$60039z&5Z>j0RuDLVbB$dShJokZ6&ZWy}&- zX6B%P^&BTy6~Y5ivWDv%?eEt+U0qs7^|!XNBPzJM4zV=#wYxPN1oPLC>~qK1DcJA@BNMC&SfoFp|gU2HjXCZlkwU3 zq4?>zQHc-7X%$v+P?$|k71FkC(Aq*-Yhwx0szraGf*Hiw*I>;=9GERq{w^gF?H2rk za~3~JjiMR^>N1&B$B>9eiX{6&h9StTLYx1gqZ~_o=y>kHn2yHdJPPXxN7)e3QOe z-yz>=pV4M0GoFY?fCI$2=q*ZX{r8A!3PbI3fvJ753>D6VOEOWU!VdkF4w#!pr z4ItK!a_~)ewpOjVBUt>Yx#8Sw?%TF+hY#gg1#isc7zvM@$T0y^I;C`_BI#~FJQ6$N z44AY2ppp?d&jPZkR*9kn4u7&Z=R{6$e05~C*R1wdnPSfC4dC~yQ7v)(!IR>3T$X1Q zBq|6h&QB|hq7d)k!r4DzixGT-N3ywpio!c53A}m)K}%fO{L${W2G8KPkHHo=2Rk)B zn`f7UM+v>HOpif{T+L3Plp|N8&U?_LP{byN6CqI!p@=OAC{`CFmhK~1fdV|R#@OI(LL<;oa~eo! zNfl+J!vj(g6J-ftC=&f&^Z;=c>o}oU#|cG{q;P>E6wHwFg`$M)vLVTP1Bo>GAb{-u z9ixRLRmHUDXd!5!rIkwh1wo6GF~51rELaJ7GrxI~XGyVnP6rXIxy8lB^8qnkPd|^P zCL}vFmNlmZkx9qJnp~qDtc39YhslbcgfdE zd+mGWM`-iAkrkPqG2dx>o_St;hki#~vH#v->a=(II^{N{v(_U{^Vf@}5}lQlgpw@P z+EAOsxup?wxwK6&#H1Z)hxnHCC&_q;eT)19^AGs{$s4_9k0gg>c{9CHWG!~lX$=Tr zF=CV1t;~pFt8q-)X5Z#y{bD#Ak+;$YUF?@ye1xWv#PF#q{*G=FkZ>#J4W9L<1Ob1v zj&6ukFj|C|BWwd`CUP8i{zBw_TbwAB{SP2Y_^{x^iRr=}qz4Wr9TrRn#fduALXo^=&*E5ONq zcw{h&FyTlY9VCYu@?-8X=^Y9m;L|mLmQt-1eZ#&bj)Sb2>FFs5`AqBSG1L^L)x=1c zZCu!1k<-}n!b@1igqIeftYz_trDlP~UK6#(tTm9}@FbQl#GR*;EJ>oVgUteYG1aJ> zWjW4CY?|hJEja@Hv~`{^iH2(iYCzmmw&qJ-FL5UD98O5uWd>O(`&!=7YEmh zJu$aMv?&31){Z3O10PQQbGJhfTwz*K=wkcpYrniTTC(x+IC49^&FGr76Ju>Y6p!02 z-sok_#<||0JqD8IB8;#^ENR^63w3oQcbdKsS{~5t47h;n-W!&no^saSw76Uff z7f9QY-T1%g^)ObrC}8B81X4;DS#ZsGm1b*DnM0 z3*gRQR6iU$z{6z*a^&HLxGZEYPL038p519c9SttEWtWWkR>k!N1+>;$2V zsdwJmzisq6s^{$6)MmVt@KQee_OXD^@59Es_BR$(Lly4C*zY~e3?}h0u(oqnG&_ck zY9$l#EzlnxZD`Fz8gWOpGz?@Sy?qV#OvH=r>Z7q-CQ@EttVd&AnMe=rs29gZQiEOF zA|u_VOzWUp%cM;dm+0NT171ubFYp$QH5j?xp2o7z%a397DcR%EvVta+d6-lORaLPy zQ_RKN%B^U!b-tBug)z_Ij;{E?fIK)nNY4z;4${=1G)NC(zJAK(sSHkxjxEqvV4bzk zw}AHCO(5yHoR%|Sm!Hy_j!OZXLeeY#>m>gNi2|!|`~Smm*L4Z;s&kz8yc{_<%&oKNFF>%(Xn2pK@bTvDx4Ex* zp#PGosK?5;T(s8VY>#?*Lol_y`l$h$c5moeYaFOqjM4m1OLc3(-`Ky_-q{o&I5#CC zSB`#fkC@Ev*>zKY|Hy{h)^6CYc(8%*m16c`bnj$Qt!}a8*7}LnkG0a}c&t$k=Udm@ zSF{A<@nHK1y6VgMIvy4%iuvDIk~P!kBw3Y6vNFNLjatEUC#sXx*{ZQ% zKq~3a;H~*8J6}CfrRS??0uL-!nXt)|iHMrxEt84F`x;D{h^;Rc&O~CGoOlAx-nc2*I zhM_W2h9;%mX3X%JiHhcY%l+q_Zw{ZIVGRjC;|(Dr>oW%GY)lFvNG$}KCcd}-ujdVO za5nVlvqFm?0l^^tP@3?L4<{h%1 z_}s)HbmQ$)pIr-&d%~F0diS7hk8KGM&jl9Rr& zp@o0}cn5YuM|HxWfgEP=CQKG7L1~&%OJUQz4(F3A%&;Gh3&6=ips9etMJUcCNCd%2 z1il#v4uGz~5D^3|NrI>%ATF$nsCpQ7vt!1MzU6t!^CR??{`vIQ{`uj{u6R<2T=JxBxa9IHMxTXDX!t!M_}wB< zftyCZM+KNB%0Ri8rgx-wg6lT1b{IQfLEeJGj)W~qCqhX+!6xmZOQFIjpdgPK_k0}g zIjxd{f(%}{EnbE48}UlFnd^Tf6ByGPraH7~RJC7EU(epc-(tJPag*nI-}NEW_}I8s zC1(yv_F51xZV1#^v_K8G%t)wK55u&ycp+Nra_9jUnmTdEr*3#<-z&FVbNkC%tDo99 z_t}r!@rhpM@T2z}zV*YI$L{-Ycl^hVU7e5K_Tt*F5B>1W{S%OT`yXq4%rltQQdEs@ z&}l8xPV()W_$)LK4uFV=(@!Z(#z|zbQz7a03dA<*c#X(iv_!<5%&+zXmG;!et6=fLGR%fCJ(mk~lPh)gq10?hkV+N)%(sOx19D)bdd(H#P z*d)L|+Vo(hDrYq%DoG((PE@%j1(mFL)ogB2P@|=&{MGbeB#wwlkV!PV&rKjm=rC0W zFwLHIF$tq4FrjEr2RbwgBzq4G-FxNK-%dW!*OG4X*80~Je{0I=mSPcK0#(emPjB6G z@nu)4qvcYZsZGCn^GB}z+%Hxh+2C>(NhRT27;5^^CSGp=4I}+EWBVq)^BSSqD-B_pYBinnC#E=58HA52_YlLRD;F$~3F z+`fxNDvQ{noJCp69+zcVK{Lv%LQ{%_ar~lkLNO{6na9u7X=q4%`qb34K9R%p%D7#x zHKW!A2BxtV#^TN0QqSJ4V`J~RaMuNHnStwWZrxIe$9A|K?n2pV-FWd@uBXAz8?CW` zoZ^w2IsDU~Zpx=xHoG!ctz9yZ!YVfIA*grvp^HMGW--0&IeUu!XG|}RhKf!vsb)ei z%_`_n8j*+=A`vYl1_P#)0OP5s2$2HVCxW91>`OM6h;V{>8HN3r*ggqmHJim@*l% zo`|Dpq_d5jb{W5;--teCywyk>6Irf1g7!o{6QLsshXuhM{!tA8wTNPKQ@~^+STp5- zCY5S#(&gHc)-FMI<2WqR($aXRv_xuS^m>JiIq%QY4o6Y7)beRd&F2~uu1G#2{axJ1 zb9|c5Of*k6&or}Q^8!-Td$5T7iS;M8rT9|fm$6slujk(~ycK&Z{!ZTF=**Aj|E6$z z{s1~aA7EzOGl7}lOlW`MK+y`b3h<0sU_*TV#fFz+rV!(CIYOSWKNHL!G#}(2Q67pt z6t_5X)^xrvKh(Ud`KHWG`On+F9Xs6oHuF|U$e0=<)U$L1$*4pox6B=(o-Hn*fNIbB zBK~KCk$@aPQb57q9PIQz>w%pO4o5s@wHU+{X^au{0#z(!8z~CD)W98nzYo&vU7iwr zvGmIhgdC7C@_Wb!VqB_aQbZHtq&O=w;sR<>{i%SzD4UQeKbJxismat#icwPK6rFko zDO3|up6stP2h{Ep2)hcoif5x}e5_W&+W*K|gu7&_=QA*+Ac?A-T36JMu>+6Mblhrj zS*@0OiT{{Z<3B!qL6tx5>T~%P6|=QM<;JwxQ_>k(k?brd+p&4eW=tUprVXXIv@wJ< z(NFS6NX7UE-22k|_7BpA@iA=pLLvXC>Yqb%^c*v1dDuGZo(;?fXF~@Yz8sq?2pGiV zAmaowX;e!oR*K)3eoYSf(;={xm zBU$n1Sm6SvRfiRSjujt+7oVLhe_cp*;UCf}t6<^+5|k$s7kKMc2QW{gy}4f65>Kt4 zw1A$CCU3m5XS*WrdhjRDUcc?ysM~9eMnjKYy?Mt+)_z?mJaTKxV6$Cv2+ZNN7a#g$ zU!g6XDfaIE#_b0qd;s;{|G;In%~#ECsO^~gidVGx;5Wa{{(b!jNd$lYtvUacQ2O%~Eoj|?g2TvezB2QY7MGPYMCtT-xN$=2>%JuyDMC@o7%vzkPX&SLY6>i$|iu+CX@7;|1qpsk~lm((Qc?B!aVktZyro$9M27@u~8g`-? zC!(B^bKbe=JmEa)WStYC@9eJwxK*u?ahy!r4fE+zovWv`cnjWj3Ssq0;l+VvGfC~j z$ZVQqjx@Vtb{8SDW>QsA#Onrv&6i*;ip|G{^EL|y`P0Y1Krr!C>5UxZ z_+rq|DXqL$51?zaO1_a>kE3>Q|A)PA0dJ$Y7M|5;*3!y)TDBg3tsjytTbAT^WRln+ zPbYEWCQe8~+@Q#^Eh1ZvB-Mt=Y4)vuDnn*PPj%os}k*W0jy0HCA1z!va_( zlp0ROo>U0ZlM43iLbS8z7Iqe5*#$QGHK|lik!haDOZRS_Ci<*}7BMB~a!`Qjp2<|^ zOust|iGke}qRCojI|i_VOy2kcv9fJpH?UODwIO$hb=@o@ut_o+o~S}CltUTDKM zwhUi=G3|u{+4W|d*y!*d^???zG`X(;}-P%W5vjLb+lAG6}{4u!0>eZnfPeT5UF;S}?2C zLayCjs#XD{%HWAose+I!%LHK);_Wt#^&kh`(*}Vv2&KYaVN7^NAi@@PE>&Vf3-8^h zx?lAKSnn3KZO~3%Ul-};P4??eb!vI4FniKlQ%`sIW!5A0VHhqQWZjiwHYca>6)(8U)aa3f3bniTTj}L(|yb;eOyA)b?RMrO5xPhS`X(~>Ooq} zVRJGfV5(oq(Mh)V3Sy478JyQ^_rYFWs-csoUWO<|pp!?1EWb*GFa>_{GipwH2PCU@dO^xNI%Xq5`8%;ik7@bV%*As+8r9 zLSD~PHE(YAdM*C+)mDAB z=gKt_cDK8#sK`?#-#w&tHFq}C345$EY0?DaYVO@8wpc@6bA3)33^0w3GSRca6IKs+ zUU$4+{(<9z@=RLbo~(LS?$O-Bx+0Iq)zy%1vlZr+7(7bBneTKv{mxaEn=Ln6Z+5CQ zj>gi)vgK$g*Ot+$T3EWEtgXDwwJT%PFlzjYV^{eu*Qn>)hU;iy$05W0j{D0W_B`r% zwEXvu-nM7}oFD zPp5YsoZQmVVs(^?stlDnqtsPycDc$y8ysammD;RQsUbSCWtR#LvmiK1N=toKo7rl$ zxtt|77_5W+2_T0<+#6s-1>76^3pu@!9vP4hViV{E4F(v%i%3B;Ipl^SV5HVV+{MU& zRNRkR^yMu;Y-wq^Mm((#2{5L*`@mroa+T0`8?sw+z3nz`pN)IS_B-24;Pt*%>IL)8 zy-(CTI0Fb>p40C*#2JtiWrKxhwg}!0POil{>Qp!(Ksun_Qsz}X0A{X&a7qwSIX7B< zqFg~=P`DQ^E#H^HZhN)6xKS5Jp9P4n7S~;_!>*&Q4A(_fsi^5VeeP$oA0IykgPzT@ zZ9|qFGT^lJm>ohX`b&PQz%I>Sp&?ds=?DovE{(J38ZgWY&>1bNq&rZh=X~llVCV`k z%wcS1OKZ{To!~C0uW%a7nay-yLSHM%qJARZZ%Nyk>F&fm7Qch;vf0ty+5XfmWyy2! zlH*_t!ANc+=}6>bt^`YdM9YmrH+`oii;u>~LUYWaG`Uc+AF&DKNC z0v*vC^hUkA&`@YBbh`wX#oHtpnpUaTHMBP+XN;8s-6J!&8MGloUe4=r)>#E5^3XOE zc=Gf89#4}$>Cn91=4SQ@66(}b6+Ya2`QqR>BlHssr zWR%uB%=Pt-%$%|^Uu~wjwl)(aZ&hbnYReop%?z*8D&WkzjCy?@msbdq@Or2ipaVA= zX|L>2R&iBT1qJy+CWM&xMsv6vkK-Vx+b`NU8}+N1hWZxUUAC8PCu~ZZL3?A{Aw>hK zMHyVrJ@uY4@CW-*EmwO;@d)yxCPmx+qQ`eji!Gg`a|=5wH_Kmfq9dDRZ%bdRHn4cJ zlLk_3U?VSC$W~p_$;&TsR+E2=*ZPLxSSRK2F~(?q)1LM(|}D0bRO9U_o@9BdY3^%zdi>0Y&u9)=NX%| zExCqfE6s%ix^Ky{=$Z+A@{~cBX=19scw8=;`aAFT<{e zuI{3R6Izx-?@l;H`ZGeFkzPkvZl*!PJtk>qltPAFt=|9)Fv8E$V)7dddcP5V?v`x2 z+%xqGInvI=K14(BeVk~?%Jw&?vi;>gv)=_jqbi5akOO2nepibTe%byS`h%J+w08KJ z(x%Rx{deXa5pLQE=7y3tLfAaJWc-qmm6}%vaZTB@&$%?xI4768(^XWW$(gfcQL&S2 zs4lHuwdGjHBL75tl`X4f$F=jSswSQ-&2_Fje8=L?%>u`iXR+28ihFy5_UwFcOV;Ap z%@YSls&Q$lS!c0y9yxNM(ORY`EhXms;mOmHMmld{VgWu0o~b7FgbSk6$_k7wDdWoW zVZ^}h^O~t+GBS`ZLN}&hpn`%m46Her986RmuY3cxX7A&jNtY#iiUM^d$~PMom)3AK z$OP`81y~Qxsq3?)x@N-sqE@Xv)!pKHI>?(l{2^oQ+@72Q?I&L2-~{t z!Q5W=C8`lQbCB$bu!iVA^ak-CkB_wE`w zymzWZo89iK5X?}(U0KNj`^pNqq{6ON3Mx13Z4hawO5_l~jJ@>?)RuWm{Q3Gii^XoE z(L(MXfqO|fK_6)i2yY2k*wUMbfdT|K|@IX#_rzE@O;dp5W^ue;f;aNBC@ zZl#lZ=)|7RSlhAA&Bw-1cG7pb$K?q z9~FwTSe#Fra!yCGjhwXlS|)c}c2!l;OOG2fRK=BCg`?c6woP2saOdaFTiWO=@|Oz* z3rpur+@~+H87#G+!)5tp^CxP!f4a&|YK<0xb!(BX`E>u4yXLtoYIF3n*X~v9FZ7gT z8ZxEt5a0-CZ#H*pi`S%5T9td1d$oIYw<-@RGxl0Itz}SK-O!HK=-ab#uF|5*(tlpL zLjRKTs6Ip1%5n}{aZBbiGGcNyW@$wfp#e3|?_J(tjP8}w1VLhn-usCgWmBuk|A zvE)?&)##MLFekf!-qtE@sUhTmP@qxj^!ie)G-Is98ii8NW$G+iT8pxsaKxw0Cx091*fp(SiUE9 zAWhQSh2ElV54grr>L1*#PPp zc(;DK)1+(b(+}fuMQq`|lE$KJu84gj2CvtgeqM3W#4~}JS-Hw`9;5MZbIZa@ECvl{ zoA_%fuCSHVES_+jex}4N_R#h8-sFCvG%9omqkL&SJpmy*NiL@M>N3MA2bekMG7<*_u!Re6UsqVXgi1>>6BKBBe$@;SY_0dw-k?Aj4hfmWWfk~!9?|JbvF9) zb480jw`m`^_n+%^g}PB4*3mq*vguAUXSR8~2f4)lqK@-FM61)!a{J~dR(0L(bT+M@ou|_o&a13m6k8R(9ZgOqxxis`1R>@35ww{u z8L2>=q5`{M?A=M@*86dY`y24ejxJ~^LNEYQa7a*bNNFG{bBlHi;XKMBL!n`meu9Fl zxR*3pY`J+4auuiuJ;lvJj2mrJd}up)T=GRoT2GggV{-O9d}=K$`XVj&V7DVTQ==D5 zxyJI@g_Zt!7q2;wY^t1HUsf;b^%?4!RkeA}SjSL+eO2=jp!FR_>++U-wGBKjF{sUG zOxt2+RFWpWrO+};XHs(&`wi!ya=i2SlbZJzIN(GSGCN#A@>H)t=@y)N4>9m`AcG&r>`ok8m+=rOda<@|M~N2Uq;=p zxB05m6_GaTR41MFaEv}Qga70-j->u=?)<3lq>_)wkB6ECjaJCX$*Gvx)_DG=om}vO zHbKbL=2(oNmJRbFS56$M@ORDvrBkV9R{9pjE(qUIT2U1`uSBO+sb*LD77T)7QY(Id zb8xqCPlFX(9|9}B4{>-uIQ4^f6V6M$nQXw^EfXg0P0n$Ld=1I{5T0b(=Fy7 zX8$VZly!rBdG1&9|5!LE9xZyi)afvnjku~Rf|b9n{I&Z}-nqX1>ch1c)bDD1)?e3D z^KY^(gYC(tW9K!UchyI4GqXS2KHEOqKHL7qoA>|9*817@+4jG13(nj!^P8V-pKYIQ zpKbr$jg5;q_`eR)Iov3s&%`h)o!kRyfFI1SRXC{2izf zO1=oG9xyaQNt%{Iy^W}b<A z4^ksbOM#Lmz_}jMMJ!zkG&BJ=3a?`D8kVjHI$KdIU}!~SXfs*`cUGLm3PMiMN^NP;C9Nw6d%36^9;VIi%(8rGJtGB`6W zU&r9@F_^A-th3(DVEW}qll5T+o72i?GdvQUla_B|*FMSMTvkTHnV(jsFbytcxQf9aQdpHnzbdV+%(VQ>w6^G}{&d^ar~{3l0Te>rD1d^n7tyWo>p;B>ZbMPj z55I(5N~eg$0912iPqRVx5r9DXr01Zfx45k`G1PejXLKg`NRAuj;bl?@&5NN;kQW7R{r6iYLT(6X3PY_4Mhm4xgkxGJA!A(ytrk%`yIw?2R$m*W%c1UW z)#}I4tYWAmg-% zHnOuLP<}8~XAq8t(&RbFuBFFQ^homVW921EsGUR@KSNBjLoBa{VF@vg_QO?F-fQLB zdg1&KD;EVisHIWOk?Kr*3}=$E8fFp>G0h3flu;VH;E3i2Auqz(*Uh-scTRpq<#thy zh0?GL%Q(+fUze=&G1zZp_AF7oQI<@b~l-EO$QeP5) zS|c*I;|yEkBkT4sd+cZB;|$ZtS+bDiG~Jphccfb53{MbpyIBi9jm$+^7yFq9>4&4K zdZ|b1Vw{%jGr)XZEX~)sQ>9~RdMmXr@rj&@Fl!E{BqX(D3g0l3|0X8QbPv}p>%~;b zD3q0a-yq{S#owE1k3?6xc2l20wL#*)WK{#Qek8T@Oda~T7ES3#D{K4NlA|1^_%}m- zh~ZAQCdl?dCe{8kWDq-p-&2@r`=ZQ~cFDee2+BzwH|YmHjr5cFB%7qRIwVVD%EprT z&X%LZEvW?w<^vMvwBw}20%!2L`@cl(6qnDgAt?7S8|9;Pilp{X4QfhZpgrFl$gN_1 z%?wlrV-**`jnKc(fLtHs(4L4!eyh+Dxug%yR>PS(8E%9gtC3yR0HY{B`%&yvS_z=6 z2_g(H@QZF9XvdirA7q~IqxuO7&12R%oYD)aXAaBWmeRD6wNvsNBQp16Oiw9RYN4xH z`GhQkrA&HVDGi|UOfAGSQ=ToB7KcoEu(N%AH}mCjhK2TK^ladaNF#|od7O-A(jx^) z50)}|yJV~AXSz&1T0rhu-D!F>%xDcV?F_T}hna^JS-axQVx-=RT0M>960$W))=Rwv z)iTK%`%`_~^8}PGFN@|kFx-;WN&YdG8vl4w zSN>~j9A=V8`ow=lEy;7G(R@rZLG5phMhr#BH7SA^oB*ifje zBit8?i_1d8;)-Zrp#K)JBNpfi^#x*^#Ax@&Rwl+mJ>hsF6bp5U;eIgzMOUp9+XD&F zDR#7p%e%WhVxYfE3`OFh;a(`_Nn&a`qf#KIXD||oHLVWC;uL$W$LABv+rq(EG#>3v zxLA28&PunhZ0lIIyrXqN>)bgVt;?5*%NK}CTj$PSwsO8WXW@$Z^V{Yx>(B~Xp`$k( z7ZXYLQW!`ah(!lNvBU^%U8-fkwrEc*Fwi@~C=LUE2IC=dVEcv1s2ET~Vkj+7n_$hN0xtbzQ*uSa{=L0#E~)(f&|+gUaGbqC#;` ziWRAg0S<^mfyiKBV+6>K$3uzqt3BeX{zxbuXN_mAfHuiuPDJ6-_&_Ka?hXgfZn+3t z>`#RId)T#suC6fEmOw;|F|Bjc>=@%M)R#Dus7SakOdAB1uyVuE*rs?wQn+s51jD+L8v>w1EvAZuYA_Dy&s(}&8xG4@zuZZ!ZwR@^@f&LM3^I#~>stHE>gP~Zz z+=7@)H!B?PjSfb-KIa0$ET&A`nbW$(S}QAXD9a zZnTW#)CEB>n2n(%BB&>jXrcvHt(+rPiRClu8eL*z^$hwcai3bfY6)ces;lejAZ@H| z6dN1r{q=sW(3?mMGWI1Jhk3f2{p z9l#k}0CSTJm}(GM;~6{wkC^=qI)nVxdX5b%DFU?KZnGiy7L2Z;B}PZ2VRD$KE;!S1LwM^B6STiMH-CL zE89b{fly*Fz+7Q_gxRy3GM=)zk6KF<%pjf^0nr9~12L+EfGrUY#zinUCZ9l8U_iFy z9@>u3CBaZ6LK_@`PGe&@5(W<(j1CS&l6KM)jY3xev_$(xfa(jvT_F(UU|iCZjnU|) zI3uVp&=a^6JZfChidYD`BzBf)DNWt?3Q1b9Q^chcX8jth=qW2pnQxC(kPBr`DQg8s?pGv z9xa8Vg%I{82Xyqt_a=bmu^TfBt>oZ^K^(_$&A%!0+MH08c7`a-~v9AXU-ldrGYma4OBpY)F?XmmyBs zqYNXCRPYhR@iBfkqmljuG#lN7I55zS&~^cFZF5$L$j+W}61oBk@PQzn9rNrOnxh0* z1->DIYFIiW+#gP$*?pm|Fq+p5ZV@eJX?rBx6F{qDutT3mDD@nclQGd$dYY_cDPbJr zp)Ps^bs!TeM+>-Hus}L8zNk{@_uc!Sx$mu+wcf0C>UVbicFC@DYMt)heQFm-wVM1os2LQO z3}o_VPLC+dO}H1)+YXr=UG?R$!*DWWEbTelEIL=e;Jk1?*L(8xU|o$k>k4fD;1%xu z%R9t7FunKHSHGKaL;YO;V$IM!zFrbmQ+iPfUQ={7CPWhVfE}8etLQubYS`U+*_Q1F!NuJP<4<3LYNdUrp11L&Ackfbg$J+jGX zmiZEbTa1W8kg|=mjl7LaAv%A+I}&$5W*hrb{nGgo$2GoLLEuvi-!7{QitTol3z9AL z>gk%?4?iS*4mm~Po3(E_BE76+I-3IZx_Bo^nx?m9678zLS>AgU3ddJw7 z;ClQ8^Ao-obZt!ghV-O_z-P6nnw%II$sm6z;ssf_fp-fctqL|2by2(nUiOR)#L_RI zr_iV9rvN_Rbl+!(ZP?57?XhjfZQE_ROH^+07byxC*s&|9GHBGjbt8d@i1V-~IxlGA zZTA;`?qTfgqKcrQ3IcaK6r1*?3v3to)n9G?WxaFjN9UaF72ddO{@(s?+no8GwL5RP zpTFkIm%T9GOND7&^xHj1F}-VShxZYr6 zBu9&S$dTaf{s7Kk?!90?c~~cf+V<3KEM26gQyp!A>7O{ji+2}-=YgSutOHh)BBPX7 z{ZN(r#?|XcCLk+H^+-Y!+5Xsbji*&4}QjBN}-zw_&7w=4xq>DJ+NqgIgf z<&FpJ*)D%`L>VMX5+n~>vhBv$>#KfD|4_Q+dX-ze`UU0>GOXRY``7~Y3O%U{7L_d9 zWfVr79M(rX`0!#cxp&z_lG>96MY~Qfj@=)KKQ8MLYzX!-1XFg|B^kbddw;@fV`OGC!sQ4i&f1J>&XnO8|7CD`Upw-D}I3Mn(M)I?tuHaR;M&4BT8J2%huAHD}-cOQ3;)ejO8UOq=YM2 zf)%tqhG+!^7QeGQ9~W{GA0eDA*?5iD=?Z(J{xYmM`HiQ)+RAYjn0kS-km?O?RY=Z? z8TGufezbASWK8cX0*R=Netj=k>VMHZk3rynabKzE7j9ET-)f~L6q751V^_tSG-IRx z>qnN!p>)v7L3y*S52~ShfRX4Awt7;0In}xQuQ`*kLvbN*Ut3ew8mnuJOSsHWm+wyq zul5>xE;EMKsN~DK)D0#c2t03Q*adFuMzd~a?h8G`*lVtD2O3|WQRZtoQ};fElGJ*_ zf?KsKtO?u}$

    )mUVX);+#3X$3~JKLl=?sH140)Y1>Lm>h}^=4v~&lJ)e^h9Cs&h z9p+YE!TJg(jgP%uyoBCsmA&X~;OI4*QKHwKB$d*oS&tWj!HdGMUiPI+ud4e-^N=~0 zbkAYgQVW;$Mq*+M?Wc$2J?ypC2W@?-#*dX-=bOLQn!)W6_-XtlrEU*Cue^xJh@Jt` z1{t*F(wvW#`ko`#u-O}jn|)~u>0ewozFmb|GTfh{wVt1j;8pkumU$jk(CRICu1w;_ z!>%sA{zSta{#rJ5OsL^`coG8)%# z?=&$X>~@ATJT^g_&=6S|iYD)_Qe}zAV$Xx08W!6RmDKQo9UB}E#TPDO%4 zEPkbEc!!PnO@~9Wwe1d*lwg%2bV1CH50i7q)|p z0X;}HVP(y1shV`s<(Umugl|(Yyl&>KF4b9&QqAI4H6+|p+o?4qMLaxB8qhx0F&^QZ z6D)aqdDW-97o2}3t7pH5((T02ILEz!1r|($M;>l8_0%n2p*&UUIt-;H$EP~YCQ}^| z;Wz4q53?@erIB2$&9pHb!VnF6$m!Jn8nZ3YdUs=wC0%9G**VeDz0Y-;_Q(=wmfs>V zjrgIc=41Q_!_v+-tB!n!OOJQ`%d-5i@ou^BD;tEg^(qt{8kg!OVi{T<#nl2{GoVUp zHXmhF3(`cPEHd=a3^zYSXo&Pdh)>cc{7>6Qfc3i)#eMe5Yo^Cc2p>Ew!~i5VC^!S& zXMH*yl#HRo9_B#^0DBn{WFXupNT33==tlzB7wJU^Tu&?|E?S?5Y1m$v@^RV;J1*ql z;%7+M+R?-YF6k?QM^PASr9mDgtp>qLd9Y(K(Gs*k%wfa1BAw8>qo8A+UnHADTwdo- zEHsrsQalEPRN%S@yUzRBY8#=TaBS@FE;z_V)uBjjyn##EmfZ1Gv?Z1VN(*7sB!?hv9y5yU_fU`pwfw`=x8YU?3~p~e9AFH+_XHX)R4Xoqp5^5SXo^f#1N@Cn$E_T_sjyN8|BeH z`8yIn?Vz6BrO!n}3Z&1V9CZ61jU(g)AgYwmsBmvDTU zl}XHP{LN1XDF-#V&5CD2Q>3epz+r$0^6d9;qG0Ual+Z#oS|_CV+sp)eVx{8ZeA|NK z6-k5uL3ee}u#|G0Ww&b9h_N-j8@(N5m0O$)EW8DsV3gh9V|~s^51(jg#mfCfG+&iy z$U#?@Cf%mB>cCfV!z;37a*DQ+YLkc8tIO<{u<)*Z7TNd4zxnx{)6_TEQAj7ThndaK zBqiJWC$qwX1c{bpKVT%KRtV7Qre&^e^RqcWA^oVfFLvyJIDn3k?VXP#KbK zWvt32GlqdfD{wIQz(r(o{2O-p@XgW2Cy8`^P}&_8bdCt?K7o$@9SWaj^zc`_2L=be z(@ELUGNSvob|?sYh;F~h{1H9K2zbKz8d9Nwo~mLfqVR1$t!HHm#(*>+29uqP!iHd z;?JL1c1q+UOwq_ylDarKRzMJJW2yx`IXYAtt_F8fI7Ao)#0SUWXI%P`hIJ*jD0gBhyn<8D3&Sc_J$sjgfSh_x*0+Q@h%0A3{x+)zH@Wl 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�|~Ev4|?I?Qn8@F&NsKUzkg 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

    Fl9`Cn^D>o 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 RJC;jFUY`=3^k0|${{Y*+EoJ}! literal 0 HcmV?d00001 diff --git a/docs/TCP3D_LLD_SoftwareManifest.pdf b/docs/TCP3D_LLD_SoftwareManifest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..14d8187966854718f5b3f85e8707e39c599d963c GIT binary patch literal 29587 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 literal 0 HcmV?d00001 diff --git a/docs/doxy/rundoxy.bat b/docs/doxy/rundoxy.bat new file mode 100755 index 0000000..63e1757 --- /dev/null +++ b/docs/doxy/rundoxy.bat @@ -0,0 +1 @@ +T:\Doxygen\doxygen\1.5.1-p1\bin\doxygen docs\TCP3D_DRV_doxconfig diff --git a/docs/doxy/template/asapimain.h b/docs/doxy/template/asapimain.h new file mode 100644 index 0000000..aa13232 --- /dev/null +++ b/docs/doxy/template/asapimain.h @@ -0,0 +1,63 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +/* + * This is a little header file which doxygen parses to generate the main + * documentation page + */ + +/** + * @file asapimain.h + * + * @brief Header file to generate the TCP3D Driver Functions Document Main Page + */ + +/** + * @mainpage TCP3D Driver Functions + * + * @section Data Structures + * + * List of all the TCP3D Driver Data Structures with brief descriptions. + * + * @section Files + * + * List of all the TCP3D Driver interface files with brief descriptions. + * + * @section Related Pages + * + * List of all related documentation pages (Disclaimer, etc.). + */ diff --git a/docs/doxy/template/doxygen.h b/docs/doxy/template/doxygen.h new file mode 100644 index 0000000..6087e2e --- /dev/null +++ b/docs/doxy/template/doxygen.h @@ -0,0 +1,96 @@ +/* + * This is a little header file which Doxygen parses to generate the disclaimer page + */ + +/** + * @file doxygen.h + * + * @brief Header file to generate the TI Disclaimer Page + */ + +/** + * @page Disclaimer + *

    IMPORTANT NOTICE
    + * Texas Instruments Incorporated and its subsidiaries (TI) reserve the right + * to make corrections, modifications, enhancements, improvements, and other + * changes to its products and services at any time and to discontinue any + * product or service without notice. Customers should obtain the latest + * relevant information before placing orders and should verify that such + * information is current and complete. All products are sold subject to TI’s + * terms and conditions of sale supplied at the time of order acknowledgment. + * + * TI warrants performance of its hardware products to the specifications + * applicable at the time of sale in accordance with TI’s standard warranty. + * Testing and other quality control techniques are used to the extent TI + * deems necessary to support this warranty. Except where mandated by + * government requirements, testing of all parameters of each product is not + * necessarily performed. + * + * TI assumes no liability for applications assistance or customer product + * design. Customers are responsible for their products and applications + * using TI components. To minimize the risks associated with customer + * products and applications, customers should provide adequate design and + * operating safeguards. + * + * TI does not warrant or represent that any license, either express or + * implied, is granted under any TI patent right, copyright, mask work right, + * or other TI intellectual property right relating to any combination, + * machine, or process in which TI products or services are used. Information + * published by TI regarding third-party products or services does not + * constitute a license from TI to use such products or services or a warranty + * or endorsement thereof. Use of such information may require a license from a + * third party under the patents or other intellectual property of the third + * party, or a license from TI under the patents or other intellectual property + * of TI. + * + * Reproduction of information in TI data books or data sheets is permissible + * only if reproduction is without alteration and is accompanied by all + * associated warranties, conditions, limitations, and notices. Reproduction + * of this information with alteration is an unfair and deceptive business + * practice. TI is not responsible or liable for such altered documentation. + * + * Resale of TI products or services with statements different from or beyond + * the parameters stated by TI for that product or service voids all express + * and any implied warranties for the associated TI product or service and is + * an unfair and deceptive business practice. TI is not responsible or liable + * for any such statements. + * + * + * + * + * Mailing Address: Texas Instruments + * Post Office Box 655303 Dallas, Texas 75265 + * + * + * + * Copyright © 2008 Texas Instruments Incorporated. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ diff --git a/docs/doxy/tifooter.htm b/docs/doxy/tifooter.htm new file mode 100644 index 0000000..c35c513 --- /dev/null +++ b/docs/doxy/tifooter.htm @@ -0,0 +1,4 @@ +
    +Copyright $year, Texas Instruments Incorporated + + diff --git a/docs/doxy/tiheader.htm b/docs/doxy/tiheader.htm new file mode 100644 index 0000000..f0463c0 --- /dev/null +++ b/docs/doxy/tiheader.htm @@ -0,0 +1,12 @@ + + +$title + + + + + + + + +
    diff --git a/docs/doxy/tilogo.gif b/docs/doxy/tilogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2fab2da7bf35dbc41b8edb749d037d25d157df0 GIT binary patch literal 1137 zcmV-%1djVhNk%w1Vcq~X0HOc@00030|NpzYyKirAKR-VP1_tQp=olCnA^8LV00000 zEC2ui0NwyL000C32)f+}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{ za7Zi~kI1BQ$!t2G(5Q5JD+~hIEP=`;TC>`&ICupIwt&IlFmB_@;4J|waNB2Jvtckd z2nc|8f-HGvYia-nS$huz0*{c90s}QxYKVh1aB+%fh7ST}q5*6)b65qLnxhAFn`fyF zd!?bU2ac3AbgDFk0d)YUxp27=1+`lRfXmAVx6J_0feO#147Yp))(*QD)!Sps(HNGO z1GT$(1F7i163Ef$V0`FX2ce7r>I_z$SOyX36u5__SeZJG%m5ly(BGnU#1yDQ2kw-C z1F!z2`B#en;2wss1~_zQ0c1gKwVr{=7Xe3Ol*x95K&%GcA}R=_ zPthL&SI+GzvvjE|kp&a|`k6>Tsw^a>p3(R3k^lo+Y8gnSEPzrqS=9L1i8K^d3K>P! z3;=diRtGLm-3+F{BEe!CJKe;`U>dhyedi4guyJdFf#>uU5cn9a<5P7)Wt9m4j5RoD zG(YYe7Au=MY7VeN_4upVpL{N?HreV|+`A3(VnJg?Cz#C_y8#dzTSB)!VTdv<4iqu9 zGH6=)8SZ=m=id_jg|4nmpX*(y8PsBcwL1rSX8sgJFC2pIUyr6QIQEZf_)f82u{;cH zPC~l>3C*<98st^i7#~oPLfvM-(3OR1R|vM4AMu4Y$v^4=HlB6q?d8B*^EosRG9tDI z%5I6#6<=1TY-Qa=>f|RPZk;*j-vON%pojtqnzlfD83{m(fx|WU2p!Tvx0pgh)d5E+ z>u|`}eCz?%0Ei33W!5EWR5`(WH~F*xj*G-nfKf-%)c{i3J#d_3@{FleTCo6mk|JO& z#vo2YVz?!W3ub8{kMsPrVPWUw1Ob-Rbn-_nl#J%f9~6K&pLp;^6&NIf-6Gj+9^z!9 zi*sR-Mgs@^SX~}+a1*-eXewzE4b+J-64WH*gw~Mx3pgzSs+Ugx zltlQLggQ#}(o|-B2558rxfsl^j})tEjqb3zWMt2U` zNWo7QK|<#Rf~CR~r)SjKVp3EIhR-Cm;8q(z8v!=gOKU-ur>Is*iAIas;Hd^aXiOE@ zl45GSakSB58s(B9+BWCO_F^Dbp%aVp)I4loHpk}*1pWw#=U#It;Ky&) zw8LYL7Yp_ulH(e^MS@_lx1LeCovifIL9^U)%%Y4%&U}wC%IK$5k@dmZ68ywA1WZ(d+%-(kN^NX D-#`uN literal 0 HcmV?d00001 diff --git a/docs/doxy/titagline.gif b/docs/doxy/titagline.gif new file mode 100644 index 0000000000000000000000000000000000000000..743a0249e3fbf0c14128aad036beac9611724b72 GIT binary patch literal 653 zcmV;80&@LFNk%w1VLAaC0J8u9{{R60|NsAXcK^4x|Ba3R*4F>+?f)Sm|Mm6%qoe=F z$NxV+|6E-EM)j$~<` zXsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2Gw?jiPAW)&$tkyRG3=)Lyb{q4?ux(04jo%^#;w z*?fH?FK40yz>tYW`UvcVcnaqIoI4?Fq;N+~u~C{vt6Qy6Wh(SipkZFWX}As^J9y^W zt`Y_`NHE8sm_C0PSE5plu4l*mN)hBoKq_d^d>v}M`Gz3^3EmDM3umBIUdyW+Pw?0_ zaafZmRRSPp%@m;om><<_Iaqe0(VypT@`T{(INO=`z6rF<+u&TgB%o~tZ9;>Bx4Sn} z%p0 + + TCP3 Decoder Driver + ti.drv.tcp3d + `packageVersion` + Texas Instruments Inc. + http://ti.com + Copyright Texas Instruments 2012 + + Released under the Eclipse Public License 1.0 (http://www.eclipse.org/legal/epl-v10.html) + + ../../.. + ../../../packages + ../../../packages/ti/drv/tcp3d/docs + TCP3 Decoder Driver + diff --git a/docs/eclipse/toc_cdoc_sample.xml b/docs/eclipse/toc_cdoc_sample.xml new file mode 100644 index 0000000..1a8e4b2 --- /dev/null +++ b/docs/eclipse/toc_cdoc_sample.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/tifooter.htm b/docs/tifooter.htm new file mode 100644 index 0000000..c35c513 --- /dev/null +++ b/docs/tifooter.htm @@ -0,0 +1,4 @@ +
    +Copyright $year, Texas Instruments Incorporated + + diff --git a/docs/tiheader.htm b/docs/tiheader.htm new file mode 100644 index 0000000..f0463c0 --- /dev/null +++ b/docs/tiheader.htm @@ -0,0 +1,12 @@ + + +$title + + + + + + + + +
    diff --git a/docs/tilogo.gif b/docs/tilogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2fab2da7bf35dbc41b8edb749d037d25d157df0 GIT binary patch literal 1137 zcmV-%1djVhNk%w1Vcq~X0HOc@00030|NpzYyKirAKR-VP1_tQp=olCnA^8LV00000 zEC2ui0NwyL000C32)f+}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{ za7Zi~kI1BQ$!t2G(5Q5JD+~hIEP=`;TC>`&ICupIwt&IlFmB_@;4J|waNB2Jvtckd z2nc|8f-HGvYia-nS$huz0*{c90s}QxYKVh1aB+%fh7ST}q5*6)b65qLnxhAFn`fyF zd!?bU2ac3AbgDFk0d)YUxp27=1+`lRfXmAVx6J_0feO#147Yp))(*QD)!Sps(HNGO z1GT$(1F7i163Ef$V0`FX2ce7r>I_z$SOyX36u5__SeZJG%m5ly(BGnU#1yDQ2kw-C z1F!z2`B#en;2wss1~_zQ0c1gKwVr{=7Xe3Ol*x95K&%GcA}R=_ zPthL&SI+GzvvjE|kp&a|`k6>Tsw^a>p3(R3k^lo+Y8gnSEPzrqS=9L1i8K^d3K>P! z3;=diRtGLm-3+F{BEe!CJKe;`U>dhyedi4guyJdFf#>uU5cn9a<5P7)Wt9m4j5RoD zG(YYe7Au=MY7VeN_4upVpL{N?HreV|+`A3(VnJg?Cz#C_y8#dzTSB)!VTdv<4iqu9 zGH6=)8SZ=m=id_jg|4nmpX*(y8PsBcwL1rSX8sgJFC2pIUyr6QIQEZf_)f82u{;cH zPC~l>3C*<98st^i7#~oPLfvM-(3OR1R|vM4AMu4Y$v^4=HlB6q?d8B*^EosRG9tDI z%5I6#6<=1TY-Qa=>f|RPZk;*j-vON%pojtqnzlfD83{m(fx|WU2p!Tvx0pgh)d5E+ z>u|`}eCz?%0Ei33W!5EWR5`(WH~F*xj*G-nfKf-%)c{i3J#d_3@{FleTCo6mk|JO& z#vo2YVz?!W3ub8{kMsPrVPWUw1Ob-Rbn-_nl#J%f9~6K&pLp;^6&NIf-6Gj+9^z!9 zi*sR-Mgs@^SX~}+a1*-eXewzE4b+J-64WH*gw~Mx3pgzSs+Ugx zltlQLggQ#}(o|-B2558rxfsl^j})tEjqb3zWMt2U` zNWo7QK|<#Rf~CR~r)SjKVp3EIhR-Cm;8q(z8v!=gOKU-ur>Is*iAIas;Hd^aXiOE@ zl45GSakSB58s(B9+BWCO_F^Dbp%aVp)I4loHpk}*1pWw#=U#It;Ky&) zw8LYL7Yp_ulH(e^MS@_lx1LeCovifIL9^U)%%Y4%&U}wC%IK$5k@dmZ68ywA1WZ(d+%-(kN^NX D-#`uN literal 0 HcmV?d00001 diff --git a/docs/titagline.gif b/docs/titagline.gif new file mode 100644 index 0000000000000000000000000000000000000000..743a0249e3fbf0c14128aad036beac9611724b72 GIT binary patch literal 653 zcmV;80&@LFNk%w1VLAaC0J8u9{{R60|NsAXcK^4x|Ba3R*4F>+?f)Sm|Mm6%qoe=F z$NxV+|6E-EM)j$~<` zXsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2Gw?jiPAW)&$tkyRG3=)Lyb{q4?ux(04jo%^#;w z*?fH?FK40yz>tYW`UvcVcnaqIoI4?Fq;N+~u~C{vt6Qy6Wh(SipkZFWX}As^J9y^W zt`Y_`NHE8sm_C0PSE5plu4l*mN)hBoKq_d^d>v}M`Gz3^3EmDM3umBIUdyW+Pw?0_ zaafZmRRSPp%@m;om><<_Iaqe0(VypT@`T{(INO=`z6rF<+u&TgB%o~tZ9;>Bx4Sn} z%p0> L2SRAM + .csl_vect > L2SRAM + .main_mem > L2SRAM + .profile_mem > L2SRAM +} diff --git a/example/simtci6634/c66/bios/sample_config.cfg b/example/simtci6634/c66/bios/sample_config.cfg new file mode 100644 index 0000000..8fd1405 --- /dev/null +++ b/example/simtci6634/c66/bios/sample_config.cfg @@ -0,0 +1,134 @@ +/* + * ======== sample_config.cfg ======== + */ + +/* IPC packages */ +var ListMP = xdc.useModule('ti.sdo.ipc.ListMP'); +var GateMP = xdc.useModule('ti.sdo.ipc.GateMP'); +var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion'); +var HeapMemMP = xdc.useModule('ti.sdo.ipc.heaps.HeapMemMP'); +var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc'); +var Ipc = xdc.useModule('ti.sdo.ipc.Ipc'); + +/* Configure System to use SysMin */ +System = xdc.useModule('xdc.runtime.System'); +SysStd = xdc.useModule('xdc.runtime.SysStd'); +System.SupportProxy = xdc.useModule('xdc.runtime.SysMin') +System.SupportProxy = SysStd; +System.extendedFormats = "%$S%f"; + +/* Set the system stack - 0x2000 */ +Program.stack = 0x4000; + +var Memory = xdc.useModule('xdc.runtime.Memory'); +var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem'); + +/* Use HeapMem for default heap manager and give it 49152 (0xC000) + * bytes to work with. + */ +Program.sectMap["systemHeap"] = Program.platform.dataMemory; +var heapMemParams = new HeapMem.Params; +heapMemParams.size = 0x18000; +heapMemParams.sectionName = "systemHeap"; +Memory.defaultHeapInstance = HeapMem.create(heapMemParams); + +/* + * Creating Heap Memories for using with test application + */ +/* Create a heap for TCP3D input/output data using ti.bios.HeapMem. */ +/* Program.sectMap["tcp3DataSection"] = {loadSegment: "MSMCSRAM"}; +var heapMemParams1 = new HeapMem.Params; +heapMemParams1.size = 0x100000; +heapMemParams1.align = 64; +heapMemParams1.sectionName = "tcp3DataSection"; +Program.global.tcp3dDataHeap = HeapMem.create(heapMemParams1); */ + +/* Create a heap for TCP3D driver using ti.bios.HeapMem. */ +Program.sectMap["tcp3DriverSection"] = Program.platform.dataMemory; +var heapMemParams2 = new HeapMem.Params; +heapMemParams2.size = 0x4000; +heapMemParams2.sectionName = "tcp3DriverSection"; +Program.global.tcp3dDrvHeap = HeapMem.create(heapMemParams2); + +/* Create a heap for TCP3D QUEUE DESCRIPTORS using ti.bios.HeapMem. */ +Program.sectMap["tcp3QueueDescrSection"] = Program.platform.dataMemory; +var heapMemParams3 = new HeapMem.Params; +heapMemParams3.size = 4096; +heapMemParams3.sectionName = "tcp3QueueDescrSection"; +Program.global.tcp3dQueHeap = HeapMem.create(heapMemParams3); + +/* To avoid wasting shared memory for Notify and MessageQ transports */ +for (var i = 0; i < MultiProc.numProcessors; i++) { + Ipc.setEntryMeta({ + remoteProcId: i, + setupNotify: false, + setupMessageQ: false, + }); +} + + +SharedRegion.setEntryMeta(0, + { base: 0x0C000000, + len: 0x100000, + ownerProcId: 0, + cacheLineSize: 64, + isValid: true, + name: "sharemem", + }); + +/* + * Pull in Timer, Semaphore, Swi, Task, and Queue modules + * used in this example. + */ +var BIOS = xdc.useModule('ti.sysbios.BIOS'); +xdc.useModule('ti.sysbios.hal.Timer'); +xdc.useModule('ti.sysbios.knl.Semaphore'); +xdc.useModule('ti.sysbios.knl.Swi'); +xdc.useModule('ti.sysbios.knl.Task'); +xdc.useModule('ti.sysbios.hal.Cache'); +xdc.useModule('ti.sysbios.family.c64p.Hwi'); +xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc'); +xdc.useModule('xdc.runtime.Log'); +xdc.useModule('xdc.runtime.Error'); +var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys'); +var ECM = xdc.useModule('ti.sysbios.family.c64p.EventCombiner'); + +/* + * Enable Event Groups here and registering of ISR for specific GEM INTC is done + * using EventCombiner_dispatchPlug() and Hwi_eventMap() APIs + */ +ECM.eventGroupHwiNum[0] = 7; +ECM.eventGroupHwiNum[1] = 8; +ECM.eventGroupHwiNum[2] = 9; +ECM.eventGroupHwiNum[3] = 10; + +/* + * Setup the Logger for Driver + */ +var LoggerSys0Params0 = new LoggerSys.Params; +LoggerSys0Params0.instance.name = 'tcp3dDrvLog'; +Program.global.tcp3dDrvLog = LoggerSys.create(LoggerSys0Params0); + +/* + * allow printf() to be called from Swi threads. Note that use of this gate + * incurs additional latency for Swi processing since Swi scheduler will be + * disabled to manage critical sections within the RTS library code. +BIOS.rtsGateType = BIOS.GateSwi; + */ + + +/* + * Adding the other Dependent packages + */ +/*xdc.loadPackage('ti.wbi.common.api');*/ +xdc.loadPackage('ti.sdo.edma3.drv'); + +/* Load the TCP3D package */ +var Tcp3d = xdc.useModule('ti.drv.tcp3d.Settings'); + +/* Load the CSL package */ +var Csl = xdc.useModule('ti.csl.Settings'); + +/* Device specific configuration */ +var devName = "tci6634"; +Csl.deviceType = devName; diff --git a/example/simtci6634/c66/bios/tcp3dSimtci6634C66BiosExampleProject.txt b/example/simtci6634/c66/bios/tcp3dSimtci6634C66BiosExampleProject.txt new file mode 100644 index 0000000..373a81a --- /dev/null +++ b/example/simtci6634/c66/bios/tcp3dSimtci6634C66BiosExampleProject.txt @@ -0,0 +1,16 @@ +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/tcp3d_drv_sample_init.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/tcp3d_example_main.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/sample_cfg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/sample_cs.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/sample_init.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/sample_int_reg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/CpIntc_local.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/tcp3d_codeBlkSeg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/tcp3d_inputConfigPrep.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/tcp3d_itg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/src/tcp3d_testset_functions.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/simtci6634/c66/bios/tcp3d_osal.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/simtci6634/c66/bios/link.cmd" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/example/simtci6634/c66/bios/sample_config.cfg" +-ccs.setCompilerOptions "-mv6600 -g -DUSE_TCP3D_DRIVER_TYPES --diag_warning=225 -I${TCP3D_INSTALL_PATH} -I${TCP3D_INSTALL_PATH}/ti/drv/tcp3d/example/src" +-rtsc.enableRtsc diff --git a/example/simtci6634/c66/bios/tcp3d_osal.c b/example/simtci6634/c66/bios/tcp3d_osal.c new file mode 100644 index 0000000..3ea2f0a --- /dev/null +++ b/example/simtci6634/c66/bios/tcp3d_osal.c @@ -0,0 +1,61 @@ +/** + * @file sample_osal.c + * + * @brief + * This is the OS abstraction layer and is used by the CPPI and QMSS + * low level drivers for the CPPI sample example. + * + * \par + * ============================================================================ + * @n (C) Copyright 2009, Texas Instruments, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +/* XDC includes */ +#include +#include + +/** + * @b Description + * @n + * The function is the TCP3D OSAL Logging API which logs + * the messages on the console. + * + * @param[in] fmt + * Formatted String. + * + * @retval + * Not Applicable + */ +void Osal_tcp3dLog ( char *fmt, ... ) +{ +} + + diff --git a/example/src/CpIntc_local.c b/example/src/CpIntc_local.c new file mode 100644 index 0000000..678879d --- /dev/null +++ b/example/src/CpIntc_local.c @@ -0,0 +1,144 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +/* + * Copyright (c) 2009 + * Texas Instruments + * + * All rights reserved. Property of Texas Instruments + * Restricted rights to use, duplicate or disclose this code are + * granted through contract. + * + * */ +/* + * ======== CpIntc.c ======== + */ + +#include +#include +#include +#include + +#include "ti/sysbios/family/c66/tci66xx/package/internal/CpIntc.xdc.h" + +/* + * ======== CpIntc_dispatch ======== + */ +//UInt32 cpintcCntr = 0; +//UInt32 cpintcCntr1 = 0; +//UInt32 cpintcCntr2 = 0; +//UInt32 sysIntTrack[200]; +Void CpIntc_dispatchLoc(UInt hostInt) +{ + Int32 i; + UInt32 index; + UInt32 offset; + UInt32 srsrVal; + Int32 sysInt; + UInt32 id = 0; + extern volatile cregister UInt32 DNUM; + +// cpintcCntr++; + + /* for core# 4-7 use INTC1 otherwise use INTC0 */ + if (DNUM > 3) { + id = 1; + } + +// if ( (*((UInt32*)0x0180000C)) == 0x1 ) +// System_printf("MISS detected\n"); + + sysInt = CpIntc_module->hostIntToSysInt[hostInt]; + +// sysIntTrack[cpintcCntr]=((hostInt<<16)|sysInt); +// sysIntTrack[0]=((hostInt<<16)|sysInt); + + /* + * If only one system interrupt is mapped to a host interrupt + * we don't need to read the Sys Status Raw Registers. We + * know exactly which system interrupt triggered the interrupt. + */ + if (sysInt != 0xff && sysInt != 0xfe) { +// cpintcCntr1++; + /* clear system interrupt associated with host interrupt */ + CpIntc_clearSysInt(id, sysInt); + + /* call function with arg */ + CpIntc_module->dispatchTab[sysInt].fxn( + CpIntc_module->dispatchTab[sysInt].arg); + } + else { +// cpintcCntr2++; + /* + * Loop through System Interrupt Status Enabled/Clear Registers for + * pending enabled interrupts. The highest numbered system interrupt + * will be processed first from left to right. + */ + for (i = CpIntc_numStatusRegs - 1; i >= 0; i--) { + offset = i << 5; + + /* + * SDOCM00062100 - Nyquist CpIntc_dispatch needs to read the + * correct status pending and enabled register once the + * Simulator is fixed. + * Fix is: + * srsrVal = CpIntc_module->controller[id]->SECR[j - i]; + */ + srsrVal = CpIntc_module->controller[id]->SRSR[i] & + CpIntc_module->controller[id]->ESR[i]; + + /* Find pending interrupts from left to right */ + while (srsrVal) { + index = 31 - _lmbd(1, srsrVal); + srsrVal &= ~(1 << index); + + /* Make sure pending interrupt is mapped to host interrupt */ + if (CpIntc_module->controller[id]->CMR[offset + index] + == hostInt) { + /* clear system interrupt first */ + CpIntc_clearSysInt(id, offset + index); + + /* call function with arg */ + CpIntc_module->dispatchTab[offset + index].fxn( + CpIntc_module->dispatchTab[offset + index].arg); + } + } + } + } +} + + diff --git a/example/src/sample.h b/example/src/sample.h new file mode 100644 index 0000000..70aa3c7 --- /dev/null +++ b/example/src/sample.h @@ -0,0 +1,215 @@ +/* + * bios6_edma3_drv_sample.h + * + * Header file for the sample application for the EDMA3 Driver. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#ifndef _BIOS6_EDMA3_DRV_SAMPLE_H_ +#define _BIOS6_EDMA3_DRV_SAMPLE_H_ + +#include +#include + +/* Include EDMA3 Driver */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Set this flag to use the CpIntc_dispatchLoc() function as the Event Combiner + * dispatchPlug function when ever the system interrupts are registered with + * CPINTC with callbacks. + */ +#define USE_LOCAL_CPINTC_DISPATCH 0 + +/** + * Set this flag to use the edma3ComplHandlerLoc() function as the completion + * interrupt ISR for the region used for driver testing. + */ +#define EDMA_LOCAL_COMP_ISR 1 + +#if EDMA_LOCAL_COMP_ISR +/** + * \brief TCC Callback - Caters to channel specific status reporting. + */ +typedef struct { + /** Callback function */ + EDMA3_RM_TccCallback tccCb; + + /** Callback data, passed to the Callback function */ + void *cbData; +} tccCallbackParams; +#endif + +/* Macro to get CPINTC number */ +#define WHICH_CPINTC_NUM(core) ((core > 3)? 1: 0 ) + +/** + * Cache line size on the underlying SoC. It needs to be modified + * for different cache line sizes, if the Cache is Enabled. + */ +#define EDMA3_CACHE_LINE_SIZE_IN_BYTES (128u) + +/* Error returned in case of buffers are not aligned on the cache boundary */ +#define EDMA3_NON_ALIGNED_BUFFERS_ERROR (-1) + +/* Error returned in case of data mismatch */ +#define EDMA3_DATA_MISMATCH_ERROR (-2) + +/** + * \brief EDMA3 Initialization + * + * This function initializes the EDMA3 Driver for the given EDMA3 controller + * and opens a EDMA3 driver instance. It internally calls EDMA3_DRV_create() and + * EDMA3_DRV_open(), in that order. + * + * It also registers interrupt handlers for various EDMA3 interrupts like + * transfer completion or error interrupts. + * + * \param edma3Id [IN] EDMA3 Controller Instance Id (Hardware + * instance id, starting from 0) + * \param errorCode [IN/OUT] Error code while opening DRV instance + * \return EDMA3_DRV_Handle: If successfully opened, the API will return the + * associated driver's instance handle. + */ +EDMA3_DRV_Handle edma3init (unsigned int edma3Id, EDMA3_DRV_Result *errorCode, + unsigned int dspCoreID, unsigned int tpccRegionUsed); + +/** + * \brief EDMA3 De-initialization + * + * This function de-initializes the EDMA3 Driver for the given EDMA3 controller + * and closes the previously opened EDMA3 driver instance. It internally calls + * EDMA3_DRV_close and EDMA3_DRV_delete(), in that order. + * + * It also un-registers the previously registered interrupt handlers for various + * EDMA3 interrupts. + * + * \param edma3Id [IN] EDMA3 Controller Instance Id (Hardware + * instance id, starting from 0) + * \param hEdma [IN] EDMA3 Driver handle, returned while using + * edma3init(). + * \return EDMA3_DRV_SOK if success, else error code + */ +EDMA3_DRV_Result edma3deinit (unsigned int edma3Id, EDMA3_DRV_Handle hEdma); + + +/** + * \brief EDMA3 Cache Invalidate + * + * This function invalidates the D cache. + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheInvalidate(unsigned int mem_start_ptr, + unsigned int num_bytes); + + + +/** + * \brief EDMA3 Cache Flush + * + * This function flushes (cleans) the Cache + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheFlush(unsigned int mem_start_ptr, + unsigned int num_bytes); + + + +/** + * Counting Semaphore related functions (OS dependent) should be + * called/implemented by the application. A handle to the semaphore + * is required while opening the driver/resource manager instance. + */ + +/** + * \brief EDMA3 OS Semaphore Create + * + * This function creates a counting semaphore with specified + * attributes and initial value. It should be used to create a semaphore + * with initial value as '1'. The semaphore is then passed by the user + * to the EDMA3 driver/RM for proper sharing of resources. + * \param initVal [IN] is initial value for semaphore + * \param semParams [IN] is the semaphore attributes. + * \param hSem [OUT] is location to receive the handle to just created + * semaphore. + * \return EDMA3_DRV_SOK if successful, else a suitable error code. + */ +EDMA3_DRV_Result edma3OsSemCreate(int initVal, + const Semaphore_Params *semParams, + EDMA3_OS_Sem_Handle *hSem); + + + +/** + * \brief EDMA3 OS Semaphore Delete + * + * This function deletes or removes the specified semaphore + * from the system. Associated dynamically allocated memory + * if any is also freed up. + * \param hSem [IN] handle to the semaphore to be deleted + * \return EDMA3_DRV_SOK if successful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemDelete(EDMA3_OS_Sem_Handle hSem); + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif /* _BIOS6_EDMA3_DRV_SAMPLE_H_ */ + diff --git a/example/src/sample_cfg.c b/example/src/sample_cfg.c new file mode 100644 index 0000000..0f8b834 --- /dev/null +++ b/example/src/sample_cfg.c @@ -0,0 +1,1771 @@ +/* + * sample_cfg.c + * + * Platform specific EDMA3 hardware related information like number of transfer + * controllers, various interrupt ids etc. It is used while interrupts + * enabling / disabling. It needs to be ported for different SoCs. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include + +/* Number of EDMA3 controllers present in the system */ +#define NUM_EDMA3_INSTANCES 3u +const unsigned int numEdma3Instances = NUM_EDMA3_INSTANCES; + +/* Number of DSPs present in the system */ +#define NUM_DSPS 4u +//const unsigned int numDsps = NUM_DSPS; + +#define CGEM_REG_START (0x01800000) + +/* Determine the processor id by reading DNUM register. */ +unsigned short determineProcId() + { + volatile unsigned int *addr; + unsigned int core_no; + + /* Identify the core number */ + addr = (unsigned int *)(CGEM_REG_START+0x40000); + core_no = ((*addr) & 0x000F0000)>>16; + + return core_no; + } + +/** Whether global configuration required for EDMA3 or not. + * This configuration should be done only once for the EDMA3 hardware by + * any one of the masters (i.e. DSPs). + * It can be changed depending on the use-case. + */ +unsigned int gblCfgReqdArray [NUM_DSPS] = { + 0, /* DSP#0 is Master, will do the global init */ + 1, /* DSP#1 is Slave, will not do the global init */ + 1, /* DSP#2 is Slave, will not do the global init */ + 1, /* DSP#3 is Slave, will not do the global init */ + }; + +unsigned short isGblConfigRequired(unsigned int dspNum) + { + return gblCfgReqdArray[dspNum]; + } + +/* Semaphore handles */ +EDMA3_OS_Sem_Handle semHandle[NUM_EDMA3_INSTANCES] = {NULL,NULL,NULL}; + + +/* Variable which will be used internally for referring number of Event Queues. */ +unsigned int numEdma3EvtQue[NUM_EDMA3_INSTANCES] = {2u, 4u, 4u}; + +/* Variable which will be used internally for referring number of TCs. */ +unsigned int numEdma3Tc[NUM_EDMA3_INSTANCES] = {2u, 4u, 4u}; + +/** + * Variable which will be used internally for referring transfer completion + * interrupt. Completion interrupts for all the shadow regions and all the + * EDMA3 controllers are captured since it is a multi-DSP platform. + */ +unsigned int ccXferCompInt[NUM_EDMA3_INSTANCES][EDMA3_MAX_REGIONS] = { + { + 38u, 39u, 40u, 41u, + 42u, 43u, 44u, 45u, + }, + { + 8u, 9u, 10u, 11u, + 12u, 13u, 14u, 15u, + }, + { + 24u, 25u, 26u, 27u, + 28u, 29u, 30u, 31u, + }, + }; + +/** + * Variable which will be used internally for referring channel controller's + * error interrupt. + */ +unsigned int ccErrorInt[NUM_EDMA3_INSTANCES] = {32u, 0u, 16u}; + +/** + * Variable which will be used internally for referring transfer controllers' + * error interrupts. + */ +unsigned int tcErrorInt[NUM_EDMA3_INSTANCES][EDMA3_MAX_TC] = { + { + 34u, 35u, 0u, 0u, + 0u, 0u, 0u, 0u, + }, + { + 2u, 3u, 4u, 5u, + 0u, 0u, 0u, 0u, + }, + { + 18u, 19u, 20u, 21u, + 0u, 0u, 0u, 0u, + }, + }; + +/* Driver Object Initialization Configuration */ +EDMA3_DRV_GblConfigParams sampleEdma3GblCfgParams[NUM_EDMA3_INSTANCES] = +{ + { + /* EDMA3 INSTANCE# 0 */ + /** Total number of DMA Channels supported by the EDMA3 Controller */ + 16u, + /** Total number of QDMA Channels supported by the EDMA3 Controller */ + 8u, + /** Total number of TCCs supported by the EDMA3 Controller */ + 16u, + /** Total number of PaRAM Sets supported by the EDMA3 Controller */ + 128u, + /** Total number of Event Queues in the EDMA3 Controller */ + 2u, + /** Total number of Transfer Controllers (TCs) in the EDMA3 Controller */ + 2u, + /** Number of Regions on this EDMA3 controller */ + 8u, + + /** + * \brief Channel mapping existence + * A value of 0 (No channel mapping) implies that there is fixed association + * for a channel number to a parameter entry number or, in other words, + * PaRAM entry n corresponds to channel n. + */ + 1u, + + /** Existence of memory protection feature */ + 1u, + + /** Global Register Region of CC Registers */ + (void *)0x02700000u, + /** Transfer Controller (TC) Registers */ + { + (void *)0x02760000u, + (void *)0x02768000u, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL + }, + /** Interrupt no. for Transfer Completion */ + 38u, + /** Interrupt no. for CC Error */ + 32u, + /** Interrupt no. for TCs Error */ + { + 34u, + 35u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u, + }, + + /** + * \brief EDMA3 TC priority setting + * + * User can program the priority of the Event Queues + * at a system-wide level. This means that the user can set the + * priority of an IO initiated by either of the TCs (Transfer Controllers) + * relative to IO initiated by the other bus masters on the + * device (ARM, DSP, USB, etc) + */ + { + 0u, + 1u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u + }, + /** + * \brief To Configure the Threshold level of number of events + * that can be queued up in the Event queues. EDMA3CC error register + * (CCERR) will indicate whether or not at any instant of time the + * number of events queued up in any of the event queues exceeds + * or equals the threshold/watermark value that is set + * in the queue watermark threshold register (QWMTHRA). + */ + { + 16u, + 16u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief To Configure the Default Burst Size (DBS) of TCs. + * An optimally-sized command is defined by the transfer controller + * default burst size (DBS). Different TCs can have different + * DBS values. It is defined in Bytes. + */ + { + 16u, + 16u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief Mapping from each DMA channel to a Parameter RAM set, + * if it exists, otherwise of no use. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, + /* DMA channels 16-63 DOES NOT exist */ + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS + }, + + /** + * \brief Mapping from each DMA channel to a TCC. This specific + * TCC code will be returned when the transfer is completed + * on the mapped channel. + */ + { + 0u, 1u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 4u, 5u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 8u, 9u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 12u, 13u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + /* DMA channels 16-63 DOES NOT exist */ + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC + }, + + /** + * \brief Mapping of DMA channels to Hardware Events from + * various peripherals, which use EDMA for data transfer. + * All channels need not be mapped, some can be free also. + */ + { + 0x00003333u, + 0x00000000u + } + }, + + { + /* EDMA3 INSTANCE# 1 */ + /** Total number of DMA Channels supported by the EDMA3 Controller */ + 64u, + /** Total number of QDMA Channels supported by the EDMA3 Controller */ + 8u, + /** Total number of TCCs supported by the EDMA3 Controller */ + 64u, + /** Total number of PaRAM Sets supported by the EDMA3 Controller */ + 512u, + /** Total number of Event Queues in the EDMA3 Controller */ + 4u, + /** Total number of Transfer Controllers (TCs) in the EDMA3 Controller */ + 4u, + /** Number of Regions on this EDMA3 controller */ + 8u, + + /** + * \brief Channel mapping existence + * A value of 0 (No channel mapping) implies that there is fixed association + * for a channel number to a parameter entry number or, in other words, + * PaRAM entry n corresponds to channel n. + */ + 1u, + + /** Existence of memory protection feature */ + 1u, + + /** Global Register Region of CC Registers */ + (void *)0x02720000u, + /** Transfer Controller (TC) Registers */ + { + (void *)0x02770000u, + (void *)0x02778000u, + (void *)0x02780000u, + (void *)0x02788000u, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL + }, + /** Interrupt no. for Transfer Completion */ + 8u, + /** Interrupt no. for CC Error */ + 0u, + /** Interrupt no. for TCs Error */ + { + 2u, + 3u, + 4u, + 5u, + 0u, + 0u, + 0u, + 0u, + }, + + /** + * \brief EDMA3 TC priority setting + * + * User can program the priority of the Event Queues + * at a system-wide level. This means that the user can set the + * priority of an IO initiated by either of the TCs (Transfer Controllers) + * relative to IO initiated by the other bus masters on the + * device (ARM, DSP, USB, etc) + */ + { + 0u, + 1u, + 2u, + 3u, + 0u, + 0u, + 0u, + 0u + }, + /** + * \brief To Configure the Threshold level of number of events + * that can be queued up in the Event queues. EDMA3CC error register + * (CCERR) will indicate whether or not at any instant of time the + * number of events queued up in any of the event queues exceeds + * or equals the threshold/watermark value that is set + * in the queue watermark threshold register (QWMTHRA). + */ + { + 16u, + 16u, + 16u, + 16u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief To Configure the Default Burst Size (DBS) of TCs. + * An optimally-sized command is defined by the transfer controller + * default burst size (DBS). Different TCs can have different + * DBS values. It is defined in Bytes. + */ + { + 8u, + 8u, + 8u, + 8u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief Mapping from each DMA channel to a Parameter RAM set, + * if it exists, otherwise of no use. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, + 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, + 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, + 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u, + 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, + 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u + }, + + /** + * \brief Mapping from each DMA channel to a TCC. This specific + * TCC code will be returned when the transfer is completed + * on the mapped channel. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, + 40u, 41u, 42u, 43u, 44u, 45u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, + 56u, 57u, 58u, 59u, 60u, 61u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP + }, + + /** + * \brief Mapping of DMA channels to Hardware Events from + * various peripherals, which use EDMA for data transfer. + * All channels need not be mapped, some can be free also. + */ + { + 0x3FFF3FFFu, + 0x3FFF3FFFu + } + }, + + { + /* EDMA3 INSTANCE# 2 */ + /** Total number of DMA Channels supported by the EDMA3 Controller */ + 64u, + /** Total number of QDMA Channels supported by the EDMA3 Controller */ + 8u, + /** Total number of TCCs supported by the EDMA3 Controller */ + 64u, + /** Total number of PaRAM Sets supported by the EDMA3 Controller */ + 512u, + /** Total number of Event Queues in the EDMA3 Controller */ + 4u, + /** Total number of Transfer Controllers (TCs) in the EDMA3 Controller */ + 4u, + /** Number of Regions on this EDMA3 controller */ + 8u, + + /** + * \brief Channel mapping existence + * A value of 0 (No channel mapping) implies that there is fixed association + * for a channel number to a parameter entry number or, in other words, + * PaRAM entry n corresponds to channel n. + */ + 1u, + + /** Existence of memory protection feature */ + 1u, + + /** Global Register Region of CC Registers */ + (void *)0x02740000u, + /** Transfer Controller (TC) Registers */ + { + (void *)0x02790000u, + (void *)0x02798000u, + (void *)0x027A0000u, + (void *)0x027A8000u, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL + }, + /** Interrupt no. for Transfer Completion */ + 24u, + /** Interrupt no. for CC Error */ + 16u, + /** Interrupt no. for TCs Error */ + { + 18u, + 19u, + 20u, + 21u, + 0u, + 0u, + 0u, + 0u, + }, + + /** + * \brief EDMA3 TC priority setting + * + * User can program the priority of the Event Queues + * at a system-wide level. This means that the user can set the + * priority of an IO initiated by either of the TCs (Transfer Controllers) + * relative to IO initiated by the other bus masters on the + * device (ARM, DSP, USB, etc) + */ + { + 0u, + 1u, + 2u, + 3u, + 0u, + 0u, + 0u, + 0u + }, + /** + * \brief To Configure the Threshold level of number of events + * that can be queued up in the Event queues. EDMA3CC error register + * (CCERR) will indicate whether or not at any instant of time the + * number of events queued up in any of the event queues exceeds + * or equals the threshold/watermark value that is set + * in the queue watermark threshold register (QWMTHRA). + */ + { + 16u, + 16u, + 16u, + 16u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief To Configure the Default Burst Size (DBS) of TCs. + * An optimally-sized command is defined by the transfer controller + * default burst size (DBS). Different TCs can have different + * DBS values. It is defined in Bytes. + */ + { + 8u, + 8u, + 8u, + 8u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief Mapping from each DMA channel to a Parameter RAM set, + * if it exists, otherwise of no use. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, + 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, + 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, + 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u, + 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, + 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u + }, + + /** + * \brief Mapping from each DMA channel to a TCC. This specific + * TCC code will be returned when the transfer is completed + * on the mapped channel. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 32u, 33u, 34u, 35u, 36u, 37u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 40u, 41u, 42u, 43u, 44u, 45u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 48u, 49u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 56u, 57u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP + }, + + /** + * \brief Mapping of DMA channels to Hardware Events from + * various peripherals, which use EDMA for data transfer. + * All channels need not be mapped, some can be free also. + */ + { + 0x3FFC3FFFu, + 0x03033F3Fu + } + }, +}; + +EDMA3_DRV_InstanceInitConfig sampleInstInitConfig[NUM_EDMA3_INSTANCES][EDMA3_MAX_REGIONS] = + { + /* EDMA3 INSTANCE# 0 */ + { + /* Resources owned/reserved by region 0 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0xFFFF000Fu, 0x00000FFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000003u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 */ + {0x00000003u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 */ + {0x00000003u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 1 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x000000F0u, 0xFFFFF000u, 0x000000FFu, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x000000F0u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x0000000Cu}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x000000F0u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000030u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000030u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000030u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 2 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000F00u, 0x00000000u, 0xFFFFFF00u, 0x0000000Fu, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000F00u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000030u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000F00u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000300u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000300u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 3 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0xFFFFFFF0u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000F000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x000000C0u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000F000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00003000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00003000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00003000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 4 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 5 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 6 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 7 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + }, + + /* EDMA3 INSTANCE# 1 */ + { + /* Resources owned/reserved by region 0 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000FFFFu, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 159 128 191 160 223 192 255 224 */ + 0xFFFFFFFFu, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000FFFFu, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000003u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000FFFFu, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00003FFFu, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00003FFFu, 0x00000000u}, + }, + + /* Resources owned/reserved by region 1 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0xFFFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 287 256 319 288 351 320 383 352 */ + 0xFFFFFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x0000000Cu}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x3FFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 2 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 415 384 447 416 479 448 511 480 */ + 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000030u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00003FFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + }, + + /* Resources owned/reserved by region 3 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0xFFFF0000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0xFFFF0000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x000000C0u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0xFFFF0000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x3FFF0000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x3FFF0000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x3FFF0000u}, + }, + + /* Resources owned/reserved by region 4 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 5 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 6 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 7 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + }, + + /* EDMA3 INSTANCE# 2 */ + { + /* Resources owned/reserved by region 0 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000FFF0u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 159 128 191 160 223 192 255 224 */ + 0xFFFFFFFFu, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000FFF0u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000003u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000FFF0u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00003FF0u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00003FF0u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00003FF0u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 1 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0xFFFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 287 256 319 288 351 320 383 352 */ + 0xFFFFFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x0000000Cu}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x3FFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 2 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 415 384 447 416 479 448 511 480 */ + 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000030u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00003FFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + }, + + /* Resources owned/reserved by region 3 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000000Fu, 0xFFFF00FFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000000Fu, 0xFFFF00FFu}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x000000C0u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000000Fu, 0xFFFF00FFu}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000000Fu, 0x0303003Cu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x0303003Cu}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x0303003Cu}, + }, + + /* Resources owned/reserved by region 4 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 5 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 6 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 7 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + }, + }; + +/* End of File */ diff --git a/example/src/sample_cs.c b/example/src/sample_cs.c new file mode 100644 index 0000000..5057ef3 --- /dev/null +++ b/example/src/sample_cs.c @@ -0,0 +1,503 @@ +/* + * sample_cs.c + * + * Sample functions showing the implementation of critical section entry/exit + * routines and various semaphore related routines (all BIOS6 depenedent). + * These implementations MUST be provided by the user / application, using the + * EDMA3 driver, for its correct functioning. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include +#include +#include +#include +#include +#include + +#include "sample.h" + +#define CHECK_OS_PROTECT_FUNCTIONS 0 + +extern unsigned int ccXferCompInt[][EDMA3_MAX_REGIONS]; +extern unsigned int ccErrorInt[]; +extern unsigned int tcErrorInt[][EDMA3_MAX_TC]; + +/** + * DSP instance number on which the executable is running. Its value is + * determined by reading the processor specific register DNUM. + */ +extern unsigned int dsp_num; +extern unsigned int tpccRegionUsedLoc; +extern unsigned int gemEvents[2]; + +/* Local variables used for Temp Fix */ +#if CHECK_OS_PROTECT_FUNCTIONS +#include +#include "c6x.h" + +volatile unsigned int testOsFuncFlag = 0; +volatile unsigned int testOsFuncLog[2][100]; +volatile unsigned int testOsFuncCntr[2] = {0,0}; + +#endif + +Void edmaTestInit(Void) +{ +#if CHECK_OS_PROTECT_FUNCTIONS + Int i; + for(i=0;i<100;i++) + { + testOsFuncLog[0][i] = 0; + testOsFuncLog[1][i] = 0; + } + testOsFuncCntr[0] = 0; + testOsFuncCntr[1] = 0; +#endif +} + +/** + * \brief EDMA3 OS Protect Entry + * + * This function saves the current state of protection in 'intState' + * variable passed by caller, if the protection level is + * EDMA3_OS_PROTECT_INTERRUPT. It then applies the requested level of + * protection. + * For EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION and + * EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR, variable 'intState' is ignored, + * and the requested interrupt is disabled. + * For EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR, '*intState' specifies the + * Transfer Controller number whose interrupt needs to be disabled. + * + * \param level is numeric identifier of the desired degree of protection. + * \param intState is memory location where current state of protection is + * saved for future use while restoring it via edma3OsProtectExit() (Only + * for EDMA3_OS_PROTECT_INTERRUPT protection level). + * \return None + */ +void edma3OsProtectEntry (unsigned int edma3InstanceId, + int level, unsigned int *intState) + { +#if CHECK_OS_PROTECT_FUNCTIONS + testOsFuncLog[0][testOsFuncCntr[0]++] = TSCL; +#endif + if (((level == EDMA3_OS_PROTECT_INTERRUPT) + || (level == EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR)) + && (intState == NULL)) + { + return; + } + else + { + switch (level) + { + /* Disable all (global) interrupts */ + case EDMA3_OS_PROTECT_INTERRUPT : + *intState = Hwi_disable(); + break; + + /* Disable scheduler */ + case EDMA3_OS_PROTECT_SCHEDULER : + Task_disable(); + break; + + /* Disable EDMA3 transfer completion interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 0 ) + testOsFuncFlag = 1; + else + System_exit(1); +#endif + CpIntc_disableSysInt(WHICH_CPINTC_NUM(dsp_num), ccXferCompInt[edma3InstanceId][tpccRegionUsedLoc]); + //EventCombiner_disableEvent(ccXferCompInt[edma3InstanceId][dsp_num]); + //intState_cs = Hwi_disable(); // Temp fix + //eventId = CpIntc_getEventId(ccXferHostInt[edma3InstanceId][dsp_num]); + //EventCombiner_disableEvent(gemEvents[0]); + break; + + /* Disable EDMA3 CC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 0 ) + testOsFuncFlag = 2; + else + System_exit(1); +#endif + CpIntc_disableSysInt(WHICH_CPINTC_NUM(dsp_num), ccErrorInt[edma3InstanceId]); + //EventCombiner_disableEvent(ccErrorInt[edma3InstanceId]); + break; + + /* Disable EDMA3 TC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR : + switch (*intState) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + /* Fall through... */ + /* Disable the corresponding interrupt */ +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 0 ) + testOsFuncFlag = 3; + else + System_exit(1); +#endif + CpIntc_disableSysInt(WHICH_CPINTC_NUM(dsp_num), tcErrorInt[edma3InstanceId][*intState]); + //EventCombiner_disableEvent(tcErrorInt[edma3InstanceId][*intState]); + break; + + default: + break; + } + + break; + + default: + break; + } + } + } + + +/** + * \brief EDMA3 OS Protect Exit + * + * This function undoes the protection enforced to original state + * as is specified by the variable 'intState' passed, if the protection + * level is EDMA3_OS_PROTECT_INTERRUPT. + * For EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION and + * EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR, variable 'intState' is ignored, + * and the requested interrupt is enabled. + * For EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR, 'intState' specifies the + * Transfer Controller number whose interrupt needs to be enabled. + * \param level is numeric identifier of the desired degree of protection. + * \param intState is original state of protection at time when the + * corresponding edma3OsProtectEntry() was called (Only + * for EDMA3_OS_PROTECT_INTERRUPT protection level). + * \return None + */ +void edma3OsProtectExit (unsigned int edma3InstanceId, + int level, unsigned int intState) + { +#if CHECK_OS_PROTECT_FUNCTIONS + testOsFuncLog[1][testOsFuncCntr[1]++] = TSCL; +#endif + switch (level) + { + /* Enable all (global) interrupts */ + case EDMA3_OS_PROTECT_INTERRUPT : + Hwi_restore(intState); + break; + + /* Enable scheduler */ + case EDMA3_OS_PROTECT_SCHEDULER : + Task_enable(); + break; + + /* Enable EDMA3 transfer completion interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 1 ) + testOsFuncFlag = 0; + else + System_exit(0); +#endif + CpIntc_enableSysInt(WHICH_CPINTC_NUM(dsp_num), ccXferCompInt[edma3InstanceId][tpccRegionUsedLoc]); + //EventCombiner_enableEvent(ccXferCompInt[edma3InstanceId][dsp_num]); + //Hwi_restore(intState_cs); // Temp fix + //eventId = CpIntc_getEventId(ccXferHostInt[edma3InstanceId][dsp_num]); + //EventCombiner_enableEvent(gemEvents[0]); + break; + + /* Enable EDMA3 CC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 2 ) + testOsFuncFlag = 0; + else + System_exit(0); +#endif + CpIntc_enableSysInt(WHICH_CPINTC_NUM(dsp_num), ccErrorInt[edma3InstanceId]); + //EventCombiner_enableEvent(ccErrorInt[edma3InstanceId]); + break; + + /* Enable EDMA3 TC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR : + switch (intState) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + /* Fall through... */ + /* Enable the corresponding interrupt */ +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 3 ) + testOsFuncFlag = 0; + else + System_exit(0); +#endif + CpIntc_enableSysInt(WHICH_CPINTC_NUM(dsp_num), tcErrorInt[edma3InstanceId][intState]); + //EventCombiner_enableEvent(tcErrorInt[edma3InstanceId][intState]); + break; + + default: + break; + } + + break; + + default: + break; + } + } + + +/** + * \brief EDMA3 Cache Invalidate + * + * This function invalidates the D cache. + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheInvalidate(unsigned int mem_start_ptr, + unsigned int num_bytes) + { + EDMA3_DRV_Result cacheInvResult = EDMA3_DRV_SOK; + + /* Verify whether the start address is cache aligned or not */ + if((mem_start_ptr & (EDMA3_CACHE_LINE_SIZE_IN_BYTES-1u)) != 0) + { +#ifdef EDMA3_DRV_DEBUG + EDMA3_DRV_PRINTF("\r\n Cache : Memory is not %d bytes alinged\r\n", + EDMA3_CACHE_LINE_SIZE_IN_BYTES); +#endif + cacheInvResult = EDMA3_NON_ALIGNED_BUFFERS_ERROR; + } + else + { + Cache_inv((Ptr)mem_start_ptr, num_bytes, Cache_Type_ALL, TRUE); + } + + return cacheInvResult; +} + + + +/** + * \brief EDMA3 Cache Flush + * + * This function flushes (cleans) the Cache + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheFlush(unsigned int mem_start_ptr, + unsigned int num_bytes) + { + EDMA3_DRV_Result cacheFlushResult = EDMA3_DRV_SOK; + + /* Verify whether the start address is cache aligned or not */ + if((mem_start_ptr & (EDMA3_CACHE_LINE_SIZE_IN_BYTES-1u)) != 0) + { +#ifdef EDMA3_DRV_DEBUG + EDMA3_DRV_PRINTF("\r\n Cache : Memory is not %d bytes alinged\r\n", + EDMA3_CACHE_LINE_SIZE_IN_BYTES); +#endif + cacheFlushResult = EDMA3_NON_ALIGNED_BUFFERS_ERROR; + } + else + { + Cache_wb((Ptr)mem_start_ptr, num_bytes, Cache_Type_ALL, TRUE); + } + + return cacheFlushResult; +} + + +/** + * Counting Semaphore related functions (OS dependent) should be + * called/implemented by the application. A handle to the semaphore + * is required while opening the driver/resource manager instance. + */ + +/** + * \brief EDMA3 OS Semaphore Create + * + * This function creates a counting semaphore with specified + * attributes and initial value. It should be used to create a semaphore + * with initial value as '1'. The semaphore is then passed by the user + * to the EDMA3 driver/RM for proper sharing of resources. + * \param initVal [IN] is initial value for semaphore + * \param semParams [IN] is the semaphore attributes. + * \param hSem [OUT] is location to recieve the handle to just created + * semaphore + * \return EDMA3_DRV_SOK if succesful, else a suitable error code. + */ +EDMA3_DRV_Result edma3OsSemCreate(int initVal, + const Semaphore_Params *semParams, + EDMA3_OS_Sem_Handle *hSem) + { + EDMA3_DRV_Result semCreateResult = EDMA3_DRV_SOK; + + if(NULL == hSem) + { + semCreateResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + *hSem = (EDMA3_OS_Sem_Handle)Semaphore_create(initVal, semParams, NULL); + if ( (*hSem) == NULL ) + { + semCreateResult = EDMA3_DRV_E_SEMAPHORE; + } + } + + return semCreateResult; + } + + +/** + * \brief EDMA3 OS Semaphore Delete + * + * This function deletes or removes the specified semaphore + * from the system. Associated dynamically allocated memory + * if any is also freed up. + * \param hSem [IN] handle to the semaphore to be deleted + * \return EDMA3_DRV_SOK if succesful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemDelete(EDMA3_OS_Sem_Handle hSem) + { + EDMA3_DRV_Result semDeleteResult = EDMA3_DRV_SOK; + + if(NULL == hSem) + { + semDeleteResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + Semaphore_delete((Semaphore_Handle *)&hSem); + } + + return semDeleteResult; + } + + +/** + * \brief EDMA3 OS Semaphore Take + * + * This function takes a semaphore token if available. + * If a semaphore is unavailable, it blocks currently + * running thread in wait (for specified duration) for + * a free semaphore. + * \param hSem [IN] is the handle of the specified semaphore + * \param mSecTimeout [IN] is wait time in milliseconds + * \return EDMA3_DRV_Result if successful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemTake(EDMA3_OS_Sem_Handle hSem, int mSecTimeout) + { + EDMA3_DRV_Result semTakeResult = EDMA3_DRV_SOK; + unsigned short semPendResult; + + if(NULL == hSem) + { + semTakeResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + semPendResult = Semaphore_pend(hSem, mSecTimeout); + if (semPendResult == FALSE) + { + semTakeResult = EDMA3_DRV_E_SEMAPHORE; + } + } + + return semTakeResult; + } + + +/** + * \brief EDMA3 OS Semaphore Give + * + * This function gives or relinquishes an already + * acquired semaphore token + * \param hSem [IN] is the handle of the specified semaphore + * \return EDMA3_DRV_Result if successful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemGive(EDMA3_OS_Sem_Handle hSem) + { + EDMA3_DRV_Result semGiveResult = EDMA3_DRV_SOK; + + if(NULL == hSem) + { + semGiveResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + Semaphore_post(hSem); + } + + return semGiveResult; + } + +/* End of File */ + diff --git a/example/src/sample_init.c b/example/src/sample_init.c new file mode 100644 index 0000000..5741313 --- /dev/null +++ b/example/src/sample_init.c @@ -0,0 +1,217 @@ +/* + * sample_init.c + * + * Sample Initialization for the EDMA3 Driver for BIOS 6 based applications. + * It should be MANDATORILY done once before EDMA3 usage. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include +#include + +#include +#include +#include + +#include "sample.h" + +/** @brief EDMA3 Driver Instance specific Semaphore handle */ +extern EDMA3_OS_Sem_Handle semHandle[]; + +/** To Register the ISRs with the underlying OS, if required. */ +extern void registerEdma3Interrupts ( unsigned int edma3Id, + unsigned int tpccRegionUsed, + unsigned int dsp_num); +/** To Unregister the ISRs with the underlying OS, if previously registered. */ +extern void unregisterEdma3Interrupts ( unsigned int edma3Id, + unsigned int dsp_num); + +/* To find out the DSP# */ +extern unsigned short determineProcId(); + +/** + * To check whether the global EDMA3 configuration is required or not. + * It should be done ONCE by any of the masters present in the system. + * This function checks whether the global configuration is required by the + * current master or not. In case of many masters, it should be done only + * by one of the masters. Hence this function will return TRUE only once + * and FALSE for all other masters. + */ +extern unsigned short isGblConfigRequired(unsigned int dspNum); + +/** + * DSP instance number on which the executable is running. Its value is + * determined by reading the processor specific register DNUM. + */ +unsigned int dsp_num; + +/* Number of EDMA3 controllers present in the system */ +extern const unsigned int numEdma3Instances; + +/* External Global Configuration Structure */ +extern EDMA3_DRV_GblConfigParams sampleEdma3GblCfgParams[]; + +/* External Instance Specific Configuration Structure */ +extern EDMA3_DRV_InstanceInitConfig sampleInstInitConfig[][EDMA3_MAX_REGIONS]; + +/* Variables defined in tcp3d_main.c +extern unsigned int tpccRegionUsed; +extern unsigned int dspCoreID;*/ +unsigned int tpccRegionUsedLoc; + +/* variable available only if CHECK_OS_PROTECT_FUNCTIONS is defined in sample_cs.c */ +//extern unsigned int testOsFuncLog[2][100]; +extern Void edmaTestInit(Void); + +/** + * \brief EDMA3 Initialization + * + * This function initializes the EDMA3 Driver and registers the + * interrupt handlers. + * + * \return EDMA3_DRV_SOK if success, else error code + */ +EDMA3_DRV_Handle edma3init (unsigned int edma3Id, EDMA3_DRV_Result *errorCode, + unsigned int dspCoreID, unsigned int tpccRegionUsed) + { + EDMA3_DRV_Result edma3Result = EDMA3_DRV_E_INVALID_PARAM; + Semaphore_Params semParams; + EDMA3_DRV_GblConfigParams *globalConfig = NULL; + EDMA3_DRV_InstanceInitConfig *instanceConfig = NULL; + EDMA3_DRV_InitConfig initCfg; + EDMA3_RM_MiscParam miscParam; + EDMA3_DRV_Handle hEdma = NULL; + + if ((edma3Id >= numEdma3Instances) || (errorCode == NULL)) + return hEdma; + + edmaTestInit();// see sample_cs.c file + + /* DSP instance number */ + dsp_num = dspCoreID; //determineProcId(); + //tpccRegionUsed = 3;//(3-dsp_num); + tpccRegionUsedLoc = tpccRegionUsed; + + globalConfig = &sampleEdma3GblCfgParams[edma3Id]; + + /* Configure it as master, if required */ + miscParam.isSlave = 0;//isGblConfigRequired(dsp_num); + edma3Result = EDMA3_DRV_create (edma3Id, globalConfig , + (void *)&miscParam); + + if (edma3Result == EDMA3_DRV_SOK) + { + /** + * Driver Object created successfully. + * Create a semaphore now for driver instance. + */ + Semaphore_Params_init(&semParams); + + initCfg.drvSemHandle = NULL; + edma3Result = edma3OsSemCreate(1, &semParams, &initCfg.drvSemHandle); + } + + if (edma3Result == EDMA3_DRV_SOK) + { + /* Save the semaphore handle for future use */ + semHandle[edma3Id] = initCfg.drvSemHandle; + + /* configuration structure for the Driver */ + instanceConfig = &sampleInstInitConfig[edma3Id][tpccRegionUsed]; + + initCfg.isMaster = TRUE; + /* Choose shadow region according to the DSP# */ + initCfg.regionId = (EDMA3_RM_RegionId)tpccRegionUsed; + /* Driver instance specific config NULL */ + initCfg.drvInstInitConfig = instanceConfig; + + initCfg.gblerrCb = NULL; + initCfg.gblerrData = NULL; + + /* Open the Driver Instance */ + hEdma = EDMA3_DRV_open (edma3Id, (void *) &initCfg, &edma3Result); + } + + if(hEdma && (edma3Result == EDMA3_DRV_SOK)) + { + /** + * Register Interrupt Handlers for various interrupts + * like transfer completion interrupt, CC error + * interrupt, TC error interrupts etc, if required. + */ + registerEdma3Interrupts(edma3Id, tpccRegionUsed, dsp_num); + } + + *errorCode = edma3Result; + return hEdma; + } + + +/** + * \brief EDMA3 De-initialization + * + * This function removes the EDMA3 Driver instance and unregisters the + * interrupt handlers. + * + * \return EDMA3_DRV_SOK if success, else error code + */ +EDMA3_DRV_Result edma3deinit (unsigned int edma3Id, EDMA3_DRV_Handle hEdma) + { + EDMA3_DRV_Result edma3Result = EDMA3_DRV_E_INVALID_PARAM; + + /* Unregister Interrupt Handlers first */ + unregisterEdma3Interrupts(edma3Id, dsp_num); + + /* Delete the semaphore */ + edma3Result = edma3OsSemDelete(semHandle[edma3Id]); + + if (EDMA3_DRV_SOK == edma3Result ) + { + /* Make the semaphore handle as NULL. */ + semHandle[edma3Id] = NULL; + + /* Now, close the EDMA3 Driver Instance */ + edma3Result = EDMA3_DRV_close (hEdma, NULL); + } + + if (EDMA3_DRV_SOK == edma3Result ) + { + /* Now, delete the EDMA3 Driver Object */ + edma3Result = EDMA3_DRV_delete (edma3Id, NULL); + } + + return edma3Result; + } + +/* End of File */ + diff --git a/example/src/sample_int_reg.c b/example/src/sample_int_reg.c new file mode 100644 index 0000000..627a097 --- /dev/null +++ b/example/src/sample_int_reg.c @@ -0,0 +1,482 @@ +/* + * sample_int_reg.c + * + * Platform specific interrupt registration and un-registration routines. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include +#include +#include +#include + +#include + +#include "sample.h" + +extern unsigned int ccXferCompInt[][EDMA3_MAX_REGIONS]; +extern unsigned int ccErrorInt[]; +extern unsigned int tcErrorInt[][EDMA3_MAX_TC]; +extern unsigned int numEdma3Tc[]; + +#define DEBUG_PRINTS 0 +#define MAP_ONCE_ONLY 1 +#define ISR_APPROACH_WHILE 1 // 0 would make the code to hang + +#if EDMA_LOCAL_COMP_ISR +#include +#include + +//extern CSL_TpccRegs *tpcc2Regs; +extern unsigned int tpccRegionUsedLoc; + +tccCallbackParams edma3IntrParamsLoc[64]; +unsigned int allocatedTCCsLoc[2u] = {0x0u, 0x0u}; + +static void edma3ComplHandlerLoc (unsigned int edma3Id); +#endif + +void (*ptrEdma3TcIsrHandler[EDMA3_MAX_TC])(unsigned int arg) = + { + &lisrEdma3TC0ErrHandler0, + &lisrEdma3TC1ErrHandler0, + &lisrEdma3TC2ErrHandler0, + &lisrEdma3TC3ErrHandler0, + &lisrEdma3TC4ErrHandler0, + &lisrEdma3TC5ErrHandler0, + &lisrEdma3TC6ErrHandler0, + &lisrEdma3TC7ErrHandler0, + }; + +unsigned int hwiInterrupt = 8; + +unsigned int gemEvents[2]; + +/* Host interrupts for transfer completion (per spec intc_1.3.4.12.xlsx) */ +/* First 4 cores are connected from CP_INTC0 and last 4 cores are connected from CP_INTC1 */ +//unsigned int ccXferHostInt[NUM_EDMA3_INSTANCES][NUM_DSPS] = { + /* CP_INTC0 | CP_INTC1 */ +unsigned int ccXferHostInt[5][8] = { + {68u, 78u, 88u, 98u, 68u, 78u, 88u, 98u}, + {69u, 79u, 89u, 99u, 69u, 79u, 89u, 99u}, + {70u, 80u, 90u, 100u, 70u, 80u, 90u, 100u}, + {71u, 81u, 91u, 101u, 71u, 81u, 91u, 101u}, + {72u, 82u, 92u, 102u, 72u, 82u, 92u, 102u}, + }; +unsigned int edma3ErrHostInt[5][8] = { + {73u, 83u, 93u, 103u, 73u, 83u, 93u, 103u}, + {64u, 74u, 84u, 94u, 64u, 74u, 84u, 94u}, + {65u, 75u, 85u, 95u, 65u, 75u, 85u, 95u}, + {66u, 76u, 86u, 96u, 66u, 76u, 86u, 96u}, + {67u, 77u, 87u, 97u, 67u, 77u, 87u, 97u}, + }; + +//extern unsigned int dsp_num; +//extern unsigned int tpccRegionUsed; +#if USE_LOCAL_CPINTC_DISPATCH +extern Void CpIntc_dispatchLoc(UInt hostInt); +#endif + +/** To Register the ISRs with the underlying OS, if required */ +void registerEdma3Interrupts ( unsigned int edma3Id, + unsigned int tpccRegionUsed, + unsigned int dsp_num) + { + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ + unsigned int numTc = 0; +#if MAP_ONCE_ONLY + static UInt32 mapDone = 0; +#endif + unsigned int cpIntcNum = WHICH_CPINTC_NUM(dsp_num);//(dsp_num > 3)? 1: 0; + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Transfer completion ISR */ + CpIntc_dispatchPlug(ccXferCompInt[edma3Id][tpccRegionUsed], +#if EDMA_LOCAL_COMP_ISR + edma3ComplHandlerLoc, +#else + lisrEdma3ComplHandler0, +#endif + edma3Id, + TRUE); +#if MAP_ONCE_ONLY + if (!mapDone) +#endif + CpIntc_mapSysIntToHostInt(cpIntcNum, ccXferCompInt[edma3Id][tpccRegionUsed], + ccXferHostInt[edma3Id][dsp_num]); + CpIntc_enableHostInt(cpIntcNum, ccXferHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(ccXferHostInt[edma3Id][dsp_num]); + EventCombiner_dispatchPlug (eventId, +#if USE_LOCAL_CPINTC_DISPATCH + CpIntc_dispatchLoc, +#else + CpIntc_dispatch, +#endif + ccXferHostInt[edma3Id][dsp_num], + TRUE); +#if DEBUG_PRINTS + System_printf("\t\t ccXferCompInt : %d \n", ccXferCompInt[edma3Id][tpccRegionUsed]); + System_printf("\t\t ccXferHostInt : %d \n", ccXferHostInt[edma3Id][dsp_num]); + System_printf("\t\t eventId : %d \n", eventId); +#endif + gemEvents[0] = eventId; + + /* CC Error ISR */ + CpIntc_dispatchPlug(ccErrorInt[edma3Id], lisrEdma3CCErrHandler0, + edma3Id, TRUE); +#if MAP_ONCE_ONLY + if (!mapDone) +#endif + CpIntc_mapSysIntToHostInt(cpIntcNum, ccErrorInt[edma3Id], + edma3ErrHostInt[edma3Id][dsp_num]); +#if DEBUG_PRINTS + System_printf("\t\t ccErrorInt : %d \n", ccErrorInt[edma3Id]); + System_printf("\t\t edma3ErrHostInt : %d \n", edma3ErrHostInt[edma3Id][dsp_num]); +#endif + + /* TC Error ISR */ + while (numTc < numEdma3Tc[edma3Id]) + { + CpIntc_dispatchPlug(tcErrorInt[edma3Id][numTc], + (CpIntc_FuncPtr )(ptrEdma3TcIsrHandler[numTc]), + edma3Id, TRUE); +#if MAP_ONCE_ONLY + if (!mapDone) +#endif + CpIntc_mapSysIntToHostInt(cpIntcNum, tcErrorInt[edma3Id][numTc], + edma3ErrHostInt[edma3Id][dsp_num]); +#if DEBUG_PRINTS + System_printf("\t\t tcErrorInt : %d \n", tcErrorInt[edma3Id][numTc]); + System_printf("\t\t edma3ErrHostInt : %d \n", edma3ErrHostInt[edma3Id][dsp_num]); +#endif + numTc++; + } + /* Enable the host interrupt which is common for both CC and TC error */ + CpIntc_enableHostInt(cpIntcNum, edma3ErrHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(edma3ErrHostInt[edma3Id][dsp_num]); + EventCombiner_dispatchPlug (eventId, +#if USE_LOCAL_CPINTC_DISPATCH + CpIntc_dispatchLoc, +#else + CpIntc_dispatch, +#endif + edma3ErrHostInt[edma3Id][dsp_num], + TRUE); +#if DEBUG_PRINTS + System_printf("\t\t eventId : %d \n", eventId); +#endif + gemEvents[1] = eventId; + + //Hwi_enableInterrupt(hwiInterrupt); + + /* enable the 'global' switch */ + CpIntc_enableAllHostInts(cpIntcNum); + +#if EDMA_LOCAL_COMP_ISR + tpccRegionUsedLoc = tpccRegionUsed; +#endif + +#if MAP_ONCE_ONLY + mapDone = 1; +#endif + + /* Restore interrupts */ + Hwi_restore(cookie); + } + +/** To Unregister the ISRs with the underlying OS, if previously registered. */ +void unregisterEdma3Interrupts (unsigned int edma3Id, unsigned int dsp_num) + { + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ +// unsigned int numTc = 0; + unsigned int cpIntcNum = WHICH_CPINTC_NUM(dsp_num);//(dsp_num > 3)? 1: 0; + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Transfer completion ISR */ + CpIntc_disableHostInt(cpIntcNum, ccXferHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(ccXferHostInt[edma3Id][dsp_num]); + EventCombiner_disableEvent(eventId); + + /* CC/TC Error ISR */ + CpIntc_disableHostInt(cpIntcNum, edma3ErrHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(edma3ErrHostInt[edma3Id][dsp_num]); + EventCombiner_disableEvent(eventId); + + /** + * Clear all system interrupt to host interrupt mapping. + * - might not be needed + * - doing to get clean numbers from cpintc dispatcher for debugging + * - DID NOT HELP, so commenting for now + */ +// CpIntc_mapSysIntToHostInt(cpIntcNum, ccXferCompInt[edma3Id][tpccRegionUsedLoc], 0); +// CpIntc_mapSysIntToHostInt(cpIntcNum, ccErrorInt[edma3Id], 0); +// while (numTc < numEdma3Tc[edma3Id]) +// { +// CpIntc_mapSysIntToHostInt(cpIntcNum, tcErrorInt[edma3Id][numTc], 0); +// numTc++; +// } + + /* Restore interrupts */ + Hwi_restore(cookie); + } + +#if EDMA_LOCAL_COMP_ISR +/** + * edma3ComplHandler + * \brief Interrupt handler for successful transfer completion. + * + * \note This function first disables its own interrupt to make it non- + * entrant. Later, after calling all the callback functions, it + * re-enables its own interrupt. + * + * \return None. + */ +UInt32 tpccIsrCntr = 0; +UInt32 tpccCbCntr = 0; +static void edma3ComplHandlerLoc (unsigned int edma3Id) + { +#if !ISR_APPROACH_WHILE + unsigned int Cnt; +#endif + volatile CSL_TPCC_ShadowRegs *shadowRegs = NULL; + volatile unsigned int pendingIrqs; + unsigned int indexl; + unsigned int indexh; + CSL_TpccRegs *tpcc2Regs = (CSL_TpccRegs *) CSL_EDMACC_2_REGS; + + tpccIsrCntr++; + + if (tpcc2Regs != NULL) + { + shadowRegs = (volatile CSL_TPCC_ShadowRegs *) + (&tpcc2Regs->SHADOW[tpccRegionUsedLoc]); + } + +#if !ISR_APPROACH_WHILE + Cnt = 0u; +#endif + pendingIrqs = 0u; + indexl = 1u; + indexh = 1u; + +#if ISR_APPROACH_WHILE + while((shadowRegs->TPCC_IPR !=0 ) || (shadowRegs->TPCC_IPRH !=0 )) + { + /* Loop for EDMA3_RM_COMPL_HANDLER_RETRY_COUNT number of time, + breaks when no pending interrupt is found */ + indexl = 0u; + pendingIrqs = shadowRegs->TPCC_IPR; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[0u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u) == TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPR register will NOT be cleared. + */ + if(edma3IntrParamsLoc[indexl].tccCb != NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICR = (1u << indexl); + + tpccCbCntr++; + + edma3IntrParamsLoc[indexl].tccCb (indexl, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[indexl].cbData); + } + } + ++indexl; + pendingIrqs >>= 1u; + } + + indexh = 0u; + pendingIrqs = shadowRegs->TPCC_IPRH; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[1u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u)==TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPRH register will NOT be cleared. + */ + if(edma3IntrParamsLoc[32u+indexh].tccCb!=NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICRH = (1u << indexh); + + edma3IntrParamsLoc[32u+indexh].tccCb(32u+indexh, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[32u+indexh].cbData); + } + } + ++indexh; + pendingIrqs >>= 1u; + } + } +#else // ISR_APPROACH_WHILE + if((shadowRegs->TPCC_IPR !=0 ) || (shadowRegs->TPCC_IPRH !=0 )) + { + /** + * Since an interrupt has found, we have to make sure that this + * interrupt (TCC) belongs to the TCCs allocated by us only. + * It might happen that someone else, who is using EDMA3 also, + * is the owner of this interrupt channel i.e. the TCC. + * For this, use the allocatedTCCs[], to check which all interrupt + * channels are owned by the EDMA3 RM Instances. + */ + + edma3OsProtectEntry (edma3Id, + EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION, + NULL); + + /* Loop for EDMA3_RM_COMPL_HANDLER_RETRY_COUNT number of time, + breaks when no pending interrupt is found */ + while ((Cnt < 10u) + && ((indexl != 0u) || (indexh != 0u))) + { + indexl = 0u; + pendingIrqs = shadowRegs->TPCC_IPR; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[0u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u) == TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPR register will NOT be cleared. + */ + if(edma3IntrParamsLoc[indexl].tccCb != NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICR = (1u << indexl); + + tpccCbCntr++; + + edma3IntrParamsLoc[indexl].tccCb (indexl, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[indexl].cbData); + } + } + ++indexl; + pendingIrqs >>= 1u; + } + + indexh = 0u; + pendingIrqs = shadowRegs->TPCC_IPRH; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[1u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u)==TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPRH register will NOT be cleared. + */ + if(edma3IntrParamsLoc[32u+indexh].tccCb!=NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICRH = (1u << indexh); + + edma3IntrParamsLoc[32u+indexh].tccCb(32u+indexh, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[32u+indexh].cbData); + } + } + ++indexh; + pendingIrqs >>= 1u; + } + + Cnt++; + } + + indexl = (shadowRegs->TPCC_IPR & allocatedTCCsLoc[0u]); + indexh = (shadowRegs->TPCC_IPRH & allocatedTCCsLoc[1u]); + + if((indexl !=0 ) || (indexh !=0 )) + { + shadowRegs->TPCC_IEVAL=0x1u; + } + + edma3OsProtectExit (edma3Id, + EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION, + NULL); + } + /* for testing only */ + else + { + while(1); + } +#endif // ISR_APPROACH_WHILE + } +#endif // EDMA_LOCAL_COMP_ISR diff --git a/example/src/tcp3d_codeBlkSeg.c b/example/src/tcp3d_codeBlkSeg.c new file mode 100644 index 0000000..b4cdb80 --- /dev/null +++ b/example/src/tcp3d_codeBlkSeg.c @@ -0,0 +1,208 @@ +/** + * \file tcp3d_codeBlkSeg.c + * + * \brief Calculates code block segmentation parameteres based on the block length and SW0 length. + * + * Copyright (c) Texas Instruments Incorporated 2008 + * + * Use of this software is controlled by the terms and conditions found in the + * license agreement under which this software has been supplied or provided. + * + */ +#include "tcp3d_codeBlkSeg.h" + +/** TCP3D SW0 nominal values */ +Int32 tcp3d_sw0_Tab[] = {16, 32, 48, 64, 96, 128}; + +/** Used for getting the sw0LenSel index values */ +Int32 TAB[] = {0, 1, 2, 3, 3, 4, 4, 5}; + +/** Table used for division optimization logic */ +Int32 shiftValTab [] = {4, 5, 4, 6, 5, 7}; + +/** Table used for division optimization logic */ +Uint32 mulValTab [] = {32768, 32768, 10923, 32768, 10923, 32768}; + +/** Table used for checking bounds */ +Uint32 frameLenTab[2][2] = {40,5114,40,6144}; + +/** + * \fn Int32 TCP3D_codeBlkSeg ( + * IN Uint32 blockLengthK, + * IN Uint8 numMAP, + * IN Uint8 * const RESTRICT sw0NomLen, + * OUT Uint8 * const RESTRICT sw0LenSel, + * OUT Uint8 * const RESTRICT sw1Len, + * OUT Uint8 * const RESTRICT sw2LenSel, + * OUT Uint8 * const RESTRICT numsw0) + * \brief Calculates code block segmentation parameteres based on the block length and SW0 length. + * + * + * \param[in] blockLengthK + * Code block length. (Number of information bits.) + * + * + * \param[in] numMAP + * Number of MAP decoders used. =1 for WCDMA, =2 for LTE and WiMAX + * + * \param[in] sw0NomLen + * Nominal length for the sliding window 0. Valid values are from the set: {16, 32, + * 48, 64, 96, 128}. Note that if [blockLengthK <= (numMAP * 128 * sw0NomLen)] does + * not hold, the function will pick the first greater length value from the set for which + * the above inequality holds, and will return it. + * + * This will be updated with the picked value. + * + * \param[out] sw0LenSel + * Input configuration register parameter. The value depends on the picked SW0 length + * used, (sw0NomLen), and the possible values are: + * 0 - 16 bits + * 1 - 32 bits + * 2 - 48 bits + * 3 - 64 bits + * 4 - 96 bits + * 5 - 128 bits + * + * + * \param[out] sw1Len + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 9 - 10 bits + * 10 - 11 bits + * 11 - 12 bits + * ... + * 127 - 128 bits + * + * + * \param[out] sw2LenSel + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 0 - SW2 is not present + * 1 - SW2 length is same as SW1 + * 2 - SW2 length is less by 2 bits from SW1 + * + * \param[out] numsw0 + * Input configuration register parameter. Number of SW0 used in the decoder. + * + * \return Return indicates PASS or FAIL with ZERO or non-ZERO values. + * + * + */ +Int32 TCP3D_codeBlkSeg ( + IN Uint32 blockLengthK, + IN Uint8 numMAP, + INOUT Uint8 * const RESTRICT sw0NomLen, + OUT Uint8 * const RESTRICT sw0LenSel, + OUT Uint8 * const RESTRICT sw1Len, + OUT Uint8 * const RESTRICT sw2LenSel, + OUT Uint8 * const RESTRICT numsw0) +{ + Int32 status = 0; + Int32 K, Kext; + Int32 numSWrem; + Int32 subFrameLen; + Int32 sw0LenSelTmp; + Int32 sw1LenTmp; + Int32 sw2LenSelTmp; + Int32 numsw0Tmp; + Int32 numSW; + Int32 shiftVal, mulVal; + Int32 sw0Len = *sw0NomLen; + + /** + * Check the bounds based on numMAP value. frameLenTab is for the bound values + * numMAP - mode - block length bounds + * 1 - 3GPP - [40,5114] + * 2 - LTE/WIMAX - [40,6144] + */ + if ( (blockLengthK < frameLenTab[numMAP-1][0]) || + (blockLengthK > frameLenTab[numMAP-1][1]) ) + { + status = 1; + return (status); + } + + K = blockLengthK; + Kext = ((K + 0x3)>>2)<<2; + + //Calculate sw0LenSelTmp, SW1Len, SW2LenSel, numsw0Tmp + subFrameLen = Kext >> numMAP; //Kext / (2*numMAP); + + sw0LenSelTmp = TAB[((sw0Len>>4)-1)&0x7]; + + //Check that this holds: (reg->NumInfoBits <= 128 * sparms->tcp3_SW0_length * numMap) + while((Kext > 128 * sw0Len * numMAP) && sw0LenSelTmp<6) + { + sw0LenSelTmp++; + sw0Len = tcp3d_sw0_Tab[sw0LenSelTmp]; + } + + //numSW = subFrameLen/sw0Len; Replaced by: + shiftVal = shiftValTab[sw0LenSelTmp]; + mulVal = mulValTab[sw0LenSelTmp]; + numSW = _mpysu((subFrameLen >> shiftVal), mulVal)>>15; + + numSWrem = subFrameLen - numSW*sw0Len; + if(numSWrem) + { + numSW++; + } + + if(numSW == 1) + { + numsw0Tmp = 0; + sw1LenTmp = subFrameLen-1; //stored value is (sw1_length -1) + sw2LenSelTmp = 0; //SW2 is Off. + } + else if(numSW == 2) + { + numsw0Tmp = 0; + if(subFrameLen & 0x3) + { + sw1LenTmp = 2*(subFrameLen>>2) + 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 2; //sw1LenTmp > SW2Len + } + else + { + sw1LenTmp = (subFrameLen>>1) - 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 1; //sw1LenTmp = SW2Len + } + } + else if( numSWrem <= (sw0Len>>1) ) + { + numsw0Tmp = numSW-2; + numSWrem = subFrameLen - (numSW-2)*sw0Len; + if((numSWrem) & 0x3) + { + sw1LenTmp = 2*(numSWrem>>2) + 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 2; //sw1LenTmp > SW2Len + } + else + { + sw1LenTmp = (numSWrem>>1) - 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 1; //sw1LenTmp = SW2Len + } + } + else + { + numsw0Tmp = numSW-1; + sw1LenTmp = numSWrem - 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 0; //SW2 is Off. + } + + + *sw0LenSel = (Uint8) sw0LenSelTmp; + *sw1Len = (Uint8) sw1LenTmp; + *sw2LenSel = (Uint8) sw2LenSelTmp; + *numsw0 = (Uint8) numsw0Tmp; + *sw0NomLen = (Uint8) sw0Len; + + return ( status ); + +} + + + + + + diff --git a/example/src/tcp3d_codeBlkSeg.h b/example/src/tcp3d_codeBlkSeg.h new file mode 100644 index 0000000..a67cbf3 --- /dev/null +++ b/example/src/tcp3d_codeBlkSeg.h @@ -0,0 +1,81 @@ +#ifndef _TCP3D_CODE_BLK_SEG_H_ +#define _TCP3D_CODE_BLK_SEG_H_ + +#ifndef USE_TCP3D_DRIVER_TYPES +#include "swpform.h" +#else +#include +#include +#endif + +/** + * \fn Int32 TCP3D_codeBlkSeg ( + * IN Uint32 blockLengthK, + * IN Uint8 numMAP, + * IN Uint8 * const RESTRICT sw0NomLen, + * OUT Uint8 * const RESTRICT sw0LenSel, + * OUT Uint8 * const RESTRICT sw1Len, + * OUT Uint8 * const RESTRICT sw2LenSel, + * OUT Uint8 * const RESTRICT numsw0) + * \brief Calculates code block segmentation parameteres based on the block lenght and SW0 length. + * + * + * \param[in] blockLengthK + * Code block length. (Number of information bits.) + * + * + * \param[in] numMAP + * Number of MAP decoders used. =1 for WCDMA, =2 for LTE and WiMAX + * + * \param[in,out] sw0NomLen + * Nominal length for the sliding window 0. Valid values are from the set: {16, 32, + * 48, 64, 96, 128}. Note that if [blockLengthK <= (numMAP * 128 * sw0NomLen)] does + * not hold, the function will pick the first greater length value from the set for which + * the above inequality holds, and will return it. + * + * This will be updated with the picked value. + * + * \param[out] sw0LenSel + * Input configuration register parameter. The value depends on the picked SW0 length + * used, (sw0NomLen), and the possible values are: + * 0 - 16 bits + * 1 - 32 bits + * 2 - 48 bits + * 3 - 64 bits + * 4 - 96 bits + * 5 - 128 bits + * + * + * \param[out] sw1Len + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 9 - 10 bits + * 10 - 11 bits + * 11 - 12 bits + * ... + * 127 - 128 bits + * + * + * \param[out] sw2LenSel + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 0 - SW2 is not present + * 1 - SW2 length is same as SW1 + * 2 - SW2 length is less by 2 bits from SW1 + * + * \param[out] numsw0 + * Input configuration register parameter. Number of SW0 used in the decoder. + * + * \return Return indicates PASS or FAIL with ZERO or non-ZERO values. + * + * + */ +Int32 TCP3D_codeBlkSeg ( + IN Uint32 blockLengthK, + IN Uint8 numMAP, + IN Uint8 * const RESTRICT sw0NomLen, + OUT Uint8 * const RESTRICT sw0LenSel, + OUT Uint8 * const RESTRICT sw1Len, + OUT Uint8 * const RESTRICT sw2LenSel, + OUT Uint8 * const RESTRICT numsw0); +#endif diff --git a/example/src/tcp3d_drv_sample.h b/example/src/tcp3d_drv_sample.h new file mode 100644 index 0000000..92bce8f --- /dev/null +++ b/example/src/tcp3d_drv_sample.h @@ -0,0 +1,155 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_SAMPLE_H_ +#define _TCP3D_SAMPLE_H_ + +#include +#include +#include +#include + +#include + +#include + +/* CSL includes */ +#include +#include +#include +#include + +#include "sample.h" + +#if (CSL_TCP3D_PER_CNT > 1) +#include "tcp3d_multi_inst.h" +#else +#include "tcp3d_single_inst.h" +#endif + +#if EDMA_LOCAL_COMP_ISR +extern tccCallbackParams edma3IntrParamsLoc[]; +extern unsigned int allocatedTCCsLoc[]; +#endif + +#define EDMA_RESULT_CHECK(res) ((res == EDMA3_DRV_SOK) ? "Passed": "Failed") + +/* + * EDMA Resource structure + */ +typedef struct EDMA_RES +{ + UInt32 chNo; + UInt32 tccNo; + EDMA3_RM_TccCallback cbFunc; + Void *cbData; +} EDMA_RES; + +/* + * EDMA configuration structure + */ +typedef struct EDMA_CONFIG +{ + EDMA_RES pingChRes[TCP3D_DRV_MAX_CH_PER_PATH]; + EDMA_RES pongChRes[TCP3D_DRV_MAX_CH_PER_PATH]; + EDMA_RES linkChRes[TCP3D_DRV_MAX_LINK_CH]; +} EDMA_CONFIG; + +/** + * \brief TCP3D Initialization + * + * This function initializes the TCP3D Driver for the given TCP3D instance ID. + * It internally calls Tcp3d_getNumBuf(), Tcp3d_getBufDesc() and Tcp3d_init(), + * in that order and memory is allocated from the heap pointer given. + */ +Tcp3d_Instance* tcp3dSampleInit( + IHeap_Handle dataHeap, + UInt8 instNum, + UInt32 testMaxBlocks, + UInt32 testMode, + UInt32 testDoubleBuffer, + UInt32 testLteCrcSel, + UInt32 dspCoreID, + EDMA3_DRV_Handle hEdma, + UInt32 tpccRegionUsed, + EDMA_CONFIG *edmaConfig, + Tcp3d_Result *errCode); + +/** + * \brief TCP3D De-initialization + * + * This function de-initializes the TCP3D Driver for the given TCP3D instance ID. + * Frees any memory allocated from the heap during the initialization. + * + * Currently, there are no driver function calls. + */ +Tcp3d_Result tcp3dSampleDeinit( + IHeap_Handle dataHeap, + UInt8 instNum, + Tcp3d_Instance *tcp3dInst); + +/** + * \brief Open EDMA channels for TCP3D driver + * + * Function for opening EDMA3 channels using the EDMA3 LLD APIs based on the + * TCP3D instance ID given and the details are updated in the edmaConfig structure. + */ +Void openEdmaChannels ( EDMA3_DRV_Handle hEdma, + UInt8 instNum, + EDMA_CONFIG *edmaConfig); + +/** + * \brief Close EDMA channels for TCP3D driver + * + * This function initializes the TCP3D Driver for the given TCP3D instance ID. + * It internally calls Tcp3d_getNumBuf(), Tcp3d_getBufDesc() and Tcp3d_init(), + * in that order and memory is allocated from the heap pointer given. + */ +Void closeEdmaChannels (EDMA3_DRV_Handle hEdma, + UInt8 instNum, + EDMA_CONFIG *edmaConfig); + +#if EDMA_LOCAL_COMP_ISR // flag defined in sample.h file +/** + * Fill the tables for allocated TCC & tccCB params, used with local + * EDMA3 call back ISR routine (see in sample_int_reg.c file). + */ +Void updateAllocatedTccsLoc( EDMA_CONFIG *edmaConfig); +#endif + +#endif /* _TCP3D_SAMPLE_H_ */ + diff --git a/example/src/tcp3d_drv_sample_init.c b/example/src/tcp3d_drv_sample_init.c new file mode 100644 index 0000000..ea19241 --- /dev/null +++ b/example/src/tcp3d_drv_sample_init.c @@ -0,0 +1,448 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include "tcp3d_drv_sample.h" + +Tcp3d_MemBuffer *bufs; +Int16 nbufs; + +/** + * NOTE: All the configuration values whether they are used in the current + * driver or not. Unused values are kept as place holders for future use. + */ +Void fillConfig(Tcp3d_InitParams *drvInitParams, UInt32 perId) +{ + UInt32 baseDataRegs; + + if ( perId < CSL_TCP3D_PER_CNT ) + { + /* Set the notification Event number */ + drvInitParams->notificationEventNum = getNotifyEventNum(perId); + + /* Set the Control Register base address */ + drvInitParams->tcp3dCfgRegs = (CSL_Tcp3d_cfgRegs *) getTcp3dCfgRegsBase(perId); + + /* Set REVT channel numbers */ + drvInitParams->pingConfig.revtCh = getRevt0ChannelNum(perId); + drvInitParams->pongConfig.revtCh = getRevt1ChannelNum(perId); + + /* Set the TCP3D PING addresses */ + baseDataRegs = getTcp3dDataRegsBase(perId); + drvInitParams->pingConfig.inCfgStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_IC_CFG0_P0_OFFSET; + drvInitParams->pingConfig.llrStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_SYS_P0_OFFSET; + drvInitParams->pingConfig.interStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_INTER_P0_OFFSET; + drvInitParams->pingConfig.hdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_HD0_OFFSET; + drvInitParams->pingConfig.stsStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_STS0_P0_OFFSET; + drvInitParams->pingConfig.sdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_SO0_OFFSET; + + /* Set the TCP3D PONG addresses */ + drvInitParams->pongConfig.inCfgStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_IC_CFG0_P1_OFFSET; + drvInitParams->pongConfig.llrStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_SYS_P1_OFFSET; + drvInitParams->pongConfig.interStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_INTER_P1_OFFSET; + if ( drvInitParams->ctrlParams.doubleBuf == CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE ) + { + drvInitParams->pongConfig.hdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_HD0_OFFSET; + drvInitParams->pongConfig.sdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_SO0_OFFSET; + drvInitParams->pongConfig.stsStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_STS0_P0_OFFSET; + } + else + { + drvInitParams->pongConfig.hdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_HD1_OFFSET; + drvInitParams->pongConfig.sdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_SO1_OFFSET; + drvInitParams->pongConfig.stsStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_STS0_P1_OFFSET; + } + } + else + { + System_printf("Wrong Instance ID passed\n"); + System_exit(0); + } +} + +Tcp3d_Instance* tcp3dSampleInit( + IHeap_Handle dataHeap, + UInt8 instNum, + UInt32 testMaxBlocks, + UInt32 testMode, + UInt32 testDoubleBuffer, + UInt32 testLteCrcSel, + UInt32 dspCoreID, + EDMA3_DRV_Handle hEdma, + UInt32 tpccRegionUsed, + EDMA_CONFIG *edmaConfig, + Tcp3d_Result *errCode) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + Tcp3d_SizeCfg sizeCfg; + Tcp3d_InitParams drvInitParams; + Int32 cnt; + UInt32 numBytes; + UInt8 align; + + /* + * Setup TCP3D Driver Initialization Sequence + */ + /* Step 1: Set parameters in the sizeCfg structure for TCP3D driver + * memory allocation. This will be used with the driver functions + * Tcp3d_getNumBuf() & Tcp3d_getBufDesc() */ + sizeCfg.maxCodeBlocks = testMaxBlocks; + sizeCfg.mode = testMode; + + /* Step 2: Get Number of buffers required for TCP3D Driver */ + tcp3dResult = Tcp3d_getNumBuf(&sizeCfg, &nbufs); + if ( tcp3dResult != TCP3D_DRV_NO_ERR ) + { + System_printf("Get Num Bufs failed\n"); + } + else + { + System_printf("\t Tcp3d_getNumBuf() passed\n"); + } + + /* Step 3: Allocate memory for buffer descriptor structure */ + numBytes = nbufs * sizeof (Tcp3d_MemBuffer); + bufs = (Tcp3d_MemBuffer *) Memory_alloc(dataHeap, numBytes, 0, NULL); + if ( bufs == NULL ) + { + System_printf("Memory allocation failed !!! (DRV MEMBUFS)\n"); + System_exit(0); + } + + /* Step 4: Get TCP3D Driver buffer descriptor requirements */ + tcp3dResult = Tcp3d_getBufDesc(&sizeCfg, bufs); + if ( tcp3dResult != TCP3D_DRV_NO_ERR ) + { + System_printf("Get Buf Descriptor failed\n"); + } + else + { + System_printf("\t Tcp3d_getBufDesc() passed\n"); + } + + /* Step 5: Allocate memory for buffers based on the requirements given */ + /* + * NOTE: + * 1) The memory class type is NOT used for allocation. + * 2) The memory allocation is always done from the data Heap. See the + * BIOS config file more details (drvHeap). + */ + for (cnt = 0; cnt < nbufs; ++cnt) + { + numBytes = bufs[cnt].size; + align = 1<pingChRes[cnt].chNo; + drvInitParams.pongCh[cnt] = edmaConfig->pongChRes[cnt].chNo; + } + for (cnt = 0; cnt < TCP3D_DRV_MAX_LINK_CH; ++cnt) + { + drvInitParams.linkCh[cnt] = edmaConfig->linkChRes[cnt].chNo; + } + + /* Set the Control Register parameters */ + drvInitParams.ctrlParams.mode = testMode; + drvInitParams.ctrlParams.doubleBuf = testDoubleBuffer; + drvInitParams.ctrlParams.intTable = CSL_TCP3D_CFG_TCP3_MODE_ITG_EN_ENABLE; + drvInitParams.ctrlParams.autoTrig = CSL_TCP3D_CFG_TCP3_MODE_AUTO_TRIG_EN_ENABLE; + drvInitParams.ctrlParams.errIgnore = CSL_TCP3D_CFG_TCP3_MODE_ERROR_IGNORE_EN_DONT_STOP; + drvInitParams.ctrlParams.lteCrcSel = testLteCrcSel; +#ifdef _LITTLE_ENDIAN + drvInitParams.ctrlParams.endInt = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INTR_32_BIT_PACKED; + drvInitParams.ctrlParams.endInData = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INDATA_32_BIT_PACKED; +#else + drvInitParams.ctrlParams.endInt = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INTR_16_BIT_NATIVE; + drvInitParams.ctrlParams.endInData = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INDATA_8_BIT_NATIVE; +#endif + drvInitParams.ctrlParams.exeP0cmd = CSL_TCP3D_CFG_TCP3_EXE_P0_EXE_CMD_ENABLE; + if ( testDoubleBuffer != CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE ) + drvInitParams.ctrlParams.exeP1cmd = CSL_TCP3D_CFG_TCP3_EXE_P1_EXE_CMD_ENABLE; + + fillConfig(&drvInitParams, instNum); + + /* Step 8: Call the TCP3D Driver init function */ + tcp3dResult = Tcp3d_init ( bufs, &drvInitParams); + + if ( tcp3dResult != TCP3D_DRV_NO_ERR) + { + System_printf("TCP3D Driver Init failed\n"); + System_exit(0); + } + else + { + System_printf("\t Tcp3d_init() passed\n"); + } + + *errCode = tcp3dResult; + + /* Initialize the TCP3D driver instance variable */ + return ((Tcp3d_Instance* )bufs[TCP3D_DRV_INST_BUFN].base); +} + +Tcp3d_Result tcp3dSampleDeinit( IHeap_Handle dataHeap, + UInt8 instNum, + Tcp3d_Instance *tcp3dInst) +{ + Int32 cnt; + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + + tcp3dResult = Tcp3d_deInit(tcp3dInst); + + if ( tcp3dResult != TCP3D_DRV_NO_ERR) + { + System_printf("TCP3D Driver De-Init failed\n"); + System_exit(0); + } + else + { + System_printf("\t Tcp3d_deInit() passed\n"); + } + + /* Free memory allocated for TCP3D Driver Initialization sequence */ + /* NOTE: + * It is assumed that the nbufs and bufs[] values are preserved from init. + */ + for (cnt = 0; cnt < nbufs; ++cnt) + { + Memory_free(dataHeap, bufs[cnt].base, bufs[cnt].size); + } + Memory_free(dataHeap, bufs, nbufs*sizeof(Tcp3d_MemBuffer)); + + return (tcp3dResult); +} + +#if EDMA_LOCAL_COMP_ISR // flag defined in sample.h file +/******************************************************************************* + ******************************************************************************/ +/** + * Fill the tables for allocated TCC & tccCB params, used with local + * EDMA3 call back ISR routine (see in sample_int_reg.c file). + */ +Void updateAllocatedTccsLoc( EDMA_CONFIG *edmaConfig) +{ + Int i; + UInt32 tcc; + + allocatedTCCsLoc[0] = 0u; + allocatedTCCsLoc[1] = 0u; + + for (i=0;ipingChRes[i].cbFunc != NULL) + { + tcc = edmaConfig->pingChRes[i].tccNo; + edma3IntrParamsLoc[tcc].tccCb = edmaConfig->pingChRes[i].cbFunc; + edma3IntrParamsLoc[tcc].cbData = edmaConfig->pingChRes[i].cbData; + if (tcc < 32u) + allocatedTCCsLoc[0u] |= (0x1u << tcc); + else + allocatedTCCsLoc[1u] |= (0x1u << (tcc - 32u)); + } + if( edmaConfig->pongChRes[i].cbFunc != NULL) + { + tcc = edmaConfig->pongChRes[i].tccNo; + edma3IntrParamsLoc[tcc].tccCb = edmaConfig->pongChRes[i].cbFunc; + edma3IntrParamsLoc[tcc].cbData = edmaConfig->pongChRes[i].cbData; + if (tcc < 32u) + allocatedTCCsLoc[0u] |= (0x1u << tcc); + else + allocatedTCCsLoc[1u] |= (0x1u << (tcc - 32u)); + } + } +} +#endif + +/******************************************************************************* + ******************************************************************************/ +Void openEdmaChannels ( EDMA3_DRV_Handle hEdma, + UInt8 perId, + EDMA_CONFIG *edmaConfig) +{ + EDMA3_DRV_Result result, status = EDMA3_DRV_SOK; + Int32 i; + + if ( perId < CSL_TCP3D_PER_CNT ) + { + edmaConfig->pingChRes[0].chNo = getRevt0ChannelNum(perId); + edmaConfig->pongChRes[0].chNo = getRevt1ChannelNum(perId); + edmaConfig->pingChRes[1].chNo = EDMA3_DRV_DMA_CHANNEL_ANY; + edmaConfig->pongChRes[1].chNo = EDMA3_DRV_DMA_CHANNEL_ANY; + } + else + { + System_printf("Wrong Instance ID passed\n"); + System_exit(0); + } + + /* Fille the edmaConfig structure with defaults */ + for (i=0;ipingChRes[i].tccNo = EDMA3_DRV_TCC_ANY; + edmaConfig->pingChRes[i].cbFunc = NULL; + edmaConfig->pingChRes[i].cbData = NULL; + + /* PONG channel defaults */ + edmaConfig->pongChRes[i].tccNo = EDMA3_DRV_TCC_ANY; + edmaConfig->pongChRes[i].cbFunc = NULL; + edmaConfig->pongChRes[i].cbData = NULL; + } + + /** + * Open all the Physical Channels and then register call backs + */ + for(i=0; ipingChRes[i].chNo, + &edmaConfig->pingChRes[i].tccNo, + (EDMA3_RM_EventQueue)0, + edmaConfig->pingChRes[i].cbFunc, + edmaConfig->pingChRes[i].cbData); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d open (result = %d)\n", edmaConfig->pingChRes[i].chNo, result); +#endif + status |= result; + + result = EDMA3_DRV_requestChannel (hEdma, + &edmaConfig->pongChRes[i].chNo, + &edmaConfig->pongChRes[i].tccNo, + (EDMA3_RM_EventQueue)0, + edmaConfig->pongChRes[i].cbFunc, + edmaConfig->pongChRes[i].cbData); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d open (result = %d)\n", edmaConfig->pongChRes[i].chNo, result); +#endif + status |= result; + } /* end of - for(i=0; ilinkChRes[i].chNo = EDMA3_DRV_LINK_CHANNEL; + + result = EDMA3_DRV_requestChannel (hEdma, + &edmaConfig->linkChRes[i].chNo, + &edmaConfig->linkChRes[i].tccNo, + (EDMA3_RM_EventQueue)0, + edmaConfig->linkChRes[i].cbFunc, + edmaConfig->linkChRes[i].cbData); +#if DEBUG_PRINT + System_printf("\tEDMA link channel %d open (result = %d)\n", edmaConfig->linkChRes[i].chNo, result); +#endif + status |= result; + } /* end of - for(i=0; ipingChRes[i].chNo); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d close (result = %d)\n", edmaConfig->pingChRes[i].chNo, result); +#endif + status |= result; + + result = EDMA3_DRV_freeChannel (hEdma, edmaConfig->pongChRes[i].chNo); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d close (result = %d)\n", edmaConfig->pongChRes[i].chNo, result); +#endif + status |= result; + } /* end of - for(i=0; ilinkChRes[i].chNo); +#if DEBUG_PRINT + System_printf("\tEDMA link channel %d close (result = %d)\n", edmaConfig->linkChRes[i].chNo, result); +#endif + status |= result; + } + + if ( status != EDMA3_DRV_SOK ) + System_exit(0); + +} /* closeEdmaChannels() */ + +/* End of File */ diff --git a/example/src/tcp3d_drv_types.h b/example/src/tcp3d_drv_types.h new file mode 100644 index 0000000..d18b66b --- /dev/null +++ b/example/src/tcp3d_drv_types.h @@ -0,0 +1,78 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_DRV_TYPES_H_ +#define _TCP3D_DRV_TYPES_H_ + +/* c99 types includes */ +#include +#include + +/** @addtogroup TCP3D_DRV_MACRO + @{ */ + +/** + * @brief Key work used with the function definitions to represent them as + * static and inline type functions. + */ +#define INLINE static inline + +/** + * @brief Key work for restrict abstracted to support various compilers. + */ +#define RESTRICT restrict + +/** + * @brief Key word used for indicating the argument as INPUT only. + */ +#define IN + +/** + * @brief Key word used for indicating the argument as OUTPUT only. + */ +#define OUT + +/** + * @brief Key word used for indicating the argument as both INPUT and OUTPUT. + */ +#define INOUT + +/** +@} +*/ + +#endif /* _TCP3D_DRV_TYPES_H_ */ diff --git a/example/src/tcp3d_example_main.c b/example/src/tcp3d_example_main.c new file mode 100644 index 0000000..b0db9da --- /dev/null +++ b/example/src/tcp3d_example_main.c @@ -0,0 +1,1336 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include +#include + +/* XDC includes */ +#include + +/* BIOS includes */ +#include +#include +#include +#include +#include +#include + +/* IPC includes */ +#include +#include +#include +#include +#include + +/* CSL includes */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sample.h" +#include "tcp3d_drv_sample.h" +#include "tcp3d_main.h" + +/********************************************************************** + ************************** Test Compile Flags ************************ + **********************************************************************/ +#define DEBUG_VARS 0 // add debug variables at different places in the code + +#define DEBUG_PRINT 0 + +#define MY_LOG_PRINT0(x) {\ + if(DEBUG_PRINT)\ + {\ + System_printf(#x"\n");\ + }\ +} + +#define MY_LOG_PRINT1(x, val) {\ + if(DEBUG_PRINT)\ + {\ + System_printf(#x" %d\n", val);\ + }\ +} + +#define MY_LOG_PRINT2(x, val1, y, val2) {\ + if(DEBUG_PRINT)\ + {\ + System_printf(#x" %d, "#y" %d\n", val1, val2);\ + }\ +} + +/** + * This is used for plotting timing diagram using matlab by collecting the data + * points from running the code. + * + * Requirements: + * 1) it is required to enable the logging for TCP3D in the Simulator + * Configuration file. The decoding and reset times are collected from the + * log file (c:\\Tcp3dDebug.log) generated from running the simulator. + */ +#define TEST_PROFILE_LOG 1 + +/********************************************************************** + ************************** Test Definitions ************************** + **********************************************************************/ +#define START_CMD_PERIOD 1 + +#define SIMULATOR_SUPPORT 0 + +/********************************************************************** + ************************** Test Variables **************************** + **********************************************************************/ +/* Code Block Test Variables */ +#pragma DATA_SECTION(codeBlockSet, ".main_mem") +cbTestDesc codeBlockSet; + +Char *strMode[4] = {"3GPP(0)","LTE(1)","WIMAX(2)","WCDMA Split(3)"}; +Char *strDBuf[2] = {"Disable(0)","Enable(1)"}; +Char *strInst[2] = {"TCP3D_A(0)","TCP3D_B(1)"}; + +UInt32 keepTestVectMem = 0; +UInt32 firstTime = 1; +UInt32 testMaxCodeBlocks; +UInt32 dspCoreID; + +/* File Operation Variables */ +UInt32 testCntr = 0; +UInt32 testErrCntr = 0; +UInt32 totErrCnt; +#ifdef USE_PDK_INSTALL_BASE +Char testvectFolderBase[] = "C:\\ti\\csl_lld_keystone2_1_0_0_2\\packages\\ti\\drv\\tcp3d\\example\\testvectors\\"; +#else +Char testvectFolderBase[] = "..\\..\\testvectors\\"; +#endif +Char folderName[1000] = ""; +Char *testFolder[] = { "lte", "wcdma", "wimax", }; +/* Number of test folders computed. Alternately can be set manually as length of *testFolder[] array */ +UInt32 numTests = sizeof(testFolder)/sizeof(*testFolder); + +/* Throughput calculation variables */ +clock_t total_clock_end, total_clock_start; +UInt32 test_cycles; +UInt32 TotalBitsDecoded; +Float ThroughPut; + +/* BIOS variables */ +Semaphore_Handle semRcvDone, semSendBlock, semSendWait, semRcvStart; +IHeap_Handle dataHeap = NULL; +IHeap_Handle drvHeap = NULL; + +/* Driver configuration variables */ +Tcp3d_Result tcp3dResultSend = TCP3D_DRV_NO_ERR; +Tcp3d_Instance *tcp3dDrvInst[2] = {NULL, NULL}; +Tcp3d_Instance *inst; +Tcp3d_Ctrl drvCtrl; +Tcp3d_Sts drvStatus; + +Int32 sendBlockCnt; +Int32 rcvBlockCnt; +#if TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT +UInt32 tempICRegs[15]; /* to store 15 registers */ +#endif + +/** + * EDMA3 LLD & TCP3D Driver Init/Deinit related variables + */ +EDMA3_DRV_Handle hEdma; +UInt32 tpccNum; +UInt32 tpccRegionUsed; +EDMA_CONFIG edmaConfig[2]; +UInt8 instNum; +/* Flags used in ISR functions */ +UInt32 pingComplete, pongComplete; +UInt32 pauseIntr = 0, l2pIntr = 0; +UInt32 soldoutCntr = 0; +UInt32 tcp3dEventCntr = 0; +UInt32 tpccEvtCntr = 0; +UInt32 rcvStartFlag = 0; +UInt32 pauseIntFlag = 0; +UInt32 afterIntrSoldout = 0, afterIntrPause = 0; +UInt32 pendPauseCntr = 0; + +#if DEBUG_VARS +#include +#include + +/* To track the RCV task posting */ +volatile Int semCnt; + +/* Register pointers */ +CSL_TpccRegs *tpcc2Regs = (CSL_TpccRegs *) CSL_EDMA2CC_REGS; +CSL_CPINTC_RegsOvly cpintc0Regs = (CSL_CPINTC_RegsOvly) CSL_CP_INTC_0_REGS; +CSL_IntcRegsOvly gemIntcRegs = (CSL_IntcRegsOvly)CSL_CGEM0_5_REG_BASE_ADDRESS_REGS; +#endif + +/********************************************************************** + *********************** Test Local Functions ************************* + **********************************************************************/ +/** + * Task Functions + */ +Void testerTaskFunc(Void); +Void tskHeartBeat(Void); +Void sndBlockTaskFunc(Void); +Void rcvBlockTaskFunc(Void); + +/** + * (De)Init Functions + */ +Void allInit(Void); +Void allDeInit(Void); +Void getMemoryStats(Void); + +/** + * EDMA Channel ISR functions + */ +Void revt0ChCallback(Void); +Void revt1ChCallback(Void); + +/** + * Cache and other IP functions + */ +static Int32 enable_tcp3d (void); +void tcp3dBeginMemAccess (void *ptr, uint32_t size); +void tcp3dEndMemAccess (void *ptr, uint32_t size); + +#if USE_LOCAL_CPINTC_DISPATCH +extern Void CpIntc_dispatchLoc(UInt hostInt); +#endif + +Void soldOutAction(Void) +{ + /* clear flag */ + pauseIntFlag = 0; + +#if SOLDOUT_USE_L2P_INTERRUPT + /** + * 1) enable L2P channel interrupt to get notified to try enqueue again + * 2) also enable REVT channel interrupt for PAUSE detection + */ + /* Set interrupt flag on PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_SET_REVT_INT; + drvCtrl.intrFlag = TEST_INTR_ENABLE; // enable + Tcp3d_control(inst, &drvCtrl); + + /* Call TCP3D driver control to set interrupt on L2P channel */ + drvCtrl.cmd = TCP3D_DRV_SET_L2P_INT; + drvCtrl.intrFlag = TEST_INTR_ENABLE; // enable + Tcp3d_control(inst, &drvCtrl); +#else + /* keep trying until successful */ + Semaphore_post(semSendBlock); +#endif +} + +Void soldOutActionClear (Void) +{ +#if SOLDOUT_USE_L2P_INTERRUPT + if ( pauseIntFlag ) + { + afterIntrSoldout++; + + /** + * 1) diable L2P channel interrupt to get notified to try enqueue again + * 2) also disable REVT channel interrupt for PAUSE detection + */ + /* Call TCP3D driver control to set interrupt on L2P channel */ + drvCtrl.cmd = TCP3D_DRV_SET_L2P_INT; + drvCtrl.intrFlag = TEST_INTR_DISABLE; // disable + Tcp3d_control(inst, &drvCtrl); + + /* Set interrupt flag on PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_SET_REVT_INT; + drvCtrl.intrFlag = TEST_INTR_DISABLE; // disable + Tcp3d_control(inst, &drvCtrl); + } +#else + /* nothing to be done */ +#endif +} + +/******************************************************************************* + TESTING METHOD 1: Copy test vector folder to workspace +-------------------------------------------------------------------------------- +1. In this method, ensure that the entire “example\testvectors” folder is + placed two levels higher than the unit example project .out file location. + For example, if the unit example project out file is located under + “C:\MyPDKWorkspace\tcp3dExampleProject\Debug” folder, then please copy + the folder “example\testvectors” from the PDK package to “C:\MyPDKWorkspace”. +2. Ensure that the compile flag USE_PDK_INSTALL_BASE is undefined in + the project “tcp3dExampleProject” before building. +3. Build the project. +4. Launch the debug session to load and run the out file. + + TESTING METHOD 2: Use the test vector folder from the PDK installation +-------------------------------------------------------------------------------- +1. In this method, ensure that the compile flag USE_PDK_INSTALL_BASE is defined + in the project “tcp3dExampleProject”. +2. Also, ensure the variable “testvectFolderBase” defined in the tcp3d_example_main.c + file is set to “\packages\ti\drv\tcp3d\example\testvectors” + when the USE_PDK_INSTALL_BASE flag is defined. +3. Build the project. +4. Launch the debug session to load and run the out file. + +By default, example project is configured to test using "METHOD 1" + ******************************************************************************/ +/* + * main() + */ +Void main(Void) +{ + Task_Params taskParams; + + /* Initialize the heap in shared memory. Using IPC module to do that */ + Ipc_start(); + + /* Power on TCP3D peripheral before using it */ + if (enable_tcp3d () < 0) + { + System_printf ("Error: TCP3D PSC Initialization Failed\n"); + return; + } + + /* Enable time stamp counter */ + CSL_tscEnable(); + + /* Enable L1D cache. Disable L2 caching for our tests. */ + CACHE_setL1DSize (CACHE_L1_MAXIM3); /* CACHE_L1_0KCACHE */ + CACHE_setL2Size (CACHE_0KCACHE); + + /* Initialize the default Task parameters */ + Task_Params_init(&taskParams); + + /* Crete the tester Task using default Task parameters */ + Task_create((Task_FuncPtr)testerTaskFunc, &taskParams, NULL); + + BIOS_start(); +} + +/******************************************************************************* + ******************************************************************************/ +Void testerTaskFunc(Void) +{ + Int i; + Task_Params taskParams; + Semaphore_Params semParams; + + /* Set the one-time global test variables */ + testMaxCodeBlocks = 86; /* max possible used in init */ + dspCoreID = CSL_chipReadDNUM(); + + /******** Select the TCP3D Instance Number **********/ +#if 0 + if ( dspCoreID == 0 ) // Core 0 + instNum = CSL_TCP3D_A; + else + instNum = CSL_TCP3D_B; +#else + instNum = getTcp3dInstNum(dspCoreID); +#endif + + /* Initialize the default Task parameters */ + Task_Params_init(&taskParams); + + /* Initialize the default Semaphore parameters */ + Semaphore_Params_init(&semParams); + + /* Crete the Binary Semaphore */ + semParams.mode = Semaphore_Mode_BINARY; + semRcvDone = Semaphore_create(0, &semParams, NULL); + + /* Get the Heap handles - used when ever memory allocations are needed */ + //dataHeap = HeapMem_Handle_upCast(tcp3dDataHeap); + dataHeap = (IHeap_Handle) SharedRegion_getHeap(0); + drvHeap = HeapMem_Handle_upCast(tcp3dDrvHeap); + + while( testCntr < numTests ) + { + + /** + * Create the Binary semaphores each time using the parameters set + * outside the tester while loop. + * + * It was observed that at times the receive semaphore count was + * non-zero after the first run and receive task was getting triggered + * before posting from the ISR callback. So, the semaphores are created + * for each test to work-around with the problem. + */ + semSendBlock = Semaphore_create(0, &semParams, NULL); + semSendWait = Semaphore_create(0, &semParams, NULL); + semRcvStart = Semaphore_create(0, &semParams, NULL); +#if DEBUG_VARS + semCnt = Semaphore_getCount(semRcvStart); +#endif + + /** + * Create the send and receive tasks for each test using the default + * tak parameters. + * + * NOTE: No need to do the Task_delete() as these tasks have exits. + */ + Task_create((Task_FuncPtr)sndBlockTaskFunc, &taskParams, NULL); + Task_create((Task_FuncPtr)rcvBlockTaskFunc, &taskParams, NULL); + + System_printf("\n******************************************************************\n"); + System_printf("\n----- TEST #%d STARTED ------\n", testCntr); + + /** + * Prepare data for Code Blocks processing (reading test vector files). + * Allocates Memory as needed from the tcp3dDataHeap + */ + if ( firstTime ) + { + System_printf("\nReading test vector files started (including memory allocation)...\n"); + strcpy(folderName, testvectFolderBase); + strcat(folderName, testFolder[testCntr]); + getTestSetCB(dataHeap, &codeBlockSet, folderName); + System_printf("Reading test vector files complete\n"); +#if DEBUG_PRINT + System_printf("\tPrepared %d code blocks in %s mode\n", codeBlockSet.maxNumCB, strMode[codeBlockSet.mode]); +#endif + firstTime = 0; + } + else + { + System_printf("\nUsing the test vectors read before\n"); + } + + System_printf("\n----- TEST INITIALIZATION STARTED -----\n\n"); + allInit(); + getMemoryStats(); /* Heap Stats */ + System_printf("\n----- TEST INITIALIZATION COMPLETE -----\n\n"); + +#if TEST_PREPARE_ONLY_BETASTATE + for (i = 0; i < codeBlockSet.maxNumCB ;i++) + { + /* Prepare fixed IC registers using the inCfgParams of first block*/ + Tcp3d_prepFixedConfigRegs(codeBlockSet.cbData[i]->inCfgParams, codeBlockSet.cbData[i]->inCfg); + + /* Prepare block size dependent params */ + prepareBlockSizeDepICParams(codeBlockSet.cbData[i]); + } +#elif TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT + /* Prepare fixed IC registers using the inCfgParams of first block*/ + Tcp3d_prepFixedConfigRegs(codeBlockSet.cbData[0]->inCfgParams, tempICRegs); +#endif + + /* Start the Send task first */ + Semaphore_post(semSendBlock); + + /* Wait for the Receive task to complete */ + Semaphore_pend(semRcvDone, BIOS_WAIT_FOREVER); + + /** + * Test Profile Calculations + * + * (Total Bits) + * Throughput (Mbps) = ----------------------------- + * (Total Time)*(10^-9)*(10^6) + * + */ + TotalBitsDecoded = 0; + for (i = 0; i < codeBlockSet.maxNumCB; ++i) + { + TotalBitsDecoded += codeBlockSet.cbData[i]->blockSize; + } + + test_cycles = (total_clock_end - total_clock_start); + ThroughPut = TotalBitsDecoded*1.0; + ThroughPut = (ThroughPut/test_cycles)*1000; + + /******** Free code blocks ********/ + if ( keepTestVectMem ) + { + System_printf("\nNo freeing - Using the test vectors read before\n"); + } + else + { + System_printf("\nTest vectors memory freeing started...\n"); + freeTestSetCB(dataHeap, &codeBlockSet); + System_printf("Test vectors memory freeing complete\n"); +#if DEBUG_PRINT + System_printf("\tFreed memory allocated for %d code blocks in %s mode\n", codeBlockSet.maxNumCB, strMode[codeBlockSet.mode]); +#endif + firstTime = 1; + } + + System_printf("\n----- TEST DE-INITIALIZATION STARTED -----\n\n"); + allDeInit(); + getMemoryStats(); /* Heap Stats */ + System_printf("\n----- TEST DE-INITIALIZATION COMPLETE -----\n"); + + if ( totErrCnt > 0 ) + { + System_printf("\n----- TEST #%d FAILED -----\n", testCntr); + testErrCntr++; + } + else + { + System_printf("\n----- TEST #%d PASSED -----\n", testCntr); + } + System_printf("\n+++++++++++++++++++++++ TEST #%d SUMMARY +++++++++++++++++++++++++\n", testCntr); + System_printf("TCP3D Peripheral Configuration\n"); + System_printf(" Instance : %s\n", strInst[instNum]); + System_printf(" Mode Tested : %s\n", strMode[codeBlockSet.mode]); + System_printf(" Double Buffer Mode : %s\n", strDBuf[codeBlockSet.doubleBuffer]); + System_printf("Max code blocks (Input Capacity) : %d\n", testMaxCodeBlocks); + System_printf("Code blocks sent for decoding : %d\n", codeBlockSet.maxNumCB); + System_printf("Call back counters : %d - interrupts\n", pauseIntr); + System_printf(" (%d-SOLDOUT, %d-PAUSE, %d-PENDPAUSE)\n", afterIntrSoldout, afterIntrPause, pendPauseCntr); + System_printf("Total Notificaiton Interrupts : %d\n", tcp3dEventCntr); + System_printf("Throughput Calculations\n"); + System_printf(" Total Bits Decoded : %d\n", TotalBitsDecoded); + System_printf(" Time Taken (in cycles) : %d\n", test_cycles); + System_printf(" Effective Throughput : %f Mbps\n", ThroughPut); + System_printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); + + System_printf("\n******************************************************************\n"); + + /* Increment the test counter */ + testCntr++; + + /** + * Delete the semaphores each time, so that there is no left over count. + * See the explanation at the beginning of this loop where the create + * semaphore calls are present. + */ +#if DEBUG_VARS + semCnt = Semaphore_getCount(semRcvStart); +#endif + Semaphore_delete(&semSendWait); + Semaphore_delete(&semSendBlock); + Semaphore_delete(&semRcvStart); + } + + /* All test status print */ + if(testErrCntr) + { + System_printf("!!! SOME TESTS FAILED !!!\n"); + } + else + { + System_printf("!!! ALL TESTS PASSED !!!\n"); + } + + /* Remove all creations - to make graceful system exit */ + Semaphore_delete(&semRcvDone); + + System_exit(0); +} + +/******************************************************************************* + ******************************************************************************/ +Void sndBlockTaskFunc(Void) +{ + UInt8 notifyFlag; + cbDataDesc *cbPtr; + static UInt32 cookie = 0; + + sendBlockCnt = 0; + +#if DEBUG_VARS + semCnt = Semaphore_getCount(semSendBlock); +#endif + + total_clock_start = TSCL; + + while(1) + { + /* Pending on Semaphore to run the loop */ + Semaphore_pend(semSendBlock, BIOS_WAIT_FOREVER); + + /* set TCP3D instance to use */ + inst = tcp3dDrvInst[instNum]; + + /* Get pointer to the code block data structure */ + cbPtr = codeBlockSet.cbData[sendBlockCnt]; + + /* Interrupt flag, used in Tcp3d_enqueueCodeBlock function */ + notifyFlag = 0; + if ( sendBlockCnt >= (codeBlockSet.maxNumCB-2) ) + { + notifyFlag = 1; /* Set for the last CB in each path (PING & PONG) */ + } + + /** + * Prepare input configuration (IC) registers. + */ + if ( TCP3D_DRV_INPUT_LIST_FULL == tcp3dResultSend ) + { + /* IC prepare not required. Just clear soldout actions. */ + soldOutActionClear(); + } + else + { + /* Prepare Input Config Registers */ +#if TEST_PREPARE_ONLY_BETASTATE + /* Prepare only beta state registers */ + prepareBetaStateICParams(cbPtr, cbPtr->mode); +#elif TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT + /* Prepare only registers depend on code block configuration + * (tempICRegs has the fixed registers prepare outside send loop) */ + prepareIC(cbPtr, tempICRegs, 1); +#else + /* Prepare all registers */ + prepareIC(cbPtr, NULL, NULL); +#endif + } + + checkBetaValues (cbPtr->inCfg); + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + tcp3dEndMemAccess(cbPtr->inCfg, cbPtr->sizeCFG); + tcp3dEndMemAccess(cbPtr->inLLR, cbPtr->sizeLLR); + + tcp3dBeginMemAccess(cbPtr->outHD, cbPtr->sizeHD); + if (cbPtr->sdFlag) + tcp3dBeginMemAccess(cbPtr->outSD, cbPtr->sizeSD); + if (cbPtr->stsFlag) + tcp3dBeginMemAccess(cbPtr->outSts, cbPtr->sizeSTS); + + /* Restore interrupts */ + Hwi_restore(cookie); + + /** + * WORKAROUND CODE: + * This code works in line with the code in the second while loop + * in the send task where check for completion is done. + * Here we are setting the last byte in the outHD with some value when + * the refHD has 0x00. This avoids any false completion of send task. + */ + if ( sendBlockCnt >= (codeBlockSet.maxNumCB-2) ) + { + /* Fill the last byte in outHD when refHD last byte is ZERO */ + uint8_t *bytePtr1, *bytePtr2; + uint32_t byteSize; + + bytePtr1 = (UInt8 *) cbPtr->refHD; + bytePtr2 = (UInt8 *) cbPtr->outHD; + byteSize = (cbPtr->blockSize>>3); + + if ( bytePtr1[byteSize-1] == 0 ) + { + bytePtr2[byteSize-1] = 0xde; + } + } + + + /* Enqueue the Code block */ + tcp3dResultSend = Tcp3d_enqueueCodeBlock ( inst, + cbPtr->blockSize, + (UInt32 *)L2GLBMAP(dspCoreID, cbPtr->inCfg), + (Int8 *)L2GLBMAP(dspCoreID, cbPtr->inLLR), + cbPtr->llrOffset, + (UInt32 *)L2GLBMAP(dspCoreID, cbPtr->outHD), + (Int8 *)L2GLBMAP(dspCoreID, cbPtr->outSD), + cbPtr->sdOffset, + (UInt32 *)L2GLBMAP(dspCoreID, cbPtr->outSts), + notifyFlag); // 1 - GEN EVENT, 0 - NO EVENT + + + /* Check for soldout case */ + if ( TCP3D_DRV_INPUT_LIST_FULL != tcp3dResultSend ) + { + /* increment the block count */ + sendBlockCnt++; + + /* goto next block */ + Semaphore_post(semSendBlock); + } + else + { + /* increment soldout count */ + soldoutCntr++; + + soldOutAction(); /* take action */ + } + + /* Start the driver after START_CMD_PERIOD blocks */ + if ( sendBlockCnt == START_CMD_PERIOD ) + { + if ( TCP3D_DRV_NO_ERR != Tcp3d_start(inst, TCP3D_DRV_START_AUTO) ) + { + System_printf("Tcp3d_start function returned error (AUTO)\n"); + System_exit(0); + } + } + + /* Check for end of task and exit */ + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + { + /* set flags first */ + pauseIntFlag = 0; + l2pIntr = pauseIntr; + pendPauseCntr = 0; + +#if SOLDOUT_USE_L2P_INTERRUPT + if ( soldoutCntr ) + { + /* Call TCP3D driver control to set interrupt on L2P channel */ + drvCtrl.cmd = TCP3D_DRV_SET_L2P_INT; + drvCtrl.intrFlag = TEST_INTR_DISABLE; // disable + Tcp3d_control(inst, &drvCtrl); + } +#endif + + /* Set interrupt flag PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_CLR_REVT_INT; + Tcp3d_control(inst, &drvCtrl); + + /* Check to see if restart needed before exit */ + if ( TCP3D_DRV_NO_ERR != Tcp3d_start(inst, TCP3D_DRV_START_AUTO) ) + { + System_printf("Tcp3d_start function returned error (AUTO)\n"); + System_exit(0); + } + + /* Set interrupt flag PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_SET_REVT_INT; + drvCtrl.intrFlag = TEST_INTR_ENABLE; // enable + Tcp3d_control(inst, &drvCtrl); + + /* out of enqueue loop */ + break; + } + } /* end of - while(1) */ + +#if DEBUG_VARS + semCnt = Semaphore_getCount(semSendWait); +#endif + + /** + * Check for pending Pauses and waiting for the last block to be decoded + */ + while ( 1 ) + { + /* Pending on Semaphore to run the loop */ + Semaphore_pend(semSendWait, BIOS_WAIT_FOREVER); + + /* Received both the completion events, so exit send task */ + if ( tcp3dEventCntr >= 2 ) + { + break; + } else if ( tcp3dEventCntr == 1 ) + { + /* one code block test case */ + if ( codeBlockSet.maxNumCB == 1 ) + { + break; + } + else if ( codeBlockSet.mode == TEST_MODE_SPLIT ) + { /* missing one notificatin event - possible in split mode */ + /** + * WORKAROUND CODE: + * This is possibility in case of SPLIT mode, that one event is + * lost when both ping and pong channels try to generate system + * events at close proximity. + * In this test bench we have enabled notification events for + * the last two blocks, so checking the outHD & refHD last bytes + * to confirm the decoding of these blocks are completed. + */ + + /* cbPtr for last two code blocks */ + cbDataDesc *cbPtr1 = codeBlockSet.cbData[codeBlockSet.maxNumCB-2]; + cbDataDesc *cbPtr2 = codeBlockSet.cbData[codeBlockSet.maxNumCB-1]; + uint8_t *bytePtr11, *bytePtr12, *bytePtr21, *bytePtr22; + uint32_t size1, size2; + + bytePtr11 = (UInt8 *) cbPtr1->refHD; + bytePtr12 = (UInt8 *) cbPtr1->outHD; + bytePtr21 = (UInt8 *) cbPtr2->refHD; + bytePtr22 = (UInt8 *) cbPtr2->outHD; + size1 = (cbPtr1->blockSize>>3); /* in bytes */ + size2 = (cbPtr2->blockSize>>3); /* in bytes */ + + /* check if last HD byte of last two blocks are completed */ + if ((bytePtr11[size1-1] == bytePtr12[size1-1]) && + (bytePtr21[size2-1] == bytePtr22[size2-1]) ) + { + System_printf("Notification event missed (Race Condition)\n"); + System_printf("Since the last two block decoding completed, completing send task\n"); + System_printf("Block : %d\n", codeBlockSet.maxNumCB-2); + System_printf("\trefHD[%d] = 0x%x\t outHD[%d] = 0x%x\n", size1-1, bytePtr11[size1-1], size1-1, bytePtr12[size1-1]); + System_printf("Block : %d\n", codeBlockSet.maxNumCB-1); + System_printf("\trefHD[%d] = 0x%x\t outHD[%d] = 0x%x\n", size2-1, bytePtr21[size2-1], size2-1, bytePtr22[size2-1]); + break; + } + } + } + + if ( TCP3D_DRV_NO_ERR != Tcp3d_start(inst, TCP3D_DRV_START_AUTO) ) + { + System_printf("Tcp3d_start function returned error\n"); + System_exit(0); + } + + /* keep trying until finding two end events */ + Semaphore_post(semSendWait); + + pendPauseCntr++; + } + + /* Last code block decoded - Start the receive task */ + total_clock_end = TSCL; + Semaphore_post(semRcvStart); +} + +/******************************************************************************* + ******************************************************************************/ +Void rcvBlockTaskFunc(Void) +{ + Int32 errCnt; + + cbDataDesc *cbPtr; + Int idx, loopCnt; + Int fail = 0; + UInt8 *ptr1, *ptr2; + + rcvBlockCnt = 0; + totErrCnt = 0; + + while(1) + { + Semaphore_pend(semRcvStart, BIOS_WAIT_FOREVER); + + /* prints for send task are done here */ + if ( tcp3dResultSend == TCP3D_DRV_NO_ERR ) + { +#if DEBUG_PRINT + for ( loopCnt = 0; loopCnt < sendBlockCnt; loopCnt++ ) + { + cbPtr = codeBlockSet.cbData[loopCnt]; + System_printf("Send Task: Enqueued Block %d (Size: %d, SW0: %d)\n", + loopCnt, cbPtr->blockSize, + cbPtr->sw0LengthUsed); + } +#endif + System_printf("Send Task: Enqueued %d Blocks\n\n", sendBlockCnt); + } + else + { + System_printf("Send Task: Enqueued Blocks failed (tcp3dResultSend : %d)\n\n", tcp3dResultSend); + System_exit(0); + } + + MY_LOG_PRINT0(Rcv Task: SEM RECEIVED); + + while( rcvBlockCnt < codeBlockSet.maxNumCB ) + { + /* Get the pointer to the Code Block Set */ + cbPtr = codeBlockSet.cbData[rcvBlockCnt]; + + /* Step 2: Verify All the outputs */ + fail = 0; + /* Step 2.1: Hard Decisions Verification */ + ptr1 = (UInt8 *) cbPtr->refHD; + ptr2 = (UInt8 *) cbPtr->outHD; + + /* Invalidate out HD */ + CACHE_invL1d (cbPtr->outHD, cbPtr->blockSize>>3, CACHE_WAIT); + + errCnt = 0; + for (idx = 0; idx < (cbPtr->blockSize>>3); ++idx) + { + if ( ptr1[idx] != ptr2[idx] ) + { + errCnt++; + System_printf("\tBlock Count %d, HD mismatch byte %d\n", rcvBlockCnt, idx); + } + } + + if (errCnt) + { + MY_LOG_PRINT2(Rcv task: HD FAILED, rcvBlockCnt, ERRORS:, errCnt); + fail++; + } + else + { + MY_LOG_PRINT1(Rcv task: HD PASSED, rcvBlockCnt); + } + + /* Step 2.2: Soft Decisions Verification */ + if (cbPtr->sdFlag) + { + if ( codeBlockSet.mode == TEST_MODE_SPLIT ) /* SPLIT MODE */ + loopCnt = cbPtr->blockSize; + else + loopCnt = (3*cbPtr->blockSize); + + /* Invalidate out SD */ + CACHE_invL1d (cbPtr->outSD, loopCnt, CACHE_WAIT); + + /* NOTE: Assumed that the Soft Decisions are in a single array */ + errCnt = 0; + for (idx = 0; idx < loopCnt; ++idx) + { + if ( cbPtr->refSD[idx] != cbPtr->outSD[idx] ) + { + errCnt += 1; + System_printf("\tBlock Count %d, SD mismatch byte %d\n", rcvBlockCnt, idx); + } + } + + if (errCnt) + { + MY_LOG_PRINT2(Rcv task: SD FAILED, rcvBlockCnt, ERRORS:, errCnt); + fail++; + } + else + { + MY_LOG_PRINT1(Rcv task: SD PASSED, rcvBlockCnt); + } + } /* if (cbPtr->sdFlag) */ + + /* Step 2.3: errCnt Registers Verification */ + if (cbPtr->stsFlag) + { + /* Invalidate out Sts */ + CACHE_invL1d (cbPtr->outSts, 12, CACHE_WAIT); + + errCnt = 0; + for (idx = 0; idx < 3; ++idx) + { + if ( cbPtr->refSts[idx] != cbPtr->outSts[idx] ) + { + errCnt += 1; + System_printf("\tBlock Count %d, STS mismatch word %d\n", rcvBlockCnt, idx); + } + } + if (errCnt) + { + MY_LOG_PRINT2(Rcv task: STS FAILED, rcvBlockCnt, ERRORS:, errCnt); + fail++; + } + else + { + MY_LOG_PRINT1(Rcv task: STS PASSED, rcvBlockCnt); + } + } /* if (cbPtr->stsFlag) */ + if (fail) + { + System_printf("Rcv task: Block %d FAILED\n", rcvBlockCnt); + totErrCnt++; + } +#if DEBUG_PRINT + else + { + System_printf("Rcv task: Block %d PASSED\n", rcvBlockCnt); + } +#endif + rcvBlockCnt++; + } + if(rcvBlockCnt >= codeBlockSet.maxNumCB) + { + break; + } + } + + System_printf("Rcv Task: COMPLETE - verified %d blocks\n", rcvBlockCnt); + + /* Prepare for next test, set by "tester task" */ + Semaphore_post(semRcvDone); +} + +/******************************************************************************* + ******************************************************************************/ +Void revt0ChCallback(Void) +{ + /* Increment the ISR counter */ + pauseIntr++; + + pauseIntFlag = 1; + + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + Semaphore_post(semSendWait); + else + Semaphore_post(semSendBlock); +} + +/******************************************************************************* + ******************************************************************************/ +Void revt1ChCallback(Void) +{ + /* Increment the ISR counter */ + pauseIntr++; + + pauseIntFlag = 2; + + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + Semaphore_post(semSendWait); + else + Semaphore_post(semSendBlock); +} + +/******************************************************************************* + ******************************************************************************/ +Void tskHeartBeat(Void) +{ + static unsigned int counter = 0u; + + while (counter < 0x1000000u) + { + Task_sleep (1000u); + System_printf("\n!!! EDMA3 LLD HrtBt %x\n", counter); + counter++; + } +} + +/******************************************************************************* + ******************************************************************************/ +Void getMemoryStats(Void) +{ + Memory_Stats memStats; + + Memory_getStats(drvHeap, &memStats); + System_printf("\nHeap Usage/Staus\n"); + System_printf(" tcp3dDrvHeap : %d of %d free\n", memStats.totalFreeSize, memStats.totalSize); + + Memory_getStats(dataHeap, &memStats); + System_printf(" tcp3dDataHeap : %d of %d free\n", memStats.totalFreeSize, memStats.totalSize); +} + +/******************************************************************************* + ******************************************************************************/ +Void tcp3dEventISR(UInt32 testEvtNum) +{ + tcp3dEventCntr++; + tpccEvtCntr++; + + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + Semaphore_post(semSendWait); + else + Semaphore_post(semSendBlock); +} + +/******************************************************************************* + ******************************************************************************/ +Void registerTcp3dEvent(Void) +{ + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ + static UInt32 mapDone = 0; + UInt32 testEvt = getNotifyEventNum(instNum); + UInt32 hostIntr = getHostIntrNum(dspCoreID); + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Completion ISR Registration */ + CpIntc_dispatchPlug(testEvt, tcp3dEventISR, hostIntr, TRUE); + if (!mapDone) + CpIntc_mapSysIntToHostInt(0, testEvt, hostIntr); + CpIntc_enableHostInt(0, hostIntr); + eventId = CpIntc_getEventId(hostIntr); + EventCombiner_dispatchPlug (eventId, +#if USE_LOCAL_CPINTC_DISPATCH + CpIntc_dispatchLoc, +#else + CpIntc_dispatch, +#endif + hostIntr, + TRUE); +#if DEBUG_PRINT + System_printf("\t\t testEvt : %d \n", testEvt); + System_printf("\t\t hostIntr : %d \n", hostIntr); + System_printf("\t\t eventId : %d \n", eventId); +#endif + + /* enable the 'global' switch */ + CpIntc_enableAllHostInts(0); + + mapDone = 1; + + /* Restore interrupts */ + Hwi_restore(cookie); +} + +/******************************************************************************* + ******************************************************************************/ +Void unregisterTcp3dEvent(Void) +{ + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ + UInt32 hostIntr = getHostIntrNum(dspCoreID); + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Driver Completion ISR */ + CpIntc_disableHostInt(0, hostIntr); + eventId = CpIntc_getEventId(hostIntr); + EventCombiner_disableEvent(eventId); + + /* Restore interrupts */ + Hwi_restore(cookie); +} + +/******************************************************************************* + ******************************************************************************/ +Void allInit(Void) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + EDMA3_DRV_Result edmaResult = EDMA3_DRV_SOK; + + /* Initialize EDMA3 first */ + hEdma = NULL; + tpccNum = 2; + tpccRegionUsed = 3; + hEdma = edma3init ( tpccNum, + &edmaResult, + dspCoreID, + tpccRegionUsed); + if (edmaResult != EDMA3_DRV_SOK) + { + System_printf("edma3init() FAILED, error code: %d\n", edmaResult); + } + else + { + System_printf("EDMA3 LLD Initialization complete (TPCC #%d, Region #%d)\n", tpccNum, tpccRegionUsed); + } + + /* Allocate all EDMA channels required for TCP3D Driver */ + System_printf("EDMA3 Channels opening started...\n"); + + /* Open channels for one instance */ + openEdmaChannels (hEdma, instNum, &edmaConfig[instNum]); + + /* Register call backs */ + EDMA3_DRV_registerTccCb(hEdma, edmaConfig[instNum].pingChRes[0].chNo, (EDMA3_RM_TccCallback)&revt0ChCallback, NULL); + EDMA3_DRV_registerTccCb(hEdma, edmaConfig[instNum].pongChRes[0].chNo, (EDMA3_RM_TccCallback)&revt1ChCallback, NULL); + +#if EDMA_LOCAL_COMP_ISR // flag defined in sample.h file + /* Fill call back details */ + edmaConfig[instNum].pingChRes[0].cbFunc = (EDMA3_RM_TccCallback)&revt0ChCallback; + edmaConfig[instNum].pingChRes[0].cbData = NULL; + edmaConfig[instNum].pongChRes[0].cbFunc = (EDMA3_RM_TccCallback)&revt1ChCallback; + edmaConfig[instNum].pongChRes[0].cbData = NULL; + + /** + * Update the information to use with local EDMA ISR + * (NOTE: This function must be called after the channels are opened) + */ + updateAllocatedTccsLoc(&edmaConfig[instNum]); +#endif + + System_printf("EDMA3 Channels opening complete\n"); + + System_printf("TCP3 Decoder Driver Initialization sequence started...\n"); + + /* Initialize the TCP3D first */ + tcp3dDrvInst[instNum] = tcp3dSampleInit (drvHeap, + instNum, + testMaxCodeBlocks, + codeBlockSet.mode, + codeBlockSet.doubleBuffer, + codeBlockSet.lteCrcSel, + dspCoreID, + hEdma, + tpccRegionUsed, + &edmaConfig[instNum], + &tcp3dResult); + + System_printf("TCP3 Decoder Driver Initialization sequence complete\n"); + + /* Register the Notification Event for TCP3D */ + registerTcp3dEvent(); + + /* Set the global flags to default values */ + pingComplete = 0; + pongComplete = 0; + pauseIntr = 0; + l2pIntr = 0; + tcp3dEventCntr = 0; + pauseIntFlag = 0; + rcvStartFlag = 0; + soldoutCntr = 0; + afterIntrSoldout = 0; + afterIntrPause = 0; + pendPauseCntr = 0; +} + +/******************************************************************************* + ******************************************************************************/ +Void allDeInit(Void) +{ + EDMA3_DRV_Result edmaResult = EDMA3_DRV_SOK; + + /* Un-register the Notification Event for TCP3D */ + unregisterTcp3dEvent(); + + /* Close all EDMA channels allocated for the test */ + System_printf("EDMA3 Channels freeing started...\n"); + + /* Register call backs */ + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pingChRes[0].chNo); + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pingChRes[1].chNo); + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pongChRes[0].chNo); + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pongChRes[1].chNo); + + /* Close channels */ + closeEdmaChannels(hEdma, instNum, &edmaConfig[instNum]); + + System_printf("EDMA3 Channels freeing complete\n"); + + /* Deinit for TCP3D driver */ + System_printf("TCP3 Decoder Driver De-Initialization sequence started...\n"); + + tcp3dSampleDeinit(drvHeap, instNum, tcp3dDrvInst[instNum]); + + System_printf("TCP3 Decoder Driver De-Initialization sequence complete\n"); + + /* De-init EDMA3 */ + edmaResult = edma3deinit(tpccNum, hEdma); + if (edmaResult != EDMA3_DRV_SOK) + { + System_printf("edma3deinit() FAILED, error code: %d\n", edmaResult); + } + else + { + System_printf("EDMA3 LLD De-Initialization complete\n"); + } +} + +/** + * @b Description + * @n + * This function enables the power/clock domains for TCP3D. + * + * @retval + * Not Applicable. + */ +static Int32 enable_tcp3d (void) +{ +#ifndef SIMULATOR_SUPPORT + /* TCP3D power domain is turned OFF by default. + * It needs to be turned on before doing any TCP3D device register access. + * This is not required for the simulator. */ + + /* Set TCP3D Power domain to ON */ + CSL_PSC_enablePowerDomain (CSL_PSC_PD_TCP3D); + + /* Enable the clocks too for TCP3D */ + CSL_PSC_setModuleNextState (CSL_PSC_LPSC_TCP3D, PSC_MODSTATE_ENABLE); + + /* Start the state transition */ + CSL_PSC_startStateTransition (CSL_PSC_PD_TCP3D); + + /* Wait until the state transition process is completed. */ + while (!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_TCP3D)); + + /* Return TCP3D PSC status */ + if ((CSL_PSC_getPowerDomainState(CSL_PSC_PD_TCP3D) == PSC_PDSTATE_ON) && + (CSL_PSC_getModuleState (CSL_PSC_LPSC_TCP3D) == PSC_MODSTATE_ENABLE)) + { + /* TCP3D ON. Ready for use */ + return 0; + } + else + { + /* SRIO Power on failed. Return error */ + return -1; + } +#else + /* PSC is not supported on simulator. Return success always */ + return 0; +#endif +} + +/** + * @b Description + * @n + * The function is used to indicate that a block of memory is + * about to be accessed. If the memory block is cached then this + * indicates that the application would need to ensure that the + * cache is updated with the data from the actual memory. + * + * @param[in] ptr + * Address of memory block + * + * @param[in] size + * Size of memory block + * + * @retval + * Not Applicable + */ +void tcp3dBeginMemAccess (void *ptr, uint32_t size) +{ + /* Invalidate L1D cache and wait until operation is complete. + * Use this approach if L2 cache is not enabled */ + CACHE_invL1d (ptr, size, CACHE_FENCE_WAIT); + + /* Cleanup the prefectch buffer also. */ + CSL_XMC_invalidatePrefetchBuffer(); + + return; +} + +/** + * @b Description + * @n + * The function is used to indicate that the block of memory has + * finished being accessed. If the memory block is cached then the + * application would need to ensure that the contents of the cache + * are updated immediately to the actual memory. + * + * @param[in] ptr + * Address of memory block + * @param[in] size + * Size of memory block + * + * @retval + * Not Applicable + */ +void tcp3dEndMemAccess (void *ptr, uint32_t size) +{ + /* Writeback L1D cache and wait until operation is complete. + * Use this approach if L2 cache is not enabled */ + CACHE_wbL1d (ptr, size, CACHE_FENCE_WAIT); + + return; +} + +/* end of file */ diff --git a/example/src/tcp3d_example_main.h b/example/src/tcp3d_example_main.h new file mode 100644 index 0000000..5d4d120 --- /dev/null +++ b/example/src/tcp3d_example_main.h @@ -0,0 +1,237 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_MAIN_H_ +#define _TCP3D_MAIN_H_ + +/* XDC includes */ +//#include +#include +#include +#include +#include + +/* Driver includes */ +#include +#include + +/* Utility includes */ +#include "tcp3d_codeBlkSeg.h" + +/********************************************************************** + ************************** Test Macros ******************************* + **********************************************************************/ +/** + * Address mapping is done based on the mapping shown below. + * Check on the address done to ensure it be in L2SRAM space. + * + * L2SRAM : org = 0x00800000, len = 0x100000 (local) + * GEM0_L2_MEM : org = 0x10800000, len = 0x100000 (global) + * GEM1_L2_MEM : org = 0x11800000, len = 0x100000 (global) + * GEM2_L2_MEM : org = 0x12800000, len = 0x100000 (global) + * GEM3_L2_MEM : org = 0x13800000, len = 0x100000 (global) + * + * MSMCSRAM : org = 0x0c000000, len = 0x200000 (global) + */ +#define L2GLBMAP(coreID, addr) \ + ( ( ((UInt32)(addr) >= 0x00800000) && ((UInt32)(addr) < 0x00900000) ) ? \ + ( (UInt32)(addr) | (UInt32)((0x10 | (coreID & 0x3)) << 24) ) : \ + (UInt32)(addr) ) + +/********************************************************************** + ************************** Test Compile Flags ************************ + **********************************************************************/ +/** + * Prepare all input config registers outside the Send loop (block size based, etc) + * except for beta states since they are data dependent. + */ +#define TEST_PREPARE_ONLY_BETASTATE 1 + +/** + * Set this flag to use the fixed input configuration parameters preparation + * optimization. This flag is useful only if TEST_PREPARE_ONLY_BETASTATE is + * not used. + */ +#define TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT 0 + +/** + * Check the beta state values with the reference from the file generated + * with the test vectors. + */ +#define TEST_BETA_VALUE_CHECK 0 + +/********************************************************************** + ************************** Test Definitions ************************** + **********************************************************************/ +/* TCP3D modes */ +#define TEST_MODE_SINGLE CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_3GPP //0 (NOT SUPPORTED) +#define TEST_MODE_LTE CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE //1 +#define TEST_MODE_WIMAX CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX //2 +#define TEST_MODE_SPLIT CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_HSUPA //3 + +/* Test True/False flags */ +#define TEST_FALSE 0 +#define TEST_TRUE 1 + +/* Test Interrupt flags */ +#define TEST_INTR_ENABLE 1 +#define TEST_INTR_DISABLE 0 + +/********************************************************************** + ************************** Test Structures *************************** + **********************************************************************/ +/* + * Structure that holds the configuration parameters. Used for storing the + * configuration values read from the file blockXX_cfgreg.dat for a given + * code block. + */ +typedef struct cbConfig +{ + /* Control */ + Int32 mode_sel; //TCP3_MODE + Int32 lte_crc_init_sel; + + /* Input */ + Int32 NumInfoBits; //CFG0 + Int32 SW0_length; //CFG1 + Int32 maxst_en; //CFG2 + Int32 out_flag_en; + Int32 out_order_sel; + Int32 ext_scale_en; + Int32 soft_out_flag_en; + Int32 soft_out_fmt; + Int32 min_itr; + Int32 max_itr; + Int32 snr_val; + Int32 snr_rep; + Int32 stop_sel; + Int32 crc_iter_pass; + Int32 crc_sel; + Int32 maxst_thold; //CFG3 + Int32 maxst_value; + Int32 ext_scale_0; //CFG8 + Int32 ext_scale_1; + Int32 ext_scale_2; + Int32 ext_scale_3; + Int32 ext_scale_4; //CFG9 + Int32 ext_scale_5; + Int32 ext_scale_6; + Int32 ext_scale_7; + Int32 ext_scale_8; //CFG10 + Int32 ext_scale_9; + Int32 ext_scale_10; + Int32 ext_scale_11; + Int32 ext_scale_12; //CFG11 + Int32 ext_scale_13; + Int32 ext_scale_14; + Int32 ext_scale_15; +} cbConfig; + +/* + * Structure for one code block description. + */ +typedef struct cbDataDesc +{ + UInt32 mode; + UInt32 crcInitVal; + Int8 tailBits[12]; + Tcp3d_InCfgParams *inCfgParams; + UInt8 sw0LengthUsed; + + UInt32 blockSize; + UInt32 interFlag; + UInt32 sdFlag; + UInt32 stsFlag; + UInt32 llrOffset; + UInt32 sdOffset; + + UInt32 sizeCFG; + UInt32 sizeINTER; + UInt32 sizeLLR; + UInt32 sizeHD; + UInt32 sizeSD; + UInt32 sizeSTS; + + UInt32 *inCfg; + UInt16 *inInter; + Int8 *inLLR; /* three arrays with offset in llrOffset */ + UInt32 *outHD; + UInt32 *refHD; + Int8 *outSD; /* three arrays with offset in sdOffset */ + Int8 *refSD; /* three arrays with offset in sdOffset */ + UInt32 *outSts; + UInt32 *refSts; +} cbDataDesc; + +/* + * Structure for one test description. + */ +typedef struct cbTestDesc +{ + cbDataDesc **cbData; + Int32 maxNumCB; + Int32 mode; + Int32 doubleBuffer; + Int32 lteCrcSel; +} cbTestDesc; + +/********************************************************************** + ************************** Test Global Tables ************************ + **********************************************************************/ +/* interleaver tables (used in tcp3d_inputCongigPrep.c file) */ +extern Int16 TCP3_LteInterleaverTable[220][7]; +extern Int16 TCP3_WimaxInterleaverTable[17][4]; + +/********************************************************************** + *********************** Test Global Functions ************************ + **********************************************************************/ +/* interleaver table index calculation function */ +Int32 LTE_interleaver_index(Int32 K); +Int32 WIMAX_interleaver_index(Int32 K); + +/* input config prepare function definitions (see tcp3d_inputCongigPrep.c) */ +Void prepareBlockSizeDepICParams(cbDataDesc *cbPtr); +Void prepareBetaStateICParams(cbDataDesc *cbPtr, UInt8 mode); +Void prepareIC(cbDataDesc *cbPtr, UInt32 *tempIC, UInt8 copyFlag); +Void fillICParams(Tcp3d_InCfgParams *inCfgParams, cbConfig *cbCfg); +Void checkBetaValues (UInt32 inCfg[]); + +/* Test vector functions (see tcp3d_testvector.c) */ +Int getTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet, Char *testFolder); +Void freeTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet); + +#endif /* _TCP3D_MAIN_H_ */ diff --git a/example/src/tcp3d_inputConfigPrep.c b/example/src/tcp3d_inputConfigPrep.c new file mode 100644 index 0000000..7cbe95f --- /dev/null +++ b/example/src/tcp3d_inputConfigPrep.c @@ -0,0 +1,314 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#include +#include + +#include "tcp3d_main.h" + +/* XDC includes */ +#include +#include + +/* CSL includes */ +#include +#include +#include +#include + +#if TEST_PREPARE_ONLY_BETASTATE +/******************************************************************************* + ******************************************************************************/ +Void prepareBlockSizeDepICParams(cbDataDesc *cbPtr) +{ + Int32 frameLenInd; + UInt8 numMAP; + + if ( ( cbPtr->mode == TEST_MODE_SINGLE ) || + ( cbPtr->mode == TEST_MODE_SPLIT ) ) + numMAP = 1; /* for 3GPP numMAP=1 */ + else + numMAP = 2; /* LTE or WIMAX */ + + /* IC0 - IC1 */ + cbPtr->inCfgParams->blockLen = (cbPtr->blockSize-1); + TCP3D_codeBlkSeg ( cbPtr->blockSize, + numMAP, + &cbPtr->sw0LengthUsed, + &cbPtr->inCfgParams->sw0LenSel, + &cbPtr->inCfgParams->sw1Len, + &cbPtr->inCfgParams->sw2LenSel, + &cbPtr->inCfgParams->numsw0); + + /* IC12 - IC14 */ + if ( cbPtr->mode == TEST_MODE_LTE ) + { /* LTE */ + frameLenInd = LTE_interleaver_index(cbPtr->blockSize); + cbPtr->inCfgParams->itgParam[0] = (UInt16) ((2*TCP3_LteInterleaverTable[frameLenInd][2]) % TCP3_LteInterleaverTable[frameLenInd][0]); + cbPtr->inCfgParams->itgParam[1] = TCP3_LteInterleaverTable[frameLenInd][6]; + cbPtr->inCfgParams->itgParam[2] = TCP3_LteInterleaverTable[frameLenInd][3]; + cbPtr->inCfgParams->itgParam[3] = TCP3_LteInterleaverTable[frameLenInd][4]; + cbPtr->inCfgParams->itgParam[4] = TCP3_LteInterleaverTable[frameLenInd][5]; + } + else if ( cbPtr->mode == TEST_MODE_WIMAX ) + { /* WIMAX */ + /* NOTE: Finding Index function is not implemented */ + frameLenInd = WIMAX_interleaver_index(cbPtr->blockSize); + cbPtr->inCfgParams->itgParam[0] = 0; + cbPtr->inCfgParams->itgParam[1] = TCP3_WimaxInterleaverTable[frameLenInd][0]; + cbPtr->inCfgParams->itgParam[2] = TCP3_WimaxInterleaverTable[frameLenInd][1]; + cbPtr->inCfgParams->itgParam[3] = TCP3_WimaxInterleaverTable[frameLenInd][2]; + cbPtr->inCfgParams->itgParam[4] = TCP3_WimaxInterleaverTable[frameLenInd][3]; + } + + Tcp3d_prepBlockSizeDepConfigRegs ( cbPtr->mode, + &cbPtr->inCfg[0], + cbPtr->inCfgParams->numsw0, + cbPtr->inCfgParams->blockLen, + cbPtr->inCfgParams->sw0LenSel, + cbPtr->inCfgParams->sw2LenSel, + cbPtr->inCfgParams->sw1Len, + &cbPtr->inCfgParams->itgParam[0]); +} + +/******************************************************************************* + ******************************************************************************/ +Void prepareBetaStateICParams(cbDataDesc *cbPtr, UInt8 mode) +{ + if ( mode != TEST_MODE_WIMAX ) + { + Tcp3d_betaStates ( cbPtr->tailBits, + //cbPtr->tailMap1, + 1, /* change to -1 for sign change */ + COMPUTE_KT(cbPtr->blockSize), + cbPtr->inCfgParams->betaMap0, + cbPtr->inCfgParams->betaMap1); + + Tcp3d_prepBetaStateConfigRegs ( mode, + &cbPtr->inCfg[0], + &cbPtr->inCfgParams->betaMap0[0], + &cbPtr->inCfgParams->betaMap1[0]); + } +} + +#else +/******************************************************************************* + ******************************************************************************/ +/** + * This function is used for filling the changing values and calling the + * utility prepare functions for constructing all the 15 input config registers + */ +Void prepareIC(cbDataDesc *cbPtr, UInt32 *tempIC, UInt8 copyFlag) +{ + UInt8 numMAP; + Int32 frameLenInd; + Int i; + Tcp3d_InCfgParams *inCfgParams = cbPtr->inCfgParams; + + if ( ( cbPtr->mode == TEST_MODE_SINGLE ) || + ( cbPtr->mode == TEST_MODE_SPLIT ) ) + numMAP = 1; /* for 3GPP numMAP=1 */ + else + numMAP = 2; /* LTE or WIMAX */ + + /* IC0 - IC1 */ + inCfgParams->blockLen = (cbPtr->blockSize-1); + TCP3D_codeBlkSeg ( cbPtr->blockSize, + numMAP, + &cbPtr->sw0LengthUsed, + &inCfgParams->sw0LenSel, + &inCfgParams->sw1Len, + &inCfgParams->sw2LenSel, + &inCfgParams->numsw0); + + /* IC2 - IC3 */ + /* Fixed values filled once during init */ + /* IC4 - IC7 */ + if ( mode != TEST_MODE_WIMAX ) + { + /* compute the beta state values from tail bits */ + Tcp3d_betaStates ( cbPtr->tailBits, + 1, /* change to -1 for sign change */ + COMPUTE_KT(cbPtr->blockSize), + inCfgParams->betaMap0, + inCfgParams->betaMap1); + } + /* IC8 - IC11 */ + /* Fixed values filled once during init */ + /* IC12 - IC14 */ + if ( cbPtr->mode == TEST_MODE_LTE ) + { /* LTE */ + frameLenInd = LTE_interleaver_index(cbPtr->blockSize); + inCfgParams->itgParam[0] = (UInt16) ((2*TCP3_LteInterleaverTable[frameLenInd][2]) % TCP3_LteInterleaverTable[frameLenInd][0]); + inCfgParams->itgParam[1] = TCP3_LteInterleaverTable[frameLenInd][6]; + inCfgParams->itgParam[2] = TCP3_LteInterleaverTable[frameLenInd][3]; + inCfgParams->itgParam[3] = TCP3_LteInterleaverTable[frameLenInd][4]; + inCfgParams->itgParam[4] = TCP3_LteInterleaverTable[frameLenInd][5]; + } + else if ( cbPtr->mode == TEST_MODE_WIMAX ) + { /* WIMAX */ + /* NOTE: Finding Index function is not implemented */ + frameLenInd = WIMAX_interleaver_index(cbPtr->blockSize); + inCfgParams->itgParam[0] = 0; + inCfgParams->itgParam[1] = TCP3_WimaxInterleaverTable[frameLenInd][0]; + inCfgParams->itgParam[2] = TCP3_WimaxInterleaverTable[frameLenInd][1]; + inCfgParams->itgParam[3] = TCP3_WimaxInterleaverTable[frameLenInd][2]; + inCfgParams->itgParam[4] = TCP3_WimaxInterleaverTable[frameLenInd][3]; + } + + /* All Input Config Registers are populated */ + Tcp3d_prepConfigRegs ( cbPtr->mode, + inCfgParams, + cbPtr->inCfg, + tempIC, + copyFlag); +} +#endif + +/******************************************************************************* + ******************************************************************************/ +/** + * This function is used for filling the fixed values in the inCfgParams + * structure. + */ +Void fillICParams(Tcp3d_InCfgParams *inCfgParams, cbConfig *cbCfg) +{ + /* copy the config info into inCfgParams */ + /* IC0 - IC1 */ + /* Filled by the TCP3D_codeBlkSeg() function call */ + /* IC2 */ + inCfgParams->intLoadSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_INTER_LOAD_SEL_SET; + inCfgParams->maxStar = cbCfg->maxst_en; + inCfgParams->outStsRead = cbCfg->out_flag_en; +#ifdef _BIG_ENDIAN + inCfgParams->outOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_OUT_ORDER_SEL_SWAP; +#else + inCfgParams->outOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_OUT_ORDER_SEL_NO_SWAP; +#endif + inCfgParams->extScale = cbCfg->ext_scale_en; + inCfgParams->softOutRead = cbCfg->soft_out_flag_en; +#ifdef _BIG_ENDIAN + inCfgParams->softOutOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_ORDER_SEL_8_BIT; +#else + inCfgParams->softOutOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_ORDER_SEL_32_BIT; +#endif + inCfgParams->softOutFrmtSel = cbCfg->soft_out_fmt; + inCfgParams->minIter = cbCfg->min_itr; + inCfgParams->maxIter = cbCfg->max_itr; + inCfgParams->snrVal = cbCfg->snr_val; + inCfgParams->snrReport = cbCfg->snr_rep; + inCfgParams->stopSel = cbCfg->stop_sel; + inCfgParams->crcIterSel = cbCfg->crc_iter_pass; + inCfgParams->crcPolySel = cbCfg->crc_sel; + /* IC3 */ + inCfgParams->maxStarThres = cbCfg->maxst_thold; + inCfgParams->maxStarValue = cbCfg->maxst_value; + /* IC4 - IC7 */ + /* Filling with defaults - updated based on tail bits */ + memset(inCfgParams->betaMap0,0,8); + memset(inCfgParams->betaMap0,0,8); + /* IC8 - IC11 */ + inCfgParams->extrScale[0] = cbCfg->ext_scale_0; + inCfgParams->extrScale[1] = cbCfg->ext_scale_1; + inCfgParams->extrScale[2] = cbCfg->ext_scale_2; + inCfgParams->extrScale[3] = cbCfg->ext_scale_3; + inCfgParams->extrScale[4] = cbCfg->ext_scale_4; + inCfgParams->extrScale[5] = cbCfg->ext_scale_5; + inCfgParams->extrScale[6] = cbCfg->ext_scale_6; + inCfgParams->extrScale[7] = cbCfg->ext_scale_7; + inCfgParams->extrScale[8] = cbCfg->ext_scale_8; + inCfgParams->extrScale[9] = cbCfg->ext_scale_9; + inCfgParams->extrScale[10] = cbCfg->ext_scale_10; + inCfgParams->extrScale[11] = cbCfg->ext_scale_11; + inCfgParams->extrScale[12] = cbCfg->ext_scale_12; + inCfgParams->extrScale[13] = cbCfg->ext_scale_13; + inCfgParams->extrScale[14] = cbCfg->ext_scale_14; + inCfgParams->extrScale[15] = cbCfg->ext_scale_15; + /* IC12 - IC14 */ + /* Filling with defaults - updated based on block size */ + inCfgParams->itgParam[0] = 0; + inCfgParams->itgParam[1] = 0; + inCfgParams->itgParam[2] = 0; + inCfgParams->itgParam[3] = 0; + inCfgParams->itgParam[4] = 0; +} + +/** + * @b Description + * @n + * This function compares the prepared beta state values with the + * reference test vector file. + * + * @param[in] inCfg + * Address of input configuration registers array. + * + * @retval + * Not Applicable. + */ +void checkBetaValues (uint32_t inCfg[]) +{ +#if TEST_BETA_VALUE_CHECK + Int idx, i; + Char fileName[300]; + FILE *fid; + UInt32 inCfgRef[15]; + UInt32 tmp; + + /* Check Beta state values with reference */ + sprintf(fileName, "%s\\reference\\block%d_inp_cfg.dat", testFolder[testCntr], sendBlockCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\t Reference Input configuration file open failed : %s\n", fileName); + System_exit(0); + } + for(i=0;i<15;i++) + { + fscanf(fid, "%x", &tmp); + inCfgRef[i] = tmp; + } + fclose(fid); + + for (idx = 4; idx < 8; ++idx) + { + if ( inCfgRef[idx] != inCfg[idx] ) + { + System_printf("\t Block Count %d, INCFG mismatch %d\n", sendBlockCnt, idx); + } + } +#else + return; +#endif +} + +/* end of file */ diff --git a/example/src/tcp3d_itg.c b/example/src/tcp3d_itg.c new file mode 100644 index 0000000..0eac0f6 --- /dev/null +++ b/example/src/tcp3d_itg.c @@ -0,0 +1,366 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#include +#include + +#include + +/***************************************************************************/ +/* LTE Interelaver table with the coefficients P0,P1,P2 and G0 needed for */ +/* internal LTE coefficient generation. */ +/* K f1 f2 P0 P1 P2 G0 */ +/***************************************************************************/ +Int16 TCP3_LteInterleaverTable [220][7] = { + 40, 3, 10, 30, 20, 10, 13, // 0 + 48, 7, 12, 36, 24, 12, 19, // 1 + 56, 19, 42, 42, 28, 14, 5, // 2 + 64, 7, 16, 48, 32, 16, 23, // 3 + 72, 7, 18, 54, 36, 18, 25, // 4 + 80, 11, 20, 60, 40, 20, 31, // 5 + 88, 5, 22, 22, 44, 66, 27, // 6 + 96, 11, 24, 72, 48, 24, 35, // 7 + 104, 7, 26, 78, 52, 26, 33, // 8 + 112, 41, 84, 28, 56, 84, 13, // 9 + 120, 103, 90, 90, 60, 30, 73, // 10 + 128, 15, 32, 96, 64, 32, 47, // 11 + 136, 9, 34, 34, 68, 102, 43, // 12 + 144, 17, 108, 36, 72, 108, 125, // 13 + 152, 9, 38, 38, 76, 114, 47, // 14 + 160, 21, 120, 40, 80, 120, 141, // 15 + 168, 101, 84, 42, 84, 126, 17, // 16 + 176, 21, 44, 44, 88, 132, 65, // 17 + 184, 57, 46, 46, 92, 138, 103, // 18 + 192, 23, 48, 144, 96, 48, 71, // 19 + 200, 13, 50, 50, 100, 150, 63, // 20 + 208, 27, 52, 156, 104, 52, 79, // 21 + 216, 11, 36, 162, 108, 54, 47, // 22 + 224, 27, 56, 168, 112, 56, 83, // 23 + 232, 85, 58, 58, 116, 174, 143, // 24 + 240, 29, 60, 60, 120, 180, 89, // 25 + 248, 33, 62, 62, 124, 186, 95, // 26 + 256, 15, 32, 192, 128, 64, 47, // 27 + 264, 17, 198, 66, 132, 198, 215, // 28 + 272, 33, 68, 68, 136, 204, 101, // 29 + 280, 103, 210, 210, 140, 70, 33, // 30 + 288, 19, 36, 216, 144, 72, 55, // 31 + 296, 19, 74, 222, 148, 74, 93, // 32 + 304, 37, 76, 76, 152, 228, 113, // 33 + 312, 19, 78, 234, 156, 78, 97, // 34 + 320, 21, 120, 80, 160, 240, 141, // 35 + 328, 21, 82, 82, 164, 246, 103, // 36 + 336, 115, 84, 252, 168, 84, 199, // 37 + 344, 193, 86, 86, 172, 258, 279, // 38 + 352, 21, 44, 88, 176, 264, 65, // 39 + 360, 133, 90, 90, 180, 270, 223, // 40 + 368, 81, 46, 92, 184, 276, 127, // 41 + 376, 45, 94, 94, 188, 282, 139, // 42 + 384, 23, 48, 288, 192, 96, 71, // 43 + 392, 243, 98, 294, 196, 98, 341, // 44 + 400, 151, 40, 300, 200, 100, 191, // 45 + 408, 155, 102, 306, 204, 102, 257, // 46 + 416, 25, 52, 104, 208, 312, 77, // 47 + 424, 51, 106, 318, 212, 106, 157, // 48 + 432, 47, 72, 324, 216, 108, 119, // 49 + 440, 91, 110, 330, 220, 110, 201, // 50 + 448, 29, 168, 112, 224, 336, 197, // 51 + 456, 29, 114, 114, 228, 342, 143, // 52 + 464, 247, 58, 348, 232, 116, 305, // 53 + 472, 29, 118, 118, 236, 354, 147, // 54 + 480, 89, 180, 120, 240, 360, 269, // 55 + 488, 91, 122, 366, 244, 122, 213, // 56 + 496, 157, 62, 124, 248, 372, 219, // 57 + 504, 55, 84, 378, 252, 126, 139, // 58 + 512, 31, 64, 384, 256, 128, 95, // 59 + 528, 17, 66, 132, 264, 396, 83, // 60 + 544, 35, 68, 408, 272, 136, 103, // 61 + 560, 227, 420, 420, 280, 140, 87, // 62 + 576, 65, 96, 144, 288, 432, 161, // 63 + 592, 19, 74, 444, 296, 148, 93, // 64 + 608, 37, 76, 152, 304, 456, 113, // 65 + 624, 41, 234, 156, 312, 468, 275, // 66 + 640, 39, 80, 480, 320, 160, 119, // 67 + 656, 185, 82, 164, 328, 492, 267, // 68 + 672, 43, 252, 504, 336, 168, 295, // 69 + 688, 21, 86, 172, 344, 516, 107, // 70 + 704, 155, 44, 528, 352, 176, 199, // 71 + 720, 79, 120, 540, 360, 180, 199, // 72 + 736, 139, 92, 552, 368, 184, 231, // 73 + 752, 23, 94, 564, 376, 188, 117, // 74 + 768, 217, 48, 192, 384, 576, 265, // 75 + 784, 25, 98, 196, 392, 588, 123, // 76 + 800, 17, 80, 200, 400, 600, 97, // 77 + 816, 127, 102, 612, 408, 204, 229, // 78 + 832, 25, 52, 208, 416, 624, 77, // 79 + 848, 239, 106, 636, 424, 212, 345, // 80 + 864, 17, 48, 216, 432, 648, 65, // 81 + 880, 137, 110, 220, 440, 660, 247, // 82 + 896, 215, 112, 672, 448, 224, 327, // 83 + 912, 29, 114, 228, 456, 684, 143, // 84 + 928, 15, 58, 696, 464, 232, 73, // 85 + 944, 147, 118, 708, 472, 236, 265, // 86 + 960, 29, 60, 240, 480, 720, 89, // 87 + 976, 59, 122, 732, 488, 244, 181, // 88 + 992, 65, 124, 248, 496, 744, 189, // 89 + 1008, 55, 84, 756, 504, 252, 139, // 90 + 1024, 31, 64, 768, 512, 256, 95, // 91 + 1056, 17, 66, 264, 528, 792, 83, // 92 + 1088, 171, 204, 816, 544, 272, 375, // 93 + 1120, 67, 140, 840, 560, 280, 207, // 94 + 1152, 35, 72, 864, 576, 288, 107, // 95 + 1184, 19, 74, 888, 592, 296, 93, // 96 + 1216, 39, 76, 912, 608, 304, 115, // 97 + 1248, 19, 78, 936, 624, 312, 97, // 98 + 1280, 199, 240, 960, 640, 320, 439, // 99 + 1312, 21, 82, 328, 656, 984, 103, // 100 + 1344, 211, 252, 1008, 672, 336, 463, // 101 + 1376, 21, 86, 344, 688, 1032, 107, // 102 + 1408, 43, 88, 1056, 704, 352, 131, // 103 + 1440, 149, 60, 360, 720, 1080, 209, // 104 + 1472, 45, 92, 368, 736, 1104, 137, // 105 + 1504, 49, 846, 376, 752, 1128, 895, // 106 + 1536, 71, 48, 1152, 768, 384, 119, // 107 + 1568, 13, 28, 392, 784, 1176, 41, // 108 + 1600, 17, 80, 400, 800, 1200, 97, // 109 + 1632, 25, 102, 408, 816, 1224, 127, // 110 + 1664, 183, 104, 1248, 832, 416, 287, // 111 + 1696, 55, 954, 1272, 848, 424, 1009, // 112 + 1728, 127, 96, 1296, 864, 432, 223, // 113 + 1760, 27, 110, 1320, 880, 440, 137, // 114 + 1792, 29, 112, 448, 896, 1344, 141, // 115 + 1824, 29, 114, 456, 912, 1368, 143, // 116 + 1856, 57, 116, 464, 928, 1392, 173, // 117 + 1888, 45, 354, 472, 944, 1416, 399, // 118 + 1920, 31, 120, 1440, 960, 480, 151, // 119 + 1952, 59, 610, 1464, 976, 488, 669, // 120 + 1984, 185, 124, 496, 992, 1488, 309, // 121 + 2016, 113, 420, 504, 1008, 1512, 533, // 122 + 2048, 31, 64, 1536, 1024, 512, 95, // 123 + 2112, 17, 66, 528, 1056, 1584, 83, // 124 + 2176, 171, 136, 1632, 1088, 544, 307, // 125 + 2240, 209, 420, 560, 1120, 1680, 629, // 126 + 2304, 253, 216, 576, 1152, 1728, 469, // 127 + 2368, 367, 444, 1776, 1184, 592, 811, // 128 + 2432, 265, 456, 608, 1216, 1824, 721, // 129 + 2496, 181, 468, 624, 1248, 1872, 649, // 130 + 2560, 39, 80, 1920, 1280, 640, 119, // 131 + 2624, 27, 164, 1968, 1312, 656, 191, // 132 + 2688, 127, 504, 2016, 1344, 672, 631, // 133 + 2752, 143, 172, 2064, 1376, 688, 315, // 134 + 2816, 43, 88, 2112, 1408, 704, 131, // 135 + 2880, 29, 300, 720, 1440, 2160, 329, // 136 + 2944, 45, 92, 736, 1472, 2208, 137, // 137 + 3008, 157, 188, 752, 1504, 2256, 345, // 138 + 3072, 47, 96, 2304, 1536, 768, 143, // 139 + 3136, 13, 28, 784, 1568, 2352, 41, // 140 + 3200, 111, 240, 2400, 1600, 800, 351, // 141 + 3264, 443, 204, 2448, 1632, 816, 647, // 142 + 3328, 51, 104, 2496, 1664, 832, 155, // 143 + 3392, 51, 212, 2544, 1696, 848, 263, // 144 + 3456, 451, 192, 2592, 1728, 864, 643, // 145 + 3520, 257, 220, 880, 1760, 2640, 477, // 146 + 3584, 57, 336, 896, 1792, 2688, 393, // 147 + 3648, 313, 228, 912, 1824, 2736, 541, // 148 + 3712, 271, 232, 2784, 1856, 928, 503, // 149 + 3776, 179, 236, 2832, 1888, 944, 415, // 150 + 3840, 331, 120, 2880, 1920, 960, 451, // 151 + 3904, 363, 244, 2928, 1952, 976, 607, // 152 + 3968, 375, 248, 2976, 1984, 992, 623, // 153 + 4032, 127, 168, 3024, 2016, 1008, 295, // 154 + 4096, 31, 64, 3072, 2048, 1024, 95, // 155 + 4160, 33, 130, 1040, 2080, 3120, 163, // 156 + 4224, 43, 264, 3168, 2112, 1056, 307, // 157 + 4288, 33, 134, 1072, 2144, 3216, 167, // 158 + 4352, 477, 408, 1088, 2176, 3264, 885, // 159 + 4416, 35, 138, 3312, 2208, 1104, 173, // 160 + 4480, 233, 280, 1120, 2240, 3360, 513, // 161 + 4544, 357, 142, 1136, 2272, 3408, 499, // 162 + 4608, 337, 480, 1152, 2304, 3456, 817, // 163 + 4672, 37, 146, 1168, 2336, 3504, 183, // 164 + 4736, 71, 444, 3552, 2368, 1184, 515, // 165 + 4800, 71, 120, 3600, 2400, 1200, 191, // 166 + 4864, 37, 152, 1216, 2432, 3648, 189, // 167 + 4928, 39, 462, 3696, 2464, 1232, 501, // 168 + 4992, 127, 234, 3744, 2496, 1248, 361, // 169 + 5056, 39, 158, 3792, 2528, 1264, 197, // 170 + 5120, 39, 80, 3840, 2560, 1280, 119, // 171 + 5184, 31, 96, 3888, 2592, 1296, 127, // 172 + 5248, 113, 902, 1312, 2624, 3936, 1015, // 173 + 5312, 41, 166, 1328, 2656, 3984, 207, // 174 + 5376, 251, 336, 4032, 2688, 1344, 587, // 175 + 5440, 43, 170, 4080, 2720, 1360, 213, // 176 + 5504, 21, 86, 1376, 2752, 4128, 107, // 177 + 5568, 43, 174, 4176, 2784, 1392, 217, // 178 + 5632, 45, 176, 1408, 2816, 4224, 221, // 179 + 5696, 45, 178, 1424, 2848, 4272, 223, // 180 + 5760, 161, 120, 1440, 2880, 4320, 281, // 181 + 5824, 89, 182, 1456, 2912, 4368, 271, // 182 + 5888, 323, 184, 4416, 2944, 1472, 507, // 183 + 5952, 47, 186, 4464, 2976, 1488, 233, // 184 + 6016, 23, 94, 4512, 3008, 1504, 117, // 185 + 6080, 47, 190, 4560, 3040, 1520, 237, // 186 + 6144, 263, 480, 4608, 3072, 1536, 743, // 187 + +/*********FOLLOWING PART IS EXTENTION TO 8192 with step 64 TO TEST TCP3 *************/ + 6208, 3, 194, 4656, 3104, 1552, 197, // 188 + 6272, 3, 14, 4704, 3136, 1568, 17, // 189 + 6336, 5, 66, 1584, 3168, 4752, 71, // 190 + 6400, 3, 10, 4800, 3200, 1600, 13, // 191 + 6464, 3, 202, 4848, 3232, 1616, 205, // 192 + 6528, 5, 102, 1632, 3264, 4896, 107, // 193 + 6592, 3, 206, 4944, 3296, 1648, 209, // 194 + 6656, 3, 26, 4992, 3328, 1664, 29, // 195 + 6720, 11, 210, 5040, 3360, 1680, 221, // 196 + 6784, 3, 106, 5088, 3392, 1696, 109, // 197 + 6848, 3, 214, 5136, 3424, 1712, 217, // 198 + 6912, 5, 6, 1728, 3456, 5184, 11, // 199 + 6976, 3, 218, 5232, 3488, 1744, 221, // 200 + 7040, 3, 110, 5280, 3520, 1760, 113, // 201 + 7104, 5, 222, 1776, 3552, 5328, 227, // 202 + 7168, 3, 14, 5376, 3584, 1792, 17, // 203 + 7232, 3, 226, 5424, 3616, 1808, 229, // 204 + 7296, 5, 114, 1824, 3648, 5472, 119, // 205 + 7360, 3, 230, 5520, 3680, 1840, 233, // 206 + 7424, 3, 58, 5568, 3712, 1856, 61, // 207 + 7488, 5, 78, 1872, 3744, 5616, 83, // 208 + 7552, 3, 118, 5664, 3776, 1888, 121, // 209 + 7616, 3, 238, 5712, 3808, 1904, 241, // 210 + 7680, 7, 30, 5760, 3840, 1920, 37, // 211 + 7744, 3, 22, 5808, 3872, 1936, 25, // 212 + 7808, 3, 122, 5856, 3904, 1952, 125, // 213 + 7872, 5, 246, 1968, 3936, 5904, 251, // 214 + 7936, 3, 62, 5952, 3968, 1984, 65, // 215 + 8000, 3, 10, 6000, 4000, 2000, 13, // 216 + 8064, 5, 42, 2016, 4032, 6048, 47, // 217 + 8128, 3, 254, 6096, 4064, 2032, 257, // 218 + 8192, 3, 2, 6144, 4096, 2048, 5, // 219 +}; + +Int16 TCP3_WimaxInterleaverTable[17][4] ={ + 20, 18, 11, 4, // 0 + 8, 12, 23, 34, // 1 + 4, 14, 27, 40, // 2 + 44, 54, 23, 4, // 3 + 28, 8, 39, 46, // 4 + 44, 12, 79, 90, // 5 + 52, 14, 27, 40, // 6 + 68, 20, 107, 126, // 7 + 44, 12, 23, 34, // 8 + 44, 12, 71, 82, // 9 + 52, 14, 27, 40, // 10 + 52, 14, 87, 100, // 11 + 212, 356, 119, 402, // 12 + 172, 588, 387, 474, // 13 + 172, 44, 447, 1390, // 14 + 124, 1000, 87, 1070, // 15 + 212, 1320, 131, 1362 // 16 +}; + +/*WiMAX frame lengths*/ +Int32 WIMAX_FRAME_LENGTHS[17] = { + 48, /* 0: 6 Bytes */ + 72, /* 1: 9 Bytes */ + 96, /* 2: 12 Bytes */ + 144, /* 3: 18 Bytes */ + 192, /* 4: 24 Bytes */ + 216, /* 5: 27 Bytes */ + 240, /* 6: 30 Bytes */ + 288, /* 7: 36 Bytes */ + 360, /* 8: 45 Bytes */ + 384, /* 9: 48 Bytes */ + 432, /* 10: 54 Bytes */ + 480, /* 11: 60 Bytes */ + 960, /* 12: 120 Bytes */ + 1920, /* 13: 240 Bytes */ + 2880, /* 14: 360 Bytes */ + 3840, /* 15: 480 Bytes */ + 4800 /* 16: 600 Bytes */ +}; + +/* + * Calculates the LTE interleaver table index for given block length K + */ +Int32 LTE_interleaver_index(Int32 K) +{ + Int32 ind = K; + + if ( K <= 512u ) + { + ind = ( K >> 3 ) - 5u; + } + else if ( K <= 1024u ) + { + ind = ( K >> 4 ) + 27u; + } + else if ( K <= 2048u ) + { + ind = ( K >> 5 ) + 59u; + } + else if ( K <= 8192u ) + { + ind = ( K >> 6 ) + 91u; + } + + if ( ind == K ) + { + printf("%s\n"," Error: Unsupported block length "); + exit(0); + } + + return (ind); +} + +/* + * Calculates the WIMAX interleaver table index for given block length K + */ +Int32 WIMAX_interleaver_index(Int32 K) +{ + Int32 ind = K, i; + + for (i = 0; i < 17; ++i) + { + if ( K == WIMAX_FRAME_LENGTHS[i] ) + { + ind = i; + } + } + + if ( ind == K ) + { + printf("%s\n"," Error: Unsupported block length "); + exit(0); + } + + return (ind); +} diff --git a/example/src/tcp3d_main.h b/example/src/tcp3d_main.h new file mode 100644 index 0000000..32d7b09 --- /dev/null +++ b/example/src/tcp3d_main.h @@ -0,0 +1,234 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#ifndef _TCP3D_MAIN_H_ +#define _TCP3D_MAIN_H_ + +/* XDC includes */ +//#include +#include +#include +#include +#include + +/* Driver includes */ +#include +#include + +/* Utility includes */ +#include "tcp3d_codeBlkSeg.h" + +/********************************************************************** + ************************** Test Macros ******************************* + **********************************************************************/ +/** + * Address mapping is done based on the mapping shown below. + * Check on the address done to ensure it be in L2SRAM space. + * + * L2SRAM : org = 0x00800000, len = 0x100000 (local) + * GEM0_L2_MEM : org = 0x10800000, len = 0x100000 (global) + * GEM1_L2_MEM : org = 0x11800000, len = 0x100000 (global) + * GEM2_L2_MEM : org = 0x12800000, len = 0x100000 (global) + * GEM3_L2_MEM : org = 0x13800000, len = 0x100000 (global) + * + * MSMCSRAM : org = 0x0c000000, len = 0x200000 (global) + */ +#define L2GLBMAP(coreID, addr) \ + ( ( ((UInt32)(addr) >= 0x00800000) && ((UInt32)(addr) < 0x00900000) ) ? \ + ( (UInt32)(addr) | (UInt32)((0x10 | (coreID & 0x3)) << 24) ) : \ + (UInt32)(addr) ) + +/********************************************************************** + ************************** Test Compile Flags ************************ + **********************************************************************/ +/** + * Prepare all input config registers outside the Send loop (block size based, etc) + * except for beta states since they are data dependent. + */ +#define TEST_PREPARE_ONLY_BETASTATE 1 + +/** + * Set this flag to use the fixed input configuration parameters preparation + * optimization. This flag is useful only if TEST_PREPARE_ONLY_BETASTATE is + * not used. + */ +#define TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT 0 + +/** + * Check the beta state values with the reference from the file generated + * with the test vectors. + */ +#define TEST_BETA_VALUE_CHECK 0 + +/********************************************************************** + ************************** Test Definitions ************************** + **********************************************************************/ +/* TCP3D modes */ +#define TEST_MODE_SINGLE CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_3GPP //0 (NOT SUPPORTED) +#define TEST_MODE_LTE CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE //1 +#define TEST_MODE_WIMAX CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX //2 +#define TEST_MODE_SPLIT CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_HSUPA //3 + +/* Test True/False flags */ +#define TEST_FALSE 0 +#define TEST_TRUE 1 + +/* Test Interrupt flags */ +#define TEST_INTR_ENABLE 1 +#define TEST_INTR_DISABLE 0 + +/********************************************************************** + ************************** Test Structures *************************** + **********************************************************************/ +/* + * Structure that holds the configuration parameters. Used for storing the + * configuration values read from the file blockXX_cfgreg.dat for a given + * code block. + */ +typedef struct cbConfig +{ + /* Control */ + Int32 mode_sel; //TCP3_MODE + Int32 lte_crc_init_sel; + + /* Input */ + Int32 NumInfoBits; //CFG0 + Int32 SW0_length; //CFG1 + Int32 maxst_en; //CFG2 + Int32 out_flag_en; + Int32 out_order_sel; + Int32 ext_scale_en; + Int32 soft_out_flag_en; + Int32 soft_out_fmt; + Int32 min_itr; + Int32 max_itr; + Int32 snr_val; + Int32 snr_rep; + Int32 stop_sel; + Int32 crc_iter_pass; + Int32 crc_sel; + Int32 maxst_thold; //CFG3 + Int32 maxst_value; + Int32 ext_scale_0; //CFG8 + Int32 ext_scale_1; + Int32 ext_scale_2; + Int32 ext_scale_3; + Int32 ext_scale_4; //CFG9 + Int32 ext_scale_5; + Int32 ext_scale_6; + Int32 ext_scale_7; + Int32 ext_scale_8; //CFG10 + Int32 ext_scale_9; + Int32 ext_scale_10; + Int32 ext_scale_11; + Int32 ext_scale_12; //CFG11 + Int32 ext_scale_13; + Int32 ext_scale_14; + Int32 ext_scale_15; +} cbConfig; + +/* + * Structure for one code block description. + */ +typedef struct cbDataDesc +{ + UInt32 mode; + UInt32 crcInitVal; + Int8 tailBits[12]; + Tcp3d_InCfgParams *inCfgParams; + UInt8 sw0LengthUsed; + + UInt32 blockSize; + UInt32 interFlag; + UInt32 sdFlag; + UInt32 stsFlag; + UInt32 llrOffset; + UInt32 sdOffset; + + UInt32 sizeCFG; + UInt32 sizeINTER; + UInt32 sizeLLR; + UInt32 sizeHD; + UInt32 sizeSD; + UInt32 sizeSTS; + + UInt32 *inCfg; + UInt16 *inInter; + Int8 *inLLR; /* three arrays with offset in llrOffset */ + UInt32 *outHD; + UInt32 *refHD; + Int8 *outSD; /* three arrays with offset in sdOffset */ + Int8 *refSD; /* three arrays with offset in sdOffset */ + UInt32 *outSts; + UInt32 *refSts; +} cbDataDesc; + +/* + * Structure for one test description. + */ +typedef struct cbTestDesc +{ + cbDataDesc **cbData; + Int32 maxNumCB; + Int32 mode; + Int32 doubleBuffer; + Int32 lteCrcSel; +} cbTestDesc; + +/********************************************************************** + ************************** Test Global Tables ************************ + **********************************************************************/ +/* interleaver tables (used in tcp3d_inputCongigPrep.c file) */ +extern Int16 TCP3_LteInterleaverTable[220][7]; +extern Int16 TCP3_WimaxInterleaverTable[17][4]; + +/********************************************************************** + *********************** Test Global Functions ************************ + **********************************************************************/ +/* interleaver table index calculation function */ +Int32 LTE_interleaver_index(Int32 K); +Int32 WIMAX_interleaver_index(Int32 K); + +/* input config prepare function definitions (see tcp3d_inputCongigPrep.c) */ +Void prepareBlockSizeDepICParams(cbDataDesc *cbPtr); +Void prepareBetaStateICParams(cbDataDesc *cbPtr, UInt8 mode); +Void prepareIC(cbDataDesc *cbPtr, UInt32 *tempIC, UInt8 copyFlag); +Void fillICParams(Tcp3d_InCfgParams *inCfgParams, cbConfig *cbCfg); +Void checkBetaValues (UInt32 inCfg[]); + +/* Test vector functions (see tcp3d_testvector.c) */ +Int getTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet, Char *testFolder); +Void freeTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet); + +#endif /* _TCP3D_MAIN_H_ */ diff --git a/example/src/tcp3d_multi_inst.h b/example/src/tcp3d_multi_inst.h new file mode 100644 index 0000000..9935208 --- /dev/null +++ b/example/src/tcp3d_multi_inst.h @@ -0,0 +1,135 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#ifndef _TCP3D_MULTI_INST_H_ +#define _TCP3D_MULTI_INST_H_ + +/** + * Test TCP3D Notification Events + */ +#define TCP3D_A_TEST_EVENT 7 +#define TCP3D_B_TEST_EVENT 23 + +/** + * This gives the channel numbers to which the TCP3 decoder REVTs are mapped. + * ((per spec intc_1.3.4.12.xlsx, TPCC2) + */ +#define TCP3D_A_REVT0_CH_NUMBER 34 +#define TCP3D_A_REVT1_CH_NUMBER 35 +#define TCP3D_B_REVT0_CH_NUMBER 36 +#define TCP3D_B_REVT1_CH_NUMBER 37 + +INLINE UInt32 getHostIntrNum(UInt32 dspCoreID) +{ + /* Host Interrupts for CPINTC0 (per spec intc_1.3.4.12.xls) */ + UInt32 hostIntr[] = {13u, 29u, 45u, 61u}; + + return hostIntr[dspCoreID]; +} + +INLINE UInt32 getNotifyEventNum(UInt8 instNum) +{ + UInt32 testEvt; + + if ( instNum == CSL_TCP3D_0 ) + testEvt = TCP3D_A_TEST_EVENT; // First instance + else + testEvt = TCP3D_B_TEST_EVENT; // Second instance + + return testEvt; +} + +INLINE UInt32 getRevt0ChannelNum(UInt8 instNum) +{ + UInt32 chNum; + + if ( instNum == CSL_TCP3D_0 ) + chNum = TCP3D_A_REVT0_CH_NUMBER; // First instance + else + chNum = TCP3D_B_REVT0_CH_NUMBER; // Second instance + + return chNum; +} + +INLINE UInt32 getRevt1ChannelNum(UInt8 instNum) +{ + UInt32 chNum; + + if ( instNum == CSL_TCP3D_0 ) + chNum = TCP3D_A_REVT1_CH_NUMBER; // First instance + else + chNum = TCP3D_B_REVT1_CH_NUMBER; // Second instance + + return chNum; +} + +INLINE UInt8 getTcp3dInstNum(UInt32 dspCoreID) +{ + UInt8 instNum; + + if ( dspCoreID == 0 ) + instNum = CSL_TCP3D_0; // First instance + else + instNum = CSL_TCP3D_1; // Second instance + + return instNum; +} + +INLINE UInt32 getTcp3dCfgRegsBase(UInt8 instNum) +{ + UInt32 regBase; + + if ( instNum == CSL_TCP3D_0 ) + regBase = CSL_TCP3D_0_CFG_REGS; // First instance + else + regBase = CSL_TCP3D_1_CFG_REGS; // Second instance + + return regBase; +} + +INLINE UInt32 getTcp3dDataRegsBase(UInt8 instNum) +{ + UInt32 regBase; + + if ( instNum == CSL_TCP3D_0 ) + regBase = CSL_TCP3D_0_DATA_REGS; // First instance + else + regBase = CSL_TCP3D_1_DATA_REGS; // Second instance + + return regBase; +} + +#endif /* _TCP3D_MULTI_INST_H_ */ + diff --git a/example/src/tcp3d_single_inst.h b/example/src/tcp3d_single_inst.h new file mode 100644 index 0000000..c7ac8e3 --- /dev/null +++ b/example/src/tcp3d_single_inst.h @@ -0,0 +1,90 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#ifndef _TCP3D_SINGLE_INST_H_ +#define _TCP3D_SINGLE_INST_H_ + +/** + * Test TCP3D Notification Events + */ +#define TCP3D_A_TEST_EVENT 23 + +/** + * This gives the channel numbers to which the TCP3 decoder REVTs are mapped. + * (as per spec nysh_INTERNAL_1_0_7.pdf) + */ +#define TCP3D_A_REVT0_CH_NUMBER 0 +#define TCP3D_A_REVT1_CH_NUMBER 1 + +INLINE UInt32 getHostIntrNum(UInt32 dspCoreID) +{ + /* Host Interrupts for CPINTC0 (per spec - 0.0.1) */ + UInt32 hostIntr[] = {6u, 26u, 46u, 66u}; + + return hostIntr[dspCoreID]; +} + +INLINE UInt32 getNotifyEventNum(UInt8 instNum) +{ + return TCP3D_A_TEST_EVENT; +} + +INLINE UInt32 getRevt0ChannelNum(UInt8 instNum) +{ + return TCP3D_A_REVT0_CH_NUMBER; +} + +INLINE UInt32 getRevt1ChannelNum(UInt8 instNum) +{ + return TCP3D_A_REVT1_CH_NUMBER; +} + +INLINE UInt8 getTcp3dInstNum(UInt32 dspCoreID) +{ + return CSL_TCP3D_A; +} + +INLINE UInt32 getTcp3dCfgRegsBase(UInt8 instNum) +{ + return CSL_TCP3D_A_CFG_REGS; +} + +INLINE UInt32 getTcp3dDataRegsBase(UInt8 instNum) +{ + return CSL_TCP3D_A_DATA_REGS; +} + +#endif /* _TCP3D_SINGLE_INST_H_ */ + diff --git a/example/src/tcp3d_testset_functions.c b/example/src/tcp3d_testset_functions.c new file mode 100644 index 0000000..9194749 --- /dev/null +++ b/example/src/tcp3d_testset_functions.c @@ -0,0 +1,681 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include + +#include "tcp3d_main.h" + +#define READ_BINARY_TEST_VECTORS 1 /* Read .bin test vector files */ + +UInt32 morePrints = 0; +extern Char *strMode[4]; +extern Char testvectFolderBase[]; + +/******************************************************************************* + ******************************************************************************/ +/** + * @brief Bit reverse in 32-bit word + */ +UInt32 bitr(UInt32 src) +{ + UInt32 a,c; + UInt32 i; + UInt32 sa; + + a = src; + c = 0; + for (i = 0,sa=31; i < 16; i++,sa-=2) { + c |= (a & (0x1 << i)) << sa; + } + for (i = 16,sa=1; i < 32; i++,sa+=2) { + c |= (a & (0x1 << i)) >> (sa); + } + return c; +} + +/******************************************************************************* + ******************************************************************************/ +/** + * @brief Swap bytes in 32-bit word + */ +UInt32 swapBytes(UInt32 src) +{ + UInt32 a,c; + + a = src; + c = (a & 0x000000ff) << 24; + c |= (a & 0x0000ff00) << 8; + c |= (a & 0x00ff0000) >> 8; + c |= (a & 0xff000000) >> 24; + return c; +} + +/******************************************************************************* + ******************************************************************************/ +Int getTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet, Char *testFolder) +{ + cbDataDesc *cbPtr; + cbConfig tempCbConfig; + Int i, cbCnt; + Int32 numBytes; + + Char fileName[300]; + FILE *fid; + Int cbCfgStrSize=(sizeof(cbConfig)>>2); + Int32 *tmp32 = (Int32 *) &tempCbConfig; + /* Note: Temporary pointer used for writing + into the tempCbConfig Structure memory */ + Int32 stmp[3]; +#if !READ_BINARY_TEST_VECTORS + Int8 *syspar; + UInt32 inSize; +#endif + UInt32 tmp; + + /* Get number of blocks */ + strcpy(fileName, testFolder); + strcat(fileName, "\\number_of_blocks.dat"); + if(!(fid = fopen(fileName,"r"))) + { + System_printf("\t!!! Error in Number of blocks file : %s !!!\n", fileName); + System_printf("\n***********************************************************\n"); + System_printf(" It means the test vectors are not available in the folder: \n\t %s \n\n", testFolder); + System_printf(" Do the following: \n"); + System_printf(" 1) Check the variable named \"testvectFolderBase\" in the corresponding main.c file. \n"); + System_printf(" a) It is set to \"%s\" \n", testvectFolderBase); + System_printf(" b) Make sure the \"testvectFolderBase\" variable is set to correct folder for testvectors. \n"); + System_printf(" 2) For test project, make sure to run the batch file before running tests: \n"); + System_printf(" %s \n", "\\tcp3d\\test\\gen_test_vectors\\genTestVect.bat"); + System_printf("***********************************************************\n"); + System_exit(0); + } + cbCnt = 0; + fscanf(fid, "%d", &cbTestSet->maxNumCB); + fclose(fid); + + /* Allocate memory for code blocks */ + numBytes = cbTestSet->maxNumCB * sizeof(cbDataDesc *); + cbTestSet->cbData = (cbDataDesc **) Memory_alloc(dataHeap, numBytes, 64, NULL); + + /* Load code blocks */ + for(cbCnt=0; cbCnt < cbTestSet->maxNumCB; cbCnt++) + { + /* Allocate memory for code block set and update the local pointer */ + cbTestSet->cbData[cbCnt] = (cbDataDesc *) Memory_alloc ( dataHeap, + sizeof(cbDataDesc), + 64, + NULL); + cbPtr = cbTestSet->cbData[cbCnt]; + if ( cbPtr == NULL ) + { + System_printf("\tMemory allocation failed for Code Block Set %d!\n", cbCnt); + } + + /* Open the block parameters file */ + sprintf(fileName, "%s\\block%d_cfgreg.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tConfig file open failed : %s\n", fileName); + System_exit(0); + } + /* Load block parameters */ + for(i=0;iblockSize = tempCbConfig.NumInfoBits; + cbPtr->mode = tempCbConfig.mode_sel; + cbPtr->crcInitVal = tempCbConfig.lte_crc_init_sel; + cbPtr->sw0LengthUsed = tempCbConfig.SW0_length; + + /* Set the code block set value with the first one block config */ + if (cbCnt == 0) + { + cbTestSet->mode = cbPtr->mode; + cbTestSet->lteCrcSel = cbPtr->crcInitVal; + } + + /* Check if the mode is different from the first one in the group */ + /* Force the mode value to be same as first one */ + if ( cbPtr->mode != cbTestSet->mode ) + { + if ( !((cbPtr->mode+cbTestSet->mode) % 3) ) + { + System_printf("\tBlock = %d, Mode changed from %s to %s\n", cbCnt, + strMode[cbPtr->mode], + strMode[cbTestSet->mode]); + cbPtr->mode = cbTestSet->mode; + } + else + { + System_exit(0); + } + } + + /* Check for LTE CRC Init Value Change */ + if ( ( cbPtr->mode == TEST_MODE_LTE ) && + ( cbPtr->crcInitVal != cbTestSet->lteCrcSel ) ) + { + System_printf("\tLTE CRC Initial Value is different\n"); + System_printf("\tSet Value is %d\n", cbTestSet->lteCrcSel); + System_exit(0); + } + + /* Allocate Memory for Input LLR data */ + if ( cbPtr->mode == TEST_MODE_SPLIT ) + { /* 3GPP - Split Mode */ + cbPtr->llrOffset = COMPUTE_KOUT(cbPtr->blockSize); + } + else + { + cbPtr->llrOffset = cbPtr->blockSize; + } + cbPtr->sizeLLR = 3 * cbPtr->llrOffset; /* three streams (sys, par0, par1) */ + cbPtr->inLLR = (Int8 *) Memory_alloc(dataHeap, cbPtr->sizeLLR, 64, NULL); + if(cbPtr->inLLR == NULL) + { + System_printf("\tMemory allocation failed !!! (LLR)\n"); + System_exit(0); + } + + /* Prepare Input LLR streams */ + /* This mode value is set with the value read from cfgreg file */ + if ( cbPtr->mode == TEST_MODE_SPLIT ) /* 3GPP - split mode */ + { +#if READ_BINARY_TEST_VECTORS + /* Fill syspar with data bits */ + sprintf(fileName, "%s\\block%d_llrs.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->inLLR, 1, cbPtr->llrOffset, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset], 1, cbPtr->llrOffset, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset<<1], 1, cbPtr->llrOffset, fid); + fclose(fid); + + /* Fill syspar with tail bits */ + sprintf(fileName, "%s\\block%d_tail_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tTail Bits file read failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < 6; i++) + { + fscanf(fid, "%d\t%d", &stmp[0], &stmp[1]); + cbPtr->tailBits[i] = (Int8) stmp[0]; + cbPtr->tailBits[6+i] = (Int8) stmp[1]; + } + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + /* set loop count for LLR file read */ + inSize = cbPtr->blockSize*3; + + /* Allocate memory for syspar temp Buffer for WCDMA case + syspar = (Int8 *) Memory_alloc(dataHeap, inSize+12, 0, NULL); + if(syspar == NULL) + { + System_printf("\tMemory allocation failed !!! (SysPar)\n"); + System_exit(0); + }*/ + + /* Fill syspar with data bits */ + sprintf(fileName, "%s\\block%d_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + for(i=0;iinLLR[i] = (Int8) stmp[0]; + cbPtr->inLLR[i+cbPtr->llrOffset] = (Int8) stmp[1]; + cbPtr->inLLR[i+cbPtr->llrOffset<<1] = (Int8) stmp[2]; + } + fclose(fid); + + /* Fill syspar with tail bits */ + sprintf(fileName, "%s\\block%d_tail_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tTail Bits file read failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < 6; i++) + { + fscanf(fid, "%d\t%d", &stmp[0], &stmp[1]); + //syspar[inSize+i] = (Int8) stmp[0]; + //syspar[inSize+6+i] = (Int8) stmp[1]; + cbPtr->tailBits[i] = (Int8) stmp[0]; + cbPtr->tailBits[6+i] = (Int8) stmp[1]; + } + fclose(fid); + + /* Prepare the sys, par1, par2 streams + TCP3D_WCDMA_dataPrep ( syspar, + cbPtr->blockSize, + NULL, // No sign change + cbPtr->inLLR, + cbPtr->inLLR+cbPtr->llrOffset, + cbPtr->inLLR+2*cbPtr->llrOffset, + betaMap0, + betaMap1);*/ + + /* Free syspar Memory + Memory_free(dataHeap, syspar, inSize+12);*/ +#endif // READ_BINARY_TEST_VECTORS + } + else if ( cbPtr->mode == TEST_MODE_LTE ) /* LTE mode */ + { + /* Fill syspar with data bits */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->inLLR, 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset], 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset<<1], 1, cbPtr->blockSize, fid); + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + for(i=0;iblockSize;i++) + { + fscanf(fid, "%d\t%d\t%d", &stmp[0], &stmp[1],&stmp[2]); + cbPtr->inLLR[i] = (Int8) stmp[0]; + cbPtr->inLLR[i+cbPtr->llrOffset] = (Int8) stmp[1]; + cbPtr->inLLR[i+2*cbPtr->llrOffset]= (Int8) stmp[2]; + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + + /* Fill syspar with tail bits */ + sprintf(fileName, "%s\\block%d_tail_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tTail Bits file read failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < 6; i++) + { + fscanf(fid, "%d\t%d", &stmp[0], &stmp[1]); + cbPtr->tailBits[i] = (Int8) stmp[0]; + cbPtr->tailBits[6+i] = (Int8) stmp[1]; + } + fclose(fid); + } + else if ( cbPtr->mode == TEST_MODE_WIMAX ) /* WIMAX mode */ + { + /* Fill syspar with data bits */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->inLLR, 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset], 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset<<1], 1, cbPtr->blockSize, fid); + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + for(i=0;iblockSize;i++) + { + fscanf(fid, "%d\t%d\t%d", &stmp[0], &stmp[1],&stmp[2]); + cbPtr->inLLR[i] = (Int8) stmp[0]; + cbPtr->inLLR[i+cbPtr->llrOffset] = (Int8) stmp[1]; + cbPtr->inLLR[i+2*cbPtr->llrOffset]= (Int8) stmp[2]; + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + } + + /* Allocate Memory for Ouput & Reference Hard Decisions */ + cbPtr->sizeHD = COMPUTE_HD_BYTE_SIZE(cbPtr->blockSize); + cbPtr->outHD = (UInt32 *) Memory_calloc(dataHeap, + cbPtr->sizeHD, + 64, + NULL); + if(cbPtr->outHD == NULL) + { + System_printf("\tMemory allocation failed !!! (Out HD)\n"); + System_exit(0); + } + cbPtr->refHD = (UInt32 *) Memory_calloc(dataHeap, + cbPtr->sizeHD, + 64, + NULL); + if(cbPtr->refHD == NULL) + { + System_printf("\tMemory allocation failed !!! (Ref HD)\n"); + System_exit(0); + } + + /* Prepare Reference Hard Decisions */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_hard_dec.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tHard Decision File open failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->refHD, 4, (cbPtr->sizeHD>>2), fid); + + for(i=0;i<(cbPtr->sizeHD>>2);i++) + { +#ifdef _BIG_ENDIAN + tmp = swapBytes(cbPtr->refHD[i]); + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = bitr(tmp); + } + else + { + cbPtr->refHD[i] = tmp; + } +#else + tmp = cbPtr->refHD[i]; + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = tmp; + } + else + { + cbPtr->refHD[i] = bitr(tmp); + } +#endif + } + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_hard_dec.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tHard Decision File open failed : %s\n", fileName); + System_exit(0); + } + for(i=0;i<(cbPtr->sizeHD>>2);i++) + { + fscanf(fid, "%x", &tmp); +#ifdef _BIG_ENDIAN + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = bitr(tmp); + } + else + { + cbPtr->refHD[i] = tmp; + } +#else + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = tmp; + } + else + { + cbPtr->refHD[i] = bitr(tmp); + } +#endif + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + + /* Allocate Memory for Interleaver Table */ + /* Interleaver flag is cleared - no external interleaver table */ + cbPtr->interFlag = 0; + cbPtr->sizeINTER = 0; + cbPtr->inInter = NULL; + + /* Allocate Memory for Ouput & Reference Soft Decisions */ + cbPtr->sdFlag = 0; + cbPtr->sizeSD = 0; + cbPtr->sdOffset = 0; + cbPtr->outSD = NULL; + cbPtr->refSD = NULL; +// tempCbConfig.soft_out_flag_en = 0; + if ( tempCbConfig.soft_out_flag_en ) + { + cbPtr->sdFlag = 1; + + if ( cbPtr->mode == TEST_MODE_SPLIT ) /* SPLIT MODE */ + { + cbPtr->sizeSD = cbPtr->blockSize; + cbPtr->sdOffset = NULL; + } + else + { + cbPtr->sizeSD = 3 * cbPtr->blockSize; + cbPtr->sdOffset = cbPtr->blockSize; + } + cbPtr->outSD = (Int8 *) Memory_calloc(dataHeap, cbPtr->sizeSD, 64, NULL); + if(cbPtr->outSD == NULL) + { + System_printf("\tMemory allocation failed !!! (Out SD)\n"); + System_exit(0); + } + cbPtr->refSD = (Int8 *) Memory_calloc(dataHeap, cbPtr->sizeSD, 64, NULL); + if(cbPtr->refSD == NULL) + { + System_printf("\tMemory allocation failed !!! (Ref SD)\n"); + System_exit(0); + } + + /* Prepare Reference Soft Decisions */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_soft_dec.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tSoft Decision File open failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->refSD, 1, cbPtr->blockSize, fid); + if ( cbPtr->sdOffset ) + { + fread(&cbPtr->refSD[cbPtr->sdOffset], 1, cbPtr->blockSize, fid); + fread(&cbPtr->refSD[cbPtr->sdOffset<<1], 1, cbPtr->blockSize, fid); + } + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_soft_dec.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tSoft Decision File open failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < cbPtr->blockSize; i++) + { + fscanf(fid, "%d\t%d\t%d", &stmp[0], &stmp[1], &stmp[2]); + cbPtr->refSD[i] = (Int8) stmp[0]; + if (cbPtr->sdOffset) + { + cbPtr->refSD[i+cbPtr->sdOffset] = (Int8) stmp[1]; + cbPtr->refSD[i+2*cbPtr->sdOffset] = (Int8) stmp[2]; + } + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + } + + /* Allocate Memory for Ouput & Reference Status Registers */ + cbPtr->stsFlag = 0; + cbPtr->sizeSTS = 0; + cbPtr->outSts = NULL; + cbPtr->refSts = NULL; + if ( tempCbConfig.out_flag_en ) + { + cbPtr->stsFlag = 1; + /* allocate outSts memory */ + cbPtr->sizeSTS = 3 * sizeof(UInt32); + cbPtr->outSts = (UInt32 *) Memory_calloc(dataHeap, cbPtr->sizeSTS, 64, NULL); + if(cbPtr->outSts == NULL) + { + System_printf("\tMemory allocation failed !!! (Out STS)\n"); + System_exit(0); + } + cbPtr->refSts = (UInt32 *) Memory_calloc(dataHeap, cbPtr->sizeSTS, 64, NULL); + if(cbPtr->refSts == NULL) + { + System_printf("\tMemory allocation failed !!! (Ref STS)\n"); + System_exit(0); + } + + /* Prepare Reference Status Registers */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_status.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tStatus File open failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->refSts, sizeof(UInt32), 3, fid); +#ifdef _BIG_ENDIAN + cbPtr->refSts[0] = swapBytes(cbPtr->refSts[0]); + cbPtr->refSts[1] = swapBytes(cbPtr->refSts[1]); + cbPtr->refSts[2] = swapBytes(cbPtr->refSts[2]); +#endif + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_status.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tStatus File open failed : %s\n", fileName); + System_exit(0); + } + for(i=0;i<3;i++) + { + fscanf(fid, "%x", &tmp); + cbPtr->refSts[i] = (UInt32) tmp; + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + } +// else +// tempCbConfig.out_flag_en = 1; + + /* Allocate Memory for Input Config Registers */ + cbPtr->sizeCFG = 15 * sizeof(UInt32); + cbPtr->inCfg = (UInt32 *) Memory_calloc(dataHeap, cbPtr->sizeCFG, 64, NULL); + if(cbPtr->inCfg == NULL) + { + System_printf("\tMemory allocation failed !!! (CFG)\n"); + System_exit(0); + } + + /* Allocate Memory for Tcp3d_InCfgParams structure */ + cbPtr->inCfgParams = (Tcp3d_InCfgParams *) Memory_alloc(dataHeap, + sizeof(Tcp3d_InCfgParams), + 64, + NULL); + if (cbPtr->inCfgParams == NULL) + { + System_printf("Memory allocation failed !!! (inCfgParams)\n"); + System_exit(0); + } + /* Update the input config params structure */ + fillICParams(cbPtr->inCfgParams, &tempCbConfig); + + if ( (morePrints) && ((cbCnt+1) % 5) == 0 ) + System_printf("\tCode block prepared : %d \n", cbCnt+1); + + } /* for(cbCnt=0; cbCnt < cbTestSet->maxNumCB; cbCnt++) */ + + /* Set the double buffer value based on mode value */ + if ( ( cbTestSet->mode == TEST_MODE_SINGLE ) || ( cbTestSet->mode == TEST_MODE_SPLIT ) ) + cbTestSet->doubleBuffer = 0; //CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_DISABLE + else + cbTestSet->doubleBuffer = 1; //CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE + + return (cbCnt); +} + +/******************************************************************************* + ******************************************************************************/ +Void freeTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet) +{ + Int32 i; + + /* Free memory allocated for Code Block sets */ + for(i=0; i< cbTestSet->maxNumCB; i++) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->inCfg, cbTestSet->cbData[i]->sizeCFG); + Memory_free(dataHeap, cbTestSet->cbData[i]->inLLR, cbTestSet->cbData[i]->sizeLLR); + Memory_free(dataHeap, cbTestSet->cbData[i]->outHD, cbTestSet->cbData[i]->sizeHD); + Memory_free(dataHeap, cbTestSet->cbData[i]->refHD, cbTestSet->cbData[i]->sizeHD); + if ( cbTestSet->cbData[i]->sdFlag ) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->outSD, cbTestSet->cbData[i]->sizeSD); + Memory_free(dataHeap, cbTestSet->cbData[i]->refSD, cbTestSet->cbData[i]->sizeSD); + } + if ( cbTestSet->cbData[i]->stsFlag ) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->outSts, cbTestSet->cbData[i]->sizeSTS); + Memory_free(dataHeap, cbTestSet->cbData[i]->refSts, cbTestSet->cbData[i]->sizeSTS); + } + if ( cbTestSet->cbData[i]->interFlag ) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->inInter, cbTestSet->cbData[i]->sizeINTER); + } + Memory_free(dataHeap, cbTestSet->cbData[i]->inCfgParams, sizeof(Tcp3d_InCfgParams)); + Memory_free(dataHeap, cbTestSet->cbData[i], sizeof(cbDataDesc)); + } + Memory_free(dataHeap, cbTestSet->cbData, cbTestSet->maxNumCB * sizeof(cbDataDesc *)); +} + +/* end of file */ diff --git a/example/testvectors/lte/block0_cfgreg.dat b/example/testvectors/lte/block0_cfgreg.dat new file mode 100644 index 0000000..3ea2f89 --- /dev/null +++ b/example/testvectors/lte/block0_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +1024 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/lte/block0_hard_dec.bin b/example/testvectors/lte/block0_hard_dec.bin new file mode 100644 index 0000000..138b68d --- /dev/null +++ b/example/testvectors/lte/block0_hard_dec.bin @@ -0,0 +1,2 @@ +tT¹Ç||Ú Lµ2æµK|ù?7 ?íÏ÷ȱ”Û|ºýV-D7ÐÝ 5м{O°¿C…~4PòÔÿÜU<ªï„ða@wñ4ˆè÷o/ŠbÆUÖU»IK<-t¯Ñ2È0B m'7¢˜ÁU +¢Øە¨Ì÷Qmµ„­nCXÛËu \ No newline at end of file diff --git a/example/testvectors/lte/block0_hard_dec.dat b/example/testvectors/lte/block0_hard_dec.dat new file mode 100644 index 0000000..3b51c82 --- /dev/null +++ b/example/testvectors/lte/block0_hard_dec.dat @@ -0,0 +1,32 @@ +17b95474 +7c8d7cc7 +b54c0dda +b5e63218 +187c134b +0b373ff9 +f7cfed3f +db94b1c8 +56fdba7c +3744022d +350cddd0 +4f7bbcd0 +43bfb01d +50347e85 +dcffd4f2 +efaa3c55 +4061f084 +8834f177 +2f6ff7e8 +c68f628a +bb55d655 +3c1b4b49 +0e742d12 +32d111af +0b4230c8 +a237276d +0a55c198 +dbd81ba2 +f7cca895 +84b56d51 +58436ead +1e75cbdb diff --git a/example/testvectors/lte/block0_llrs.bin b/example/testvectors/lte/block0_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..084beddc660bf7de6f1adc51dc8627c95bbcbe5c GIT binary patch literal 3072 zcmWlb*?QwT4upw?nyv zZ04vY)H#f6RD7A#9hjT=MTLf$WAW>9^aJlcZ()X~DQAGW<-@~6K2C6Z+d*E!ycdIXnWk=ez~Kj=PK1(Xmw#YgAmg#Uz^+JPBebQ>(|}8 zC~Kc%V)HheFT-_RJY^Hy?kLCG^j8kO0l}FYw3J=Lz-w=5=J%{{N%uLDCzeLRwHv-tAaot zqmDDdsC{nVw6T2TvU?e6?Deuv59{%8ypuN&31kG;k?W^woW%V~G)o9@SRP9ptbkkR zrFyc8lw7xSdkY*zKJ~=C>jjNkL*;UxF(^G+v(!;vUhK<8vj5)si4~tFb1{8(!_eY-Qj=uw zYT$9mQHPsh8oSm5)1oW~C3Wr9(^?RXm&m~Uwtlt)=>U4Z-m{r8UNk~pAc)a`3y$HO z?ov6_@0Dd>G3vDJ#~(tnH2omRQCx{|$X96f>qpaQA(rFVN%#n6fgX^p|n-dQMXqVGHaI}*0UNmB1ky$ikaw&Lv# z)IXWxNylRD&bW!As0e4@`15K*oL@#w0kNCIF2FT{J5>!Y&wLm|s@5<~r?iqQ!6f}> zmuW%4@%uX~lS~M{A{zLS^3@#HC@or-V5nV=usY?dUmgZ)f@_qYoET zFzUjx2o~b*mJ+T@*YNAzmW2~+P}`Tmgw^FVogpz`=ufj*znr&;W@-j8*_+9z{x>{Z zJZuYxyKQ8o#k)R}K9AK@oMorYxf`?cfkLweR2!-*iX}CW596_Uf)6n%< zGUBnOYpeRWB4)L+`SdBx4XAs7+R87-^FvdL+2P2eE|b>vg-TRS<}K*Jo4!Vr!~KY) z`8~T;o0dJcup1w?oP%s!<2wDk&Y5b4<<@wN&ja?|HKY-7z_~wkjInZX9TcJ+5W4l6|JjD}L^)o@51; zpJoBo!RxhMM zsEA&u=)m02$4ge%I0;2*jT^e3$G+D0P}Jye)`$Dr9`?q8slTElwEKgnsT2OgANXk4 zOD#5{apKGf@{4}q zrUG?B-B7t%G`PwkY2DNv^(ksT`LOlQ;r=2rD`nxEyNr#4&VRHhnA)+gUl8z^ZaiED z**EXY2$Xk{fA;3oqqycXzds`v{bW?{*JfR{GsJV6?z_{}8O3J#)~a`ZY7=~qs|NVV zV>6v4Ge@niI8R06s`b{jh|A2?;J(gOhpJ?~Mdgb$#rFd9kVE#+R0W*gG|M#V{yv8B zbZ%fY4SAZ6=4m8m&zk~plOOmSMrvAZ-RqFHVXon>P%vENZ=;t_UNszVK0Pm_*^&gi zRUMTQ;_rrnCpOB78kSSA5;b=$#d5!DyMrPT+P0LPn&MG)$0+I)(tOlc#~C@b*m9d+ zIBQaLDu7DSXzhx_fNO(>tIk-i%07!q|0MWj-vE>pl_Sll-Q8{fK3K=0%+@cEc{*P; z8JbJu6b!jO{>r+|8Taz8|hQ z-DRRlQpa|Z+TBEJ%&SM>HcOdv$LUtPEhm<>!CTX<$(o-$HAV94h|{ipcz4IYsw~93tjG>{i=ZAVm`K~hp|^)u=1n7PqI zRsZj@S8Qk*ylecWgqTWN@gDoQ+*=o$spX?L=xv&|1pGX@xc&v@7D8y(D&1agdrfo9 zZ52O#bEYa39MMh8Hf7;d%TyYmjB1c|>b>;z&YBr%pZCln+TcU(@Ub6Fy-uLY!McKh J-LKi>{{f=3t`z_P literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block0_llrs.dat b/example/testvectors/lte/block0_llrs.dat new file mode 100644 index 0000000..13389d0 --- /dev/null +++ b/example/testvectors/lte/block0_llrs.dat @@ -0,0 +1,1024 @@ + -9 -5 -3 + 5 -5 8 + 1 5 9 + 3 13 -12 + 4 2 -3 + 8 9 0 + 6 5 -5 + -6 2 7 + -17 5 -5 + -5 -2 6 + 10 0 -5 + 1 8 -4 + 3 -10 1 + -12 -1 0 + -2 -4 -9 + 0 -4 -9 + 0 4 7 + -18 -6 -8 + -3 5 18 + 7 14 9 + 20 4 -3 + 14 -2 7 + 5 3 6 + 11 -9 -18 + 14 -1 -7 + 4 0 -6 + 1 1 -2 + -3 14 2 + 3 4 -14 + -12 -4 -4 + 0 1 -11 + 0 2 -7 + 1 -5 8 + 5 2 1 + -5 3 -17 + -9 2 -9 + -17 -6 -4 + -6 -10 10 + 18 4 0 + 4 -10 -5 + 9 -2 4 + -3 -10 -2 + 7 -5 -9 + 5 -5 4 + 15 -6 4 + 4 10 9 + 3 -6 6 + 1 6 5 + 6 1 3 + 5 -5 9 + 7 -7 -3 + 3 4 -12 + -3 10 2 + -5 -1 1 + -2 9 6 + -1 -1 -1 + -7 7 -7 + -14 6 -7 + 4 -2 13 + 9 13 -5 + -2 2 -9 + 13 -4 4 + 9 7 -4 + -4 5 -8 + -13 -7 -3 + 11 5 -9 + 1 -12 -7 + -1 8 0 + 3 -2 2 + -6 -10 11 + -1 4 -1 + 0 -2 -12 + 1 -10 -10 + 1 -13 -7 + -4 -7 -4 + 2 4 -3 + -1 12 0 + 5 -6 -7 + -15 3 5 + -9 10 7 + 7 4 5 + -1 -9 2 + 11 3 8 + 19 9 -1 + -13 -12 4 + -4 3 -2 + 2 12 -6 + -14 -1 -2 + 5 4 7 + 4 4 0 + 4 -5 -1 + -3 6 1 + 1 0 0 + 13 6 15 + -3 -3 -2 + -2 2 12 + -5 -4 -2 + 0 -8 11 + -8 0 8 + -2 5 -6 + -1 -1 -2 + -4 -12 1 + 2 -5 -2 + -6 10 2 + 0 4 -3 + 12 -13 7 + -7 -15 0 + 0 -6 -6 + 8 -4 5 + -7 -2 4 + -3 6 3 + -4 7 -4 + 0 -1 -7 + 6 0 11 + -6 2 -14 + 3 -10 12 + -8 6 -4 + 7 1 0 + -8 9 7 + -3 -5 3 + 3 0 -12 + -5 12 10 + 6 5 1 + 1 -1 0 + 0 1 2 + 13 2 -2 + -2 -1 3 + 7 -4 -9 + -1 8 -3 + 3 6 0 + -8 -12 -13 + 3 0 -3 + -4 7 2 + 0 -2 0 + -3 7 -4 + -4 -2 -10 + -1 -16 4 + 4 -9 4 + -15 12 7 + -11 0 4 + 6 0 10 + 3 3 -6 + -17 -1 0 + 1 15 -4 + -14 2 10 + -5 -4 -2 + -3 0 -17 + 13 -6 1 + 8 -5 -5 + -3 -4 -4 + 8 1 -3 + -16 -1 2 + 0 -10 3 + -8 6 -6 + -12 -8 1 + 8 8 -4 + 1 0 11 + -3 -10 -5 + -1 -8 7 + -2 0 7 + 14 5 3 + -13 6 4 + -5 -9 10 + 5 3 -4 + 8 -1 0 + 15 1 -11 + 8 -8 -4 + 4 2 6 + -3 -4 -11 + 5 19 8 + 6 18 -8 + 6 -9 2 + 9 14 8 + 5 4 -11 + -4 1 3 + -6 0 7 + 14 8 13 + 10 8 -4 + -4 7 -5 + -9 -7 -8 + 4 2 -13 + -4 4 -9 + 2 0 -1 + 0 -2 -7 + 5 8 8 + -5 -6 12 + -11 13 -14 + 11 -10 4 + -5 8 -12 + 0 -3 7 + -8 -3 4 + -5 -5 -1 + 1 -6 2 + 18 -1 3 + 3 0 -3 + -2 11 -6 + -3 15 -10 + 1 -4 -2 + -3 6 8 + -6 -6 5 + 2 3 10 + -5 11 -7 + 9 11 3 + 13 -6 2 + -7 1 5 + -3 9 -9 + -4 -1 14 + -5 -9 4 + 3 -8 3 + 12 -1 1 + 5 14 6 + 12 -10 5 + -13 -10 2 + -1 2 -12 + 6 -9 2 + 3 -10 -6 + 10 2 3 + 15 4 -9 + 13 2 -10 + -14 -5 3 + 7 -8 -6 + -1 1 2 + 6 4 -8 + 12 -9 -12 + -7 -1 -2 + -10 11 2 + -16 2 -7 + -1 7 3 + -8 4 3 + -7 -9 -6 + 7 10 6 + 5 -14 12 + 1 6 -1 + -6 0 -5 + -7 -5 -4 + -1 -4 12 + 2 -8 -5 + 8 -4 -11 + -12 -5 -7 + 8 -4 -6 + -2 6 14 + 3 9 1 + 4 -10 5 + 3 8 7 + 13 0 3 + -9 -5 1 + -11 1 -6 + 10 7 10 + 6 -8 -1 + 10 -1 5 + -3 3 3 + 11 1 -3 + 3 -1 -3 + 3 2 -5 + -4 2 2 + 19 11 -4 + 1 6 -7 + -15 -1 -3 + 17 1 -1 + 14 5 -2 + 7 -5 -8 + 6 -5 4 + 9 -2 -2 + -2 -5 1 + -1 -4 3 + 11 -3 9 + -3 2 3 + -4 7 0 + -3 -1 -7 + 2 0 -15 + -6 -1 -5 + 7 5 2 + 5 1 -3 + -9 -12 9 + 0 1 4 + 16 5 -10 + 0 8 -6 + 4 5 9 + -7 6 -6 + -1 1 -9 + -11 -8 -6 + 4 -4 -3 + -3 4 16 + -2 3 2 + 10 2 -3 + -2 -7 -7 + 2 6 -10 + 10 -9 0 + 14 -10 -3 + 2 -3 -1 + -2 6 6 + 12 0 -9 + -14 3 3 + 0 -2 -8 + -5 0 -8 + -15 1 -7 + -9 0 -1 + 8 3 0 + -5 -18 11 + -6 -6 4 + 1 5 -4 + 3 -9 1 + 1 2 8 + -12 4 2 + -9 0 -1 + -6 -9 10 + 1 10 1 + -6 -3 -6 + -10 2 2 + -9 0 -1 + 6 -3 -7 + -6 -5 -3 + 2 2 9 + 8 0 -8 + 4 2 -11 + -1 -10 -7 + 11 5 4 + -6 13 7 + -10 0 -9 + -3 -9 -2 + -9 2 -6 + -14 -10 12 + -3 3 11 + -7 -3 -16 + 1 0 3 + -11 4 1 + -2 -3 17 + -5 -6 5 + 7 9 -14 + -9 12 1 + 9 5 1 + 3 -6 3 + 7 8 -10 + 3 12 3 + 4 6 2 + -2 13 -6 + -6 10 -4 + 3 3 -10 + 8 0 -3 + 0 -2 9 + -9 -6 5 + -8 9 4 + -2 14 -7 + -4 -1 -5 + 0 0 5 + -3 2 -5 + 2 3 18 + -5 -13 12 + 7 15 4 + -7 -1 -3 + -4 -6 6 + -10 -12 -4 + -15 8 -7 + -7 -2 4 + -9 -1 -2 + -8 5 -3 + -1 -3 -1 + -4 5 -2 + 7 -9 3 + 14 -9 0 + 2 -5 -16 + -15 0 6 + 7 0 7 + 4 -1 -7 + 14 -9 -7 + -1 12 5 + -3 2 2 + -5 -2 3 + 11 3 4 + 10 -3 -5 + -6 -7 0 + 6 8 6 + 5 2 -13 + 3 7 15 + 14 5 -1 + -4 1 -9 + 16 -7 -7 + 9 -5 15 + -7 -9 -9 + 0 10 -4 + 4 -6 10 + -1 -7 0 + -8 7 -1 + -10 8 -2 + 1 -5 5 + -11 -1 -1 + 8 -17 -8 + -2 -8 3 + 1 -2 -9 + -7 -11 11 + -11 -2 5 + -2 -10 3 + -11 -4 -12 + -9 6 3 + -5 -5 -1 + -10 -3 -9 + 5 4 -8 + -1 -12 -8 + 6 -4 3 + 1 8 -3 + -6 0 -2 + 7 -2 2 + -4 9 -14 + 4 13 4 + 2 6 -4 + 10 1 8 + -2 1 -3 + 5 -5 -8 + 5 -3 8 + 4 -8 7 + -7 -9 5 + -6 2 1 + -16 2 -2 + 1 12 8 + 9 -1 8 + -7 -3 3 + 15 6 10 + 0 -6 -3 + 4 -1 7 + -2 -7 9 + 2 7 -3 + -8 9 -3 + -3 -1 -7 + 3 9 8 + -9 2 -4 + 6 -9 1 + -8 2 -4 + 0 7 -2 + 1 -4 -4 + 2 0 -12 + -3 -13 3 + -9 -5 -5 + -11 -3 4 + -3 -2 -8 + 8 -6 -2 + -5 6 -5 + 2 -4 5 + 0 1 -5 + -2 -7 -9 + 9 11 -7 + -2 8 -9 + -10 1 2 + 1 -7 3 + -8 -6 -9 + 10 -8 14 + -8 17 12 + 3 6 6 + 1 4 -8 + -4 -3 6 + 11 -13 -9 + 4 3 -11 + -14 -3 10 + 11 -2 9 + 19 -8 0 + -5 0 -10 + 1 11 -2 + 2 1 -7 + 3 12 -4 + -5 -9 10 + 3 -4 -12 + -1 -7 3 + -4 -1 4 + -1 0 0 + 1 -10 -5 + 7 -1 0 + 8 -11 9 + 5 16 5 + 1 2 0 + 1 -8 0 + 8 3 -15 + 6 -4 -5 + 6 3 9 + -2 4 1 + -8 -5 4 + -4 13 -6 + -1 8 -3 + 8 3 -8 + 1 -6 -8 + 2 7 -3 + 3 -6 -3 + 11 1 11 + -6 5 2 + -8 8 -3 + 5 -2 6 + 1 1 -1 + -2 13 -6 + 9 -3 13 + -4 -5 -1 + -13 12 6 + -8 9 -2 + -8 3 5 + -9 0 4 + 13 1 7 + 1 9 0 + 2 -12 1 + -12 -5 -6 + 1 5 -6 + 11 3 11 + 4 -6 -5 + 4 -2 0 + -7 -8 5 + -7 11 0 + -3 9 -17 + 15 -6 -9 + -7 8 -3 + 3 11 10 + 9 0 -6 + -1 7 -8 + -7 8 -2 + 1 10 17 + -2 -9 12 + 1 -9 9 + -9 8 -3 + -4 -2 5 + -4 10 -1 + -7 4 11 + -4 -7 -4 + -12 9 7 + -10 -1 7 + 1 -12 -11 + -4 7 4 + -7 -3 -6 + -5 -11 0 + -3 -12 -2 + 10 -3 0 + 18 -10 -2 + 3 -7 -14 + 10 -9 -13 + 4 1 14 + -2 -1 2 + -13 6 -8 + -2 -1 -6 + -11 -4 -12 + 5 15 -4 + 11 -4 -5 + -8 -13 16 + -4 15 4 + -10 1 1 + -4 11 -10 + 11 11 8 + -7 7 14 + -11 -6 -9 + 5 0 8 + 6 -10 0 + 1 -14 7 + 1 -4 -5 + 8 -13 9 + -5 0 1 + 9 -4 0 + 12 3 3 + 6 -8 2 + 4 12 -1 + 11 5 7 + 3 9 10 + 7 -5 -10 + 0 1 -5 + 1 -1 9 + 9 3 4 + 3 1 -14 + 1 -15 -2 + -2 1 -8 + -4 3 3 + 8 -2 3 + 4 3 14 + 11 -2 -1 + 1 -7 7 + -1 10 7 + -1 -2 7 + -4 -2 1 + -1 2 9 + -7 -12 -2 + 9 6 -2 + -3 -10 4 + 3 -8 0 + 4 15 5 + -5 -2 -3 + -11 -10 2 + -10 -16 -3 + 3 -8 1 + -3 -7 -8 + -8 1 2 + 8 6 -12 + 8 -5 0 + 1 -3 -1 + 12 -11 -15 + 5 0 4 + 4 -3 8 + -4 -2 -11 + -1 -6 10 + -2 5 -6 + 6 -5 -3 + 1 2 -9 + -1 11 2 + 8 -2 -7 + 2 -7 5 + 10 5 -13 + -5 2 1 + 4 -2 4 + -1 -4 -5 + -2 -5 2 + -1 5 -10 + 11 1 -6 + 4 3 -6 + 6 3 1 + -6 -5 10 + 2 -16 -1 + -10 -1 12 + 6 -4 -6 + -5 -6 -2 + 5 -3 0 + -3 11 -6 + 10 6 1 + -14 4 -8 + -2 3 -6 + 1 6 6 + 12 4 -2 + -8 5 -3 + -2 5 0 + -13 -7 0 + -7 -1 -11 + -12 8 10 + 2 2 3 + 11 1 1 + -5 14 13 + 1 0 -10 + 7 6 -6 + 8 1 7 + 0 6 -4 + 4 -4 5 + 4 -1 2 + -3 7 2 + 7 2 10 + -9 -1 -7 + 9 -1 2 + 6 0 -7 + -6 -9 -10 + -6 -5 -8 + 2 5 2 + 4 8 9 + 15 -3 8 + 12 -10 -5 + -11 -11 -12 + 6 7 -1 + 0 -4 1 + 4 -12 8 + 5 -10 4 + 3 14 -8 + -7 -1 6 + 1 -7 -9 + 12 -12 4 + 0 3 -5 + -16 5 0 + -4 -2 4 + -9 2 -10 + -2 4 1 + 0 -2 6 + 6 -6 7 + -11 0 0 + 3 -1 -12 + 0 1 -13 + 19 3 4 + -4 -7 -18 + 4 -4 2 + 4 4 -1 + -2 -1 -6 + 7 -20 1 + 0 3 9 + 12 0 -6 + -1 -5 -3 + 1 2 8 + -5 13 8 + 9 -3 6 + 5 -4 12 + -12 -12 2 + -6 2 -3 + -3 4 -11 + -4 -4 -3 + -7 4 -2 + 4 -14 4 + -10 -3 7 + 2 -7 -7 + -3 10 10 + 8 6 8 + 6 1 1 + -14 -11 0 + -2 -5 3 + 6 5 -6 + -4 2 -13 + -1 -1 -3 + 11 9 13 + 5 -8 1 + 10 10 -4 + -2 -6 -2 + 4 -8 -3 + -4 0 -8 + -4 0 -6 + -5 -7 -5 + 0 4 10 + 2 -3 2 + -6 1 2 + 11 7 -3 + 7 -5 6 + -4 -1 9 + -5 -9 -6 + -12 -3 1 + 19 12 6 + -3 8 2 + 0 5 -2 + -8 -6 -6 + -6 15 5 + 1 -2 4 + -2 -9 2 + -2 -8 9 + 2 5 -3 + -5 14 7 + 4 6 10 + 1 10 -6 + -4 17 -1 + -1 3 -4 + 0 -3 -4 + -12 -9 3 + -5 -5 -4 + 2 4 9 + 9 -5 -4 + 5 -3 -4 + 15 -8 7 + 1 1 6 + -9 -5 -2 + -9 -8 5 + 7 -10 9 + -5 -6 -8 + 5 4 5 + -2 -2 6 + -9 1 1 + -6 4 -8 + 2 0 18 + 7 -5 2 + -4 8 4 + 1 3 -15 + 6 -8 -8 + -8 -2 -3 + 3 2 -3 + 2 -2 0 + 1 -4 1 + -1 -8 9 + -4 2 -1 + -7 0 -5 + 2 2 3 + 8 6 -5 + -3 -4 -13 + -5 3 -12 + -4 -6 -12 + 1 -2 -15 + -4 -2 3 + -3 -9 2 + -1 -3 7 + 0 -3 -5 + -1 -5 -15 + 4 6 4 + 5 -2 3 + -6 8 -9 + 1 -8 7 + -12 7 -1 + 2 3 -2 + 0 4 4 + 3 2 -4 + -21 10 2 + -1 2 10 + -7 6 6 + 2 -17 -5 + -8 15 5 + -1 11 5 + -8 -1 0 + -2 -1 -3 + -4 18 -11 + 4 -4 7 + -10 1 4 + 1 -5 0 + -17 9 -7 + -4 -4 13 + 4 -8 4 + 9 2 -7 + -1 -1 3 + -5 -13 5 + -8 4 6 + 4 -5 -13 + -4 -1 8 + 5 10 -8 + 0 15 2 + -2 5 -7 + 6 13 7 + -4 4 -5 + -6 8 -5 + 2 4 -2 + 1 3 1 + 6 -5 0 + -6 -15 -4 + 9 9 -8 + -4 6 -9 + -4 3 -6 + 3 2 -2 + -10 5 3 + 15 11 9 + -6 15 8 + -6 4 -9 + 5 -3 -8 + 3 0 -9 + -5 -7 9 + 2 -3 -8 + 1 1 9 + -2 25 5 + -4 4 13 + -8 -13 4 + 5 1 7 + -15 -13 -12 + 5 -5 8 + 9 0 1 + 3 4 -1 + 5 -8 -1 + -21 -7 -12 + 14 -8 2 + 4 5 -1 + -16 9 9 + 2 2 7 + -7 0 5 + 2 6 3 + -16 -2 -4 + 0 6 -5 + -9 0 6 + 4 -4 7 + -8 8 -11 + 0 -2 2 + -5 17 3 + -3 3 2 + -5 -17 2 + 0 11 -4 + 4 14 -1 + 1 0 7 + -6 11 1 + 9 9 -10 + -1 7 6 + -16 9 3 + 3 -2 2 + -6 5 10 + -2 2 -7 + -10 -5 -13 + 5 -2 -3 + 14 2 3 + 1 -6 -14 + -14 -9 6 + -5 3 4 + -4 8 4 + 12 3 4 + -2 -1 -6 + 12 -6 3 + -7 10 15 + -4 3 -3 + 6 -4 6 + -3 10 -1 + 8 4 -20 + -3 -9 -1 + 0 -3 5 + 5 -2 -11 + -1 1 9 + -1 -2 -6 + 15 6 2 + 2 5 5 + -10 4 4 + -1 5 1 + 3 5 7 + -9 6 6 + -2 0 -6 + 12 2 4 + 3 -3 16 + -10 -5 7 + -4 5 9 + 2 12 -2 + 0 -9 -3 + -11 3 -7 + -5 -11 9 + -10 6 -1 + -1 5 -2 + -1 9 7 + 1 6 7 + 9 -12 2 + 0 2 -5 + 7 10 -4 + -2 7 -11 + 9 -7 6 + 4 -19 -14 + 1 -12 -12 + 4 -2 -6 + 4 12 -3 + -14 -1 -3 + 5 8 -1 + 7 4 1 + -3 -3 5 + -6 -4 10 + 12 -2 6 + 2 -10 -5 + 3 -3 -5 + 12 11 -6 + 1 1 -3 + 3 -1 0 + -16 -3 -6 + -15 1 -1 + -14 -7 -2 + -3 10 1 + -6 2 7 + 0 4 -3 + -4 -1 12 + -4 -2 -5 + -15 -8 -2 + 3 -9 6 + -4 -2 -5 + 8 -4 16 + -9 4 1 + -1 9 -8 + 1 -1 13 + -2 -2 8 + 2 -6 8 + 2 -5 8 + 9 0 -6 + 0 -7 -11 + 1 11 -1 + 6 2 -8 + 8 -5 -5 + 6 -3 5 + 4 -8 -11 + 1 3 6 + -12 -2 10 + -3 0 -15 + 6 -2 -3 + -11 -13 0 + 4 4 12 + -2 5 -3 + 7 7 10 + -5 6 -1 + -11 6 -8 + 11 2 7 + -7 11 -3 + 4 -15 7 + -2 3 -6 + -4 3 6 + 2 0 0 + -8 -1 -7 + 0 -10 2 + -9 -9 -5 + 9 -2 -3 + 3 4 6 + -9 13 3 + 7 6 3 + -4 -11 13 + -18 0 -2 + 3 5 0 + 2 9 10 + 3 -4 -3 + 5 3 -2 + 3 -12 -1 + -3 20 2 + 7 5 -3 + -4 5 3 + 3 4 -3 + 1 4 -2 + -9 3 -7 + 9 -6 3 + -2 12 -4 + 6 11 1 + -8 -1 4 + 9 17 -3 + 1 1 0 + 12 8 -6 + -2 2 1 + 16 12 -9 + 8 -3 1 + -6 6 4 + -7 -4 -6 + 16 15 -5 + -17 6 -8 + -6 -9 -5 + -1 1 -10 + 0 -2 -14 + 5 11 -9 + 1 10 -4 + -9 7 0 + -2 7 -11 + -4 -8 -2 + 3 -4 -6 + 8 8 -13 + -4 3 -14 + 6 -9 -3 + 5 11 -9 + 7 3 -2 + 3 -2 -2 + -7 20 -5 + 4 11 2 + 0 -6 3 + -3 6 -4 + -1 3 -2 + 10 -3 14 + -3 0 1 + 1 2 -13 + -8 -1 5 + 3 -3 -13 + -6 -16 9 + 7 -9 1 + 3 -14 -1 + 2 -13 3 + 1 -4 1 + -6 -9 13 + 8 -8 -7 + -1 -3 -2 + 4 -4 12 + 9 -2 4 + 9 9 0 + -10 1 4 + -11 -1 4 + 4 2 1 + 7 -7 5 + 6 -6 11 + 3 5 -11 + -6 6 -3 + -7 -7 -5 + -2 5 9 diff --git a/example/testvectors/lte/block0_soft_dec.bin b/example/testvectors/lte/block0_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe73f670c48398c9fcb4a3dcc7e007d3897d201d GIT binary patch literal 3072 zcmW+&*OueB6-15&c(VCZr-@g|b(TDr5OTi$`*s&@Dte== z$xu!qyvtP{+e}NZT9*5(l;%{~*r>HgI%gdR^M3O1UhakKh3b<1I`PkXE)R$4^xd$L z&m#>@7;<7%3nyWS`PjvuMku~!;qB#Nv{81HAAZ!!H~ZhG!TwRwr%2w6GWw#;!{)%t zODv-#fvCh^-N)Ov3)8ikhS(h0HDfLqBL_iEHPm@WsG_zzlyi3e2tUobZ)!tNBq_AF z+pn`rPY92AU`>J*_w~ou(@DS4q1pEm<&Z;#{q@y8=&5k-uLP;oSZ#hUs5 zM)}zLbRh+H2Yas!J8~e3ev5AWwTicBh$y4JdzOw%lG4lH-uPiYujUbwOBXSVU+3eG z9$2a!m^%f$KYm78rR4Frpus;v*OQWE$b39=dpi6>Z8hPFai9*)^U-trTb|9BGyN_^ zhaB}@QW{Uj%NSEV)#FXBulxq2sE7TPFXG!@Z){Jyc;Ef}u7XcoCO;4NT--4WwxaX7 zy#9=%Us8x6zJ>Sj{4oC-k41aG|B8p6ypn2gcDzYJKuWq7{`0=0h7xW;i}U1S8b+@N zZ7ncE>?%F|G;>^@PI+H$^SmwFZ3-zz#VY5Cht~$ADr(r7h`z_kdmojI#!Ink<<*}| zIUTAdq=_W1?+6i@3l`%;(d-|GIAD7}R>tU?g=S3}7)# zeu0xkZLTEZ=uDLa9EW$@Rp&8S`aU2Eesc2dJ>$ac03DS_u6YN z0;$kJ@+XQ00X_($OQ&5X%ynU+cMT4KRYFXl?k^_T0p2Y_(|A&mihU&KQB%P{1a?|- zyR`WtJZZZRFr{dfEnncTt-*#Otqr_5w~^F{Yo!2G&%Lpf4E7R?C@KT`|6#Z79IQsAfW=cdAy?AwL z?HZ#WOJr*0E~!P&Tyu4-cA(t6J@NI+Y5zk%@&~xI&+Dj?NO989xHq-WQ=I3)@X@)F zjt#<;yxF6i} z%mb(@ijc%b4#V|fqnz)zb$(jz+oXip7SK}#%FJ~DR$D5=5^Il76ZnfX(O*Qm+MtvJ zir1|^Ts$K@FA^0nMZHb_a@_>no*>4cjwAbjPh|vAo{jvy?)#+v`q&0wCEXGonJ%(# zUy2CZ)HWO&z>&+8kL^s5^I2qW7*CN%(ps9@r4!+LZzL#!g#fzfO%WKcQw$T(SSTM% zs&!SYDDbIZ`wghj2?iPr@J&ihWlVilp$!q^@d)9zhTYghJFP+x&=i0h%j#zHIT(?K z!5m}lJ}Bqf26PqXXiqUh)Q09HC039$cm{lkH64+as{RR$dV+fb{g1*bz;$IAQm#Xa z@*D%_pc5%LG?u6(Fen^8qvCJZ<$bw+zrL3Op%((%!lY}A0*&CPwFF)n@UEB#uQ_+>G7@7#Jf&g;*~+vqGHUgw!g%1kEEk#H_GV8k-K0e5`h9pEKHZV6u7$6G;53)4lEvd7chk{}TKI&n1*h8AJ z4#tBcB@nEInSJu3d7PJBLRS+ixFou+Tjq9Hhld6N`DljY=JZD{q(LjN12M*(4eqM4 zu-thR1EmSK1P5zXE0jlAf3)3@VS*$~B1717n`Ft7_H==9}m zgW3X(hhv;OY?Ab&QF@GfJ9GtGY7O{-v4CFNdc_1{!BJMB8a6GN0%DZ}UIOt%TM(q{ zcuzDDOfWPsfNUcz_11-KqPq$Mjqx^me;Kb{|5*P1eFq%dJZqS|IlT7c`1|`lJ%7F~ z_wUQw%Pq^8Sr*czvSi)XG0*294k)`k+ZT#P-zsb;!C*3%k)Plg7V_}Cf9$&hCOtm= c3HIG_=p#DKT_BvKjd8I`U8Z^YbdTr%1KZNeF8}}l literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block0_soft_dec.dat b/example/testvectors/lte/block0_soft_dec.dat new file mode 100644 index 0000000..cfe7abb --- /dev/null +++ b/example/testvectors/lte/block0_soft_dec.dat @@ -0,0 +1,1024 @@ + -7 -6 -9 + -1 -1 16 + 3 4 18 + -3 3 -14 + 5 0 6 + 0 4 6 + 3 2 -6 + -4 2 3 + -4 2 -11 + -5 2 10 + 9 3 -8 + -1 1 -8 + 1 -5 -8 + -7 2 8 + 0 0 -12 + -1 -1 -12 + 2 5 -5 + -5 -2 -9 + -6 6 29 + 5 13 14 + 16 0 -4 + 12 -6 13 + -2 6 8 + 8 -7 -15 + 18 -6 -6 + 5 0 -11 + 1 1 -2 + -6 9 2 + 5 -5 -26 + -13 -7 -15 + -6 3 -13 + -3 3 -13 + 4 -4 14 + 6 -4 8 + 6 6 -28 + -17 -12 -20 + -16 -9 -14 + -12 -18 12 + 23 8 3 + 8 -11 3 + -4 -4 3 + -3 -13 3 + 22 -15 -14 + 16 -11 -6 + 17 -2 3 + 11 11 13 + 5 1 4 + -1 4 9 + 2 -2 -4 + -6 -6 7 + 13 -2 -1 + 2 2 -14 + -5 4 0 + -12 -5 0 + -5 9 0 + 6 -4 0 + -3 -3 -8 + -18 5 -14 + 4 -5 14 + 12 15 -2 + 6 7 -14 + 19 -5 1 + 11 7 -7 + -5 5 -2 + -19 -10 -6 + 9 -5 -9 + -6 -18 -5 + 14 13 -5 + 5 3 -4 + -3 -10 14 + 7 -7 -5 + 5 -5 -12 + 9 -12 -14 + -5 -11 -11 + 7 -12 -6 + 5 7 6 + -5 5 6 + -4 -4 -9 + -8 8 -5 + -8 11 6 + -5 9 -5 + -5 -10 5 + 18 5 10 + 29 5 4 + -18 -12 5 + -17 10 -6 + 6 14 -7 + -10 -6 2 + 14 10 7 + -4 4 2 + 9 -4 -2 + -14 -4 -2 + 3 -4 -6 + 4 7 14 + -2 3 -2 + 7 6 16 + -8 -4 -1 + -4 -4 2 + -11 -4 6 + 6 7 -10 + 6 -6 -1 + -9 -14 -1 + -10 -5 -2 + -5 4 2 + -3 -3 -8 + 7 -15 8 + -12 -16 2 + -14 -6 1 + 15 -6 6 + 3 -3 6 + -4 1 2 + -1 7 -3 + -3 -3 -7 + 9 4 9 + 7 5 -14 + -4 -8 8 + -17 10 2 + 22 6 -5 + 7 13 7 + 7 -7 2 + 10 8 -10 + -11 8 8 + 8 5 4 + -5 -5 1 + 10 10 2 + 11 -8 -2 + -7 -8 2 + 9 8 -1 + 9 11 -8 + 6 8 -4 + -6 -15 -20 + 9 -6 4 + -5 10 7 + -5 -4 8 + 9 13 -15 + -7 -8 -15 + 12 -21 8 + 10 -9 4 + -21 17 -4 + -11 9 8 + 5 5 8 + -8 5 -9 + -21 -4 8 + -4 10 -8 + -17 5 11 + -4 4 -1 + 5 6 -18 + 9 -6 -1 + 17 -6 -1 + 3 -8 1 + 9 4 -1 + -4 -4 2 + -5 -7 1 + -9 -4 -1 + -15 -15 -1 + 14 4 2 + 5 -5 12 + -19 -17 -1 + -3 -10 -1 + -11 10 1 + 17 10 7 + -16 -4 7 + -10 -9 9 + 1 1 3 + 3 -3 7 + 14 3 -7 + 26 -6 -6 + 10 -4 -1 + 4 -4 -15 + 13 22 8 + 5 19 -8 + 15 -6 -2 + 13 19 12 + 3 -3 -7 + -8 2 1 + -2 -4 1 + 6 4 13 + 10 3 -12 + 2 2 -8 + -11 -2 -8 + 1 0 -18 + 0 3 -15 + -3 -3 -8 + -4 -4 -13 + 5 -2 10 + 2 -2 11 + -8 12 -12 + 12 -10 9 + -7 5 -10 + -5 5 9 + -12 -9 8 + -13 -10 -8 + 6 -6 -8 + 28 -6 6 + 10 -6 -5 + 6 11 -9 + 8 18 -15 + 5 -5 8 + -15 -5 9 + -5 -9 9 + 6 -6 17 + -9 17 -15 + 11 10 -10 + 16 -9 15 + -16 9 10 + 10 12 -19 + 9 -10 12 + 10 -11 10 + 8 -10 6 + 11 8 -6 + 13 20 12 + 7 -13 12 + -20 -9 10 + -9 -9 -12 + 13 -17 13 + 9 -17 -3 + 17 -9 -1 + 24 13 -9 + 11 11 -8 + -29 9 8 + 19 -13 -10 + 12 13 -10 + 11 17 -2 + 25 -17 -14 + -4 -4 -2 + -6 -4 -2 + -19 6 2 + 6 12 6 + -6 -5 10 + -9 -5 -12 + 10 11 -2 + 13 -19 19 + 7 12 -7 + -7 7 -7 + -9 -6 -2 + -4 4 16 + 9 -11 -9 + 10 5 -8 + -16 -7 -2 + 11 5 -10 + -5 8 7 + -8 11 3 + 5 -10 2 + -4 4 11 + 21 -4 6 + -7 4 2 + -4 4 -6 + 13 10 12 + 7 -8 -9 + 2 -4 4 + -8 4 3 + 2 -2 -2 + 8 -4 3 + -6 -4 -7 + 5 -5 -3 + 22 10 -6 + -10 11 -12 + -20 -11 -7 + 23 -11 4 + 24 10 -4 + 16 -11 -3 + 4 -4 8 + 9 -4 -7 + -3 -3 7 + -2 2 -3 + 10 -2 7 + -2 0 7 + 0 0 -3 + 4 -2 -11 + 15 2 -13 + -7 -5 4 + 4 5 6 + 18 -2 2 + -5 -11 2 + 1 4 4 + 5 5 -12 + 6 5 -4 + 4 2 4 + 4 6 -3 + 2 5 -4 + -12 -6 -4 + 2 -2 -3 + 0 2 18 + -2 -1 4 + 8 1 -5 + -2 -1 -4 + 0 0 -5 + -1 -5 -3 + 5 -2 -1 + -1 -1 2 + 0 0 2 + 0 0 -1 + -3 0 5 + 0 0 -5 + -2 -2 -7 + -13 6 -8 + -10 0 5 + 0 0 5 + -5 -15 14 + -5 -6 8 + -5 5 -7 + -10 -9 7 + -9 9 6 + -12 10 5 + -8 8 -7 + -24 -18 9 + 10 21 9 + -15 -10 -7 + -13 13 9 + -14 -9 7 + 8 -8 1 + -14 -12 -1 + 0 0 10 + 19 0 -8 + 2 6 -12 + -6 -11 -9 + 8 0 -5 + 0 12 0 + -13 -6 -4 + -2 -6 -9 + -18 9 -18 + -23 -14 18 + -11 6 17 + -1 1 -21 + 7 -2 17 + -9 2 18 + 2 -6 26 + 2 -9 18 + 5 9 -21 + -7 -2 -4 + 1 6 -4 + 12 -5 9 + 4 2 -5 + -2 12 8 + 9 6 -8 + 2 13 -8 + -6 4 4 + -2 2 -14 + 5 -3 -8 + 3 -3 14 + -7 -4 9 + -13 6 -3 + -10 16 -7 + -11 4 -7 + 5 5 6 + -4 5 0 + 10 10 13 + -11 -19 2 + 11 19 3 + 15 -13 1 + -13 -13 -3 + -15 -23 -4 + -25 18 -8 + -15 -14 5 + -13 13 -3 + -14 13 4 + 8 -8 3 + -6 8 -3 + 7 -15 3 + 15 -17 -4 + -5 -5 -15 + -11 5 3 + 4 -1 4 + 0 0 -8 + 9 -3 -9 + 3 14 1 + -2 2 0 + 7 4 0 + 13 4 -1 + 8 -4 -1 + -9 -4 -1 + 7 10 4 + 3 4 -9 + 6 7 5 + 9 4 2 + -11 -4 -6 + 12 -4 -2 + 17 -4 14 + 4 -5 -8 + 4 6 -2 + -3 -1 11 + -2 -2 2 + 2 3 -1 + -2 4 0 + 16 -6 10 + -9 3 -9 + 6 -15 -12 + 2 -9 10 + 7 6 -9 + -5 -12 17 + -14 -3 17 + -5 -9 10 + -12 -3 -17 + -9 -3 -9 + -9 -3 -10 + -6 -6 -10 + 8 8 -15 + 4 -13 -17 + -2 -2 10 + 2 6 -10 + 3 3 -9 + 5 3 9 + 3 3 -19 + 1 10 14 + 12 7 -9 + 14 5 11 + -5 -2 -7 + 7 -8 -10 + 0 -2 11 + 4 -7 3 + -9 -11 3 + -10 2 3 + -17 5 -3 + -2 6 15 + 0 0 15 + -11 0 3 + 7 5 7 + -10 -2 3 + 5 2 4 + -7 2 10 + -5 5 -5 + -5 12 2 + -6 -2 -6 + 6 6 9 + -3 -3 -5 + 3 -4 1 + 0 0 -5 + 6 5 -4 + 3 -4 -3 + 0 0 -8 + 2 -15 1 + -10 -4 0 + -9 4 4 + -5 1 -5 + 10 -4 -1 + -12 1 -1 + 1 -4 -1 + 1 -1 1 + -4 -6 -1 + -4 6 1 + -5 5 -12 + -14 4 1 + -4 -6 -1 + -2 -2 -7 + 5 -12 18 + -12 20 21 + 5 6 15 + -5 5 -21 + -8 -3 17 + 10 -13 -18 + -1 -3 -18 + -3 -1 22 + 21 -3 19 + 15 -5 11 + 3 -4 -20 + 2 6 16 + -1 0 -14 + -1 8 0 + 2 -8 13 + -1 -1 -20 + 1 -7 13 + -5 0 7 + 2 2 2 + 1 -11 -6 + 5 0 6 + 3 -7 2 + 9 10 2 + 0 0 -3 + 1 0 -4 + 7 3 -5 + 8 -3 2 + 3 0 7 + -7 1 2 + -7 0 -2 + 0 16 -2 + 2 -1 -5 + 2 3 -7 + -1 -1 -7 + 10 7 2 + 20 -6 -5 + 11 1 13 + -5 5 -2 + 3 9 -5 + -2 -4 4 + 2 4 -1 + -1 6 -1 + 4 -1 9 + -8 -1 2 + -15 9 3 + -1 2 3 + 1 -1 1 + 2 -1 1 + 15 1 2 + 1 8 2 + -1 -6 0 + -14 0 -4 + -1 4 -2 + 3 6 7 + -5 0 0 + 0 -1 0 + -14 -9 2 + 1 16 -2 + -8 10 -17 + 21 -8 -6 + 0 11 -2 + 1 12 6 + 8 0 -5 + 7 0 -6 + -20 5 5 + 5 6 11 + 2 -8 10 + 2 -2 12 + -16 9 -3 + -1 1 3 + 4 14 -3 + -13 8 6 + -7 -7 3 + -6 3 3 + -10 6 6 + 4 -13 -13 + -7 13 1 + -2 2 -4 + -4 -11 -2 + -1 -12 -2 + 13 -3 -1 + 24 -6 -2 + 4 -4 1 + 1 1 -2 + 3 2 17 + -6 2 3 + -13 2 -5 + -4 4 -1 + -14 -11 -3 + 4 11 3 + 11 2 2 + -14 -18 14 + -4 16 1 + -13 -2 3 + -16 15 -11 + -2 16 8 + -9 6 14 + -14 -9 1 + 11 2 1 + -2 -2 1 + 7 -13 1 + 8 -9 -4 + 9 -8 0 + -5 -8 1 + 8 -8 3 + 24 8 0 + 6 -7 2 + -5 11 2 + 10 8 4 + -8 11 4 + -4 -4 -3 + -2 2 -3 + 2 -4 5 + 5 4 -1 + 3 3 -13 + 2 -15 -3 + -6 -2 -4 + -2 -2 0 + 12 -2 1 + -1 2 10 + 6 2 2 + 8 -7 -2 + -6 3 2 + -4 -3 8 + -5 -2 2 + -3 3 4 + -10 -8 -2 + 8 -2 -2 + -8 -5 2 + -5 -2 3 + -2 13 4 + 2 2 -2 + -12 -3 1 + -3 -7 -3 + -3 1 1 + 2 -3 -5 + -8 -3 1 + 3 3 -14 + 0 -1 -6 + 1 0 8 + 5 -5 -11 + 1 -1 -1 + 6 -5 10 + -11 -1 -16 + 2 -2 8 + 0 4 1 + 5 -6 0 + 6 -6 -3 + 1 10 2 + 11 1 -2 + 9 -9 0 + 12 7 -9 + -14 -1 1 + 1 1 -1 + 9 -5 -1 + -5 -7 1 + 8 8 -9 + 23 10 0 + 10 10 -2 + 10 10 0 + -16 -16 4 + 11 -25 -1 + -14 11 6 + -16 -14 -1 + -12 -14 -1 + 26 -11 1 + -12 12 -7 + 25 11 3 + -16 11 2 + -6 -6 2 + -5 5 9 + 6 -5 -8 + -7 -5 -4 + 6 -6 4 + -7 -10 10 + -7 -5 -13 + -12 8 14 + 6 7 -9 + 8 8 13 + -7 16 10 + 13 -5 -16 + 10 8 -11 + 6 5 16 + 4 -4 -13 + -7 -3 7 + -3 -6 -9 + -5 7 11 + 5 3 16 + -27 -3 6 + 13 3 8 + 7 -7 -8 + -16 -15 -10 + -13 -1 -6 + -1 1 6 + 14 12 -1 + 16 12 9 + 2 -10 -3 + -4 -5 -14 + 2 2 -5 + -1 -1 5 + 4 -7 11 + -1 1 12 + 2 8 -15 + -1 2 12 + -3 -1 -16 + 4 -1 9 + 1 1 -11 + -10 2 -6 + 2 2 6 + -12 1 -9 + 0 4 -7 + 3 0 10 + 0 -2 12 + -22 -2 -12 + 6 -1 -18 + -1 -1 -10 + 10 2 9 + -9 -5 -20 + 18 -5 -5 + -3 7 -4 + 6 2 2 + 23 -25 -2 + -7 6 4 + 10 2 -1 + 2 -2 2 + 6 -4 11 + -4 4 12 + 13 -4 2 + 9 -8 10 + -17 -15 10 + -9 4 -10 + 4 -4 -11 + -6 -7 -2 + -12 9 -4 + 16 -18 2 + -6 -7 -2 + 7 -7 -3 + 7 8 8 + -9 9 11 + 7 9 2 + -22 -12 3 + -9 -11 4 + 10 11 -11 + -9 12 -12 + 12 -10 -4 + 15 15 10 + -11 -14 -2 + 18 17 2 + 10 -10 -2 + -16 -10 1 + -8 -7 -2 + -6 9 -6 + -10 -15 -5 + -6 6 13 + 16 -6 -2 + 6 7 -2 + 15 12 -3 + 6 -15 9 + -23 -16 8 + -11 -16 0 + -16 -2 -5 + 25 14 13 + -1 12 1 + -8 7 -5 + 4 -4 1 + -6 14 13 + -3 5 11 + -1 -5 -1 + 0 -9 10 + -1 1 2 + 2 18 12 + 14 13 14 + -8 15 5 + 1 19 5 + -13 1 -6 + -16 -7 -6 + -24 -12 6 + -7 1 -5 + 7 7 12 + -3 -9 -5 + 7 7 5 + 7 -9 5 + 5 7 11 + -7 5 -6 + -12 -16 7 + 16 -18 -4 + 0 -10 -5 + 12 0 7 + -9 -9 3 + -16 9 -1 + -8 -1 -6 + -1 1 16 + 9 -13 -1 + 14 16 5 + 8 7 -2 + 7 -11 -2 + -4 -4 -2 + 12 4 1 + -5 -6 0 + 5 -7 0 + 13 -14 0 + -11 10 0 + -5 3 -6 + -2 -2 0 + 19 3 0 + -12 -3 0 + -9 3 0 + -16 -9 -7 + 8 -9 -8 + -14 -3 0 + -3 -3 5 + -6 3 6 + 1 1 -2 + -3 -1 -5 + 1 10 0 + 1 0 1 + -8 3 0 + 3 -5 0 + -10 3 0 + -2 2 -3 + 2 6 4 + 5 -3 0 + -20 6 1 + -1 -1 5 + -5 -4 4 + -2 -9 1 + -26 8 3 + 7 16 5 + -11 -2 1 + -2 -2 1 + 10 18 -5 + 10 -7 -1 + -11 -7 3 + -6 -9 2 + -22 13 2 + -4 -4 2 + 2 -7 -1 + 9 4 -12 + -8 8 -2 + -5 -15 3 + -7 5 3 + 9 -10 -12 + -13 -6 13 + -4 8 -13 + -6 17 -2 + -6 9 -12 + 13 15 9 + -11 5 -3 + 4 9 -5 + 5 5 2 + -4 8 -1 + 13 -12 -2 + -7 -15 -2 + -6 11 -7 + -3 12 -3 + -11 3 -6 + 8 5 1 + -16 10 1 + 23 23 6 + 7 19 5 + -15 5 -5 + 22 -15 -4 + 5 5 -2 + -18 -12 -1 + 5 5 -3 + 6 -5 1 + 4 30 2 + -3 3 5 + -12 -20 2 + 11 -5 6 + -23 -20 -10 + -5 -9 3 + 16 -9 4 + 6 -6 -3 + 24 -9 2 + -28 -5 -12 + 23 -15 2 + 4 13 -2 + -13 8 9 + -6 -6 7 + -13 6 4 + 6 -6 8 + -21 -7 -2 + -13 14 2 + -9 9 6 + 15 -7 -4 + -21 10 -6 + 8 -10 3 + -8 23 1 + -9 8 -1 + -6 -13 1 + 5 15 -3 + 7 14 3 + -6 -7 3 + -9 15 -2 + 15 15 -8 + 12 12 6 + -17 10 2 + -5 5 -1 + -4 13 9 + -10 -10 -7 + -12 -10 -17 + 15 -4 -6 + 6 -6 3 + 4 -12 -6 + -15 -14 2 + 0 0 1 + -11 3 2 + 20 -4 1 + -4 4 0 + 22 -21 1 + -24 18 7 + -7 9 0 + 13 7 2 + -9 21 2 + 17 17 -14 + -6 -12 2 + -8 -6 -2 + -7 -7 -6 + -8 -7 -1 + -7 -7 -2 + 23 12 -1 + -8 14 6 + -21 11 7 + -8 8 -2 + 20 11 6 + -16 10 -1 + 10 10 -10 + 27 11 -3 + 13 -11 11 + -12 -11 3 + 17 13 3 + 9 10 -7 + -9 -9 -7 + -9 11 -18 + -13 -17 13 + -23 9 -9 + -7 7 -9 + -12 9 16 + 9 14 13 + 14 -17 18 + -9 9 -9 + 8 11 9 + 7 -7 -25 + 8 -8 17 + 12 -23 -26 + -10 -20 -22 + 11 -7 -17 + 13 14 2 + -18 7 -2 + 7 10 2 + 6 6 -2 + 2 -2 15 + -5 -2 15 + 6 3 9 + -3 -5 -9 + 9 -3 -10 + -1 1 -10 + -4 0 10 + 5 0 -12 + -24 0 -9 + -17 3 9 + -13 -2 -9 + 0 11 13 + -2 0 13 + 0 0 -22 + -6 -1 26 + 1 -1 -13 + -2 -5 14 + -8 -12 20 + 9 -9 -19 + 6 -10 22 + -11 11 17 + -11 11 -17 + 5 6 26 + 6 -7 17 + 14 -13 23 + 12 -12 21 + 13 5 -18 + -9 -9 -5 + 9 5 7 + 12 -5 -7 + 9 5 -5 + 11 -8 4 + 11 -12 -5 + -5 7 6 + -12 5 7 + -9 -7 -10 + 6 6 -6 + -13 -8 -4 + 8 -6 17 + -6 6 -5 + 19 16 9 + -24 7 -2 + 10 12 -15 + 15 12 13 + -7 18 -5 + 17 -16 15 + 19 11 -11 + -11 -7 12 + 7 7 6 + -17 15 -12 + 17 -17 5 + -18 -18 -15 + 15 -15 -5 + 15 15 5 + -14 19 -5 + 17 17 11 + -14 -17 21 + -18 -14 3 + 14 14 0 + -8 8 13 + -6 6 -9 + -5 6 -2 + -7 -14 -3 + 8 17 4 + 4 -3 -3 + -3 4 2 + 5 5 -6 + 5 -3 -3 + -6 3 -3 + 5 3 5 + -8 10 -5 + 22 15 5 + -2 -3 7 + 3 12 -7 + 6 -4 5 + 9 4 -11 + -4 4 5 + 8 11 -9 + 12 3 5 + -13 7 11 + 4 -8 -6 + 6 17 -6 + -7 -7 -6 + -9 -3 -11 + -1 -1 -17 + -7 -7 -20 + 14 19 -13 + -9 14 -13 + -9 8 -10 + -9 12 -10 + -7 -10 -9 + 8 7 9 + 7 10 -16 + -7 -7 -19 + 10 -9 -9 + -9 16 -11 + 7 6 -9 + 6 -6 -8 + -15 18 -8 + 9 11 -1 + 8 -8 1 + -9 8 -8 + 8 8 -1 + 28 -10 13 + 4 -4 0 + 8 -4 -11 + -10 -3 10 + 9 -3 -17 + -8 -14 6 + -3 -3 0 + 9 -16 1 + 2 -10 -6 + 2 -7 7 + -2 -11 11 + 6 -7 -7 + -6 -3 -7 + 6 3 17 + 18 3 11 + 13 6 8 + -12 -6 8 + -14 3 16 + 6 6 14 + 8 2 15 + 2 -7 17 + 3 3 -19 + -9 9 -10 + -16 -14 -16 + -5 14 20 diff --git a/example/testvectors/lte/block0_status.bin b/example/testvectors/lte/block0_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..2fe162738520a20eb094701b842e518f13d20fc4 GIT binary patch literal 12 TcmbQt#K7^DnStRFgFXWQ60ri8 literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block0_status.dat b/example/testvectors/lte/block0_status.dat new file mode 100644 index 0000000..c487484 --- /dev/null +++ b/example/testvectors/lte/block0_status.dat @@ -0,0 +1,3 @@ +08000293 +000003f5 +002f00d2 diff --git a/example/testvectors/lte/block0_tail_llrs.dat b/example/testvectors/lte/block0_tail_llrs.dat new file mode 100644 index 0000000..b7cffc8 --- /dev/null +++ b/example/testvectors/lte/block0_tail_llrs.dat @@ -0,0 +1,6 @@ + 4 -2 + -9 6 + -4 1 + 8 9 + 2 -3 + -6 -2 diff --git a/example/testvectors/lte/block1_cfgreg.dat b/example/testvectors/lte/block1_cfgreg.dat new file mode 100644 index 0000000..2b693a5 --- /dev/null +++ b/example/testvectors/lte/block1_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +1056 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/lte/block1_hard_dec.bin b/example/testvectors/lte/block1_hard_dec.bin new file mode 100644 index 0000000..c79a34b --- /dev/null +++ b/example/testvectors/lte/block1_hard_dec.bin @@ -0,0 +1 @@ +nÄøÇ¼Úì{O#yÞ®ÿÓ°H9¹H“xþ-ǁ‡±ëí',˜‰óޗ|„„Yß-ÏþAT°m»r®ë¹ðiöØ#lgž¢ÊÏ>µýhl½rbÌ_º-:@Ü´í ·ê¾ÔQÿÖ)֟¼ŽŒˆi¿9—.jû‹®|îJ¿m— \ No newline at end of file diff --git a/example/testvectors/lte/block1_hard_dec.dat b/example/testvectors/lte/block1_hard_dec.dat new file mode 100644 index 0000000..5de33d1 --- /dev/null +++ b/example/testvectors/lte/block1_hard_dec.dat @@ -0,0 +1,33 @@ +9df8c46e +ecdabcc7 +234f7b12 +ffaede79 +3948b0d3 +789348b9 +c77f2dfe +ebb18781 +982c27ed +97def389 +1684157c +1bdf5984 +41fecf2d +91ee121b +6db054b7 +17ae72bb +69f0b9eb +23d87ff6 +9e67016c +3ecfcaa2 +0efd06b5 +72bd6c68 +5f7fcc62 +3a082dba +b4dc4003 +eab7a0ed +ff51d4be +9fd629d6 +8c8e18bc +39bf6988 +fb6a2e97 +ee7cae8b +976dbf4a diff --git a/example/testvectors/lte/block1_llrs.bin b/example/testvectors/lte/block1_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..7caa00ef500bdcd0095cc2166dfda68d2c929a7f GIT binary patch literal 3168 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 t({_0J^Kd6w#Uq30)2ECe+K9sB^ZWÆ¿ÁsŠ/{Wdຳ›·ƒU՗ÿµ5( º$îϪÈÌwW9æN„H6`ý›E‘Ûç¦r虘“.‚ó†³ §»=7yÅ»ž \ No newline at end of file diff --git a/example/testvectors/lte/block3_hard_dec.dat b/example/testvectors/lte/block3_hard_dec.dat new file mode 100644 index 0000000..4add4df --- /dev/null +++ b/example/testvectors/lte/block3_hard_dec.dat @@ -0,0 +1,35 @@ +1e190e4e +a20374e3 +fd0f89b7 +329573fa +75a980ec +3aa30266 +6aa9bb0d +c458fe7b +7a113d1c +ee54e0da +dd789323 +f341c9ab +46766de3 +fc1e22ef +4959ff69 +ea458998 +c63e8bd2 +c11c07bf +102f8a73 +e064577b +139bb3ba +d55583b7 +35b5ff97 +24ba0c28 +c8aacfee +395777cc +48844ee6 +9bfd6036 +e7db9145 +99e872a6 +822e9398 +860f1ff3 +a70d1fb3 +373d1abb +9ebbc579 diff --git a/example/testvectors/lte/block3_llrs.bin b/example/testvectors/lte/block3_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..d7ca62d1abad2c9a44c340d9728b1eae900d35bf GIT binary patch literal 3360 zcmWlb*J2zwvP9us`D#Oov(o+l&zjj0MK;;pW#P@%eZVV_$c#J@^M#BySNnSyFuaG1 z|8+0Fm`6->a=fQZl%9Xn|D4LBCa;2R)g>9H{jxd>p64RMFES5wMqRo0lmE~)8h?FR zcvDy?e38X8@2XDB;nS8|Qf$kqLHtiP%y0POV}yv=M#_di7sNJuvcQXiorxV%H-8V@Le zv`s%eB>XaG5I{l(iJ#^3uWKDjXpjDqt96I*f^f%Z;c?T>z2ImA23 zDQqNHW#+)ws@!T}`u|jp2z-0b{rb`h1(9U$)t|Mn$NZ2#7+sEnC#(m{I{~dnKf~5@ z#_H6NCb_Olm9H0Dr@{=nEvgSihIN5-gNY!C*RAkvEcJ>DndN;I_ktxc64a)5Rj7)D zs|BLno|g)fCbXw;8phYW6;#5#6~h{nSl0Z|f@OdlZrkN>MyDWLdS&&-zfN9J39&Z^n_sddHpX+a0~b_9Rw($8?2`LhfVKtaFOjl=pEO#;GO z$i^XIQk6l*hSa9vU8H*Ssq>5l{_Q{=ms%ZDmD#;?i1U%I6`XuPJmd|r-@Am=E;CTH zRYs#7T+YqRp6roq*}IeXEe_|Nx7AJ2xWF;I%(r_|lT>b=8Om|NFyIGi`*hwuk8aW} zN?vOO^7DBQ-%=#eV4rE|H|{ai16lk*3Y^LW;0&Tb-^PRe(AJdm&Z*iHvXEMpoYzCe11-km=YN0?T*xwk?Pjg9mB#-vtHS7k>Y#j*4!SX zQsBYeULQ46l+tF^%6UB>M04z=yf5k+j&~pM`1u{JY?%(ZZ4&9k@H8laG#-L5qy+eI zA*eT$MnMN%{eB%m`YRP)?r3Pf1*>}@FD`MeZKn`**yr!|M3y?#YsGrBgBLzAR7Ak;4kV2jnrtbTUXP%YsLW1yEoEXkApPu(>l4x7x zM!=5aw9er!yBh3#C1?n0K>@3HzQk)q;Rn}wnowmg>XDtYWBetZuw0X2ej|Cuk04*z zOrFCK>pvnhfJ|u{7MNf6TK<`CLBb`A(BZmYy$?h}$RC@;~mT=51Nh!wUk z+%)ifJG20eBt%)9O$0 z6}KIN@CE(Vx_JF}+n?ZO9wcuX%DOp*1o5e3o^|RDRuxx57_xR%8Xr1{-xK+MVytR4 zyw>&*VfueB<$)+9_ppZDHF@`zTQc78J=g4?3OBnlzwh{~u+|1b4?6QDOP?D<+sygJ>E&y#xAypUjHd&fo`TTG-f`gIRX`Gs?e3|0FMQuoRQhw^ zyE>&1iFvO3b#slzdmk@jmS#wwZm!Vb?qk*&f0)5_7Whs>sw7YrtUgxrxGr1W!c!~_ zod=>xT3v@8A2Omq@n}#{{#H6Rai~*y^bUV$AF9*ISKq`{xh@CzL%nU1a;H%UuW=?X z^N|B!E~{+^lWgl8zZxO^ZQJU4D>cG6%=RjQt4OY4{0uGcn9eK##sd z)3gcjZH{z!)Y7ibw4Kmu!Ty1OtfD?o^r$qon`Yw|lI=T`$Cj42Q>RoMQ>-(m?GshE zaP2XTj*C;by}isi*Cyk3q_D1^U!4gNb90?j(`;R(#NxAd{j#StS(_gq$XRdntGAj0 zPjNq=Z=j_s(nls*@_!F6rPKZzDbsM<2|%FB>>js9pfC&5+GnTge2?OHpIBGjTu$nw zRhCL}+_&pubX4a)g^Z|ykh<`;uWC4!TF@it477<>n@)%rD)qL?fN?cgx447+M?Pda zrsxoDj1vep@rlJ=SNb5Idc@N~=o8^ieW!(zsI@AY8%@j5HS;nbV0Fa4re=%H5!C-W z#3Wc%Cko+i=em@NK}fz1JAXNGzB8_>!>#Bed+O|#Dk|Pm|CFSpkZQo}gZsa|SAY=c z4I_`dFBPfX$vlG*1YO#cXolFx9KeT6L=6cwF5a$<>%Vd}n#&XS>PU&lMb&0(7CAc% z`x9l@6hDjn-{8NVY6`*Zqphwb(l0=u!54f8vlV7@=%Ege-P@^;>bQOV@yk Ee?KW!{{R30 literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block3_llrs.dat b/example/testvectors/lte/block3_llrs.dat new file mode 100644 index 0000000..2f0f32e --- /dev/null +++ b/example/testvectors/lte/block3_llrs.dat @@ -0,0 +1,1120 @@ + -15 -9 -7 + 21 7 13 + 4 -6 -1 + 18 20 -3 + -8 16 -18 + -2 -1 -14 + 11 -6 7 + -11 -10 -4 + -26 -6 7 + -5 -6 10 + 17 -2 7 + 3 -3 -8 + 1 -16 15 + -19 12 2 + -5 8 1 + -2 8 1 + 3 8 23 + -28 -5 2 + -7 -6 27 + 23 6 14 + 30 8 -7 + 6 10 -4 + -6 2 22 + 2 0 -28 + 6 2 -12 + 8 -14 -11 + 15 -12 -17 + 9 22 0 + 18 8 -22 + -19 7 -9 + -3 15 -18 + -2 5 4 + 4 -5 -2 + 10 -11 -12 + -10 6 -10 + -15 -11 1 + -27 -22 9 + 5 -17 12 + 28 -8 13 + 19 -16 6 + -1 -6 3 + -18 0 -16 + 12 -9 1 + 4 -9 3 + 24 -11 19 + 8 16 15 + 6 -11 6 + -12 23 -6 + 11 14 6 + 21 -9 15 + -3 4 10 + -9 -7 -19 + -7 0 0 + -10 13 -13 + -6 -1 10 + -14 13 -4 + -13 24 -13 + -7 -6 4 + -8 10 4 + 0 21 6 + -17 -10 2 + 20 8 -8 + -1 -4 -8 + 8 -7 -13 + -5 -13 10 + 30 -6 -10 + 4 -3 3 + -15 -2 -13 + 17 11 6 + 5 -17 17 + -15 -8 -4 + 2 10 -20 + 15 0 -16 + -1 -21 4 + -19 4 -20 + 16 9 -17 + -16 4 3 + -6 -11 3 + -24 -10 10 + -10 16 12 + 12 4 10 + 2 1 17 + 18 2 24 + 30 0 12 + -21 -4 -8 + -8 17 -1 + 1 15 -10 + -22 -4 11 + 10 -8 -3 + 3 9 -3 + 8 7 13 + 10 6 4 + 3 -2 13 + 21 -5 7 + 9 -2 -5 + -1 5 4 + -9 8 10 + 13 -14 2 + -26 -13 9 + 10 -7 -11 + 12 2 -5 + -3 -19 -13 + 6 -9 -5 + -7 1 -11 + 3 8 -7 + 19 -5 13 + -12 -8 -2 + -2 5 -11 + 14 -8 -6 + 4 -17 -8 + -1 11 7 + -8 -4 -8 + 14 12 4 + 7 2 18 + 5 -10 -22 + -9 -17 3 + 2 -5 -19 + 7 -13 -2 + -25 -1 12 + -2 -9 6 + -9 14 -30 + 6 19 11 + -6 20 3 + -12 -3 13 + 3 -12 -11 + 21 6 10 + -6 1 -9 + -4 -8 -27 + -4 25 -19 + 1 11 3 + 2 -30 -21 + 6 -2 -1 + -8 -4 6 + 13 -17 -13 + 10 24 -8 + 9 -5 -1 + -15 -8 8 + -8 -15 7 + -23 4 23 + -18 2 -8 + -6 -14 16 + 2 6 -11 + -27 12 -13 + 15 7 -9 + -6 -11 17 + -10 -19 11 + -18 3 -26 + 21 -11 -13 + -3 -9 -9 + -2 -7 -3 + -3 -12 -7 + -9 13 1 + 14 0 17 + -14 6 -11 + -3 -14 3 + -2 14 -8 + 15 3 2 + 9 -28 -9 + 1 -14 24 + -16 14 12 + 7 10 -9 + -4 22 4 + 6 -15 1 + -7 6 7 + -2 -3 -14 + 23 4 -2 + 13 2 9 + -8 1 -6 + -18 8 -2 + 9 29 13 + -5 12 -9 + -5 -15 5 + -1 6 14 + 5 -8 -2 + -8 -1 7 + -11 -13 7 + 22 25 21 + 16 -2 -7 + -8 7 -10 + -15 -12 -14 + 3 16 -21 + 7 20 -15 + 0 -2 12 + 14 10 -12 + -6 13 14 + -4 -11 20 + -17 16 -22 + 30 -16 8 + 6 14 -4 + 14 -7 -4 + -14 -1 19 + -21 -9 1 + 4 -6 -11 + 12 -16 6 + 18 -14 -6 + 10 2 5 + -7 24 0 + -1 8 -5 + -6 6 13 + -22 -11 9 + 5 2 16 + 6 1 -7 + -1 29 7 + 20 -10 0 + 3 -1 -7 + 9 16 1 + -8 -15 22 + -5 1 8 + 7 -14 1 + 3 -15 4 + -6 7 -5 + 20 -17 10 + -20 -1 5 + 12 17 -4 + -6 1 16 + 6 0 5 + 0 1 -9 + 24 8 -26 + 5 5 -1 + -6 -21 7 + -4 -13 -11 + 1 -12 -11 + 10 7 2 + 4 1 -4 + 3 12 10 + -1 30 -10 + -26 5 -23 + 1 -3 17 + -9 8 7 + -7 1 -11 + 13 1 10 + -6 -22 19 + 0 -5 -3 + 5 -2 -5 + 4 -9 -4 + 1 -7 4 + 5 2 -9 + 14 8 -17 + -3 -9 -13 + 25 -3 -11 + -6 11 22 + 1 -2 -12 + 4 0 -7 + 7 -2 13 + 21 3 -10 + -15 -9 3 + -2 4 -11 + 0 12 16 + -5 -9 -4 + 0 13 21 + -3 7 18 + 2 15 -2 + -9 -4 9 + 2 5 -9 + 8 -10 17 + 29 18 -3 + -1 -6 -23 + -23 -3 -7 + 27 15 -15 + 22 -6 11 + 12 6 2 + -5 6 9 + -1 -5 -5 + -5 7 -13 + 13 -20 18 + 2 -7 -2 + 10 0 -10 + 8 12 -2 + -1 -4 3 + 5 -14 -24 + -11 12 -9 + -4 10 17 + 10 15 -7 + -15 -3 15 + -14 -12 -8 + 9 9 0 + 2 -2 -6 + -8 -7 15 + -12 23 -10 + -16 15 1 + -30 2 5 + 8 7 10 + -18 7 9 + 11 18 0 + 16 5 10 + 0 -13 -8 + 4 11 0 + 0 1 -13 + 6 -16 -6 + 5 -6 -4 + -16 -5 11 + 20 2 -15 + -7 7 18 + -14 -5 -13 + 6 -2 -14 + -7 -12 -12 + -15 2 12 + 9 6 14 + -9 -27 1 + -11 -11 19 + -1 9 -4 + 18 1 -1 + 16 5 13 + -3 -8 5 + -15 -14 -15 + -11 -15 17 + 4 0 4 + -11 10 -10 + 0 5 4 + -16 14 -3 + 10 10 -13 + -11 -9 -7 + -11 -10 15 + 14 2 2 + 8 -11 -18 + 12 0 -24 + 1 21 9 + 6 20 -4 + 0 13 2 + 9 -15 -5 + 1 6 5 + -7 -17 3 + -6 6 18 + -12 -18 -9 + -12 -3 2 + -2 -8 -1 + -5 -1 10 + -10 -11 -6 + 12 15 -22 + -10 19 -1 + 0 -6 15 + -10 -6 6 + 12 14 -16 + -10 3 7 + -8 -5 1 + -1 20 -10 + -22 16 -3 + -9 7 -1 + 8 14 -18 + 2 11 16 + 0 -22 -7 + 3 10 3 + 0 5 -24 + -9 -4 -10 + 13 -14 -6 + -6 1 -5 + 5 18 11 + 7 -5 19 + 13 23 19 + -24 -15 -6 + -4 -22 11 + 0 -19 -20 + -7 -3 4 + 4 10 -7 + -15 -16 11 + 3 9 -2 + -15 10 12 + 8 -7 -1 + -3 -15 7 + 22 -15 -3 + 16 6 -9 + -24 2 -5 + -4 -2 12 + 19 -4 -12 + 6 -14 -12 + -14 3 9 + -2 1 5 + -5 -5 7 + 18 3 -7 + 0 -18 -10 + -10 4 2 + -6 14 -5 + -7 16 -5 + -10 -3 24 + 22 20 -4 + -8 -12 -15 + 25 -23 4 + 16 -9 23 + -12 -11 -15 + -13 16 8 + 7 5 17 + 1 -12 -13 + 3 -4 1 + -11 9 11 + 4 7 -6 + -2 12 -15 + -3 -10 -8 + -5 2 7 + -12 0 -14 + 4 -2 2 + -2 -17 9 + 11 -17 7 + -1 -19 -3 + -15 -5 2 + 7 -20 -4 + 0 9 1 + -6 8 3 + 12 -3 -14 + 10 8 -9 + -1 13 9 + -22 3 11 + 12 -6 4 + 8 -2 -22 + -9 5 -8 + 16 -5 -8 + 28 16 14 + 11 -12 -7 + -7 7 -14 + 4 -6 -3 + 8 3 12 + 3 1 -7 + -22 -10 -1 + -26 17 11 + -2 4 13 + 16 -14 14 + -13 -6 3 + 23 11 0 + 14 -6 -2 + 8 12 -3 + 10 3 15 + 1 -3 -2 + 2 -1 -18 + 9 -16 4 + 6 0 -3 + -26 1 -9 + 11 -15 -2 + -25 0 7 + -13 -4 0 + -1 8 -8 + 6 2 -4 + -18 -20 6 + -15 -9 -9 + -18 -6 -8 + 9 0 -24 + 25 -11 -5 + 6 10 -10 + 5 -8 -7 + -14 4 -10 + -5 -12 1 + -1 2 -23 + -5 13 1 + -16 -12 -11 + 3 -12 -9 + -10 5 -16 + 17 -26 6 + -8 10 3 + 7 6 6 + 15 19 -9 + 8 10 -5 + 1 -5 2 + -8 17 -18 + -6 -17 16 + 2 11 15 + 29 -14 2 + -5 -13 -16 + -12 2 -16 + 16 -12 -12 + 7 31 8 + 6 -14 0 + 6 -7 -20 + 12 -12 -9 + -3 1 -8 + 13 13 14 + 4 -17 7 + 13 13 2 + -3 -2 -1 + -7 9 10 + 15 0 14 + 15 3 -13 + -3 6 -7 + 11 8 -9 + -6 -10 14 + 12 8 15 + -14 7 8 + -8 20 -10 + 12 -3 10 + -3 18 -14 + -1 -5 3 + 6 24 -6 + -9 6 -18 + 2 -13 2 + -22 10 0 + -14 13 9 + 10 -5 11 + 16 -1 -4 + -5 5 -10 + -1 10 20 + 9 -9 -16 + -5 20 5 + -13 -1 -5 + -14 -9 5 + 1 14 3 + 5 4 -3 + -12 15 14 + 1 -4 -12 + -3 -5 -10 + 4 -7 6 + 2 6 18 + 9 6 -21 + 3 11 2 + -13 -13 9 + -12 17 14 + -1 0 -26 + 7 -22 1 + -12 13 9 + 18 1 0 + -1 -3 5 + 12 -3 2 + -13 -3 -1 + 3 16 26 + -1 2 19 + 4 0 15 + -15 -3 10 + 9 -16 10 + -19 16 -4 + -13 -8 18 + 8 3 -3 + -19 -1 -4 + -1 -16 12 + 3 -20 -2 + 9 -4 7 + 4 -2 5 + -9 -18 14 + 9 -4 -17 + 0 9 2 + 12 -1 11 + -9 3 -22 + 16 -11 -5 + -7 4 22 + 11 1 16 + -5 11 3 + 11 -15 5 + -1 8 -4 + 9 8 -7 + 1 -3 7 + -13 -21 8 + -8 8 19 + 0 -2 15 + 8 2 -12 + 14 18 26 + -12 12 23 + -17 -10 -15 + 21 14 -2 + 11 -1 -2 + 3 -5 12 + 4 8 -9 + 13 -16 -2 + -5 3 3 + 14 8 14 + 19 7 18 + -5 -13 5 + 19 3 1 + 17 -7 12 + 18 -1 12 + 24 7 -17 + -2 -12 -21 + -12 -3 15 + -1 -10 -9 + 2 -1 -5 + -1 -24 -4 + -5 -1 3 + -19 -10 7 + 14 11 -9 + 8 -10 22 + 17 11 -15 + -13 4 -3 + -4 0 13 + -3 0 13 + 8 -5 -12 + -14 -11 15 + -13 -3 11 + -2 22 10 + -18 -1 8 + -10 -14 -14 + 8 24 -6 + 6 11 -2 + -2 -1 -10 + 0 -9 -7 + 2 -14 16 + -7 3 -14 + 3 15 -11 + 14 10 -3 + 14 -10 -3 + -13 -17 -16 + 3 -18 -8 + 9 -2 -8 + -8 10 -2 + 9 10 -18 + -15 5 0 + -17 -7 -5 + -6 6 9 + 4 0 -15 + 13 17 -10 + 26 -1 -12 + 4 -23 5 + 16 21 -21 + -21 17 16 + 8 11 -8 + -4 -9 -10 + -16 -10 5 + -15 -6 0 + 1 -1 -6 + -8 2 5 + -5 1 3 + 6 7 16 + -10 -9 -15 + -16 12 20 + 7 8 -22 + 7 -6 0 + 20 -7 14 + -7 17 5 + 17 22 -13 + -6 4 2 + 11 -10 -10 + 15 -5 -5 + 3 3 11 + 2 -6 -1 + 11 9 -14 + -4 -13 -2 + -12 12 -29 + -3 13 12 + -11 5 19 + 18 4 -12 + -10 6 5 + -13 -2 -16 + -4 -6 -11 + 14 4 24 + -3 11 -4 + -8 8 5 + 8 -15 6 + 9 8 -10 + 8 0 1 + -16 12 -12 + -1 1 -11 + -6 13 4 + -11 -15 0 + -11 -9 2 + 16 -6 0 + 9 -2 15 + 24 -17 -2 + 3 -16 6 + -2 -18 -19 + -5 -4 -4 + 3 -3 -12 + 20 -3 13 + 9 0 8 + -9 18 2 + 3 -15 -5 + 4 -12 -15 + 19 -19 8 + -2 2 -9 + -25 10 14 + 7 -17 -8 + 1 6 -17 + -4 4 15 + 14 11 10 + 22 -22 12 + -2 14 -2 + -9 12 -19 + 13 15 -4 + 29 6 8 + -8 3 -27 + -8 8 16 + 20 -8 -3 + 0 -16 6 + 13 -15 15 + -2 -10 11 + 3 -13 -22 + 2 6 -7 + -13 17 -2 + -10 21 -3 + -1 9 10 + 9 8 19 + -3 -20 -10 + 5 -11 10 + -7 7 -2 + -3 -8 9 + 4 -9 10 + -8 -22 9 + 0 -18 7 + 6 4 3 + -3 11 16 + -2 10 14 + 6 0 -13 + -23 -18 -14 + -5 7 -9 + -5 -7 -10 + 7 -11 -4 + 0 12 10 + 2 16 20 + 20 2 16 + 1 0 -3 + 0 5 -5 + 3 2 -2 + 8 -3 2 + -19 -3 5 + -5 -12 -9 + -2 -8 1 + 6 10 1 + -10 -13 5 + 19 7 -7 + -4 7 -5 + 9 12 26 + -4 -15 -11 + -4 -6 -13 + 29 4 10 + -2 13 17 + -14 -7 -16 + 2 6 5 + -10 23 -6 + -12 -1 8 + 0 -26 5 + -1 -14 -1 + 5 10 9 + 7 22 -3 + 8 -5 17 + 4 17 5 + 8 11 13 + 12 -9 -4 + 14 -18 -8 + -3 1 -10 + -10 -10 -9 + 17 8 15 + 10 7 8 + 20 -19 8 + 23 2 -4 + -13 -13 -5 + 1 6 11 + 1 -14 10 + 8 -16 26 + 7 5 -13 + -7 -8 9 + 11 -17 -5 + 1 -12 3 + -10 9 3 + -11 2 11 + -4 -10 17 + -8 -3 -8 + -12 6 -7 + 10 3 -14 + -14 -16 -7 + 17 17 -6 + 0 10 14 + -12 8 3 + -15 2 -1 + -8 -10 -15 + 4 3 7 + 17 17 6 + -3 -5 -10 + -6 8 -4 + -9 -9 -3 + -7 4 -4 + -1 -1 -7 + -3 -5 2 + -7 1 5 + 12 -18 13 + 3 -7 -9 + 0 -5 -7 + -8 -5 8 + 9 10 2 + -11 26 1 + -1 2 13 + -3 -3 -4 + 1 18 -17 + -2 8 3 + 18 5 8 + -31 17 -11 + -16 -10 12 + -12 11 11 + 17 -27 -10 + 2 24 -6 + 13 18 9 + -13 0 -13 + 11 -3 10 + -3 27 -18 + 8 -3 -4 + 0 -1 19 + 3 7 2 + -11 -1 -12 + -4 -19 31 + -7 2 19 + -1 17 4 + 1 13 7 + 6 -20 -7 + -13 8 10 + 9 6 -20 + -8 12 -3 + 20 16 -14 + -3 8 5 + 11 9 4 + -5 21 -4 + 7 -7 -10 + -23 -3 -10 + -11 7 10 + -2 7 -1 + 11 -10 -2 + -10 -8 7 + 10 15 -9 + 8 10 -10 + -4 2 5 + 1 5 -1 + -16 -7 17 + 23 18 15 + 5 24 13 + -22 -8 -15 + -7 -1 -14 + 17 2 -15 + 7 -7 -1 + 17 -17 -24 + 15 16 -1 + 0 22 -7 + -19 8 4 + 2 -4 -8 + 21 -12 24 + -8 -21 -3 + -6 6 13 + 15 -14 -12 + 6 3 -4 + 9 2 13 + -31 -24 -19 + 22 3 16 + 3 9 -16 + -9 -1 27 + -11 -10 -4 + 4 -14 4 + -11 -5 -9 + -25 -5 8 + 3 -5 6 + 1 -13 11 + 8 -8 12 + -14 9 -3 + -2 0 5 + -10 26 1 + 10 -9 1 + 7 -26 -11 + -14 1 -8 + -8 22 -15 + 15 -3 12 + 5 18 -1 + 15 15 -1 + -15 12 11 + -9 -1 6 + 18 0 1 + 6 9 1 + -5 17 4 + -28 -5 -21 + 10 -16 -7 + 6 5 7 + -12 -6 -6 + -22 -15 23 + -5 18 19 + -9 -3 7 + 4 7 7 + -16 -4 -11 + 3 5 6 + 4 0 7 + -8 -10 10 + -6 -4 11 + -7 17 -4 + 13 -8 -14 + -6 1 12 + -3 10 5 + 9 0 -18 + -3 3 -2 + -15 -5 -6 + 24 -5 5 + 6 9 -7 + -17 8 -8 + 13 9 -12 + 7 20 -3 + -15 10 11 + -5 3 5 + 3 5 8 + -9 -7 26 + -16 -20 -3 + -8 20 16 + -11 3 -17 + 13 -15 9 + -1 7 4 + -9 -2 -1 + 0 10 -3 + -4 -6 -5 + 13 15 -3 + 3 -5 12 + 15 -3 0 + 2 1 6 + 24 1 -8 + 10 -4 -18 + 16 -7 7 + 8 -13 -6 + -12 -4 -31 + 9 -5 -6 + 8 20 -6 + -23 -4 10 + -7 -2 0 + 12 19 4 + -2 -17 4 + -11 -19 1 + 30 11 -6 + -11 -16 -9 + 2 9 6 + 3 2 4 + 3 -12 -18 + -10 -14 -2 + -9 9 -11 + -23 -12 -14 + -22 4 11 + -6 0 4 + 6 -11 12 + -14 3 -7 + -20 -4 19 + -4 -16 -9 + -8 -13 -17 + 18 -15 -5 + -8 -5 -9 + 14 -19 8 + 1 9 4 + -4 15 2 + 3 12 21 + 11 0 14 + 5 -11 -3 + 5 7 -3 + 15 -13 5 + -3 4 -2 + -12 2 1 + 11 17 3 + 13 -5 -9 + 10 10 9 + -8 -14 -2 + 4 2 -5 + -4 -5 0 + -7 3 -24 + -5 10 9 + -2 -4 -3 + -8 20 4 + 11 21 10 + -3 -4 17 + 7 22 -3 + -17 11 2 + 1 5 13 + -8 1 -7 + 8 -24 -4 + -1 7 -22 + -8 -10 22 + 1 -2 13 + -13 -16 -7 + -14 -16 16 + 1 2 -21 + -1 11 -2 + 6 -8 11 + 1 21 18 + 12 10 -9 + 8 -18 21 + -27 -2 -17 + -9 -7 3 + 6 10 16 + 18 -8 10 + 5 18 -16 + -9 -4 -15 + 10 30 1 + -4 9 -18 + -7 -7 7 + -9 8 -6 + 4 -8 11 + 1 7 -12 + -1 -10 -9 + -17 4 -8 + 11 17 -2 + 3 -15 8 + 26 26 -2 + -1 4 -2 + 3 -2 -7 + 11 -11 3 + 10 3 1 + -2 -18 16 + 5 -5 19 + -23 9 5 + 25 23 6 + -10 6 3 + 5 -15 -9 + -15 4 -1 + 14 -17 -6 + 5 17 -15 + -1 17 8 + -27 -4 -2 + 11 12 -29 + -20 -25 -5 + 2 8 -6 + -3 -2 -21 + -8 6 -17 + -5 0 10 + 10 2 -16 + 12 -9 -5 + 19 -1 -5 + -12 14 -9 + -8 13 -11 + 2 6 18 + -2 -5 -8 + 1 6 11 + 16 -6 22 + -1 -13 -1 + 15 -11 -4 + 3 12 5 + 7 9 -21 + 5 -25 0 + 8 -16 4 + -9 -22 1 + -11 -5 -9 + 4 9 3 + 6 1 21 + 14 -14 3 + 1 -2 11 + -7 8 19 + 0 -5 19 + 10 15 14 + -17 3 8 + -19 12 -9 + 19 16 -12 + 12 -13 -7 + 6 -6 2 + -10 -6 -18 + -11 -5 10 + -12 4 7 + 11 9 15 + 8 1 -4 + 13 1 -11 + -6 7 14 + -1 -18 -16 + -12 -12 16 + -1 -8 -4 + 5 3 10 + 6 -14 -3 + 16 -10 2 + 19 3 13 + 6 15 -13 + 18 -6 25 + -1 0 -26 + -4 3 7 + -19 -23 -23 + -7 5 6 + 3 -15 -10 + -13 10 -15 + -4 -5 11 + 6 22 -4 + 5 3 -2 + -9 -12 16 + -13 0 12 + -18 6 10 + 16 0 -3 + 22 -4 -26 + 22 11 -12 + -22 3 -4 + -15 -8 0 + -6 23 -4 + -18 7 -8 + 14 -9 12 + 5 13 2 + -2 1 11 + -18 20 1 + -4 -22 -6 + 7 8 -2 + 7 -2 -17 + -7 2 -25 + -4 1 -15 + -13 -9 3 + 11 9 -20 + -12 4 13 + -4 4 3 + 18 10 4 + 7 -8 20 + -3 3 -11 + -9 16 -6 + 20 -21 10 + -14 -15 13 + 22 11 -8 + 2 10 -8 + 11 25 -10 + 2 12 4 + 7 -7 0 + -11 -1 -7 + 18 8 12 + 27 4 -13 + 7 -6 -10 + -6 -9 6 + 6 19 -1 + -10 10 -11 + -12 -5 -9 + -7 2 -20 + 7 5 4 + -6 -7 16 + -9 -11 22 + 7 6 -12 + 7 -4 5 + 11 -3 4 + 1 -10 4 + -11 -3 8 + 6 15 20 + -14 16 -8 + 21 10 -15 + -2 -19 -2 + -10 -16 -7 + -8 2 14 + 3 4 13 + 12 -20 -6 + 15 -3 13 + 17 11 9 + -8 21 -2 + 15 9 -1 + 9 -7 -14 + 13 -15 -6 + -11 4 19 + 5 -1 0 + -7 -2 10 + 0 -20 8 + 19 -8 -6 + 19 -4 -17 + 1 6 9 + -8 0 1 + -15 5 -1 + 11 -3 9 diff --git a/example/testvectors/lte/block3_soft_dec.bin b/example/testvectors/lte/block3_soft_dec.bin new file mode 100644 index 0000000..bad47e9 --- /dev/null +++ b/example/testvectors/lte/block3_soft_dec.bin @@ -0,0 +1 @@ +yƒqˆˆ†Y‚yq{…{{w|‰‰|ƒ„x|u{[‰z‡Ž…‚zŽŠy…‚‡x†}uw‚{ƒ†|†ƒ„{Š„„}‹~‚ˆww‹{~ƒ~w|t‚}Š~~z~wˆ|y‚p|‚p}~ˆiƒ•‚tvƒx„yi{ƒ„„y‡ƒ{„…}‰‚}}‚Žƒxyt}‰}y„{~„…Š…‰|x…z{‡Š…|mw”hz„~…{{~{ˆ~„ƒ~…yzz|}}{ŒŠ‚{~{ƒ{~szxŒzƒyvy…u~uˆyœ……}~ˆlq”|„…uzv‚z|z|ƒv}ƒ’‡…Œ|t‡†«‚|}†°||}Š‚Œr}‡}z‡x|kxtˆ„x‰‰‰tk|{{qŒŒŒtqqŸŸyp†z~~‚‚~‚qŸaŸ•ka•Œkk•ƒ†{{„lllx”|z†††scŽ††z†‡‡‡‡ŽŽrryy‡‡ww‰|‰n’m“nxx„|ƒƒ……‘‘```{`††ˆxˆzxz†ƒƒƒˆˆttz††‰‰‰}}wƒŠ“mmm‰‰w‰‡yrr‡yyy‡‡‰wusdddhhœm˜i—ƒ‘‡yy|yttttztƒŠŠŠ}ƒ„…””lwylyy}ƒ‚‚ss‚Šm]]££”||||„„}ƒ}ƒw‰ww}ƒ}ƒ‚~ww‰~‡wi—ˆˆxx‡‡|||…{{‚~…‚‹upv”\¤¤a\a„Ÿ~‚~’nn‹’‚z«UFº”k°°m”u“ƒ‹pŸŸaqŸ‚~ˆllh˜œœœhœs‰}}…{{{w‰‰w‰o•¥[[k`¥„„vvg™pp‰‰o‘‘o~~}ƒƒ‚ƒ„„‚‚pz„„|„ˆˆ~‚Šv……wwwwƒ}w‰w{{wx‰px||ˆxxxqq‰uqo‘o‰ooŒ~z†ztttt}}u‹rŽw‹w||““ppp…’n{‡ytt‚x—ii‚~—’’~~‡yxˆˆˆ††‡‡–jšf†zvv‹‹‹‹}ƒƒƒ}ƒ{{{…ˆhh˜˜ŽŠvvwŠƒ}z†ƒ}““mumiYI·Iq—In·II°PŒŒttyy‡ŽrŽŒtrztˆˆ‚~u‹‹ul”‹sszj––j‘v……†z|“mmz†“ƒ†‚‚ss~ˆ†kkksk{„„ŒŒtƒt}}…{{…}ŽrŽrˆˆˆxvvŠŠw˜XX¨¥KµTT \ No newline at end of file diff --git a/example/testvectors/lte/block3_soft_dec.dat b/example/testvectors/lte/block3_soft_dec.dat new file mode 100644 index 0000000..6e2c050 --- /dev/null +++ b/example/testvectors/lte/block3_soft_dec.dat @@ -0,0 +1,1120 @@ + -127 -127 -127 + 127 127 127 + 127 -127 -127 + 127 127 127 + -127 127 -127 + -127 -127 -127 + 127 -127 127 + -127 -127 -127 + -127 -127 127 + 121 -127 127 + 127 -116 127 + 127 -116 -127 + -125 -116 127 + -127 127 127 + -127 127 127 + -127 116 127 + 113 113 127 + -127 113 127 + -127 -97 127 + 127 -97 127 + 127 121 -127 + -120 127 -127 + -127 -112 127 + -112 112 -127 + -120 127 -127 + 127 -127 -127 + 127 -127 -127 + 127 127 -127 + 127 127 -127 + -127 127 -127 + -127 127 -127 + -127 127 127 + 127 127 -124 + 127 -127 -124 + -127 127 118 + -127 -127 118 + -127 -127 103 + 127 -127 -103 + 127 -127 112 + 127 -127 112 + -127 -127 -119 + -127 127 -119 + 127 -127 127 + -122 -127 -127 + 127 -127 127 + 127 127 127 + 127 -127 -127 + -127 127 -127 + 127 127 127 + 127 -127 127 + -127 127 127 + -127 -127 -127 + -127 -122 -127 + -127 122 -127 + -127 -127 127 + -127 127 -127 + -127 127 -127 + 89 -127 127 + -127 126 -127 + -126 126 127 + -127 -126 111 + 127 127 -111 + -127 -127 -111 + 127 -126 -127 + 121 -127 127 + 127 -127 111 + 127 127 127 + -127 -127 -127 + 127 126 127 + 127 -126 127 + -127 -127 -127 + 127 127 -127 + 127 127 -127 + -99 -127 127 + -127 127 -127 + 127 127 -127 + -127 -127 127 + -127 -127 127 + -127 -127 127 + 113 113 127 + 127 -97 127 + 123 97 127 + 127 -97 127 + 127 -107 127 + -127 107 -127 + -127 97 127 + -112 -112 -127 + -127 -107 127 + 127 -116 -127 + -123 107 -127 + 127 107 126 + 127 -107 126 + 127 -125 125 + 127 -122 -125 + 127 123 -125 + 123 123 -126 + -127 127 127 + 127 -127 -125 + -127 -127 -124 + 127 -127 -124 + 127 127 -126 + 123 -127 -127 + 127 -127 -127 + 119 -124 -126 + 127 108 -127 + 127 108 127 + -127 108 -127 + -127 120 -127 + 127 -127 -127 + 127 -108 -127 + 124 124 127 + -127 -127 -127 + 127 127 127 + -119 127 127 + 127 -127 -127 + -127 -127 -127 + 127 -127 -112 + -119 -127 -112 + -127 -127 112 + 124 -127 127 + -127 127 -127 + 127 127 -112 + -127 127 122 + -127 -127 127 + 127 -127 -127 + 127 127 127 + -127 127 -127 + -127 -127 -127 + -127 127 -127 + -125 127 127 + 127 -127 -127 + 127 -127 127 + -127 -127 127 + 127 -127 -127 + 127 127 -127 + 127 -127 127 + -127 127 127 + -127 -127 127 + -127 -127 127 + -127 127 -127 + -127 -127 127 + -124 127 -127 + -127 127 -127 + 127 -127 -127 + 120 -127 127 + -127 -127 127 + -127 127 -127 + 127 -127 -127 + -127 -127 -127 + 124 -127 127 + -127 -127 -124 + 117 127 -124 + 127 122 124 + -127 -122 -127 + 123 -122 127 + -127 127 -124 + 127 127 -120 + 127 -122 -120 + 91 -127 126 + -127 127 127 + -119 127 -127 + 122 127 -126 + 127 -127 -118 + -127 127 118 + -115 -115 -123 + 127 115 127 + 127 99 127 + -127 -99 -123 + -127 127 119 + 127 127 119 + -127 -99 119 + -127 -127 127 + -127 -99 127 + -121 -99 119 + -127 -99 127 + -127 -127 -127 + 127 127 127 + 127 -99 -127 + -114 -114 -127 + -127 -127 -127 + -123 127 -127 + 127 127 -127 + -126 -127 127 + 127 127 -127 + -127 127 127 + 122 -127 127 + -127 -122 -127 + 127 -122 127 + 127 122 127 + 127 -127 -127 + -127 127 127 + -127 -122 127 + 127 127 -125 + -114 -127 125 + 127 -127 -127 + 127 -127 127 + -127 127 119 + -127 127 -119 + -127 -121 119 + -127 -121 123 + 127 -121 123 + 127 -127 119 + -118 127 120 + 127 -121 -119 + 127 -127 -112 + 127 127 112 + -127 -127 127 + 121 127 120 + 127 -127 -127 + -123 -127 127 + -127 -114 -127 + 127 -114 127 + -127 114 127 + 127 127 127 + -127 127 124 + 127 114 124 + -126 -127 -127 + 127 127 -127 + -121 127 127 + 120 -127 127 + -127 -127 -127 + 127 -127 -127 + 127 127 127 + -122 127 127 + 127 127 127 + 125 127 -127 + -127 127 -127 + 127 -127 127 + 117 121 127 + 119 121 -127 + 127 -121 127 + -127 -127 127 + -126 -127 -127 + 127 -121 127 + 127 -127 127 + 127 -127 -127 + 127 119 -127 + 127 119 -127 + 123 -119 -127 + 127 124 -127 + -127 127 127 + -125 -119 -127 + -122 110 -127 + 127 -110 127 + 127 109 -127 + -127 -109 127 + 124 127 -127 + -122 110 127 + -125 120 -127 + -124 120 127 + 123 127 127 + -118 127 127 + -127 -127 127 + -124 127 -127 + 127 -127 127 + 127 127 127 + -127 -127 -127 + -127 -127 -127 + 127 127 -127 + 127 -127 127 + 127 127 127 + -127 127 127 + -127 -127 -127 + -127 127 -127 + 127 -127 127 + -124 -127 -127 + 127 -127 -127 + 127 127 -127 + 125 -127 127 + 127 -127 -127 + -127 127 -127 + -127 127 127 + 127 127 -127 + -127 127 127 + -127 -127 -120 + -117 127 120 + 127 -127 120 + -127 -127 127 + -127 127 -127 + -127 127 120 + -127 127 113 + 127 127 113 + -127 127 -113 + 127 127 -119 + 127 127 117 + 126 -127 113 + 127 127 127 + -126 127 -127 + -120 -127 -127 + 127 -127 -127 + -127 -124 127 + 127 124 -127 + 119 127 127 + -127 -127 -127 + 127 -127 -127 + 119 -127 -127 + -127 127 127 + -117 127 127 + -127 -127 -127 + -127 -127 127 + -127 127 127 + 127 127 -127 + 127 127 127 + 123 -127 127 + -127 -127 -127 + -127 -127 127 + 127 -127 127 + -127 127 -127 + 126 127 127 + -127 127 -127 + 127 127 -127 + -127 -127 -127 + -127 -127 127 + 127 127 127 + 127 -127 -127 + 127 127 -127 + -125 127 127 + 127 127 -127 + 126 127 111 + 127 -127 -111 + 127 127 111 + 119 -127 -119 + -127 127 111 + -127 -127 111 + -127 -127 -115 + 124 -127 -115 + -127 127 -115 + -127 -127 -116 + 127 127 -127 + 116 127 -115 + -126 -127 126 + -127 127 122 + 127 127 -122 + -127 -127 122 + -127 -127 -127 + 125 127 -127 + -127 127 116 + -127 127 116 + -118 127 -127 + 127 127 127 + 126 -127 -127 + 127 -127 -127 + 126 -125 -127 + -127 -125 -127 + 127 -127 -127 + -127 -127 127 + 127 127 -127 + 127 127 127 + 127 127 127 + -127 -127 -127 + 122 -127 127 + 126 -127 -127 + 119 -127 127 + 127 127 -127 + -127 -127 116 + 127 127 116 + -127 127 125 + 127 -127 125 + -127 -127 117 + 127 -127 -117 + 127 127 114 + -127 127 -114 + -127 -123 119 + 127 -123 -117 + -120 -127 -127 + -127 -127 119 + 124 -127 127 + 121 -127 127 + 127 -127 -127 + -126 -127 -127 + -127 127 127 + -127 127 -127 + -127 127 127 + -127 -127 127 + 127 127 -127 + -127 -127 -127 + 127 -127 127 + 127 -127 127 + -127 127 -127 + -127 127 127 + 127 127 127 + 127 -127 -127 + 127 -111 127 + 112 -111 127 + 127 96 -127 + 124 96 -127 + -127 96 124 + -126 123 124 + -127 127 -109 + 127 96 -109 + 112 -112 112 + 127 -127 112 + 125 -127 112 + -127 -127 -123 + 127 -127 -110 + 126 127 110 + -127 127 123 + 127 127 -127 + 127 127 -121 + -127 127 121 + -127 127 127 + 127 -127 127 + 127 -122 -127 + -127 -122 -127 + 127 -120 -127 + 127 120 127 + 127 -120 -127 + -127 122 -127 + -120 -127 -127 + 127 120 127 + 105 127 -127 + -127 -127 -127 + -127 122 116 + -127 -122 116 + 127 -127 127 + -127 -127 -127 + 127 127 -126 + 127 127 120 + 127 127 -105 + 127 127 105 + -125 -127 105 + 127 -127 -126 + 127 -125 126 + 127 -125 -105 + -127 -125 -110 + 127 -127 -110 + -107 -120 126 + -127 -120 126 + -126 116 -121 + 127 116 121 + -127 -127 120 + -127 -127 -120 + -127 -127 -120 + 127 127 -127 + 127 -127 -127 + 127 127 -120 + 127 -127 -127 + -127 127 -127 + -127 -127 127 + -127 -127 -127 + -127 122 127 + -127 -122 -127 + 127 -122 -122 + 116 127 -122 + 127 -119 -121 + 118 -119 -121 + 127 -119 -106 + 127 125 106 + 127 125 -102 + -125 119 102 + -127 127 -122 + 120 -125 122 + -124 127 118 + 127 -127 118 + 121 -127 -127 + -127 -127 -127 + 127 -127 -127 + 127 127 127 + 127 -127 -127 + 105 -118 -127 + 127 -109 -127 + 123 109 -127 + 127 109 127 + 127 -127 127 + 127 127 127 + -127 109 -127 + -125 -119 127 + 127 -119 127 + 127 119 -127 + -127 127 127 + 127 127 -127 + -127 -119 127 + 127 127 127 + -127 127 127 + -127 127 -127 + 127 -127 127 + -127 127 -127 + -124 127 127 + 127 127 -127 + -127 127 -127 + -124 -127 -127 + -127 127 -127 + -127 127 127 + 127 -127 127 + 127 -127 -127 + -127 -127 -127 + -127 127 127 + 127 -127 -127 + 121 127 -127 + -127 -127 -127 + -127 -121 -117 + 127 121 -117 + -121 127 -117 + -127 127 127 + -125 114 -127 + 123 114 -117 + 127 -121 127 + -124 121 127 + 127 121 -127 + -123 127 127 + -127 -127 127 + -127 121 127 + 125 -127 -127 + -119 -127 127 + -126 127 127 + 127 -127 -127 + -127 -121 127 + 127 -121 127 + -127 -127 127 + 127 127 127 + 125 127 127 + 127 127 127 + -127 -127 127 + 127 -127 127 + -127 127 -127 + -127 -127 127 + 127 127 127 + -127 -127 -127 + 125 -127 127 + 127 -127 127 + 127 -127 127 + 127 127 127 + -127 -119 127 + 127 119 -127 + -126 117 127 + -114 115 127 + -125 100 -127 + 120 100 127 + -127 100 127 + 127 104 127 + 121 104 127 + 127 -100 127 + 116 109 127 + 125 -104 -127 + -119 105 125 + -127 -105 -125 + -127 -125 127 + 125 -111 127 + 127 -121 127 + -112 121 127 + -127 121 127 + -127 -127 -127 + 127 124 -127 + 127 121 -127 + 127 116 127 + 127 116 -127 + 127 116 -127 + 121 116 127 + 127 122 127 + 127 116 127 + -127 -125 127 + 127 -118 127 + 127 -118 127 + 127 -118 -127 + 127 125 -127 + -127 -127 -127 + -127 -127 127 + -127 -125 -127 + -124 -127 127 + -127 -127 -127 + -127 -127 127 + -127 -127 127 + 127 127 -127 + 127 -127 127 + 127 127 -127 + -127 127 -127 + -127 -127 127 + -127 127 127 + 127 -127 -127 + -127 -127 127 + -127 127 127 + -127 127 127 + -127 127 127 + -127 -127 -127 + 127 127 -127 + 127 127 127 + 123 127 -127 + 126 127 -127 + -124 -127 127 + -127 127 -127 + 127 127 -127 + 127 127 127 + 127 -127 -125 + -127 -127 -125 + -123 -127 125 + 127 -127 -127 + -127 127 -127 + 127 127 -125 + -127 127 -127 + -127 -127 127 + -127 127 127 + 127 -127 -127 + 127 127 -127 + 127 127 -127 + 127 -127 -127 + 127 127 -127 + -127 127 127 + 127 127 -127 + -118 -127 -127 + -127 -127 127 + -127 -124 127 + -123 -123 127 + -127 -108 127 + -127 -108 127 + 127 108 127 + -127 119 -127 + -127 121 127 + -119 108 -127 + 124 121 127 + 127 -127 127 + -127 127 127 + 127 121 -127 + 120 -127 127 + 127 -127 -127 + 127 -127 -127 + -123 -127 127 + 127 -127 127 + 127 127 -127 + 122 -127 -127 + -127 127 -127 + 123 127 -127 + -127 127 127 + 127 125 -127 + -127 -125 -127 + -127 -126 -127 + -127 -126 -127 + 127 115 127 + -127 115 127 + -121 127 -127 + 127 -126 127 + 127 -127 -127 + -118 -127 -127 + -127 127 -127 + -127 127 -127 + -127 127 123 + -127 -127 123 + -127 -127 123 + 127 -127 -127 + 127 -127 127 + 127 -127 -123 + -123 -127 127 + 124 -127 -127 + -127 -118 -127 + 109 109 -127 + 127 93 127 + 127 93 127 + -127 -93 127 + 119 -127 -127 + 127 -127 -127 + 127 -93 127 + -108 -108 -127 + -127 127 127 + 127 -127 -127 + 127 127 -127 + -127 -127 127 + 127 127 127 + 127 -127 127 + 104 127 -127 + -127 127 -127 + 122 127 127 + 127 124 127 + -127 124 -127 + -124 124 127 + 127 -127 -120 + 126 -127 104 + 127 124 104 + -127 -127 -104 + -123 -127 -127 + 127 127 -127 + -127 127 -104 + -127 127 -114 + -127 127 127 + 127 127 127 + 123 -127 -127 + 127 -127 127 + -127 127 127 + 123 -124 127 + 127 -124 127 + -127 -127 127 + 126 -127 -127 + 127 127 127 + 123 -127 127 + -127 127 127 + -120 -127 -127 + -127 -127 -127 + -127 127 -127 + -127 -127 -127 + 127 -127 127 + 126 127 127 + -124 127 127 + 127 125 127 + -125 -125 127 + 126 125 -118 + -123 127 118 + 127 -127 118 + -127 -125 119 + 121 -127 -127 + -127 -127 -118 + 127 127 -127 + -127 -127 127 + 127 -127 -127 + -127 127 -127 + 127 127 127 + 122 -127 -127 + 122 -127 -127 + 127 -127 127 + 124 127 127 + -127 -127 -127 + 127 127 127 + -127 127 -127 + -127 127 127 + 125 -127 127 + 125 -127 -127 + 127 127 127 + 127 127 -127 + 127 -127 127 + 127 127 127 + 127 -127 127 + 127 -127 127 + 127 -127 -127 + 123 127 -127 + -127 -127 -127 + 127 127 127 + -116 127 127 + 127 -127 127 + 127 127 -127 + -127 -127 -127 + 127 127 127 + 127 -127 127 + -118 -127 127 + 127 127 -127 + -127 -127 127 + 127 -127 -125 + 127 -127 125 + -127 127 122 + -127 127 -122 + -127 -127 127 + -127 -127 -125 + -127 127 127 + 127 127 -127 + -127 -127 -127 + 127 127 -127 + -126 127 127 + -127 127 125 + -127 127 -109 + -127 -127 -109 + 127 127 109 + 127 127 117 + -127 -127 -127 + -127 127 109 + -127 -127 105 + -127 127 89 + -127 119 73 + 123 -119 -73 + -127 119 73 + 127 -127 113 + 127 -127 -105 + 126 119 73 + -127 -127 110 + 127 127 -73 + -127 127 73 + -127 127 73 + 123 -127 -127 + -125 127 -115 + -127 127 -80 + 127 127 80 + -127 127 -116 + -127 -127 -116 + -127 127 116 + 127 -127 -127 + 127 127 -127 + 127 127 116 + -127 127 -127 + 127 -127 127 + 123 127 -127 + 127 127 -127 + 126 -127 127 + 127 127 127 + 115 -127 -127 + 122 -127 127 + -127 127 127 + -127 127 127 + 127 127 127 + 127 -127 -127 + -127 127 127 + 127 127 -127 + -127 127 -127 + 127 127 -127 + -127 -127 121 + 127 127 121 + -127 127 -121 + 120 -127 -127 + -127 -127 -114 + -127 127 114 + -127 125 -114 + 127 -125 -116 + -127 125 116 + -116 127 114 + 127 127 122 + 122 -125 116 + -125 127 127 + -127 -127 127 + 127 127 127 + 127 127 127 + -127 -126 -127 + -127 126 -127 + 127 119 -127 + 127 119 -127 + 127 -119 -127 + 127 126 -127 + 121 -121 -127 + -127 119 -127 + 127 105 -127 + 127 -105 127 + 118 -127 127 + -127 127 127 + 127 -120 -127 + 121 -120 -127 + 127 120 127 + -127 -127 -127 + 127 127 127 + -123 120 -127 + 117 -127 127 + -127 -127 -127 + 127 -127 -127 + -127 -127 -127 + -127 -121 127 + 127 -121 127 + 127 -127 127 + 127 -127 127 + -127 -127 127 + -127 127 127 + -127 127 -120 + 127 -127 -120 + 126 -127 -126 + -127 -127 -127 + -127 127 -127 + 127 -127 126 + 127 127 -127 + 127 127 127 + -127 127 127 + 117 -127 127 + 127 124 -127 + 127 124 -127 + -127 124 127 + -127 127 -127 + 127 -123 -127 + -120 123 127 + -127 123 127 + -127 -126 127 + 121 126 127 + -127 -123 127 + -100 127 127 + -127 -126 -127 + -123 127 117 + 127 -127 -117 + -127 -117 127 + -127 117 127 + -127 127 -117 + 127 -127 117 + -127 127 108 + -127 127 -108 + 127 127 -127 + -127 127 -117 + -127 -127 115 + 127 -127 115 + 127 127 -115 + -127 127 -127 + 127 127 -127 + 127 127 -115 + -127 127 127 + -127 127 127 + -123 127 127 + -127 -127 127 + -127 -127 -127 + -127 127 127 + -127 -127 -127 + 127 -127 122 + 125 127 106 + -127 127 -106 + 126 112 -106 + -120 -112 -127 + 127 118 -127 + 108 -108 106 + 127 92 -111 + 127 -92 118 + 127 -92 -123 + 113 -113 -123 + 127 97 -122 + 127 92 122 + -108 97 -127 + 127 -124 124 + 127 127 -109 + -127 -97 109 + -113 -113 109 + 127 127 122 + 124 -127 -122 + -127 -127 -109 + 127 127 -125 + -127 -127 -122 + -124 127 127 + -123 -127 127 + 127 -127 -127 + -127 -127 -127 + 117 127 -127 + -127 -127 -127 + -127 126 127 + -127 -126 127 + 127 -127 127 + -127 -127 -127 + -127 -127 127 + 122 -127 -127 + 118 -127 -127 + 127 -127 -127 + -127 -127 -126 + 127 -127 -126 + 127 127 115 + -127 127 115 + 127 127 127 + 127 127 126 + 127 -127 -120 + 127 127 -122 + 127 -127 107 + -126 126 107 + -127 -110 107 + 122 110 115 + 124 110 -115 + 127 127 107 + -127 -117 123 + 127 -110 -115 + 122 -126 -124 + -127 127 -127 + -127 127 127 + 124 127 -124 + -127 127 -127 + 127 127 127 + -127 -127 127 + 127 127 -127 + -127 127 127 + -125 127 127 + 118 -127 -127 + 127 -127 -127 + 125 127 -127 + -127 -127 127 + -125 -127 127 + -127 -127 127 + -110 -127 127 + 127 127 -127 + -127 127 127 + 127 -127 127 + 127 127 127 + 127 127 -127 + 127 -127 127 + -127 -127 -127 + -127 -127 127 + 127 -127 127 + 127 -127 127 + -121 127 -127 + -127 127 -127 + 127 127 -127 + -127 127 -127 + -127 -127 127 + -127 127 -127 + 127 -127 127 + 127 127 -127 + -127 -127 -127 + -127 -127 -116 + 127 127 -116 + 127 -127 116 + 127 127 127 + -127 127 -125 + -123 -127 116 + 127 -127 125 + -116 -127 127 + -127 -127 127 + 124 -127 125 + -127 127 127 + 127 127 127 + 116 -127 127 + 127 -127 -127 + -127 127 127 + 127 -127 127 + -121 127 -127 + -127 127 127 + -127 -127 -127 + 127 127 -127 + -127 -127 -127 + -122 122 127 + -85 -85 -123 + -126 85 123 + -127 70 123 + 124 -70 -127 + 127 -108 -127 + 125 107 -123 + -122 -80 -127 + -80 -80 -127 + 127 109 127 + 124 -108 -127 + 124 117 127 + 127 -109 125 + 125 -125 -114 + 127 -117 114 + 127 127 -114 + 127 127 -127 + 127 -127 -127 + -118 -127 114 + -127 -127 127 + -127 127 -127 + 127 127 127 + 127 127 127 + 127 -127 127 + 127 127 127 + -127 127 127 + -126 -127 127 + -116 127 127 + -127 127 127 + -127 127 -127 + 127 127 -127 + 127 -127 -127 + -112 112 -127 + -127 -97 -127 + -127 -97 127 + -127 97 127 + 127 127 127 + 127 113 127 + 127 -97 -127 + -112 -112 127 + -127 -127 -127 + 114 -127 127 + 125 -113 127 + -121 127 127 + 127 -127 127 + 127 -126 127 + 127 126 127 + 127 127 -127 + 127 -127 127 + 125 127 -127 + -127 127 127 + -127 -127 -127 + -127 127 127 + 127 -127 -127 + -127 -127 -127 + 122 -127 127 + 127 127 127 + -121 127 127 + -127 -127 127 + -127 127 127 + -127 127 127 + 127 -127 -127 + 127 -127 -127 + 127 127 -127 + -127 -127 -127 + -127 -127 -120 + 120 127 -120 + -127 127 -120 + 127 -127 120 + 127 127 -127 + 124 127 127 + -127 127 -127 + 107 -120 -127 + 120 108 127 + 127 108 -127 + -127 104 -127 + 116 -104 -127 + -120 -100 127 + 127 -100 -127 + -124 -100 127 + 120 104 127 + 127 127 127 + -119 -100 127 + -115 115 127 + -119 -119 -127 + 127 -127 127 + -127 -127 127 + 127 127 -127 + 127 127 -127 + 127 127 -127 + 127 127 127 + -119 -127 -127 + -127 127 -127 + 127 125 127 + 127 125 -127 + 127 -127 -127 + -127 -127 127 + 127 127 127 + 116 127 -127 + -127 -123 -127 + -127 123 -127 + 127 123 127 + -127 -127 127 + -127 -127 127 + 127 123 -127 + 127 -127 127 + 127 127 127 + 127 -127 118 + -127 127 118 + 127 127 127 + -127 127 127 + 127 127 -127 + -127 -127 -127 + -127 -127 -127 + -127 -127 127 + 127 127 127 + 127 -127 -127 + 127 119 127 + 127 -119 127 + -127 127 127 + 127 127 -127 + 127 -119 -118 + 127 -127 -118 + -127 119 119 + 127 -119 -104 + -127 111 88 + 107 -107 88 + 124 -91 -88 + 123 91 -91 + 123 91 75 + -112 107 -75 + -115 96 84 + 113 -91 84 diff --git a/example/testvectors/lte/block3_status.bin b/example/testvectors/lte/block3_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..b34ec29b72ff9ab10541692a323056413b994878 GIT binary patch literal 12 TcmccUz`(KcFmu8d26+Ym9DM`4 literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block3_status.dat b/example/testvectors/lte/block3_status.dat new file mode 100644 index 0000000..1670172 --- /dev/null +++ b/example/testvectors/lte/block3_status.dat @@ -0,0 +1,3 @@ +080040d1 +6003c3a9 +001f00b4 diff --git a/example/testvectors/lte/block3_tail_llrs.dat b/example/testvectors/lte/block3_tail_llrs.dat new file mode 100644 index 0000000..bf11c67 --- /dev/null +++ b/example/testvectors/lte/block3_tail_llrs.dat @@ -0,0 +1,6 @@ + 4 8 + -7 -7 + 10 -6 + 15 -3 + -6 14 + -13 13 diff --git a/example/testvectors/lte/block4_cfgreg.dat b/example/testvectors/lte/block4_cfgreg.dat new file mode 100644 index 0000000..9f654b8 --- /dev/null +++ b/example/testvectors/lte/block4_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +40 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/lte/block4_hard_dec.bin b/example/testvectors/lte/block4_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..dcd26ddd1ae76da0bf959b7d073e011563e38f9c GIT binary patch literal 8 PcmY%3YtUe4U|;|M1x^6o literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block4_hard_dec.dat b/example/testvectors/lte/block4_hard_dec.dat new file mode 100644 index 0000000..36bb34c --- /dev/null +++ b/example/testvectors/lte/block4_hard_dec.dat @@ -0,0 +1,2 @@ +28800e20 +00000007 diff --git a/example/testvectors/lte/block4_llrs.bin b/example/testvectors/lte/block4_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..a76276a1e852afbc535b28ebf3793cf92540fdaf GIT binary patch literal 120 zcmV~$OBRA46aY{`KqQV<1D&-0m6-!QmJ;~*$fJ7?ZmI8*o71BvTf*NInoh*0@TH|W zBU9pdJ6!`rR`p6Kg}Kt+%T*0B(w!PBWYfEqpM3esJ>;@|3|tVw7fQ%zZrJK!vb@|E LK#Oc9;g!!n2Q5Ma literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block4_llrs.dat b/example/testvectors/lte/block4_llrs.dat new file mode 100644 index 0000000..9b83b8d --- /dev/null +++ b/example/testvectors/lte/block4_llrs.dat @@ -0,0 +1,40 @@ + -15 -9 -7 + 5 -9 -3 + -12 -6 -1 + 2 4 -19 + -8 0 -18 + 14 15 -14 + -5 10 -9 + -11 6 -4 + -26 10 -9 + -5 10 -6 + 17 -2 -9 + 3 -3 -8 + 1 0 -1 + -19 12 2 + -5 -8 1 + -2 -8 1 + -13 8 23 + -28 -21 -14 + -7 10 11 + 7 22 -2 + 14 8 9 + 6 -6 12 + -6 2 22 + 18 -16 -28 + 6 2 -12 + -8 -14 5 + -1 -12 -1 + 9 6 16 + 2 8 -22 + -3 7 -9 + -3 15 -2 + -2 -11 -12 + 4 -21 -2 + 10 5 4 + 6 -10 -26 + -15 5 1 + -27 -22 -7 + -11 -17 28 + 12 8 -3 + 3 -16 -10 diff --git a/example/testvectors/lte/block4_tail_llrs.dat b/example/testvectors/lte/block4_tail_llrs.dat new file mode 100644 index 0000000..d3013f3 --- /dev/null +++ b/example/testvectors/lte/block4_tail_llrs.dat @@ -0,0 +1,6 @@ + -1 -4 + 10 7 + 19 1 + -18 4 + 0 7 + 0 19 diff --git a/example/testvectors/lte/block5_cfgreg.dat b/example/testvectors/lte/block5_cfgreg.dat new file mode 100644 index 0000000..208dd48 --- /dev/null +++ b/example/testvectors/lte/block5_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +6144 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/lte/block5_hard_dec.bin b/example/testvectors/lte/block5_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..1e4776c3ead29c983b3372774ca606b34f7a117e GIT binary patch literal 768 zcmV+b1ONOL4)roqvDIvj*$<)91D@u2)fDMDE)%5NnY@a=bia*9>DUGrci&gWuri>M znHsMqG0j)3xtcIGkHDuzf5l&_ora@SO#`2+{b3_{J#|S+pAFdgW(((@83?H?Am)~c zC~4*}t*|VV>PFyhqRYPjo*@KD0H!6FMRMBfP(n5#_#g0t&-ed01e^?Ve9p)RMEes@ zvbF9H;K+wl`;A1(R0}qT-G{aD6&$a6GQIR|j7ZmD9^*F=)(4Yx&+ow zTGUQ_QP%r$1Uf0|IlL0=6uBjCN~#`=FF$x|{}D*ID8>GOnS7?cr>Q}8(sgq_cfdnB z@5mukV?ZY`J=1K`+J6EPHc8RH;TKu2?-6OREcNO_(SGEUuD$ai5Pnebe(8f6`zv8m z5qa!vjm3k|?E_!={Ync}h|vpz#|_`q`aFS-ntCm#2num5L5Y%u4&QkDj8RU25hjL^ z3jyYVnDio^@o5QPk@)JW*WQZ|zy}EbBY1G}{e2G!gQJK~bNXt~)^sztcliQdcX@JN z^+0-g$yk{O$;&Uw4rU9Vp7}K?D?T{w|0oIEuyn184}AOgQzEpW!PwRVH{@N5g@e<~k6PI+ y$Xhmx^tYEKg?()OfvlOaH;G7+c3eMDFmtVGt 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 J(@>nN{{yb_#UTIy literal 0 HcmV?d00001 diff --git a/example/testvectors/lte/block5_llrs.dat b/example/testvectors/lte/block5_llrs.dat new file mode 100644 index 0000000..9bb5442 --- /dev/null +++ b/example/testvectors/lte/block5_llrs.dat @@ -0,0 +1,6144 @@ + 1 7 9 + 5 7 13 + 4 -6 15 + 2 4 -3 + 8 0 -18 + -2 -1 -14 + -5 -6 7 + -11 6 -4 + -26 -6 7 + -5 -6 10 + 17 14 -9 + 3 -3 -8 + 1 0 15 + -19 -4 -14 + -5 -8 1 + -2 8 1 + 3 8 7 + -28 -21 2 + 9 10 27 + 7 22 14 + 30 -8 -7 + 22 10 12 + 10 18 6 + 18 -16 -12 + 6 -14 4 + 8 2 -11 + -1 -12 -1 + -7 22 0 + 18 8 -22 + -3 7 -9 + -3 15 -2 + -2 5 -12 + 4 -21 -2 + 10 -11 -12 + -10 -10 -10 + -15 5 -15 + -11 -22 9 + -11 -17 12 + 28 -8 -3 + 3 -16 6 + 15 10 19 + -18 -16 0 + -4 7 1 + 4 -9 3 + 24 -11 3 + 8 16 15 + -10 5 6 + 4 23 -6 + 11 14 -10 + 5 7 -1 + 13 -12 10 + -9 -7 -19 + 9 0 0 + -10 -3 -13 + 10 15 10 + 2 13 12 + -13 8 -13 + -23 10 -12 + 8 10 4 + 16 21 6 + -17 6 2 + 20 -8 -8 + 15 12 -8 + -8 -7 -13 + -21 -13 10 + 30 10 -26 + 4 -19 3 + 1 14 -13 + 1 11 -10 + -11 -17 1 + -15 8 12 + 2 -6 -4 + 15 0 -16 + -1 -21 -12 + -19 -12 -20 + 16 9 -17 + 0 4 -13 + -6 -11 3 + -8 6 10 + -10 16 12 + 12 20 -6 + 2 1 1 + 18 18 8 + 30 16 -4 + -21 -20 -8 + -8 17 -17 + 1 15 -10 + -22 12 -5 + 10 -8 -3 + 3 -7 13 + -8 7 -3 + -6 22 4 + -13 14 13 + 21 11 7 + -7 -2 -5 + -1 5 4 + 7 8 -6 + 13 -14 18 + -26 -13 25 + -6 -7 -11 + 12 -14 11 + -19 -3 3 + 6 7 11 + -7 1 5 + 3 -8 -7 + 19 -21 -3 + -12 -24 14 + -2 5 -11 + -2 8 10 + -12 -1 8 + -17 -5 -9 + -8 -4 -8 + -2 12 4 + 23 2 2 + 5 6 -22 + 7 -17 19 + 2 11 -3 + 7 3 -2 + -25 -1 -4 + -2 -9 6 + -9 -2 -14 + 6 19 11 + 10 20 -13 + -12 -3 -3 + -13 4 5 + 21 6 10 + 10 1 7 + 12 -8 -11 + 12 25 -19 + 1 11 -13 + -14 -30 -5 + 6 -2 -1 + 8 12 -10 + 13 -17 3 + 10 8 8 + -7 11 -17 + 1 -24 -8 + -8 1 -9 + -7 4 7 + -18 2 -8 + 10 -14 0 + 2 6 -11 + -11 -4 -13 + 15 7 7 + -22 -11 17 + -10 -3 -5 + -2 -13 -26 + 5 -11 -13 + 13 -9 -9 + -18 -7 -3 + -3 -12 9 + -25 13 17 + 14 0 17 + -14 6 5 + -19 -14 3 + 14 14 8 + -1 3 2 + 9 -28 7 + 1 2 8 + 0 14 -4 + 23 -6 -9 + -20 6 4 + -10 -15 17 + 9 -10 -9 + 14 -3 -14 + 23 -12 -18 + -3 -14 -7 + -8 17 -6 + -18 8 -18 + 9 13 -3 + 11 12 -9 + 11 1 5 + -1 6 -2 + 21 8 -18 + -8 15 7 + -11 3 7 + 22 9 21 + 16 -2 9 + -8 7 6 + -15 4 -14 + 19 0 -5 + -9 4 -15 + 0 14 12 + -2 10 4 + -6 13 14 + -20 -11 20 + -1 31 -6 + 14 -16 8 + -10 14 -4 + 14 9 -4 + -14 -17 19 + -5 7 -15 + 4 -22 -11 + 28 0 -10 + 2 2 -6 + 10 18 -11 + 9 24 0 + -1 8 -5 + 10 6 13 + -6 5 9 + 5 18 16 + -10 17 -23 + -1 29 -9 + 20 -10 16 + 3 -1 9 + -7 0 -15 + -8 1 22 + -5 -15 -8 + -9 -14 17 + 3 1 -12 + 10 7 11 + 20 -1 10 + -4 -1 -11 + 12 1 -20 + -6 -15 16 + 6 0 5 + 0 1 -9 + 24 -8 -10 + 5 5 -1 + -6 -5 -9 + -4 3 -11 + -15 -12 -11 + -6 7 -14 + 20 -15 -20 + -13 -4 -6 + -1 14 -10 + -10 5 -23 + 1 -3 1 + -9 -8 -9 + -7 -15 5 + -3 1 10 + 10 -22 19 + 0 -5 -3 + -11 -2 -5 + 4 -9 -20 + -15 9 4 + 5 2 -9 + 14 -8 -1 + -3 -9 3 + 9 -3 5 + 10 -5 6 + 17 -2 -12 + 20 0 -7 + 7 14 -3 + 21 -13 6 + 1 7 -13 + -18 4 -11 + 16 12 0 + 11 -9 12 + 0 13 5 + -3 -9 18 + 18 15 -18 + -9 -4 9 + 2 -11 7 + -8 -10 1 + 29 18 -19 + 15 -6 -23 + -7 13 -7 + 27 -1 1 + 6 10 11 + -4 -10 2 + -5 -10 9 + 15 -5 11 + -5 7 3 + 13 -4 2 + 2 9 14 + -6 0 -10 + 8 -4 14 + -17 -4 -13 + 5 2 -8 + 5 12 7 + 12 10 17 + -6 -1 9 + -15 -3 -1 + -14 -12 8 + 25 -7 -16 + 2 14 -22 + -8 9 15 + 4 23 -10 + 0 15 -15 + -30 2 5 + 8 -9 10 + -2 7 9 + -5 2 0 + 0 -11 -6 + -16 -13 -24 + -12 -5 0 + 0 -15 -13 + 22 0 10 + 5 -6 12 + 0 11 -5 + 4 2 1 + -7 7 2 + -14 -5 3 + -10 -2 2 + -23 -12 -12 + 1 2 -4 + 25 -10 14 + 7 -11 17 + -11 5 19 + 15 9 -20 + 18 1 -1 + 16 -11 -3 + -19 -8 5 + 1 2 -15 + 5 1 17 + 4 16 -12 + 5 10 6 + 0 5 4 + -16 -2 -3 + 10 -6 -13 + 5 -9 -7 + 5 -10 15 + 14 2 -14 + 8 5 -2 + -4 0 -24 + 17 5 -7 + -10 4 -4 + 0 -3 -14 + -7 -15 -5 + -15 -10 -11 + -7 -17 3 + 10 -10 2 + -12 -2 -9 + -12 13 18 + -18 -8 -1 + 11 -1 26 + 6 5 10 + -4 -1 -22 + -26 19 15 + 0 -6 15 + -10 -6 -10 + 12 -2 -16 + 6 19 -9 + -8 -5 17 + -1 20 -10 + -22 16 -19 + 7 -9 -17 + 8 -2 -18 + -14 11 16 + 0 -22 9 + 3 26 19 + -16 5 -8 + -9 -4 6 + -3 -14 -6 + -6 1 -21 + -11 2 11 + -9 -21 3 + -3 7 19 + -8 1 10 + -20 -6 -5 + 0 -19 -20 + -23 -3 4 + 4 -6 9 + -15 -16 11 + -13 -7 -2 + 1 -6 12 + -8 9 -17 + -3 -15 7 + 22 1 13 + 16 6 -25 + -24 -14 -5 + -4 14 -4 + 19 12 -12 + 22 2 4 + -14 19 -7 + -18 17 -11 + -5 -5 -9 + 2 19 9 + 16 -18 -10 + -10 4 -14 + 10 -2 11 + 9 0 -5 + -10 -3 24 + 6 20 -4 + -8 4 1 + 25 -23 -12 + 16 -9 23 + 4 -11 -15 + 3 16 -8 + -9 5 17 + 1 -12 3 + -13 -4 -15 + -11 9 11 + -12 -9 -6 + -2 12 1 + 13 -10 -8 + -5 -14 7 + -12 0 2 + 4 -2 2 + -18 -17 -7 + -5 -17 -9 + -1 -3 -3 + -15 11 18 + -9 -4 12 + -16 9 -15 + 10 8 3 + 12 -19 -14 + -6 8 7 + -1 -3 9 + -6 3 -5 + -4 -6 -12 + 8 -2 -6 + 7 5 8 + 0 11 -8 + 12 16 -2 + 11 4 -7 + 9 -9 2 + 20 -6 -3 + 8 -13 -4 + 3 1 -7 + -22 -10 -1 + -10 17 -5 + -2 20 13 + 16 -14 -2 + -13 -6 3 + 7 11 0 + -2 -6 -18 + 8 -4 13 + 10 -13 -1 + 1 -3 -18 + 2 -1 -18 + -7 -16 4 + 6 16 13 + -10 17 7 + -5 -15 14 + -25 16 7 + 3 12 -16 + 15 8 8 + 6 -14 -20 + -18 -20 6 + 1 7 7 + -18 -6 8 + 9 -16 -8 + 9 5 11 + 6 10 6 + 5 -8 9 + -14 4 6 + -5 -12 1 + 15 18 -23 + -5 -3 -15 + -16 4 5 + -13 -12 -9 + -26 5 0 + 17 -26 6 + -8 26 3 + -9 6 6 + -1 3 -9 + -8 -6 -5 + 17 -5 -14 + 8 1 -18 + -22 -17 0 + 18 11 -1 + 29 2 -14 + -21 -13 -16 + -12 18 -16 + 16 4 4 + 7 31 8 + 6 -14 0 + 6 9 -4 + -4 4 7 + -19 -15 -8 + -3 13 14 + 4 -17 7 + -3 -3 -14 + -3 -2 -1 + -7 25 10 + -1 16 14 + -1 -13 3 + -3 -10 -7 + 11 -8 7 + 10 -10 14 + 12 -8 -1 + 2 7 -8 + 8 20 6 + -4 13 10 + -3 18 -14 + 15 -21 -13 + -10 24 10 + 7 -10 -18 + 18 -13 2 + -22 -6 0 + 2 -3 -7 + -6 -5 11 + 0 -1 12 + -5 21 6 + 15 10 4 + -7 -9 -16 + -5 20 5 + 3 -1 11 + 2 7 5 + 1 -2 19 + 21 -12 13 + 4 -1 -2 + 17 -4 4 + -19 -21 -10 + 4 9 6 + 2 6 2 + 9 -10 -21 + 3 -5 -14 + -13 3 -7 + -12 17 14 + -1 0 -26 + 23 -22 1 + 4 13 -7 + 18 17 0 + 15 -3 5 + 12 13 2 + 3 -3 -1 + -13 16 10 + -1 2 19 + -12 0 15 + -15 -3 -6 + 9 -16 10 + -19 0 12 + 3 8 2 + -8 -13 -19 + -3 -1 -4 + -17 0 12 + 3 -4 -2 + 9 -4 -9 + -12 -2 -11 + 7 -2 -2 + 9 -20 -1 + 16 -7 -14 + 12 -1 11 + -9 3 -22 + 16 -11 -21 + -7 4 22 + 11 1 16 + -5 11 3 + -5 1 -11 + -17 8 -4 + -7 24 9 + 1 -19 7 + 3 -5 24 + 8 24 3 + 0 14 -1 + -8 2 -12 + 14 18 26 + -12 -4 23 + -1 -10 1 + 5 -2 14 + 11 -1 -2 + -13 -21 12 + -12 8 -9 + 13 -16 -2 + -21 -13 -13 + 14 8 -2 + 3 7 18 + 11 -13 5 + 3 3 1 + 17 -7 -4 + 2 -1 28 + 24 7 -17 + 14 4 -21 + -12 -3 15 + -1 6 -9 + 18 15 -21 + -1 -24 -4 + 11 15 -13 + -3 -10 7 + -2 -5 7 + -8 -10 6 + 1 11 1 + -13 -12 13 + -4 16 13 + -3 0 13 + 8 -5 -12 + 2 -11 -1 + 3 -3 -5 + 14 22 -6 + -2 -17 -8 + -10 -14 -14 + -8 8 10 + 6 -5 -2 + -2 -17 6 + 0 -25 9 + 2 -14 16 + 9 -13 -14 + -13 -1 -11 + 14 10 -3 + -2 -10 13 + 3 -17 0 + 19 -18 -8 + -7 14 -8 + 8 -6 14 + 9 -6 -18 + 1 5 16 + -1 9 -21 + 10 -10 -7 + 4 16 -15 + 13 1 -10 + 10 -1 -12 + -12 -23 21 + 0 5 -21 + -21 17 16 + 8 11 8 + 12 7 6 + -16 6 -11 + 1 -6 0 + 17 15 -6 + -8 2 -11 + -5 1 -13 + -10 -9 16 + 6 -9 1 + -16 12 4 + 7 8 -6 + 7 -22 0 + 4 9 14 + -7 17 5 + 17 22 -13 + -6 4 -14 + 11 -10 -10 + 15 -5 -5 + 3 3 11 + 2 -6 -17 + -5 -7 2 + -4 3 -2 + 4 12 -29 + -3 13 28 + 5 5 3 + 2 -12 -12 + -10 22 21 + 3 14 0 + -4 -6 -11 + 14 4 8 + -3 11 -4 + 8 -8 21 + 8 1 6 + 9 24 6 + 8 16 1 + 0 -4 4 + -1 -15 5 + -6 13 -12 + 5 -15 -16 + -11 -9 2 + 0 10 16 + 9 -2 -1 + 8 -17 -2 + 3 0 -10 + -2 -18 -19 + -5 -4 12 + 3 -19 4 + 4 -19 -3 + -7 -16 -8 + 7 18 2 + -13 1 11 + 4 4 1 + 19 -19 -8 + 14 2 -9 + -9 -6 14 + 7 -1 -8 + -15 -10 -1 + -4 4 15 + 14 11 -6 + 22 -22 12 + -18 -2 14 + 7 12 -19 + 13 15 -20 + 13 -10 -8 + -8 3 -27 + -8 -8 16 + 4 8 -3 + -16 0 6 + -3 -15 15 + -2 -10 11 + 19 3 -22 + 2 6 -7 + -13 1 14 + 6 5 13 + 15 -7 -6 + 9 -8 19 + -19 -20 -10 + -11 5 10 + 9 -9 -18 + -3 8 -7 + 4 7 10 + 8 -22 9 + 0 -2 7 + -10 4 -13 + -3 27 16 + 14 10 -2 + 6 16 3 + -23 -2 2 + 11 -9 7 + 11 -7 -10 + -9 -11 -20 + 0 -4 -6 + 18 16 20 + 4 2 0 + 17 16 -19 + -16 -11 -5 + 3 -14 -2 + -8 -3 -14 + -19 -3 -11 + -5 4 7 + 14 -8 17 + 6 10 17 + -10 3 5 + 3 7 -7 + 12 -9 11 + 9 12 10 + -4 -15 5 + -20 10 -13 + 29 20 10 + -2 -3 1 + 2 -7 -16 + 2 -10 5 + -10 7 -6 + -12 -1 -8 + 0 -26 5 + -1 2 -1 + -11 -6 9 + -9 6 -3 + 8 11 1 + 4 1 -11 + -8 11 13 + -4 -9 -20 + -2 -2 -8 + -19 -15 -10 + -10 6 7 + 1 8 -1 + 26 -9 8 + 4 -3 -8 + 7 2 12 + -13 -13 11 + -15 -10 11 + 1 -14 10 + 8 0 10 + -9 -11 3 + 9 8 9 + -5 -17 -5 + 1 -12 3 + -10 9 3 + 5 2 11 + -4 6 1 + -8 -3 8 + 4 -10 -23 + 10 3 -14 + -14 0 -7 + 17 17 10 + 0 -6 14 + -12 -8 -13 + -15 -14 15 + -8 -10 1 + -12 -13 7 + 1 1 6 + -3 -5 6 + 10 8 -20 + -9 7 -3 + -7 4 -20 + -1 -1 -23 + -3 11 2 + 9 -15 5 + -4 -2 13 + -13 -7 -9 + 0 -5 -23 + 8 11 8 + 9 10 2 + -11 10 -15 + 15 -14 -3 + -3 -3 12 + 1 18 -17 + 14 -8 3 + 2 5 8 + -31 17 5 + 0 6 12 + -12 11 11 + 1 -27 6 + -14 24 -6 + 13 2 -7 + -13 -16 3 + -5 13 10 + -19 27 -2 + 8 -19 -4 + -16 15 19 + -13 7 -14 + -27 -1 -12 + -4 -3 16 + -7 -14 19 + 15 1 -12 + -15 13 7 + -10 -20 9 + 3 8 -6 + -7 -10 -20 + -8 12 -3 + 20 16 -14 + -3 8 5 + 11 9 -12 + 11 5 12 + -9 -7 6 + -23 -3 6 + 5 -9 -6 + 14 -9 -1 + -5 6 14 + -10 -8 -9 + 26 15 -25 + 8 -6 -26 + -4 2 5 + 1 5 -1 + -16 9 1 + 7 2 -1 + -11 8 -3 + -6 -8 -15 + 9 -17 -14 + 1 2 -15 + -9 -7 15 + 17 -1 -24 + -1 16 -1 + 0 31 -7 + -3 8 20 + -14 -4 -8 + 21 -12 8 + -24 -21 -19 + 10 -10 -3 + -1 -14 -12 + -10 3 12 + -7 2 -3 + -31 -24 -3 + 22 -13 0 + 19 9 0 + -25 15 11 + 5 6 -4 + -12 -14 4 + -11 -5 -9 + -9 11 -8 + 3 -5 -10 + -15 -13 -5 + 8 8 12 + -14 9 -19 + -2 0 -11 + -10 10 1 + -6 7 1 + 7 -26 -11 + -14 1 -8 + 8 6 1 + -1 -3 -4 + -11 2 -1 + 15 -1 -1 + -15 12 11 + -9 15 6 + 2 0 17 + 6 9 17 + -5 1 4 + -12 -5 -21 + 10 -16 9 + 22 5 7 + -12 -6 -22 + -6 1 23 + -5 18 19 + -9 13 -9 + 4 7 -9 + -16 12 -11 + 19 5 6 + -12 16 23 + -8 -10 10 + -6 -4 11 + -7 17 -4 + -3 8 -30 + -6 -15 12 + 13 10 21 + 9 0 -2 + 13 3 14 + -15 -5 -22 + 24 -5 5 + 6 -7 -7 + -1 -8 -8 + -3 -7 4 + 7 4 13 + 1 10 -5 + -5 3 5 + 3 -11 -8 + 7 -7 26 + -16 -20 -3 + -8 4 16 + -11 19 -17 + 13 1 -7 + -17 -9 -12 + 7 -2 -1 + 0 -6 13 + 12 10 -5 + -3 15 -3 + 3 11 -4 + -1 -19 16 + -14 1 6 + 24 17 -8 + 10 -4 -18 + 0 -23 23 + 8 -13 -22 + 4 -4 -15 + 9 11 -6 + 8 20 10 + -7 12 10 + -7 -2 -16 + 12 3 4 + -2 -17 20 + 5 -19 17 + 30 11 -6 + 5 0 7 + 18 -7 6 + 19 18 4 + 3 -12 -18 + 6 -14 -2 + -25 9 -11 + -7 -12 2 + -6 -12 11 + 10 16 4 + 6 5 12 + -14 19 9 + -20 12 3 + -4 -16 7 + -8 -13 -17 + 2 -15 11 + -8 11 7 + -2 -3 8 + -15 9 4 + 12 15 -14 + -13 12 21 + -5 -16 14 + -11 5 -3 + -11 7 13 + 15 -13 5 + -3 4 -2 + -12 18 1 + -5 1 3 + -3 -21 -9 + -6 10 -7 + 8 2 -18 + -12 2 -5 + -20 -5 16 + 9 3 -8 + -5 10 -7 + -18 -4 -3 + 8 4 20 + -5 21 10 + -3 12 1 + -9 6 -3 + -17 -5 2 + 1 5 13 + -24 1 9 + -8 -8 12 + -17 7 -6 + -8 6 6 + 1 -2 -3 + 3 0 -7 + 2 0 16 + -15 -14 -21 + -1 11 -18 + 6 8 11 + -15 5 18 + 12 10 7 + 8 -18 21 + -27 -2 -1 + 7 9 -13 + -10 10 0 + 2 8 -6 + 21 18 0 + -9 -20 -15 + -6 14 17 + -4 -7 -18 + -7 -7 -9 + -9 -8 -6 + 4 8 11 + 1 -9 -12 + -1 -10 7 + -17 4 8 + 11 1 14 + 3 -15 -8 + 10 26 -18 + 15 -12 14 + 3 14 -23 + -5 5 -13 + 10 3 1 + 14 -2 16 + -11 -5 3 + -23 9 -11 + 25 23 6 + -26 6 -13 + -11 -15 7 + 1 4 -17 + 14 -17 -6 + 21 17 1 + -1 17 8 + -27 -4 14 + 11 -4 -29 + -20 -25 -5 + 18 8 -6 + 13 14 -21 + -8 -10 -17 + 11 -16 10 + 10 2 0 + 12 -9 -5 + 19 -1 11 + -12 14 7 + 8 29 5 + -14 6 2 + -2 -5 8 + 1 6 11 + 16 10 6 + -17 3 -1 + -1 5 -4 + -13 12 5 + -9 -7 -5 + 5 -9 0 + 8 -16 -12 + 7 -22 1 + -11 -5 -9 + -12 -7 -13 + 6 1 21 + -2 -14 -13 + -15 -2 -5 + -7 -8 19 + 0 11 3 + 26 -1 14 + -17 -13 -8 + -19 12 7 + 19 0 4 + 12 3 -7 + 6 -22 2 + 6 10 -18 + 5 -5 10 + -12 -12 -9 + -5 -7 15 + 8 -15 -20 + -3 17 5 + -6 7 14 + -1 -18 0 + -28 4 16 + -1 8 -4 + 5 -13 10 + -10 -14 -19 + 0 -10 -14 + 3 -13 13 + -10 -1 -13 + 18 10 25 + -1 -16 -26 + 12 3 -9 + -3 -23 -7 + 9 -11 -10 + 3 -15 6 + 3 26 -15 + -4 11 11 + 6 6 -4 + 21 3 -2 + -9 4 16 + -13 -16 -4 + -18 6 -6 + 0 16 -3 + 6 12 -26 + 6 -5 -12 + -22 3 12 + 1 -8 16 + -6 7 -4 + -2 -9 -8 + 14 7 12 + 5 13 2 + -2 -15 11 + -18 4 1 + -20 -22 10 + -9 8 -2 + -9 -18 -17 + -7 2 -25 + -4 1 1 + 3 7 3 + 11 25 -20 + 4 4 13 + -4 4 3 + 2 10 -12 + 7 -8 20 + 13 -13 -11 + 7 31 -6 + 20 -21 -6 + 2 -15 -3 + 22 -5 -8 + -14 -6 -8 + 11 9 6 + 2 12 -12 + 23 -7 0 + 5 -17 9 + 18 -8 12 + 27 4 -13 + 7 10 6 + 10 -9 6 + 6 19 -17 + -10 -6 -11 + 4 -5 7 + 9 -14 -20 + -9 -11 -12 + -6 9 0 + -9 5 6 + 7 -10 4 + 7 -4 -11 + 11 -3 -12 + -15 -10 -12 + -11 -19 8 + -10 -1 20 + -14 0 -8 + 21 10 1 + -2 -3 -2 + -10 0 9 + -8 18 -2 + -13 -12 -3 + -4 -20 -6 + -1 -3 13 + 1 11 -7 + 8 5 -2 + 15 9 15 + 9 -7 -14 + -3 1 10 + -11 -12 3 + 5 15 0 + -7 -18 -6 + -16 -4 8 + 19 8 10 + 19 -4 -1 + -15 6 9 + -8 0 1 + -15 5 -17 + -5 -3 -7 + -12 -7 -6 + 15 -6 -13 + -8 -7 10 + -19 -2 13 + -2 4 4 + 10 -7 6 + 14 22 -3 + -4 -8 3 + -7 11 9 + -10 -16 -23 + 1 -9 4 + 16 8 -15 + 19 -9 7 + 8 -14 -9 + 6 -3 -8 + -13 -12 -14 + 16 1 2 + 13 -14 -1 + 9 11 15 + 19 9 -7 + -19 11 7 + -13 -10 13 + -1 -5 -3 + -4 -10 3 + -4 -6 15 + -3 2 -1 + 2 9 2 + 14 -5 15 + 2 -2 -8 + -3 24 14 + -4 -2 -9 + 3 -7 17 + 5 -9 -4 + -5 -15 -10 + -11 0 17 + -13 0 -4 + -8 -12 -13 + -11 -22 5 + -5 -7 6 + -1 -3 -1 + -6 -6 15 + 6 -7 1 + 9 9 10 + -6 11 -5 + -7 15 -13 + -12 -12 -1 + -4 5 -4 + -16 30 11 + 22 7 -16 + 0 22 14 + 2 16 17 + 6 -12 0 + 9 1 -16 + 7 6 13 + 21 2 8 + -1 11 4 + 3 -9 7 + 4 -7 5 + -1 16 20 + -15 12 -1 + -4 12 -24 + -2 11 -14 + -2 -6 -6 + -13 4 12 + 12 -1 4 + 6 2 -1 + 8 10 13 + 28 -25 -12 + -11 -11 2 + -11 -9 -6 + 3 -3 3 + -17 12 9 + -13 -9 16 + 9 15 23 + -1 -11 0 + -10 9 -8 + 5 17 15 + 14 6 1 + -10 7 -1 + 1 0 20 + 12 15 9 + -8 -17 6 + 0 3 12 + -9 11 1 + 7 5 8 + 1 10 17 + 5 -10 -3 + 11 8 -15 + 7 -5 -3 + -3 -2 7 + 13 4 -2 + 0 -2 18 + -10 4 -12 + 10 -7 -10 + 9 -2 -2 + 8 3 10 + 7 -7 -18 + -1 10 1 + -9 -7 10 + 17 -7 13 + 14 12 -3 + -8 8 -11 + 3 -16 8 + -2 -17 13 + -5 14 -4 + -9 -10 14 + -21 9 -7 + -6 11 -29 + 0 8 -12 + -3 17 29 + 8 -20 12 + 5 4 -6 + -2 14 -15 + 3 10 2 + 0 -9 5 + -7 14 -3 + -11 2 1 + -12 11 22 + 15 16 -2 + -3 9 -5 + 18 -6 -17 + 4 19 18 + 4 0 -1 + -2 0 -25 + 2 -5 10 + -12 -1 -8 + 0 10 14 + 5 16 -21 + 2 10 13 + 12 4 -3 + 8 -23 -4 + -7 -1 10 + 10 -13 7 + -26 -8 6 + 9 12 -14 + -21 8 -2 + -5 13 -12 + -3 21 -2 + -5 5 -5 + 0 -11 9 + -3 13 -6 + -4 8 20 + 9 -13 -22 + 12 -1 -10 + 2 -14 7 + -7 11 19 + 8 17 -3 + 5 -8 -8 + -12 6 5 + -19 -10 0 + -10 -10 4 + -9 18 0 + 16 9 16 + -19 5 16 + -11 11 -15 + -5 -7 -10 + -13 10 3 + -13 -18 -12 + 5 -21 -9 + -5 -17 18 + -3 -5 20 + 14 -8 -12 + -13 -1 0 + 4 11 7 + 3 8 10 + -13 -8 26 + 16 -9 -5 + 15 25 -12 + -17 9 -7 + -8 -1 -4 + 8 -29 -8 + -16 -3 -28 + 14 20 14 + 0 -8 -12 + 15 -18 -11 + -4 16 -12 + 14 6 -5 + 13 -4 0 + -20 10 -19 + 4 16 5 + -16 7 10 + -17 -7 5 + -2 4 -11 + -9 14 15 + -9 18 -8 + -3 0 -12 + 2 1 11 + -6 15 -13 + 5 2 15 + 4 -6 -8 + -13 6 20 + -9 -8 27 + -3 10 27 + 7 2 -8 + 9 10 0 + -11 -12 17 + 10 15 -13 + -19 -1 -6 + -1 9 3 + 2 -16 -5 + 14 14 -2 + -19 -19 -4 + 0 7 13 + 1 1 12 + 21 7 6 + 12 12 9 + 12 1 11 + 4 15 17 + 18 -7 31 + 12 4 -9 + 15 -14 -2 + -7 3 -5 + -1 -8 -9 + -7 -20 11 + -9 10 -4 + 15 4 -6 + 7 12 19 + -24 8 -9 + 3 -4 19 + 14 -8 -26 + -2 -7 2 + -6 6 -1 + 7 -1 1 + 9 10 0 + 14 16 -15 + -7 3 -18 + -11 -4 8 + -6 12 -12 + 17 10 5 + 4 -18 0 + 12 -15 -5 + 8 -9 23 + 8 7 -18 + -2 -11 7 + 22 15 10 + -10 0 20 + 3 -11 -8 + -6 4 -4 + 5 2 17 + 1 22 -19 + -11 4 17 + 0 -4 10 + 16 7 -1 + 7 12 -16 + 14 24 12 + -3 6 2 + -6 2 1 + 5 -14 -10 + 20 14 18 + 5 19 6 + -4 -7 6 + 6 -9 2 + -12 17 -7 + 16 -15 -11 + -9 8 -3 + 10 -16 -7 + -12 8 -3 + 3 -15 -9 + -1 1 4 + 5 -21 2 + 9 -14 -1 + 4 18 6 + 16 6 14 + -8 12 -13 + -18 13 -10 + 2 -23 -13 + 7 -3 -28 + -8 2 8 + 16 -6 1 + 13 8 22 + -17 1 -7 + -6 -6 13 + 14 4 -19 + -9 -22 -27 + 3 -4 8 + 14 0 -21 + -14 -24 -11 + 10 7 15 + -21 -7 -14 + 15 24 3 + -8 7 -1 + -5 2 -14 + -3 -3 -15 + -16 8 -3 + 16 -18 -15 + 9 -11 -7 + 16 9 -8 + 3 9 4 + 14 -8 -2 + -15 -16 -3 + -2 -6 -1 + -6 6 -11 + -8 0 6 + 15 -13 -7 + 0 -5 2 + -6 10 8 + 3 10 -6 + -14 -15 4 + 14 6 5 + -1 13 -7 + -2 -1 10 + -15 11 -2 + -10 -19 -5 + 10 0 -12 + -11 4 -11 + -15 29 2 + 3 6 7 + 3 12 -12 + -6 7 -3 + -8 4 -11 + 22 -8 0 + 0 14 -15 + 22 -1 -5 + 8 -10 22 + 14 15 18 + -15 -8 11 + -14 0 -4 + -27 -8 17 + -17 -8 -1 + -4 0 15 + 3 -2 -21 + -7 -12 -7 + 7 -6 1 + -7 10 -19 + 6 16 7 + 2 -5 14 + 19 15 8 + 23 -4 -17 + 12 -1 11 + 16 -16 4 + -12 7 3 + -8 -8 19 + 17 6 2 + 7 10 -21 + -16 4 -2 + 6 18 10 + -8 -8 -13 + 5 -3 7 + -3 16 17 + 5 11 -4 + 3 -17 7 + -14 -17 16 + 14 -9 -1 + 12 -1 3 + 16 -4 -15 + -1 7 6 + 23 3 -4 + -9 10 16 + 11 -17 26 + -27 16 4 + -4 11 19 + -4 4 16 + 20 0 -4 + 1 -17 -3 + -9 -8 -1 + -5 11 2 + 22 -10 -8 + -7 -16 -4 + 1 -19 -17 + 17 1 -6 + -5 14 14 + -2 22 21 + 4 -3 9 + 12 -6 12 + 6 3 15 + 11 -5 -2 + -6 4 5 + 17 13 -19 + 19 -20 13 + 1 -7 -3 + 5 -3 -10 + -8 -5 -5 + -2 17 1 + -17 26 14 + 17 1 12 + 17 -16 1 + -20 -12 -4 + -5 -6 8 + 2 -8 -4 + -10 2 -8 + 8 5 -26 + 5 7 4 + -3 -9 -17 + -11 -1 5 + -5 -2 16 + -4 -5 0 + -8 16 3 + -17 -7 -6 + -11 3 -4 + -13 19 -13 + 1 -7 -16 + 1 6 -15 + -7 1 9 + -12 2 4 + -10 10 20 + 22 -14 -2 + -4 4 -18 + 24 -10 -4 + 0 5 9 + -12 -4 -8 + -1 14 19 + 9 -16 5 + 5 7 -2 + 5 -5 -17 + 8 7 8 + 0 0 -12 + 14 3 -20 + 2 9 -13 + 20 13 -12 + 12 4 -6 + -22 -9 -12 + 7 -31 -1 + -15 -5 -6 + -6 -7 7 + -8 -10 -9 + 0 10 -11 + -3 -9 18 + -15 -15 -20 + 0 6 6 + 10 3 -3 + -9 -6 -21 + 7 -2 -3 + -18 7 1 + 0 19 -8 + -4 -1 15 + -13 17 -4 + -11 -8 1 + 20 -12 6 + -1 -8 2 + 1 4 16 + 13 13 -6 + 16 7 7 + -2 -14 -25 + 10 -11 9 + -20 8 0 + 0 -4 -8 + 6 5 0 + -8 24 -6 + 12 18 12 + 21 4 16 + 1 4 -14 + 12 4 -3 + 0 9 4 + -11 -11 3 + -8 11 8 + 17 -6 -5 + 9 10 -15 + 9 -14 -6 + 12 -18 4 + -6 -2 -11 + 0 8 -9 + 8 3 -8 + 1 -11 14 + 7 12 -7 + 3 -11 21 + -4 -1 -2 + -20 5 9 + 11 7 16 + 2 -5 5 + 21 4 14 + -3 4 -10 + 2 -13 -24 + 8 -13 -15 + 5 -8 8 + -13 -6 -7 + -11 -12 -9 + 3 5 -11 + -1 21 -8 + -31 6 12 + -7 -19 6 + -9 6 4 + -4 -5 -8 + -7 6 17 + 3 -4 12 + 16 -11 12 + -8 -11 11 + 8 15 -11 + -4 -8 13 + -5 -14 16 + 21 4 3 + 13 2 2 + 15 -14 14 + 10 16 -9 + 3 2 20 + -3 14 -10 + -2 -16 -14 + -1 7 5 + -1 -5 2 + -13 8 21 + 24 8 8 + -20 -1 23 + 6 9 -7 + 19 -9 -5 + -9 -9 6 + -4 7 2 + -15 -7 8 + -5 13 1 + -8 -6 -10 + 9 -8 1 + -6 6 -20 + 11 12 6 + -24 -3 12 + 26 -1 25 + 13 -7 14 + -12 0 5 + 3 0 -26 + 24 -9 -1 + 8 -8 -9 + -3 3 4 + 4 -17 -10 + 5 4 -14 + -6 15 11 + -16 3 -19 + -16 16 2 + 9 -4 4 + 3 -3 11 + 5 -16 -14 + -6 -13 0 + 7 4 4 + -20 -7 -6 + 7 16 -15 + -2 -6 -7 + -10 6 5 + 9 4 -11 + 5 11 8 + -4 9 15 + 25 -5 -9 + -5 -2 5 + -9 3 21 + 6 8 -25 + 22 -9 4 + 2 -17 -6 + 10 0 1 + -7 0 -9 + 14 -10 0 + -2 -24 1 + -7 -7 0 + 8 8 8 + -12 1 17 + 13 3 -16 + 2 -16 -8 + 13 -6 -1 + 9 -17 1 + 3 -12 -5 + 16 -7 10 + -11 -8 -9 + -14 10 24 + -13 8 18 + 12 -11 -19 + 5 -11 -7 + 6 5 -21 + 4 -15 -4 + -22 4 1 + -8 3 9 + 17 20 2 + -7 6 -8 + -8 11 -17 + -4 -3 5 + -11 -11 -8 + -11 -12 -9 + -9 27 11 + 13 -2 5 + -8 -11 -4 + 17 -5 20 + -5 -8 -25 + 28 1 -10 + -3 13 18 + -5 -11 -1 + 17 0 2 + -3 -9 -11 + -8 -5 -3 + 12 -13 -12 + -2 3 -19 + 3 3 0 + -13 4 -9 + -5 -5 -12 + -20 8 -5 + 6 -15 -22 + -3 -6 8 + 2 -7 3 + 6 -14 10 + 12 29 4 + 11 11 -9 + 11 14 1 + 0 18 2 + -10 2 -10 + 7 -3 -23 + 28 4 -20 + 13 -3 23 + -4 3 -1 + -21 -11 0 + -2 -7 15 + -11 -5 -7 + -17 4 7 + 5 -2 -7 + 13 18 8 + 6 -11 6 + 23 -8 -13 + -20 10 -13 + 15 -13 9 + -17 15 0 + 5 -6 -4 + -23 4 -12 + -13 -1 5 + 22 6 16 + 3 6 17 + -13 -24 -3 + -16 5 -3 + -15 4 19 + -13 13 -11 + 12 13 -13 + 18 -24 25 + -16 22 17 + 1 4 0 + 17 -24 -6 + 26 -5 0 + -18 8 -2 + -10 4 -20 + 16 20 8 + -11 10 5 + 6 9 2 + -14 -2 -18 + -10 -14 -18 + -23 -7 15 + 12 4 14 + 5 13 4 + -8 21 9 + 2 5 3 + -1 -16 -12 + 13 5 -6 + -11 -5 -10 + 5 3 -23 + 15 -10 9 + -10 1 -8 + 5 9 -13 + -19 3 2 + -19 14 27 + 4 10 -8 + -11 -8 -1 + -10 5 13 + -16 -6 -4 + -18 2 14 + 16 2 -4 + 16 5 -1 + -7 6 6 + 21 11 11 + 4 1 15 + -18 14 9 + 4 18 -21 + 15 3 -1 + -9 16 11 + -5 -14 4 + -12 12 -5 + -14 8 15 + 4 22 17 + -6 4 -5 + -13 0 7 + 26 -11 6 + -11 -11 -24 + 6 24 18 + 3 -9 4 + -2 -6 10 + -3 10 -7 + 12 8 5 + -10 10 13 + 12 11 0 + 6 11 2 + 24 0 13 + 19 13 7 + -10 11 -4 + -3 -11 -5 + -15 0 18 + -12 13 1 + 6 1 12 + 0 9 -8 + 14 -10 -16 + -6 8 -9 + -5 -7 -8 + -5 -13 -15 + 8 -17 -24 + 11 -8 2 + 6 -3 7 + 3 7 16 + 3 -3 -10 + -11 7 -3 + 24 -10 -17 + 14 -9 -15 + -9 -6 -16 + -1 -1 13 + 4 5 -8 + 3 3 9 + 13 2 -14 + 9 -5 -3 + 23 -13 -10 + -3 25 11 + 0 -9 -19 + -9 -6 14 + -6 13 -11 + -8 -6 1 + 17 -3 -23 + 5 13 -4 + -3 -7 -10 + 14 -13 12 + -5 6 -20 + 1 -14 -15 + 13 -8 16 + 8 -1 -10 + 11 2 -6 + -7 -13 3 + 2 -4 -25 + 13 -1 1 + -23 -5 2 + 4 -18 -7 + -1 -10 23 + 4 -9 -2 + -5 5 2 + 13 9 -10 + 12 4 4 + 13 -3 -11 + 7 -11 0 + 3 -5 11 + -16 17 13 + -8 0 5 + -8 -12 -6 + 5 -5 8 + -5 -14 14 + -14 -19 -6 + -10 12 -14 + -15 7 -20 + -16 6 3 + -18 5 6 + 7 8 -4 + -9 11 17 + -12 0 -14 + 22 -1 3 + -14 -1 3 + -7 -7 17 + -1 -2 14 + -5 -10 -13 + 1 -7 -16 + 13 4 -4 + 14 -4 -10 + -9 1 -5 + 10 12 -4 + -14 3 -5 + -14 -24 1 + -7 12 -7 + 14 -18 5 + -7 9 13 + 15 9 -8 + -2 -7 5 + -5 -3 3 + -2 -1 -6 + 7 6 -1 + -2 6 -6 + 1 4 8 + -2 -8 3 + 9 12 10 + 11 -15 -6 + 12 18 9 + 6 -8 6 + 14 10 -8 + 1 1 6 + 11 12 -24 + 8 -20 -6 + 13 -20 -19 + 9 -6 -3 + 4 9 -3 + -5 -19 5 + -16 -2 -18 + -9 -7 -8 + -16 -16 8 + -2 -6 -18 + 0 -13 -5 + -3 0 -10 + 4 14 14 + 1 -1 -13 + -6 -6 -15 + -12 -4 -3 + 7 -10 3 + 11 -3 -8 + -6 9 -8 + -15 8 1 + 20 10 -5 + 0 25 1 + -17 -9 5 + 9 -8 13 + 8 3 -6 + -1 -16 -2 + 9 -9 -8 + 14 -14 -21 + -8 -12 -17 + -7 7 -26 + 1 -14 4 + 6 11 0 + -16 -12 2 + 8 -14 -24 + 13 14 -3 + 2 3 -8 + -8 2 -5 + -5 -8 6 + 3 1 4 + 13 4 -5 + 6 10 9 + 16 -7 0 + 4 1 7 + -13 2 17 + 8 -13 -6 + 12 22 19 + 11 -5 4 + 20 -9 -18 + -3 0 -9 + 1 -1 17 + 18 6 2 + -11 2 1 + 9 2 -6 + -2 14 10 + -3 17 17 + -5 7 -10 + 6 -17 -10 + -14 6 12 + 6 -9 -13 + -2 -9 17 + 4 -12 -14 + 4 -13 11 + -8 -9 -11 + -1 4 -17 + -20 -10 15 + -10 2 14 + -23 -17 13 + 5 18 8 + -22 -6 2 + 23 -11 -5 + -4 5 8 + 18 16 -4 + -12 22 -10 + 21 4 -4 + 10 8 8 + 8 -7 -9 + 2 -15 16 + -14 -9 -5 + 7 -26 -3 + -22 7 -1 + -7 6 -12 + 24 15 12 + -6 -7 9 + 9 -10 9 + 21 -5 -18 + 1 -15 -3 + -3 -3 5 + 5 -4 -1 + -19 -8 7 + 12 11 -16 + 10 3 6 + 19 8 6 + -18 -3 13 + 22 -8 21 + -3 1 -2 + 3 -10 -9 + -10 19 6 + 7 12 -5 + 13 -15 -11 + -6 6 -3 + -1 4 0 + -5 2 23 + 12 11 10 + 17 -5 -13 + 12 -7 5 + 7 -22 3 + 19 -3 -12 + -18 -2 10 + -12 -13 12 + 10 0 -6 + 18 -17 12 + 19 -13 6 + -21 -4 9 + 10 6 -1 + 10 12 12 + 6 -13 14 + -8 -12 2 + -6 -4 7 + -11 -1 8 + -21 5 13 + 3 7 -14 + -7 3 2 + -16 15 -21 + 7 1 -17 + 0 -15 21 + -3 -4 -4 + -3 -4 5 + -18 -4 -1 + -9 22 19 + -14 10 -2 + -7 23 9 + 8 -1 12 + -7 10 9 + 8 -7 -14 + 9 -1 5 + -24 4 -4 + 14 16 6 + 4 14 -14 + 10 7 -6 + -7 -8 -2 + -6 -5 9 + 8 19 3 + 8 16 10 + 19 -13 2 + -2 13 -6 + -19 12 -6 + 9 8 11 + 25 -7 -5 + 0 -5 -3 + -9 -14 4 + 3 -9 13 + -11 8 -2 + 14 11 -8 + -8 17 4 + -8 -14 -4 + 6 -4 0 + 7 -15 -7 + 1 16 -21 + -12 7 -5 + -16 2 4 + -19 14 -13 + -20 8 -20 + 8 11 16 + -4 19 -7 + -2 13 16 + -4 -3 12 + -16 -10 3 + 10 -16 -9 + -26 23 -17 + 4 4 -4 + -18 16 -8 + 0 11 -2 + -18 -7 -13 + 3 8 -5 + 13 -4 20 + 0 -9 0 + -10 -14 6 + -20 28 -5 + -1 11 8 + 11 14 10 + -5 15 3 + -2 16 11 + -5 17 8 + 6 2 13 + -13 -2 15 + -6 3 8 + -11 -1 0 + 7 -3 1 + -9 -11 -6 + -3 18 14 + 7 11 16 + 11 3 -11 + -2 -24 2 + 8 3 6 + 7 3 -15 + -14 -17 15 + 6 -16 12 + -15 1 8 + 3 -1 -14 + 1 9 -1 + -5 -11 -6 + 12 0 6 + 8 0 7 + -6 -7 7 + -6 -7 -2 + 24 -15 -12 + -8 -6 15 + 10 8 -11 + 10 2 25 + -1 -12 -19 + -6 5 -1 + -9 -18 20 + -6 18 -3 + 8 -8 5 + 5 0 -13 + -12 -18 -7 + 0 -8 -10 + 7 6 11 + 2 13 -4 + 19 -4 -1 + 18 20 2 + 3 7 13 + -9 -6 -21 + 0 2 20 + 9 -14 -9 + -9 -15 -10 + 15 6 0 + -1 11 -7 + -11 -8 -25 + -12 7 18 + 18 3 2 + 10 -14 10 + -7 -7 -16 + 16 -2 10 + -6 -3 -11 + 12 -5 16 + 17 1 7 + -1 -2 -5 + 8 0 13 + -18 10 -5 + -2 7 1 + 3 -4 -11 + -22 -9 -5 + 6 -1 -9 + 2 -13 17 + 17 8 -15 + -9 -12 -2 + 14 -7 21 + 5 -14 4 + 0 9 9 + 15 23 16 + 5 -9 4 + 2 -5 0 + -3 -5 14 + 17 -12 -4 + -5 -5 -12 + 6 -6 16 + -4 -11 0 + -13 13 -5 + -18 -14 -18 + -11 6 -2 + -2 6 -2 + 9 -2 16 + -18 -2 15 + -20 9 17 + -10 9 -6 + 3 20 -12 + 4 -3 0 + -12 17 4 + 2 -1 -9 + 8 -12 -16 + 0 -3 7 + -17 -10 15 + -4 -15 -6 + 8 8 6 + -5 6 -13 + -4 -3 -3 + -6 -4 -10 + 1 -13 -2 + -12 -7 -9 + -1 8 -9 + -8 13 3 + -10 -15 24 + 17 11 12 + 0 -21 1 + -4 0 -4 + -6 13 -11 + -9 -5 10 + 3 -17 -8 + -1 -14 -6 + -4 13 8 + 18 2 10 + 15 -7 6 + -3 -19 3 + 5 -5 -11 + 17 10 15 + 10 -3 -3 + 8 -5 10 + 7 9 -2 + -5 12 -13 + 15 13 -20 + -1 19 11 + -8 6 -3 + 0 6 7 + 7 1 -4 + -7 -3 -1 + 8 6 -15 + 5 7 3 + -2 6 6 + 15 14 0 + 19 16 -6 + 14 0 -4 + 12 -12 -19 + 2 -1 -6 + -14 8 -5 + -16 -4 -14 + -7 -6 3 + 16 -2 0 + -9 0 -8 + -6 -12 31 + 4 18 1 + 6 11 -3 + -8 -19 -15 + 10 -1 7 + -19 8 -15 + 3 9 19 + 0 -8 3 + 11 -22 -8 + 7 -3 2 + -7 9 19 + 14 -28 2 + -8 -13 0 + 4 -4 12 + 8 7 15 + 0 21 -2 + 14 10 -13 + 6 12 12 + -4 -2 -6 + 5 -13 -1 + 20 -2 9 + 27 -7 -13 + 10 3 -8 + -7 -21 -10 + -14 -14 -13 + -12 -6 -17 + 8 3 -5 + -6 5 7 + 4 16 14 + -4 8 17 + -1 0 -10 + 10 7 -11 + -20 -3 -2 + 13 2 -9 + -15 -12 11 + 13 24 9 + 11 16 -12 + 6 -12 -22 + -22 7 2 + 0 -20 10 + -7 17 -4 + -14 20 18 + 10 -13 -8 + 10 -31 -13 + -10 -1 -17 + 13 -11 19 + -15 -2 15 + -4 -13 -5 + 14 -10 8 + 4 -16 -9 + -20 7 -4 + 28 -14 -25 + -2 1 4 + -6 -2 -1 + 7 3 15 + -11 9 6 + 8 4 -8 + -18 -28 13 + 17 6 0 + 9 -20 -11 + 4 4 8 + 17 -7 -5 + 3 7 -3 + 4 16 4 + -13 6 -15 + 3 -4 -19 + -11 -8 9 + 4 14 -14 + 14 5 12 + 10 6 11 + -8 6 17 + 6 17 16 + -20 0 10 + -8 -7 -3 + 3 -1 4 + -11 -24 -13 + 3 20 -16 + -12 8 -5 + -6 0 -1 + -10 -3 -2 + -15 1 3 + -3 6 0 + 6 -11 5 + -2 11 -12 + 9 -6 9 + 6 -9 20 + -3 -17 5 + 13 -11 9 + 10 1 7 + 4 -1 0 + 16 -11 5 + 16 -2 -13 + 14 -10 -10 + -5 -11 14 + -4 -7 5 + -19 -8 -1 + 1 28 14 + 5 4 -12 + -11 -2 -3 + 12 -5 18 + 4 -7 -14 + 3 1 -9 + 22 -6 -12 + 10 -11 -4 + -14 -12 3 + -1 -2 0 + 17 -10 12 + 0 9 -2 + -12 -1 5 + 18 5 -13 + -12 8 16 + 8 -8 1 + 10 -18 20 + 9 -13 6 + -16 -1 8 + -3 -7 8 + -7 -2 15 + 5 7 -10 + 10 11 -14 + -8 -2 -2 + 18 -4 0 + 30 -12 16 + 12 -13 7 + 5 6 -14 + -2 -12 -16 + 16 4 6 + 2 -4 4 + -4 13 15 + -14 4 4 + -7 -6 11 + 20 -11 6 + 12 0 3 + 10 -2 11 + 7 -15 16 + 17 -22 12 + -10 -12 3 + -5 -3 -8 + 2 2 16 + -4 9 12 + 22 11 5 + -11 25 -7 + 3 6 3 + -4 16 -8 + -2 14 24 + -10 12 -11 + -9 -6 13 + 6 20 -13 + -6 -16 20 + -7 9 -12 + 10 -12 0 + -11 13 13 + 11 -10 1 + 17 10 0 + 2 -13 2 + 4 -21 10 + -5 -3 -10 + 4 3 21 + 2 6 24 + 6 6 9 + -1 -3 -6 + -15 7 -1 + -5 -8 10 + -6 -6 0 + 3 -18 5 + 10 17 -23 + -11 -17 -6 + -2 18 -5 + -6 -5 -13 + -9 3 13 + -8 6 23 + 9 -11 11 + 4 9 -19 + 7 12 -6 + 19 -5 -9 + 6 11 7 + 6 -3 -2 + -1 4 1 + -5 1 8 + 4 -3 16 + 1 8 -4 + 4 5 -7 + -8 6 -7 + 7 4 5 + -6 -4 -18 + 4 1 -5 + 2 -16 -20 + 1 -15 9 + -4 9 13 + 13 4 -13 + 7 4 7 + 14 16 19 + 2 22 22 + -8 -2 -2 + -7 20 12 + -10 -6 20 + -4 17 -8 + -10 13 -10 + 6 -5 -5 + 10 7 -13 + 5 -17 -10 + -18 7 -1 + 6 5 6 + 8 -12 -6 + -6 -17 -12 + -15 4 -12 + 7 -7 2 + 6 -2 -19 + 11 -11 -16 + -5 -15 -19 + 14 -18 3 + 9 6 1 + 3 -2 6 + 14 2 -20 + 13 -4 8 + 17 4 3 + 13 12 8 + -13 -2 -25 + 25 -17 -14 + 11 -12 -4 + 9 -5 -9 + -9 -2 -11 + -18 -20 11 + -1 -8 -3 + -10 9 -14 + 10 -1 22 + -5 -3 -5 + 12 -15 7 + 12 7 20 + 2 3 -1 + -3 -1 -1 + -12 10 -1 + 24 -7 4 + -9 16 -5 + -8 10 -17 + 11 5 9 + 1 0 4 + 8 0 -8 + -6 2 6 + 16 2 8 + -10 14 -10 + -13 22 -4 + -11 15 18 + 29 17 -16 + 5 15 -6 + -20 2 -3 + -7 4 4 + 9 -4 7 + -8 -14 -13 + -6 -1 -12 + 8 -19 18 + 14 7 -7 + 11 11 25 + 14 -14 -5 + -4 -15 -10 + -13 -7 -12 + 2 4 12 + 20 17 -21 + -7 27 9 + -15 6 -14 + 17 -1 5 + 11 12 9 + 12 5 2 + -7 15 -20 + 1 8 -3 + 10 -12 14 + 8 -21 12 + -1 -3 -2 + -5 -21 -6 + 13 14 19 + -11 -8 8 + 16 12 -18 + -2 -23 -13 + 8 -1 -7 + 10 -12 16 + -10 -9 1 + -17 -4 11 + -10 3 -3 + 9 12 -1 + 15 18 13 + -2 12 -20 + 6 -17 16 + -10 -6 -8 + 7 9 -5 + -22 9 5 + 10 -11 -14 + 4 -6 4 + 6 4 2 + -1 -5 -9 + -9 -18 -11 + -17 6 19 + -12 19 20 + -15 -23 1 + -3 8 -3 + 10 -5 12 + -22 -1 1 + -10 -16 0 + -8 -4 -8 + -16 13 12 + 8 6 11 + -14 -2 -11 + -1 -7 21 + 6 -2 6 + 16 23 2 + -19 0 9 + 10 26 -19 + 8 13 13 + -13 16 -2 + 11 -11 16 + -4 19 12 + 2 18 0 + 30 -13 16 + 4 8 -13 + -4 18 0 + -15 -11 17 + 1 -6 2 + -21 7 -14 + 8 5 -1 + 0 0 4 + 6 19 3 + 17 6 -14 + -1 15 6 + 5 6 -9 + 8 4 6 + -18 5 11 + 9 -15 10 + -6 3 18 + 9 10 -9 + 1 2 5 + 6 -5 -17 + 9 0 -17 + 12 2 -14 + 8 -16 8 + 9 -14 18 + 14 8 -10 + 25 -2 3 + -14 -29 11 + 10 19 -10 + -6 -4 -14 + 5 18 -11 + 8 -19 -15 + -3 -8 -28 + 0 -1 11 + -18 -6 -5 + -11 -11 0 + -19 -13 8 + 23 23 5 + -5 -6 -16 + 2 18 5 + -7 3 1 + -17 -12 8 + 17 1 -2 + -1 -20 -9 + -16 0 5 + 14 7 -10 + -11 4 6 + -10 10 20 + -7 -6 -10 + -11 6 -12 + 18 -2 -5 + 1 -13 -10 + 3 -20 0 + -16 -17 7 + 7 1 2 + -20 -12 6 + 4 -9 -1 + -8 10 -10 + -3 3 6 + -11 -8 15 + -9 13 -6 + 26 8 -8 + -3 -20 -24 + -19 -1 19 + -5 -19 8 + 0 18 -2 + 9 -17 -9 + -22 -14 13 + 4 -14 5 + -15 2 -16 + 22 -1 -17 + -14 -8 -4 + 5 1 -21 + 19 -18 -4 + 5 14 16 + 8 -7 -14 + -11 -3 -18 + 6 1 -18 + 2 -1 6 + -8 -6 12 + -12 10 14 + -16 6 -9 + -3 12 1 + 5 4 -5 + 1 4 18 + -6 -6 -15 + -10 9 -9 + -4 -2 -6 + -15 15 -13 + 1 21 1 + 4 1 12 + 15 -14 17 + 12 -4 -3 + -7 -23 1 + -13 10 -18 + -16 12 -16 + 3 -15 -3 + 9 0 -16 + 14 1 -7 + 4 1 1 + 16 11 5 + -4 9 -5 + -11 -11 -18 + -7 -12 -4 + -13 11 5 + -3 4 4 + 18 -3 2 + 13 3 4 + 7 -13 26 + 13 -20 11 + 5 -14 -15 + -2 -8 3 + 0 -12 -14 + 20 13 -26 + 0 13 -10 + -9 -12 23 + 13 -10 12 + -14 -4 -4 + 13 0 9 + -13 -24 8 + 6 5 11 + 9 1 10 + 6 0 2 + 9 7 -2 + 1 1 -19 + 13 -8 11 + 14 -3 1 + 14 22 -10 + 16 5 -1 + 3 -19 -1 + 15 2 -10 + -3 -14 9 + 12 -7 -16 + 9 -19 10 + 2 -10 6 + 2 14 -20 + -15 1 17 + -8 -11 4 + -14 23 15 + 3 4 16 + -6 10 2 + -10 21 -2 + -14 -9 -2 + 12 -9 3 + 3 10 11 + 30 -6 -7 + -16 -9 2 + 13 6 -28 + 8 -2 -17 + 5 6 5 + -6 13 -13 + -17 -12 10 + 4 18 6 + 12 -7 -7 + 2 -7 -4 + 1 -3 -15 + -16 3 13 + 4 14 8 + 9 14 2 + -13 9 25 + -9 17 -7 + 3 -4 17 + -5 -7 -5 + 3 19 7 + -6 9 -2 + 5 -19 9 + 13 3 22 + 13 6 9 + 8 -8 -4 + -13 3 -2 + 19 13 16 + -9 -19 16 + -5 -14 11 + 17 -14 11 + 1 13 -5 + -3 -1 -1 + 4 3 17 + -20 18 -5 + 4 12 -14 + 23 -5 16 + 14 -2 3 + -3 13 0 + -11 3 6 + 2 13 -1 + -6 6 -2 + 0 14 3 + 8 -16 17 + -15 2 -18 + -16 -9 5 + 12 24 -12 + -3 7 -4 + -3 13 10 + 1 17 -14 + 0 -25 -12 + -3 -6 -13 + 0 4 17 + -6 13 -3 + 6 8 0 + -12 3 -6 + -3 -3 1 + 2 1 18 + -9 6 10 + -6 6 7 + 8 5 -14 + 9 9 1 + 6 -10 10 + 11 5 -2 + 8 2 5 + 17 13 -4 + -8 -16 13 + -8 15 10 + -10 -9 1 + -2 -5 14 + 1 2 -17 + -5 8 -18 + 10 14 3 + -16 -12 5 + -2 -1 10 + -4 21 -6 + -10 15 -4 + -26 -5 -2 + -17 15 7 + -9 -16 15 + -8 -3 19 + 6 -4 -13 + -3 13 -11 + 15 -3 -21 + -22 4 -10 + -5 -31 -14 + 17 -9 0 + -12 8 -10 + -1 -6 -5 + -19 10 12 + 7 10 -1 + -7 2 7 + 4 4 -9 + -14 16 -10 + -10 17 -10 + 8 -12 8 + -5 11 14 + -8 10 -13 + 8 -9 7 + 14 4 15 + -21 12 19 + 19 17 2 + 3 1 -1 + 0 -21 1 + 0 9 -29 + -6 7 -13 + 0 4 11 + 7 16 4 + -3 -17 13 + 9 3 7 + -1 13 3 + 17 -6 9 + -3 -9 7 + 5 3 5 + -4 -8 8 + 9 5 0 + 14 -16 -7 + 12 3 -3 + 5 -15 -10 + 10 -6 0 + -13 -8 9 + 1 5 2 + 3 -2 5 + -9 11 23 + -3 3 9 + -5 5 14 + 7 -6 -8 + 6 -13 -5 + -1 2 5 + 10 8 -11 + -7 22 14 + -5 -13 29 + 6 6 -6 + -7 -12 -21 + 14 18 -9 + 1 2 8 + 13 -1 -10 + 15 -22 11 + 7 -15 11 + -11 15 1 + -15 5 15 + 11 12 6 + 8 -12 -9 + -18 2 -20 + -16 -25 5 + -15 8 1 + 31 -4 2 + 5 -1 -1 + 1 17 7 + -17 9 -4 + -3 -7 -2 + 7 15 21 + -10 -26 13 + 1 -3 -5 + -12 20 15 + -11 -15 11 + 19 2 7 + 14 6 13 + -3 8 16 + 1 -14 11 + -9 4 -7 + 9 -7 5 + -10 -10 12 + -8 -31 8 + -21 1 11 + -12 -3 4 + -15 -12 12 + -6 0 0 + -11 -17 -5 + 0 -21 10 + 17 13 -11 + 7 -13 -4 + -8 -11 -6 + -11 -31 5 + -15 -4 18 + -2 9 12 + -11 -15 -9 + -2 -21 2 + -19 -11 -2 + -8 -12 7 + 6 14 -24 + 7 -12 4 + -6 -14 -14 + 1 4 -8 + 8 -10 15 + -27 4 -2 + -22 -11 -3 + -7 -10 2 + 20 -6 2 + 2 -13 11 + -24 -1 13 + 3 11 -13 + -3 4 -8 + -4 4 8 + 7 -4 -2 + 1 1 -7 + -11 -6 1 + -7 2 -25 + -8 12 13 + 2 9 11 + -17 -3 13 + -18 -16 -3 + -4 10 -9 + -3 -18 -5 + 16 13 -5 + -12 18 -18 + 13 13 12 + -12 -17 5 + -6 -2 -2 + -5 -5 16 + -5 -4 16 + 17 2 1 + -18 6 6 + -20 -10 12 + 1 9 1 + -2 -3 -8 + -9 -3 9 + -14 -13 -3 + -10 -6 3 + -8 5 0 + 7 -7 6 + 16 -1 0 + -16 -20 -11 + -9 2 -7 + 24 12 -4 + 5 -1 9 + 11 4 -12 + -3 -9 -7 + -2 -2 9 + -6 0 16 + -18 2 -10 + -8 8 2 + -2 -7 -10 + -8 26 13 + 11 -10 -1 + -10 -5 5 + -5 1 3 + -16 -1 -12 + 11 12 -6 + 2 -6 -6 + -16 -11 0 + -11 6 -12 + 0 -9 13 + -7 -12 4 + 0 -9 2 + 14 -4 2 + -4 -15 11 + 0 -15 15 + 7 11 -3 + 5 -21 1 + 2 0 2 + -14 5 6 + -7 4 13 + -23 21 13 + -16 -1 16 + -12 -8 16 + 18 21 -1 + -14 -11 6 + -12 12 6 + -6 -4 -9 + 22 -21 13 + 3 8 9 + 5 -23 -10 + 14 -22 -7 + -14 11 6 + -12 19 6 + 21 15 7 + 1 -14 14 + 6 7 12 + -12 -12 -22 + -11 -10 -18 + 10 -6 15 + 21 -6 20 + 12 -23 -6 + 18 14 11 + 11 16 4 + 0 10 -3 + -10 7 22 + 0 -20 2 + -4 5 -9 + 4 -12 2 + 7 -3 13 + -13 -16 -11 + -6 -10 9 + -14 -8 21 + -14 -25 -1 + 26 -8 -11 + -5 4 14 + -21 -4 0 + 0 -3 8 + -10 8 -4 + 2 -2 -10 + 13 0 7 + 13 0 -9 + 14 5 12 + 10 -16 -2 + -4 -2 16 + -10 8 16 + 4 -10 1 + 8 21 -2 + 3 -7 20 + -13 -13 -8 + -24 11 6 + 10 0 11 + -17 1 8 + -18 16 -1 + 7 -18 -14 + -8 14 14 + -10 5 -8 + -5 -17 -7 + 16 20 -17 + 6 10 -4 + 13 15 -10 + 4 18 14 + -6 3 16 + 7 -6 15 + 21 -7 8 + -19 4 12 + 1 18 -13 + -10 17 -22 + 10 30 -8 + 9 6 -11 + 12 -1 0 + 6 -2 -10 + 12 8 11 + 2 -14 2 + -2 -14 -4 + -10 -1 -1 + -1 -3 -4 + -6 -3 -6 + 9 9 -14 + -11 15 -1 + 10 3 6 + 1 17 0 + 0 13 6 + 14 3 13 + -15 -18 11 + 8 15 -16 + 5 -11 13 + -24 -14 -15 + 17 18 3 + 16 2 7 + 2 20 0 + 24 6 -2 + -8 -5 7 + 0 -6 2 + -10 -6 -22 + 2 -5 -19 + 2 8 -7 + -7 -5 -6 + 12 11 -1 + -2 10 -16 + -1 13 -5 + -7 18 -11 + 10 22 -11 + 7 14 4 + -2 8 -25 + -5 18 -1 + 13 11 -9 + 3 -18 23 + -7 15 14 + -5 6 -8 + -9 -11 -7 + -6 -17 15 + -2 14 -4 + -17 5 7 + -1 12 -12 + -10 12 -15 + -1 6 2 + 2 7 -1 + 13 -15 -15 + 0 -10 9 + 16 -4 16 + -3 1 -3 + 13 -16 -12 + -5 -15 8 + -9 1 14 + 1 -3 6 + -10 8 -1 + -15 -1 13 + 8 -8 12 + -16 -7 -8 + 9 10 -2 + -11 7 0 + -7 3 -13 + 8 2 17 + -17 -1 10 + 7 5 -6 + 11 11 -14 + 18 -13 7 + 4 16 10 + -1 -1 16 + 13 6 -10 + 3 6 -6 + 9 1 12 + 6 11 -1 + 16 0 -11 + -10 1 -11 + -6 14 16 + -17 4 19 + 7 -8 12 + -22 -14 -7 + -2 0 4 + -21 2 -8 + -9 -20 -6 + -12 4 -4 + 5 3 7 + 4 14 2 + 17 -4 8 + 24 3 1 + -8 -10 -17 + -5 4 -9 + -8 18 -18 + -20 4 -5 + -6 12 14 + 2 -12 3 + 24 9 -12 + 6 11 8 + -17 11 -3 + 15 -12 2 + -11 -11 0 + -13 5 5 + -17 21 -7 + 9 -9 0 + 8 -31 0 + 9 12 19 + 21 22 -9 + 12 -3 -17 + -9 -13 13 + 6 23 -3 + -3 10 17 + -2 11 -24 + 18 10 5 + 12 -5 4 + 15 27 -7 + 11 3 -3 + -1 -13 -11 + 4 -3 -3 + 16 -18 -3 + 4 -9 6 + -14 1 16 + 6 9 11 + -28 23 9 + 0 -1 -2 + 8 7 -11 + 8 10 0 + 1 -4 18 + -3 -12 14 + -2 -15 -18 + -13 8 -8 + 14 3 10 + 1 -7 13 + -7 -12 -12 + -18 2 -3 + 19 -13 11 + -11 11 7 + -13 -16 16 + -10 -27 -14 + -6 12 22 + 2 12 13 + 17 7 14 + -10 17 -18 + -22 11 -8 + 3 5 -8 + -4 -15 20 + -6 -11 1 + 14 -11 13 + 9 -6 -4 + 1 -19 6 + -11 -18 -10 + -16 -4 22 + -13 17 11 + -1 9 6 + -15 -6 2 + 8 3 5 + -15 8 -20 + -14 10 -14 + -25 -14 -6 + 15 6 7 + 4 -12 -16 + -7 14 17 + 5 0 15 + -13 -3 -9 + 13 2 -6 + 0 0 5 + 15 -13 -2 + 13 -14 -6 + 1 -10 9 + -17 4 12 + 12 -19 1 + -7 -10 -29 + 6 -3 2 + 20 -6 2 + -21 3 18 + 1 -3 -6 + 24 -10 14 + 8 12 -14 + -1 -19 4 + -8 16 2 + -2 11 -13 + 14 9 5 + -11 -5 1 + 5 -12 13 + 4 -8 3 + 11 -5 -2 + 20 18 -8 + 8 10 -3 + -3 -6 -6 + 10 -9 -16 + 2 -5 8 + 14 -11 -19 + -16 4 4 + 18 -2 -24 + -9 -3 -1 + -5 -16 -10 + -5 8 -2 + -10 -13 2 + -6 9 8 + -3 4 0 + -3 5 18 + -1 13 -5 + 8 -6 -4 + 0 -13 6 + -7 -5 1 + -6 -17 14 + 14 6 -9 + 0 12 17 + 4 11 6 + -1 0 -19 + -1 -9 8 + 3 -12 4 + -18 -3 12 + -20 -7 -4 + -2 -6 -12 + -9 5 10 + 1 -5 -3 + 12 -11 15 + 10 -8 -5 + -19 -8 -24 + -4 -17 -9 + 15 -24 -11 + -12 -6 14 + -18 2 11 + 5 -17 -16 + 7 4 1 + -13 -8 -17 + -10 -12 8 + -2 -17 -10 + -5 -5 -6 + 0 -13 0 + 18 20 12 + 4 -8 -13 + 10 6 6 + -15 10 -2 + -6 2 -8 + 7 14 3 + -2 7 -8 + 14 5 -5 + -5 1 -10 + 9 15 7 + 22 3 0 + 15 -3 3 + -11 -14 31 + 3 14 -6 + -10 -18 20 + -14 9 -9 + 12 0 -10 + 23 5 -15 + 3 -8 -5 + 9 8 14 + 17 -21 -9 + 11 -10 18 + 2 -5 -14 + 1 12 -2 + -5 -10 0 + 9 17 10 + -4 6 16 + -5 16 2 + -14 -13 -7 + -16 -12 -9 + 2 -5 -5 + 1 2 -6 + -3 -6 -2 + 6 21 1 + -4 0 -7 + 20 19 10 + -4 -2 -5 + 9 0 -2 + 9 20 9 + -1 9 -31 + -18 10 -12 + 8 5 -3 + 7 17 13 + 12 6 14 + -12 14 15 + 16 -18 -9 + -11 3 22 + -17 6 -11 + 20 -18 -14 + 13 10 -10 + 3 23 19 + 1 -5 -15 + -10 -9 13 + -14 6 -6 + 5 -17 13 + 2 2 13 + -19 4 15 + 5 -3 7 + -9 1 -6 + 15 -9 -6 + -4 -3 0 + -3 3 5 + 1 16 -3 + 0 -4 -5 + 12 5 7 + 4 2 6 + -7 13 -11 + 2 4 7 + -11 6 2 + 16 3 -2 + -2 3 -5 + 11 -12 15 + 8 -6 10 + 5 -9 20 + -11 10 13 + 11 -7 -5 + 20 -14 -7 + -8 15 5 + -7 13 10 + 0 -15 0 + -16 -13 -2 + -7 13 -27 + -3 -12 18 + 17 -13 9 + -6 0 9 + -4 -10 -24 + 19 -14 -11 + -11 13 -5 + 17 -8 20 + 16 -2 13 + 2 -7 8 + 0 -2 -7 + 2 -14 6 + 0 -8 9 + 2 -4 4 + -12 -13 -6 + 0 -7 17 + 4 -23 6 + 16 -2 -20 + 13 6 -8 + -18 -11 10 + 20 -1 1 + -1 3 -2 + -13 9 4 + 20 -8 1 + -5 -4 -4 + -8 2 -5 + 7 1 -6 + 22 -7 -22 + -11 6 -5 + -19 -6 13 + -10 -13 -7 + 10 -7 8 + -7 -3 -14 + -6 17 -19 + 24 12 4 + -7 13 -4 + 11 -29 6 + -6 16 1 + -6 -10 -12 + 13 7 15 + 2 -15 4 + -10 -3 4 + -8 -12 2 + 16 13 12 + 7 4 -3 + 0 28 -8 + -5 -5 5 + -26 -23 -12 + 1 8 3 + -10 -3 14 + -7 -3 6 + -10 8 2 + 15 -9 11 + -16 -5 17 + -1 6 -3 + 3 6 4 + -18 5 6 + -5 -11 0 + 9 -9 -2 + 7 12 6 + -6 1 1 + 1 15 -10 + -5 -13 16 + -14 -13 9 + 14 16 -15 + -10 0 7 + -3 -3 -18 + 11 2 -23 + 4 -4 6 + 5 -3 6 + 15 3 -11 + -14 -4 11 + -7 -2 6 + 6 -14 6 + -24 -4 11 + 4 0 16 + 0 10 -12 + 2 -1 -4 + 17 12 -3 + 3 -5 0 + -6 7 18 + 12 -8 18 + -2 5 7 + 0 -2 7 + -14 -4 -13 + -4 -7 14 + 8 -2 -11 + 0 18 -25 + 9 -19 14 + 6 -9 -5 + 15 5 -5 + -7 -4 0 + -2 4 13 + -9 9 -11 + 2 0 -5 + 8 8 5 + -14 -4 -10 + 25 11 -1 + 0 -6 -5 + -25 -9 7 + -3 26 -18 + 17 16 11 + 3 0 -8 + 15 12 3 + -2 -18 -1 + -12 15 3 + 12 9 -13 + 9 1 -3 + -4 1 -7 + 9 -2 10 + 1 7 -13 + 4 15 18 + -3 22 2 + -13 13 -3 + -8 9 11 + -7 -13 17 + 22 3 -8 + 15 8 1 + -27 -5 -2 + 20 -12 -16 + 14 0 12 + 7 -19 -4 + -14 -26 -1 + -6 -14 10 + -1 6 10 + 6 -10 -7 + 7 -8 -18 + 13 9 -12 + -1 18 -7 + -5 -9 19 + 3 -10 8 + -10 5 -9 + 15 0 -1 + 3 -10 1 + -11 8 10 + 7 17 9 + 6 -5 3 + 10 7 6 + 1 -1 5 + 17 9 3 + 1 -14 1 + 4 10 -2 + 9 4 5 + -12 -2 -3 + 14 0 11 + 11 -17 10 + -9 26 -14 + -12 -19 3 + 9 10 11 + 6 19 15 + -6 -8 4 + -2 15 8 + -18 2 -7 + -7 12 -14 + -13 0 -26 + 0 3 21 + 13 8 4 + 4 -22 0 + -15 15 -14 + 15 -6 12 + -15 7 2 + -8 -5 10 + -7 -1 -10 + -1 0 7 + 9 2 2 + 13 -11 2 + 13 5 16 + -17 -13 -1 + 8 5 -11 + -3 -1 7 + -2 9 1 + 27 -12 -10 + 4 2 3 + -8 -21 -2 + -3 -4 -5 + -5 -2 -18 + -1 5 8 + 13 -1 -2 + -11 -3 -17 + 6 -3 -2 + 1 -22 -13 + -5 -5 -14 + 1 -9 -12 + 6 -5 -20 + 16 -13 5 + -14 13 18 + 4 -12 14 + 15 -5 8 + 1 -4 -9 + -7 -24 -13 + -5 -4 1 + 4 5 -10 + 14 8 4 + 13 -8 -4 + 15 -11 -16 + -4 27 15 + -2 -4 -5 + 1 -13 9 + -2 -5 -3 + -10 3 -4 + 16 11 6 + 19 4 14 + -13 7 5 + 11 5 12 + 2 12 7 + 0 1 23 + -6 2 -7 + 7 -7 9 + 2 14 14 + -24 -6 -15 + -1 -14 -13 + -8 -2 6 + 6 17 13 + 15 -19 9 + 10 8 13 + 4 -4 3 + 7 -6 -2 + 12 3 11 + 13 21 8 + 6 12 17 + -4 22 -2 + 10 -4 17 + -2 1 -8 + -19 -11 0 + 6 -4 1 + 20 -22 -21 + 8 -29 -11 + 11 10 -12 + 7 3 -4 + -6 -12 22 + -10 18 7 + -6 -10 11 + 13 -3 20 + 7 12 -16 + -4 -9 -6 + -17 28 14 + -12 14 3 + 4 0 19 + 3 -3 17 + 1 15 9 + -5 -12 -6 + 6 10 -3 + -1 -11 4 + -4 5 -1 + 8 -6 -4 + -6 -9 5 + 18 -8 -2 + 10 -1 7 + -1 10 6 + -17 -4 14 + -12 -18 -1 + 1 0 -9 + -5 15 1 + -5 3 -5 + 2 10 -2 + 15 -16 -12 + -5 25 17 + 2 -1 -14 + -1 10 18 + 17 -14 17 + -11 -1 -14 + -18 11 0 + 14 15 -7 + -11 14 -14 + -18 20 -10 + 20 -12 -4 + -18 -6 -11 + 13 3 7 + -8 -5 8 + 15 -1 -17 + -3 7 -10 + 8 10 1 + 9 -3 -10 + 0 3 -4 + -2 -3 12 + -19 -4 9 + 1 -16 9 + 2 2 -6 + 13 -7 -14 + -4 -4 -6 + -17 -4 11 + -17 13 5 + -4 5 -1 + 7 -2 -5 + 5 -5 -12 + -5 -5 16 + -9 17 14 + 9 5 -7 + 7 -25 -1 + 8 -1 2 + -1 -10 -7 + 15 6 3 + 28 6 -5 + -19 3 8 + 17 -12 -9 + 4 14 -7 + -9 -14 -12 + 3 -14 -21 + -30 9 -4 + 1 -18 -22 + -9 3 -16 + -4 -4 -2 + -4 -6 13 + -1 6 2 + -8 -5 8 + -21 -13 -10 + -19 -4 7 + -3 -4 -6 + 13 -26 -19 + 10 2 -4 + -10 8 2 + 19 -3 20 + 2 -15 -5 + -9 -16 15 + 15 10 -9 + -10 7 9 + -13 -3 -20 + 3 3 -16 + 12 10 14 + -15 1 -14 + -16 8 1 + -24 -21 14 + -6 12 -5 + -1 -2 -3 + -9 12 -11 + -3 15 3 + 5 4 -9 + 20 9 6 + 8 7 -6 + 0 -22 5 + 11 -7 -23 + 17 -2 -7 + -8 -20 14 + 6 9 -8 + 12 11 7 + 6 4 17 + 15 -18 -1 + 12 -11 13 + -3 -4 -10 + -6 -6 8 + 6 -8 -13 + 15 -7 -9 + -1 -3 -8 + 4 4 2 + 12 16 14 + 2 -10 16 + -8 -2 6 + 20 13 9 + -14 -12 10 + -16 19 -8 + 15 12 7 + 23 1 -9 + 2 14 9 + -13 26 -17 + -20 5 -18 + 8 12 -3 + -16 3 -1 + 8 9 2 + -1 -8 -26 + 2 -12 4 + 11 5 -8 + -18 13 8 + 10 -9 -12 + -1 -12 -11 + -1 1 4 + 16 1 -6 + 0 4 12 + 12 -8 18 + -16 11 -12 + 11 -6 17 + 2 0 -15 + -17 -14 9 + -22 4 -18 + -19 -3 -2 + 1 -8 -2 + 0 5 0 + -2 -15 -2 + -16 10 0 + -10 2 -4 + -5 6 -15 + -1 -8 2 + -11 -5 5 + -7 -6 -2 + -2 2 6 + 18 18 -4 + 7 10 6 + -7 -9 -9 + -16 0 19 + -14 4 7 + 31 -3 -7 + 7 -9 1 + -9 -4 -6 + -9 8 7 + -10 4 -10 + -7 11 13 + -7 -12 3 + -14 -9 -3 + 2 -17 3 + 4 -8 16 + 6 -1 -8 + 29 -15 6 + -16 5 -10 + -1 -22 -13 + -18 7 -1 + -12 1 0 + 8 11 -14 + 1 -5 -11 + -13 -11 -21 + 17 -5 4 + -18 -3 -1 + -21 -5 20 + -6 13 -3 + 2 8 17 + 11 19 7 + 4 11 -25 + 15 0 -14 + 8 14 -19 + 3 -19 -24 + 16 7 -7 + 1 6 -12 + -25 13 -11 + 12 3 -19 + -20 12 7 + -5 9 6 + 5 -8 9 + 16 10 10 + 13 12 -3 + -14 -11 10 + -7 -2 -15 + -25 0 10 + 15 18 -2 + 10 9 2 + -16 -13 4 + 8 -10 5 + 3 10 -11 + 5 6 0 + -4 6 -9 + -5 -6 17 + 21 -6 -19 + -6 -18 0 + -9 5 -13 + 0 6 16 + -16 -15 8 + 14 17 -14 + 1 21 12 + -2 9 -6 + 9 -10 2 + -9 12 4 + -8 18 4 + 7 9 -11 + -7 4 -14 + -16 -5 -10 + 6 -14 2 + -17 -18 2 + 1 -28 8 + 1 8 9 + -19 -5 2 + -6 -12 -16 + 2 8 8 + 20 -18 -9 + -19 21 1 + -5 -10 5 + -12 2 -3 + -17 13 15 + -17 -4 5 + -2 8 -17 + 14 -11 4 + 5 24 -2 + -16 -24 -2 + 12 1 2 + 7 -4 -13 + 1 -6 15 + -4 11 8 + -10 6 10 + 2 8 8 + 6 -6 -7 + 14 -7 -11 + 17 10 15 + 8 -6 7 + -15 -3 5 + 5 -17 23 + 12 9 8 + 9 -7 10 + -12 10 3 + 5 -1 3 + 9 -10 9 + -8 6 -19 + 7 13 22 + 4 -2 1 + 0 -17 -12 + -19 9 -11 + -16 15 4 + 16 20 -11 + 13 -10 -6 + 15 -18 -7 + -13 4 -6 + 0 14 0 + -3 3 -6 + 12 4 27 + -24 3 -3 + -10 11 -1 + -9 -4 2 + -1 -24 4 + -19 -2 -8 + 12 11 -1 + -13 -8 9 + 6 -6 -13 + -18 5 1 + 1 10 8 + -19 21 8 + 1 -11 -17 + -3 17 3 + -1 4 -8 + -14 8 10 + 4 -6 18 + 20 -1 11 + -11 -12 -13 + 11 -8 -2 + -9 20 -9 + -11 -12 -1 + 21 -1 15 + 12 -3 5 + -1 13 -4 + 3 -19 -10 + 13 -22 8 + 12 -17 -8 + 1 -3 -3 + 2 -1 -3 + -16 -8 -6 + 8 17 -7 + -7 14 -26 + 8 -20 -3 + 6 -12 -12 + 4 1 8 + -2 0 4 + 9 12 -5 + -4 -15 -3 + -2 19 -6 + -27 -1 -11 + -5 -8 12 + -7 -5 18 + -4 -23 6 + -5 -4 1 + 13 14 5 + -11 -10 22 + -2 -12 2 + -3 -6 -3 + -11 -14 2 + 13 -2 -16 + 4 -13 -23 + 13 -1 -16 + 5 4 -11 + 28 8 16 + 29 7 11 + 15 -1 -13 + -16 -12 -2 + -12 -10 9 + 11 -1 -7 + 14 -11 10 + -3 -6 0 + 14 -9 8 + -11 -8 -1 + 2 8 -10 + -8 -9 12 + -2 30 -7 + 2 11 14 + 10 -4 23 + -8 11 -4 + 3 -14 -21 + 25 16 4 + 6 22 -3 + -1 20 -7 + 11 -9 17 + 21 23 -6 + -4 -14 -7 + 1 -14 -17 + -4 -11 3 + 6 5 -9 + 11 -13 -17 + 8 5 5 + -16 29 24 + 7 1 16 + -19 4 -8 + 6 -31 -12 + -4 7 17 + 15 -6 21 + 5 6 -11 + 11 -1 -4 + -6 3 0 + 4 -3 2 + -2 -15 -7 + -12 22 -2 + 1 20 -3 + 19 -16 -1 + -22 11 14 + -16 -10 20 + -7 4 -3 + 9 -5 -5 + -13 15 6 + 5 17 -9 + 19 -19 22 + 6 -24 17 + -15 18 -17 + 16 -9 15 + 0 8 -22 + 7 -1 10 + 0 -7 17 + -5 -5 -22 + 0 -7 13 + 5 -3 -10 + -9 -24 24 + -3 -6 -13 + 14 -8 -7 + 13 -13 -5 + -8 5 6 + -12 -13 19 + 26 10 -11 + 15 5 -21 + 13 -10 -11 + 15 -14 2 + 1 0 9 + 17 -8 -3 + 20 -13 -15 + -20 17 13 + 13 -20 -10 + -4 6 -17 + 16 -8 1 + 13 14 10 + 23 18 -8 + 6 -4 -10 + 3 -24 -9 + 3 6 -8 + 20 -5 9 + -8 8 14 + -2 -5 14 + -9 -5 7 + -3 -8 12 + 5 16 10 + 15 -7 6 + -17 10 -9 + 1 -11 7 + 9 -7 11 + -11 10 -8 + 18 -16 -1 + -12 10 29 + -7 15 -9 + 15 17 25 + -14 10 -9 + -9 -5 -3 + -6 -3 -15 + -1 -5 1 + -1 3 13 + -8 -13 -7 + 13 3 3 + 1 -31 -5 + -1 -7 -5 + 4 14 2 + -4 5 -6 + -11 -12 -8 + 9 -5 10 + -6 1 -19 + -5 4 -19 + -16 -7 -6 + 2 -1 14 + -13 11 -19 + -2 0 8 + -15 -7 0 + -5 -9 4 + -7 12 2 + -10 -14 6 + 10 -23 -1 + -2 -5 -10 + 14 13 4 + -3 -3 7 + -10 0 11 + 19 -2 13 + 1 -8 -14 + 5 15 -17 + 0 -13 -14 + 4 8 12 + -19 -18 12 + 8 -22 -11 + 13 1 1 + 8 -8 12 + -7 -7 -17 + 0 -3 -3 + -15 4 -2 + 11 1 -3 + 10 3 5 + -16 -22 -14 + -1 11 -16 + -15 -10 17 + -11 16 1 + -7 -9 9 + 8 9 -11 + 11 18 -13 + 11 -12 6 + 19 0 0 + 10 -1 0 + 3 10 -13 + 5 30 14 + -13 10 5 + 19 -11 11 + -18 2 -12 + -8 9 -21 + 7 -1 -17 + -3 -8 -5 + 6 7 9 + 13 -3 -7 + -19 3 -8 + -6 0 -11 + 4 -4 -18 + 2 20 8 + -12 -8 -2 + -3 18 12 + 14 -13 3 + -3 20 -15 + -12 5 0 + -5 -15 13 + -17 -2 -11 + -8 -10 16 + -4 0 7 + 14 -3 17 + -6 13 15 + 4 22 8 + 8 -6 -9 + 23 9 -2 + -15 15 7 + 13 -2 -3 + -3 4 6 + 18 3 -9 + 13 -13 13 + 8 8 7 + 7 -13 -11 + 2 4 13 + 8 -3 -2 + -6 4 -3 + -17 -14 12 + 9 -4 6 + 3 -3 -9 + 12 6 -7 + -4 -7 3 + 8 -2 -8 + 17 -21 13 + -19 5 19 + -10 -20 4 + 13 -9 -7 + 1 23 -24 + -5 -16 2 + -12 -14 -19 + 25 12 -2 + -2 7 -12 + 7 -18 -5 + -5 -8 -5 + 9 -2 -10 + 6 21 4 + -15 2 -18 + -1 -18 -13 + -21 12 -6 + -6 10 9 + 12 -12 13 + -8 12 0 + -13 -6 13 + -7 -7 -14 + 10 5 -29 + -8 5 4 + 12 -4 15 + 6 -3 19 + -10 -19 -6 + 5 5 1 + -19 1 1 + 4 6 10 + 1 9 -16 + -8 -11 17 + -17 -9 -1 + 15 -7 16 + -7 2 6 + -3 -11 20 + -13 13 -17 + -4 12 -1 + -6 0 5 + -11 20 25 + 4 0 1 + 21 -6 3 + 6 -6 -17 + -11 15 8 + -3 2 -15 + -8 -6 20 + -1 -12 -12 + 12 1 -14 + 14 -11 -21 + -5 4 11 + 15 -2 11 + 10 -20 -23 + -6 -1 -5 + 4 4 9 + -17 13 12 + -6 0 9 + 4 8 1 + -1 20 4 + -1 -23 -17 + 0 -1 -10 + 7 2 -20 + -6 13 0 + -3 -6 21 + 7 -3 -3 + 14 10 -16 + -4 3 2 + 13 7 -4 + -8 -11 -1 + 11 0 0 + -6 -20 -6 + 16 8 -28 + 14 -16 -14 + -4 14 0 + 13 21 -23 + -9 -3 1 + -14 -5 2 + -4 16 19 + -11 -19 -13 + 7 13 15 + 14 6 -8 + -6 -1 -13 + 1 -9 -5 + -8 -6 14 + 10 -10 10 + 14 16 13 + -14 13 4 + -13 -19 7 + -19 -3 9 + 11 8 14 + 0 -16 6 + -6 14 -2 + -15 0 -1 + 6 2 -14 + 10 -13 -4 + -8 4 2 + 15 8 -5 + 4 2 1 + 4 -10 -13 + -20 -16 -15 + 5 -7 7 + -8 12 -21 + -3 6 8 + -1 9 0 + -7 5 6 + 17 8 -2 + -19 3 12 + 8 6 -10 + 20 -6 -8 + -20 -7 -1 + -6 8 -10 + 23 -9 -18 + -20 -8 11 + 12 -6 0 + 2 12 -1 + -20 19 10 + -12 -7 0 + -1 -11 18 + 12 -6 4 + -6 -7 -16 + -18 10 10 + 3 3 -14 + -7 14 -7 + -23 -16 31 + 21 14 13 + 14 7 0 + 0 -14 9 + -27 -22 0 + 18 -7 5 + 13 7 -1 + -11 17 1 + 8 3 6 + 10 -2 -4 + -5 -12 -13 + 20 5 2 + 10 9 13 + 17 3 7 + 4 18 -19 + 12 -6 16 + 11 -7 -7 + 15 -18 1 + 1 9 -8 + 2 -4 0 + -8 -1 -12 + -3 4 6 + -11 -8 -12 + 21 8 -13 + -19 -3 15 + -2 6 -17 + 7 0 -4 + 5 22 3 + 9 -10 2 + -16 -21 -25 + 19 9 17 + 11 2 -13 + -12 -15 -19 + -12 0 4 + 6 1 7 + -7 0 -8 + 8 -7 3 + -24 -20 -1 + -11 17 13 + -5 -6 3 + -2 8 3 + 5 6 15 + 11 -6 11 + -22 -11 14 + 12 5 -10 + -3 13 -10 + -11 -16 12 + -6 14 -12 + -8 14 -18 + -13 -16 7 + 6 2 2 + 8 -2 11 + -20 -5 -31 + 11 9 -3 + 4 -6 -2 + -15 9 -16 + 13 -4 10 + 17 -13 -1 + 10 9 -15 + -8 0 12 + 14 2 14 + -1 -8 13 + -19 -7 0 + -14 -15 26 + 0 25 -1 + 11 3 9 + -11 17 4 + -1 -8 3 + -1 14 12 + 15 13 -12 + -16 11 4 + 5 -10 -13 + -1 13 -13 + 6 -6 -3 + 13 12 -15 + 5 14 3 + 14 14 5 + -28 8 -17 + -5 -6 25 + -6 12 5 + -1 -9 -20 + 9 -13 -6 + 1 7 11 + -26 -12 -3 + -5 19 -1 + 3 0 8 + -5 -17 9 + -12 -1 -12 + 13 -25 -7 + 8 -6 -13 + 6 -14 -9 + 10 1 -7 + -6 -13 -18 + 23 8 0 + 12 -4 -13 + -3 -6 21 + -3 7 7 + -1 6 -2 + -24 -11 20 + 8 9 -6 + 1 21 -9 + 10 -3 -15 + 5 10 5 + -12 13 -9 + -1 18 8 + -3 5 -1 + 10 4 31 + -6 -14 -17 + -25 -2 -3 + 21 -19 -6 + -9 -8 -9 + -17 -19 7 + 9 7 -6 + 8 11 -3 + 1 -5 -12 + 16 3 3 + 12 10 -17 + 2 20 5 + -2 16 12 + 13 6 9 + 0 -20 1 + -12 11 12 + -11 -25 3 + -11 12 -12 + -13 24 10 + 6 -3 -18 + -12 17 0 + -4 5 -19 + 1 15 6 + 3 -6 8 + 13 -7 3 + 17 -6 14 + -6 1 4 + 4 -6 -4 + 1 10 2 + -16 19 13 + -27 -21 -12 + -7 1 -6 + 7 3 0 + 0 8 14 + -3 7 -5 + 3 -22 3 + 8 10 3 + -3 -14 9 + -10 4 8 + -10 -5 2 + 10 8 -11 + 10 15 3 + -14 -14 9 + 7 5 -21 + -16 3 -7 + 4 -10 -2 + -5 -10 -15 + 13 6 11 + 0 -15 -14 + -7 17 -13 + -14 2 12 + -10 -27 13 + 5 16 0 + 18 -2 -2 + -5 -4 3 + -19 -26 -6 + 15 -10 -7 + -1 -9 -4 + -10 -5 4 + -16 9 8 + 7 14 5 + 22 -10 10 + -20 -1 -4 + 7 12 -12 + 13 -20 6 + 8 -2 -7 + -10 13 -4 + -1 10 22 + -2 -11 -31 + -14 -7 5 + -2 2 6 + -16 -1 18 + 14 -11 -9 + -5 -8 -11 + 6 -1 1 + -19 -14 -12 + 6 -15 12 + 3 -14 -4 + 3 -12 -14 + -12 -14 -16 + 8 -14 -3 + 12 6 2 + 1 -11 4 + -23 15 -11 + 0 -4 -4 + -15 -2 -30 + 11 6 -16 + 10 0 19 + 5 3 13 + -6 -8 5 + 11 5 -10 + -9 -14 -1 + 13 -4 -4 + -14 5 4 + 2 7 -9 + 8 3 -6 + 13 6 -11 + -6 7 -11 + 23 -14 -6 + -13 -22 -18 + -8 -24 8 + -8 -22 -7 + 13 8 -7 + 12 -6 2 + -6 -7 7 + -2 10 -17 + 14 -15 -9 + 12 9 16 + 9 7 -2 + 0 2 6 + -6 -2 7 + 8 1 0 + 1 4 -3 + 18 3 -10 + 9 4 2 + -1 -9 -16 + 0 -5 18 + 4 1 -8 + -14 -3 -3 + -7 11 7 + 0 -13 -3 + -9 -23 6 + -31 18 -7 + -14 -5 1 + 7 10 -10 + -5 1 -8 + 0 -1 -6 + 8 1 -7 + -3 18 6 + -10 -8 -22 + -10 -12 0 + -10 13 2 + -15 24 14 + -14 -9 5 + -11 -2 11 + 10 18 5 + 7 6 -9 + 3 14 1 + -11 7 9 + 15 -20 19 + -5 15 -18 + -13 -7 -4 + -9 8 -19 + -12 -6 5 + -10 -18 0 + 15 13 4 + -17 6 11 + -8 -5 -5 + 8 18 18 + -1 -10 -5 + 16 1 7 + 2 -18 -8 + 4 17 -15 + -8 -13 -3 + -3 -5 -26 + -1 21 8 + -18 0 -16 + 11 13 7 + 10 4 13 + 3 -13 -12 + 8 10 -6 + -22 2 -7 + 19 14 3 + -27 -20 5 + -12 -11 -6 + -2 -4 15 + -5 -7 -6 + -7 -5 -10 + -14 -9 -9 + -1 -12 5 + -4 3 -9 + -12 -10 3 + 0 -1 -12 + -11 4 20 + -14 3 -4 + 12 -8 -19 + -1 3 -3 + -16 -2 1 + -12 19 -21 + -9 23 -10 + -7 0 -19 + 11 21 0 + 6 -10 -2 + 5 -6 2 + -16 10 -13 + 7 4 -1 + -13 0 -11 + -14 -1 -20 + -7 -3 4 + 7 -10 -3 + 5 -9 8 + -13 12 7 + -23 -4 -4 + 7 0 14 + -4 5 22 + 0 18 -16 + 3 -12 -1 + -14 -1 13 + 9 -1 6 + -15 -10 -7 + 21 11 11 + 15 6 2 + -18 -4 -21 + 4 6 -5 + 11 2 13 + -1 3 8 + 10 6 10 + -11 -19 -9 + 5 17 9 + -1 -3 -13 + -12 -1 -14 + 15 -15 -14 + -4 2 2 + -6 -6 20 + -3 1 -10 + 1 -17 -2 + -8 -14 -14 + 11 -6 1 + -8 -6 -2 + 16 -18 24 + -18 1 22 + 2 19 -7 + 25 -3 -10 + -7 -6 -12 + -4 9 0 + -7 7 12 + 0 -8 -10 + 3 -18 -10 + 2 12 10 + -30 -20 21 + 10 17 -15 + 1 0 21 + -5 8 4 + -12 -4 -2 + 3 5 1 + -12 8 11 + -5 -10 -8 + 22 1 -22 + -4 0 0 + -1 -15 -1 + -2 13 3 + -8 -9 -2 + -2 1 -15 + -30 -3 16 + 17 -3 -3 + -14 -12 -6 + 8 -7 8 + -18 -8 -4 + 7 4 -14 + 6 -6 8 + 8 -14 4 + 22 -9 -12 + 4 6 -31 + 11 -1 -5 + -31 -2 5 + 6 -3 -15 + -17 -14 0 + 10 -9 5 + 2 -2 -2 + 2 5 -14 + -4 5 -19 + -6 4 -11 + 13 -17 23 + -3 -9 6 + 10 -8 -7 + 11 12 -12 + 4 17 6 + -2 -3 11 + 12 10 22 + -11 19 -4 + 4 9 -8 + -16 -2 15 + 6 10 8 + -6 -16 -4 + 2 5 -17 + -13 16 11 + 19 -8 3 + -5 -11 -6 + 8 -15 -5 + -6 -3 21 + -16 -8 5 + -9 8 -10 + 2 5 13 + 5 -14 -6 + 2 -12 -7 + 8 -2 27 + 11 -4 18 + 20 -2 4 + -4 9 8 + 11 -15 -11 + 1 -10 -24 + 5 12 -1 + 1 13 0 + 12 6 -8 + 5 -7 -6 + -1 3 9 + 17 -22 10 + -6 -10 -18 + 5 2 -16 + 16 -12 -12 + 3 7 7 + -7 19 1 + 17 10 10 + 7 6 -24 + 14 -11 1 + -1 -7 4 + 8 8 -5 + -3 -4 4 + -9 9 2 + -2 -16 -7 + -5 6 9 + 5 -16 -5 + -8 -13 5 + -6 7 5 + -3 13 4 + 10 10 -18 + 7 7 -16 + 0 -1 1 + -4 -9 1 + 9 -6 13 + -18 -6 -5 + -1 8 -11 + 0 -6 0 + 24 -9 0 + 8 -22 6 + -3 -12 -1 + 28 17 16 + 13 5 -2 + -13 17 0 + 1 8 9 + -4 12 -9 + -7 -7 6 + -5 -8 19 + 0 10 -6 + -5 -10 4 + -8 12 -10 + -7 18 -2 + 24 10 -3 + 4 -7 -18 + -17 3 8 + -27 -2 1 + 7 7 1 + -16 -9 10 + 13 -9 -4 + -13 9 -8 + 15 13 1 + 9 -1 -3 + 9 -14 1 + 8 -18 -6 + 8 1 12 + 2 5 -3 + -19 7 -12 + -9 8 3 + -10 6 7 + -15 -9 17 + 4 -3 -8 + -3 -13 24 + -15 15 -4 + -12 -6 8 + 3 -16 -16 + 8 2 8 + 4 -16 5 + 6 9 14 + -6 19 -9 + -9 14 -14 + 8 8 2 + -5 -5 0 + 17 7 -15 + -2 -1 -3 + 22 -14 -8 + 20 22 10 + 6 -1 -17 + -12 -12 9 + -16 2 -11 + 2 15 -7 + -4 13 -11 + -15 -6 -16 + -6 -3 -9 + -1 -22 -20 + 9 7 -17 + -4 -17 -3 + 8 2 -6 + 7 3 16 + 2 7 11 + 11 -8 10 + 11 -12 -10 + 0 18 12 + 15 -1 16 + -9 7 -5 + 8 -15 -5 + -12 -1 -6 + 0 13 -6 + 14 -9 -11 + 2 -3 -10 + 16 15 5 + 9 9 5 + -19 10 3 + -1 1 12 + 4 -5 -18 + 14 -5 9 + -15 2 -4 + -2 16 9 + -3 -6 -2 + 8 12 -9 + -14 -21 16 + -9 17 -8 + -6 -5 13 + 3 0 11 + 10 -11 -20 + 0 9 13 + -1 1 11 + 3 -4 -11 + -9 7 15 + -3 13 -12 + -10 0 1 + -10 -8 4 + 16 10 -21 + 3 -15 5 + -8 4 6 + -14 -16 -11 + 6 -16 -7 + -14 5 10 + -4 4 -5 + -20 15 -17 + -23 -17 -9 + -9 -10 -6 + -15 19 -12 + 13 8 5 + -13 -1 21 + 14 13 20 + -5 10 -1 + 10 5 -10 + 10 -16 -6 + -5 -16 2 + -10 -6 -4 + 3 -11 11 + -16 -18 9 + -16 -2 8 + 15 -1 11 + -11 16 -10 + 1 -24 -4 + -4 1 31 + -8 13 20 + 1 1 -6 + 10 -3 2 + 2 -15 4 + -30 -4 23 + 8 3 10 + -8 0 8 + 5 -13 27 + -12 -12 6 + -5 13 -10 + 6 -8 11 + -1 -3 -14 + -5 4 5 + 16 5 -14 + 10 -11 -2 + 5 -7 22 + 10 7 -6 + -2 17 19 + -15 -8 6 + -12 4 -12 + 8 -17 -6 + -4 1 3 + 6 -8 19 + 11 6 -1 + 13 -2 -13 + -17 -16 21 + -7 -14 -3 + -14 12 -12 + -7 -5 26 + -8 5 3 + -8 0 11 + 16 3 -15 + -1 -17 -14 + 16 21 1 + 17 -7 5 + 16 -23 -9 + 17 15 1 + 2 -8 4 + 0 -20 15 + 0 -3 13 + -18 -6 14 + 1 0 8 + 3 -13 5 + 16 -9 -16 + 4 -10 15 + -8 -17 3 + 7 1 -25 + -9 5 14 + -14 12 -18 + -5 4 -10 + 21 15 -27 + -1 -24 -20 + -4 -7 15 + 7 5 -8 + -18 6 -3 + -22 -7 -9 + -14 -15 13 + 2 -16 -11 + 13 -8 -20 + -8 5 -5 + -17 20 13 + -30 -19 5 + 6 22 2 + -8 -13 -7 + -8 -6 2 + -16 -15 9 + 19 -4 1 + -1 -16 -24 + 9 7 3 + -3 6 3 + -17 18 -4 + 9 9 2 + 6 8 -2 + 4 -8 -8 + 15 10 5 + -3 4 5 + -16 -6 16 + -2 15 -5 + 4 -2 18 + -7 4 -9 + 3 -13 -10 + 2 -10 -18 + 1 -7 11 + -12 3 -6 + 9 3 9 + 4 6 -10 + 11 -16 8 + 6 8 10 + -17 -1 1 + -11 19 -7 + 16 -2 -10 + -14 -4 12 + 19 -8 3 + 1 3 11 + 12 -13 11 + 15 19 6 + 12 13 2 + 13 0 9 + -9 9 -15 + 11 6 -14 + -17 -10 10 + -15 16 8 + 13 3 -23 + 2 15 18 + -20 2 -5 + -8 15 4 + -13 19 -2 + 2 12 7 + -17 1 3 + 11 8 -12 + 17 4 -1 + 2 14 -10 + 10 -10 -14 + -7 -14 -13 + 4 7 -6 + -14 -2 3 + -21 -19 13 + -21 7 5 + 4 18 25 + 15 8 -17 + -12 8 -2 + 0 -17 5 + -5 6 2 + -2 -20 0 + -8 -13 -4 + -3 -10 -16 + 9 16 -5 + 2 -10 -6 + 2 29 -6 + 0 9 6 + -2 7 2 + -9 14 12 + -14 4 7 + 10 -7 4 + 4 6 -2 + 8 -17 -3 + 13 -20 11 + -9 -13 -8 + -13 17 -5 + 12 -11 -13 + 15 1 18 + 9 1 -3 + 9 2 5 + -6 -7 -9 + -12 -1 5 + 6 0 -4 + 14 14 -9 + -11 -9 28 + -8 -15 10 + 15 8 10 + 21 -2 19 + -7 4 14 + -19 6 12 + 10 -5 -7 + 12 -3 -2 + -6 15 12 + 2 -5 -7 + 2 -25 -7 + 8 -7 -9 + -5 22 13 + 16 -15 -11 + -17 -6 9 + 8 -15 14 + 15 11 10 + -11 11 -18 + 22 9 8 + -12 -7 25 + 4 -1 -10 + -4 -18 -2 + 15 0 6 + -15 -1 -9 + 20 19 2 + -7 -18 18 + -3 -1 -4 + -3 -14 13 + 16 9 -19 + 11 -16 -31 + 6 -5 1 + 10 -15 27 + 5 10 4 + -15 -12 11 + 3 13 -19 + -21 5 -1 + -18 0 -15 + -6 -6 -2 + -17 -8 25 + -12 3 27 + 2 -10 10 + 10 3 7 + 2 3 11 + 1 19 -17 + 2 -14 -11 + -3 -13 6 + 12 1 8 + -5 9 -3 + 5 -4 6 + 0 -24 2 + -15 -5 -17 + 4 -3 4 + -11 16 -16 + -9 -14 -17 + 21 19 -3 + -2 -6 -9 + -20 5 14 + 11 2 21 + -10 -6 9 + 9 -15 4 + -4 -14 0 + 9 19 -20 + 10 -15 4 + 7 6 -17 + -8 17 -7 + 20 4 8 + -4 10 11 + -12 6 3 + -4 16 -3 + -5 5 8 + -14 -18 8 + -16 11 -9 + 20 0 3 + 2 -8 -16 + 4 -2 23 + 12 9 -12 + -4 -11 3 + -10 -9 8 + 1 -6 -8 + 4 20 1 + 7 3 -5 + -10 -9 0 + 7 8 3 + -1 -14 -1 + 17 -18 -2 + -7 9 0 + 11 7 6 + -12 -16 14 + 19 9 2 + 6 -19 -19 + 17 4 -9 + 14 -3 -4 + 5 3 2 + 12 -4 8 + 8 14 -19 + 20 19 12 + 17 -1 14 + -19 20 21 + -6 -6 -5 + -2 -6 -24 + -6 -11 7 + -5 10 -15 + -4 -21 -8 + 19 -1 -12 + 11 5 -21 + 14 3 7 + 9 4 19 + 5 11 1 + -4 2 12 + -6 -16 0 + 12 -11 -3 + -2 7 16 + -21 -12 12 + -15 4 7 + -14 -11 1 + 5 15 14 + 22 8 -15 + -3 5 1 + 6 3 10 + 1 -17 9 + -9 1 19 + 11 -19 27 + 22 -16 -8 + -7 -10 12 + -2 -7 13 + 11 8 14 + 1 -7 15 + 13 5 11 + -5 -4 2 + 20 15 -8 + -7 -6 6 + 3 5 -11 + -25 18 -15 + -22 -22 3 + 25 -5 -8 + -13 -2 14 + -3 -6 -4 + -1 1 17 + 16 -21 -6 + -5 27 7 + 12 -9 -26 + -16 -5 -18 + 4 3 -2 + 3 14 11 + 8 7 12 + -17 10 1 + -12 5 5 + -12 1 -1 + -13 15 11 + 0 5 10 + 10 7 19 + -13 20 3 + -16 11 20 + 31 -10 9 + 23 -8 0 + 5 6 1 + 11 10 4 + 1 -15 11 + 16 9 -13 + -22 8 5 + 8 -13 -6 + 7 -7 7 + 8 1 -12 + 16 -5 -5 + -14 -2 -14 + -4 0 12 + -3 -6 -4 + -15 17 10 + 8 7 15 + -9 9 -2 + -4 -16 -13 + 15 -5 -12 + -9 -10 -8 + 5 -12 13 + 17 -6 6 + 6 2 16 + -10 11 3 + 26 -29 -9 + -14 14 13 + 5 -6 10 + -12 13 -5 + -19 12 -5 + -11 6 22 + 11 -7 16 + -12 6 -1 + 2 12 17 + -19 5 -2 + -14 1 -4 + 4 -14 -8 + -3 -6 17 + -16 3 12 + 1 -14 -13 + 1 -2 1 + 18 5 -25 + 28 10 13 + 16 -12 -15 + -6 -19 21 + 8 -4 4 + 19 -3 5 + -6 5 3 + 2 24 -25 + 5 -5 9 + -17 19 -14 + 10 1 20 + -13 12 -10 + -8 -14 3 + 3 -2 15 + -9 19 5 + -2 -13 10 + 11 -6 8 + 17 -19 -11 + 1 4 -3 + 14 3 -24 + 9 11 -12 + 2 11 -28 + 9 0 -13 + -10 17 -1 + 5 8 0 + -11 30 8 + -1 4 -14 + -11 -5 15 + -10 -23 25 + 1 -17 -9 + 5 10 -6 + -13 12 3 + 8 -27 20 + -7 -7 16 + 7 -16 2 + 3 7 2 + 3 9 -6 + -27 -9 0 + -6 2 -10 + 8 6 -13 + 1 6 7 + 7 1 17 + -10 5 12 + -4 5 3 + -22 -23 3 + 1 21 10 + -2 7 -8 + 7 6 -5 + 3 1 1 + 4 0 -2 + 23 6 -13 + -11 0 -2 + 17 1 18 + -11 -7 2 + 1 0 -8 + 5 -6 6 + -8 1 14 + 16 2 -14 + 22 -5 -19 + 1 6 10 + -4 -3 -3 + 25 6 -11 + -9 -2 -3 + 10 9 -13 + 5 -5 18 + 16 7 13 + -6 4 6 + 11 0 0 + -24 -1 -30 + 0 -6 -10 + -10 6 2 + 4 7 -18 + 17 -4 3 + 2 -2 11 + -14 -4 1 + -2 31 3 + 27 2 1 + 16 10 -5 + 13 -6 -11 + 5 6 11 + 19 5 11 + -9 18 19 + -2 -5 18 + 15 9 8 + 8 13 0 + -5 -3 19 + 17 -6 20 + 10 23 3 + 7 4 -20 + 3 11 15 + -9 -10 25 + -8 12 0 + -5 -6 2 + -8 8 0 + -3 11 -25 + 3 15 -16 + 11 -3 10 + 17 -6 -6 + 19 -14 6 + -9 -7 -3 + 4 -5 -5 + -27 -19 15 + -16 -1 -5 + -2 -22 2 + 13 -3 4 + 18 -4 0 + -3 -16 12 + -11 -11 -2 + 13 -2 14 + 2 -11 -12 + 10 -1 -3 + 5 -6 -17 + 17 11 11 + -6 1 -7 + 7 -5 -9 + 12 10 12 + 4 11 -2 + -8 3 0 + 18 -1 5 + 7 -5 -4 + 14 -1 -8 + 17 -17 17 + -7 -9 -18 + -11 10 -20 + 1 6 -5 + -7 14 1 + 11 9 17 + -15 7 -5 + -10 -12 -21 + 0 -5 -3 + 2 7 -8 + 6 -1 -9 + -6 15 -12 + -8 1 -12 + -7 -8 1 + -11 0 8 + 4 4 6 + 5 -6 19 + 4 -9 10 + -8 1 -12 + 19 19 -16 + 0 3 -7 + 7 8 10 + 11 -13 2 + -13 7 -8 + 8 -6 -6 + -4 -25 15 + 12 -17 6 + 18 -1 -18 + 6 24 0 + -25 2 -8 + -24 -17 -22 + 0 11 -5 + 4 20 -6 + -17 -21 -7 + -13 1 -26 + -19 -11 -1 + -12 0 5 + 9 -14 -3 + -15 -3 11 + 9 -1 -17 + 0 3 -9 + -22 19 1 + 5 8 10 + 16 11 23 + -27 -14 17 + -13 0 -5 + -21 12 -10 + -12 -16 -18 + -9 -18 -3 + -3 4 -7 + -12 -27 -9 + 2 9 -13 + 3 18 3 + 2 17 21 + 20 -4 -7 + -1 10 -5 + -6 -6 -4 + 5 -7 -15 + 16 10 12 + 1 4 4 + -10 -1 -14 + 8 -8 -13 + 7 13 -21 + 30 -18 -3 + 4 5 -11 + 8 8 8 + 15 -13 -9 + 2 8 -3 + -4 -10 -9 + -6 -4 -17 + -18 21 -5 + 4 -11 16 + 0 -12 6 + -7 -20 -16 + -22 -3 28 + -4 5 -20 + 17 0 8 + 5 -6 6 + -20 -1 9 + 18 -8 -22 + -3 -6 -12 + -1 -13 -21 + -12 21 7 + 4 -7 12 + -2 -6 12 + 12 12 15 + 13 1 -2 + 0 -6 -7 + 14 -6 -6 + 14 14 4 + 1 -5 8 + -20 -8 7 + -15 -2 -9 + -1 10 9 + -7 -8 25 + -9 0 10 + -15 0 -1 + 19 13 -8 + 20 -18 -5 + 16 3 -2 + -8 4 -10 + -2 -1 14 + 1 31 -15 + 15 -13 0 + 8 -20 3 + -14 7 -13 + -16 9 16 + 16 9 -22 + -6 19 -4 + 7 11 -2 + 0 -7 4 + -5 -2 -3 + -10 -12 9 + 8 6 -12 + -23 -8 11 + 4 -14 -13 + -19 -1 -8 + -13 4 -1 + 13 -19 9 + 11 18 -3 + -5 -8 13 + -8 2 1 + -11 -4 26 + 8 16 17 + 11 -7 4 + -19 -6 10 + 11 10 -16 + -1 -5 13 + -8 18 -17 + -8 -7 6 + 9 -16 0 + 9 2 -27 + 2 -10 7 + 4 -19 15 + -1 7 17 + -14 9 4 + 1 -10 -18 + 9 3 -9 + 16 3 10 + -10 -1 -8 + -18 5 -1 + -4 -3 2 + 5 -3 -5 + -5 14 4 + 9 -2 -6 + 1 0 6 + 9 4 5 + 16 -13 -2 + 17 0 -17 + -13 -7 -6 + 4 8 -11 + 4 -7 -1 + -5 4 -5 + -4 0 8 + 18 20 8 + -18 -20 10 + -18 18 -3 + 0 -7 3 + -6 5 13 + -17 15 -4 + 16 -20 -13 + 23 -14 13 + 13 2 0 + -12 -15 8 + 16 3 -18 + 2 -12 13 + 13 15 -16 + 9 -21 7 + 0 -10 11 + 2 8 -14 + 6 -3 -4 + -2 15 -6 + -3 -14 -9 + 4 -2 -8 + 22 2 12 + -14 -12 5 + 2 -1 -4 + 14 1 6 + 5 10 -13 + 9 -4 21 + 8 -4 -24 + -5 -1 9 + 7 -6 -1 + -18 -6 -9 + -6 7 -1 + -3 -31 -9 + 21 -4 -13 + 13 13 1 + -2 -6 4 + 13 3 -18 + -17 -6 -2 + -6 -18 -20 + -3 17 -10 + 14 3 6 + 6 1 -11 + -4 -16 -15 + -10 5 -9 + -13 -1 15 + -1 -12 5 + 14 19 19 + -6 14 -11 + 18 9 -18 + 11 2 -10 + 13 -13 0 + 4 7 -7 + -11 4 9 + -18 -16 -16 + -3 -8 -11 + -2 -1 -2 + 9 7 13 + -6 -15 -4 + -9 -6 7 + -2 0 14 + -18 -13 -4 + 7 -11 5 + 19 -11 6 + -9 1 -10 + 3 -4 -10 + -3 -11 9 + 5 -3 22 + 6 -7 -9 + -19 6 8 + -18 1 -4 + -2 -28 -8 + 8 1 11 + -12 -11 3 + 9 -1 -1 + 0 24 -8 + -11 -15 -14 + 19 20 -6 + 21 5 -1 + 0 -5 8 + -2 -6 15 + 5 -5 9 + 19 -9 15 + -10 -7 -21 + -8 10 -3 + 20 -9 6 + -12 -8 4 + -15 25 -13 + -18 14 -20 + -12 -4 -9 + 5 -4 -8 + 0 15 -8 + 2 15 -8 + 3 -16 9 + -11 10 7 + -17 -3 -1 + 6 -8 14 + -3 15 -9 + 3 -2 29 + -1 -2 -6 + -19 2 -10 + 7 4 -5 + -3 10 -8 + -13 1 -8 + 1 4 12 + 13 -13 7 + -17 10 18 + -4 1 -1 + 11 10 10 + 19 13 -3 + 6 4 4 + -7 -17 22 + -3 12 -19 + -1 2 -10 + -13 22 -5 + 0 13 2 + 5 -7 -17 + 6 -14 6 + -8 -4 19 + -3 16 17 + 12 -10 -18 + 7 20 -15 + -19 -8 -5 + 12 8 2 + 7 -13 1 + 4 0 23 + 2 11 -9 + -4 -2 11 + -11 -1 0 + -27 -14 9 + 5 13 -2 + 7 1 8 + 3 9 -10 + -1 7 7 + -4 -4 16 + 25 -3 15 + -4 1 -7 + -2 2 14 + 10 -13 6 + -12 -3 11 + 6 17 -6 + 15 -1 21 + 7 3 14 + 10 10 10 + -8 3 -17 + -3 11 9 + 4 -1 10 + 12 3 16 + -17 15 1 + -3 8 12 + 3 -11 -1 + 2 -31 13 + 21 26 15 + 12 15 -17 + 15 -22 0 + -6 12 -2 + -12 7 5 + -4 8 -3 + -16 -17 0 + 10 1 -28 + 11 -17 9 + -1 -5 3 + -7 -7 -2 + 15 -1 17 + 9 6 9 + -13 -2 -1 + 5 18 -1 + 0 -2 -3 + 13 -1 -18 + 0 2 -7 + -12 -1 8 + 7 10 14 + 7 17 -13 + -13 2 -5 + 30 -20 5 + 0 5 1 + 17 13 -9 + -4 12 -1 + -7 3 11 + -3 6 18 + 4 -6 -18 + 7 14 10 + 11 6 5 + 15 -16 23 + 3 7 -3 + -19 11 15 + -9 -1 16 + -4 -2 3 + -2 4 19 + -13 4 -14 + 3 2 13 + 9 -14 -4 + 6 -5 20 + 7 11 -3 + 1 8 -26 + 12 15 -5 + 1 17 -16 + 14 -1 11 + 27 16 -7 + -12 11 -1 + 18 -16 -5 + 13 13 -6 + 21 5 -12 + 13 1 -8 + 17 -6 -8 + -1 -3 0 + -1 -8 -11 + 5 -8 -5 + 7 3 -3 + 14 1 1 + 7 -23 8 + -6 -13 2 + -6 2 12 + -15 13 11 + 8 4 -13 + -19 -12 8 + 18 -2 -7 + -7 22 -3 + -7 7 -4 + 21 -16 -21 + -1 14 -17 + -8 10 11 + 12 13 -4 + -10 -3 16 + -31 2 -6 + -3 22 -12 + -14 11 4 + -13 13 2 + -1 -22 11 + 17 14 -13 + 12 -4 5 + -3 20 17 + 7 2 11 + 5 -10 -5 + 9 -1 -15 + -20 3 -5 + -4 4 10 + -15 -3 -5 + -14 -21 19 + 11 -18 13 + -2 1 3 + 10 13 23 + 4 -7 21 + -1 12 3 + -1 -2 10 + 16 -1 -12 + -9 6 19 + 24 9 12 + 21 1 -18 + 18 2 -4 + -17 -10 8 + 0 6 0 + -3 -7 7 + 8 -17 -4 + -1 -9 -9 + -12 -2 6 + 19 -16 16 + -7 14 8 + 14 -3 -14 + -25 12 14 + 8 -12 0 + 11 13 -11 + -7 1 -27 + 12 18 1 + -10 10 -14 + -17 -16 -10 + 9 18 -5 + 7 7 1 + 24 12 -5 + 18 8 1 + -1 18 -16 + -7 -9 7 + 3 -1 -9 + -30 -16 -19 + -10 5 0 + -5 5 0 + -4 -5 -10 + 7 6 15 + 5 -24 -10 + 3 6 -14 + 4 8 16 + -1 -6 2 + -1 -15 6 + 3 16 -13 + 4 -10 11 + -1 -18 15 + 10 29 -8 + 10 16 0 + 23 9 3 + 22 9 -23 + 10 23 0 + 15 10 -1 + 13 -5 -5 + -3 27 12 + -3 3 4 + -6 -16 9 + 2 3 -18 + 12 -6 -12 + 12 13 0 + 7 1 -2 + 9 -5 -16 + -5 3 0 + -9 -5 -8 + 29 2 6 + -3 12 2 + 18 16 0 + -6 15 5 + -6 -8 -5 + 28 4 12 + -13 6 -10 + -16 -15 -1 + 2 -2 17 + 7 6 -12 + -10 -12 3 + -14 -17 3 + -18 -2 19 + -12 -2 -2 + 18 15 -10 + -16 5 1 + -2 -1 -12 + -3 -9 3 + -12 4 6 + 0 -1 -9 + -4 14 -7 + -21 -3 4 + -8 19 13 + -24 -17 -11 + 6 -11 -10 + 2 -11 -24 + -7 19 -4 + 13 13 16 + -3 -6 -4 + -8 10 -13 + -8 -2 -4 + -20 0 23 + -10 9 -6 + -3 2 15 + 12 -10 -1 + 18 16 -6 + -9 11 12 + 12 -6 1 + -13 -2 -3 + 9 1 -6 + 6 5 -3 + -9 0 15 + 16 0 -19 + 8 -6 -6 + -19 4 10 + 3 -6 17 + -2 10 13 + -11 -3 -1 + 9 -10 12 + -5 13 5 + -1 9 -5 + 14 -17 -2 + 9 -13 -3 + 9 6 -12 + -9 1 -3 + -7 5 -11 + -1 16 -7 + -15 21 8 + -2 -12 -1 + -1 -7 -18 + 7 -6 21 + 20 -9 4 + 1 -19 30 + -24 -31 -5 + -11 -22 7 + 22 4 -17 + 2 -2 -10 + -10 -10 11 + -17 -5 -7 + -9 7 -26 + 3 -10 12 + -4 4 15 + -20 1 -11 + 13 14 -8 + 5 -12 9 + -2 -23 7 + 16 -16 17 + -10 -23 -7 + 22 3 -2 + 7 2 -11 + 14 -2 14 + -13 1 8 + 10 0 5 + -21 4 -16 + 8 6 -21 + 1 19 5 + -2 2 20 + 15 -14 -17 + -14 -17 -2 + 2 12 19 + 2 3 13 + 16 -21 -12 + 12 -3 11 + -13 -7 5 + 0 5 1 + -13 -15 -10 + -6 -3 -5 + -10 8 -11 + -11 5 11 + 10 3 -10 + 11 6 0 + 7 -7 3 + -14 14 12 + 1 -8 2 + -2 -7 -22 + -16 3 -16 + -27 -10 4 + -1 -11 -1 + -3 2 16 + 12 -20 14 + -6 2 5 + 0 -11 -1 + 6 0 -13 + -11 -18 4 + 4 -14 -7 + 12 -8 -6 + -7 20 -5 + -1 6 -8 + 16 11 6 + -2 -10 7 + -24 10 10 + -3 -11 -16 + 14 15 4 + 12 6 -12 + 11 -1 -6 + 7 -2 -9 + 21 12 7 + 17 -7 7 + -15 2 5 + -9 16 -10 + -5 6 9 + 5 -8 -13 + 0 -10 11 + -13 18 4 + -7 -3 4 + -11 5 2 + 9 0 3 + 2 8 -9 + 13 -2 -14 + -14 14 7 + 14 -2 -6 + 3 0 11 + -10 15 1 + 8 12 -4 + -2 -19 -5 + 1 3 18 + 7 -9 22 + 3 -15 7 + 2 -5 6 + -13 12 4 + -2 -9 -13 + 7 -10 0 + -9 1 -13 + 5 -1 7 + 0 -11 5 + -16 -13 -1 + -21 17 -4 + 13 -8 -18 + -15 30 -18 + -11 -2 2 + 6 -16 -16 + -13 12 -7 + 8 7 12 + 3 8 -5 + -1 13 0 + 0 -6 5 + 0 -8 5 + -1 20 -20 + 18 8 2 + -7 -14 -2 + -6 -12 -5 + -7 9 -19 + -10 -9 -21 + 10 -1 5 + 8 3 -5 + -16 -4 -14 + -2 -3 -15 + 11 -21 9 + -3 12 10 + -6 -4 -3 + 7 13 -12 + 7 -9 -2 + -12 -1 0 + 8 -3 6 + -24 -2 -10 + -3 -7 -2 + -6 3 -10 + -10 -13 1 + -4 -8 12 + -10 20 -14 + 21 -2 -6 + -2 -11 0 + 16 -13 7 + 18 4 -12 + 4 -9 20 + 12 -2 -17 + 15 3 -1 + -6 2 20 + 7 4 11 + 1 1 6 + 21 -15 8 + 12 17 0 + -3 6 -19 + 12 10 -11 + -1 -22 1 + 7 4 6 + 10 -1 5 + -11 12 6 + 12 13 11 + -24 5 -6 + -23 -12 23 + 16 -16 -22 + 5 12 9 + 7 1 -9 + 19 11 -13 + -19 -4 12 + -10 -7 -11 + 3 24 -2 + -29 16 10 + -9 -1 4 + 21 -18 11 + 0 -4 -9 + 9 -6 15 + -8 4 14 + -11 15 20 + -4 13 14 + -9 -20 12 + -3 0 -1 + 4 -12 -4 + -16 7 -10 + 7 -3 -18 + 2 -13 -12 + 3 6 9 + -11 -3 -15 + 6 4 16 + -4 7 -1 + -4 16 -4 + -9 -22 -1 + 13 14 -27 + -7 5 -14 + -7 25 -4 + -2 5 1 + -12 11 13 + -1 4 0 + -9 6 8 + -4 -4 9 + 17 -2 10 + 1 2 5 + 13 20 12 + 6 5 -23 + -6 -11 8 + 12 -15 5 + -12 -6 19 + 9 -13 -15 + 5 7 16 + -6 -7 7 + -5 21 -4 + 1 -7 -5 + 3 -16 19 + -11 -15 0 + 14 1 9 + -10 1 -13 + -26 -9 13 + 0 -9 -5 + 1 -14 9 + -10 15 0 + 2 -11 23 + 15 -2 -15 + -7 -11 -2 + -5 -2 28 + 12 10 16 + -9 -16 8 + -10 -2 3 + -13 -9 -2 + -10 -8 0 + -2 -4 -4 + -1 1 5 + 4 -8 9 + -3 -5 1 + 4 14 22 + 7 -7 -18 + -22 3 -16 + 5 -2 8 + 22 -3 7 + -13 0 17 + 23 -19 6 + -8 -19 -21 + 1 9 -6 + 12 0 -15 + -7 -3 26 + -6 -9 6 + -4 13 -21 + -5 -1 6 + 14 7 -1 + 14 18 12 + 10 6 -4 + 5 -6 -19 + 16 -2 14 + 23 18 2 + 4 17 9 + -4 -11 19 + -10 11 1 + -6 5 5 + -9 -8 9 + -15 -8 4 + -2 -9 -12 + 0 10 1 + -4 -12 -5 + -10 -8 17 + -17 0 12 + 13 10 3 + -2 4 -17 + 2 -13 4 + -12 -24 -13 + 10 -13 -5 + 2 29 -18 + -20 2 0 + -10 -2 6 + 2 -15 2 + -3 -13 7 + -1 14 13 + -2 18 -2 + 11 8 -10 + -4 3 12 + -8 9 -12 + 9 -8 -5 + -17 24 -18 + -6 13 1 + -7 6 18 + -13 20 -9 + 12 3 15 + -6 -13 -22 + 5 13 10 + -3 23 11 + 0 23 13 + 24 -4 10 + -5 -6 -8 + -10 -15 15 + 4 -17 5 + 13 17 -6 + 6 -1 20 + 8 -3 -4 + 16 -11 -13 + 2 -11 -9 + 8 19 -13 + 13 -8 -8 + -1 8 -1 + 15 0 -10 + -17 -10 12 + -12 -4 14 + 9 0 -4 + -3 12 15 + 1 -13 -19 + -4 1 -31 + 8 0 -5 + 12 3 6 + 20 14 6 + 5 -17 -9 + -6 -1 -10 + -17 -12 -24 + 1 9 9 + -2 -12 -11 + -12 12 -16 + -2 -18 3 + -16 11 -6 + 13 -8 -11 + 18 3 -11 + 13 17 3 + -12 12 26 + -4 4 -10 + -8 11 2 + -12 1 -6 + 4 0 -10 + -7 -8 -14 + -7 -2 18 + 9 17 -13 + -8 -15 -11 + 17 13 1 + -10 -7 -11 + 5 -2 4 + 0 -2 -4 + -6 -17 -16 + -16 -3 -4 + -13 -14 -11 + 4 22 5 + -3 -4 18 + -5 0 22 + -10 -15 7 + 13 10 5 + 13 -16 -17 + -9 7 10 + -1 -5 -11 + -17 -2 3 + 22 14 9 + -7 -4 -11 + -23 10 -26 + -7 -14 -8 + 10 -12 11 + -15 -3 18 + -15 0 8 + 15 -13 17 + -20 13 -13 + -4 9 -6 + -20 -8 10 + -17 10 -5 + -12 -11 -1 + 16 -20 1 + -19 -11 1 + 13 22 -4 + -12 -9 6 + -2 5 2 + -18 -3 -9 + 5 0 2 + -4 -5 -19 + -18 -4 5 + 5 -2 -7 + 0 -14 -2 + -9 13 0 + 5 -6 5 + 7 16 14 + 22 5 0 + -10 11 8 + -27 10 6 + 13 1 19 + 24 -14 0 + -14 11 -12 + 22 10 14 + 8 0 9 + -23 2 -13 + 21 -8 13 + 16 11 7 + 31 1 1 + -9 12 6 + 31 20 7 + 6 -14 7 + 21 -13 3 + 19 1 -22 + 0 -8 9 + -7 14 2 + 14 -15 21 + -9 12 11 + 3 -3 4 + 0 -4 -6 + 19 6 0 + 22 12 -9 + -4 9 12 + 3 -9 -3 + -15 -20 -4 + 9 -11 -24 + -16 -7 -15 + -10 4 4 + 15 -8 18 + -10 3 -1 + -10 -11 -14 + -13 -16 -6 + 3 9 6 + 7 15 -21 + -2 -2 -6 + 13 -11 -19 + 7 -14 -5 + 3 11 -3 + 26 9 0 + -10 7 -5 + 0 7 12 + 9 8 -6 + -9 13 8 + -5 2 9 + 1 -1 -1 + -12 18 7 + -9 -20 -10 + -3 -17 3 + 17 5 -18 + -23 3 13 + -4 -2 0 + -20 6 -6 + -8 -1 3 + 11 -2 17 + 25 10 9 + 0 -3 2 + -7 -13 -14 + -1 -13 16 + 18 -14 -9 + -6 19 -7 + -15 -20 -16 + 5 7 -1 + 5 4 8 + -12 -10 2 + 13 5 -1 + 21 5 -16 + 11 -24 5 + 3 14 -13 + -12 -9 -11 + -4 -4 -3 + 3 -6 -4 + -10 -15 -1 + 12 11 -14 + 12 -7 5 + -15 -6 8 + -16 4 0 + 1 11 -3 + 6 17 -1 + -1 9 -8 + 5 -18 -9 + 19 9 2 + -3 -4 20 + 4 -21 -10 + 5 1 8 + -12 -16 5 + 7 -18 0 + -11 -5 0 + 6 -3 6 + 13 2 -6 + 8 -16 8 + -9 -1 -3 + -7 2 0 + -22 12 5 + -21 10 1 + 7 -6 -17 + 6 -16 -7 + 1 -1 -9 + 1 16 14 + -9 6 -15 + 7 -2 -6 + 9 7 20 + -15 17 -3 + -14 -6 20 + 2 -14 5 + -1 -19 11 + 9 12 10 + -2 5 13 + 16 -11 19 + 7 12 15 diff --git a/example/testvectors/lte/block5_tail_llrs.dat b/example/testvectors/lte/block5_tail_llrs.dat new file mode 100644 index 0000000..c87bab0 --- /dev/null +++ b/example/testvectors/lte/block5_tail_llrs.dat @@ -0,0 +1,6 @@ + -10 -12 + 6 10 + -4 8 + 15 -2 + -8 -8 + -14 14 diff --git a/example/testvectors/lte/number_of_blocks.dat b/example/testvectors/lte/number_of_blocks.dat new file mode 100644 index 0000000..f1c101b --- /dev/null +++ b/example/testvectors/lte/number_of_blocks.dat @@ -0,0 +1 @@ +6 diff --git a/example/testvectors/lte/reference/block0_coded_bits.dat b/example/testvectors/lte/reference/block0_coded_bits.dat new file mode 100644 index 0000000..ba354a7 --- /dev/null +++ b/example/testvectors/lte/reference/block0_coded_bits.dat @@ -0,0 +1,99 @@ +03f10e74 +7c8df743 +b50fb4cc +bdc853e4 +c87c1308 +83031ff9 +f7cf8d83 +9f9838f8 +f7bdb27c +1744002f +744bff10 +bb7bf4d0 +4a8b5015 +7cb06f85 +d0e7aaf6 +e4c7304b +8061f084 +7a3e317f +2fbcf7e0 +c6376088 +bb54036d +b59b4751 +88601bce +80f2118d +8b427ac0 +2a978c34 +4a75e198 +df381327 +f748e0e9 +4cb47953 +d51368ed +143dc9f9 +0000000b +9f1f09ec +da58205f +e308d84a +7276e19c +3847bc36 +5102b629 +6e06621f +e5db815c +543ca909 +2715d39c +7153ff6d +4daa222d +685d9750 +33aa28f3 +2da421c8 +3be3b727 +1d6f836f +42ca2bac +010720a0 +e22ef365 +4d91388c +0a0ac4ac +f854feee +f4695616 +67f90cdd +9be92dff +cf99efdb +51cf55de +54b89ae3 +84e2dd08 +b7f2ffdf +b8c80367 +00000008 +042c22b6 +2463a203 +a931dc3a +d5da72a2 +94295b3b +ab015e95 +2b1ed7c3 +88bf0ed6 +a43606a5 +3917d404 +cf5d28c6 +722de66a +672a40ef +b69348bf +829734b9 +f21e50c9 +5481197a +f3fe39cd +faa13691 +c2e8cb49 +e81192b8 +2a2a3e43 +b9654deb +4a4c0b82 +6055c29d +b2a19f8d +82d88b34 +cc0c9f7f +93db5a46 +6fba6946 +2a001b23 +8f93f088 +00000009 diff --git a/example/testvectors/lte/reference/block0_info_bits.dat b/example/testvectors/lte/reference/block0_info_bits.dat new file mode 100644 index 0000000..9bdb6dd --- /dev/null +++ b/example/testvectors/lte/reference/block0_info_bits.dat @@ -0,0 +1,32 @@ +03f10e74 +7c8df743 +b50fb4cc +bdc853e4 +c87c1308 +83031ff9 +f7cf8d83 +9f9838f8 +f7bdb27c +1744002f +744bff10 +bb7bf4d0 +4a8b5015 +7cb06f85 +d0e7aaf6 +e4c7304b +8061f084 +7a3e317f +2fbcf7e0 +c6376088 +bb54036d +b59b4751 +88601bce +80f2118d +8b427ac0 +2a978c34 +4a75e198 +df381327 +f748e0e9 +4cb47953 +d51368ed +143dc9f9 diff --git a/example/testvectors/lte/reference/block0_inp_cfg.dat b/example/testvectors/lte/reference/block0_inp_cfg.dat new file mode 100644 index 0000000..e73b81f --- /dev/null +++ b/example/testvectors/lte/reference/block0_inp_cfg.dat @@ -0,0 +1,15 @@ +03ff0002 +00003f13 +012e81b5 +00020004 +727f7277 +7b767366 +7f77736f +73776971 +00618618 +00618618 +00618618 +00618618 +005f0080 +02000300 +00000100 diff --git a/example/testvectors/lte/reference/block1_coded_bits.dat b/example/testvectors/lte/reference/block1_coded_bits.dat new file mode 100644 index 0000000..f59e684 --- /dev/null +++ b/example/testvectors/lte/reference/block1_coded_bits.dat @@ -0,0 +1,102 @@ +0d810e68 +9b8af683 +050fab50 +ba2e93eb +0613fff3 +9ec311b0 +285d1a84 +c3708ff9 +14f6b585 +e20a2880 +aa828d3c +0b67eb4c +4cad9e6a +ad436479 +0d2814bf +d7aea0aa +d2c089ea +0e722b46 +6df300dd +1f074e4c +23e7ffba +c1917c60 +460fcefb +93421fd8 +b3d7ec07 +c67f24a9 +aed8266e +e419d773 +34419c8c +233af1c8 +8fdd1193 +b9b5d1fc +e0eff23f +0000000e +7f26da58 +e3b5216b +497c20ad +4c4e3cae +d6f22c52 +0de5f179 +ec9c5855 +ab39158e +51bc7ef3 +3e0fec27 +c8505887 +0e1e3319 +84f6e4c6 +b8c2f593 +45a26ba2 +67808921 +60342aaf +da4e3d8b +b6bb7452 +5f7054f0 +aca458d1 +a898096e +2c95a0f9 +9b108c6f +41b4434a +96ace684 +babcdf67 +d28929a6 +1612e763 +7fb81fa5 +c61c5606 +a7e3b114 +a092ce22 +0000000d +653f2d56 +77fef4f7 +35d3b9a6 +252239b2 +29b8fd5c +584ee712 +55e086cd +60711bb6 +6049ff64 +c266f083 +8064757a +936e934f +57ddda8c +fc03a368 +e0c9b749 +40a9f857 +d1b9d64c +7af3080c +73651c54 +07e7f5c5 +87a0314c +3618829a +d053c0ce +3ce65bf0 +28bd10e4 +33a982af +84d65328 +e7b2f628 +951270c9 +bdeaaa1b +47543928 +97645ab7 +7386c694 +00000009 diff --git a/example/testvectors/lte/reference/block1_info_bits.dat b/example/testvectors/lte/reference/block1_info_bits.dat new file mode 100644 index 0000000..395523b --- /dev/null +++ b/example/testvectors/lte/reference/block1_info_bits.dat @@ -0,0 +1,33 @@ +0d810e68 +9b8af683 +050fab50 +ba2e93eb +0613fff3 +9ec311b0 +285d1a84 +c3708ff9 +14f6b585 +e20a2880 +aa828d3c +0b67eb4c +4cad9e6a +ad436479 +0d2814bf +d7aea0aa +d2c089ea +0e722b46 +6df300dd +1f074e4c +23e7ffba +c1917c60 +460fcefb +93421fd8 +b3d7ec07 +c67f24a9 +aed8266e +e419d773 +34419c8c +233af1c8 +8fdd1193 +b9b5d1fc +e0eff23f diff --git a/example/testvectors/lte/reference/block1_inp_cfg.dat b/example/testvectors/lte/reference/block1_inp_cfg.dat new file mode 100644 index 0000000..a1089c0 --- /dev/null +++ b/example/testvectors/lte/reference/block1_inp_cfg.dat @@ -0,0 +1,15 @@ +041f0003 +00002313 +012e81b5 +00020004 +7f7b7b7b +76767a7e +7e777d7a +7578787f +00618618 +00618618 +00618618 +00618618 +00530084 +02100108 +00000318 diff --git a/example/testvectors/lte/reference/block2_coded_bits.dat b/example/testvectors/lte/reference/block2_coded_bits.dat new file mode 100644 index 0000000..e10a83f --- /dev/null +++ b/example/testvectors/lte/reference/block2_coded_bits.dat @@ -0,0 +1,105 @@ +14490e5a +070675a3 +ed0f9f23 +373133f1 +3fef445d +2fe3081f +3c374e08 +10f6eb7a +b5b038ae +55280edc +5137c0a7 +e355df3f +429227b8 +a0cc435b +1c12e510 +786a7939 +18e9d495 +fbb8174d +be5232eb +6999d051 +ed896a8f +82357290 +7ff3126c +3baa0645 +3b313bab +fdf97459 +82810b5f +6ac74a81 +7ed4c8b8 +df629137 +5264ccc2 +157c7bf5 +493aebcc +944c239e +00000004 +82f709d6 +04d6a3ff +ab08e531 +fd2bc182 +85922fd2 +e8a2abb6 +f3605491 +be1b47df +d9902669 +de053369 +d860935e +05901f56 +64a0aaa6 +b3046599 +b41a7457 +35610ef4 +5b30f839 +f9e81d6c +3e945d33 +c47dc496 +e55e885b +6ac4004a +45811ab7 +50214bb3 +2411b9f3 +8829d607 +cd6840a5 +150a26cf +442beb4f +51bed6fd +e0cf04aa +b9330d6d +f72533d7 +9fcaace4 +00000007 +cca667f0 +8188bc60 +06045a26 +740bd147 +b85bfbeb +fcd312fe +0943b4d9 +5f26cc6d +960491ce +e0e07421 +5584477a +33f6c570 +c925e44a +6d60e303 +2a040aee +f2c98682 +d20be8f1 +3f0741ea +654ff872 +7cf90cc3 +8ca1a516 +c7c1c065 +d05a17f3 +85e74734 +c150314a +1818d308 +9d06126d +1d09c49a +8f871a79 +caac5fe3 +770e9ea3 +d84a5efb +0015e6e9 +17da6194 +00000003 diff --git a/example/testvectors/lte/reference/block2_info_bits.dat b/example/testvectors/lte/reference/block2_info_bits.dat new file mode 100644 index 0000000..546fedf --- /dev/null +++ b/example/testvectors/lte/reference/block2_info_bits.dat @@ -0,0 +1,34 @@ +14490e5a +070675a3 +ed0f9f23 +373133f1 +3fef445d +2fe3081f +3c374e08 +10f6eb7a +b5b038ae +55280edc +5137c0a7 +e355df3f +429227b8 +a0cc435b +1c12e510 +786a7939 +18e9d495 +fbb8174d +be5232eb +6999d051 +ed896a8f +82357290 +7ff3126c +3baa0645 +3b313bab +fdf97459 +82810b5f +6ac74a81 +7ed4c8b8 +df629137 +5264ccc2 +157c7bf5 +493aebcc +944c239e diff --git a/example/testvectors/lte/reference/block2_inp_cfg.dat b/example/testvectors/lte/reference/block2_inp_cfg.dat new file mode 100644 index 0000000..7d067b1 --- /dev/null +++ b/example/testvectors/lte/reference/block2_inp_cfg.dat @@ -0,0 +1,15 @@ +043f0003 +00002713 +012e8195 +00020004 +6052595d +706c717f +75777f73 +54606a68 +00618618 +00618618 +00618618 +00618618 +01770198 +02200330 +00000110 diff --git a/example/testvectors/lte/reference/block3_coded_bits.dat b/example/testvectors/lte/reference/block3_coded_bits.dat new file mode 100644 index 0000000..3d2217f --- /dev/null +++ b/example/testvectors/lte/reference/block3_coded_bits.dat @@ -0,0 +1,108 @@ +1e190e4e +a20374e3 +fd0f89b7 +329573fa +75a980ec +3aa30266 +6aa9bb0d +c458fe7b +7a113d1c +ee54e0da +dd789323 +f341c9ab +46766de3 +fc1e22ef +4959ff69 +ea458998 +c63e8bd2 +c11c07bf +102f8a73 +e064577b +139bb3ba +d55583b7 +35b5ff97 +24ba0c28 +c8aacfee +395777cc +48844ee6 +9bfd6036 +e7db9145 +99e872a6 +822e9398 +860f1ff3 +a70d1fb3 +373d1abb +9ebbc579 +0000000f +f9b3e01a +2da5a205 +c6328d94 +67034f11 +99846943 +51b1036b +c6f0a431 +afd5b037 +dfcbc8b4 +7a787318 +1c0f9b45 +1c5c031a +16a1f83f +892a300f +f7736217 +e12ef946 +d857fa14 +dcb4043f +f03b5c3b +071c7a0d +f27ea838 +64372509 +c4ad1674 +7ba5adec +766f72dd +80349aed +f655bdd1 +9715c9fc +eaf00514 +e0d84ef8 +6ad30695 +cbdb8c52 +64d8b641 +b3bc5877 +794d47a9 +0000000c +804ff74a +1a4734dc +1caff237 +2cc34201 +c523179a +db417f68 +ccfae7da +dea906d9 +73ba9138 +5316db14 +5a0b2c0d +db34e57d +722399cc +81406c5a +2badc23a +fdbb204c +1f5fb7db +9ecb51f9 +5f906124 +5c2c2197 +8359ca71 +48ef877d +6b9c7ad6 +236decc5 +f2317b29 +fc54e00f +1b5f93a0 +ea286bc3 +bcf05c30 +1d778d91 +68b7fb0a +e0ff62d0 +80fcabf5 +19237d12 +d34763f7 +00000009 diff --git a/example/testvectors/lte/reference/block3_info_bits.dat b/example/testvectors/lte/reference/block3_info_bits.dat new file mode 100644 index 0000000..4add4df --- /dev/null +++ b/example/testvectors/lte/reference/block3_info_bits.dat @@ -0,0 +1,35 @@ +1e190e4e +a20374e3 +fd0f89b7 +329573fa +75a980ec +3aa30266 +6aa9bb0d +c458fe7b +7a113d1c +ee54e0da +dd789323 +f341c9ab +46766de3 +fc1e22ef +4959ff69 +ea458998 +c63e8bd2 +c11c07bf +102f8a73 +e064577b +139bb3ba +d55583b7 +35b5ff97 +24ba0c28 +c8aacfee +395777cc +48844ee6 +9bfd6036 +e7db9145 +99e872a6 +822e9398 +860f1ff3 +a70d1fb3 +373d1abb +9ebbc579 diff --git a/example/testvectors/lte/reference/block3_inp_cfg.dat b/example/testvectors/lte/reference/block3_inp_cfg.dat new file mode 100644 index 0000000..7afcd55 --- /dev/null +++ b/example/testvectors/lte/reference/block3_inp_cfg.dat @@ -0,0 +1,15 @@ +045f0003 +00002b13 +012e81b5 +00020004 +747f5f62 +5e5b5d52 +52616362 +7a7b7f70 +00618618 +00618618 +00618618 +00618618 +00cf0118 +02300348 +00000118 diff --git a/example/testvectors/lte/reference/block4_coded_bits.dat b/example/testvectors/lte/reference/block4_coded_bits.dat new file mode 100644 index 0000000..da28482 --- /dev/null +++ b/example/testvectors/lte/reference/block4_coded_bits.dat @@ -0,0 +1,6 @@ +28800e20 +00000007 +711d33e0 +00000f4a +4e71e000 +00000f2a diff --git a/example/testvectors/lte/reference/block4_info_bits.dat b/example/testvectors/lte/reference/block4_info_bits.dat new file mode 100644 index 0000000..36bb34c --- /dev/null +++ b/example/testvectors/lte/reference/block4_info_bits.dat @@ -0,0 +1,2 @@ +28800e20 +00000007 diff --git a/example/testvectors/lte/reference/block4_inp_cfg.dat b/example/testvectors/lte/reference/block4_inp_cfg.dat new file mode 100644 index 0000000..51e9158 --- /dev/null +++ b/example/testvectors/lte/reference/block4_inp_cfg.dat @@ -0,0 +1,15 @@ +00270000 +00000903 +012e8195 +00020004 +6d626b62 +5059747f +695e605d +7b7e747f +00618618 +00618618 +00618618 +00618618 +000d0014 +0014001e +0000000a diff --git a/example/testvectors/lte/reference/block5_coded_bits.dat b/example/testvectors/lte/reference/block5_coded_bits.dat new file mode 100644 index 0000000..e00bf94 --- /dev/null +++ b/example/testvectors/lte/reference/block5_coded_bits.dat @@ -0,0 +1,579 @@ +32f50e15 +6cd5b153 +a10fd98e +e69e03d3 +e914d579 +a4132e39 +8abc99db +8dbf74be +06d8e947 +57df7717 +a032b0c6 +af1a9992 +57cd3126 +309ab9ac +a7c08f36 +5fc57f45 +a3869daa +9f034d54 +2361fdab +49753d79 +d80d9f4a +e70b66f9 +a908199e +96e6202c +e6692888 +2cb0ad30 +e046ea94 +becba26e +04219eff +25a60049 +da724598 +364250eb +f01ff821 +fff7cf83 +0c9c0438 +c8ce7c72 +13fb4407 +eeb5b24f +87c8e00f +448dfb53 +360b54ca +b587dd87 +af1c15f1 +f4bd327a +074d8c6d +17c3bbf0 +92c7bed3 +c3cf28c1 +f6c2e8a8 +d604ba7f +4ed45a4f +fbd6517c +293a0471 +12bc39ea +25b914ec +1eaa4a6e +783f2f8c +4811ff6b +fec528b8 +a67c9980 +41a9a7be +7375d275 +43c0773e +21c8ef3a +27406354 +6cd33d30 +027fdad2 +d1493612 +5917e1bf +6911efaf +eaf52cb0 +e47ed142 +f3bdae93 +507e1021 +83e97ef0 +612bfb1a +ec791152 +83c58d6c +5f03edd0 +0b4afdf9 +0bd18855 +df0dc782 +813cfad4 +2d7a9a8e +710a08a7 +9289412c +78df0e85 +4e518cfb +86261180 +e6010b90 +22f49881 +0969f19e +eaf8915f +8bded7aa +0807c010 +707823ff +0f7dfdf1 +88a38309 +6afa734f +3374d6d0 +02f977b8 +7279775e +7a40f55e +9958c979 +a7d2c907 +cf6d762f +ab5c8b0e +970b0337 +b07dd9ad +71b6ff1b +a4a91da4 +0df8c62a +ee06cb80 +528cbb7e +06140c6f +625b1256 +e124a4e5 +3b7316c0 +72815447 +7d048aaf +f2e37657 +f3a2ba36 +94a61fd7 +cd940197 +d925fc50 +ed4bf669 +292510d4 +d664361c +6bc46b8b +a6a44d24 +790dc8b7 +e2f162d3 +77a2f374 +c6f20ff2 +ecdc62cf +d575dd40 +200def39 +7b1086c0 +90b86401 +12861ed3 +afd50917 +bf1555d0 +a42176ff +1fa8803e +da87aae2 +42c229cb +a6506a1c +7f81b174 +94463ede +cbd47207 +a1c6c568 +ad366479 +4a782feb +ac7815f7 +c2fc8dea +0cb275b4 +564a6bf3 +fe5a7c1c +7aa0d457 +9f18bae9 +df31f03f +8f10e43f +c801b431 +ed1720dc +19453fcc +dba0c78b +8beebee0 +1153d8e5 +e304eca3 +0b660e65 +35f99e9f +383e2b29 +0928ffed +ad74b0dc +fb7c0f8a +b42253f7 +d6d8c1a0 +5de43703 +d383858b +d95a8fcc +365bc82d +97b7f48b +865d8525 +049137b4 +04fe5adf +d9526cd4 +0e13cc7f +122331a9 +ee595914 +b3d095c9 +187b2708 +fc5e0d7f +00000002 +fa6d9483 +5ec3e508 +fcafc95a +76373861 +d9822a93 +b5c8e980 +5c9a47be +8bec9804 +05f2e38a +0e1f3d1d +6029aad8 +1cc57da0 +34715f36 +2aac9d83 +5e0e5bb2 +eb334560 +8bbfe6c8 +0cd16c36 +e2f2b220 +24edbc0e +1bac9181 +4d0e1fb4 +ca368943 +e8ebe039 +382d4b65 +a4e41fc3 +eeffaf02 +3e4eb0c0 +9b7c792c +34b6e9b9 +18d35a08 +152a97da +83b62832 +16209b51 +7ea93c26 +763d0974 +bcb7fc04 +ddad7a86 +caeb3d32 +1516b7e1 +5bdd919c +e3caf557 +525dcd1f +cba15de5 +04bf2d8c +ce0cd050 +a030d788 +91a1d635 +55e4e285 +b54802ac +c9114b55 +2a127f47 +706b3c4c +bd491de1 +34a71f37 +b7c8f5fa +92569c17 +1f565860 +8aae05d2 +6509e080 +5c57f904 +9c70143e +f87a3d23 +db4c7bb8 +3713f178 +64b28610 +a43156b3 +625061bd +9a27efec +63f10f81 +af57d00d +9c442cc3 +26a180a1 +44ad577c +6be3adcd +f20710c5 +de34bf7d +1f33c5c3 +9f76df59 +a9681513 +dd588c90 +824530f7 +cf206511 +d136d85a +76dc78f9 +eec38f39 +e625096e +6e96172a +18421880 +a54f0e99 +ad224652 +901782e4 +7cfb71eb +fa1e5df2 +78047a6d +ea350bff +46e1fccc +2b581f90 +61c2a621 +28985c2d +775d3de8 +7434eed0 +0c132377 +aea17740 +8db39ed7 +ef2b484f +bd9d137d +74ddeb5a +799520b8 +a595c517 +8f571228 +0b8fe23c +93d64e80 +33fe9e0a +71b8e312 +6dd787a8 +487bb54e +cda652a9 +74bb9159 +7c482868 +53a2ef40 +682d4c5b +9f5f2b29 +4bd13b3a +54938944 +911d6f63 +99a96d8c +5ccf8867 +c732c75d +8c661892 +34aceb47 +d751ca5b +3dfe814b +ac1daff4 +371d84d5 +f93e8113 +7d31e680 +de5785e7 +a34f1c01 +c9855e5b +1c6443f4 +4b8379c4 +8f953c16 +f8cb69f0 +22236f4a +5eaad7a7 +65305b29 +9668aba2 +d1585783 +e9b63aed +5b45e0ff +b8882634 +2641e8ae +2441cd1a +e4fd16af +9740d70b +a81c2ecf +c4ec335d +36fd8c7a +ab88ebad +b8111ebf +15194f85 +9f4fe2b6 +e5800969 +14c7cb3e +ca5ad929 +b4a94a9a +2246f2e9 +4b720d2c +a951aeba +1767de36 +cf6d734a +deec62df +513f431d +f947afb5 +ac30e187 +665592c7 +e83b6038 +15252067 +6ea22fd7 +c699a502 +3aae225d +f1d21ae7 +06a21431 +06fe9825 +877df98c +7d554ad8 +20ac116d +34eea051 +355903a4 +88434391 +b339ac0b +0000000d +45aed34f +18c42794 +1a00e0c5 +f19934f6 +2fe1806c +5fd74c04 +06cd59d0 +3510e2e0 +4325eafc +051a8e6b +30f846d8 +b2b910df +208cd71e +8a7fd7c4 +4cfcdb00 +dca15a38 +7cf728c6 +c0f612e1 +b37415e7 +33799287 +634369cc +af223a65 +6dea2292 +644c5f62 +89d0d173 +202a0881 +f3c6df90 +bd310ab2 +3ed6be3b +a3e67ccc +e9ea64e8 +a3524a6e +983d4a7e +4d906d9a +1e2d1788 +afbd45fc +84eee765 +ca3ff7f5 +52aa60dc +93a32035 +d4fa163d +d529fd09 +1d736e94 +0924a86c +ae46b6d2 +da7e9f56 +a3f17f01 +a0154f4d +19f23b05 +e7700f55 +81f3a78b +6685940e +0149628d +180a918c +99079db9 +bbbbecf6 +61550702 +5eb3aed2 +01b8d983 +0e244889 +f9531379 +49aa74a3 +fb974ed3 +a62202ee +db5feb63 +7599ca75 +19228257 +e472ac8f +54005515 +30e049f9 +920b458b +259ecf97 +da987f74 +1dd1aabb +1330191d +b4b2a888 +6a29cdb2 +f98d6c4c +f4897bc9 +34ee8262 +f106a378 +2d064387 +76ca9bfe +6f3abc69 +ecce3196 +b1c831e7 +e5f4f683 +dfbee7d1 +0f218d5f +4b0df9fa +ffdd9346 +774df3e2 +87c17be2 +0864b706 +d27b0735 +4868b99d +90e46a54 +60bae3ad +143ec776 +ac299a9d +6542d12c +1ea2ea54 +f8e53d59 +b94b019f +bb2cbb76 +72a932b0 +de73b0cb +46a88fbb +fab4e0b3 +1e1aef1b +82d83e0e +4a3643c9 +9e743e5e +2991b8ad +d1be24ad +dc036017 +4f1b60b6 +8bbeab1b +52fbb056 +30df8604 +339166a5 +0a56b6e2 +95b7f88a +c8f3e086 +c18732b4 +18359dfc +3ace4885 +710f98aa +879ef160 +93b2020a +e74492ab +81bbd6e4 +44780744 +cdf1be98 +13372ddf +0a61c433 +a6e49e54 +1a1deb37 +b028ca88 +86887c5d +81b282ec +bf6a6511 +315e1462 +c19e56b5 +700509d5 +2534ad0b +fd971e88 +76526684 +173110bf +b3e9d55c +b009f818 +6f89f915 +5b2f5e5b +b9abb23a +6c609d0d +fc5427de +af0f149f +1f52abbf +a3f0f7a8 +f874f299 +9172d16e +cc68a627 +8423cb00 +cf8fb041 +eca0a41d +44e79e97 +2d5a354f +9b411461 +b61ef865 +75191af8 +62375ddd +2add9d97 +94978014 +799bf93b +26ac1913 +519ae415 +bf332d85 +31cc97e4 +23cd4766 +6b97545c +e2156061 +5f1e5986 +e2507df9 +de754ddf +5de4634b +ee58f717 +12910b41 +9634f0e4 +f6dfc568 +e80ccafc +140b1331 +de91fcd8 +0000000d diff --git a/example/testvectors/lte/reference/block5_info_bits.dat b/example/testvectors/lte/reference/block5_info_bits.dat new file mode 100644 index 0000000..21469e3 --- /dev/null +++ b/example/testvectors/lte/reference/block5_info_bits.dat @@ -0,0 +1,192 @@ +32f50e15 +6cd5b153 +a10fd98e +e69e03d3 +e914d579 +a4132e39 +8abc99db +8dbf74be +06d8e947 +57df7717 +a032b0c6 +af1a9992 +57cd3126 +309ab9ac +a7c08f36 +5fc57f45 +a3869daa +9f034d54 +2361fdab +49753d79 +d80d9f4a +e70b66f9 +a908199e +96e6202c +e6692888 +2cb0ad30 +e046ea94 +becba26e +04219eff +25a60049 +da724598 +364250eb +f01ff821 +fff7cf83 +0c9c0438 +c8ce7c72 +13fb4407 +eeb5b24f +87c8e00f +448dfb53 +360b54ca +b587dd87 +af1c15f1 +f4bd327a +074d8c6d +17c3bbf0 +92c7bed3 +c3cf28c1 +f6c2e8a8 +d604ba7f +4ed45a4f +fbd6517c +293a0471 +12bc39ea +25b914ec +1eaa4a6e +783f2f8c +4811ff6b +fec528b8 +a67c9980 +41a9a7be +7375d275 +43c0773e +21c8ef3a +27406354 +6cd33d30 +027fdad2 +d1493612 +5917e1bf +6911efaf +eaf52cb0 +e47ed142 +f3bdae93 +507e1021 +83e97ef0 +612bfb1a +ec791152 +83c58d6c +5f03edd0 +0b4afdf9 +0bd18855 +df0dc782 +813cfad4 +2d7a9a8e +710a08a7 +9289412c +78df0e85 +4e518cfb +86261180 +e6010b90 +22f49881 +0969f19e +eaf8915f +8bded7aa +0807c010 +707823ff +0f7dfdf1 +88a38309 +6afa734f +3374d6d0 +02f977b8 +7279775e +7a40f55e +9958c979 +a7d2c907 +cf6d762f +ab5c8b0e +970b0337 +b07dd9ad +71b6ff1b +a4a91da4 +0df8c62a +ee06cb80 +528cbb7e +06140c6f +625b1256 +e124a4e5 +3b7316c0 +72815447 +7d048aaf +f2e37657 +f3a2ba36 +94a61fd7 +cd940197 +d925fc50 +ed4bf669 +292510d4 +d664361c +6bc46b8b +a6a44d24 +790dc8b7 +e2f162d3 +77a2f374 +c6f20ff2 +ecdc62cf +d575dd40 +200def39 +7b1086c0 +90b86401 +12861ed3 +afd50917 +bf1555d0 +a42176ff +1fa8803e +da87aae2 +42c229cb +a6506a1c +7f81b174 +94463ede +cbd47207 +a1c6c568 +ad366479 +4a782feb +ac7815f7 +c2fc8dea +0cb275b4 +564a6bf3 +fe5a7c1c +7aa0d457 +9f18bae9 +df31f03f +8f10e43f +c801b431 +ed1720dc +19453fcc +dba0c78b +8beebee0 +1153d8e5 +e304eca3 +0b660e65 +35f99e9f +383e2b29 +0928ffed +ad74b0dc +fb7c0f8a +b42253f7 +d6d8c1a0 +5de43703 +d383858b +d95a8fcc +365bc82d +97b7f48b +865d8525 +049137b4 +04fe5adf +d9526cd4 +0e13cc7f +122331a9 +ee595914 +b3d095c9 +187b2708 +fc5e0d7f diff --git a/example/testvectors/lte/reference/block5_inp_cfg.dat b/example/testvectors/lte/reference/block5_inp_cfg.dat new file mode 100644 index 0000000..35bb645 --- /dev/null +++ b/example/testvectors/lte/reference/block5_inp_cfg.dat @@ -0,0 +1,15 @@ +17ff0016 +00003f13 +012e8195 +00020004 +7f6f6a6e +67634a5a +77616567 +6b69697f +00618618 +00618618 +00618618 +00618618 +02e703c0 +0c001200 +00000600 diff --git a/example/testvectors/wcdma/block0_cfgreg.dat b/example/testvectors/wcdma/block0_cfgreg.dat new file mode 100644 index 0000000..9a43081 --- /dev/null +++ b/example/testvectors/wcdma/block0_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +100 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block0_hard_dec.bin b/example/testvectors/wcdma/block0_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..1c0428a5ae5d86400cb8a16442877f951c2a6b1e GIT binary patch literal 16 XcmXTn`^fD4y|?Df7XGa)3=9kaJXHn) literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block0_hard_dec.dat b/example/testvectors/wcdma/block0_hard_dec.dat new file mode 100644 index 0000000..0dece7c --- /dev/null +++ b/example/testvectors/wcdma/block0_hard_dec.dat @@ -0,0 +1,4 @@ +03f10e74 +7c8df743 +b50fb4cc +00000004 diff --git a/example/testvectors/wcdma/block0_llrs.bin b/example/testvectors/wcdma/block0_llrs.bin new file mode 100644 index 0000000..a915acc --- /dev/null +++ b/example/testvectors/wcdma/block0_llrs.bin @@ -0,0 +1 @@ +ááááááááááááááááááááááááááááááááõááááááááááááááááááááááááááááááááááááááááááááâááááááááááááááááøááááááááááááááááááááñáááááááááááááááááááááááááááááááá \ No newline at end of file diff --git a/example/testvectors/wcdma/block0_llrs.dat b/example/testvectors/wcdma/block0_llrs.dat new file mode 100644 index 0000000..96fd175 --- /dev/null +++ b/example/testvectors/wcdma/block0_llrs.dat @@ -0,0 +1,100 @@ + -31 -31 -31 + -31 -31 31 + 31 31 -31 + -31 31 31 + 31 -31 31 + 31 31 31 + 31 31 31 + -31 31 -31 + -31 31 31 + 31 -31 -31 + 31 -31 31 + 31 31 31 + -31 -31 31 + -31 -31 -31 + -31 -31 -31 + -31 -31 31 + 31 31 31 + -31 31 -31 + -31 31 31 + -31 31 31 + 31 31 31 + 31 -31 31 + 31 -31 31 + 31 -31 18 + 31 31 31 + 31 31 -31 + -31 31 31 + -31 31 -31 + -31 31 31 + -31 -31 -31 + -31 -31 -31 + -31 31 -31 + 31 31 -31 + 31 31 31 + -31 31 -31 + -31 31 31 + -31 31 31 + -31 -31 -15 + 31 31 31 + -31 -31 -31 + 31 -31 31 + 31 -31 -31 + 31 -31 -31 + -31 -31 -31 + 31 -31 -31 + 31 31 -31 + 31 -31 31 + 31 -31 31 + 31 -31 -31 + -31 -31 31 + 31 -31 -31 + 31 31 -31 + -31 31 -31 + -31 -31 31 + -31 31 31 + 31 -31 -31 + -31 -30 31 + -31 31 -31 + 31 -31 -31 + 31 31 31 + 31 31 -31 + 31 -31 -31 + 31 31 31 + -31 31 31 + -31 -31 -31 + -11 31 -31 + 31 -31 31 + 31 31 -31 + -31 -31 31 + -31 -31 -31 + 31 31 -31 + 31 -31 31 + -31 -31 -31 + -31 -31 -31 + 31 -31 31 + -31 31 -31 + 31 31 31 + 31 -31 31 + -31 31 -31 + 22 31 31 + 31 -31 -31 + 31 -31 31 + 31 -31 31 + 31 31 -31 + -31 -31 -31 + -31 -31 -31 + -31 -8 31 + -31 -31 31 + 31 31 31 + -31 31 -31 + 31 -31 -31 + -31 -31 -31 + 31 -31 31 + 31 31 31 + -31 31 31 + 31 31 -31 + -31 -31 31 + -31 -31 31 + 25 31 31 + -31 31 31 diff --git a/example/testvectors/wcdma/block0_soft_dec.bin b/example/testvectors/wcdma/block0_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..8c662ea1fbcb33f064b8d564104d499a7fbcdfe0 GIT binary patch literal 300 zcmdsu!4Uv32*SEK$L5W(Q`84SINCHxS9sNmuwd01NR;egt$vo4Z%Hx_KcCzM?`ARo literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block0_soft_dec.dat b/example/testvectors/wcdma/block0_soft_dec.dat new file mode 100644 index 0000000..139b9c7 --- /dev/null +++ b/example/testvectors/wcdma/block0_soft_dec.dat @@ -0,0 +1,100 @@ + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 diff --git a/example/testvectors/wcdma/block0_status.bin b/example/testvectors/wcdma/block0_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..45961e8d1900402d4b55cf10e23ea14b87a3f627 GIT binary patch literal 12 Rcmcb^%E0j?oWX$s2mlqF0%ZUI literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block0_status.dat b/example/testvectors/wcdma/block0_status.dat new file mode 100644 index 0000000..4c65dc0 --- /dev/null +++ b/example/testvectors/wcdma/block0_status.dat @@ -0,0 +1,3 @@ +080005dc +400057e4 +00000000 diff --git a/example/testvectors/wcdma/block0_tail_llrs.dat b/example/testvectors/wcdma/block0_tail_llrs.dat new file mode 100644 index 0000000..8cb1d61 --- /dev/null +++ b/example/testvectors/wcdma/block0_tail_llrs.dat @@ -0,0 +1,6 @@ + 31 31 + -31 -31 + 31 31 + 31 -31 + -31 31 + -31 31 diff --git a/example/testvectors/wcdma/block10_cfgreg.dat b/example/testvectors/wcdma/block10_cfgreg.dat new file mode 100644 index 0000000..cac88c8 --- /dev/null +++ b/example/testvectors/wcdma/block10_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +810 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block10_hard_dec.bin b/example/testvectors/wcdma/block10_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..404139a6521546db19614a58ca7257a4811fa059 GIT binary patch literal 104 zcmV-u0GI!<4rO8!yZmLZX%BIUL!HXhWH$Nhe^Uzb0L^-|jqL37#ii|aWFf0JJPYfx zDZYQ~A&zk<0hy5G4%$g?${8MlbO)2C&sXiZ9+f8B(ElzM#LFAain&cA>MOZgaW-h- KyD=Xd3;+P;4KkAe literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block10_hard_dec.dat b/example/testvectors/wcdma/block10_hard_dec.dat new file mode 100644 index 0000000..f5e22e7 --- /dev/null +++ b/example/testvectors/wcdma/block10_hard_dec.dat @@ -0,0 +1,26 @@ +62650eb1 +65fcbb13 +710f69af +ca9d4389 +f93664d4 +0a537feb +7acd00f2 +ecec8db4 +eda5c5f4 +ab216475 +eb0b3c37 +7fbe29b2 +718e21ec +90990128 +49da0ee4 +1e19ca6f +93077482 +ed57cfa7 +26951eb8 +2effd0db +1bcbc417 +4db98acd +b92bea23 +6836715a +1f31bbe1 +00000c1b diff --git a/example/testvectors/wcdma/block10_llrs.bin b/example/testvectors/wcdma/block10_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..0524773a0cf1e5fe27dae01e5199059f4349dfdd GIT binary patch literal 2442 zcmWla*K*^y5{8izvywe&=lvgRt9I+QLcd#lUQ=4LsX66{ep?u}llYatez3A=iV7(+Y_wDplCxOBY*GOLX>S`K7O}5M@-3g*9&YP40=LoH zl#q=QTD6ko_wdoOl9|DAfyQOjmD+eT0eq2Zfg;}8zv0Z#>w#LPBxB-ROE8D{&-$v0 zV?dE7J-X86dnq_5y}X#^zSr%-lTi@aefOVB-d|I)lF`{Weq27fzq&C{+|e&j0B0=p zagCL2npmiEHf79ApBz%4XzT;ekgi=M$e!^!@b%P`cp277_KWEUY*%jEpB%`-`@zCR z08^8J7MN6zboS@&^j@#|)D*Ec-BLy|M}1$EAn@;6Fh&6T{Y!s_@#(0uQu7YX677G?5ENBnHTkn_CK4QHZjB2ZAoc{w()wY zARAb!M5YZ^u0H!q%WHrCek~C^`8VkLs79$IoDMl9!mv2M*1C;^*#EmpO3A|q0x1u% zcuLWWYEkvox2sloV(@}g;R22sfNpAoKtZdKDnSUU$hv)eXJ_ZT!K39wej~e1)lj`8 zz(+UX%RvmhAeyU7kwi{8b6zH)o(0g$oj6XK;-Tr>zy9Q{bLWGkTq zxbqiDSeCsDVO*aXV-*w>!3=v54?)$NCk}n1 z9v7R9X>;P(|I_^(>ypjI5~Ab4=`*FM;|WyXv1x_)xK)L=20Kd)o$7z%Kdwo);B01hTcJ=(McW&2e=?D z566s1c8;aYMNAl^s(HOg@>=LsrqJ13yiu3~BPK?k8FgqRZ8*V4!#+oiO^TjaN%TK&s zj}nLL&fvO{ac-M>@5?osxtPpxMRRs#-3PI?ac_P&nWDqHds%1s0un}?g@f$}@#am# zZnOS7#jXRJGFxLSNUNt{x)G)6to+ hpGu6@-)F+5dsc|9VP~#MT7S@?YpMgm+2kh$;D7kOlwtq? literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block10_llrs.dat b/example/testvectors/wcdma/block10_llrs.dat new file mode 100644 index 0000000..e2e7c34 --- /dev/null +++ b/example/testvectors/wcdma/block10_llrs.dat @@ -0,0 +1,814 @@ + 1 7 9 + 5 7 -3 + -12 10 15 + 2 20 -19 + 8 16 -2 + 14 -1 2 + -5 10 7 + 5 6 12 + -26 10 -9 + -5 10 10 + 17 14 7 + 3 -3 8 + 1 -16 15 + -19 -4 2 + -5 8 1 + -2 -8 -15 + 3 -8 7 + -28 -21 2 + 9 10 27 + 7 6 -2 + 14 8 9 + 22 10 12 + 10 18 6 + 2 0 -12 + 6 2 4 + 8 -14 5 + -1 4 -17 + -7 22 0 + 2 -8 -22 + -3 7 7 + 13 15 -18 + -2 -11 4 + 4 -21 -2 + 10 -11 4 + -10 6 -26 + -15 5 1 + -11 -6 9 + -11 -1 28 + 12 -8 -3 + 3 0 -10 + 15 -6 19 + -2 0 -16 + -4 -9 -15 + 20 7 19 + 24 -11 19 + 8 16 -1 + -10 5 22 + 4 23 -6 + -5 -2 6 + 5 -9 -1 + 13 4 10 + 7 -7 -19 + 9 16 16 + 6 -3 -13 + 10 -1 10 + 2 -3 12 + 3 24 -13 + -23 -6 -12 + 8 10 4 + 0 21 -10 + -17 6 -14 + 20 -8 8 + 15 -4 8 + -8 -7 -13 + -5 -13 -6 + 30 10 -26 + 4 -19 -13 + 1 -2 -13 + 1 11 -10 + 5 -17 17 + -15 8 -4 + 2 -6 -4 + 15 -16 -16 + -1 -21 -12 + -19 4 -20 + 16 -7 -1 + -16 4 3 + 10 -11 3 + -8 6 10 + -26 16 -4 + 12 20 10 + 2 1 1 + 18 2 8 + 30 16 -4 + -21 -4 -8 + -8 1 -17 + 1 31 -10 + -22 12 11 + 10 -8 -3 + 3 9 -3 + -8 7 13 + -6 6 -12 + 3 14 13 + 21 11 23 + 9 -2 -5 + -17 -11 4 + 7 -8 -6 + -3 2 2 + -26 -13 25 + 10 9 5 + -4 -14 -5 + -19 -3 3 + -10 -9 11 + -7 1 -11 + 3 8 -7 + 19 -21 -3 + -12 -8 -2 + -2 -11 -11 + -2 -8 -6 + -12 -1 8 + -1 11 -9 + -8 -4 8 + 14 12 -12 + 7 2 18 + 5 -10 -22 + 7 -1 19 + 2 11 -3 + 7 3 14 + -25 15 12 + -2 -9 6 + -9 14 -14 + 6 3 11 + -6 20 -13 + 4 -3 -3 + -13 4 5 + 5 6 10 + 10 1 -9 + 12 -8 -11 + -4 25 -3 + 1 -5 -13 + 2 -14 -21 + -10 -2 -17 + 8 -4 6 + -3 -1 3 + 10 24 -8 + 9 -5 -1 + -15 -8 8 + -8 -15 -9 + -7 20 23 + -18 -14 -8 + -6 2 0 + 18 6 5 + -11 12 3 + -1 23 -9 + -22 5 17 + 6 -19 -5 + -2 -13 -26 + 5 -11 -13 + 13 -9 -9 + -2 9 -19 + -3 4 -7 + -25 -3 17 + 14 -16 1 + -14 6 5 + -19 -14 -13 + 14 -2 8 + 15 -13 2 + 9 -28 -9 + 1 2 8 + 0 14 12 + 23 -6 -9 + -4 22 20 + -10 1 1 + 9 6 7 + -2 -3 -14 + 23 4 -18 + 13 -14 9 + 8 17 -6 + -2 -8 -2 + 9 13 -3 + 11 12 -25 + 11 1 5 + 15 22 14 + 21 -8 -18 + 8 15 7 + -11 3 23 + 22 25 21 + 16 14 -7 + -8 23 -10 + -15 4 -14 + 19 0 -5 + -9 20 1 + 16 -2 12 + -2 10 -12 + -6 13 -2 + -4 5 20 + -17 31 -6 + 30 0 8 + -10 -2 -4 + -2 -7 12 + -14 -17 3 + -21 -9 -15 + -12 -22 5 + 28 0 -10 + 2 2 -6 + -6 18 5 + 9 8 -16 + 15 -8 11 + 10 22 13 + -6 5 -7 + -11 18 0 + -10 17 -23 + -1 29 -9 + 4 -10 0 + -13 -1 9 + -7 16 1 + -8 -15 6 + -21 1 8 + 7 -14 1 + 3 -15 -12 + 10 7 11 + 20 -1 -6 + -20 -1 -11 + -4 1 -20 + 10 -15 16 + 6 0 5 + 0 17 -9 + 24 8 -10 + 5 -11 -1 + -6 -5 -9 + 12 -13 5 + 1 4 5 + 10 -9 -14 + 4 1 -4 + -13 -4 10 + -17 14 -10 + -10 -11 -7 + -15 13 1 + -9 8 -9 + -7 -15 -11 + -3 17 -6 + 10 -6 3 + 16 -5 -3 + -11 14 -5 + 4 7 -4 + 1 -7 20 + -11 2 7 + -2 -8 -1 + -19 -9 -13 + 25 -19 -11 + -6 11 22 + 1 -2 -12 + 20 0 -7 + 7 14 13 + 5 -13 -10 + 1 -9 -13 + -2 -12 -11 + 16 -4 0 + -5 -25 12 + 0 13 21 + -3 -9 2 + 18 15 -18 + -9 -4 9 + 18 5 7 + 8 -10 17 + 29 18 -19 + -1 10 -23 + -23 -3 -7 + 27 -1 -15 + 6 -6 -5 + 12 6 2 + 11 6 9 + 15 11 11 + 11 7 3 + 13 -4 2 + 2 -7 14 + 10 0 6 + -8 12 14 + -17 -4 -13 + -11 -14 -24 + 5 -4 -9 + 12 -6 17 + 10 -1 9 + -15 -19 -1 + 2 -12 8 + 9 -7 0 + -14 -2 -22 + 8 -7 15 + -12 23 -10 + 0 15 1 + -14 -14 -11 + -8 7 10 + -2 7 9 + 11 2 0 + 0 5 10 + 0 3 -24 + 4 -5 0 + 16 -15 3 + 22 -16 10 + -11 -6 12 + 0 -5 -5 + 4 -14 1 + -7 7 18 + 2 11 3 + 6 14 2 + -23 -12 4 + -15 2 -4 + 9 -10 -2 + 7 -27 1 + -11 -11 3 + -1 -7 -4 + 18 -15 -1 + 16 -11 -3 + -19 8 -11 + 1 -14 -15 + -11 1 1 + -12 16 4 + -11 -6 6 + -16 -11 4 + 0 -2 13 + -6 10 -13 + -11 -9 9 + 5 6 15 + 14 2 2 + -8 -11 -18 + 12 -16 -8 + 1 21 9 + 6 20 12 + -16 13 -14 + 9 1 -5 + 1 6 5 + -7 -17 19 + 10 6 2 + -12 -2 -25 + 4 13 2 + -2 8 -1 + -5 -1 10 + -10 5 10 + -4 15 -22 + -26 3 15 + 16 10 -1 + 6 -6 6 + 12 14 -16 + 6 19 -9 + -8 -5 17 + -17 20 -10 + -6 16 -19 + 7 7 -1 + 8 14 -18 + 2 -5 0 + -16 -22 9 + -13 26 3 + -16 21 -8 + -9 12 6 + 13 2 10 + 10 1 -5 + -11 18 11 + 7 -5 19 + -3 23 19 + -8 1 10 + -4 -6 11 + 0 -19 -4 + -23 -3 4 + 4 10 -7 + -15 -16 11 + -13 9 -18 + 1 10 -4 + 8 9 -1 + -3 1 7 + 22 -15 -3 + 16 6 -9 + -24 -14 11 + -4 -2 -4 + 19 12 4 + 6 2 -12 + 2 3 -7 + -18 1 -11 + -21 11 -9 + 2 19 -7 + 16 -18 6 + 6 -12 -14 + 10 14 11 + 9 16 -5 + 6 -3 24 + 6 4 -4 + 8 4 -15 + 25 -7 -12 + 16 7 23 + 4 -11 1 + 3 16 8 + 7 5 1 + 1 4 3 + 3 12 1 + -27 9 -5 + -12 7 -6 + -18 -4 1 + 13 -26 -8 + 11 2 -9 + -12 0 2 + 4 -2 18 + -2 -1 9 + 11 -17 -9 + -1 -3 -19 + -15 11 2 + -9 -20 -4 + -16 9 1 + -6 8 -13 + 12 -19 2 + -6 8 -9 + -1 13 9 + -22 -13 -5 + 12 10 4 + 8 14 -6 + 7 21 -8 + 0 -5 8 + 12 16 -2 + -5 -12 -7 + 9 -9 -14 + 20 10 -3 + -8 3 12 + -13 -15 9 + -22 6 -1 + -10 1 11 + 14 20 -3 + 16 2 -2 + -13 10 3 + 7 11 0 + -2 -6 -2 + -8 -4 13 + 10 3 15 + 1 -3 -18 + 2 -1 -18 + -7 0 4 + -10 0 -3 + -10 17 7 + -5 -15 -2 + -25 16 -9 + -13 -4 -16 + -1 8 8 + -10 2 -4 + -18 -4 6 + -15 -9 -9 + -2 10 8 + -7 -16 -24 + 9 5 11 + 6 10 6 + 5 8 -7 + -14 4 -10 + -5 4 1 + 15 2 -7 + -5 13 -15 + -16 4 -11 + -13 -12 -9 + -26 -11 -16 + 17 -26 6 + -24 26 3 + -9 6 22 + 15 19 -25 + -8 -6 11 + 1 -5 2 + 8 17 -2 + -22 -17 0 + 2 -5 15 + 29 2 -14 + -5 -13 0 + 4 18 -16 + 0 4 -12 + 7 31 8 + 6 2 0 + 6 -7 -20 + -4 -12 7 + -19 -15 -8 + -3 13 -2 + -12 -17 -9 + -3 13 2 + 13 -18 -1 + -7 9 -6 + 15 0 -2 + 15 3 -13 + -3 6 -7 + 11 8 7 + 10 6 -2 + 12 -8 -1 + -14 -9 8 + -8 4 6 + 12 -3 -6 + -3 18 2 + -1 -21 3 + 6 24 -6 + -9 -10 -2 + 18 -13 18 + -6 -6 0 + 2 -3 9 + 10 11 -5 + 0 -1 12 + 11 21 -10 + 15 -6 4 + -7 -9 0 + -21 4 5 + 3 -1 11 + -14 7 21 + 1 14 3 + 5 4 -3 + -12 -1 14 + 17 -20 -12 + -3 -5 6 + 4 -7 6 + 2 6 2 + -7 -10 -5 + 19 11 -14 + 3 3 -7 + -12 1 -2 + -17 16 -10 + 7 -22 -15 + -12 13 9 + 18 1 16 + 15 13 5 + 12 13 2 + 3 -3 -17 + -13 0 10 + -17 -14 3 + -12 0 15 + -15 -3 -6 + 9 -16 10 + -19 0 12 + -13 -8 2 + -8 3 -19 + -19 -1 12 + -17 0 -4 + 3 -20 -2 + -7 -4 -9 + -12 -2 -11 + 7 -18 -2 + -7 -20 -17 + 16 -7 -14 + 28 -1 -5 + 7 -13 -6 + 0 -11 -5 + 9 4 6 + 11 -15 16 + -5 -5 -13 + -5 1 5 + -17 8 -20 + -7 8 9 + 1 -19 -9 + -13 -5 24 + 8 24 3 + 0 14 15 + -8 18 -28 + 14 18 26 + 4 -4 7 + -17 6 -15 + 5 14 -2 + 11 -1 14 + 3 -21 12 + 4 -8 -9 + 13 -31 14 + -21 -13 3 + -2 8 -2 + 19 -9 18 + -5 -13 5 + 19 3 -15 + 17 9 -4 + 18 -1 12 + 24 -9 -17 + 14 -12 -21 + -12 -3 15 + -1 6 7 + 18 -1 -5 + 15 -8 -4 + 11 15 -13 + -3 -10 7 + 14 11 -9 + -8 6 6 + 17 11 -15 + -13 -12 -3 + 12 16 -3 + -3 0 -3 + 8 -5 -12 + -14 -11 15 + 3 -19 11 + 14 22 -6 + -18 -1 8 + 6 2 -14 + 8 24 -6 + 6 -5 -2 + -18 -17 6 + -16 -25 -7 + 2 2 16 + 9 3 2 + 3 15 5 + 14 -6 -19 + -2 -10 -3 + 3 -1 -16 + 3 -18 -24 + 9 -2 8 + 8 -6 -2 + 9 -6 -18 + 1 5 0 + -17 -7 -5 + -6 -10 -7 + -12 0 -15 + 13 17 6 + 10 -1 4 + 4 -23 5 + 0 5 -21 + -5 1 0 + -8 -5 -8 + -4 -9 -10 + 0 -10 5 + -15 10 -16 + 17 15 -22 + 8 2 -11 + -5 17 3 + -10 -9 16 + 6 -9 -15 + -16 -4 4 + 7 8 -6 + 7 -6 -16 + 20 9 14 + -7 17 5 + 17 6 -13 + -6 20 -14 + -5 -10 6 + 15 11 -5 + 19 3 11 + -14 -6 -17 + -5 -7 -14 + -20 3 14 + -12 -4 -13 + -3 -3 28 + -11 -11 3 + 18 4 -12 + 6 22 21 + 3 14 -16 + 12 10 -11 + 14 4 8 + 13 11 -4 + 8 8 21 + 8 1 -10 + 9 24 6 + 24 16 1 + -16 -4 -12 + 15 -15 -11 + 10 -3 4 + 5 -15 -16 + -11 -9 -14 + 16 -6 16 + -7 -2 15 + 8 -17 14 + 19 -16 -10 + -2 -18 -19 + 11 -4 12 + -13 -19 -12 + 20 -19 -3 + -7 -16 -8 + -9 18 -14 + -13 1 11 + -12 -12 -15 + 3 -3 -8 + 14 2 7 + -25 -6 -2 + -9 -1 -8 + -15 6 -1 + 12 4 -1 + 14 -5 -6 + 22 -6 12 + -2 14 14 + -9 12 -19 + 13 -1 -4 + 13 -10 8 + -8 3 -11 + 8 -8 16 + 20 8 -3 + 0 0 -10 + 13 -31 15 + -2 -10 27 + 19 3 -6 + 2 6 9 + -13 1 -2 + -10 21 -3 + -1 -7 -6 + 9 -8 3 + -19 -20 -10 + 5 5 -6 + 9 7 -18 + -19 -8 -7 + -12 7 -6 + 8 -6 -7 + 0 -2 7 + -10 4 -13 + -3 11 0 + -2 -6 -2 + 22 0 3 + -23 -18 2 + -5 -9 7 + -5 9 6 + 7 5 -4 + 0 12 10 + 2 16 20 + 4 2 16 + 17 0 -19 + 0 -11 11 + 19 2 -2 + -8 -3 -14 + -3 13 -11 + -5 -12 -9 + -2 -8 1 + 6 10 17 + 6 3 -11 + 3 7 -7 + -4 7 -5 + 9 12 26 + -20 -15 5 + -4 10 3 + 29 4 -6 + -18 -3 17 + -14 -7 0 + -14 6 -11 + 6 23 10 + -12 -17 -8 + -16 -26 -11 + -17 -14 15 + 5 10 -7 + -9 22 13 + 8 -5 1 + -12 1 5 + 8 11 13 + 12 7 -20 + 14 -18 8 + -3 -15 6 + 6 -10 -9 + 1 -8 15 + 26 -9 8 + 4 -19 -8 + 23 2 12 + -13 -13 11 + -15 6 -5 + 1 2 10 + 8 -16 26 + -9 -11 -13 + 9 8 -7 + 11 -17 -5 + 1 4 -13 + -10 9 3 + 5 2 11 + -4 -10 17 + 8 13 8 + -12 6 -7 + 10 -13 2 + 2 0 -7 + 1 1 -6 + 16 10 -2 + -12 8 -13 + 1 -14 -1 + -8 -10 1 + -12 3 -9 + 1 17 6 + 13 -5 -10 + 10 -8 -4 + 7 7 -19 + -7 -12 -4 + -1 -17 -23 + -3 11 2 + 9 -15 5 + -4 -18 -3 + 3 9 -9 + 0 -5 -23 + -8 -5 -8 + -7 10 2 + -11 10 -15 + -1 2 13 + -19 13 12 + 17 2 -17 + -2 8 3 + 18 -11 -8 + -16 1 5 + -16 -10 12 + 4 -5 -5 + 1 -27 6 + -14 8 10 + -3 18 -7 + -13 -16 -13 + 11 -3 10 + -3 27 -2 + 8 -19 12 + 0 -1 3 + 3 -9 2 + -27 -1 -12 + -4 -19 31 + 9 2 19 + 15 1 4 + -15 13 7 + 6 -4 9 + 3 -8 -6 + -7 6 -20 + -8 -4 13 + 4 0 2 + 13 8 5 + 11 -7 -12 + -5 21 -4 + -9 9 -10 + -7 13 6 + 5 -9 -6 + 14 -9 15 + 11 -10 -2 + 6 -8 -9 + 10 -1 -9 + -8 -6 -26 + -20 2 5 + 17 5 -17 + 0 -7 17 + 7 2 15 + 5 24 13 + -6 8 1 + -7 -17 -14 + 1 2 -15 + -9 -23 -1 + 1 -1 -8 + -1 16 -1 + 0 22 -20 + 9 -19 5 + -14 0 0 + -8 0 0 diff --git a/example/testvectors/wcdma/block10_soft_dec.bin b/example/testvectors/wcdma/block10_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..6ac118f52d304d8f6ebf994001c2fb5359fa8237 GIT binary patch literal 2430 zcmeHF%TmKI5aSnNh8t&241`zHHmNmolcq^arVIx-!SJU@n|=bvxQ*@AYGqqCIyL~o z6|f~WL4N|8J;grTxt>irs2$WX0@sNOO;&kuzCxlOL+p8ASkh z+S?M&IYLKNVHeqp6>G$rXDK0~uB5E{OFZeaH)kcYEdnW6%0K^w>G^2Z;=uuNM3#ci zjgd?C3*}`0jrUu*;M}4X98inEFM2iK&7EGxmt0I%w_Xg|jfx$n&xm=?!D%90`{{^$%9?SbYJ^IR;db;9LuBr0{T_3&R;qj3l-=Du1bDJHQ P9he=M9he>XCkOrjWR;ZW literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block10_soft_dec.dat b/example/testvectors/wcdma/block10_soft_dec.dat new file mode 100644 index 0000000..78ae834 --- /dev/null +++ b/example/testvectors/wcdma/block10_soft_dec.dat @@ -0,0 +1,810 @@ + 127 0 0 + -121 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -112 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -97 0 0 + -127 0 0 + 115 0 0 + -124 0 0 + -114 0 0 + -123 0 0 + 127 0 0 + 82 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 118 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 112 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + 114 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -118 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 102 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -121 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -115 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -121 0 0 + 112 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + -127 0 0 + 117 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 81 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 112 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + -126 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -122 0 0 + 119 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 118 0 0 + 122 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 114 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + 124 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -111 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + -118 0 0 + -124 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 111 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -116 0 0 + 127 0 0 + -126 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + -119 0 0 + 118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 92 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -104 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 108 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -104 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -116 0 0 + -122 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 112 0 0 + -127 0 0 + -126 0 0 + -111 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -114 0 0 + 119 0 0 + 110 0 0 + -126 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 85 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -117 0 0 + 113 0 0 + 113 0 0 + -127 0 0 + -109 0 0 + -98 0 0 + -105 0 0 + -95 0 0 diff --git a/example/testvectors/wcdma/block10_status.bin b/example/testvectors/wcdma/block10_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..f5d48e96f2ce88269305ac1871832c657acb682e GIT binary patch literal 12 TcmWgAXW%%thsmLiL6QLg5&HtA literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block10_status.dat b/example/testvectors/wcdma/block10_status.dat new file mode 100644 index 0000000..9c1dc96 --- /dev/null +++ b/example/testvectors/wcdma/block10_status.dat @@ -0,0 +1,3 @@ +08002f12 +4002bcc6 +0019007e diff --git a/example/testvectors/wcdma/block10_tail_llrs.dat b/example/testvectors/wcdma/block10_tail_llrs.dat new file mode 100644 index 0000000..393cb30 --- /dev/null +++ b/example/testvectors/wcdma/block10_tail_llrs.dat @@ -0,0 +1,6 @@ + 0 -14 + 22 -20 + 9 -8 + -19 5 + 8 -12 + 20 8 diff --git a/example/testvectors/wcdma/block11_cfgreg.dat b/example/testvectors/wcdma/block11_cfgreg.dat new file mode 100644 index 0000000..5421175 --- /dev/null +++ b/example/testvectors/wcdma/block11_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +820 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block11_hard_dec.bin b/example/testvectors/wcdma/block11_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e30cf3ec19d3fb2b8336eb652ba009616fe5a87 GIT binary patch literal 104 zcmV-u0GI!*4i#+Ey8D7Nb`QaZgL};{h*>wHag!JImtUo|Is~u{!tM^*OmAKrPQo=V zHlojy@2Gdw3Ti>EuoaY!T5v7w4W_}K)f<_G>Dpu;{?GToICz8nv9mcAKSXyAe};P| KEu<%gObY-|aWO0a literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block11_hard_dec.dat b/example/testvectors/wcdma/block11_hard_dec.dat new file mode 100644 index 0000000..3aa0b9a --- /dev/null +++ b/example/testvectors/wcdma/block11_hard_dec.dat @@ -0,0 +1,26 @@ +6c150ead +82fbbad3 +c10f7633 +cd7b8386 +3759882f +179371a2 +a55f97f5 +b0043ab5 +0eeec20d +5e6f4cda +35c24e1b +cfa2362e +77a8ef93 +416a0ad4 +9415b0ad +2d705a8e +c1a60dec +991bd59e +64dae985 +f7cffe1f +837838c0 +39b3b1fc +77443f16 +7b867f0f +27a42d26 +000b4c86 diff --git a/example/testvectors/wcdma/block11_llrs.bin b/example/testvectors/wcdma/block11_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..c33c7118ef2941b2a1218fd035dbe90cf538dedc GIT binary patch literal 2460 zcmWNS2V&f|5{A(Mf}L9=JGOKGW4*jsvbJzp(Mx!Onfc2%kdnbPo__cq!>3R9--7>Q z4l&afDAtKcHShb6Q%>RhE)*#*krzy&)f(_3S@>Vu+|zl5(f*Rw}EiKStHg&gLsQ^t*Lxywqd;*`S!(VxD+VHoZlW ztoQ9j?AOlBCk+}Ia>LScC)MDJRyxXBg01oVB+ns8)rre3KzGJ3HESCspc|ykvvBaN z={y1to`?_TXZ!WnHTdk~;LK~Mm4oQpA_(|Lq!LUUV01d$h1t2_G^6ebDWMaP``(DE zSHME+2pPQ!s$)Tk*Nuy1S^=*e)wOv{Uj*V=L&HzlJE5wMojbG!1r537@Pf<}6A4zIEPIV1~jg1~@+#z4I9_ zWgw9b3|CEUOz{p{xznzA$D?0~<#@wMa~KjEb^TKu2Gj{Jt7`3&7Lf?Ro{1g1aWD`F zPA2-K*r~FQ$IrANwN06FK}1MT)l0(h4BxpeA=@iK`7~hNgKcNET0!D5$I`~D@8$u)+kUftyc;}bQ@ zTA-(f=KhC@?5hf?mtR}moJhSXXukP>Qg{h(=JT?!itkUnb4%*!ikfv>lDk4y6V!{J zKj76I-X=}}Xdk(bq37^xugwf^zR`9uI+hJ+ zR!*wV$aA1lg7t7p9nxs}}2lQM+ zmf2VzZOf-aLF|w0HvabgQY~<}^V!9tt%b92R!gcD49n9<8c>t%OCM^IQ1D8jDdqh1 zkHSP#W7kj*HZCz#kSwlr0mpU%a0Zn@4=yL_#I~WhZS>_%<(>e!j0 z7&jp?*VRGA+N!tL$KqId%pIXJ`ibx%>Jc|`(5_~9>YZ5FA^sssF6U(LrTo6cLC{{6 z`}+XmU$NzFL@)-ys!mv1)SN5RI=7aMR<~Y#*@rQL_`6F>aYut$cQ?3@afF8L`R_ysEwmfIRYw4^s9bm>2VhBU{Zq zaj2jkm(eBq)z{i*uM^qvf$iwJLb?U%%25>I~Id}ulN~ql&nnk zCv8Ukb}886VMUtr&4h4*yK?(fMhm`pXXmSdTj}-ys8%n%(L9 zhA9Y_VYIw|S_{j?mUw7Xga7E>wgMb5nW-x}XTWihpNDlJRqFAhjr-gaMd~9$%V=y^ zN_s+{sFm{8wrtXn#hidW8RdM5PtFHo%M>!NKYc~Ef@;f9c^3haHz**6-pz)i!RqHw z!4(~B+-}08Vu=U!%DOpqsm|lLMcr^<0@KELWf`=Pa=`HQvqY)OXqpZb2W=XST9;PK zn^q{fU^$}BmVuq8OL;lfX=7^eOVNDH#gV)$aqC z(g`=i4y!8r%zeO|GZ^bg+R_Q+Mpl4jkM;D&G{^I{v)V5APN;oyJMJL4fwW_!$}%tM z|36L}1ynpPO!Z_ZU;%Bzp2z)*F r>{Y2`fnBOF+Wy9bTlc6D-GWlCOWyz41{~Z-oaUP(?yUrmSy=zgOL?mvJ)dHkQQ|i^s4>l2|Yr05}@})aX2K0 z)Jd|uaw8pVKJ}(|Uj|G47EAVH&J9P*@^aShe6$+;SRC7~)hYn2ll8>EoA%ZcnCpTG zw8U4*Ba>T760r8py|pfM@ot0g_<#pxkXZhA7oKW5wmA ztJ>-c%ojhA*3{m)FSP`6whtl8x4s0~l2IMF0c&a1zDTz|F6wQ={Qwvk+=9$Yt~4UZ z0Dw$jC=t{{w-O8{Y5ooTl~CzBjh*DH_9bT!|7xXj%rS){ZVr5SFZ41QC}ACRPpj1W z5>yd0z|Q)?t$wZak$@?xM*;0emF`1G$d>H5yKBN4-xkPhzyB#Ay9Kjk8Nx@=(^yhW zX2P3n0rF93!hn7eR4s#IYBmfTl$)Nwi$a)L6V^x|s*ntEGD{?mDawAX33cQcL&P*7IpBm4>L0`9NFKQ`#+2#YMnWIg@=4V!5R$x|OR$x}(KPvDS03w=B literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block11_soft_dec.dat b/example/testvectors/wcdma/block11_soft_dec.dat new file mode 100644 index 0000000..8a50a82 --- /dev/null +++ b/example/testvectors/wcdma/block11_soft_dec.dat @@ -0,0 +1,820 @@ + 127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 118 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -107 0 0 + 127 0 0 + -101 0 0 + -127 0 0 + -117 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -126 0 0 + 126 0 0 + 127 0 0 + 118 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -102 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 112 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + 125 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -114 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + 117 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 101 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -102 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 112 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -107 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + -126 0 0 + 118 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 114 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -114 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 110 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -115 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -110 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -119 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -114 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + -102 0 0 + 96 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -101 0 0 + -97 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 96 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -110 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + 117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -122 0 0 + -125 0 0 + 126 0 0 + 119 0 0 + -127 0 0 + 123 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -99 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 110 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -116 0 0 + -121 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 110 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 115 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -115 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + 121 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + 117 0 0 + 127 0 0 + -102 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 119 0 0 + -103 0 0 + -105 0 0 + 96 0 0 + 113 0 0 + -106 0 0 + -99 0 0 + 77 0 0 + -118 0 0 + 117 0 0 + 106 0 0 + -115 0 0 + 97 0 0 diff --git a/example/testvectors/wcdma/block11_status.bin b/example/testvectors/wcdma/block11_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..6b8ef65de26151ee6613179b7c6ef45c61174682 GIT binary patch literal 12 TcmYe*XW*E8fXShaL7o8s6psSe literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block11_status.dat b/example/testvectors/wcdma/block11_status.dat new file mode 100644 index 0000000..8b223a4 --- /dev/null +++ b/example/testvectors/wcdma/block11_status.dat @@ -0,0 +1,3 @@ +08002f65 +4002c093 +001f0086 diff --git a/example/testvectors/wcdma/block11_tail_llrs.dat b/example/testvectors/wcdma/block11_tail_llrs.dat new file mode 100644 index 0000000..5b6c5d3 --- /dev/null +++ b/example/testvectors/wcdma/block11_tail_llrs.dat @@ -0,0 +1,6 @@ + 22 -25 + 3 15 + 0 27 + 3 5 + -7 -10 + -16 -4 diff --git a/example/testvectors/wcdma/block12_cfgreg.dat b/example/testvectors/wcdma/block12_cfgreg.dat new file mode 100644 index 0000000..012b9c7 --- /dev/null +++ b/example/testvectors/wcdma/block12_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +101 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block12_hard_dec.bin b/example/testvectors/wcdma/block12_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..8cfa4327854abda43165682bc28d6b850212abaf GIT binary patch literal 16 XcmbQqceHHs&Tsl{F8qP}85kGahKOvU=<8tH2OY5@oh>nshTI%p>XR-PijW_ z?ac*YatVzy!F2@zHPbqdgdkuDiOb^{mLtrwJ6w5Jwl}-?e(|@2LiMGSa+d$qA6Oxe Ah5!Hn literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block12_llrs.dat b/example/testvectors/wcdma/block12_llrs.dat new file mode 100644 index 0000000..30b82ff --- /dev/null +++ b/example/testvectors/wcdma/block12_llrs.dat @@ -0,0 +1,107 @@ + 1 7 9 + 5 7 -3 + -12 10 15 + 18 4 -19 + 8 0 -18 + -2 -1 -14 + -5 10 7 + 5 -10 -4 + -26 -6 7 + -5 -6 10 + 17 14 7 + 3 -3 -8 + 1 0 -1 + -19 -4 2 + -5 -8 -15 + -2 8 1 + 3 8 23 + -28 -21 -14 + 9 10 11 + 7 22 14 + 14 8 9 + 6 10 12 + 10 18 22 + 18 -16 -28 + 6 2 4 + 8 2 -11 + 15 -12 -1 + -7 22 16 + 18 8 -6 + -3 -9 -9 + 13 -1 -2 + -2 5 4 + 4 -21 -2 + 10 -11 4 + -10 -10 -10 + -15 5 -15 + -11 -22 9 + -11 -17 28 + 12 8 -3 + 19 -16 -10 + 15 10 19 + -18 -16 0 + -4 -9 1 + 20 7 3 + 24 -11 19 + 8 16 -1 + -10 5 22 + 4 23 -6 + -5 -2 -10 + 21 7 -1 + 13 -12 -6 + -9 -7 -19 + 9 16 16 + 6 13 3 + 10 15 10 + 2 13 12 + 3 24 -13 + -7 10 4 + 8 10 20 + 16 21 6 + -17 -10 2 + 20 -8 8 + -1 12 8 + -8 -7 3 + -21 -13 10 + 30 -6 -10 + 4 -19 3 + -15 14 3 + 1 11 6 + -11 -17 17 + -15 -8 -4 + 2 -6 -4 + -1 0 -16 + -1 -21 -12 + -3 4 -4 + 0 -7 -1 + -16 20 -13 + -6 -11 -13 + -8 -10 -6 + -26 0 -4 + 12 20 -6 + 2 1 17 + 18 18 24 + 30 16 12 + -21 -20 -8 + -8 17 -17 + 1 15 -10 + -22 12 -5 + 10 -8 -3 + 3 -7 -3 + -8 7 -3 + -6 22 -12 + 3 -2 -3 + 5 11 23 + 9 -18 11 + -17 5 4 + 7 -8 10 + 13 -14 18 + -10 3 25 + 10 9 -11 + 12 -14 11 + -3 -3 17 + -13 6 -13 + 7 11 9 + -23 0 0 + 5 0 0 + 8 0 0 diff --git a/example/testvectors/wcdma/block12_soft_dec.bin b/example/testvectors/wcdma/block12_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..95e72e52291530740c91f67d546b9a0d40034239 GIT binary patch literal 303 zcmdsvTMB?c3NK1O=Dh`Wn_w#-lyWi9Y)8KiRN2-OrzE7GEwq0|Ns9GYSNt literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block13_hard_dec.dat b/example/testvectors/wcdma/block13_hard_dec.dat new file mode 100644 index 0000000..081425d --- /dev/null +++ b/example/testvectors/wcdma/block13_hard_dec.dat @@ -0,0 +1,4 @@ +80c90f7a +4f4e67a3 +6d0e9a0a +00000007 diff --git a/example/testvectors/wcdma/block13_llrs.bin b/example/testvectors/wcdma/block13_llrs.bin new file mode 100644 index 0000000..0b5cd90 --- /dev/null +++ b/example/testvectors/wcdma/block13_llrs.bin @@ -0,0 +1 @@ +ááááááááá÷áááááááááááðáâáááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááíáááááááááááááááááááááááááááááãááááááá \ No newline at end of file diff --git a/example/testvectors/wcdma/block13_llrs.dat b/example/testvectors/wcdma/block13_llrs.dat new file mode 100644 index 0000000..451d0cd --- /dev/null +++ b/example/testvectors/wcdma/block13_llrs.dat @@ -0,0 +1,100 @@ + -31 -31 -31 + 31 31 -31 + -31 31 31 + 31 -31 31 + 31 31 -31 + 31 31 31 + 31 -31 -31 + -31 -31 -31 + 24 31 31 + 31 31 -31 + 31 31 -31 + 31 31 -31 + -31 -31 -31 + -31 31 31 + -31 -31 31 + -31 31 -31 + 31 -31 31 + -31 -31 -31 + -31 31 -19 + 31 -31 31 + -9 -31 31 + -31 31 -31 + 31 -31 31 + 31 31 18 + -31 -31 -31 + -31 -31 31 + -31 -31 -31 + -31 -31 31 + -31 -31 31 + -31 -31 -31 + -31 -31 -31 + 31 31 -31 + 31 -31 31 + 31 31 31 + -31 31 24 + -31 -31 31 + -31 31 31 + 31 -31 31 + -16 -31 -31 + 31 -31 31 + 31 31 31 + 31 -31 -31 + 31 -31 31 + -31 31 -31 + -30 31 31 + 31 31 31 + 31 -31 -31 + -31 31 31 + -31 -31 31 + 31 31 31 + 31 31 -31 + 31 31 -31 + -31 -31 -31 + -31 31 31 + 31 31 -31 + -31 -31 -31 + 31 31 -31 + 31 -31 -31 + 31 31 -31 + 31 -31 31 + -31 31 31 + -31 -31 -31 + 31 31 -31 + -31 -31 31 + -31 31 31 + 31 31 -31 + -31 -31 31 + 31 31 31 + -31 31 31 + -31 31 31 + -31 31 31 + -31 -31 -31 + -31 -31 31 + 31 -31 -31 + -31 31 -31 + 31 31 31 + 31 -31 -31 + -31 31 -31 + -31 -31 -31 + 22 31 -31 + -31 -31 31 + 31 -31 -31 + 31 -31 -29 + 31 -31 31 + -31 -31 31 + -31 31 -31 + -31 31 31 + -31 31 -31 + 31 31 -31 + -31 31 31 + 31 31 31 + 31 31 -31 + -31 31 31 + 31 -31 -31 + 31 31 31 + -31 -31 31 + 31 31 31 + 31 -31 -31 + 25 31 31 + -31 31 -31 diff --git a/example/testvectors/wcdma/block13_soft_dec.bin b/example/testvectors/wcdma/block13_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..f86798db0bd08bd38fa5cdd9552428c5e19d0d6f GIT binary patch literal 300 ycmdsufe8RG48r!g`1#bZCnm)fV=XJfY>Ua7ikhqw&pms=7)>agmnN;BPjmtE95Mp{ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block13_soft_dec.dat b/example/testvectors/wcdma/block13_soft_dec.dat new file mode 100644 index 0000000..f42f18f --- /dev/null +++ b/example/testvectors/wcdma/block13_soft_dec.dat @@ -0,0 +1,100 @@ + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 diff --git a/example/testvectors/wcdma/block13_status.bin b/example/testvectors/wcdma/block13_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..45961e8d1900402d4b55cf10e23ea14b87a3f627 GIT binary patch literal 12 Rcmcb^%E0j?oWX$s2mlqF0%ZUI literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block13_status.dat b/example/testvectors/wcdma/block13_status.dat new file mode 100644 index 0000000..4c65dc0 --- /dev/null +++ b/example/testvectors/wcdma/block13_status.dat @@ -0,0 +1,3 @@ +080005dc +400057e4 +00000000 diff --git a/example/testvectors/wcdma/block13_tail_llrs.dat b/example/testvectors/wcdma/block13_tail_llrs.dat new file mode 100644 index 0000000..7d67922 --- /dev/null +++ b/example/testvectors/wcdma/block13_tail_llrs.dat @@ -0,0 +1,6 @@ + 31 31 + 31 -31 + -31 31 + -31 -31 + -31 31 + -31 31 diff --git a/example/testvectors/wcdma/block14_cfgreg.dat b/example/testvectors/wcdma/block14_cfgreg.dat new file mode 100644 index 0000000..9300a86 --- /dev/null +++ b/example/testvectors/wcdma/block14_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +102 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block14_hard_dec.bin b/example/testvectors/wcdma/block14_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..0709918aca455d31b80f201d36ed64a1f37b137b GIT binary patch literal 16 Xcmd1h7wx{htozg7e!hcy85kGx)v7y!`h`LYlMw?B@(|Gk_}tD*iP*nKi@OK8hB{c2taQZt+Y literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block15_soft_dec.dat b/example/testvectors/wcdma/block15_soft_dec.dat new file mode 100644 index 0000000..191ca85 --- /dev/null +++ b/example/testvectors/wcdma/block15_soft_dec.dat @@ -0,0 +1,103 @@ + -127 0 0 + -121 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + 87 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 114 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -112 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -114 0 0 + -123 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -122 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 125 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + -112 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -126 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + 105 0 0 + 115 0 0 diff --git a/example/testvectors/wcdma/block15_status.bin b/example/testvectors/wcdma/block15_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..0917ff8b23abbd72923bf3d19c0126024807fe3f GIT binary patch literal 12 TcmZQ%W8nB5!Qddyz{~&u41@u_ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block15_status.dat b/example/testvectors/wcdma/block15_status.dat new file mode 100644 index 0000000..e5677b3 --- /dev/null +++ b/example/testvectors/wcdma/block15_status.dat @@ -0,0 +1,3 @@ +08000601 +400058fb +00030017 diff --git a/example/testvectors/wcdma/block15_tail_llrs.dat b/example/testvectors/wcdma/block15_tail_llrs.dat new file mode 100644 index 0000000..9524a1d --- /dev/null +++ b/example/testvectors/wcdma/block15_tail_llrs.dat @@ -0,0 +1,6 @@ + -23 19 + 17 -5 + 5 -3 + -13 -12 + 8 -24 + 9 -2 diff --git a/example/testvectors/wcdma/block16_cfgreg.dat b/example/testvectors/wcdma/block16_cfgreg.dat new file mode 100644 index 0000000..319357a --- /dev/null +++ b/example/testvectors/wcdma/block16_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +104 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block16_hard_dec.bin b/example/testvectors/wcdma/block16_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..6b0ddc079a6be976bdc4b68544c8005e2524ebb5 GIT binary patch literal 16 XcmZ?aH=OVMWNw}KM9m{ajjA(*i~`x5f32x*Ks_ZqZlmTW%bkGk-DUAKg+j%!@iydQ!hQ%2qr rw<_6yr1fO&`67e_C8g^8-$Z?q1UzKIo5agd1zMd;YVkXBq}=`idyti~ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block16_llrs.dat b/example/testvectors/wcdma/block16_llrs.dat new file mode 100644 index 0000000..bad912f --- /dev/null +++ b/example/testvectors/wcdma/block16_llrs.dat @@ -0,0 +1,104 @@ + -15 -9 9 + 5 -9 -3 + 4 10 -1 + 2 20 -19 + -8 16 -2 + -2 15 2 + 11 10 7 + -11 6 -4 + -10 10 -9 + -5 10 10 + 17 -2 -9 + 3 13 8 + 1 0 15 + -19 -4 -14 + -5 8 1 + -2 8 -15 + 3 -8 23 + -28 -5 2 + -7 10 27 + 7 6 14 + 30 8 9 + 22 10 -4 + -6 2 6 + 2 0 -12 + 22 2 -12 + 8 2 -11 + 15 -12 -1 + 9 22 0 + 18 -8 -6 + -19 7 -9 + -3 -1 -2 + 14 5 -12 + 4 -5 -2 + 10 5 -12 + -10 -10 -10 + -15 5 -15 + -27 -22 -7 + -11 -1 12 + 28 -8 -3 + 3 -16 -10 + -1 10 3 + -18 0 -16 + 12 -9 1 + 4 7 3 + 8 5 19 + 8 16 -1 + 6 -11 6 + 4 7 -6 + 11 -2 -10 + 5 -9 -1 + -3 4 -6 + -9 9 -3 + -7 16 0 + -10 -3 -13 + 10 15 -6 + 2 13 -4 + -13 8 3 + -23 10 -12 + -8 -6 20 + 0 21 6 + -1 -10 -14 + 20 8 8 + -1 -4 8 + 8 9 -13 + -5 -13 10 + 14 -6 -10 + 4 -3 -13 + -15 -2 -13 + 17 -5 -10 + 5 -17 17 + 1 -8 -4 + 2 10 -20 + 15 0 -16 + 15 -21 4 + -19 -12 -4 + 0 -7 -1 + -16 20 -13 + 10 5 3 + -24 -10 10 + -10 16 -4 + -4 20 10 + 2 -15 1 + 18 18 8 + 30 16 -4 + -21 -4 -8 + -8 17 -1 + 1 31 6 + -22 -4 11 + 10 8 -3 + 3 -7 13 + 8 -9 -3 + -6 22 4 + 3 14 13 + 21 -5 23 + 9 -18 11 + -17 5 4 + 7 -8 -6 + 13 -14 2 + -26 -13 25 + 10 -7 5 + -4 -14 -5 + -3 -3 3 + 6 7 11 + -23 1 -11 diff --git a/example/testvectors/wcdma/block16_soft_dec.bin b/example/testvectors/wcdma/block16_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..d87c63d9e5c7cda984276076f66d21c1edb244ca GIT binary patch literal 312 zcmdsuI|_h66a&4arGk~M#fn%+7=Ozuf`Wy$C-uE+I7J{6Levbpt6c346p$odIXoVQ l7A~!uyJU49+>Sx0KP{Y^k&ZxPk2u*wt6AF+WjL~*@d3&}GuHqB literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block16_soft_dec.dat b/example/testvectors/wcdma/block16_soft_dec.dat new file mode 100644 index 0000000..780fc88 --- /dev/null +++ b/example/testvectors/wcdma/block16_soft_dec.dat @@ -0,0 +1,104 @@ + -127 0 0 + -121 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -108 0 0 + 97 0 0 + 85 0 0 + 127 0 0 + 117 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 93 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -94 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -104 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -111 0 0 + 127 0 0 + -122 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 116 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 103 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 94 0 0 + 116 0 0 + -115 0 0 diff --git a/example/testvectors/wcdma/block16_status.bin b/example/testvectors/wcdma/block16_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..cf5b7f3e4ca02efed919bc972caeb219290bb132 GIT binary patch literal 12 Tcmeyz%D{0Tg26$Efr$YC7H0x@ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block16_status.dat b/example/testvectors/wcdma/block16_status.dat new file mode 100644 index 0000000..ce710a1 --- /dev/null +++ b/example/testvectors/wcdma/block16_status.dat @@ -0,0 +1,3 @@ +080005fe +400058c0 +00020012 diff --git a/example/testvectors/wcdma/block16_tail_llrs.dat b/example/testvectors/wcdma/block16_tail_llrs.dat new file mode 100644 index 0000000..ab71f41 --- /dev/null +++ b/example/testvectors/wcdma/block16_tail_llrs.dat @@ -0,0 +1,6 @@ + -13 4 + 8 -8 + 9 -2 + 19 -2 + -21 -11 + -3 -11 diff --git a/example/testvectors/wcdma/block17_cfgreg.dat b/example/testvectors/wcdma/block17_cfgreg.dat new file mode 100644 index 0000000..e6c8d8e --- /dev/null +++ b/example/testvectors/wcdma/block17_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +105 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block17_hard_dec.bin b/example/testvectors/wcdma/block17_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..64314f7601f76ba35d2c57f11566c5f778d19edb GIT binary patch literal 16 XcmdPm?_9Y!De88_0Y2SmUIqpLHGKtP literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block17_hard_dec.dat b/example/testvectors/wcdma/block17_hard_dec.dat new file mode 100644 index 0000000..053e858 --- /dev/null +++ b/example/testvectors/wcdma/block17_hard_dec.dat @@ -0,0 +1,4 @@ +a9890f2a +db5a62a3 +2d0ec058 +00000d5b diff --git a/example/testvectors/wcdma/block17_llrs.bin b/example/testvectors/wcdma/block17_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..5dae8b263e70cb62830b7dd96b67fb51d87d12bc GIT binary patch literal 333 zcmWN~S8{_e6aYZ=@<8AUf4Tp`63@g5HdP4KWG}GOeZ9CQY&M)J9zv#{N8bp4>0Hqy zrG|l>zIc5tIWnch8tzGI3o||3sjyc4G%G%DcrIl?qjxrv%g2wyPoN5x`|+0M0reoh zDK)O)YL~!J@z(on#^{_1AQTWpX4W~`Zh;H#i$Wer$xmCK<$54fjPjlfRci{V2}Qve zm}Z+rw~3s7aT}H1yIf`N=H(zsVinc~A*4;4Uh`h>UaCUy)X!DcwOAQ{qv!r&dA0bc zlcgi3*R}&&{D7#BbiG;P9EAs61g_)A;(MVG;jE%7qB6-a(}x=ny;V!#$Cly0`vctP Bmcsx5 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block17_llrs.dat b/example/testvectors/wcdma/block17_llrs.dat new file mode 100644 index 0000000..48e2645 --- /dev/null +++ b/example/testvectors/wcdma/block17_llrs.dat @@ -0,0 +1,111 @@ + -15 -9 9 + 21 7 13 + -12 10 15 + 18 4 -3 + -8 0 -18 + 14 -1 -14 + -5 -6 -9 + -11 -10 12 + -10 -6 -9 + -5 -6 -6 + 17 -2 7 + 3 13 8 + 1 -16 -1 + -19 -4 2 + -5 -8 1 + -2 -8 -15 + 3 8 23 + -28 -5 -14 + -7 10 11 + 23 6 -2 + 14 8 9 + 6 10 12 + -6 2 6 + 18 0 -12 + 22 2 4 + -8 -14 5 + -1 4 -17 + 9 22 0 + 2 -8 -22 + -3 7 -9 + -3 15 -18 + 14 -11 4 + 4 -5 -2 + 10 5 -12 + -10 6 -10 + -15 5 1 + -27 -6 -7 + 5 -1 12 + 12 8 -3 + 19 0 -10 + -1 -6 3 + -2 0 -16 + -4 7 1 + 4 7 3 + 8 5 19 + 8 16 15 + 6 -11 22 + -12 23 10 + -5 -2 -10 + 21 7 -1 + -3 -12 -6 + 7 -7 -19 + 9 0 0 + -10 13 3 + 10 -1 -6 + -14 13 -4 + 3 8 3 + -7 -6 -12 + -8 -6 20 + 16 5 -10 + -1 6 2 + 4 8 -8 + 15 12 -8 + 8 9 3 + -21 3 10 + 14 10 -26 + -12 -3 3 + 1 14 -13 + 17 -5 6 + -11 -1 1 + 1 8 12 + -14 10 -4 + -1 -16 -16 + -1 -5 4 + -19 4 -4 + 0 9 -17 + -16 4 -13 + -6 -11 3 + -8 -10 10 + -10 0 -4 + -4 20 10 + 2 -15 17 + 18 2 8 + 30 16 -4 + -21 -20 -8 + -8 1 -1 + 1 15 6 + -22 -4 11 + 10 8 13 + 3 9 -3 + 8 -9 13 + 10 22 4 + -13 -2 13 + 21 11 23 + -7 -2 -5 + -17 5 20 + 7 -8 10 + 13 -14 2 + -26 -13 9 + 10 -7 -11 + 12 2 11 + -19 -3 -13 + 6 7 -5 + -23 1 5 + 3 8 -7 + 3 -5 -11 + 13 -12 -2 + -8 14 10 + 14 0 0 + 5 0 0 + 8 0 0 diff --git a/example/testvectors/wcdma/block17_soft_dec.bin b/example/testvectors/wcdma/block17_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..11a20ee6b0d3322bd5930a5cbef8177c9b9329b8 GIT binary patch literal 315 zcmdsrF%E)I6u`Wovm1kK#6e69!w)tUKB9wSfN|&>+RDfsJ(Q%*myI%w*0JbQ t&ygi;Ar}reHdhgbR+5&7QT|yNmQAnUh?kovZD)e6Lr3#}CrQG*$or literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block17_soft_dec.dat b/example/testvectors/wcdma/block17_soft_dec.dat new file mode 100644 index 0000000..0035713 --- /dev/null +++ b/example/testvectors/wcdma/block17_soft_dec.dat @@ -0,0 +1,105 @@ + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -114 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 114 0 0 + 99 0 0 + 127 0 0 + 123 0 0 + -125 0 0 + -127 0 0 + -107 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -112 0 0 + -120 0 0 + -127 0 0 + 113 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + 123 0 0 + -124 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + -105 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -105 0 0 + 127 0 0 + -123 0 0 + 94 0 0 + -127 0 0 + -122 0 0 + -118 0 0 + 127 0 0 + 87 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + -113 0 0 + 127 0 0 + 123 0 0 + -111 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 106 0 0 + 112 0 0 + -127 0 0 + 108 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -103 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -108 0 0 + 106 0 0 + 98 0 0 + -94 0 0 + 99 0 0 + -104 0 0 + 77 0 0 diff --git a/example/testvectors/wcdma/block17_status.bin b/example/testvectors/wcdma/block17_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..f1aff97fc37094552b34c794d7aa0d39b4551d9c GIT binary patch literal 12 TcmaFC%D`a|%HSZ%z{mgq5Yz$D literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block17_status.dat b/example/testvectors/wcdma/block17_status.dat new file mode 100644 index 0000000..7809b63 --- /dev/null +++ b/example/testvectors/wcdma/block17_status.dat @@ -0,0 +1,3 @@ +080005e8 +40005530 +00010015 diff --git a/example/testvectors/wcdma/block17_tail_llrs.dat b/example/testvectors/wcdma/block17_tail_llrs.dat new file mode 100644 index 0000000..04222f5 --- /dev/null +++ b/example/testvectors/wcdma/block17_tail_llrs.dat @@ -0,0 +1,6 @@ + 3 14 + -5 -11 + 13 5 + -12 -2 + -8 8 + 14 10 diff --git a/example/testvectors/wcdma/block18_cfgreg.dat b/example/testvectors/wcdma/block18_cfgreg.dat new file mode 100644 index 0000000..012b9c7 --- /dev/null +++ b/example/testvectors/wcdma/block18_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +101 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block18_hard_dec.bin b/example/testvectors/wcdma/block18_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..0f026c8b995a5872d68a3fd19cb026333062c6a4 GIT binary patch literal 16 Xcmb2=zq|RfqIlhz&wQFn3=9kaINt?; literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block18_hard_dec.dat b/example/testvectors/wcdma/block18_hard_dec.dat new file mode 100644 index 0000000..0ecbbf8 --- /dev/null +++ b/example/testvectors/wcdma/block18_hard_dec.dat @@ -0,0 +1,4 @@ +b3dd0f1f +7e1721f3 +290ef3cc +00000022 diff --git a/example/testvectors/wcdma/block18_llrs.bin b/example/testvectors/wcdma/block18_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..614accd2da9800cd4ad071aa767911ed96de2938 GIT binary patch literal 321 zcmWO0337rk6adhK>|qrJ?X+X>f3J=+iVG4*K7o*Wg73xU3LUNmW}+WT?J9rU_`%%rBQ; z{2GkAG7wHvRBEerk@p!$=zI&h?uTJ)K}6OuKHVbpz88X3Ol)FQRUY$`_YH?k8T}}h zm-MKk^MUb-z7urc{bo`*zNJqFpHvd;f)G+6hHY?}&<RMw7kdZC+p(t=*z zD$DsEVX}|h+o(fD{AxyO69D5c#8{l&(Rh!B=+)!X3X!KF4`UGN!Pj3b-I4i2{R3kS BljZ;b literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block18_llrs.dat b/example/testvectors/wcdma/block18_llrs.dat new file mode 100644 index 0000000..24cf11b --- /dev/null +++ b/example/testvectors/wcdma/block18_llrs.dat @@ -0,0 +1,107 @@ + 1 7 9 + 21 -9 -3 + 4 10 -1 + 18 4 -3 + 8 0 -2 + -2 15 -14 + -5 10 -9 + -11 -10 12 + -10 10 7 + -5 10 10 + 17 14 -9 + 3 13 -8 + 1 -16 -1 + -19 12 2 + -5 -8 1 + -2 8 1 + 3 -8 23 + -28 -21 2 + 9 -6 27 + 23 22 14 + 30 -8 9 + 6 10 12 + 10 18 22 + 18 -16 -12 + 22 -14 4 + 8 -14 -11 + -1 -12 -17 + -7 22 0 + 18 -8 -22 + -3 7 -9 + -3 -1 -18 + 14 5 4 + 4 -21 14 + 10 5 4 + -10 6 -26 + -15 -11 -15 + -11 -22 9 + 5 -1 12 + 28 -8 13 + 19 -16 6 + 15 -6 19 + -18 -16 0 + -4 7 1 + 4 7 3 + 8 5 19 + 8 16 -1 + -10 5 6 + -12 7 -6 + 11 -2 -10 + 21 7 -1 + 13 -12 10 + -9 9 -3 + 9 16 16 + -10 13 3 + -6 -1 -6 + -14 13 -4 + -13 24 -13 + -7 -6 -12 + 8 -6 4 + 16 21 -10 + -1 6 2 + 20 -8 -8 + 15 12 -8 + -8 9 -13 + -21 -13 -6 + 14 10 -26 + 4 -19 3 + 1 14 -13 + 1 -5 -10 + -11 -17 1 + 1 8 12 + 2 -6 -20 + 15 0 0 + 15 -21 -12 + -19 4 -20 + 0 -7 -1 + 0 20 -13 + 10 5 3 + -8 6 10 + -10 16 -4 + -4 4 -6 + 2 -15 1 + 18 2 24 + 30 0 -4 + -21 -20 -8 + -8 17 -1 + 1 31 6 + -22 12 11 + 10 8 -3 + 3 9 13 + -8 -9 -3 + 10 6 -12 + -13 -2 -3 + 21 11 7 + -7 -18 11 + -17 5 20 + -9 -8 -6 + 13 -14 18 + -26 -13 25 + -6 -7 5 + -4 2 11 + -3 -3 17 + -13 -10 3 + -9 -5 -7 + -23 0 0 + 5 0 0 + -8 0 0 diff --git a/example/testvectors/wcdma/block18_soft_dec.bin b/example/testvectors/wcdma/block18_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..c775bbe41a363fcc63d668368bf8238428966964 GIT binary patch literal 303 zcmb=g2ZF}N#*(c1`eqBJbil*)+Z1;o(h*kXz4?GJ z@h>u}bbx&aiZW;iDWcjK;~h7EXN=X^h?f07Huo?HW+7O&i6oTmn%qc$6PLlR5L5M# zfV{Gl>F!tz=%;uK#tNRQv`I|L=OlXLKNCV_%u~W5>`ut`Su6rq$p(H?ETj9L=t1el zUK&p3VjSDE(=Eh~Kur|oPa_HFmGHg}GYy%nu7>`lmYMq|HmVU7b;B#Gh-Wq$h0q`F C0G2HP literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block19_llrs.dat b/example/testvectors/wcdma/block19_llrs.dat new file mode 100644 index 0000000..a4200d0 --- /dev/null +++ b/example/testvectors/wcdma/block19_llrs.dat @@ -0,0 +1,110 @@ + -15 -9 9 + 5 -9 -3 + 4 10 -1 + 18 4 -19 + -8 0 -2 + -2 -1 2 + -5 10 7 + -11 -10 -4 + -10 -6 -9 + -5 10 -6 + 17 -2 7 + 3 -3 8 + 1 0 15 + -19 12 -14 + -5 -8 1 + -2 -8 -15 + 3 -8 7 + -28 -5 2 + -7 -6 11 + 7 6 -2 + 30 -8 -7 + 6 10 -4 + -6 2 6 + 2 -16 -28 + 6 2 -12 + 8 2 5 + -1 -12 -1 + 9 22 0 + 18 -8 -22 + -3 7 -9 + -3 15 -2 + 14 5 4 + 4 -5 14 + 10 -11 -12 + -10 -10 -10 + -15 -11 -15 + -27 -6 -7 + -11 -17 28 + 28 -8 13 + 19 0 6 + -1 10 3 + -18 -16 -16 + -4 7 1 + 4 7 19 + 8 5 19 + 8 16 15 + 6 -11 22 + 4 7 -6 + 11 -2 -10 + 21 7 15 + -3 -12 10 + -9 -7 -3 + 9 16 16 + -10 13 3 + 10 -1 10 + 2 13 12 + -13 8 3 + -7 10 -12 + -8 10 4 + 0 21 6 + -17 6 -14 + 20 8 -8 + 15 -4 8 + 8 -7 3 + -5 -13 10 + 30 10 -10 + 4 -3 -13 + 1 -2 3 + 17 11 6 + 5 -17 17 + -15 8 12 + 2 10 -4 + -1 0 -16 + 15 -5 4 + -19 -12 -4 + 0 -7 -1 + -16 4 3 + 10 5 -13 + -8 -10 -6 + -10 16 12 + -4 20 10 + 2 1 17 + 18 18 24 + 30 0 12 + -21 -20 8 + -8 1 -1 + 1 31 6 + -22 -4 -5 + 10 -8 13 + 3 -7 -3 + 8 7 13 + -6 6 -12 + 3 -2 13 + 5 11 7 + 9 -2 11 + -1 -11 4 + -9 8 -6 + 13 2 18 + -26 3 25 + 10 9 5 + -4 -14 11 + -19 -19 3 + 6 7 -5 + -23 17 5 + 3 -8 -7 + 19 -5 -3 + -12 -24 -8 + -2 -2 -12 + 14 0 0 + 10 0 0 diff --git a/example/testvectors/wcdma/block19_soft_dec.bin b/example/testvectors/wcdma/block19_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..ca5a81a8b3f5970336b35f7ee8beb49cb7556ae7 GIT binary patch literal 318 zcmdsvT?#-@6ohS(SMQ#XNYdB1aW7>V_Gz#S)9L)od>zFKSzQ6avypa^u7qGZ;Z5JZ j9lo9o4KAG~=JE3gXi?Lb_Dlq^`az^tYdoTS&VHyHj_ovz literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block19_soft_dec.dat b/example/testvectors/wcdma/block19_soft_dec.dat new file mode 100644 index 0000000..0f4c445 --- /dev/null +++ b/example/testvectors/wcdma/block19_soft_dec.dat @@ -0,0 +1,106 @@ + -127 0 0 + -121 0 0 + 106 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + 86 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 113 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + -91 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -115 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -115 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 113 0 0 + 118 0 0 + 95 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 112 0 0 + -127 0 0 + 114 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 85 0 0 + 125 0 0 diff --git a/example/testvectors/wcdma/block19_status.bin b/example/testvectors/wcdma/block19_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..9c13d7e78deccc9d88d6967c0a5ea6e11a37b33e GIT binary patch literal 12 TcmXqFW8gRz&EO!+z{CIm4J!e+ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block19_status.dat b/example/testvectors/wcdma/block19_status.dat new file mode 100644 index 0000000..b2782e2 --- /dev/null +++ b/example/testvectors/wcdma/block19_status.dat @@ -0,0 +1,3 @@ +08000632 +40005bc6 +00020013 diff --git a/example/testvectors/wcdma/block19_tail_llrs.dat b/example/testvectors/wcdma/block19_tail_llrs.dat new file mode 100644 index 0000000..8695809 --- /dev/null +++ b/example/testvectors/wcdma/block19_tail_llrs.dat @@ -0,0 +1,6 @@ + -12 14 + -24 -8 + -2 10 + -2 -12 + -11 -1 + -11 8 diff --git a/example/testvectors/wcdma/block1_cfgreg.dat b/example/testvectors/wcdma/block1_cfgreg.dat new file mode 100644 index 0000000..012b9c7 --- /dev/null +++ b/example/testvectors/wcdma/block1_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +101 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block1_hard_dec.bin b/example/testvectors/wcdma/block1_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..ed3f3da0c9c816ddf61d7f4fdf0f675bca8889ae GIT binary patch literal 16 Xcmd1cYvgVI)-^j|H9spi0|Ns9GI9jH literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block1_hard_dec.dat b/example/testvectors/wcdma/block1_hard_dec.dat new file mode 100644 index 0000000..87bff5f --- /dev/null +++ b/example/testvectors/wcdma/block1_hard_dec.dat @@ -0,0 +1,4 @@ +0d810e68 +9b8af683 +050fab50 +0000000b diff --git a/example/testvectors/wcdma/block1_llrs.bin b/example/testvectors/wcdma/block1_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..8e2a4606c5e5441d8b72b3351a9ee72b9d93ab8d GIT binary patch literal 321 zcmWN~2~NU5006+fcf0hWU?nlp|Nl#g0je$C`_%csY*bCIKj>>bVz|VDKRxeRm}WOL zXvu|0vwi9IR7*=Pf|2-=xin4ckm{$2s`z^yt~S@ z?AB9fZ8(ornjlLDk`OLR<|JAXBD3Iwj?~aw6{}pW)uZOUC4TH`caeb_(Ka~bK2|5! zyYhq@K(=X2$B!huol7j*A>2F{69E8CSC@ip%O!UeLHLT^df(1U(Fy|pQN6lC-)43K w+X+_|*bp+6U^Z7ywZ4lU>BArshYd_kXaCr_B^ZMBL_H{F`UIR3ywlfSY-PySUuWGNaK< zS)N`XSlUqm3-;V(aZJMtei!m|2J8Lgam13cHPg?Y1Utjv# zimMKQ>=6u=bWcqMvgmytT#S%v=mTCpo&U4|X-W96;B8QP)m}4|%Yzscs6ps*NB@V0 Bn{faD literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block20_llrs.dat b/example/testvectors/wcdma/block20_llrs.dat new file mode 100644 index 0000000..55981ce --- /dev/null +++ b/example/testvectors/wcdma/block20_llrs.dat @@ -0,0 +1,109 @@ + 1 7 9 + 21 -9 13 + 4 10 15 + 2 20 -19 + 8 16 -18 + 14 15 -14 + 11 -6 -9 + 5 6 12 + -10 -6 -9 + -5 -6 -6 + 17 -2 7 + 3 13 8 + 1 -16 -1 + -19 -4 -14 + -5 -8 -15 + -2 -8 -15 + 3 8 23 + -28 -5 -14 + 9 -6 11 + 23 22 14 + 30 8 9 + 22 -6 -4 + 10 18 6 + 2 0 -28 + 6 -14 -12 + -8 2 5 + 15 -12 -17 + -7 6 0 + 2 8 -22 + -19 7 7 + 13 -1 -18 + 14 -11 -12 + 4 -5 14 + 10 5 -12 + -10 6 -26 + -15 5 -15 + -11 -22 9 + 5 -17 28 + 28 8 13 + 3 -16 -10 + 15 10 3 + -2 -16 0 + 12 7 -15 + 20 -9 19 + 8 5 3 + 8 16 15 + -10 5 6 + -12 7 10 + 11 -2 6 + 5 -9 -1 + 13 4 -6 + 7 9 -19 + -7 0 16 + 6 -3 3 + -6 15 10 + -14 -3 12 + -13 8 -13 + -23 10 -12 + 8 10 4 + 0 5 -10 + -17 -10 -14 + 4 -8 -8 + -1 -4 -8 + -8 -7 3 + -5 3 -6 + 30 -6 -26 + -12 -19 3 + -15 -2 -13 + 1 11 -10 + 5 -1 1 + -15 -8 -4 + -14 -6 -20 + -1 -16 -16 + 15 -5 -12 + -3 -12 -20 + 0 -7 -17 + -16 4 3 + -6 5 3 + -24 -10 -6 + -26 16 -4 + -4 20 -6 + 2 -15 1 + 18 2 24 + 30 16 12 + -21 -20 8 + -8 1 -17 + 1 15 -10 + -22 -4 11 + 10 8 13 + 3 9 -3 + -8 7 13 + 10 6 -12 + -13 14 13 + 5 11 7 + -7 -18 11 + -17 -11 4 + 7 -8 10 + 13 -14 18 + -26 3 9 + 10 -7 -11 + 12 -14 11 + -3 -3 3 + -10 -9 11 + -23 1 -11 + 3 8 9 + 19 -21 13 + -12 -24 14 + -2 -11 -1 + -12 0 0 diff --git a/example/testvectors/wcdma/block20_soft_dec.bin b/example/testvectors/wcdma/block20_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..4fef00bd471674824ff53691577a2e4bfc7ada35 GIT binary patch literal 321 zcmdsu%ME}q3`1F!0XV@0fp~I1wCdD29fK%RZ08v$z;mpSB_TU!-KtD2?NGU4;D5u2 bL6P)Ir*#g`l_HIb6H!gIu-si zQS5@5eWyAjxe;}mTvI>eR1+fSferNb)}bJ5(x89pE|$(uaoA#6=hQJEEtn*B-pWEm zZZMnn^p~im=|XgW@JIgV+F%&&QM9o6m_8r2eniCCfm*X4%Eo`#A&}3~D{DK&Dl>g-^=-4wgk<-QU`g1gcu9KZGj}Y^k>s3Y8(z zOw?ObHbfmOzqGdKnLh-P2j&Q?@BdfWEUwm7r7P(L13XWKX4GGn9_poEG-XaE2h CgL|L= literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block21_hard_dec.dat b/example/testvectors/wcdma/block21_hard_dec.dat new file mode 100644 index 0000000..847163f --- /dev/null +++ b/example/testvectors/wcdma/block21_hard_dec.dat @@ -0,0 +1,63 @@ +cea90fe2 +a9686e23 +8d0e1196 +5484b330 +6487104b +8c63d194 +32580067 +2599e560 +20c65a95 +9ac0e034 +94030b73 +82ec5189 +3aa77d99 +7511b923 +3f535c9a +221354e3 +f40d81e7 +20a1d6f6 +7fa0d26c +ce962eea +62d8714f +31d4e759 +24982d20 +42cade76 +9b306e44 +a897f4f6 +7442e9a5 +fe47f07f +1860dae7 +b0b451ee +1f3e98f9 +55d7e3b6 +a593bcae +b6105f90 +76e1d06e +1a06ab6f +0ab16b4f +f1c57270 +40cb25ac +c5d966be +0439fbd6 +3d6a0c1a +55a640ae +ca4f85b9 +45960efc +dadfdd5f +5aaa0491 +2b843faa +b7a96c0f +21950a13 +5bd44cd1 +ae708577 +c6558180 +05383396 +5f6688f9 +5456cede +f6db7a3c +b338b6d0 +1e3f50b9 +37db6755 +a46332de +8a84a015 +00006842 diff --git a/example/testvectors/wcdma/block21_llrs.bin b/example/testvectors/wcdma/block21_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..b077cb4a0d714218579e42f2026b3d0a06d7600e GIT binary patch literal 6000 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 S@xbDN#RH2677zS%5Bv*eKj=OH literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block21_soft_dec.dat b/example/testvectors/wcdma/block21_soft_dec.dat new file mode 100644 index 0000000..899236d --- /dev/null +++ b/example/testvectors/wcdma/block21_soft_dec.dat @@ -0,0 +1,2000 @@ + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 116 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -114 0 0 + -123 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + -126 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -107 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 124 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -106 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -106 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 102 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 123 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -113 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 126 0 0 + -127 0 0 + -126 0 0 + -120 0 0 + -127 0 0 + 126 0 0 + -122 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 116 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 108 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -115 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -124 0 0 + -126 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -122 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + 107 0 0 + 116 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + 108 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 111 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + -113 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -111 0 0 + -111 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + -106 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -92 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -116 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 118 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + -127 0 0 + -91 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 114 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -125 0 0 + 124 0 0 + -123 0 0 + 127 0 0 + 123 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -113 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -124 0 0 + 110 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + 122 0 0 + -125 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + 102 0 0 + -121 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 102 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 114 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 122 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 95 0 0 + 106 0 0 + 112 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 95 0 0 + -106 0 0 + 108 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 105 0 0 + 127 0 0 + -127 0 0 + -116 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -105 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + -115 0 0 + 115 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 125 0 0 + 123 0 0 + -123 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + -121 0 0 + 127 0 0 + -126 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 113 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 113 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 118 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -105 0 0 + 127 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + -120 0 0 + -127 0 0 + 105 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -110 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -119 0 0 + 125 0 0 + 127 0 0 + -121 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -114 0 0 + 97 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + 127 0 0 + -112 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + -126 0 0 + 118 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -121 0 0 + -114 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 120 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + -120 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + -121 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 118 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 122 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 125 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + -123 0 0 + 127 0 0 + 124 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + -108 0 0 + -114 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 115 0 0 + -127 0 0 + 115 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + 108 0 0 + 127 0 0 + 100 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -124 0 0 + 116 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -101 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 109 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 122 0 0 + 111 0 0 + -123 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 120 0 0 + -127 0 0 + 108 0 0 + 126 0 0 + 107 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + -118 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -106 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -125 0 0 + 121 0 0 + -114 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -119 0 0 + -114 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -120 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -99 0 0 + -126 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 112 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 108 0 0 + 111 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 124 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 114 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + 124 0 0 + -120 0 0 + 123 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -123 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + 102 0 0 + -90 0 0 diff --git a/example/testvectors/wcdma/block21_status.bin b/example/testvectors/wcdma/block21_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..4861f68ee9af00f727f58b8d4e3859966edcae1b GIT binary patch literal 12 TcmY!?Vc?i^h|R%<(V77O6XOEA literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block21_status.dat b/example/testvectors/wcdma/block21_status.dat new file mode 100644 index 0000000..8bab6d9 --- /dev/null +++ b/example/testvectors/wcdma/block21_status.dat @@ -0,0 +1,3 @@ +08007422 +4006c29c +003b013c diff --git a/example/testvectors/wcdma/block21_tail_llrs.dat b/example/testvectors/wcdma/block21_tail_llrs.dat new file mode 100644 index 0000000..5e4c736 --- /dev/null +++ b/example/testvectors/wcdma/block21_tail_llrs.dat @@ -0,0 +1,6 @@ + -6 -5 + 12 5 + 7 13 + 5 19 + -17 -9 + -8 -14 diff --git a/example/testvectors/wcdma/block22_cfgreg.dat b/example/testvectors/wcdma/block22_cfgreg.dat new file mode 100644 index 0000000..5292019 --- /dev/null +++ b/example/testvectors/wcdma/block22_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +800 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block22_hard_dec.bin b/example/testvectors/wcdma/block22_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..2eae9ca8076c6c56f09eb02602c3890934988b51 GIT binary patch literal 100 zcmV-q0Gt2M51rWaEF;PqISy$gBc&b%D4U}A$Ft)sSHj97O71zF5Nr&%2j;??c#f|H zdBJA6`&Ke0;(?p?u9v`xNyp;3=obDj^FUjA&BTaxK@z`db$MZ5In7F_O@!h%$SynI Gd*J|<1TowI literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block22_hard_dec.dat b/example/testvectors/wcdma/block22_hard_dec.dat new file mode 100644 index 0000000..2f8033f --- /dev/null +++ b/example/testvectors/wcdma/block22_hard_dec.dat @@ -0,0 +1,25 @@ +d89d0fcf +ca232cf3 +690e391a +1ea52324 +a29b2805 +e3b3c7f8 +cac2572c +39ee4a22 +0c6c109c +c2e607b8 +af8e789b +66c17905 +3256fbb9 +9b81e226 +c097aef6 +e2c74989 +fe16e8b9 +5b40f32f +88c4cd7a +bf124175 +61797569 +4acd395f +e2844da8 +3b2ec837 +00e17bdf diff --git a/example/testvectors/wcdma/block22_llrs.bin b/example/testvectors/wcdma/block22_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..b85c770881166c43a736c8fd96a972fa6b0dce3c GIT binary patch literal 2400 zcmWlbhj!z*5=4;`GiA%(o%H{owR?7Kk0gp2M8@O$fj*6{s#}1sq&KOc+IJWZKH>l5 z+fU|tX0q&uswPU$JN`%DK@1XCAEh_s2$&gM^Y{qOA9^R;@$BcUN>IRpOC zvVN;Xl7-Jy&}(bv3kS6dW36lCx3X8ZaW~2uf~~k87e^jJG4Os4pViBnKju#x9iSWB zQj-&z7CrzgnHX>U9Zl=RD@A!U4`4UA&L*<ju(Gyl(kz>vLFfCeRL8#1Y%=kl;ISZQ*^k za5X^uB>A<#r1I(Fao3APn!fQvGH@-UKx>_}&`*FQuIu$;g`7u4q9WjKN-#rHXg$4g zBB3i9jQnF8_Fk`Lio#d{8bxVq-!D&(iR3H6^(TjAx;~HUhY$qBgcr=Rj8w)=Ol(Nk zbGHMamu@;YzSo-JARmwFi59kjymPUcG7Y*@gs*UZKdgt0mV!9cfo(Qh7af;5%5nw9 z(q`!D{-23-sKP!9fPV+sK#i>-u_*YTJ$bFngCB~tSuv&RYATH|cXu@kfdy?$@P^(g z+i%%S3h;xrlqXJX8*}yU6lJ2cSjD=?;?!WXFFONdM&Qx?Dup~)D$*{_BrOAn!hcaS z`VbJye$6~#5{aJ8U&X(v%smv+f0{!UY_gsf9BL0)<0?T?w-F71{QWzpoeNyX+B0+b<-yxytb=&*T^_4pJd6 z7*>^UULAkQyxwx~mazhN?XBvnSOEm$1k9SJM|h@S^STpQKqI1muMrBY9=-WzHOGo= z=A_d3E3<<64S-^g*AcxJ4*;44acDe74&meBLV?=xG>=`P$vD$5g zncv$mSMX4E2B{q4)X&?{yHOK=OCjr37%(%eyH{%-r}6pixfKpP4@(1BTDruF2#4Qz zfM+5td&?RrR=|QMc)E5#Sfh!Gkx0ZUwoXuqMdQvJzKz9+nENRaipcDc`TZS%>RZgb zi3nCf=m3PIvO4%#5w4dp4^PBP?her`Gvv#+BuloDeFV4T6!SE({T?+2^95(-bmJme zRlplzi!rPFSh0rXVPL;uXgD|Rej?R>U>+sxC>Dr|@*o{Y$*NR+()!8YUM)i&mZW}h;t}w?GexJOvhAPa zg!$EU#Jl|g={%0I}FSIRb7>2(Kz_Q@V_uy!txEY`l(X*Il)jhI}+ zAaxQbGhtQwxnB_}>kdDfNMT3VR$-aZ^UIct-*JDS{I_yBGr*ya`3daBFm?ZiFRloi z^r;+q{Pg8UEIq77{w@L}d=?PTg`2-PLh^_x%ouU$i8Ch2C7y0AV!D85%xCdNo{mX8 z^dY{ymZv0eKc*|b9tC=~c>#c!_Q6HsOLjH3JY}KXf?eu?^g)y9wRpubZA|xfWYfoN z+Z|Jgs%V!%*gX=02>Pv$=|KYrGSSO4_yy z9jeKQl-j$U^+tVr@@jH)Z6R?}qU)m1?qBNlJKpGN+wjUXByx@P6Bv+m}(~tQ0)9=+`&Htm2FJ}KgPuI>$(vO^oWK5uC-9sUAu~Na zJ@fBGl5Au7!iiK)K1aZZItSbwdW;Hhw1YhR?i^Q?DO#3F9> z^@-=kny9{zx9RqQd!G6-LvJy8-KUjn1KM_p0yNUv9|%^yrlXKP4nefS=$3i zTW=ShkopJ+#Icb`c#e+L54g3JCust+u2ZbFXOMgHViCF7d*kyUP?z$+*FzjpQ<;Nh zwT$z#fAUiOtgm#gxH~G+>pdq831mwhs2VafmSJv<>l`gMajmHCC0-j>hUd5$!)fel zSKxwxUM|y^G(YinGC>EmQ)wS>i%sgAJNq<9N5)X--baBuJ<^}r<_o&Fs$sq03;t@x zu}wBEpP0WTIzGOl?bttJjxL95ux?O_=FRi~Mz2A literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block22_soft_dec.dat b/example/testvectors/wcdma/block22_soft_dec.dat new file mode 100644 index 0000000..18e8b0d --- /dev/null +++ b/example/testvectors/wcdma/block22_soft_dec.dat @@ -0,0 +1,800 @@ + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 116 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -78 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -68 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -101 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 116 0 0 + -119 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 126 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 107 0 0 + 127 0 0 + 126 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + -114 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -111 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -121 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 84 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + -88 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -113 0 0 + -127 0 0 + -127 0 0 + 85 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 111 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -107 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 107 0 0 + -127 0 0 + 118 0 0 + -127 0 0 + 125 0 0 + 119 0 0 + -127 0 0 + 107 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 107 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -114 0 0 + 113 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 112 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 123 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -84 0 0 + -127 0 0 + -94 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -84 0 0 + 127 0 0 + -103 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 108 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -116 0 0 + -116 0 0 + 113 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + -118 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + -125 0 0 + 113 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -126 0 0 + 85 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -71 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 111 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -100 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 114 0 0 + 101 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + -119 0 0 + 114 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -116 0 0 + -122 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -101 0 0 + -99 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -109 0 0 + -95 0 0 + -127 0 0 + -110 0 0 + -115 0 0 + -127 0 0 diff --git a/example/testvectors/wcdma/block22_status.bin b/example/testvectors/wcdma/block22_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..ad0016a31f36864d7778d1e8c90d0a75b9ebf811 GIT binary patch literal 12 TcmY$_W8nC{hRGp^L7o8s6UYM2 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block22_status.dat b/example/testvectors/wcdma/block22_status.dat new file mode 100644 index 0000000..12095ab --- /dev/null +++ b/example/testvectors/wcdma/block22_status.dat @@ -0,0 +1,3 @@ +08002e27 +4002acf7 +001f006c diff --git a/example/testvectors/wcdma/block22_tail_llrs.dat b/example/testvectors/wcdma/block22_tail_llrs.dat new file mode 100644 index 0000000..336e68f --- /dev/null +++ b/example/testvectors/wcdma/block22_tail_llrs.dat @@ -0,0 +1,6 @@ + 17 7 + 5 18 + -17 15 + -16 5 + -7 8 + 1 -3 diff --git a/example/testvectors/wcdma/block23_cfgreg.dat b/example/testvectors/wcdma/block23_cfgreg.dat new file mode 100644 index 0000000..cac88c8 --- /dev/null +++ b/example/testvectors/wcdma/block23_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +810 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block23_hard_dec.bin b/example/testvectors/wcdma/block23_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..44bd79f5d734c43fcb20c1623ed584d6b83dcf57 GIT binary patch literal 104 zcmV-u0GI!}4^88X)Hpy>Vb z1GV;5fUGO>c-@-G1?%%JI>P@I9;kA!o&+sjHsbe_F0}K<6y`9JuuzK{g)f2k#?ZfJUL~6g+LCXam(@!0;Y2{#U-W zOrf(V4yC3gO3yp34_%H&A@mkb4VTO>*a=XMoeeF4kV4dTcQAST8PWLn)xwLyR^gK@ zCVi^TuX523+T`@RUG8n?Ab5++W!{K~ ztE%oK=()G^f%mPyJzJKSKx*V==Px@eM=b5t9Mtg^y#|6_YN(F*spsD=`JR$_&*?)A zM^0e|p--bh_OJ5w{alAGq*00IzDG49iNrQ7B8Pt3z?n|OE$nOl;Cn%Rf|Tsjr0AY) z9N6UMFGWbMSo{P!GFvW2pa}!sc*+|a!55iVD4N%^BWBCvIs)b;V?y?1uUmN|V^?Eb2y|%`_vh*emwj!33)ku?A-2G_ zq?`gKO~{9EfaCkCMqRkK7OpXg1-B1ob)H6vbGu?G94vlI-!^a+HGqQ%jDa_PbkK)# zSgJ_w6zMg#NeK52I=|Ciz8`Y6636j|+uwYSnPr|DA&yhZ7-3yp+FjZ#(D%$-75Ib* z1X$cds~L_i-u`+Zq_?T;+-~;OoDJW|+d4yGWHoCVEm3IbHz+pPC@xEqH3nAF?he~= znzms{Yq$%r{<_IB>(yD(RKYmf2CZy_6Q>t9a9DstmK%TUJFmTO8&C@?uAT`s0))s} z@Uma2-u=@81&pCR<*gwSG+h$PpO}quRrlAag`cjQJW|$^c?1!5wQ%N~tH&!+yx%mghu^8LQ<+-+$(FD?Fe$^HykL(uEP{eWlD z;g6P+{+Ly>{{&eUegO*-_Ds>x=mKVlW?r6fo}k^Yczfyp_udFNTtaK)V$DlskXKHk zX?Te{8-40LW0ko{P}fVXO4?+0yjwUQ_qBqP56FbPE&3OgGZhH-o@US4LIEWSvcew8 z7TO)uCFAPYn>Jk3DJ}!LzQIds)Z~U`JgYyj<&s zZY+CJSt$Alo7t%RoN}EK_&JmN=%0)P-_{*lt(g9&R|csQaW{hd2l?*7!^pkv7qFwI zAwsR3*Rvvx)4b?KvFbJVF>Arova)5OwrmcuMz3J-7O{1xgdwGZ4|%PWTAESpkX8FT z0?qeSc)2e_x(QwP!cmzxXSVa>{$i(nE?=epnE;Tf+#d^noq>xE%`-<;mXU3QK7lt6 z(vnXoe&bYN-As(ltlnvUU}+2djAK!HmYW{qOH#G5W9xX1JPT9UAH`}tCz6j(Tqj; zOX)N)kfrCNm)L4`{r-}pikl0M_~hw#sJBg0?$}a=_Xsx*1zcfJv*int{Ei~T3wPCa zv7(iziLO+s#eHtNS12c*`6Qw?_D{ten;qQwbUrXsEg6&rOq=ba5!s;P^ZLcxBA7>5 z<*}Ec)<-}qiko(0db}<&f6lJom*=-br+kg>b^YLbE~vU(8Nf73BM#m6jl-O4)8cmA zVf~|o!b6RXVX$cu>4Fl-KbQjxP0eI&et@fkY@=5o^bR~-dw9Hnysrxjp`iT#8gHj* z7dNWeu9xz;h=9NHV>>^P^o9K>E%TD^$> gh!~Ndm~iKBX`x$WT9uZYPx^#in$cYTlt=;i59+Rh2LJ#7 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block23_llrs.dat b/example/testvectors/wcdma/block23_llrs.dat new file mode 100644 index 0000000..7957647 --- /dev/null +++ b/example/testvectors/wcdma/block23_llrs.dat @@ -0,0 +1,814 @@ + 1 7 9 + 21 -9 -3 + -12 -6 -1 + 18 20 -19 + 8 16 -18 + 14 15 -14 + -5 -6 7 + 5 -10 -4 + -10 -6 -9 + -5 -6 10 + 17 14 7 + 3 13 8 + 1 0 15 + -19 12 2 + -5 8 -15 + -2 -8 -15 + 3 8 7 + -28 -21 2 + 9 -6 11 + 23 6 -2 + 14 8 9 + 6 10 -4 + 10 18 6 + 2 0 -12 + 22 2 4 + 8 2 5 + -1 4 -17 + -7 22 0 + 2 8 -6 + -3 7 -9 + 13 -1 -18 + 14 -11 4 + 4 -21 14 + 10 5 4 + -10 -10 -26 + -15 -11 1 + -11 -6 9 + 5 -17 28 + 12 -8 -3 + 19 0 6 + 15 10 3 + -2 0 -16 + -4 -9 -15 + 20 -9 3 + 8 5 19 + 8 16 15 + -10 5 22 + -12 7 10 + -5 14 6 + 21 -9 -1 + 13 4 10 + 7 9 -19 + 9 0 16 + 6 13 3 + -6 15 10 + -14 -3 12 + 3 8 -13 + -7 10 -12 + 8 -6 4 + 0 21 6 + -1 6 2 + 20 -8 8 + 15 -4 8 + -8 9 3 + -5 -13 -6 + 14 10 -10 + 4 -19 -13 + 1 -2 3 + 1 -5 6 + 5 -17 1 + 1 8 12 + 2 -6 -20 + 15 -16 0 + 15 -21 4 + -19 -12 -20 + 0 9 -17 + -16 20 3 + -6 5 3 + -8 6 -6 + -26 16 -4 + -4 4 10 + 2 -15 17 + 18 18 8 + 30 0 12 + -21 -4 -8 + -8 1 -1 + 1 15 -10 + -22 12 11 + 10 8 13 + 3 -7 -3 + -8 -9 13 + 10 22 -12 + 3 -2 -3 + 21 11 23 + 9 -18 11 + -1 -11 20 + -9 8 10 + -3 2 2 + -26 -13 9 + 10 9 -11 + 12 2 11 + -19 -19 3 + -10 7 -5 + -23 1 5 + 3 -8 9 + 19 -5 -3 + -12 -8 14 + -2 -11 5 + -2 8 -6 + 4 -17 -8 + -1 11 7 + -8 -4 8 + 14 12 -12 + 23 -14 2 + 5 6 -22 + 7 -17 3 + 2 -5 -3 + 7 3 -2 + -25 15 12 + -18 -9 -10 + -9 -2 -30 + -10 19 11 + -6 4 3 + -12 13 -3 + -13 4 5 + 5 6 10 + -6 -15 7 + -4 -8 -11 + -4 25 -19 + 1 -5 3 + 2 -30 -21 + 6 14 -17 + -8 12 6 + -3 -17 -13 + 10 8 8 + 9 11 -17 + 1 -24 8 + 8 -15 7 + -7 4 7 + -2 2 8 + -6 -14 0 + 2 -10 5 + -27 -4 -13 + -1 7 7 + -22 -11 17 + -10 -19 -5 + -18 -13 -10 + 5 -11 -13 + 13 7 7 + -2 -7 -19 + -3 -12 9 + -25 -3 17 + 14 -16 1 + -14 22 5 + -19 -14 3 + 14 14 -8 + 15 3 18 + -7 -28 -9 + 1 -14 24 + 0 -2 12 + 23 -6 7 + -4 22 4 + 6 1 1 + -7 6 -9 + -2 13 -14 + 7 4 -2 + 13 2 -7 + 8 1 -6 + -18 8 -18 + -7 13 13 + 11 28 -9 + 11 1 5 + 15 22 -2 + 21 8 -2 + 8 15 -9 + 5 3 7 + 22 25 21 + 16 14 9 + -8 7 6 + -15 4 -14 + 19 16 -21 + 7 20 -15 + 16 -2 12 + 14 10 -12 + -6 13 14 + -20 -11 20 + -17 31 -6 + 14 0 8 + 6 -2 -20 + -2 9 12 + -14 -1 19 + -5 7 1 + 4 -22 5 + 12 0 -10 + 2 -14 10 + -6 2 5 + 9 8 -16 + 15 -8 -5 + -6 22 13 + -22 5 -7 + -11 2 16 + 6 17 -23 + -1 13 7 + 20 -10 16 + 3 -1 -7 + 9 0 1 + -8 -15 22 + -21 1 8 + -9 2 1 + 19 -15 4 + 10 7 -5 + 20 -1 10 + -20 -17 5 + -4 1 -20 + -6 -15 16 + -10 -16 -11 + 0 1 -9 + 8 -8 -10 + 5 -11 -1 + -22 -21 7 + 12 3 -11 + 1 -12 5 + 10 7 -14 + 20 -15 -20 + 3 -4 10 + -17 30 6 + -10 -11 -23 + -15 13 1 + -25 8 -9 + -7 1 -11 + -3 17 10 + -6 -22 3 + 16 -5 13 + 5 14 -5 + 4 -9 -20 + -15 9 4 + -11 -14 7 + -2 -8 -17 + -3 -9 -13 + 25 -19 5 + 10 -5 22 + 17 14 -12 + 20 0 9 + 7 -2 -3 + 5 -13 -10 + 1 7 -13 + -2 4 -11 + 0 -4 0 + -5 -9 12 + 16 13 21 + -3 7 2 + 18 -1 -18 + -9 -4 -7 + 2 -11 -9 + -8 6 17 + 29 18 -3 + -1 -6 -7 + -23 -3 9 + 27 15 -15 + 22 -6 -5 + 12 6 -14 + -5 6 9 + 15 11 11 + -5 -9 3 + -3 -20 18 + 18 9 14 + 10 0 6 + 8 12 -2 + -17 12 3 + -11 -14 -8 + -11 12 -9 + -4 10 1 + 10 -1 9 + -15 -3 -1 + 2 -12 8 + 9 9 0 + 2 -2 -6 + 8 -7 -1 + -12 7 -10 + -16 15 -15 + -14 -14 -11 + 8 7 -6 + -2 7 25 + -5 18 16 + 16 -11 -6 + -16 -13 -24 + -12 11 0 + 0 1 3 + 22 -16 -6 + 5 -6 -4 + -16 -5 11 + 4 2 -15 + -7 -9 2 + -14 -5 -13 + 6 -2 2 + -23 -12 -12 + -15 -14 12 + 25 -10 -2 + 7 -27 1 + -11 5 19 + -1 9 -4 + 2 -15 15 + 16 5 13 + -3 8 5 + 1 2 -15 + 5 1 17 + 4 16 4 + -11 -6 -10 + -16 5 -12 + -16 -2 13 + 10 -6 3 + 5 7 -7 + -11 6 15 + -2 -14 -14 + -8 5 -18 + -4 0 -8 + 17 5 -7 + 6 4 12 + -16 -3 -14 + -7 1 -5 + -15 6 -11 + -23 -1 3 + 10 6 18 + 4 -18 -9 + 4 -3 18 + -2 -8 -1 + 11 -1 10 + 6 5 -6 + -4 15 -22 + -26 19 -1 + 0 10 15 + -10 -22 -10 + -4 -2 0 + 6 3 -9 + -8 11 1 + -1 20 6 + -22 16 -3 + -9 -9 -17 + 8 14 -18 + 2 -5 16 + -16 -22 9 + 3 10 3 + 0 21 -8 + 7 -4 -10 + 13 -14 10 + -6 17 -21 + 5 2 27 + 7 -21 3 + 13 23 3 + -8 1 -6 + -4 -22 11 + 0 -3 -4 + -23 13 -12 + 4 10 -7 + -15 -16 -5 + -13 -7 -18 + 1 10 -4 + 8 -7 -17 + 13 1 7 + 22 -15 -3 + 16 -10 -25 + -8 -14 -5 + -4 -2 12 + 3 12 -12 + 6 2 -12 + -14 19 9 + -18 1 5 + -21 -5 7 + 18 3 -7 + 0 -2 6 + 6 4 -14 + -6 14 11 + 9 16 -5 + 6 13 24 + 6 20 -4 + 8 -12 1 + 9 -23 -12 + 16 -9 7 + 4 -11 1 + -13 16 8 + 7 5 1 + 1 4 -13 + 3 -4 1 + -11 25 -5 + 4 -9 10 + -18 12 -15 + 13 -10 -8 + -5 2 7 + 4 0 -14 + -12 -18 2 + -2 -1 9 + -5 -1 7 + -17 -3 -19 + -15 11 2 + -9 -20 -4 + -16 -7 1 + -6 8 3 + -4 -19 -14 + -6 8 7 + 15 -3 -7 + -22 -13 11 + -4 10 -12 + 8 -2 -22 + 7 21 -8 + 0 -5 8 + 28 16 14 + -5 4 9 + 9 -9 2 + 20 10 13 + 8 3 -4 + -13 1 -7 + -6 -10 -1 + -26 1 11 + 14 4 -3 + 0 -14 14 + -13 -6 3 + 7 11 16 + 14 -6 -2 + -8 -4 13 + -6 -13 15 + 17 13 -2 + 2 -1 -2 + 9 0 4 + 6 0 -3 + -26 17 7 + -5 -15 -2 + -25 0 7 + 3 -4 -16 + 15 -8 8 + 6 -14 -4 + -2 -4 -10 + -15 -9 -9 + -2 10 -8 + -7 0 -24 + 25 -11 11 + 6 10 6 + 5 8 -7 + -14 4 6 + 11 -12 -15 + 15 18 -7 + -5 -3 1 + 0 4 -11 + -13 4 7 + -10 -11 -16 + 17 -10 22 + -24 10 19 + -9 6 6 + 15 19 -9 + 8 -6 11 + 1 -21 -14 + -8 1 -2 + -6 -17 0 + 2 11 -1 + 13 -14 -14 + -5 3 0 + 4 18 -16 + 16 4 -12 + -9 15 -8 + 6 -14 16 + -10 9 -4 + -4 -12 -9 + -19 -15 8 + -3 13 -2 + -12 -17 -9 + 13 -3 2 + 13 -2 -1 + -7 25 -6 + 15 16 -2 + -1 -13 -13 + 13 6 -23 + 11 -8 7 + 10 6 14 + 12 -8 -1 + 2 -9 8 + -8 20 6 + -4 13 -6 + 13 18 2 + 15 -21 3 + 6 8 10 + 7 -10 -2 + 2 -13 18 + -6 -6 16 + 2 13 9 + 10 -5 -5 + 0 15 12 + 11 21 -10 + -1 10 20 + -7 -9 0 + -21 20 5 + 3 -1 11 + -14 -9 5 + 1 -2 3 + 21 4 13 + 4 -1 14 + 1 -4 -12 + -19 -21 6 + -12 -7 -10 + 18 -10 18 + -7 6 -21 + 3 -5 -14 + -13 -13 9 + -12 17 -2 + -1 16 -26 + 23 -6 -15 + 4 -3 -7 + 18 17 16 + 15 -3 -11 + 12 -3 -14 + 3 -3 -17 + 3 16 26 + -1 2 19 + 4 -16 15 + 1 13 10 + -7 0 -6 + -3 16 12 + -13 -8 2 + 8 3 -19 + -19 15 12 + -17 0 12 + -13 -4 -18 + -7 -4 7 + 4 -2 -11 + 7 -2 -2 + 9 -4 -1 + 16 9 2 + 12 -17 11 + -9 3 -22 + 0 -27 -21 + -7 4 6 + -5 1 0 + -21 11 3 + 11 1 5 + -17 8 -4 + 9 24 9 + 1 -19 -9 + 3 -5 8 + -8 24 19 + 0 -2 15 + -8 2 -12 + 14 18 26 + 4 -4 7 + -1 6 1 + 21 14 -2 + -5 -1 -2 + 3 -21 12 + 4 8 -9 + 13 -16 14 + -5 -13 3 + -2 -8 14 + 19 7 18 + -5 -13 -11 + 19 3 1 + 1 9 12 + 18 15 28 + 24 -9 -1 + 14 -12 -5 + 4 -3 -1 + -1 -10 7 + 2 15 -5 + 15 -24 12 + -5 -1 3 + -19 6 -9 + 14 -5 -9 + -8 -10 6 + 1 11 1 + -13 4 13 + -4 16 13 + -3 -16 -3 + 8 11 4 + -14 -11 15 + 3 -19 -5 + 14 6 10 + -18 -1 8 + 6 -14 2 + -8 24 -6 + -10 11 -18 + -2 -1 6 + -16 -9 -7 + 18 2 0 + 9 3 -14 + 3 -1 5 + -2 -6 -3 + 14 6 13 + -13 -17 -16 + 3 -2 -8 + 9 14 -8 + 8 10 -2 + -7 10 -18 + 1 -11 0 + -1 9 -21 + -6 -10 -7 + -12 0 1 + -3 1 6 + 26 -1 -12 + -12 -7 5 + 0 21 -21 + -21 17 0 + 8 11 8 + 12 -9 -10 + 0 -10 -11 + 1 -6 0 + 17 15 -6 + 8 18 5 + -5 17 -13 + 6 -9 16 + 6 -9 1 + 0 12 20 + 23 -8 -22 + 7 -6 0 + 20 -7 -2 + -7 17 -11 + 1 6 -13 + -6 20 -14 + -5 -10 6 + -1 11 -5 + 19 19 -5 + -14 -6 -1 + 11 9 2 + -4 -13 -2 + 4 12 -29 + -19 13 12 + 5 5 3 + 2 -12 -12 + -10 6 21 + -13 -2 -16 + -4 -6 -11 + 14 4 8 + -3 11 -20 + 8 -8 5 + 8 1 -10 + -7 8 6 + 24 16 17 + 0 -4 -12 + 15 1 -11 + -6 13 4 + -11 -15 -16 + 5 -9 2 + 16 10 0 + 9 -2 -1 + 24 -17 14 + 19 -16 -10 + -2 -2 -19 + 11 12 12 + -13 -3 4 + 4 -3 13 + -7 0 8 + 7 31 -14 + 3 -15 11 + -12 4 1 + 3 -19 8 + 14 18 7 + -25 -6 -2 + 7 -17 -8 + -15 6 -1 + -4 4 15 + -2 -5 -6 + 6 -6 -4 + -2 14 -2 + 7 12 -3 + -3 15 -4 + 13 6 -8 + 8 -13 -27 + 8 -8 16 + 20 8 13 + -16 -16 -10 + -3 -31 -1 + -2 -10 27 + 3 -13 -22 + 2 6 -7 + 3 1 -2 + -10 5 13 + -1 -7 -6 + -7 8 19 + -3 -4 -10 + -11 -11 -6 + -7 -9 -2 + -3 8 9 + -12 7 -6 + -8 -6 9 + 0 -18 7 + -10 4 -13 + -19 27 16 + -2 -6 -2 + 6 0 3 + -7 -18 2 + 11 -9 7 + -5 9 6 + 7 -11 -4 + -16 12 -6 + 2 16 4 + 4 -14 16 + 1 0 -3 + 0 -11 -5 + 3 2 -18 + 8 13 -14 + -19 13 5 + -5 4 -9 + 14 8 1 + -10 10 17 + 6 -13 -11 + 3 7 9 + -4 7 11 + -7 12 26 + -4 -15 5 + -20 10 -13 + 29 4 10 + -18 13 17 + 2 -7 -16 + 2 -10 -11 + -10 7 -6 + -12 -1 8 + -16 -10 5 + -1 -14 -1 + -11 10 9 + 7 6 13 + -8 11 17 + -12 17 -11 + -8 11 13 + -4 -9 -4 + 14 -18 -8 + -3 -15 6 + 6 -10 -9 + 17 8 -1 + 26 7 8 + 4 -3 8 + 23 -14 -4 + -13 -13 -5 + -15 6 -5 + 1 -14 -6 + 8 -16 10 + -9 5 -13 + 9 -8 9 + 11 -1 -5 + -15 -12 3 + -10 -7 -13 + 5 2 27 + -4 6 1 + -8 13 -8 + 4 -10 -23 + 10 -13 2 + 2 0 -7 + 17 17 10 + 16 -6 14 + -12 -8 -13 + 1 2 -1 + 8 6 -15 + -12 -13 7 + 1 17 -10 + 13 11 -10 + 10 8 -4 + 7 -9 -3 + 9 4 -20 + -1 -1 -7 + -3 11 2 + 9 1 -11 + 12 -18 13 + 3 9 -9 + 0 -21 -7 + -8 11 -8 + 9 10 18 + 5 10 -15 + 15 -14 -3 + -19 13 12 + 1 18 -1 + 14 8 19 + 18 -11 8 + -16 1 -11 + -16 6 12 + -12 11 11 + 17 -11 -10 + -14 24 10 + -3 2 9 + -13 0 -13 + -5 13 10 + -19 27 -18 + 8 -3 -4 + 0 -1 3 + -13 7 2 + -27 -1 4 + -20 -19 31 + 9 -14 3 + -1 17 4 + -15 -3 7 + -10 -20 -7 + -13 8 -6 + -7 -10 -20 + -8 12 -3 + 4 16 -14 + 13 8 5 + 11 -7 -12 + -5 5 -4 + -9 9 6 + -7 -3 -10 + 5 7 10 + 14 7 -1 + -5 6 14 + -10 -8 7 + 10 15 -9 + -8 -6 -26 + -4 18 5 + 1 -11 -17 + -16 9 1 + 7 2 15 + 5 8 -3 + -22 -8 -15 + -7 -17 2 + 17 -14 -15 + 7 -23 -1 + 1 -1 -24 + -1 16 -1 + 0 31 -4 + -7 -3 5 + 2 0 0 + -8 0 0 diff --git a/example/testvectors/wcdma/block23_soft_dec.bin b/example/testvectors/wcdma/block23_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..37281627a5cd3e45fe8f70bafb266debc8331689 GIT binary patch literal 2430 zcmeH_OLE&V5JYpf9KpLBAldn&l4DsvcC|=Rl;o0Bl}fzM33A1}2I!n1OY$=SW_lWp z8Az7+pO;c=JImXkPI`B@CM0{Vi}dZH6Z4?s(@eW9ljV)P>f6~bC2qIYz96?H??E9qk6uJ{LS@Wg2~S}{8YQ^eH0i}mf!Ug~nZCi>Qd+Gc^Zcc(+$%g^>= zlr?f3^!43Z%WriX_W1zh{O2${A%dZ2-anN1qur5I=!@AG>y59D-F>D(fiba0KUvg?vV1lflFMmR~!h)$0i3Xt%}JxSuI$0>$Nx8VRP z-CG+5;3#`?8mX=nDbQxrNA28`00DF-|Gty2Xhuh^@0!jVHTJLwr0d%T?D8>J%qu+l zPLP{*j`lRD5BDjgQHUcOqN7aivGuO7ekcf^(UW9;o*zl1JX|WT+OY$F{Aqfo3QQH4 NDlk=Gs=$A$z+ae)l-mFR literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block23_soft_dec.dat b/example/testvectors/wcdma/block23_soft_dec.dat new file mode 100644 index 0000000..41481d9 --- /dev/null +++ b/example/testvectors/wcdma/block23_soft_dec.dat @@ -0,0 +1,810 @@ + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -112 0 0 + -120 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -105 0 0 + -127 0 0 + -124 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + 127 0 0 + -114 0 0 + 127 0 0 + 127 0 0 + 102 0 0 + -114 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 113 0 0 + 127 0 0 + -126 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + -112 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -107 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 124 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + 82 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + -114 0 0 + -119 0 0 + -113 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -116 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -113 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -118 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 101 0 0 + -105 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -116 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 110 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 111 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + -106 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 118 0 0 + 122 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 118 0 0 + -127 0 0 + -123 0 0 + -120 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 113 0 0 + 89 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + -125 0 0 + -113 0 0 + 66 0 0 + -124 0 0 + -113 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 113 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + -112 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 109 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 113 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + -95 0 0 + 82 0 0 + 127 0 0 + -127 0 0 + -113 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -122 0 0 + -125 0 0 + 126 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 111 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 109 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 110 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -109 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -116 0 0 + -127 0 0 + 122 0 0 + -125 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -81 0 0 + -127 0 0 diff --git a/example/testvectors/wcdma/block23_status.bin b/example/testvectors/wcdma/block23_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..3796ec85fcb918c34be4d402638c8abd805d5c9b GIT binary patch literal 12 TcmdPXXW%%rpUI(-L6QLg6HEfb literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block23_status.dat b/example/testvectors/wcdma/block23_status.dat new file mode 100644 index 0000000..91fce33 --- /dev/null +++ b/example/testvectors/wcdma/block23_status.dat @@ -0,0 +1,3 @@ +08002f2e +4002bfc2 +00190081 diff --git a/example/testvectors/wcdma/block23_tail_llrs.dat b/example/testvectors/wcdma/block23_tail_llrs.dat new file mode 100644 index 0000000..d9c7b35 --- /dev/null +++ b/example/testvectors/wcdma/block23_tail_llrs.dat @@ -0,0 +1,6 @@ + 0 2 + 31 -4 + -7 -8 + -3 5 + 8 -12 + 20 8 diff --git a/example/testvectors/wcdma/block24_cfgreg.dat b/example/testvectors/wcdma/block24_cfgreg.dat new file mode 100644 index 0000000..5421175 --- /dev/null +++ b/example/testvectors/wcdma/block24_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +820 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block24_hard_dec.bin b/example/testvectors/wcdma/block24_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..d4bcd6421affe1dec17f95e6d084e5cd1901354b GIT binary patch literal 104 zcmV-u0GI!#4?XR3DmjpGTnR34Zka?uo_F(jg;m z9H~YsPKqrKb1qAOyCg2ps;kU($Wl5IRX?p+5n*V3owqhmbB004I;NSuG0=^OC+DJ_tFnq*}|B>&1 zodY_%PNLMbM43s`pSa}hB!pQjnz&?PUcMYCq=?wA(?H=|O6oyye>QaZ>*nB9VW$=< zU%WA)ewZ(OTyrKb(Q?hvyUm=bb)jLa2V_JOJQQEgaL`>~`K@_2A1z9`^V7&TCNods zDP!#31U>g|I&zTJz5HeJ9M_+RAiHp-raLXtMT^yG+XCw^Z()OhEH5*C_!NL%C)y^d zhLfe!vyc4)aU_0qUq9GZm8wBOytLi|MBk7g^P;N%hW(>G4bp-)h+bQ}Yv zS!~b%IemqdJS(;tU}_^uuwowZXd9(%a`*9zKsF~WKR}5;eXeh zs=YvbK@P&E%C&YJ)KQ)s4u4v(@Kz`|dt<7PrDJ(|%5O}gSSqj>_{ocd?uwcl>A7Kb zN+cy&N)y9|M4dWg4*@9CC zyM?n02Y?Vc3)|5fW%^ni2*6s}Q=aYWK`PBf1!}}5aY#89r^egri8g>t2;7I?wUCzO z_@sNba!!0t@RPb%tm~PTYUymor?i^MeT#EjmrM0I5roY4P9IoXxi%w18Ly}fXUGzn zq5D58sX$Y&bPn9ibbKQT zvKPx~r>)>{&BuxW-o~qX+t7d_pRSKa0Usos*qrP62qVsG3(|>ru6s)AZ+82G#%Fmw z;@!LC5)PS0K)AvagD0e_uq{nD0yy=xnD1Nx9mGlw%}S_I42K9yg_Z;PJ^OV^uk@7t z!W?tQ;>F2Qly~EvjuXDc3f_Jl2le?rS@&VN* zm+1apoL#Uid~HnkSy*K%(t}Dr&ae3r%Ll@Hf+e>>QON)-Ulc~mR6zs(sKwPoMofj3 z$91FEb5?5<@Y2^XK^}4ed3!v-VIq%1c$rhYwp(Yg6X0*Nu;ERLyS9Q~^ZG;ePwQz7 zWvyV}IM+pf! zu=uY)WAo$D*)GjPb9ZI~!oSI6EpsIts7Du3(ANw6c6V}P2+z)^^2oE@>@LWHAbdwZ zvfR%95d8vyKi9nef%50x7)(c8&dPKlfhE+-dNQ+ci!ykhZQB6Z%7RrLhD$B>U{jOU z#H*7+l15xphelM zoUCr2_WjMX`8L(0Jzd?sK0;~&9b=Nc-yI3hZXlJS8=%&_EY#_I zNuCb%gpu_X3C^{z568H}p{ck5a^ z7u90V+fEpTaCoBLSDQJFw0b)>?aB;_NVb2V@9A8=;}TSTc+~Zi)3(gjHJ_h#N*W_IXX`(fy7=n|Y^aYYhwc{J;m(tjO4 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block24_llrs.dat b/example/testvectors/wcdma/block24_llrs.dat new file mode 100644 index 0000000..240043d --- /dev/null +++ b/example/testvectors/wcdma/block24_llrs.dat @@ -0,0 +1,820 @@ + 1 7 -7 + 21 -9 -3 + 4 10 -1 + 2 20 -19 + -8 0 -2 + 14 -1 -14 + -5 -6 -9 + 5 6 -4 + -10 10 -9 + -5 10 -6 + 17 14 -9 + 3 13 8 + 1 -16 -1 + -19 12 2 + -5 -8 1 + -2 8 1 + 3 -8 23 + -28 -21 2 + 9 -6 27 + 23 22 -2 + 30 -8 9 + 22 -6 -4 + -6 18 22 + 2 0 -28 + 22 2 4 + -8 2 -11 + 15 4 -17 + 9 22 0 + 2 8 -6 + -3 -9 7 + 13 15 -18 + 14 5 -12 + 4 -21 -2 + 10 5 -12 + -10 6 -26 + -15 -11 1 + -11 -22 9 + 5 -1 28 + 28 -8 13 + 3 0 -10 + -1 -6 3 + -2 0 0 + -4 -9 -15 + 20 -9 19 + 8 5 3 + 8 16 -1 + -10 5 22 + -12 7 10 + 11 -2 -10 + 5 -9 15 + -3 -12 -6 + 7 -7 -3 + 9 0 0 + 6 -3 -13 + -6 -1 -6 + -14 13 12 + -13 24 -13 + -23 10 -12 + -8 -6 20 + 0 5 -10 + -1 -10 -14 + 4 8 8 + -1 -4 -8 + 8 9 -13 + -5 3 10 + 14 -6 -10 + -12 -3 3 + -15 -2 -13 + 17 -5 6 + 5 -1 17 + 1 -8 -4 + -14 10 -4 + -1 -16 0 + -1 -21 4 + -3 -12 -4 + 16 -7 -1 + 0 4 -13 + -6 -11 3 + -8 -10 10 + -26 0 12 + -4 4 -6 + 2 -15 17 + 18 2 24 + 30 0 12 + -21 -20 8 + -8 17 -1 + 1 31 6 + -22 12 11 + 10 8 -3 + 3 9 13 + -8 -9 -3 + 10 6 -12 + -13 -2 -3 + 5 -5 7 + 9 -18 11 + -17 5 20 + 7 8 10 + 13 -14 2 + -10 -13 9 + -6 9 5 + 12 -14 -5 + -19 -3 3 + -10 7 11 + -23 1 -11 + 3 8 -7 + 19 -5 -3 + -12 -24 -2 + -2 5 -11 + -2 -8 10 + 4 -17 -8 + -17 -5 7 + 8 12 -8 + 14 12 -12 + 7 -14 18 + -11 6 -22 + 7 -1 3 + 2 11 -3 + 23 -13 14 + -9 15 -4 + -2 -9 6 + 7 -2 -14 + 6 3 27 + 10 20 3 + -12 -3 13 + -13 -12 -11 + 5 -10 10 + -6 -15 7 + -4 -8 -11 + 12 25 -19 + 17 -5 3 + 2 -14 -5 + -10 14 -1 + 8 12 -10 + 13 -1 3 + -6 24 8 + -7 11 -17 + 1 -24 -8 + 8 -15 7 + -23 4 7 + -18 2 -8 + -6 2 16 + 18 -10 -11 + -11 -4 3 + 15 23 7 + -6 5 1 + 6 -19 11 + -2 3 -26 + 21 -11 -13 + 13 -9 7 + -18 9 -19 + 13 -12 -7 + -25 13 17 + 14 -16 17 + 2 6 5 + -3 2 -13 + -2 -2 -8 + 15 3 2 + -7 -12 7 + -15 2 24 + -16 14 12 + 7 -6 7 + -4 22 4 + 6 1 1 + 9 6 -9 + -2 -3 2 + 7 4 -2 + -3 -14 -7 + 8 1 10 + -18 -8 -2 + 9 29 -3 + -5 12 -9 + -5 1 -11 + 15 22 14 + 21 8 -18 + 8 -1 -9 + 5 3 23 + 22 9 21 + 16 -2 -7 + -8 23 6 + -15 4 -14 + 19 16 -21 + 7 4 -15 + 0 14 12 + -2 -6 4 + 10 13 14 + -20 -11 20 + -1 16 -22 + 30 -16 -8 + -10 14 -20 + -2 9 12 + -14 -17 19 + -5 7 1 + -12 -22 5 + 28 -16 -10 + 18 -14 -6 + -6 18 5 + 9 8 -16 + 15 -8 -5 + -6 6 -3 + -22 5 9 + 5 2 16 + -10 1 -7 + 15 13 7 + 20 6 0 + -13 15 9 + 9 16 1 + -8 -15 22 + -5 1 -8 + -9 2 17 + 3 1 4 + 10 7 11 + 20 -17 10 + -4 -1 5 + -4 1 -4 + -6 -15 0 + 6 0 5 + 16 1 -9 + 24 8 -10 + 21 -11 -17 + -6 -21 -9 + -4 3 5 + 1 -12 -11 + -6 7 -14 + 4 1 -20 + -13 -4 10 + -17 14 -10 + -10 -11 -7 + -15 13 17 + -25 -8 -9 + -7 1 5 + -3 1 -6 + -6 -6 3 + 0 -5 13 + -11 14 -5 + -12 7 -4 + -15 9 4 + 5 2 -9 + 14 -8 -17 + -3 -9 3 + 9 -3 -11 + 10 -5 22 + 17 -2 -12 + 20 0 9 + -9 -2 13 + 5 -13 6 + -15 -9 -13 + -18 -12 5 + 16 12 0 + -5 -9 12 + 16 -3 5 + -19 -9 2 + 2 15 -18 + 7 -4 -7 + 2 -11 -9 + 8 -10 17 + 29 18 -19 + 15 -6 -7 + -23 13 9 + 27 15 -15 + 6 10 -5 + -4 -10 -14 + 11 -10 -7 + -1 -5 -5 + 11 7 3 + 13 -4 2 + 2 -7 14 + -6 16 -10 + 8 12 14 + -17 -4 3 + -11 -14 -8 + -11 -4 -9 + -4 -6 17 + -6 -1 9 + 1 -3 15 + 2 -12 8 + 25 9 0 + 2 -2 -22 + 8 -7 -1 + 4 7 -10 + -16 -1 1 + -30 2 -11 + -8 7 10 + -2 -9 25 + -5 18 0 + 16 -11 -6 + 0 -13 -8 + 4 11 -16 + 16 1 -13 + 6 0 10 + -11 10 12 + 0 -5 11 + 20 -14 -15 + -7 7 18 + 2 11 3 + 6 -2 2 + -7 4 4 + -15 2 -4 + 25 6 14 + 7 -11 17 + 5 -11 3 + -1 -7 -20 + 18 1 15 + 16 5 -3 + -3 8 -11 + 1 2 -15 + -11 -15 17 + -12 16 4 + 5 10 -10 + -16 -11 -12 + -16 -2 -3 + -6 -6 -13 + 5 7 9 + 5 -10 -1 + -2 -14 -14 + 8 5 -2 + -4 -16 -8 + 1 21 -7 + -10 4 -4 + 0 -3 2 + 9 1 11 + -15 6 -11 + -23 -17 19 + -6 6 2 + -12 -2 -25 + 4 -3 18 + -18 8 15 + 11 -17 10 + 6 -11 10 + -4 -1 -22 + -10 3 15 + 0 -6 15 + -10 -22 6 + 12 -2 -16 + -10 19 -9 + 8 11 1 + -1 4 -10 + -6 0 -3 + -9 7 -1 + 8 14 -18 + -14 -5 0 + -16 -22 -7 + 3 10 3 + -16 21 -24 + -9 -4 -10 + 13 2 10 + 10 17 -5 + -11 2 11 + -9 -5 19 + -3 7 19 + -8 -15 10 + -20 -22 11 + -16 -19 -4 + -23 13 -12 + 4 10 9 + 1 0 -5 + 3 -7 -2 + -15 -6 -4 + 8 9 -17 + 13 1 -9 + 6 -15 13 + 0 6 -25 + -24 -14 -5 + 12 -2 -4 + 19 12 -12 + 22 -14 4 + -14 19 -7 + -18 1 5 + -21 -5 7 + 18 3 9 + 0 -2 6 + -10 -12 2 + 10 14 -5 + -7 0 -21 + 6 -3 24 + 6 20 -4 + 8 4 -15 + 9 -7 -12 + 16 7 7 + 4 -11 1 + -13 16 -8 + -9 5 1 + -15 4 -13 + 3 12 -15 + -27 25 -5 + -12 -9 10 + -2 -4 -15 + -3 -26 -8 + 11 2 -9 + -12 -16 -14 + 4 -18 2 + -18 -1 9 + -5 -17 7 + -17 -19 -3 + 1 -5 18 + 7 -20 12 + 0 -7 -15 + -6 -8 3 + -4 -3 2 + 10 -8 -9 + -1 -3 -7 + -22 3 11 + 12 -6 4 + -8 -2 -6 + 7 5 -8 + 0 -5 -8 + 12 0 14 + -5 4 9 + 9 7 -14 + 20 10 -3 + -8 3 -4 + 3 -15 -7 + -6 6 15 + -26 1 -5 + 14 20 13 + 0 2 14 + -13 10 19 + 7 11 0 + 14 -6 -2 + 8 -4 -3 + 10 -13 -1 + 1 13 -2 + -14 15 -2 + -7 -16 -12 + -10 0 13 + -10 1 -9 + 11 -15 14 + -25 16 7 + -13 12 -16 + 15 8 8 + 6 -14 -4 + -2 -20 6 + -15 7 -9 + -18 10 -8 + 9 0 -24 + 25 -11 -5 + 6 -6 -10 + -11 8 -7 + 2 -12 -10 + -5 4 1 + -1 18 -23 + 11 13 1 + 0 -12 5 + -13 4 7 + -10 5 0 + 1 -10 22 + -24 10 19 + 7 6 22 + -1 3 -9 + -8 -6 11 + 1 -5 -14 + -8 1 -2 + -22 -1 0 + 2 11 15 + 13 2 -14 + -21 -13 0 + 4 18 -16 + 16 4 -12 + 7 31 8 + -10 -14 0 + 6 -7 -20 + 12 -12 -9 + -3 -15 -8 + -3 -3 14 + 4 -17 -9 + -3 -3 -14 + -3 -18 -1 + 9 9 10 + -1 16 14 + -1 -13 3 + 13 6 -7 + -5 -8 7 + -6 6 14 + -4 -8 15 + 2 -9 8 + 8 20 -10 + 12 -3 10 + -3 18 2 + 15 -5 3 + -10 24 -6 + -9 -10 -18 + 18 -13 2 + -6 10 16 + 2 -3 -7 + 10 -5 11 + 0 15 -4 + -5 21 -10 + 15 10 20 + 9 -9 -16 + -21 20 5 + 3 15 11 + -14 7 21 + 1 14 19 + 5 -12 13 + 4 15 14 + 1 -4 -12 + -3 -21 6 + 4 9 -10 + 18 6 2 + -7 6 -5 + 19 -5 2 + -13 -13 9 + 4 1 14 + -17 0 -26 + 23 -6 1 + -12 -3 -7 + 2 17 16 + 15 13 5 + 12 13 -14 + -13 13 -1 + -13 16 26 + -1 -14 3 + 4 -16 -1 + 1 13 -6 + 9 0 10 + -19 16 12 + 3 -8 18 + 8 3 -19 + -3 15 12 + -1 -16 12 + -13 -20 -18 + 9 12 7 + 4 -2 5 + 7 -2 14 + -7 -20 -1 + 0 9 -14 + 28 -1 11 + 7 3 -22 + 0 -11 -5 + 9 -12 22 + -5 -15 16 + -21 11 -13 + 11 -15 -11 + -17 -8 -4 + -7 24 9 + 1 -3 -9 + -13 -5 8 + -8 8 19 + -16 -2 -1 + -8 18 -12 + 14 2 26 + -12 12 23 + -1 -10 1 + 5 -2 14 + -5 -1 14 + -13 -5 12 + 4 -8 7 + 13 -31 -2 + -21 -13 3 + 14 -8 -2 + 3 -9 18 + -5 -13 5 + 19 3 1 + 1 9 12 + 2 -1 12 + 24 7 -1 + -2 -12 -21 + -12 13 -1 + -1 -10 -9 + 2 15 -21 + 15 -24 12 + -5 -1 3 + -19 6 -9 + -2 11 -9 + 8 -10 22 + 1 11 -15 + -13 4 -3 + 12 16 13 + -3 0 13 + 8 11 -12 + -14 -11 -1 + -13 -19 11 + 14 22 -6 + -2 -17 -8 + -10 -14 -14 + 8 24 10 + -10 -5 -18 + -18 -1 -10 + -16 -25 9 + 2 2 16 + -7 3 2 + -13 15 -11 + 14 10 -19 + 14 -10 13 + -13 -1 0 + 19 -2 -24 + -7 14 -8 + -8 -6 -2 + -7 10 -2 + -15 5 0 + -17 9 -21 + 10 6 9 + 4 0 -15 + 13 1 6 + 10 -1 4 + 4 -23 21 + 16 5 -21 + -21 1 16 + 8 -5 -8 + -4 -9 -10 + 0 6 5 + 1 10 -16 + 1 -1 -22 + 8 2 -11 + -5 17 3 + 6 7 16 + 6 -25 -15 + -16 12 4 + 23 8 -6 + 7 -22 -16 + 20 -7 14 + 9 1 5 + 1 6 -13 + -6 4 2 + -5 -10 6 + 15 11 -5 + 3 3 -5 + -14 10 -17 + -5 -7 2 + -20 3 14 + -12 12 -29 + -19 13 28 + -11 -11 19 + 2 -12 -12 + -10 22 21 + -13 -2 -16 + -4 10 -11 + 14 -12 24 + -3 -5 -4 + -8 8 5 + -8 1 6 + -7 24 -10 + 24 16 17 + -16 12 4 + 15 1 -11 + -6 -3 4 + 5 1 -16 + -11 7 2 + 16 -6 0 + -7 -2 15 + 8 -1 -2 + 3 0 6 + -18 -2 -3 + -5 -4 -4 + -13 -19 4 + 20 -19 13 + -7 0 -8 + -9 18 -14 + -13 -15 11 + -12 4 1 + 3 -19 -8 + -2 18 -9 + -9 -6 14 + -9 -17 8 + 1 -10 -1 + 12 20 15 + 14 -5 -6 + 22 -22 -4 + -18 14 14 + 7 -4 -19 + -3 15 -20 + 29 -10 8 + -8 3 -11 + 8 -8 16 + 4 8 -3 + -16 0 -10 + -3 -31 -1 + -2 -10 27 + 19 -13 -22 + -14 6 -7 + 3 17 14 + -10 21 13 + 15 9 10 + 9 8 3 + -3 -20 6 + -11 -11 -6 + -7 -9 -18 + -19 8 9 + 4 7 10 + -8 -22 -7 + 0 -2 23 + 6 -12 -13 + -3 27 16 + -2 10 -2 + 22 16 -13 + -23 -18 -14 + -5 -9 7 + -5 -7 6 + 7 5 -4 + -16 12 -6 + 18 0 4 + 4 -14 0 + 17 0 -19 + 0 5 11 + 3 2 -18 + 8 13 -14 + -19 -3 5 + -5 4 -9 + 14 -8 17 + 6 10 17 + 6 -13 -11 + 19 7 9 + 12 -9 -5 + 9 12 26 + -4 1 -11 + -4 -6 3 + 29 20 10 + -2 -3 17 + 2 -7 -16 + -14 6 -11 + 6 7 -6 + -12 -1 -8 + -16 -10 -11 + -17 -14 15 + -11 -6 9 + -9 22 13 + -8 -5 17 + 4 1 5 + -8 11 -3 + 12 7 -20 + -2 -18 -8 + -19 1 -10 + -10 -10 7 + 1 8 -1 + 10 7 8 + 4 -3 -8 + 7 -14 -4 + 3 3 -5 + -15 -10 -5 + 1 -14 -6 + 24 -16 10 + 7 -11 -13 + -7 -8 -7 + 11 -17 -5 + -15 -12 -13 + 6 9 -13 + -11 -14 11 + 12 -10 17 + -8 13 -8 + -12 -10 -23 + 10 3 -14 + -14 -16 9 + 17 1 -6 + 0 10 -2 + -12 -8 -13 + 1 2 15 + -8 -10 1 + 4 -13 -9 + 17 1 6 + 13 -5 6 + 10 8 -4 + 7 7 -19 + 9 -12 -20 + -1 -17 -23 + -3 11 2 + 9 1 5 + 12 -2 13 + -13 -7 -9 + -16 -5 -23 + -8 -5 -8 + -7 10 2 + -11 26 1 + -1 2 13 + -19 -3 12 + 1 2 -1 + -2 8 19 + 18 5 -8 + -16 17 5 + -16 6 12 + 4 -5 -5 + 1 -27 6 + 2 8 10 + -3 2 9 + -13 -16 3 + -5 13 -6 + -3 27 -2 + -8 -19 12 + 0 15 19 + 3 -9 2 + -11 15 -12 + -20 -3 16 + -7 -14 19 + -1 17 4 + -15 13 -9 + 6 -20 -7 + 3 -8 10 + -7 -10 -20 + 8 -4 13 + 4 0 -14 + -3 8 5 + 11 -7 4 + -5 21 12 + 7 9 -10 + -7 -3 6 + 5 -9 10 + 14 -9 -1 + 11 6 14 + 6 -8 -9 + 26 -1 -25 + -8 -6 -10 + -4 18 5 + 17 5 -17 + -16 -7 17 + 23 2 15 + -11 24 -3 + -6 8 1 + -7 -1 -14 + 17 2 1 + -9 -23 -1 + 1 -17 -8 + -1 0 -1 + 0 31 9 + -3 -8 4 + -14 -20 8 + 21 4 24 + -24 -21 -19 + -6 6 13 + 15 2 -12 + -10 3 -4 + -7 -14 -3 + -16 -8 -3 diff --git a/example/testvectors/wcdma/block24_soft_dec.bin b/example/testvectors/wcdma/block24_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..ac4bbcf6b0feeeb0da927eeee272822744af2c3b GIT binary patch literal 2460 zcmeHFTW;Gh5bWJ@gMRcQ7bs9P0fI=09+n0p>S5V#>jFW(;{f>#ik_ecD0-*PtQ_SKrRE@I^yOE*eOPHs~8PqJCN(Ras4%RE{MMTX};Os+m$^zw9E7PK;~WnVsmqI{d1T#aUtQOJ)}~XFe_M zxA(tzozn5g?}vvV2cl%b@efzHTB6gOkSuHy@>!l(-2@FajnaETPwjwts!}DZTAbh ivL5rQ*H`?+=MSgXi+Af-E3j5zt-xA=wF3XK0)GKdEt`n| literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block24_soft_dec.dat b/example/testvectors/wcdma/block24_soft_dec.dat new file mode 100644 index 0000000..638fd49 --- /dev/null +++ b/example/testvectors/wcdma/block24_soft_dec.dat @@ -0,0 +1,820 @@ + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 118 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 125 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -112 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 118 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 117 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -124 0 0 + 124 0 0 + -116 0 0 + -112 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + -112 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + 127 0 0 + 123 0 0 + -96 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + -79 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -111 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 121 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 108 0 0 + -106 0 0 + 116 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + 117 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -121 0 0 + 118 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 109 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -113 0 0 + 82 0 0 + -65 0 0 + -127 0 0 + 110 0 0 + -125 0 0 + -125 0 0 + -112 0 0 + -81 0 0 + -53 0 0 + -108 0 0 + -108 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + -125 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 123 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 117 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -116 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -91 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 90 0 0 + 127 0 0 + 116 0 0 + -115 0 0 + 113 0 0 + -127 0 0 + 113 0 0 + -51 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -91 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -95 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -95 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + 117 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + 126 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + 122 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -116 0 0 + -122 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 110 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 103 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 126 0 0 + 109 0 0 + -127 0 0 + 106 0 0 + -127 0 0 + -94 0 0 + 86 0 0 + -95 0 0 + -83 0 0 + 67 0 0 diff --git a/example/testvectors/wcdma/block24_status.bin b/example/testvectors/wcdma/block24_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..ddf61c79b914f36838b71f735863f60d2b5eaf4f GIT binary patch literal 12 Tcmeya$G~B|gUO+pL7V{q7)S#B literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block24_status.dat b/example/testvectors/wcdma/block24_status.dat new file mode 100644 index 0000000..e2c5014 --- /dev/null +++ b/example/testvectors/wcdma/block24_status.dat @@ -0,0 +1,3 @@ +08002ef7 +4002b83b +00170083 diff --git a/example/testvectors/wcdma/block24_tail_llrs.dat b/example/testvectors/wcdma/block24_tail_llrs.dat new file mode 100644 index 0000000..d3fd281 --- /dev/null +++ b/example/testvectors/wcdma/block24_tail_llrs.dat @@ -0,0 +1,6 @@ + 6 -9 + 3 15 + 16 11 + 3 -11 + 9 -10 + 0 -4 diff --git a/example/testvectors/wcdma/block25_cfgreg.dat b/example/testvectors/wcdma/block25_cfgreg.dat new file mode 100644 index 0000000..4f7a9cb --- /dev/null +++ b/example/testvectors/wcdma/block25_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +106 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block25_hard_dec.bin b/example/testvectors/wcdma/block25_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..b47f2fe150fe9a450c02864373c7e6136663971e GIT binary patch literal 16 XcmbQt|Mt7Frity5JieQJ%nS?wIqC&| literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block25_hard_dec.dat b/example/testvectors/wcdma/block25_hard_dec.dat new file mode 100644 index 0000000..4796595 --- /dev/null +++ b/example/testvectors/wcdma/block25_hard_dec.dat @@ -0,0 +1,4 @@ +f7ed0f93 +3d342933 +d90e6ec4 +0000030e diff --git a/example/testvectors/wcdma/block25_llrs.bin b/example/testvectors/wcdma/block25_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..36d6c9af74468c464e828c50626e92af344c900b GIT binary patch literal 330 zcmV~$ZFhno7ywY-eLz67va>JS|Nmb*oh@r=5fBROUVL-}%F6w^qxiNK`Ylg(RKp0} zd&tHz<(C)NwENo*0N$XJ~(npsDPQyM`HGkLf%hK^5Mye<{yG>5=@-q^-Tl&gW1jy`JnOgFpU zV?vXYjC;fug08zS4KfJZ77h<8Np3K#KNcaGYc8bOf(lT{vNWW%QVZw!y-!VHh51El zBla_<`)*9Wrdv;yrjB_6@Jwe)1>QE~u9Z@?DGVB_XmifaoZ3SgK6p!8{x*>z^bf_Q Bjcot` literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block25_llrs.dat b/example/testvectors/wcdma/block25_llrs.dat new file mode 100644 index 0000000..724e8aa --- /dev/null +++ b/example/testvectors/wcdma/block25_llrs.dat @@ -0,0 +1,110 @@ + 1 7 9 + 21 -9 -3 + -12 -6 -1 + 2 4 -3 + 8 0 -2 + -2 15 2 + -5 -6 7 + 5 6 -4 + -10 10 -9 + -5 10 10 + 17 14 -9 + 3 13 8 + 1 -16 -1 + -19 12 2 + -5 -8 -15 + -2 8 -15 + 3 -8 7 + -28 -21 2 + 9 -6 11 + 23 22 14 + 14 8 9 + 22 10 12 + 10 18 6 + 18 -16 -12 + 22 2 -12 + 8 -14 5 + 15 -12 -17 + -7 22 16 + 18 -8 -6 + -3 -9 7 + 13 15 -2 + 14 5 4 + 4 -21 -2 + 10 5 4 + -10 6 -10 + -15 -11 -15 + -11 -22 9 + 5 -1 12 + 12 8 13 + 3 -16 6 + 15 -6 19 + -18 -16 -16 + -4 -9 1 + 20 -9 3 + 8 5 19 + 8 16 15 + -10 5 22 + -12 7 -6 + -5 14 -10 + 5 7 -1 + 13 -12 -6 + -9 9 -19 + 9 0 16 + 6 -3 3 + -6 -1 10 + -14 13 12 + 3 8 3 + -23 -6 -12 + 8 -6 4 + 16 21 -10 + -1 -10 2 + 20 -8 8 + -1 12 8 + -8 9 -13 + -21 -13 -6 + 14 -6 -26 + 4 -19 3 + -15 14 3 + 1 -5 6 + -11 -17 1 + 1 -8 -4 + 2 -6 -4 + -1 0 0 + 15 -21 -12 + -3 -12 -20 + 16 9 -1 + -16 4 3 + 10 5 3 + -8 -10 10 + -26 0 -4 + -4 4 10 + 2 -15 1 + 18 2 8 + 30 0 12 + -21 -20 8 + -8 17 -1 + 1 31 6 + -22 12 11 + 10 8 -3 + 3 9 -3 + -8 -9 -3 + 10 6 -12 + 3 14 13 + 5 11 23 + 9 -2 11 + -1 5 20 + -9 8 -6 + 13 -14 18 + -10 3 25 + 10 9 5 + -4 2 11 + -19 -3 3 + -10 7 11 + -23 1 5 + 3 8 -7 + 19 -5 13 + -12 -24 -8 + -2 14 4 + -2 0 0 + -6 0 0 diff --git a/example/testvectors/wcdma/block25_soft_dec.bin b/example/testvectors/wcdma/block25_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..eaf37dc07cc06e285b975ecec6302328f3e075d0 GIT binary patch literal 318 zcmdsvOA3H65JNqv8}}}h7DP*Zg!;pc1@Q>p)9E!FCLt4&0WG%P*N`M3$S?x(!5GPn p&&nlE)7neow%inBxwBI;M+8G_4@$$FO&teOb35c$x#_DP&IiZZG}8b8 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block25_soft_dec.dat b/example/testvectors/wcdma/block25_soft_dec.dat new file mode 100644 index 0000000..73a9544 --- /dev/null +++ b/example/testvectors/wcdma/block25_soft_dec.dat @@ -0,0 +1,106 @@ + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 116 0 0 + 116 0 0 + 92 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -112 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + 121 0 0 + -107 0 0 + -123 0 0 + 127 0 0 + -113 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -109 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 125 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + 115 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 108 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 126 0 0 + 108 0 0 + 119 0 0 + -112 0 0 + -91 0 0 + -127 0 0 + -112 0 0 + 97 0 0 + 113 0 0 diff --git a/example/testvectors/wcdma/block25_status.bin b/example/testvectors/wcdma/block25_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..84426577e74043f8958d1645318ded8dda3eb332 GIT binary patch literal 12 TcmY#mW8l~k#o!>yz`y_i3@8Dd literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block25_status.dat b/example/testvectors/wcdma/block25_status.dat new file mode 100644 index 0000000..5044faf --- /dev/null +++ b/example/testvectors/wcdma/block25_status.dat @@ -0,0 +1,3 @@ +08000626 +40005ab8 +00000015 diff --git a/example/testvectors/wcdma/block25_tail_llrs.dat b/example/testvectors/wcdma/block25_tail_llrs.dat new file mode 100644 index 0000000..ea17491 --- /dev/null +++ b/example/testvectors/wcdma/block25_tail_llrs.dat @@ -0,0 +1,6 @@ + -12 -2 + -24 -8 + -2 -6 + 14 4 + 5 -1 + 5 8 diff --git a/example/testvectors/wcdma/block26_cfgreg.dat b/example/testvectors/wcdma/block26_cfgreg.dat new file mode 100644 index 0000000..ac4091d --- /dev/null +++ b/example/testvectors/wcdma/block26_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +107 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block26_hard_dec.bin b/example/testvectors/wcdma/block26_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..be041d94559d38991b013bbbe4b143f5b13a485f GIT binary patch literal 16 XcmZn=P-NnfFii7k5K`r0WncgR85{zA literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block26_hard_dec.dat b/example/testvectors/wcdma/block26_hard_dec.dat new file mode 100644 index 0000000..f5c6a07 --- /dev/null +++ b/example/testvectors/wcdma/block26_hard_dec.dat @@ -0,0 +1,4 @@ +02211080 +6631180c +25128048 +0000050a diff --git a/example/testvectors/wcdma/block26_llrs.bin b/example/testvectors/wcdma/block26_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..0fcabcd3eb393edc78790c7f9a43c48dab1ffe51 GIT binary patch literal 327 zcmWO0TT+8C6adgXXc7XXbVTfjGwy$1+Ry+nn}LGkBUL&^(;uq%6h`KTFYQfp4D)QCq}!Nd=hKG>7gc zv-UrfR!0>ARHy)xQtc><7$+DbkcAM-VkmBM%-v_PNW{789Y45DXg_yC$`cc9O{G>_ z5wJ`)RnGUrO8Q^?(Z)KAsyUqaZ#^}~af%MrUC{^OImjT+WW{f!QK=oRb#o8=VO8bV z`n_XxSzl-wr7xfnm94QABO)5`#xUIGrOLB0kl}J|Me*Cdcedl(AW7{Sv$?dZg8l%) CSFAw* literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block26_llrs.dat b/example/testvectors/wcdma/block26_llrs.dat new file mode 100644 index 0000000..984136e --- /dev/null +++ b/example/testvectors/wcdma/block26_llrs.dat @@ -0,0 +1,109 @@ + -15 -9 9 + 5 -9 13 + -12 -6 -1 + 2 4 -19 + -8 0 -2 + -2 -1 2 + -5 -6 7 + 5 6 -4 + -26 10 -9 + -21 10 10 + 1 14 -9 + -13 -3 8 + 17 0 15 + -19 -4 2 + -5 8 -15 + -2 -8 1 + 3 -8 23 + -28 -21 2 + -7 -6 11 + 7 22 14 + 14 -8 -7 + 22 -6 12 + -6 2 22 + 2 -16 -12 + 6 2 -12 + 8 2 -11 + -1 -12 -17 + -7 6 16 + 2 -8 -6 + -19 -9 7 + -3 -1 -18 + -2 -11 -12 + -12 -21 14 + -6 -11 4 + 6 6 -10 + 1 -11 -15 + -27 -22 9 + -11 -17 28 + 12 8 13 + 3 -16 6 + -1 10 3 + -18 0 -16 + -4 7 -15 + 20 7 19 + 24 -11 3 + -8 16 -1 + -10 -11 22 + -12 7 10 + 11 -2 -10 + 5 7 -1 + -3 -12 -6 + -9 -7 -19 + 9 0 0 + 6 -3 3 + -6 15 10 + -14 13 12 + -13 8 -13 + -7 10 -12 + 8 10 4 + 0 5 6 + -17 6 2 + 20 8 8 + 15 12 -8 + -8 9 -13 + -21 3 -6 + 14 10 -10 + -12 -19 -13 + 1 14 -13 + 1 -5 6 + -11 -1 1 + 1 8 12 + -14 -6 -4 + -1 -16 -16 + -1 -21 4 + -19 -12 -4 + 0 -7 -17 + -16 4 -13 + -6 -11 -13 + -24 -10 -6 + -10 16 -4 + -4 20 -6 + 2 -15 17 + 2 2 24 + 14 16 12 + -5 -20 8 + -8 1 -1 + 1 31 -10 + -22 12 -5 + 10 -8 -3 + 3 9 -3 + 8 -9 13 + -6 22 -12 + -13 14 13 + 21 11 7 + -7 -2 -5 + -17 -11 20 + -9 8 10 + 13 -14 2 + -26 -13 9 + 10 -7 -11 + -4 -14 11 + -19 -19 -13 + -10 7 -5 + -23 1 -11 + 3 -8 -7 + 3 -21 -3 + 4 -8 14 + -2 -11 -1 + 4 0 0 diff --git a/example/testvectors/wcdma/block26_soft_dec.bin b/example/testvectors/wcdma/block26_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..76a152f58204c9923ba2e28dacf383d80462bf23 GIT binary patch literal 321 zcmdsvK?;B{5Ci?IUl7Gpn7XAFiqr>q@}q7oe!?7o gP--N@qVPr)^(Dc}6SBJEB>JpB)ak)|kHatZ0PC4HQ2+n{ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block26_soft_dec.dat b/example/testvectors/wcdma/block26_soft_dec.dat new file mode 100644 index 0000000..aa7c5a5 --- /dev/null +++ b/example/testvectors/wcdma/block26_soft_dec.dat @@ -0,0 +1,107 @@ + -127 0 0 + -121 0 0 + -127 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -120 0 0 + 127 0 0 + -99 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -114 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -112 0 0 + 121 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -111 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + -93 0 0 + 99 0 0 diff --git a/example/testvectors/wcdma/block26_status.bin b/example/testvectors/wcdma/block26_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..b043d72cca2d90042eb4c63bd853abeb9a282717 GIT binary patch literal 12 TcmZ=_W8lz>WpEH>U}69O2|)of literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block26_status.dat b/example/testvectors/wcdma/block26_status.dat new file mode 100644 index 0000000..ec215a0 --- /dev/null +++ b/example/testvectors/wcdma/block26_status.dat @@ -0,0 +1,3 @@ +08000642 +40005d2e +00020015 diff --git a/example/testvectors/wcdma/block26_tail_llrs.dat b/example/testvectors/wcdma/block26_tail_llrs.dat new file mode 100644 index 0000000..d37579d --- /dev/null +++ b/example/testvectors/wcdma/block26_tail_llrs.dat @@ -0,0 +1,6 @@ + -2 4 + -11 -1 + -11 -8 + 14 -17 + 8 -5 + 10 -9 diff --git a/example/testvectors/wcdma/block27_cfgreg.dat b/example/testvectors/wcdma/block27_cfgreg.dat new file mode 100644 index 0000000..ca10583 --- /dev/null +++ b/example/testvectors/wcdma/block27_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +2000 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block27_hard_dec.bin b/example/testvectors/wcdma/block27_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..1793735ef244d6c8655c18d07b0fe975a585fd3e GIT binary patch literal 252 zcmVoz3LD2%GXi4tikWlUo@Bg#<651%A-1JyR}#gIDzGuRuLBNP_r~;iw>WE`!P~F zP{3U&mkY?{C39t7EK8ocT%|8NYlcS$v#abgLv zlt2nd2_=CLmI6>gL9L|~K!gf0XhFEK!5ZERb-+dPO8@{~ CyLvwW literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block27_hard_dec.dat b/example/testvectors/wcdma/block27_hard_dec.dat new file mode 100644 index 0000000..bff4986 --- /dev/null +++ b/example/testvectors/wcdma/block27_hard_dec.dat @@ -0,0 +1,63 @@ +0bed1093 +faf5d93c +d912913b +3567ed02 +ad3e6669 +4a7c2bca +ad3017e5 +d6f82ccb +64b027f6 +42ffcad3 +dd48741a +c981d11b +ec5be6ef +3c059c9c +a77ef2d8 +cb592282 +fd3281f5 +73556d8a +6e3467e3 +fabea2e2 +0352b5ab +9841a410 +ed1e41d4 +41913b59 +57c5ced9 +0feabdf0 +51d7caf4 +efc1acba +97345fd0 +64b1c6fe +3aa3ca24 +58b5bb6a +e581380b +16115698 +34b350ee +9f0e8b65 +5231fb7f +5dc0503a +c80b9729 +657325e5 +9e4b2c5e +2fa55cba +ad7b6c3b +0cb8085b +c9966ee4 +02dfed6e +d6a56489 +33740827 +354977d4 +0962719e +0a4094b1 +81250948 +50029610 +a5ad4141 +0a844015 +b8416831 +de1ac1b1 +51c0750b +0145a73b +7d94a7c5 +f0bb3c01 +c4b39f72 +00004b01 diff --git a/example/testvectors/wcdma/block27_llrs.bin b/example/testvectors/wcdma/block27_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..11f3a1fae113f56c5802fd6f4947457e33154818 GIT binary patch literal 6000 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 I@?Q!4KX!vMr~m)} literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block27_llrs.dat b/example/testvectors/wcdma/block27_llrs.dat new file mode 100644 index 0000000..51c057b --- /dev/null +++ b/example/testvectors/wcdma/block27_llrs.dat @@ -0,0 +1,2000 @@ + 1 7 -7 + 21 -9 13 + -12 -6 15 + 2 4 -19 + 8 0 -2 + -2 15 2 + -5 -6 -9 + 5 6 12 + -26 -6 7 + -21 10 10 + 1 -2 7 + -13 13 8 + 17 -16 15 + -19 -4 2 + -5 8 -15 + -2 8 -15 + 3 -8 7 + -28 -5 2 + 9 -6 27 + 23 6 -2 + 14 -8 -7 + 22 -6 12 + 10 18 22 + 18 -16 -12 + 22 -14 4 + 8 -14 5 + -1 -12 -1 + 9 6 16 + 2 -8 -22 + -19 -9 7 + -3 15 -18 + -2 -11 -12 + -12 -5 -2 + -6 5 4 + 6 -10 -26 + 1 -11 -15 + -11 -6 9 + 5 -1 12 + 12 8 13 + 3 0 -10 + 15 -6 3 + -18 0 0 + -4 7 1 + 20 7 19 + 24 -11 19 + -8 16 15 + 6 5 6 + 4 7 -6 + 11 -2 6 + 5 7 -1 + 13 -12 -6 + -9 9 -19 + 9 0 0 + 6 -3 -13 + 10 15 -6 + 2 13 12 + -13 24 -13 + -7 -6 -12 + -8 -6 4 + 16 5 -10 + -1 6 2 + 20 -8 -8 + 15 -4 8 + 8 -7 3 + -5 3 -6 + 30 10 -26 + -12 -3 -13 + 1 -2 -13 + 17 11 -10 + 5 -1 17 + -15 8 -4 + -14 10 -20 + 15 -16 0 + -1 -5 4 + -19 4 -20 + 0 -7 -17 + 0 20 3 + -6 -11 3 + -24 6 10 + -10 16 12 + -4 4 -6 + 2 1 17 + 2 18 8 + 14 16 12 + -5 -20 -8 + -8 17 -1 + 1 31 6 + -22 -4 -5 + 10 8 -3 + 3 -7 13 + -8 7 13 + 10 22 -12 + 3 14 -3 + 5 11 7 + 9 -18 -5 + -1 5 4 + -9 -8 10 + 13 2 2 + -26 3 25 + -6 9 -11 + -4 2 11 + -19 -19 3 + -10 -9 11 + -23 17 5 + 3 8 -7 + 3 -21 13 + 4 -8 -2 + 14 -11 -11 + -2 -8 10 + 4 -1 8 + -1 11 7 + 8 12 -8 + 14 12 4 + 23 2 2 + 5 6 -22 + -9 -17 19 + -14 11 -19 + 23 3 -2 + -9 15 -4 + -18 7 6 + 7 -2 -14 + -10 3 27 + 10 4 3 + -12 -3 -3 + 3 4 -11 + 21 6 -6 + -6 -15 -9 + -4 8 -27 + 12 25 -3 + 1 -5 -13 + -14 -30 -21 + 6 14 -1 + -8 12 6 + 13 -17 -13 + 10 24 -8 + -7 -5 -1 + -15 -24 8 + 8 1 -9 + -7 4 23 + -18 -14 8 + -6 -14 16 + 18 -10 5 + -11 -4 -13 + -1 23 -9 + -22 5 1 + 6 -3 11 + -2 -13 -10 + 21 -11 3 + 13 -9 -9 + -2 9 -19 + -3 -12 9 + -25 -3 17 + 14 0 1 + -14 22 5 + -3 -14 -13 + 14 14 8 + -1 -13 18 + 9 -12 7 + -15 2 24 + 0 -2 -4 + 7 -6 -9 + -4 6 4 + -10 -15 1 + 9 6 -9 + -2 -3 2 + 7 4 -18 + 13 2 -7 + 8 17 10 + -2 -8 -2 + 9 29 13 + -5 28 -9 + 11 1 5 + -1 6 -2 + 21 8 -18 + -8 15 7 + -11 3 7 + 6 25 5 + 0 -2 -7 + 8 23 -10 + 1 4 2 + 19 16 -21 + 7 20 1 + 16 14 -4 + -2 -6 -12 + -6 13 -2 + -4 5 4 + -17 16 -6 + 30 0 -8 + -10 14 -20 + -2 9 -4 + 2 -17 3 + -21 7 -15 + 4 -22 5 + 12 0 6 + 18 -14 10 + -6 18 -11 + -7 24 0 + 15 8 -5 + 10 6 13 + -6 -11 -7 + 5 2 0 + 6 17 -23 + 15 29 -9 + 4 6 16 + 3 -1 9 + -7 0 1 + -8 1 6 + -21 1 8 + -9 2 1 + 3 -15 -12 + -6 7 -5 + 4 -1 10 + -4 -1 5 + 12 17 -4 + -6 1 16 + -10 0 5 + 16 1 -9 + 8 8 -10 + 21 -11 -1 + -6 -21 7 + -4 -13 -11 + 1 -12 -11 + -6 -9 2 + 20 1 -4 + 3 12 10 + -1 30 6 + -26 -11 -23 + 1 -3 1 + -25 8 7 + -23 -15 -11 + 13 17 10 + 10 -6 3 + 0 -5 -3 + -11 14 -21 + 4 7 -20 + 1 9 20 + -11 2 -9 + 14 -8 -1 + -19 -9 -13 + 9 -3 -11 + -6 11 6 + 1 14 4 + 4 -16 -7 + 7 14 13 + 21 3 -10 + 1 7 -13 + -2 4 -11 + 16 12 16 + -5 -25 -4 + 16 -3 21 + -3 -9 2 + 2 15 -18 + 7 -4 -7 + 2 5 -9 + 8 -10 1 + 29 2 -19 + -1 -6 -23 + -7 -3 -7 + 27 15 -15 + 6 10 -5 + 12 6 -14 + 11 6 9 + 15 -5 11 + 11 7 -13 + 13 -20 18 + 18 -7 -2 + 10 0 -10 + -8 -4 14 + -17 12 3 + 5 -14 -8 + -11 -4 -9 + -4 10 1 + -6 15 9 + -15 -3 15 + -14 -12 8 + 9 -7 0 + 2 -2 -22 + 8 -7 15 + -12 23 -10 + 0 -1 1 + -30 2 5 + -8 7 10 + -2 7 9 + -5 18 16 + 0 -11 10 + 0 -13 -24 + 4 11 0 + 0 1 -13 + 22 0 10 + 5 10 -4 + -16 11 11 + 4 2 1 + -7 -9 2 + -14 11 -13 + 6 -2 -14 + -7 -12 -12 + -15 -14 12 + 25 -10 14 + -9 -27 17 + 5 5 3 + -1 -7 -4 + 2 1 -1 + 16 5 -3 + -3 8 5 + 1 -14 -15 + 5 1 1 + 4 0 4 + 5 -6 -10 + 0 -11 4 + 0 14 13 + 10 10 3 + 5 -9 9 + -11 -10 -1 + 14 2 -14 + -8 -11 -2 + -4 0 -24 + 1 5 9 + -10 20 12 + 0 -3 2 + -7 -15 11 + -15 6 5 + -7 -17 3 + -6 -10 18 + 4 -18 -9 + 4 13 2 + -18 8 15 + -5 -17 10 + -10 5 -6 + -4 15 -22 + -26 19 -1 + 16 10 15 + -10 -6 -10 + 12 14 -16 + 6 19 7 + 8 -5 17 + -17 4 6 + -22 0 -3 + -9 7 -17 + 8 -2 -2 + 2 -5 16 + -16 -22 9 + -13 10 19 + 0 5 -24 + -9 12 6 + 13 2 -6 + -6 17 -5 + 5 18 11 + 7 -5 19 + 13 7 3 + -24 -15 10 + -4 -6 -5 + 0 -3 -20 + -7 13 4 + 4 10 9 + -15 -16 -5 + 3 -7 -18 + 1 -6 -4 + -8 9 -17 + -3 1 7 + 6 -15 -3 + 16 6 -25 + -24 -14 11 + -4 14 -4 + 3 -4 -12 + 22 -14 4 + -14 3 -7 + -2 17 -11 + -5 11 -9 + 18 19 9 + 0 -18 -10 + -10 4 2 + -6 -2 -5 + -7 16 -5 + -10 13 8 + 6 20 12 + 8 4 -15 + 25 -23 -12 + 0 7 23 + -12 -27 -15 + 3 16 -8 + -9 -11 17 + -15 4 3 + 3 12 -15 + -11 25 11 + 4 -9 -6 + -2 12 -15 + 13 -26 -8 + 11 -14 7 + -12 0 2 + 4 -18 18 + -2 -17 -7 + 11 -1 -9 + -17 -19 -3 + 1 11 2 + 7 -20 -4 + -16 -7 1 + -6 -8 -13 + 12 -19 2 + 10 -8 -9 + 15 -3 -7 + -6 3 11 + 12 10 -12 + -8 14 -22 + 7 5 8 + 16 11 -8 + 12 0 -2 + 11 4 -7 + -7 7 2 + 4 10 13 + -8 3 -4 + 3 1 -7 + -6 -10 15 + -26 17 -5 + 14 20 13 + 16 -14 14 + 3 -6 3 + 7 11 0 + -2 -6 -18 + 8 12 -3 + 10 -13 15 + 17 -3 -2 + -14 15 -18 + -7 0 4 + 6 16 13 + -26 17 -9 + -5 -15 14 + -9 0 -9 + 3 12 -16 + 15 -8 8 + -10 2 -4 + -18 -20 -10 + 1 7 -9 + -2 10 -8 + -7 -16 -8 + 25 -11 -5 + -10 10 6 + -11 -8 9 + -14 -12 -10 + -5 4 -15 + -1 2 -7 + -5 13 1 + -16 4 5 + 3 -12 7 + -10 -11 0 + 17 -10 22 + -8 26 3 + -9 22 6 + -1 19 -9 + -8 10 -5 + 1 -21 -14 + -8 1 -2 + -6 -17 0 + 18 -5 15 + 13 2 2 + -5 -13 0 + 4 2 -16 + 0 -12 -12 + 7 15 -8 + -10 -14 16 + -10 -7 -4 + 12 -12 -9 + -3 -15 -8 + 13 -3 -2 + 4 -1 -9 + -3 -3 -14 + 13 -2 15 + 9 9 -6 + 15 16 -2 + 15 -13 3 + 13 -10 -7 + 11 -8 -9 + -6 -10 14 + 12 -8 15 + 2 7 8 + 8 4 6 + -4 13 -6 + -3 2 -14 + 15 -5 3 + -10 8 10 + 7 -10 -2 + 2 3 2 + -6 10 16 + -14 13 -7 + -6 -5 -5 + 0 15 -4 + -5 21 6 + -1 10 4 + 9 7 -16 + -21 20 21 + 3 15 -5 + -14 -9 5 + -15 -2 19 + 5 -12 -3 + 4 15 -2 + 1 -4 4 + -19 -5 6 + 4 -7 6 + 2 6 18 + -7 6 -21 + 19 11 2 + 3 -13 -7 + -12 17 14 + -1 16 -26 + 7 -6 -15 + 4 13 9 + 18 17 16 + -1 13 -11 + 12 -3 2 + -13 -3 -17 + -13 16 10 + -1 -14 3 + 4 0 -1 + 1 13 -6 + -7 0 -6 + -3 0 -4 + -13 -8 2 + 8 -13 -3 + -3 15 12 + -1 -16 12 + 3 -20 -2 + 9 -4 -9 + -12 -18 -11 + -9 -2 14 + -7 -4 -1 + 0 9 -14 + 12 -17 11 + -9 -13 -6 + 16 -27 -21 + -7 4 22 + 11 1 16 + -21 11 3 + -5 -15 -11 + -1 -8 -20 + 9 24 -7 + 1 -3 -9 + -13 -21 8 + 8 8 3 + -16 -2 -1 + 8 18 -28 + 30 18 26 + 4 12 23 + -1 6 1 + 21 14 -2 + 11 -1 14 + -13 -21 12 + 4 -8 7 + -3 -16 -2 + -5 3 -13 + -2 8 -2 + 3 -9 18 + -5 3 -11 + 19 3 -15 + 17 9 -4 + 2 -1 28 + 24 7 -17 + 14 -12 -21 + -12 -3 15 + 15 6 -9 + 18 15 -5 + -1 -24 12 + 11 -1 3 + -19 6 -9 + 14 11 7 + -8 6 6 + 17 11 1 + -13 -12 -3 + 12 16 13 + -3 0 13 + 8 -5 4 + 2 5 -1 + -13 -19 11 + -2 6 10 + -2 -1 8 + 6 -14 2 + 8 24 -6 + -10 11 -2 + -2 -1 -10 + 0 -9 9 + 2 2 0 + -7 3 2 + -13 15 5 + 14 10 -19 + 14 -10 13 + 3 -17 -16 + 19 -18 -8 + 9 14 -8 + 8 10 -2 + -7 10 -18 + -15 5 0 + -1 -7 -21 + 10 -10 9 + -12 0 1 + -3 17 6 + 10 -1 4 + 4 -23 21 + 0 21 -21 + -5 1 0 + 8 -5 8 + -4 -9 -10 + -16 6 -11 + -15 10 0 + 17 -1 -6 + 8 2 -11 + 11 17 3 + -10 -9 16 + 6 -9 1 + 0 -4 20 + 7 -8 -6 + -9 -22 0 + 20 -7 -2 + -7 17 -11 + 1 6 -13 + -22 4 2 + 11 -10 -10 + 15 -5 11 + 19 3 11 + -14 -6 -17 + 11 -7 2 + -20 -13 -2 + -12 -4 -13 + -19 13 28 + 5 5 3 + 2 -12 -12 + 6 22 5 + -13 14 0 + 12 -6 5 + 14 4 24 + 13 11 -4 + 8 -8 5 + 8 1 -10 + -7 24 6 + 24 16 1 + -16 -4 4 + 15 1 -11 + -6 13 -12 + 5 -15 0 + 5 7 2 + 16 10 0 + 9 -2 15 + 24 -1 -2 + 19 -16 6 + -2 -18 -19 + -5 12 -4 + 3 -19 4 + 4 -3 -3 + 9 -16 8 + -9 31 2 + 3 -15 11 + 4 -12 1 + 3 -19 8 + 14 2 -9 + -25 -6 -2 + 7 -1 8 + 1 6 -17 + -4 4 15 + 14 -5 10 + 6 -6 12 + -2 14 -2 + -9 12 -3 + -3 -1 -4 + 29 -10 -8 + -8 -13 -11 + 8 8 0 + 4 -8 13 + 0 -16 6 + 13 -31 -1 + -2 6 11 + 3 3 -22 + -14 -10 -7 + -13 1 14 + -10 21 13 + -1 -7 10 + -7 8 19 + -19 -4 -10 + -11 5 -6 + -7 -9 -18 + -3 8 -7 + -12 -9 -6 + -8 -6 9 + -16 -18 23 + -10 4 -13 + -19 27 16 + 14 -6 -2 + 6 16 -13 + -23 -2 2 + 11 7 7 + -5 9 6 + 7 5 -20 + 0 12 -6 + 2 16 4 + 4 2 0 + 1 16 -3 + -16 -11 -5 + 3 -14 -18 + 8 -3 2 + -19 13 5 + -21 -12 7 + -2 -8 17 + -10 10 1 + 6 3 -11 + 19 23 9 + -4 7 11 + -7 12 10 + -4 -15 5 + -20 10 3 + 13 20 -6 + -2 13 17 + -14 9 -16 + 2 6 -11 + -10 7 10 + 4 -1 8 + 0 -26 -11 + -1 2 15 + -11 10 9 + -9 6 -3 + -8 11 1 + -12 17 5 + -8 27 -3 + 12 7 -20 + -2 -2 8 + -19 -15 6 + 6 -10 7 + 17 8 -1 + 26 -9 -8 + 20 -19 8 + 7 2 12 + -13 3 11 + -15 -10 11 + 1 2 10 + 8 -16 10 + 7 -11 -13 + 9 -8 -7 + -5 -1 -5 + 1 -12 -13 + 6 -7 3 + 5 2 27 + 12 6 17 + -8 13 -8 + -12 6 -23 + 10 -13 2 + 2 -16 9 + 1 1 -6 + 16 -6 -2 + -12 -8 3 + 1 2 -1 + 8 6 -15 + -12 -13 -9 + 17 1 6 + 13 -5 6 + 10 -8 -4 + -9 -9 -3 + -7 4 -20 + 15 -17 -7 + -19 -5 2 + -7 1 5 + -4 -2 13 + 3 -7 -9 + -16 -5 -7 + -8 11 8 + 9 10 2 + 5 10 1 + -1 2 -3 + -19 -3 12 + 1 2 -1 + -2 8 3 + 2 -11 8 + -16 1 -11 + -16 -10 28 + 4 11 11 + 1 -27 6 + -14 24 10 + 13 18 9 + 3 0 -13 + -5 13 10 + -3 11 -2 + 8 -3 -4 + -16 -1 3 + 3 7 2 + -11 -1 -12 + -4 -3 31 + -7 2 3 + -1 1 4 + 1 -3 -9 + 6 -4 -7 + 3 -8 -6 + -7 6 -4 + 8 12 13 + 4 16 -14 + -3 8 -11 + -5 9 -12 + 11 5 -4 + 7 9 6 + -7 13 6 + 5 -9 10 + 14 7 -1 + -5 6 14 + 6 -8 -9 + 10 -1 -9 + 8 10 -26 + -20 18 -11 + 1 5 -1 + -16 9 1 + 7 2 -1 + -11 8 -3 + -6 -8 1 + 9 -17 -14 + 17 -14 1 + 7 -7 15 + 17 -1 -24 + -1 16 -1 + 0 22 9 + -3 8 20 + 2 -4 -8 + 21 -12 24 + -24 -21 -3 + 10 6 -3 + -1 -14 -12 + 6 3 12 + -7 2 13 + -16 -8 -3 + 6 3 16 + 19 9 -16 + -9 15 27 + 5 -10 12 + 4 2 20 + 5 -5 -9 + -9 -5 -8 + 3 -5 -10 + -15 -13 -5 + -8 8 12 + -14 25 -3 + -2 0 -11 + -10 10 17 + -6 -9 17 + 7 -26 5 + -14 17 -8 + 8 22 -15 + 15 -3 12 + 5 2 15 + 15 -1 -17 + -15 -4 -5 + -9 -1 -10 + 2 -16 1 + 6 9 17 + -5 1 4 + -28 -5 -21 + 10 0 -7 + 22 5 -9 + 4 -22 -6 + -6 1 23 + -5 2 19 + -9 13 7 + 20 7 7 + -16 12 5 + 19 5 6 + 4 16 23 + 8 -10 10 + -6 -20 -5 + -7 1 -4 + -3 8 -30 + 10 1 12 + -3 -6 5 + 9 0 -18 + -3 3 -2 + -15 11 -6 + 24 -5 -11 + -10 9 9 + -1 -8 -8 + 13 -7 4 + 7 20 -3 + -15 -6 -5 + 11 3 5 + 3 5 8 + -9 9 10 + 0 -20 13 + 8 4 0 + -11 3 -17 + 13 -15 9 + -17 -9 4 + 7 -2 -1 + 0 10 13 + -4 -6 11 + -3 15 -3 + -13 -5 12 + -1 -3 16 + -14 17 6 + 24 1 8 + 10 -4 -18 + 16 -7 7 + 8 -13 -6 + 4 -20 -15 + 9 11 -6 + -8 20 -6 + -7 12 10 + 9 14 -16 + 12 3 -12 + -18 -17 20 + -11 -19 17 + 14 11 -6 + -11 -16 -9 + 18 -7 6 + 3 2 4 + 3 4 -18 + 6 2 14 + -9 9 5 + -7 4 -14 + -6 4 -5 + 10 16 4 + 6 5 12 + -14 3 9 + -4 -4 19 + -20 0 -9 + -24 -13 -17 + 2 -15 -5 + 8 -5 -9 + -2 -3 24 + 1 9 4 + 12 -1 2 + -13 12 5 + -5 -16 -2 + 5 5 -3 + 5 7 13 + 15 3 5 + -3 -12 -18 + 4 2 1 + -5 17 3 + -3 -21 -9 + 10 10 -7 + -8 -14 -2 + 4 2 11 + -4 -5 0 + 9 -13 -24 + 11 10 -7 + -2 -4 -3 + 8 4 20 + 11 21 10 + -3 12 1 + 7 22 13 + -1 11 2 + 1 5 -3 + -24 17 9 + -8 -8 -4 + -1 7 -22 + 8 -10 22 + 17 -2 13 + -13 0 -23 + -14 0 0 + -15 -14 -5 + 15 11 -18 + 6 8 11 + -15 5 2 + 12 -6 -9 + -8 -2 5 + -27 -2 -17 + 7 9 3 + -10 10 16 + 2 8 10 + 21 18 0 + 7 -4 -15 + -6 30 17 + -4 9 -2 + -7 9 7 + 7 8 -6 + -12 8 -5 + -15 -9 4 + 15 -10 -9 + -17 4 8 + -5 1 14 + -13 1 8 + 26 26 -18 + -1 -12 14 + 19 14 -23 + -5 5 3 + 10 19 -15 + 14 -18 0 + 5 -5 3 + -7 9 5 + 25 23 -10 + -26 22 -13 + -11 1 7 + -15 4 -1 + 14 -1 -22 + 5 17 1 + 15 17 -8 + -27 -4 -2 + 11 12 -13 + -20 -9 -5 + 18 -8 -6 + 13 14 -21 + 8 6 -17 + -5 0 10 + -6 18 0 + -4 7 -5 + 19 -1 11 + -12 30 -9 + 8 29 5 + -14 -10 2 + -2 11 -8 + 1 -10 -5 + 0 -6 6 + -1 3 -1 + 15 5 -4 + -13 -4 21 + 7 -7 -21 + 5 -25 16 + 24 -16 -12 + -9 -22 1 + 5 -21 7 + 4 9 3 + -10 1 21 + 14 2 -13 + -15 -18 11 + 9 8 3 + 16 -5 19 + 10 -1 14 + -1 3 -8 + -19 -4 -9 + 3 16 4 + -4 -13 -7 + 22 -22 18 + 6 10 -2 + -11 11 -6 + 4 4 7 + -5 -7 -1 + 8 1 -4 + 13 1 -11 + -6 7 -2 + 15 -2 0 + -28 -12 16 + -17 8 -20 + 5 -13 -6 + -10 2 -3 + 0 6 2 + 3 3 -3 + -10 -1 3 + 18 10 25 + -1 0 -26 + 12 3 7 + -19 -23 -7 + -7 5 -10 + 3 1 -10 + -13 10 -15 + -20 -5 11 + -10 6 -20 + 5 -13 -2 + -9 -12 16 + -13 -16 -4 + -2 6 10 + 16 0 -3 + 6 -4 -10 + 22 11 4 + -22 3 12 + -15 8 0 + -6 23 12 + -2 7 8 + 14 -9 12 + -11 -3 2 + -18 -15 -5 + -18 20 1 + -4 -6 10 + 7 8 -2 + -9 -2 -17 + -7 2 -25 + -4 1 1 + -13 7 3 + 11 9 -4 + 4 4 13 + -20 -12 -13 + 18 -6 -12 + 7 -8 20 + 13 3 -27 + -9 16 10 + 20 -21 -6 + -14 1 13 + 6 -5 8 + -14 -6 -8 + 11 9 6 + -14 12 -12 + 7 -7 16 + -11 -17 9 + 2 8 12 + 27 4 3 + 7 10 -10 + -6 7 -10 + 6 3 -17 + -26 -6 -11 + -12 11 7 + -7 2 -4 + -9 5 4 + 10 9 16 + 7 -11 22 + 7 -10 -12 + -9 12 5 + 11 -19 -12 + 1 -10 4 + 5 -3 -8 + -10 -1 4 + -14 0 -24 + 5 -6 1 + -2 -19 -2 + 6 0 -7 + -8 18 14 + 3 -12 13 + -4 -20 -6 + 15 -19 13 + 17 27 -7 + -8 21 -18 + -1 -7 -1 + 9 -7 -14 + 13 1 -6 + -11 4 19 + 5 15 16 + -7 -18 -6 + -16 -20 -8 + 19 8 -6 + 3 -4 -17 + 1 -10 9 + 8 0 17 + -15 -11 -17 + -5 -3 9 + 4 9 10 + -1 10 -13 + 8 -23 10 + -19 -2 13 + -18 4 4 + 10 -23 -10 + 14 22 -3 + -4 -8 3 + 9 11 -7 + 6 -16 -23 + -15 -9 -12 + 16 8 1 + 3 -9 23 + -8 2 -9 + -10 -3 -8 + 3 -12 -14 + 16 -15 -14 + 13 2 -1 + 9 11 15 + 19 9 -23 + -19 -5 7 + -13 -10 -3 + -17 -5 13 + -20 6 3 + 12 -6 15 + 13 2 -17 + 18 9 -14 + 14 -5 15 + 18 -2 8 + -3 24 -2 + -20 -18 7 + 3 -7 17 + 5 7 -4 + -5 -15 6 + -11 -16 1 + 3 0 -4 + 8 4 -13 + 5 -6 -11 + 11 -7 -10 + -1 -3 15 + 10 10 15 + 22 9 -15 + -7 -7 -6 + 10 -5 11 + 9 -1 3 + 4 -28 -17 + -4 5 -4 + 0 30 11 + 22 -9 0 + -16 6 14 + 2 0 17 + -10 4 0 + 9 1 0 + 7 6 -3 + 5 18 8 + -17 11 4 + -13 7 7 + 4 9 21 + -1 16 20 + -15 -4 15 + -4 -4 -24 + -2 -5 2 + 14 10 -6 + -13 -12 -4 + -4 15 4 + 6 2 -1 + -8 -6 13 + 28 -9 4 + 5 -11 2 + 5 7 -6 + -13 13 3 + -17 -4 -7 + -13 7 16 + -7 15 7 + -1 5 0 + -10 -7 8 + 5 17 -1 + -2 -10 1 + 6 -9 -1 + -15 16 4 + -4 -1 -7 + -8 -17 -10 + -16 3 -4 + -9 -5 1 + -9 21 8 + -15 10 1 + 21 -10 -3 + 11 -8 -15 + 23 -5 13 + -19 -2 7 + 13 4 14 + 0 -18 18 + 6 4 4 + -6 9 -10 + 9 -2 -18 + -8 -13 10 + 7 9 -2 + -17 10 1 + -25 9 -6 + 17 -7 13 + 14 12 -19 + 8 -8 -11 + 3 0 -8 + -2 -1 -3 + 11 14 -4 + 7 -10 30 + -5 -7 -7 + -6 11 -13 + 16 -8 -12 + -19 17 29 + -8 -4 -4 + 5 20 -6 + 14 -2 -15 + 19 -6 2 + 0 7 5 + -7 -2 -19 + -11 18 17 + -12 11 6 + -1 0 14 + -19 -7 -21 + 2 10 -17 + -12 3 18 + -12 16 -1 + 14 -16 -9 + 2 -5 -6 + -12 15 8 + 16 -6 14 + 5 16 -21 + 2 10 13 + -4 20 -3 + 24 -23 -20 + -7 -1 10 + -6 3 7 + -10 -24 6 + 9 12 -14 + -5 8 14 + -5 -3 -12 + -19 5 14 + 11 5 -5 + -16 -11 25 + -19 13 -6 + -4 8 4 + -7 -13 -6 + -4 -17 6 + 2 2 -9 + 9 -5 3 + -8 1 -3 + -11 -8 8 + 4 -10 5 + -3 -10 0 + 6 -10 20 + -25 18 0 + 31 -7 16 + -19 5 0 + -11 11 -15 + -5 -7 -10 + -13 10 -13 + 3 -2 4 + 5 -5 7 + -5 -1 18 + -3 11 20 + 14 -8 4 + 3 -17 0 + 4 11 7 + 19 8 10 + -13 8 10 + 16 -9 11 + -1 9 4 + -17 9 -7 + -8 15 -20 + 8 -29 -8 + 0 -3 -12 + -2 4 14 + 16 -8 4 + -1 -18 -11 + -4 0 -12 + 14 -10 11 + 13 -4 -16 + -20 10 -3 + 4 0 5 + -16 7 -6 + -17 9 5 + 14 4 -27 + -9 14 15 + -9 2 8 + -3 -16 -12 + 2 17 -5 + 10 -1 3 + 5 -14 15 + -12 10 -8 + -13 6 4 + 7 8 11 + -19 10 27 + 7 2 8 + -7 -6 16 + 5 4 17 + 26 -1 3 + -3 15 -6 + -1 9 3 + 2 0 -5 + -2 -2 -2 + -19 -19 12 + 0 7 -3 + 1 1 -4 + 21 7 6 + 12 12 -7 + 12 1 11 + -12 -1 17 + 18 9 31 + -4 4 7 + 15 -14 -2 + -7 -13 -5 + -1 8 -9 + 9 -20 -5 + -9 -6 -4 + 15 -12 -6 + 7 12 19 + -8 -8 7 + 3 -4 3 + 30 -8 -26 + -18 -7 2 + -6 -10 -1 + 7 -17 1 + -7 -6 0 + 14 0 1 + 9 -13 -18 + -11 -4 -8 + 10 -4 4 + 17 -6 5 + 4 -2 16 + -4 -15 -5 + -8 -9 7 + -8 -9 -18 + -2 -11 7 + 22 15 -6 + 6 -16 20 + -13 -11 -8 + 10 20 -4 + 21 2 17 + 1 6 -3 + 5 -12 1 + 16 -4 -6 + 0 7 -1 + 7 -4 0 + 14 8 12 + 13 22 2 + 10 2 1 + 5 2 -10 + 20 14 18 + -11 3 6 + -4 -7 6 + 6 7 -14 + -12 17 -23 + 16 1 5 + -9 -8 13 + 10 0 9 + 4 -8 -3 + 3 1 7 + -1 1 -12 + 5 -5 2 + 9 2 15 + -12 18 -10 + 16 -10 -2 + -8 -4 -13 + -18 13 -10 + -14 -7 3 + 7 -3 -28 + 8 2 8 + 0 -6 1 + -3 8 6 + -17 1 9 + -6 10 13 + -2 4 -19 + -9 -22 -11 + -13 -4 -8 + 14 0 -5 + -14 -24 5 + 10 -9 15 + -21 -7 -14 + 15 8 19 + -8 -9 -1 + -5 -14 2 + -3 -3 1 + 0 -8 -3 + 0 -2 -15 + -7 5 -7 + 0 -7 8 + -13 -7 20 + -2 8 -2 + -15 -16 -3 + -2 -22 15 + -22 -10 5 + -8 0 6 + 15 -13 -7 + 0 -5 2 + 10 -6 -8 + 3 -6 10 + 2 -15 -12 + 14 6 -11 + -1 -3 -7 + -2 15 10 + 1 11 -18 + 6 -19 11 + -6 16 -12 + -27 -12 5 + 1 29 2 + 3 6 -9 + -13 -4 4 + 10 -9 13 + -8 4 5 + 6 -8 -16 + 16 14 1 + 22 15 -5 + -8 -10 6 + -2 15 18 + 1 8 11 + -14 0 -4 + -27 -8 1 + -1 8 15 + 12 0 -1 + 3 -2 -5 + 9 4 -23 + 23 10 -15 + 9 26 -3 + -10 0 -9 + 2 -5 30 + 19 -1 8 + 7 12 -17 + 12 -1 11 + 0 0 4 + 4 7 3 + -8 -8 3 + 1 -10 -14 + 7 10 -5 + 0 4 -2 + 6 2 -6 + -8 -8 -13 + 5 -3 7 + 13 16 1 + 21 11 -20 + 19 -17 -9 + -14 -17 16 + 14 7 -1 + 12 15 19 + 0 -4 1 + -1 -9 6 + 7 3 -4 + -9 -6 0 + -5 -17 26 + -27 31 20 + -4 -5 3 + -4 4 16 + 20 0 -4 + -15 -17 13 + -9 8 -1 + 11 -5 2 + 6 -10 8 + -7 0 12 + -15 -3 -17 + 17 -15 -6 + -5 14 -2 + -18 22 21 + 4 -3 9 + -4 10 -4 + -10 -13 15 + 11 -5 -18 + 10 4 5 + 1 13 -19 + 19 -4 -3 + -15 -7 13 + 5 13 -10 + -8 11 11 + -2 17 1 + -1 10 -2 + 1 17 12 + 17 -16 1 + -20 4 -20 + -5 -6 -8 + 18 -8 -4 + -10 2 8 + 8 5 -26 + 5 -9 -12 + 13 7 -1 + -11 -1 -11 + -5 -2 16 + 12 11 16 + 8 16 3 + -17 -7 -6 + -11 3 12 + 3 19 3 + -15 -7 -16 + -15 6 1 + -7 1 9 + -12 -14 4 + -10 -6 20 + 22 2 -18 + -4 4 -2 + 8 6 12 + 0 5 -7 + -12 -20 -8 + -17 -2 19 + -7 0 21 + 5 23 -18 + -11 -5 -17 + 24 23 -8 + 16 -16 4 + 14 19 -20 + -14 9 -13 + 20 13 4 + 12 20 -6 + -22 7 4 + 7 -15 15 + 1 -21 -6 + 10 -7 7 + -24 -10 -9 + -16 10 -11 + -3 -9 18 + -15 1 -20 + 16 6 6 + -6 19 -3 + 7 10 -21 + -9 -2 -3 + -2 23 1 + 0 3 8 + 12 15 -1 + 3 1 -4 + 5 -8 1 + 4 4 6 + 15 -8 2 + 1 -12 0 + 13 13 10 + 0 -9 7 + 14 2 -9 + -6 5 -7 + -20 8 16 + 16 -4 -8 + 6 21 -16 + -8 24 -6 + 12 18 -4 + 5 4 0 + 17 4 -30 + -4 4 -3 + 0 9 20 + -11 5 -13 + -8 -5 8 + 17 10 11 + -7 -6 -15 + -7 -14 10 + -4 -18 4 + -6 14 -11 + 0 -8 -25 + 8 3 -8 + 1 -11 14 + -9 12 -7 + -13 -11 5 + 12 -1 14 + -4 21 9 + -5 -9 0 + 2 11 -11 + 5 4 14 + -3 4 -10 + 2 3 -8 + 24 -13 1 + -11 8 24 + -13 -6 -7 + 5 4 -9 + -13 5 5 + -1 21 -8 + -31 6 12 + 9 -19 6 + 7 6 4 + -4 11 8 + 9 6 1 + -13 -4 -4 + 0 -27 -4 + 8 5 27 + -8 15 5 + -4 -8 -3 + -21 2 16 + 5 -12 -13 + 13 2 2 + -1 -14 14 + -6 16 7 + -13 2 20 + 13 -2 -10 + 14 0 2 + -17 7 5 + 15 11 -14 + -13 -8 5 + 8 -8 8 + -4 15 23 + -10 9 -7 + 19 -9 -5 + -9 -9 6 + -20 7 18 + 1 -7 -8 + -5 -3 -15 + -8 10 -26 + -7 8 1 + -6 22 -20 + -5 -4 -10 + -24 -3 -4 + 26 -1 25 + -3 9 14 + -12 -16 -11 + 3 16 -26 + 8 -9 -1 + 8 -24 7 + -3 19 20 + 4 -17 6 + -11 -12 -14 + -6 15 11 + -16 -13 -19 + -16 16 2 + -7 -4 4 + 3 -3 11 + -11 0 -14 + -22 3 0 + 7 4 4 + -20 9 -6 + 7 16 1 + -2 -22 -7 + -10 -10 5 + 25 4 5 + -11 11 -8 + -4 9 15 + 9 -5 -9 + -5 -2 -11 + 7 19 21 + -10 -8 -9 + 22 -9 -12 + 2 -1 10 + -6 -16 17 + 9 16 7 + -2 -10 0 + -18 -8 1 + -7 9 16 + -8 -8 8 + -12 1 1 + -3 -13 -16 + -14 -16 8 + -3 -22 -1 + -7 -17 1 + 3 4 11 + 0 9 10 + -11 8 7 + -14 10 24 + -13 -8 18 + 12 5 -19 + -11 -11 -7 + -10 5 -5 + 4 -15 -20 + -22 20 1 + 8 3 -7 + 17 20 2 + -7 -10 -8 + 8 11 -17 + -4 -3 5 + -11 5 -8 + 5 -12 -9 + -9 27 11 + 13 -18 5 + -8 5 -4 + 1 -5 20 + -21 -8 -25 + 12 -15 6 + -3 13 18 + -5 -11 15 + 1 16 -14 + -3 7 -11 + -8 11 13 + -4 -13 -12 + 14 3 -3 + -13 -13 0 + 3 -12 7 + -5 11 4 + -4 8 -5 + -10 1 -6 + -3 -6 -8 + -14 9 3 + 6 2 26 + -4 29 4 + 11 11 -9 + -5 14 -15 + 0 18 -14 + -10 2 6 + 7 -19 -7 + 12 -12 -20 + -3 -19 7 + -20 3 -1 + -5 5 16 + -2 9 15 + 5 -21 -7 + -17 4 -9 + 5 -2 -7 + 13 18 8 + -10 5 22 + 23 8 -13 + -20 -6 -13 + 15 3 25 + -1 -1 16 + -11 -6 -4 + -7 4 4 + -13 -17 5 + 6 6 16 + 19 6 17 + -13 -24 -3 + 0 5 13 + 1 -12 3 + -13 -3 -11 + 12 13 3 + 2 -24 25 + 0 6 17 + -15 4 -16 + 1 -24 -6 + 10 -5 -16 + -18 8 -18 + -10 -12 -20 + 0 20 8 + -11 10 5 + -10 9 -14 + -14 -2 -2 + 6 2 -2 + -23 -7 15 + -4 4 14 + 5 -3 4 + 8 5 9 + -14 5 19 + -17 -16 -12 + -3 5 10 + -11 -5 -10 + 5 -13 -7 + -1 -10 -7 + 6 17 -8 + -11 -7 -13 + -3 3 -14 + -19 14 27 + -12 -6 -8 + -11 -8 -1 + -10 21 -3 + 0 10 -4 + -31 -14 14 + 0 2 -4 + 0 -11 15 + 9 6 6 + 21 -5 11 + -12 -15 15 + -18 -2 9 + 4 18 -21 + -1 3 -1 + -9 16 -5 + -5 -14 4 + -12 -4 -5 + 2 -8 15 + 4 22 17 + -6 4 -21 + 3 16 -9 + 10 -11 6 + -11 -11 -8 + -10 8 18 + 3 -9 -12 + -18 -6 -6 + 13 10 9 + -4 8 5 + -10 10 -3 + -4 11 0 + -10 -5 18 + 24 16 13 + 19 13 -9 + 6 11 -20 + -3 -11 -5 + 1 -16 2 + 4 -3 1 + 6 1 -4 + -16 9 8 + -2 -10 -16 + 10 8 -9 + 11 9 -8 + -5 -13 -15 + 8 -17 -24 + 11 -8 2 + -10 13 -9 + -13 7 0 + -13 -19 -10 + -11 -9 -3 + 8 6 -17 + 30 7 -15 + 7 -6 -16 + -17 15 -3 + 4 -11 -8 + -13 -13 -7 + 13 2 -14 + 9 -5 -19 + 7 3 6 + -3 9 -5 + 0 7 -3 + -9 10 14 + 10 -3 5 + 8 -6 1 + 17 13 -7 + 5 13 -4 + -19 9 -10 + 14 -13 -4 + 11 6 -20 + 1 2 -15 + 13 -8 0 + 8 -1 6 + 11 18 -6 + -7 -13 -13 + -14 -4 -9 + -3 -17 1 + -23 11 -14 + 4 -18 9 + -17 -10 7 + 4 -9 -2 + -21 -11 -14 + 13 9 -10 + 12 20 -12 + 13 -3 -11 + -9 -11 -16 + -13 11 -5 + -16 1 -3 + -8 0 5 + -8 4 10 + -11 -5 8 + -5 -14 14 + 2 -19 -6 + 6 28 -30 + 1 7 -4 + -16 -10 3 + -18 5 6 + -9 -8 -20 + 7 -5 17 + -12 0 2 + 22 15 3 + -14 -1 3 + 9 -7 17 + 15 -18 -2 + -5 6 -13 + 1 -7 -16 + 13 -12 -4 + 14 12 -10 + -9 -15 -5 + -6 -4 -20 + 2 3 -21 + 2 -24 17 + 9 12 9 + -2 -2 -11 + -7 9 -3 + 15 9 -8 + -2 -7 -11 + 11 13 3 + -2 15 10 + 7 -10 15 + -2 -10 10 + 1 4 -8 + -2 -8 3 + 9 -4 10 + 11 -15 10 + -4 18 9 + 22 8 -10 + -2 10 8 + -15 1 22 + -5 12 -8 + -8 -4 -6 + -3 -4 -19 + -7 -6 13 + -12 -7 -3 + 11 -19 -11 + -16 14 -2 + 7 9 -8 + -16 0 8 + -2 -6 -2 + 0 3 -5 + 13 0 6 + 4 14 14 + 1 15 3 + 10 -6 -15 + 4 12 -3 + -9 6 -13 + -5 -3 -8 + 10 -7 8 + -15 -8 -15 + 20 10 11 + 0 9 1 + -17 7 21 + 9 8 -3 + -8 -13 10 + -1 0 14 + -7 7 -8 + -2 2 -21 + 8 -12 -1 + 9 -9 -10 + -15 -14 -12 + 6 -5 -16 + 0 4 -14 + 24 -14 -24 + 13 -2 -3 + 18 -13 8 + -24 2 11 + 11 -8 -10 + -13 1 4 + -3 -12 -5 + -10 26 9 + 0 -7 0 + -12 17 7 + -13 18 17 + -8 3 -6 + -4 6 3 + -5 -5 -12 + 20 -9 -18 + 13 -16 7 + 17 -17 17 + 18 6 18 + -11 -14 1 + -7 -14 10 + -2 14 -6 + 13 1 1 + -5 -9 -10 + 6 -1 -10 + 2 6 -4 + 6 7 3 + -2 -25 17 + 4 -12 -14 + -12 3 11 + -8 -9 5 + -1 -12 -17 + -20 -10 -1 + 6 2 -2 + -7 -1 -3 + 5 2 -8 + -6 10 2 + 7 5 -5 + 12 5 8 + 2 0 12 + -12 6 6 + 21 4 -4 + 10 -8 8 + 8 9 -9 + 2 1 16 + 2 7 -5 + 7 -10 13 + -6 -9 -1 + 9 22 -12 + 24 -1 -4 + -6 9 9 + -7 -10 -7 + 21 11 -18 + 1 1 -3 + 13 13 5 + -11 -4 15 + -19 8 -9 + 12 11 0 + 10 3 6 + 3 8 22 + -2 -3 13 + 6 -8 5 + -19 17 -2 + 19 -26 -9 + -10 3 6 + -9 12 11 + -3 1 5 + -6 6 -19 + 15 -12 16 + 11 2 7 + -4 -5 -6 + 1 -5 -13 + -4 -7 21 + -9 -22 -13 + 3 -19 -12 + -18 -2 10 + -12 -13 12 + 10 0 10 + 18 -17 12 + 3 -29 -10 + -5 -4 9 + -6 -10 -1 + -6 12 28 + 6 3 -2 + -8 -12 2 diff --git a/example/testvectors/wcdma/block27_soft_dec.bin b/example/testvectors/wcdma/block27_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..a857f2efea0d4945b9c1ce9db8fb19064e207041 GIT binary patch literal 6000 zcmeH|TW;G{6h%AN08QcmsRKnODN%Rhkd!FOva2R&V1Hx+8D-Z#*BL{9NQ(Dy-fu}U zDUOO5gN0AJ$xmqF9`RlqJ)6KFY0g#AgbrN0yqYhD67dzTTW48Eh-Yn5sO28bZVpS@ zT8{;W#uUh*;oI=_QqLB9layr_8Wupw5OE$X0!HAb(z7?Uz)l~ZP;@-LYz(@nHCl(H z(_n3iml#iw_Bv@lX#&>hY=Jx$=jU;U-oU}3Kye=@T;<0*X>Y<(R7^VthJvYVR;I^@ z3*k)vaAQ{*gE5XJqM*P%3O(ZN-FyFVIkhG?Ng%-S^vsOB#2&f2Qz&uW&9GI~3GN#*UA3c(&QUNVZuz$4z`8chy(5FByK z-qYi-u>fKTy3|{?y2f;!g~$2UHWc89Il7V zX`Wf)90NK2#K}(0Y;;9LOI=31BNe+*??TId6trl@OiQvZ4#kELHNTt^bIft$H)(GePSTf2YuE$m*4=3dD0J3bGj>~g(wQm3 zhSVHnLAFRBwHxLB9x=ndjP6X&5L|(aNtGUeWIh0OzAX*-E4BDAHt(st3K$NH-82!6 zksB-ela0+K&HVk4l5*%MF5WH9-&^^Fez}W*c`)V}A;Yt#LX$w=W^%QAoo0_0rm^)P z#iWcBOZ4^fmM!kq;Q{QNys)oVAOQAqKGwyMFAu)_*gJnNV z>=#IV>Z!sin0iR(`ei%DqcLxk_Tcw_7GRHkW|d_-=1J!mq&YCRg8nrBu|8`A)(ET-SR=4TV2!{Ufi(ha1l9{9%;sRpXwLuu5|RRo literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block27_status.dat b/example/testvectors/wcdma/block27_status.dat new file mode 100644 index 0000000..30f6136 --- /dev/null +++ b/example/testvectors/wcdma/block27_status.dat @@ -0,0 +1,3 @@ +08007431 +4006c35b +003f0139 diff --git a/example/testvectors/wcdma/block27_tail_llrs.dat b/example/testvectors/wcdma/block27_tail_llrs.dat new file mode 100644 index 0000000..569b91d --- /dev/null +++ b/example/testvectors/wcdma/block27_tail_llrs.dat @@ -0,0 +1,6 @@ + -6 -5 + -4 21 + -9 -3 + -11 19 + -17 7 + -8 2 diff --git a/example/testvectors/wcdma/block28_cfgreg.dat b/example/testvectors/wcdma/block28_cfgreg.dat new file mode 100644 index 0000000..5292019 --- /dev/null +++ b/example/testvectors/wcdma/block28_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +800 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block28_hard_dec.bin b/example/testvectors/wcdma/block28_hard_dec.bin new file mode 100644 index 0000000..cab4fd0 --- /dev/null +++ b/example/testvectors/wcdma/block28_hard_dec.bin @@ -0,0 +1,2 @@ +¦¹lš¸_¯¢Ýýyù&Yç÷1,<¨æ¾ÎˆeDR#k$=¤fŽÈ +eOâ´Í¢ìíãAyöEåì7Á)ŸGèт³cWŒÛ¨­N7lz«ß«,$ç†hy§Q!•-Ä|‘ \ No newline at end of file diff --git a/example/testvectors/wcdma/block28_hard_dec.dat b/example/testvectors/wcdma/block28_hard_dec.dat new file mode 100644 index 0000000..4b4fb3a --- /dev/null +++ b/example/testvectors/wcdma/block28_hard_dec.dat @@ -0,0 +1,25 @@ +11b910a6 +5fb89a6c +dd12a2af +7981fd1b +e75926f9 +3c2c31f7 +cebee6a8 +52446588 +3d246b23 +c88e66a4 +114f650a +cdb4e28f +e3edeca2 +45f67941 +c137ece5 +e8479f29 +63b382d1 +db8c570f +ad06a81a +7a6c374e +ab10dfab +86e7242c +a779680e +2d952151 +91067cc4 diff --git a/example/testvectors/wcdma/block28_llrs.bin b/example/testvectors/wcdma/block28_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..2c6fc958578e11b6603f1fb1b85c515102c14e95 GIT binary patch literal 2400 zcmWNSSC->A7DV9a^ zrGpnu=LCE=AdW=c+LDDb`}*X>NNI30l8e};#iX(W8(=#iUr5>c8{hM(8)i!AG&#B_ zQ$YpfY#rI2URCd%3QUZSzoBUbx^}y+KOd7N5YHyQ0uwMp$s@p=WK4Vm1nU{^TZ(=o z&vKkOa8=Q|AUOD0%8OWU?@foV$vC)3rThnOS(=~no1&;}%L%{3Po4!7H}uOBpcxCX zCUq@yTYFb6CdAD6>9!Q0%+_NBUp5%YN#b?Od_%cfaVF3Xs~9r2L|ahlPL_9n_>KiI z&6Zz0CiMY@$NlLok$lR2XarnCEzsH|CD;=niBnp!HFD05#P0;$O_(4QrDD@nUu1vt zEkKk}Q|l=0q&TPJ3aK$UH=55?!=5_+GKPRUofoWHJ5V_gGpV6rU!~XJ zbb-@Z#CyXO4mLb~CA6q*8h0%=QKhKh_sbQ}@Qqs!6|KzX5bQQ+4)KMy?H~i5jHEgC z>GaREK@?XX#kB50won}mk?6g)d-AL>L32kyE?D83da8sG_u^GJ1kgg5(V5<4SSdlxa#UC*h;!ZJ_Gp;vrs@ zJlL+P&;e*9GFhG%&e6Vl2#OMEpU9&AQVDmlz^>REr`19MCH1Vbde&y7Ej}E?2d6xF z_x+_p5Z$lP#oA5QNjS5msg`qJ;zUvx39eMQVV#FV>Zvnp1|dAt!{+rbnaf$c4R?{ysZwdYi+@(Z5B#&~ z&siBg9Kk{p72{?Ri)@`>VHUQ+Qs^z0^V8nFD^NschpPN5&{Y43Ezbk$ z-Ir?RgY4ms#fgicNzYM|MT(lHq&bxg-REj+$jyXshLkx9d~Jc{z`|G4 zZ@$(oI;{=bVW_fi`8{CGU*}lYB$v)0mzeC9J=W8w zNYCyrXSPw_3AKY8#oc_lfkg45ydP2e|IagdnfA9p8H0opfIvQ83rFODp2)QCz@KKGCiZLTvecUtK@#g`usj`@Mb$##>=3Ul!lj zV`kzX&{!l7OWK(;_K4x@wAb8<6Rg8{7W>cg80SYP1-xt>-nexkE_4fuxi;w!wf_eg C^N4f+ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block28_llrs.dat b/example/testvectors/wcdma/block28_llrs.dat new file mode 100644 index 0000000..998bc60 --- /dev/null +++ b/example/testvectors/wcdma/block28_llrs.dat @@ -0,0 +1,800 @@ + -15 -9 9 + 21 7 13 + 4 -6 15 + 2 4 -19 + -8 0 -2 + 14 -1 2 + -5 10 -9 + 5 6 12 + -26 10 7 + -21 -6 10 + 1 14 7 + -13 13 -8 + 17 -16 15 + -19 12 -14 + -5 8 -15 + -2 -8 -15 + 3 8 23 + -28 -21 -14 + -7 10 11 + 23 22 -2 + 30 8 -7 + 22 -6 -4 + -6 2 6 + 18 0 -28 + 22 2 -12 + -8 -14 5 + -1 4 -17 + -7 6 0 + 18 -8 -6 + -19 -9 7 + -3 -1 -2 + -2 5 4 + -12 -21 14 + -6 5 -12 + 6 -10 -10 + 1 5 -15 + -27 -22 9 + 5 -1 12 + 28 -8 13 + 3 -16 -10 + -1 -6 19 + -2 -16 -16 + -4 7 -15 + 20 7 3 + 24 -11 3 + -8 16 15 + -10 -11 6 + 4 23 10 + -5 -2 6 + 5 7 -1 + -3 -12 -6 + 7 -7 -3 + 9 16 0 + 6 -3 3 + -6 15 10 + 2 13 12 + 3 8 3 + -7 -6 4 + 8 -6 4 + 16 21 6 + -1 6 -14 + 4 8 8 + 15 -4 -8 + -8 -7 3 + -5 -13 10 + 30 10 -10 + 4 -19 3 + 1 -2 -13 + 1 11 -10 + 5 -17 17 + -15 8 -4 + 2 -6 -20 + -1 0 0 + 15 -21 4 + -19 4 -20 + 0 9 -17 + -16 4 3 + 10 5 3 + -24 -10 10 + -10 0 12 + -4 20 10 + 2 1 17 + 2 18 24 + 14 0 -4 + -5 -20 -8 + -8 1 -1 + 1 15 -10 + -22 12 -5 + 10 8 -3 + 3 -7 -3 + 8 7 -3 + 10 6 -12 + 3 14 13 + 5 11 23 + 9 -2 -5 + -1 5 20 + 7 -8 -6 + 13 2 2 + -26 3 9 + 10 9 -11 + 12 2 11 + -19 -3 3 + -10 7 -5 + -23 17 5 + 3 8 9 + 3 -5 -3 + 4 -8 -2 + 14 5 5 + 14 -8 10 + 4 -1 8 + -1 -5 -9 + 8 -4 -8 + 14 -4 -12 + 7 -14 18 + -11 6 -6 + -9 -1 3 + -14 11 -19 + 7 -13 -2 + -25 -1 12 + -2 -9 6 + 7 -2 -30 + -10 19 11 + -6 20 -13 + 4 13 13 + 3 -12 -11 + 21 -10 -6 + 10 -15 -9 + -4 -8 -11 + 12 9 -3 + 1 -5 3 + -14 -30 -21 + 6 -2 -17 + 8 -4 6 + 13 -17 3 + 10 24 -8 + 9 11 -17 + -15 -8 -8 + 8 -15 7 + -7 20 23 + -18 -14 -8 + -6 -14 16 + 18 6 5 + -27 12 -13 + -1 23 -9 + -6 -11 17 + -10 -3 11 + -18 3 -10 + 21 5 -13 + 13 -9 7 + -18 9 -19 + 13 4 9 + -25 13 17 + 14 0 1 + 2 22 -11 + -3 -14 3 + -2 -2 8 + -1 -13 18 + 9 -28 7 + 1 -14 8 + 0 -2 -4 + 23 10 -9 + -4 22 4 + 6 -15 17 + -7 -10 7 + 14 13 2 + 23 4 -2 + 13 2 9 + 8 17 10 + -2 8 -2 + -7 13 -3 + -5 28 -9 + -5 -15 5 + 15 6 -2 + 21 8 -2 + -8 15 -9 + -11 -13 7 + 6 25 5 + 0 14 9 + 8 7 6 + 1 -12 2 + 3 0 -21 + 7 4 -15 + 0 -2 12 + -2 -6 -12 + -6 13 14 + -20 -11 4 + -1 16 -22 + 30 0 -8 + 6 -2 -4 + 14 -7 -4 + -14 -1 19 + -21 7 1 + -12 -22 5 + 12 -16 6 + 2 2 -6 + 10 18 5 + -7 8 0 + 15 8 -5 + -6 22 13 + -6 -11 -7 + -11 2 0 + 6 1 -7 + 15 29 7 + 4 6 0 + -13 -1 -7 + 9 0 1 + 8 1 22 + -5 -15 -8 + -9 2 17 + 19 1 -12 + 10 7 -5 + 20 -17 10 + -4 -17 -11 + 12 17 -20 + -6 -15 16 + 6 0 5 + 0 17 7 + 24 -8 -26 + 21 5 -1 + -6 -5 7 + -4 3 -11 + -15 4 -11 + 10 -9 -14 + 20 -15 -4 + -13 -4 10 + -17 30 6 + -26 5 -23 + 1 -3 17 + -25 8 7 + -23 1 -11 + -3 1 10 + 10 -6 19 + 16 11 -3 + -11 -2 -5 + 4 -9 -4 + -15 9 20 + -11 -14 -9 + 14 8 -1 + -3 7 -13 + 9 -19 -11 + -6 11 6 + 1 -2 -12 + 20 -16 -7 + -9 -2 -3 + 5 -13 6 + -15 7 3 + -2 4 5 + 0 -4 0 + -5 -25 -4 + 16 13 5 + -19 7 2 + 2 15 -2 + 7 -4 9 + 2 5 7 + 8 -10 1 + 13 18 -3 + 15 -6 -7 + -7 -3 9 + 11 -1 1 + 6 10 11 + -4 6 -14 + 11 -10 -7 + -1 11 -5 + -5 7 -13 + 13 -4 2 + 18 -7 14 + -6 16 -10 + 8 12 14 + -17 12 -13 + 5 2 -8 + 5 12 7 + -4 10 1 + -6 15 -7 + -15 -3 15 + 2 4 -8 + 9 9 -16 + -14 -2 -22 + 8 -7 -1 + -12 7 -10 + -16 -1 -15 + -14 -14 5 + -8 7 -6 + -2 7 9 + 11 2 0 + 16 -11 -6 + 0 -13 -8 + -12 -5 -16 + 0 1 3 + 6 0 10 + -11 10 12 + 0 11 11 + 4 2 1 + -23 -9 2 + 2 -5 3 + -10 -2 -14 + -7 4 4 + -15 -14 -4 + 25 -10 14 + 7 -27 1 + -11 5 19 + -1 9 -20 + 18 1 15 + 16 -11 -3 + -19 8 5 + -15 -14 -15 + 5 1 17 + 4 16 -12 + 5 10 6 + -16 -11 -12 + -16 14 -3 + -6 -6 -13 + 5 -9 9 + -11 -10 15 + -2 -14 -14 + -8 5 -2 + 12 0 -8 + 1 5 9 + -10 4 -4 + 0 13 -14 + 9 -15 11 + -15 -10 5 + -7 -1 3 + -6 -10 2 + 4 -18 -25 + -12 13 2 + -18 -8 -1 + -5 -17 10 + -10 5 -6 + 12 15 -6 + -26 3 15 + 16 10 15 + -10 -6 6 + -4 14 -16 + 6 3 -9 + 8 -5 17 + -17 4 6 + -6 0 -3 + 7 7 -17 + 24 -2 -2 + 2 -5 16 + -16 -6 -7 + -13 26 19 + 0 21 -24 + -9 12 6 + 13 2 -6 + -6 1 -5 + -11 2 27 + -9 -21 3 + 13 23 19 + -24 1 -6 + -20 -6 11 + -16 -3 -4 + -7 13 4 + 4 -6 -7 + 1 -16 -5 + 3 -7 -2 + -15 -6 -4 + -8 9 -1 + -3 1 -9 + 22 -15 13 + 0 6 -9 + -8 -14 -5 + -4 14 12 + 3 12 -12 + 6 -14 -12 + 2 19 -7 + -2 17 -11 + -5 11 -9 + 2 3 -7 + 0 -2 -10 + 6 4 2 + -6 -2 -5 + 9 16 -21 + 6 -3 8 + 6 4 12 + 8 4 -15 + 25 -7 4 + 0 -9 7 + 4 -27 1 + 3 0 8 + -9 5 17 + -15 4 3 + 3 12 1 + -11 9 11 + -12 7 -6 + -2 12 -15 + -3 -10 -24 + -5 -14 -9 + -12 0 -14 + 4 -18 18 + -18 -17 -7 + 11 -17 -9 + -17 -19 -19 + -15 -5 18 + 7 -20 12 + 0 -7 -15 + -6 8 -13 + 12 -19 2 + 10 -8 -9 + 15 13 -7 + -6 3 11 + -4 10 4 + 8 -2 -22 + 7 21 -8 + 0 -5 8 + 28 16 14 + 11 -12 9 + 9 7 2 + 20 -6 13 + 8 -13 -4 + -13 1 9 + -22 6 -1 + -26 1 11 + 14 20 -3 + 16 2 14 + 3 10 19 + 23 11 0 + -2 -22 -2 + -8 12 -3 + -6 -13 -1 + 1 13 -18 + -14 15 -18 + 9 -16 -12 + -10 16 13 + -10 1 -9 + -5 1 -2 + -25 16 -9 + 3 12 -16 + 15 -8 -8 + 6 -14 -20 + -2 -20 -10 + -15 -9 -9 + -18 10 -8 + 9 -16 -8 + 25 5 11 + -10 -6 -10 + 5 8 -7 + 2 -12 6 + 11 4 1 + 15 2 -7 + 11 -3 1 + -16 4 5 + 3 -12 7 + -26 5 -16 + 1 -10 6 + -24 10 19 + 7 22 6 + -1 3 -9 + 8 -6 -5 + 1 -5 2 + 8 17 -18 + -22 -1 0 + 2 -5 15 + 29 -14 2 + -5 3 -16 + 4 2 -16 + 0 4 4 + -9 15 8 + 6 2 16 + 6 9 -20 + -4 -12 7 + -3 -15 8 + 13 -3 14 + 4 -17 -9 + 13 13 -14 + 13 -2 15 + 9 9 -6 + -1 0 14 + 15 3 3 + 13 6 -7 + -5 -8 7 + -6 6 -2 + 12 8 -1 + -14 -9 -8 + -8 4 6 + -4 -3 10 + -3 2 -14 + -1 -21 3 + 6 24 -6 + 7 -10 -2 + 18 3 2 + -22 10 0 + -14 -3 9 + 10 -5 -5 + 0 -1 12 + 11 21 6 + -1 -6 4 + -7 7 0 + -5 20 5 + 3 15 11 + 2 -9 5 + 1 14 19 + 21 -12 13 + -12 15 14 + 1 -20 4 + -3 -5 6 + 4 9 -10 + 18 6 2 + 9 6 -5 + 3 -5 -14 + -13 3 9 + -12 1 -2 + -1 0 -10 + 7 -22 -15 + -12 -3 -7 + 2 17 16 + -1 -3 -11 + 12 -3 2 + -13 -3 -17 + 3 16 10 + -1 2 19 + 4 0 15 + 1 13 10 + -7 -16 -6 + -19 16 -4 + -13 -8 18 + 8 -13 -3 + -19 -1 -4 + -1 0 -4 + 3 -4 -2 + -7 -4 -9 + 4 -18 5 + -9 -2 -2 + -7 -20 -1 + 0 -7 -14 + 12 -1 11 + -9 -13 -6 + 16 -27 -5 + 9 4 6 + 11 -15 0 + -21 11 3 + -5 -15 5 + -1 8 -4 + 9 24 -7 + 1 -19 -9 + 3 -21 8 + 8 8 19 + 0 -2 -1 + -8 2 -28 + 14 18 26 + -12 12 7 + -1 -10 1 + 21 -2 14 + -5 -17 -2 + 3 -21 12 + 4 8 -9 + 13 -31 -2 + -5 -13 -13 + -2 8 14 + 3 7 2 + -5 -13 -11 + 3 3 1 + 17 -7 -4 + 18 -1 12 + 24 -9 -1 + -2 -12 -5 + 4 -3 15 + -1 -10 7 + 18 15 -21 + -1 -24 -4 + -5 15 3 + -19 -10 -9 + 14 -5 7 + 8 6 22 + 1 11 -15 + -13 -12 -3 + -4 16 13 + 13 -16 13 + 8 11 4 + 2 5 -1 + -13 -3 11 + 14 6 -6 + -2 -1 -8 + -10 -14 2 + 8 24 -6 + 6 -5 -2 + -18 -17 6 + 0 -9 9 + 2 -14 16 + 9 -13 -14 + 3 -1 -11 + -2 10 -3 + -2 6 13 + -13 -17 -16 + 3 -18 -24 + -7 14 8 + -8 -6 -2 + 9 -6 -18 + -15 -11 16 + -1 9 -21 + -6 -10 9 + 4 0 -15 + -3 17 6 + 26 -1 -12 + 4 -23 5 + 0 21 -5 + -21 1 16 + -8 -5 8 + -4 7 -10 + -16 -10 -11 + 1 -6 0 + 1 -1 -22 + 8 18 5 + 11 17 3 + -10 -9 16 + 6 -25 -15 + -16 12 20 + 23 8 -22 + -9 -6 0 + 20 9 -2 + 9 17 5 + 17 6 3 + -22 4 -14 + -5 -10 -10 + 15 -5 -5 + 3 19 -5 + 2 10 -17 + 11 -7 2 + -4 -13 -2 + -12 12 -29 + -3 -3 28 + 5 -11 19 + 2 -12 4 + -10 22 21 + -13 14 -16 + -4 10 -11 + 14 4 24 + 13 -5 -4 + -8 8 5 + 8 1 6 + 9 8 6 + 8 16 1 + -16 -4 4 + 15 1 5 + -6 -3 4 + 5 -15 0 + 5 -9 2 + 16 -6 0 + 9 14 -1 + 8 -17 -2 + 19 0 -10 + -2 -18 -3 + -5 -4 -4 + 3 -3 -12 + 4 -19 -3 + 9 -16 -8 + -9 31 2 + 3 1 11 + 4 -12 -15 + 19 -19 8 + 14 2 7 + -9 10 -2 + 7 -1 8 + -15 6 -17 + 12 4 15 + 14 11 -6 + 6 -22 12 + -18 -2 -2 + -9 -4 -19 + -3 -1 -4 + 29 6 -8 + -8 3 -11 + -8 8 0 + 4 8 -3 + 0 0 -10 + 13 -31 -1 + -2 6 27 + 19 3 -22 + -14 6 9 + 3 17 -2 + -10 5 13 + 15 9 -6 + -7 8 3 + -19 -4 6 + 5 -11 -6 + 9 -9 -2 + -19 -8 -7 + 4 -9 -6 + -8 -22 9 + -16 -18 23 + -10 4 -13 + -19 11 16 + 14 -6 -2 + 6 0 -13 + -23 -18 2 + 11 -9 7 + -5 9 -10 + -9 -11 -20 + 0 12 10 + 18 16 20 + 20 2 0 + 1 0 -19 + -16 5 11 + 19 2 -18 + 8 13 2 + -3 -3 -11 + -21 -12 -9 + 14 8 17 + 6 10 1 + -10 -13 -11 + 3 23 -7 + -4 -9 11 + -7 12 26 + -4 -15 -11 + -20 -6 -13 + 29 4 -6 + -2 13 17 + 2 -7 -16 + -14 6 -11 + -10 7 10 + -12 -17 -8 + -16 -10 5 + -17 -14 15 + -11 10 -7 + -9 22 13 + 8 -5 17 + -12 17 -11 + 8 11 13 + 12 -9 -20 + -2 -18 8 + -3 -15 6 + -10 -10 7 + 1 -8 15 + 26 -9 8 + 20 -19 -8 + 23 -14 12 + 3 3 -5 + -15 -10 11 + 1 2 10 + 24 -16 26 + 7 5 -13 + -7 8 -7 + -5 -17 -5 + 1 -12 3 + -10 -7 3 + 5 2 27 + 12 6 1 + -8 -3 -8 + -12 6 -7 + -6 -13 2 + 2 -16 9 + 1 1 -6 + 16 10 14 + -12 -8 3 + 1 -14 15 + -8 6 -15 + -12 -13 7 + 1 1 6 + -3 11 6 + 10 8 -20 + -9 -9 -3 + -7 -12 -4 + 15 -1 -23 + -19 11 18 + 9 -15 -11 + -4 -18 13 + 3 -7 7 + -16 -21 -7 + -8 -5 8 + 9 -6 18 + 5 10 1 + -1 2 13 + -3 -3 -4 + 17 2 -17 + -2 -8 19 + 18 -11 8 + -31 1 -11 + -16 -10 28 + -12 11 11 + 1 -27 6 + 2 8 -6 + -3 2 9 + -13 -16 3 + -5 13 10 + -3 27 -2 + 8 -3 -4 + -16 15 3 + -13 7 -14 + -11 -1 -12 + -4 -19 16 + 9 2 3 + 15 17 -12 + 1 -3 7 + -10 -20 -7 + -13 -8 -6 + 9 -10 -4 + 8 -4 -3 + 4 16 -14 + -3 24 5 + -5 -7 -12 + -5 5 -4 + -9 9 -10 + -7 13 6 + -11 -9 -6 + -2 -9 15 + -5 -10 -2 + 6 -8 -9 + 10 15 -25 + -8 10 -10 + -4 2 -11 diff --git a/example/testvectors/wcdma/block28_soft_dec.bin b/example/testvectors/wcdma/block28_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..cc01802a096d6283c9d07b66db42669d069a4591 GIT binary patch literal 2400 zcmeHF+fKqz5cK!_5T1mD2vVSz$@BuPpdvwiATja5|8!;#U*K~~=w4@ccDDptLO(Ws z`47mx>Gs&_I1L~8Aqj4f0p-pL&?ut@Yk`+Ud)jbEbUCm`soZMiDqW?_68X@O1B=v0 zK(+NlWYK(`8p@e-04mJg9w-tM_B9p*YFP`{CSM07aIK_gqM8vaY~`teR4S?}8k6M* zitLGnxwdHWhU}$}kQ1UH4z}l_h>CU3O2aUVnB(T^n#~c4#l*4=c8u$YSGMA>HA(GI zuh^YYOb=QVa9Nq4NGuqG1y~@HmR~Y;Ny3*|y1KXEu&6-?>Ey@7gJiBHmMLPa`zs!* zT5>bB-uPUdtbuX$v_kM9=pW7rQ0k&;_30}qf1^U3(YL8|vdB}4ovnK)MJ-Dc5|uq! z2w^KSb$wvV9PO8(zi}%qPtry78A-*HMgJb$cay*hFQ4C%aVLR}>iB54dTyza9laPP zU#e!v^nqKb$~sOdST(7SA%btVQX-2Y3HpMu0XVnv;2hFR_19 KCi1Y`0ssJu>M}(D literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block29_hard_dec.dat b/example/testvectors/wcdma/block29_hard_dec.dat new file mode 100644 index 0000000..0486bb1 --- /dev/null +++ b/example/testvectors/wcdma/block29_hard_dec.dat @@ -0,0 +1,26 @@ +1f4d10bb +b0ffdbbc +f912bc12 +3e2f6d14 +39b3ef0b +60fc3f38 +000dfdef +7fa406c9 +fbf22c93 +340616de +c5d6d313 +e9a9fc32 +e5937259 +85a15ff4 +0de8c62a +ef06c3c0 +409c3f7a +061d4c6f +32cf16d3 +e945acb7 +ff7707c0 +3680465f +79939a22 +7fb12f83 +b0f22653 +000002db diff --git a/example/testvectors/wcdma/block29_llrs.bin b/example/testvectors/wcdma/block29_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..248e3c3ce6ad501a2b11b6558cee062d54c58242 GIT binary patch literal 2442 zcmWkw*ODWt7Q{nQUQ(-jcV_nge`{~-w3AdShj+K;fhQt>G$#}IvY$j3==%+B<0EAJ zU-jBCiLRorPLGs#&!D2sxzF+PW*MnpT3#Ld+m{99QpD|_eHqoVmXZb_KXpW?3l@G$ zY$blFib>ix5B-HP=`ty{d!>AR{g@1s1i$#$j4QLrJ1AWCC)Im4(KaX3t&gs+mYLsm z)x9R0tGe!AtYSdGGaovCe|EY(P(coC3eDk*zY=F0(n)DgL7g;ta5(A&j`HFHl0WBS4;xDjc1F<4g zs>zyGs?SL~K zA1z7A^`)(4vx+7aZP54XLFlW1*M;t5+D{eU_9rK&zS(dgOZC7am8~MY8h#q!La2*_ z*v_`wpDzKEHso`SA$sffaw_$s6XO<>ML18|>I{&>xx)wd4nF(@dmPT7yzmV|VX7K3)rj4%5D+NHn51$2!$k~i zMf)^%r+Fshns7*V#_I0+MQ@cQZC&#(l>__R#u0Gp-N<1-J0!UAm!bDs`rLwOtqA^V z{RymyFu@BAl&SBho#g>s4U}g?D$thn_Q#;MaoDG>E>?m-98vms78)Y#qo_E`byjxW zDwNDz{OWO4!s``IjQ{IjNyP#D^P7|ia?Fn4hV{%dU*G0EGg5uXt zcohX#9VY|ne5(eKUEv@{Zjjn)2z-r9=*X&nQwOPC7a(c&Tq8BpOS|a8 zrevSAKOYR90|BP1y?lviJl*)>A4$%YtRQ4-*P!!QpC{6R_Od(kd!T#smx=G|oS!At z(b;5M>^oWm!X;kxNRX_3#HoPcfE4X|H*%(4>^o`+QSXwSg&%Ie->L&F9*6ICY}*9ZIn6-e9^B(J#p=2JCQE?!?GZ$WP7Uiy z5dUJq@ww{x-s=9duv!N)%t1Y_WfgTX2p6fJQr&Vb2)!&+ z?T=JUpH`Uef<^G=UR-Mov%N&LItlSaU(ey10C0Z@UU}r6+p00Wg0daF}di~S}Zj_P{la!_p)uW@lZr@P@39yPp>ucs8Tf!M?iE+ z3N8rp_|Y|N{jnt_xq57&uuT+UxBzN1WBrcJqZ%Q__GCoEFC#}&<)`+8b`yVnaT?uV zB$<5M*kDMtS99IE!STVttA!+Z6$fSBi&1JlTIL7_CC_b$7gIKR-Cbf>f#wBG&cMf) zgJE?6pE}mzPYzu#fbaF9WHrc7u=yrHgwft~@El7^7r3)MVb`zIXBAPP7=4_I^uF{A zn2|lo1gi6=_P6?sLXu=DV02t)?_o=sJXR4R}8vEalp=36Ho^I3czl`or`SN;=9f9t_bZB_R|Tt zI_e9c;RUyuu!BA1y7$EawHAqcFC%)yn7PVNRQtfdMx!(0-2W$Emo7(>afc{uewNVl zTg05Rr9H&$gA}XJx*ArR(rj%v4L1k%PH#YH3OvQba`AIk80k6`l(z;G3Y56NFb#V<}nyv5=BX*?Z8b^xpJK^%*;~xgOq&IyJlx+ zk4J!jCRusW1jaKC0tJ^w@PIS$O$SpoQcW4&a{K87(cXp>1^DHh)#L5(hiLlSA3#nn zL-(e!dmah_gwi=grKNqH5ebrO?y%tFy&-9LmpwCIYOiIS9DlTPVHU9QqOpPFXq1N? z8~$#co+Zi&?pZ+rOm-C*us-dBQ(MQ0uoqq|%#rwB%bNZRs8wj_{0gFvxVDSta?qZ; zKo*r81AQvI>9Q}i0@+r*l4-AmysNcg&iaX$a&6#WTjbIG#L1ouQNc{VUIa@*FXj{P zYxy{RU9(GKP+-XjCx@~FwleRClqed(LM)NkU#*|sMTiRAs?BN=t8og1tr$%e0q|kE zBWVluhoUAbiCQjT8yucoE!kZGhey<($tMwBkW8%Sf=roDIkt3h_I3pkq4m4Q&@(Nm zuOY>e18UZ7#glv;F9MS9oA`L|HgZq%{)kSd!)W)3Q|a~NB7$SMIr0AA!w#lLrEoE_ im2nZdKuH(f*Bh=@r{vQ-<_^pqm^(0cVD7+w>cC$eJd}C> literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block29_soft_dec.dat b/example/testvectors/wcdma/block29_soft_dec.dat new file mode 100644 index 0000000..54ac44c --- /dev/null +++ b/example/testvectors/wcdma/block29_soft_dec.dat @@ -0,0 +1,810 @@ + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -112 0 0 + -114 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + -114 0 0 + 127 0 0 + 127 0 0 + 108 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -106 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -106 0 0 + -113 0 0 + 123 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 79 0 0 + -114 0 0 + 124 0 0 + -124 0 0 + -112 0 0 + 100 0 0 + -113 0 0 + -78 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -117 0 0 + 100 0 0 + 113 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 89 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + 107 0 0 + 127 0 0 + 107 0 0 + 88 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 112 0 0 + -127 0 0 + 117 0 0 + 114 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -109 0 0 + -126 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -118 0 0 + -121 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -100 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -113 0 0 + 127 0 0 + 119 0 0 + -115 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -101 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 88 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 116 0 0 + -113 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -125 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 121 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + -108 0 0 + 127 0 0 + -115 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 112 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 114 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -113 0 0 + -126 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 107 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -112 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -125 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -88 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 115 0 0 + 126 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 126 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + 116 0 0 + -127 0 0 + -119 0 0 + 85 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + 117 0 0 + 127 0 0 + -124 0 0 + 69 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -110 0 0 + 127 0 0 + 107 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -111 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -122 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 116 0 0 + -127 0 0 + 114 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + -113 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -124 0 0 + -122 0 0 + -125 0 0 + -127 0 0 + -115 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -94 0 0 + 120 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 101 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 125 0 0 + -117 0 0 + -116 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + -112 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 110 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -116 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 112 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 126 0 0 + -119 0 0 + 97 0 0 + 89 0 0 + -127 0 0 + 118 0 0 + 118 0 0 + -115 0 0 + 107 0 0 diff --git a/example/testvectors/wcdma/block29_status.bin b/example/testvectors/wcdma/block29_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..e91bfab0d6f12b0676f3cd02b50b2e8f5085f114 GIT binary patch literal 12 TcmZ3i$H3vdiOHdkL5cwY6kr0W literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block29_status.dat b/example/testvectors/wcdma/block29_status.dat new file mode 100644 index 0000000..562f4bc --- /dev/null +++ b/example/testvectors/wcdma/block29_status.dat @@ -0,0 +1,3 @@ +08002ea3 +4002b243 +001a007e diff --git a/example/testvectors/wcdma/block29_tail_llrs.dat b/example/testvectors/wcdma/block29_tail_llrs.dat new file mode 100644 index 0000000..4ff2c15 --- /dev/null +++ b/example/testvectors/wcdma/block29_tail_llrs.dat @@ -0,0 +1,6 @@ + -16 2 + 22 -20 + -7 8 + -3 5 + 8 4 + 20 24 diff --git a/example/testvectors/wcdma/block2_cfgreg.dat b/example/testvectors/wcdma/block2_cfgreg.dat new file mode 100644 index 0000000..9300a86 --- /dev/null +++ b/example/testvectors/wcdma/block2_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +102 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block2_hard_dec.bin b/example/testvectors/wcdma/block2_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..4743bf17c475fbe5fee688ca68aa7abf4f6ca4ef GIT binary patch literal 16 Xcma#z^AuTJ%Eqodpa1Pg1_lNICfWp= literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block2_hard_dec.dat b/example/testvectors/wcdma/block2_hard_dec.dat new file mode 100644 index 0000000..6729f73 --- /dev/null +++ b/example/testvectors/wcdma/block2_hard_dec.dat @@ -0,0 +1,4 @@ +14490e5a +070675a3 +ed0f9f23 +000000f1 diff --git a/example/testvectors/wcdma/block2_llrs.bin b/example/testvectors/wcdma/block2_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..ce2dfdf0e87c30964e1484ec605286f81ba7bb53 GIT binary patch literal 318 zcmWN_*>Zv~6adgb7QzLD;?_<({{M$rr=y|`iP@L-JRY%EGtb@Y65epNgpAMbxM5H; zJGyyEnSd7GwBL@8p1gCW!hSGL`xQHmo}}1tQlg?_9mg~w|D*eQKHY3}17_hl=N7eXu$BY3el{en>HTKik9ixWVKP3%6$zQ wBZ0Stc|F2{Bt)rpy0%t&EhVe^J0kHZ{~szIdC_4=14&KT!Tj;+B*zH-0X|5Z0{{R3 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block2_llrs.dat b/example/testvectors/wcdma/block2_llrs.dat new file mode 100644 index 0000000..f00ede3 --- /dev/null +++ b/example/testvectors/wcdma/block2_llrs.dat @@ -0,0 +1,106 @@ + -15 -9 9 + 21 7 13 + -12 10 -1 + 18 4 -3 + 8 16 -18 + -2 -1 -14 + 11 10 7 + -11 6 -4 + -26 10 -9 + -5 -6 10 + 17 -2 -9 + 3 13 8 + 1 -16 -1 + -19 -4 -14 + -5 -8 -15 + -2 -8 -15 + 3 8 7 + -28 -5 -14 + -7 10 27 + 23 6 14 + 14 8 9 + 6 10 -4 + 10 18 22 + 2 0 -28 + 6 -14 -12 + -8 2 5 + 15 -12 -1 + -7 6 16 + 18 -8 -22 + -19 -9 7 + -3 -1 -2 + -2 5 -12 + 4 -5 14 + 10 5 -12 + -10 6 -26 + -15 5 1 + -27 -6 -7 + 5 -1 28 + 12 8 13 + 19 0 -10 + 15 10 3 + -18 0 0 + 12 -9 -15 + 4 -9 3 + 24 -11 19 + 8 16 -1 + 6 -11 6 + -12 23 -6 + -5 -2 -10 + 21 7 15 + 13 4 10 + -9 -7 -19 + -7 16 0 + -10 -3 -13 + -6 15 10 + -14 13 -4 + 3 8 -13 + -7 -6 -12 + 8 10 20 + 0 5 -10 + -17 -10 2 + 4 -8 -8 + -1 -4 -8 + -8 -7 -13 + -5 3 -6 + 30 -6 -10 + -12 -19 -13 + -15 -2 -13 + 1 11 6 + 5 -1 1 + -15 -8 12 + -14 -6 -20 + 15 0 0 + 15 -21 4 + -3 4 -4 + 16 -7 -17 + 0 4 -13 + -6 5 -13 + -24 6 10 + -10 16 -4 + 12 4 10 + 2 -15 1 + 18 2 8 + 30 16 -4 + -21 -20 8 + -8 1 -1 + 1 15 -10 + -22 -4 -5 + 10 8 13 + 3 9 -3 + 8 -9 13 + 10 22 4 + -13 -2 -3 + 21 11 7 + 9 -18 -5 + -1 5 20 + 7 -8 10 + -3 2 18 + -26 -13 25 + -6 -7 -11 + 12 -14 11 + -3 -19 -13 + 6 -9 8 + 11 -7 3 + 3 0 0 + -7 0 0 diff --git a/example/testvectors/wcdma/block2_soft_dec.bin b/example/testvectors/wcdma/block2_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..07f4a7b2ab08991f2b69b82ee6095ac92e25d098 GIT binary patch literal 306 zcmdsuQ3`-C3`4!}1b-B9_=wXn6=WZR*R}N+hCET`;6)oz~qcN5URX^-x(GT zQ<-@9$c~`y7?Y~nlBhW43)h2IZd+fnqJRq%A(K$p!FBJoW096a&=u-qE#dU~WHRy~ zqRoAxW@kV^tU=|TW5pu!+i&D#?Y?(alhv9Bzc}(N9BTx1$Lz?O6#Tpg*HALkD*SNp z%3t6B@}}=N5@ovQx5KAAbj~D73pb-5i`k~XBIaP)8b+t2@Bzp5RX4I*V{?z6#8i!J~#{Qr*N4Kvq5DeH%hf z$l%9WgRIDEcNh%{FNwiURSkZvOx7aFKJw4CW&?~?D!TaO0sd%>u0<%c z${*`{~BZ0QZq93u{xCMo7q<{D%AvQq# zOU4(!Zsj9lk6|a`R-@!YC0cw0gVt(LhQ$fVwW{z%3Ja6l%AXr}h+=}R$rYP8ze?zQ z!izsh*pb3VERB(GpmvltQsC$@ks6ar)OtQ58+iD~m@6pb1z}dpp4za9N%a-G=Uz`8 zX{U<`zEbQ`*yH)nfDqe2qFNAf#K79@`np2+rfm+@UYN}-u-Tv?uyoqiy)5u#BuxQU z-2}E4l{gP#THg9(Bri>i!46*kn0 ze~S4g>Qz>+q`6jEx&HxCj{5toRG1q@uw)6qd4aEEg7egh{jqL*E-G3I*nZ~~w~Nui zM-Z_lhc0zGsOqwi98+E&vN;ZPxH=G9Sza%iBf9z-WI58lB1pYcIq&A2zoV7oYS|}B z0#qX#%JbT4>|BL&0(kT;qX&YW=ks?c9k5QqnJra;E-=T#7MpP0EZ@Pt6;dAxfngkj zKdcC*T(d}XK(xa%YYB4x`&i2~ot=ThEQfXz%?u$ZY#aT^7|tGW%$Kzze~=|}7{egJ zssuCq8oGx#AA~$nr?0iHNd0_B#r)bfu7sfs4Vuach&4^mVu(*U;&(FpS%}_?h)|)b z)!CS+4S}nfxAZX?gSMbHS(R(omgUTL#*6e}SH}tnQ%xJj}@(Bg$W# zT#J&DTa|6z%;IDuK%K=j#iI}44GwHwi70ydjfyNv3a%NAVh++gwJPS&fd*meCZ_b z(E-gnO0jq-bY)UW>cF^A7xw%UAMe?fCc)1p##Lj4vwjGe*Or*K*N1vGzXgultM3~%1y$<~jPT=4bzWvyqpQdl>z|?`M15*d4 J4*X*W{s04ln&$uj literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block30_soft_dec.dat b/example/testvectors/wcdma/block30_soft_dec.dat new file mode 100644 index 0000000..44d313a --- /dev/null +++ b/example/testvectors/wcdma/block30_soft_dec.dat @@ -0,0 +1,820 @@ + -127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + 125 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -111 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + 116 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -112 0 0 + 121 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 110 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + 117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 124 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -119 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + -121 0 0 + 115 0 0 + -127 0 0 + -127 0 0 + -113 0 0 + -122 0 0 + -127 0 0 + 125 0 0 + 116 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -111 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 114 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -113 0 0 + -127 0 0 + -127 0 0 + -115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -110 0 0 + -122 0 0 + 127 0 0 + 101 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -117 0 0 + 101 0 0 + -127 0 0 + -100 0 0 + -127 0 0 + -127 0 0 + -106 0 0 + 117 0 0 + -125 0 0 + 127 0 0 + -101 0 0 + -127 0 0 + 127 0 0 + -106 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -120 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 116 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 118 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 110 0 0 + 127 0 0 + -113 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 113 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -114 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -125 0 0 + 125 0 0 + -125 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -116 0 0 + -123 0 0 + -125 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -114 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -110 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -112 0 0 + -110 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 117 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 106 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -108 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 110 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + -115 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + 127 0 0 + -103 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 97 0 0 diff --git a/example/testvectors/wcdma/block30_status.bin b/example/testvectors/wcdma/block30_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..9f34168be0fea89d3fcfa43ddd0fd6ae87238b02 GIT binary patch literal 12 TcmZqIXW*zl%;eC>AkF{)6<7k- literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block30_status.dat b/example/testvectors/wcdma/block30_status.dat new file mode 100644 index 0000000..450e4b9 --- /dev/null +++ b/example/testvectors/wcdma/block30_status.dat @@ -0,0 +1,3 @@ +08002f87 +4002c37b +00170081 diff --git a/example/testvectors/wcdma/block30_tail_llrs.dat b/example/testvectors/wcdma/block30_tail_llrs.dat new file mode 100644 index 0000000..5b6c5d3 --- /dev/null +++ b/example/testvectors/wcdma/block30_tail_llrs.dat @@ -0,0 +1,6 @@ + 22 -25 + 3 15 + 0 27 + 3 5 + -7 -10 + -16 -4 diff --git a/example/testvectors/wcdma/block31_cfgreg.dat b/example/testvectors/wcdma/block31_cfgreg.dat new file mode 100644 index 0000000..9a43081 --- /dev/null +++ b/example/testvectors/wcdma/block31_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +100 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block31_hard_dec.bin b/example/testvectors/wcdma/block31_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..2f9f1c662b95a628b9591acb30a5ded5fd96df82 GIT binary patch literal 16 XcmaDTplU1=ms!U3R>+W-fq?-4DW?PK literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block31_hard_dec.dat b/example/testvectors/wcdma/block31_hard_dec.dat new file mode 100644 index 0000000..b6a852b --- /dev/null +++ b/example/testvectors/wcdma/block31_hard_dec.dat @@ -0,0 +1,4 @@ +332510e1 +76695e1c +3112ed0a +0000000d diff --git a/example/testvectors/wcdma/block31_llrs.bin b/example/testvectors/wcdma/block31_llrs.bin new file mode 100644 index 0000000..5fbbd63 --- /dev/null +++ b/example/testvectors/wcdma/block31_llrs.bin @@ -0,0 +1 @@ +ááááááááááááá÷áááááááááðáááááááááááááááááááááôáááááááááááááááááááááááááááááááááâáááááááááááááááááááááááááááááááíááááááááááááááááááááááááááááááááááááááááåá \ No newline at end of file diff --git a/example/testvectors/wcdma/block31_llrs.dat b/example/testvectors/wcdma/block31_llrs.dat new file mode 100644 index 0000000..21015bb --- /dev/null +++ b/example/testvectors/wcdma/block31_llrs.dat @@ -0,0 +1,100 @@ + 31 31 31 + -31 31 -31 + -31 31 31 + -31 31 -31 + -31 -31 31 + 31 31 -31 + 31 31 31 + 31 31 -31 + -31 -31 31 + -31 31 -31 + -31 -31 -31 + -31 31 -31 + 31 -31 -31 + -31 -31 -31 + -31 31 -31 + -31 31 -31 + 31 -31 -31 + -31 31 31 + 31 -31 -19 + -31 31 31 + -9 31 31 + 31 31 -31 + -31 31 -31 + -31 -31 18 + 31 -31 31 + 31 31 31 + -31 31 -31 + -31 -31 -31 + 31 -31 -31 + 31 31 31 + -31 31 31 + -31 -31 31 + -31 31 -31 + -31 31 31 + 31 -31 -31 + 31 -31 -31 + 21 31 31 + -31 -31 31 + -16 -31 -31 + -31 -31 -31 + -31 -31 -31 + 31 31 -31 + 31 -31 -31 + 31 31 -31 + 31 -31 -31 + -31 31 31 + 31 31 -31 + -31 31 31 + 31 31 31 + -31 -31 31 + -31 -31 -31 + 31 31 31 + -31 31 -31 + 31 -31 31 + 31 31 31 + -31 -31 -31 + -31 -30 31 + 31 31 -31 + 31 -31 -31 + -31 -31 31 + 31 31 31 + 31 31 31 + 31 31 -31 + -31 -31 -31 + -31 31 -31 + 31 31 23 + -31 -31 31 + 31 31 31 + -31 31 31 + -31 31 -31 + -31 31 -31 + -31 -31 -31 + 31 31 31 + -31 -31 -31 + 31 -31 31 + 31 -31 -31 + -31 31 -31 + 31 -31 -31 + 30 -31 -31 + 22 31 31 + -31 -31 31 + 31 31 31 + -31 31 31 + -12 31 31 + 31 -31 -31 + -31 31 31 + -31 31 -31 + -31 -31 31 + 31 31 -31 + -31 -31 -31 + -31 31 -31 + -31 -31 31 + 31 -31 31 + 31 31 31 + -31 31 -31 + -31 -31 -31 + 31 -31 31 + -31 -31 -31 + 25 31 -27 + 31 31 -31 diff --git a/example/testvectors/wcdma/block31_soft_dec.bin b/example/testvectors/wcdma/block31_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..4054cb6d9f7bb0cb2c0cd710bee2985d52e44cf2 GIT binary patch literal 300 zcmb<#1cLhddN2iI0wEZID2OPW0?C18K_Wm5)&>>=>w^e@6@ZNZ>jw!k3=;qV`o|O(VMXFT}_~K;GGw=OeoU;b%uf^)jqCaFKo(li~ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block3_llrs.dat b/example/testvectors/wcdma/block3_llrs.dat new file mode 100644 index 0000000..10c688b --- /dev/null +++ b/example/testvectors/wcdma/block3_llrs.dat @@ -0,0 +1,105 @@ + -15 -9 9 + 21 7 -3 + 4 -6 15 + 18 20 -3 + -8 16 -18 + -2 -1 -14 + 11 -6 7 + -11 -10 -4 + -26 -6 7 + -5 -6 10 + 17 -2 7 + 3 -3 -8 + 1 -16 15 + -19 12 -14 + -5 8 1 + -2 8 1 + 3 8 7 + -28 -5 -14 + -7 -6 27 + 23 6 14 + 30 8 9 + 6 10 -4 + -6 2 22 + 2 0 -28 + 6 2 4 + 8 -14 5 + 15 -12 -17 + 9 22 0 + 18 8 -6 + -19 7 7 + -3 15 -2 + -2 5 -12 + 4 -5 -2 + 10 -11 -12 + -10 6 -26 + -15 -11 -15 + -27 -22 -7 + 5 -17 28 + 28 -8 13 + 19 -16 -10 + -1 -6 3 + -18 0 -16 + 12 -9 -15 + 4 -9 3 + 24 -11 3 + 8 16 -1 + 6 -11 22 + -12 23 -6 + 11 14 -10 + 21 -9 -1 + -3 4 -6 + -9 -7 -3 + -7 0 0 + -10 13 -13 + -6 -1 -6 + -14 13 -4 + -13 24 -13 + -7 -6 -12 + -8 10 20 + 0 21 6 + -17 -10 2 + 20 8 8 + -1 -4 8 + 8 -7 3 + -5 -13 -6 + 30 -6 -26 + 4 -3 -13 + -15 -2 -13 + 17 11 -10 + 5 -17 1 + -15 -8 -4 + 2 10 -20 + 15 0 -16 + -1 -21 4 + -19 4 -20 + 16 9 -1 + -16 4 3 + -6 -11 -13 + -24 -10 10 + -10 16 12 + 12 4 -6 + 2 1 1 + 18 2 24 + 30 0 -4 + -21 -4 8 + -8 17 -17 + 1 15 6 + -22 -4 11 + 10 -8 -3 + 3 9 -3 + 8 7 -3 + 10 6 -12 + 3 -2 13 + 21 -5 23 + 9 -2 11 + -1 5 20 + -9 8 -6 + 13 -14 18 + -26 -13 25 + 10 -7 -11 + 12 2 -5 + -3 -19 -13 + 6 -9 11 + -7 1 -5 + 3 0 0 diff --git a/example/testvectors/wcdma/block3_soft_dec.bin b/example/testvectors/wcdma/block3_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..f8c0e1915d7eb9a322064c6c7b3d6e79e4b41e69 GIT binary patch literal 309 zcmZpyudi=x1ft;j`sT*Q#zG*czN2wg2T&X+3gmzZkeW7-2$G?R#$_V6B_F$lmM0IR`-@SR+L31G7KvK0E1C82><{9 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block3_soft_dec.dat b/example/testvectors/wcdma/block3_soft_dec.dat new file mode 100644 index 0000000..feac313 --- /dev/null +++ b/example/testvectors/wcdma/block3_soft_dec.dat @@ -0,0 +1,103 @@ + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 83 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 113 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + -102 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -114 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 113 0 0 + 123 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + -112 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 109 0 0 + 123 0 0 + -115 0 0 + 119 0 0 + -127 0 0 + 120 0 0 + 118 0 0 + 89 0 0 + 97 0 0 diff --git a/example/testvectors/wcdma/block3_status.bin b/example/testvectors/wcdma/block3_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..88bfff8270b7c86162fe332de41d7c8804b79547 GIT binary patch literal 12 TcmX@f%D}NPn8AUMfsp|K6Fvee literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block3_status.dat b/example/testvectors/wcdma/block3_status.dat new file mode 100644 index 0000000..37a5898 --- /dev/null +++ b/example/testvectors/wcdma/block3_status.dat @@ -0,0 +1,3 @@ +080005c9 +400053b1 +0001000e diff --git a/example/testvectors/wcdma/block3_tail_llrs.dat b/example/testvectors/wcdma/block3_tail_llrs.dat new file mode 100644 index 0000000..ca1c6ac --- /dev/null +++ b/example/testvectors/wcdma/block3_tail_llrs.dat @@ -0,0 +1,6 @@ + -7 3 + 1 -5 + 5 13 + 3 -12 + -8 -8 + -7 14 diff --git a/example/testvectors/wcdma/block4_cfgreg.dat b/example/testvectors/wcdma/block4_cfgreg.dat new file mode 100644 index 0000000..319357a --- /dev/null +++ b/example/testvectors/wcdma/block4_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +104 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block4_hard_dec.bin b/example/testvectors/wcdma/block4_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..c8c1529807ca177d1f3d5f17d7eccc4cced3e02c GIT binary patch literal 16 YcmY%3Td2YOX~s#ZSNuy)F)%Oy05dcN&;S4c literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block4_hard_dec.dat b/example/testvectors/wcdma/block4_hard_dec.dat new file mode 100644 index 0000000..1edb0c6 --- /dev/null +++ b/example/testvectors/wcdma/block4_hard_dec.dat @@ -0,0 +1,4 @@ +28a10e20 +c998f203 +a50fea1a +000000ca diff --git a/example/testvectors/wcdma/block4_llrs.bin b/example/testvectors/wcdma/block4_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..49e192a72064639f1eb0e0ca35e3805c11baeda9 GIT binary patch literal 312 zcmWN_*>Zv~6adg{B;gts(K7bM{{Mfq&QwK3$WD^>Jf68)iEE?2#687R%=Fufb_@e| zr6wt524?=zik7^wljJN`Nz^6~`s?~9>*Vdc;=P{VrJMQ}IHSmLzBzmaD#P;Oi)}8j zP25`>80vrna5?1$Gv|_FM)HNr7ic94wq;^*%yyEJQ zl|c*-=#IZO=LK(fk4nB5|DG(an=)l$l?c`qg0UdGT&wYW)dgL}gXPuCUN!vinh&&$ rfp;PG3v3HJ8X_GH7fShlyCZgg(*FrKWDOBd+9^vdLQRFtp9j>H{~KG%x@F literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block4_soft_dec.dat b/example/testvectors/wcdma/block4_soft_dec.dat new file mode 100644 index 0000000..2b6d81f --- /dev/null +++ b/example/testvectors/wcdma/block4_soft_dec.dat @@ -0,0 +1,104 @@ + -127 0 0 + -121 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -115 0 0 + -96 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -115 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -124 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -93 0 0 + -121 0 0 + -120 0 0 + 109 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 97 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -91 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 94 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 108 0 0 + 85 0 0 diff --git a/example/testvectors/wcdma/block4_status.bin b/example/testvectors/wcdma/block4_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..9300ee4b51f0190168f5147564d664ba5f12ba2a GIT binary patch literal 12 Tcmeyv%D~YR!Qdduz`y_i6t@CH literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block4_status.dat b/example/testvectors/wcdma/block4_status.dat new file mode 100644 index 0000000..342fe4e --- /dev/null +++ b/example/testvectors/wcdma/block4_status.dat @@ -0,0 +1,3 @@ +080005fc +4000588c +00000015 diff --git a/example/testvectors/wcdma/block4_tail_llrs.dat b/example/testvectors/wcdma/block4_tail_llrs.dat new file mode 100644 index 0000000..4d5da7c --- /dev/null +++ b/example/testvectors/wcdma/block4_tail_llrs.dat @@ -0,0 +1,6 @@ + 3 4 + -8 -24 + 9 14 + 19 14 + -21 -11 + -3 -11 diff --git a/example/testvectors/wcdma/block5_cfgreg.dat b/example/testvectors/wcdma/block5_cfgreg.dat new file mode 100644 index 0000000..e6c8d8e --- /dev/null +++ b/example/testvectors/wcdma/block5_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +105 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block5_hard_dec.bin b/example/testvectors/wcdma/block5_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..7a0f34c4cef1256064fa56acc39a2e288c6b5344 GIT binary patch literal 16 XcmWgT`)U-t@oG-rP5yE?EH9JPacVSYBM0a)#LA`A(KeTgy4_8m-nJHFj#LW`DdafqjwM?~dcbQ?D+ IY2x4AKP0@2GXMYp literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block5_llrs.dat b/example/testvectors/wcdma/block5_llrs.dat new file mode 100644 index 0000000..d746bb0 --- /dev/null +++ b/example/testvectors/wcdma/block5_llrs.dat @@ -0,0 +1,111 @@ + 1 7 9 + 5 7 -3 + 4 -6 15 + 2 4 -19 + 8 0 -18 + -2 -1 2 + -5 -6 -9 + -11 6 12 + -26 -6 -9 + -5 -6 10 + 17 14 7 + 3 -3 8 + 1 0 -1 + -19 -4 2 + -5 -8 1 + -2 8 -15 + 3 8 7 + -28 -21 -14 + 9 10 27 + 7 22 14 + 30 -8 9 + 22 10 12 + 10 18 6 + 18 -16 -28 + 6 -14 -12 + 8 2 5 + -1 -12 -1 + -7 22 0 + 18 8 -22 + -3 7 7 + -3 15 -18 + -2 5 4 + 4 -21 14 + 10 -11 4 + -10 -10 -26 + -15 5 1 + -11 -22 9 + -11 -17 28 + 28 -8 -3 + 3 -16 -10 + 15 10 3 + -18 -16 -16 + -4 7 -15 + 4 -9 19 + 24 -11 19 + 8 16 15 + -10 5 6 + 4 23 -6 + 11 14 -10 + 5 7 15 + 13 -12 10 + -9 -7 -19 + 9 0 0 + -10 -3 3 + 10 15 10 + 2 13 -4 + -13 8 3 + -23 10 -12 + 8 10 4 + 16 21 6 + -17 6 2 + 20 -8 8 + 15 12 -8 + -8 -7 3 + -21 -13 -6 + 30 10 -26 + 4 -19 3 + 1 14 3 + 1 11 6 + -11 -17 17 + -15 8 -4 + 2 -6 -4 + 15 0 0 + -1 -21 -12 + -19 -12 -4 + 16 9 -17 + 0 4 -13 + -6 -11 3 + -8 6 10 + -10 16 -4 + 12 20 -6 + 2 1 17 + 18 18 8 + 30 16 12 + -21 -20 8 + -8 17 -17 + 1 15 6 + -22 12 -5 + 10 -8 13 + 3 -7 -3 + -8 7 13 + -6 22 -12 + -13 14 13 + 21 11 7 + -7 -2 11 + -1 5 4 + 7 8 10 + 13 -14 18 + -26 -13 25 + -6 -7 5 + 12 -14 -5 + -19 -3 -13 + 6 7 -5 + -7 1 5 + 3 -8 9 + 19 -21 5 + 13 4 14 + -24 -2 -6 + -2 0 0 + 5 0 0 + -8 0 0 diff --git a/example/testvectors/wcdma/block5_soft_dec.bin b/example/testvectors/wcdma/block5_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..84d627fea022daebb8a5091d2123775c0249fad9 GIT binary patch literal 315 zcmdsvOA3HM3`4!AOYs1rxbPR=j5-P)+SFqhXp=OgD(x;v)KUf(bj!GW)a)_$=+MJy dEfp`iNW%q1?^7G&5M9V__?cM4O{h`zJG_;MG$a53 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block5_soft_dec.dat b/example/testvectors/wcdma/block5_soft_dec.dat new file mode 100644 index 0000000..cdfdf64 --- /dev/null +++ b/example/testvectors/wcdma/block5_soft_dec.dat @@ -0,0 +1,105 @@ + 127 0 0 + -121 0 0 + 101 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 91 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 113 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 118 0 0 + 116 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + 99 0 0 + 127 0 0 diff --git a/example/testvectors/wcdma/block5_status.bin b/example/testvectors/wcdma/block5_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..74ae525075c817a596b49917e7d66be0b31377ae GIT binary patch literal 12 TcmZ=}W8m-~<6aYX3WVs=3Niuo@9PVu` zyBHINZT>FRCBFl`3#R=o?s9VrIV{RF3t#EEEsLej5lzl+3U?nbTRedXSZ_z>aRW87 zgIsi~+|Gfb8kmFXJSi*e3z&rtVN83=Yx63ZaesDl6W>i^hQzgOVvcv`%1s1GTueS& zK%O4dFm#<%zTWI#=&1*CriJcjEq7f^bgY8 BoBaR) literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block6_llrs.dat b/example/testvectors/wcdma/block6_llrs.dat new file mode 100644 index 0000000..bd06dfc --- /dev/null +++ b/example/testvectors/wcdma/block6_llrs.dat @@ -0,0 +1,110 @@ + -15 -9 9 + 21 7 13 + -12 10 -1 + 18 4 -19 + -8 0 -2 + -2 15 2 + -5 10 -9 + -11 6 -4 + -26 -6 -9 + -5 10 10 + 17 14 7 + 3 13 -8 + 1 -16 15 + -19 12 -14 + -5 -8 1 + -2 8 1 + 3 -8 23 + -28 -21 2 + -7 10 11 + 23 6 14 + 14 -8 -7 + 6 10 -4 + -6 18 22 + 2 0 -12 + 22 2 4 + -8 2 -11 + 15 4 -1 + 9 22 16 + 18 -8 -6 + -3 7 7 + -3 15 -18 + -2 -11 4 + 4 -21 -2 + 10 5 -12 + -10 6 -10 + -15 -11 1 + -27 -6 -7 + 5 -17 12 + 12 -8 -3 + 19 -16 6 + -1 -6 19 + -18 -16 0 + -4 7 -15 + 4 -9 3 + 24 -11 3 + 8 16 -1 + 6 -11 22 + -12 23 -6 + -5 -2 -10 + 21 7 15 + -3 -12 -6 + -9 9 -19 + 9 16 16 + -10 -3 -13 + -6 -1 10 + -14 -3 -4 + 3 24 3 + -7 -6 4 + -8 -6 4 + 0 5 6 + -1 -10 -14 + 4 8 -8 + -1 -4 -8 + 8 9 3 + -5 3 10 + 14 -6 -26 + -12 -3 -13 + -15 -2 3 + 17 -5 6 + 5 -1 17 + 1 -8 -4 + -14 10 -4 + 15 0 0 + -1 -5 4 + -3 4 -4 + 0 -7 -1 + -16 4 3 + -6 -11 3 + -8 6 10 + -10 0 12 + 12 20 10 + 2 -15 1 + 18 2 8 + 30 0 12 + -21 -20 8 + -8 17 -1 + 1 31 6 + -22 12 -5 + 10 8 -3 + 3 9 -3 + 8 7 -3 + 10 22 4 + -13 14 -3 + 21 -5 23 + -7 -18 -5 + -1 -11 20 + 7 8 -6 + -3 2 18 + -10 3 9 + 10 9 5 + 12 -14 -5 + -19 -19 -13 + 6 7 11 + -7 17 -11 + 3 8 9 + 19 -5 -3 + -12 -24 8 + -2 14 -12 + 14 0 0 + -6 0 0 diff --git a/example/testvectors/wcdma/block6_soft_dec.bin b/example/testvectors/wcdma/block6_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..323f90d3585e0d80d177bea1559cb38c2f5c8c67 GIT binary patch literal 318 zcmdstK@Ng26a_t~%U%FA5JPY>v=mo`BlGJqoV>+k@&-U}69O2igG) literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block6_status.dat b/example/testvectors/wcdma/block6_status.dat new file mode 100644 index 0000000..e9a3e63 --- /dev/null +++ b/example/testvectors/wcdma/block6_status.dat @@ -0,0 +1,3 @@ +08000636 +40005c14 +00020015 diff --git a/example/testvectors/wcdma/block6_tail_llrs.dat b/example/testvectors/wcdma/block6_tail_llrs.dat new file mode 100644 index 0000000..104c7b7 --- /dev/null +++ b/example/testvectors/wcdma/block6_tail_llrs.dat @@ -0,0 +1,6 @@ + -12 14 + -24 8 + -2 -6 + 14 -12 + 5 -17 + 5 -8 diff --git a/example/testvectors/wcdma/block7_cfgreg.dat b/example/testvectors/wcdma/block7_cfgreg.dat new file mode 100644 index 0000000..ac4091d --- /dev/null +++ b/example/testvectors/wcdma/block7_cfgreg.dat @@ -0,0 +1,35 @@ +3 +0 +107 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wcdma/block7_hard_dec.bin b/example/testvectors/wcdma/block7_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..b94b3270874192f4b1cd808cd207248c696addee GIT binary patch literal 16 Ycmey#=juLr|2y-i8vGYmFf%X!06~8SqW}N^ literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block7_hard_dec.dat b/example/testvectors/wcdma/block7_hard_dec.dat new file mode 100644 index 0000000..5fdb959 --- /dev/null +++ b/example/testvectors/wcdma/block7_hard_dec.dat @@ -0,0 +1,4 @@ +47450ef9 +37eebf93 +d10f28e5 +000003a8 diff --git a/example/testvectors/wcdma/block7_llrs.bin b/example/testvectors/wcdma/block7_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..4bffc2166189843dc1b507c56ee9db6b254306a3 GIT binary patch literal 327 zcmWN`+meDH002-C5Jd2nS-tH3|9>@3Q<-=Hxg_kK*8}j@(z3vVZy*?bfcKn~8B2Rw z*>n^EF+D5APgUUEm1^YAg4q9umL{=_#+PUY7^E?dwPcThr|r+nfG2~-L7d0^7})pF z7M`|%2w^Cxn0Blbk{fDXE;Fo^>4JJgqI%&>JtrfbBt+Ht63CX>;6Ioy&@SWNQ2)S5epKUUA$(`V#1zbzr6_Zr-I1CSM*<4l z04x_7l;8xb-s#B38alpiC|jt3Zh)%>{4KZlv_i&RL%E6Ci$iRJ_>Q$VT);xvBgEtn Dzgw4a literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block7_llrs.dat b/example/testvectors/wcdma/block7_llrs.dat new file mode 100644 index 0000000..2272c6f --- /dev/null +++ b/example/testvectors/wcdma/block7_llrs.dat @@ -0,0 +1,109 @@ + 1 7 9 + 5 7 -3 + -12 10 15 + 18 4 -19 + 8 0 -18 + 14 15 -14 + 11 10 7 + 5 -10 12 + -26 -6 -9 + -5 10 10 + 17 14 7 + 3 13 -8 + 1 -16 -1 + -19 12 2 + -5 -8 1 + -2 8 -15 + 3 -8 23 + -28 -21 -14 + 9 -6 11 + 7 6 14 + 14 -8 9 + 6 10 12 + 10 18 6 + 2 -16 -28 + 22 2 4 + 8 -14 -11 + 15 4 -17 + -7 22 0 + 2 -8 -6 + -19 7 7 + 13 -1 -2 + -2 -11 4 + 4 -21 -2 + 10 5 -12 + -10 6 -26 + -15 -11 1 + -11 -22 -7 + -11 -17 12 + 12 -8 13 + 19 -16 6 + 15 -6 3 + -2 -16 -16 + 12 7 1 + 20 7 19 + 24 -11 3 + 8 16 15 + -10 5 22 + 4 23 -6 + -5 -2 -10 + 21 7 -1 + 13 -12 10 + 7 9 -19 + -7 16 16 + 6 13 3 + 10 15 -6 + 2 -3 12 + 3 24 -13 + -7 -6 -12 + 8 -6 4 + 0 21 6 + -1 -10 -14 + 20 -8 8 + -1 -4 -8 + -8 9 3 + -5 -13 -6 + 14 -6 -26 + 4 -19 3 + -15 -2 -13 + 1 -5 -10 + 5 -17 1 + 1 -8 12 + 2 -6 -20 + -1 -16 -16 + -1 -5 -12 + -19 4 -20 + 16 -7 -17 + -16 20 -13 + 10 -11 3 + -24 6 10 + -26 16 12 + 12 20 -6 + 2 -15 17 + 18 2 8 + 30 0 12 + -21 -20 -8 + -8 17 -1 + 1 31 -10 + -22 12 -5 + 10 8 13 + 3 9 -3 + -8 -9 13 + -6 22 -12 + 3 -2 13 + 5 -5 7 + 9 -18 -5 + -1 5 20 + -9 8 10 + -3 -14 18 + -26 3 25 + 10 -7 5 + -4 -14 11 + -3 -19 3 + -10 -9 11 + -7 17 -11 + 3 8 -7 + 19 -5 -3 + -12 -24 -2 + -2 5 -1 + 4 0 0 diff --git a/example/testvectors/wcdma/block7_soft_dec.bin b/example/testvectors/wcdma/block7_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..7d591736659119f32dddd9c8d3741cdabc759d7b GIT binary patch literal 321 zcmdsu(FuSs5JO$j2^>LCq-ZUV*p}*#bY!m`!+c!AOOBE-of;uZLOk`RK_zW6)2bJy iHj_7ClNlUWux_s?Hr8M5^c+RDTnL?ex#h^iFZBVck2Na* literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block7_soft_dec.dat b/example/testvectors/wcdma/block7_soft_dec.dat new file mode 100644 index 0000000..e67cb0f --- /dev/null +++ b/example/testvectors/wcdma/block7_soft_dec.dat @@ -0,0 +1,107 @@ + 127 0 0 + -121 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 81 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -112 0 0 + -120 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 117 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + -114 0 0 + 127 0 0 + 127 0 0 + 95 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 111 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + -126 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 121 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 119 0 0 + 114 0 0 + 122 0 0 + -123 0 0 diff --git a/example/testvectors/wcdma/block7_status.bin b/example/testvectors/wcdma/block7_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..327fd05cae01837356d1709a66b8f2d90675a9e5 GIT binary patch literal 12 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 X@!B!v$rHTEve5++T~MNL(&_&J@}OSK literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block8_llrs.dat b/example/testvectors/wcdma/block8_llrs.dat new file mode 100644 index 0000000..6c5272b --- /dev/null +++ b/example/testvectors/wcdma/block8_llrs.dat @@ -0,0 +1,2000 @@ + 1 7 -7 + 5 7 13 + 4 -6 -1 + 2 4 -3 + 8 0 -18 + -2 -1 -14 + 11 10 -9 + 5 6 -4 + -26 -6 -9 + -5 -6 10 + 17 -2 7 + 3 -3 -8 + 1 -16 -1 + -19 12 -14 + -5 8 -15 + -2 8 -15 + 3 8 7 + -28 -5 -14 + 9 10 11 + 7 6 14 + 30 8 9 + 22 -6 -4 + 10 18 6 + 18 -16 -12 + 22 -14 -12 + -8 2 -11 + -1 4 -1 + -7 6 0 + 18 8 -6 + -19 -9 -9 + 13 -1 -18 + -2 5 -12 + 4 -5 14 + 10 -11 4 + -10 6 -26 + -15 -11 -15 + -11 -6 -7 + -11 -17 28 + 28 -8 -3 + 3 0 -10 + 15 10 3 + -18 0 -16 + 12 7 -15 + 20 7 3 + 24 -11 19 + 8 16 -1 + -10 5 22 + 4 23 10 + 11 14 -10 + 5 7 -1 + 13 -12 -6 + -9 -7 -19 + -7 16 16 + 6 -3 -13 + 10 15 -6 + 2 13 12 + -13 24 -13 + -23 10 4 + 8 -6 20 + 16 5 6 + -1 6 2 + 4 -8 -8 + 15 12 8 + -8 9 -13 + -21 3 -6 + 14 10 -10 + -12 -19 -13 + 1 14 3 + 1 -5 -10 + -11 -1 1 + 1 8 12 + -14 -6 -4 + 15 0 -16 + -1 -5 4 + -19 4 -4 + 0 9 -17 + -16 4 -13 + -6 -11 3 + -24 6 10 + -26 0 -4 + 12 4 -6 + 2 1 17 + 18 2 8 + 30 0 12 + -21 -4 8 + -8 17 -17 + 1 15 -10 + -22 -4 11 + 10 -8 -3 + 3 9 13 + -8 -9 -3 + -6 6 4 + -13 14 -3 + 21 11 7 + -7 -18 -5 + -1 5 20 + -9 8 -6 + -3 2 18 + -10 -13 9 + 10 -7 5 + 12 2 -5 + -3 -3 3 + -10 7 -5 + -7 1 5 + 3 8 -7 + 19 -5 13 + -12 -8 -2 + -2 5 5 + -2 8 10 + -12 -17 8 + -17 -5 -9 + -8 12 8 + -2 -4 -12 + 23 -14 18 + -11 -10 -22 + -9 -17 3 + -14 11 -3 + 23 3 14 + -25 -1 12 + -2 7 6 + -9 14 -30 + -10 19 27 + -6 20 -13 + -12 -3 13 + 3 4 -11 + 5 -10 -6 + 10 -15 7 + 12 -8 -11 + 12 9 -19 + 1 -5 -13 + -14 -14 -21 + 6 -2 -1 + -8 -4 -10 + -3 -1 3 + -6 24 -8 + 9 -5 -1 + 1 -24 -8 + 8 1 7 + -23 4 7 + -18 -14 8 + 10 2 0 + 2 6 5 + -27 12 -13 + -1 23 -9 + -6 5 17 + 6 -19 -5 + -2 -13 -26 + 21 -11 -13 + -3 -9 7 + -18 9 -3 + 13 -12 -7 + -9 13 1 + -2 -16 17 + 2 22 -11 + -19 2 -13 + 14 -2 8 + -1 -13 18 + -7 -12 -9 + -15 2 8 + 0 -2 -4 + 23 -6 -9 + -20 6 20 + 6 -15 17 + -7 -10 -9 + 14 13 -14 + 23 4 -2 + -3 -14 9 + 8 1 -6 + -18 8 -2 + -7 13 13 + 11 28 -25 + 11 1 5 + -1 6 -2 + 5 8 -2 + 8 15 7 + -11 -13 23 + 22 25 5 + 16 -2 -7 + -8 7 -10 + -15 -12 2 + 19 0 -5 + -9 20 -15 + 0 -2 12 + -2 -6 4 + -6 13 -2 + -20 -11 20 + -17 31 -6 + 30 -16 8 + -10 -2 -4 + 14 -7 12 + 2 -1 3 + -21 7 1 + 4 -6 -11 + 28 0 6 + 2 2 -6 + 10 2 -11 + -7 8 0 + 15 -8 11 + 10 22 13 + -6 -11 9 + 5 2 0 + -10 17 -23 + -1 29 -9 + 20 6 0 + -13 15 9 + 9 16 -15 + -8 -15 22 + -5 1 8 + 7 -14 1 + 3 -15 -12 + -6 7 11 + 20 -17 10 + -4 -17 -11 + -4 17 -4 + -6 1 0 + -10 -16 -11 + 0 1 7 + 24 -8 -26 + 5 5 -17 + -22 -21 -9 + 12 3 -11 + -15 -12 -11 + 10 -9 -14 + 4 1 -20 + -13 -4 -6 + -1 30 6 + -26 -11 -7 + -15 13 17 + -9 8 7 + -7 1 -11 + -3 17 10 + 10 -22 3 + 0 -5 13 + -11 14 -21 + 4 -9 -4 + -15 -7 4 + -11 2 -9 + -2 8 -17 + -3 -9 3 + 9 -3 -11 + -6 11 6 + 1 -2 -12 + 4 -16 9 + -9 14 -3 + 5 -13 -10 + 1 -9 3 + -2 4 5 + 16 -4 16 + 11 -25 12 + 16 -3 21 + -19 -9 18 + 18 -1 -2 + -9 -4 -7 + 2 -11 -9 + 8 -10 17 + 13 18 -19 + 15 10 -23 + -7 -3 -7 + 11 15 1 + 6 -6 -5 + -4 -10 2 + 11 -10 -7 + -1 11 11 + 11 7 3 + 13 -20 2 + 18 -7 -2 + 10 0 6 + 8 12 -2 + -1 12 -13 + -11 2 -8 + 5 -4 -9 + 12 10 1 + -6 -1 9 + -15 -19 15 + -14 -12 8 + 25 9 -16 + -14 14 -6 + 8 -7 -1 + -12 7 6 + -16 15 -15 + -14 -14 -11 + 8 7 -6 + -2 7 9 + 11 2 0 + 0 -11 10 + 0 3 -8 + -12 -5 -16 + 16 -15 -13 + 6 0 -6 + -11 -6 12 + 0 11 -5 + 20 2 1 + -23 -9 18 + -14 11 3 + 6 14 -14 + -7 4 4 + -15 2 12 + 9 6 -2 + -9 -11 1 + 5 5 19 + -1 9 -20 + 18 1 -1 + 0 -11 -3 + -19 -8 5 + 1 2 -15 + -11 1 1 + 4 0 4 + -11 -6 -10 + -16 5 4 + 0 -2 -3 + 10 10 -13 + -11 -9 9 + 5 6 -1 + -2 2 -14 + 8 -11 -2 + -4 -16 -24 + 1 21 -7 + -10 20 -4 + 0 -3 2 + 9 -15 -5 + -15 -10 5 + -23 -1 19 + -6 6 18 + -12 -2 -25 + -12 -3 18 + -18 -8 15 + -5 -1 26 + -10 -11 10 + 12 -1 -22 + -10 19 -1 + 16 -6 -1 + -10 -6 -10 + -4 -2 -16 + 6 19 7 + -8 -5 17 + -1 4 6 + -6 0 -3 + -9 7 -1 + 8 14 -18 + -14 -5 0 + -16 -22 9 + 3 10 19 + 0 5 -8 + -9 12 -10 + -3 2 -6 + -6 1 -21 + 5 18 11 + 7 -5 3 + 13 23 19 + -24 -15 10 + -20 -6 -5 + -16 -19 -20 + -7 -3 -12 + -12 -6 9 + 1 0 11 + -13 -7 -18 + 1 -6 -4 + -8 9 -1 + 13 1 -9 + 6 1 -3 + 16 6 -25 + -24 -14 -5 + -4 -2 12 + 3 -4 4 + 6 -14 -12 + -14 3 -7 + -2 17 5 + -21 11 7 + 2 19 -7 + 16 -18 6 + -10 4 2 + 10 -2 11 + 9 0 -5 + -10 -3 24 + 22 4 -4 + 8 4 -15 + 25 -23 4 + 16 -9 7 + 4 -27 -15 + 3 16 -8 + -9 -11 1 + 1 4 3 + -13 12 1 + -11 9 11 + 4 7 10 + -18 -4 1 + -3 -26 -24 + 11 2 7 + -12 0 -14 + -12 -2 18 + -2 -17 -7 + -5 -1 7 + -17 -3 -19 + 1 11 2 + -9 -4 -4 + -16 -7 -15 + 10 -8 -13 + -4 -19 2 + 10 8 7 + -1 -3 -7 + -6 -13 11 + -4 10 4 + -8 -2 -22 + -9 5 8 + 16 -5 8 + 28 0 -2 + 11 -12 -7 + 9 7 2 + 20 10 -3 + -8 3 -4 + 3 -15 9 + -6 6 15 + -26 1 11 + 14 20 13 + 16 -14 -2 + -13 -6 19 + 7 -5 16 + -2 -6 -18 + 8 12 -3 + 10 3 15 + 1 13 -2 + 2 -1 -18 + 9 0 -12 + -10 0 -3 + -10 17 7 + 11 -15 -2 + -9 16 -9 + 3 -4 -16 + -1 8 8 + -10 -14 -20 + -2 -4 6 + -15 -9 7 + -2 -6 -8 + 9 -16 -24 + 25 -11 11 + -10 -6 -10 + -11 8 -7 + -14 4 6 + -5 4 1 + 15 18 -23 + 11 -3 1 + 0 -12 5 + -13 4 7 + -10 -11 -16 + 1 -10 6 + -24 26 19 + -9 6 6 + 15 19 -25 + -8 -6 -5 + 17 -21 -14 + -8 17 -18 + -6 -1 16 + 18 -5 15 + 29 -14 -14 + -21 3 0 + 4 2 -16 + 16 -12 -12 + -9 15 8 + 6 -14 0 + 6 9 -20 + -4 4 7 + -3 1 8 + 13 13 14 + 4 -17 -9 + 13 13 -14 + 13 -18 -1 + 9 9 10 + 15 0 14 + -1 -13 -13 + 13 -10 -7 + -5 -8 -9 + 10 6 14 + 12 8 -1 + 2 7 -8 + -8 4 -10 + 12 -3 -6 + -3 18 -14 + 15 -5 3 + 6 8 -6 + -9 6 -2 + 18 3 18 + -22 10 16 + -14 -3 9 + 10 -5 11 + 0 -1 12 + -5 5 -10 + 15 -6 4 + -7 7 -16 + -5 20 21 + -13 15 -5 + -14 -9 5 + 1 -2 3 + 21 4 13 + 4 -1 -2 + 17 -20 4 + -19 -5 -10 + -12 9 -10 + 2 -10 18 + -7 -10 -21 + 3 11 -14 + 3 3 9 + -12 1 -2 + -17 0 -26 + 23 -6 1 + 4 -3 9 + 2 1 0 + -1 -3 -11 + -4 13 2 + -13 -3 -17 + -13 16 10 + -1 -14 19 + -12 -16 15 + 1 -3 10 + -7 -16 -6 + -3 16 12 + 3 8 2 + 8 3 -3 + -3 15 12 + -1 0 12 + -13 -20 -18 + -7 12 -9 + 4 -2 5 + 7 -2 14 + 9 -20 -17 + 0 -7 2 + 12 -17 -5 + 7 -13 -6 + 16 -27 -21 + 9 -12 6 + -5 -15 16 + -5 -5 -13 + -5 -15 5 + -1 8 -20 + -7 8 9 + 17 -19 7 + -13 -5 24 + 8 24 3 + 0 -2 15 + 8 2 -12 + 14 18 26 + -12 12 23 + -17 -10 1 + 5 -2 14 + -5 -1 14 + -13 -21 12 + -12 8 -9 + -3 -16 14 + -21 3 -13 + 14 8 14 + 19 -9 2 + -5 3 -11 + 19 19 -15 + 17 -7 -4 + 18 -1 12 + 24 -9 -1 + -2 -12 -21 + 4 -3 15 + 15 6 7 + 2 15 -5 + 15 -8 12 + 11 15 3 + -3 -10 -9 + -2 -5 7 + -8 -10 6 + 1 11 -15 + -13 -12 -3 + 12 0 13 + 13 0 -3 + -8 11 -12 + 2 5 15 + 3 -3 11 + -2 22 10 + -18 -1 -8 + -10 2 -14 + -8 8 10 + -10 -5 -2 + -2 -17 6 + -16 -9 9 + 18 2 16 + -7 3 2 + 3 15 5 + -2 -6 -3 + 14 6 -3 + 3 -17 -16 + 3 -18 -24 + 9 14 -8 + -8 -6 -2 + 9 -6 -2 + 1 -11 16 + -1 -7 -5 + 10 6 -7 + -12 0 -15 + 13 17 6 + 26 -17 4 + 4 -7 21 + 0 21 -5 + -5 17 16 + -8 -5 8 + 12 7 -10 + 0 -10 -11 + 1 10 -16 + 1 15 -6 + -8 2 5 + -5 17 -13 + -10 7 0 + -10 -9 1 + -16 -4 4 + 23 8 -6 + -9 -22 -16 + 4 9 -2 + -7 1 -11 + 1 22 3 + -22 20 -14 + 11 -10 6 + 15 -5 -5 + 19 19 11 + -14 -6 -17 + -5 -7 -14 + -4 3 14 + 4 -4 -29 + -19 -3 28 + 5 5 3 + 18 4 4 + 6 22 5 + -13 -2 -16 + 12 -6 5 + -2 4 24 + -3 -5 -4 + -8 -8 21 + -8 1 6 + 9 24 6 + 24 16 17 + 0 -4 -12 + 15 1 -11 + -6 13 -12 + -11 -15 -16 + -11 7 -14 + 0 10 16 + 9 -2 -1 + 24 -17 14 + 19 0 -10 + -18 -18 -3 + 11 12 -4 + 3 -19 -12 + 20 -3 13 + 9 -16 -8 + 7 18 2 + -13 1 -5 + -12 4 1 + 19 -3 -8 + 14 2 7 + -9 -6 -2 + -9 -1 -8 + 1 -10 -17 + 12 4 -1 + 14 11 -6 + 6 -22 -4 + -2 14 14 + 7 -4 -3 + -3 -1 -20 + 29 6 8 + -8 -13 -11 + -8 8 16 + 4 -8 -3 + 0 -16 6 + 13 -15 -1 + 14 -10 27 + 3 3 -22 + -14 -10 9 + -13 1 14 + -10 21 -3 + 15 9 10 + -7 -8 3 + -19 -20 6 + 5 5 -6 + 9 -9 -18 + -19 -8 -7 + 4 7 -6 + -8 -22 9 + -16 -2 7 + 6 4 3 + -3 27 16 + 14 -6 14 + 6 0 -13 + -7 -2 2 + -5 -9 -9 + -5 9 6 + 7 5 -4 + 0 12 10 + 2 16 4 + 4 2 16 + 1 16 -19 + 0 5 11 + 19 -14 -2 + 8 -3 -14 + -3 -3 -11 + -21 -12 -9 + 14 -8 17 + -10 -6 17 + 6 3 -11 + 3 7 9 + -4 7 -5 + 9 12 10 + -4 1 -11 + -4 -6 3 + 13 4 10 + -2 13 1 + 2 9 0 + -14 -10 -11 + -10 23 10 + -12 -17 -8 + -16 -10 5 + -1 -14 15 + 5 10 9 + -9 6 -3 + -8 -5 1 + 4 17 -11 + -8 27 -3 + 12 -9 -20 + -2 -18 -8 + -19 1 -10 + 6 -10 7 + 1 -8 15 + 10 7 8 + 20 -19 -8 + 7 -14 12 + 3 -13 -5 + 1 6 -5 + -15 2 -6 + 24 0 26 + -9 -11 3 + 9 8 9 + -5 -1 11 + -15 4 3 + 6 -7 -13 + 5 -14 11 + -4 -10 17 + -8 13 -8 + -12 6 -23 + -6 3 2 + -14 -16 -7 + 17 17 10 + 16 10 -2 + -12 -8 -13 + -15 2 -1 + 8 6 -15 + -12 -13 7 + 1 1 -10 + -3 -5 6 + -6 -8 -4 + 7 7 -3 + -7 4 -4 + -1 -1 -7 + -3 -5 18 + 9 -15 -11 + -4 -18 13 + -13 9 7 + 0 -21 -23 + 8 11 8 + 9 10 2 + 5 10 1 + -1 -14 13 + -19 -3 -4 + 17 2 -17 + 14 -8 3 + 18 -11 8 + -31 1 -11 + -16 6 28 + -12 11 11 + 1 -11 -10 + -14 8 -6 + 13 18 9 + 3 0 -13 + 11 13 -6 + -19 11 -18 + 8 -19 12 + -16 15 3 + -13 -9 2 + -11 15 4 + -20 -19 31 + 9 -14 19 + -1 17 -12 + -15 -3 7 + -10 -20 9 + -13 8 -6 + -7 -10 -4 + 8 -4 -3 + 20 16 -14 + 13 8 5 + 11 -7 4 + 11 5 12 + 7 9 6 + -23 -3 -10 + 5 7 10 + 14 -9 15 + 11 6 -2 + -10 -8 7 + 10 -1 -9 + -8 10 -26 + -20 18 -11 + 1 5 -17 + 0 9 1 + 7 18 -1 + 5 24 -3 + -6 8 -15 + 9 -17 2 + 17 2 -15 + 7 -23 -1 + 17 -17 -24 + -1 16 15 + 0 22 9 + -19 8 4 + -14 -4 -8 + 5 -12 24 + -8 -5 -19 + -6 -10 13 + 15 -14 -12 + 6 3 -4 + 9 -14 -3 + -16 -8 -3 + 6 -13 16 + 19 9 0 + -9 -1 11 + 5 6 12 + -12 2 20 + 5 11 -9 + -25 -5 -8 + 3 11 -10 + -15 3 11 + 8 -8 -4 + 2 25 -19 + 14 0 -11 + 6 10 1 + 10 7 17 + 7 -26 -11 + 2 1 8 + 8 6 1 + -1 -3 12 + -11 18 -1 + -1 15 -17 + -15 12 11 + -25 -1 6 + 18 0 17 + 6 9 17 + 11 17 -12 + -28 -21 -21 + 10 -16 9 + 22 -11 -9 + -12 -6 -6 + -6 -15 23 + -21 18 3 + 7 -3 -9 + 4 7 -9 + -16 12 -11 + 3 -11 -10 + 4 16 7 + 8 6 -6 + 10 -4 -5 + 9 17 -4 + 13 8 -14 + 10 1 -4 + 13 10 21 + 9 0 -18 + -3 -13 14 + 1 -5 -22 + 8 11 -11 + 6 9 9 + -17 8 -8 + -3 -7 -12 + -9 20 -3 + 1 -6 11 + -5 -13 -11 + 19 -11 8 + 7 9 10 + -16 -4 -3 + 8 20 0 + 5 19 -17 + 13 -15 9 + -17 -9 -12 + -9 -18 -1 + -16 10 -3 + 12 10 -5 + -3 -1 -3 + 3 11 -4 + -1 -3 16 + 2 1 6 + 8 1 -8 + 10 -4 -18 + 16 -7 7 + 8 -29 -6 + 4 -20 -31 + 9 -5 -22 + -8 4 -6 + -23 12 10 + 9 -2 -16 + -4 3 -12 + -2 -17 4 + -11 -19 1 + 30 11 10 + -11 -16 -9 + 18 -7 -10 + 19 2 -12 + -13 4 -18 + 6 -14 14 + -9 -7 -11 + -7 4 2 + -22 -12 -5 + 10 16 4 + -10 5 -4 + 2 3 9 + -4 12 3 + -4 0 -9 + -24 3 -17 + 18 -15 11 + -8 -5 -9 + -2 -3 24 + 1 -7 -12 + 12 15 2 + 3 12 5 + -5 0 14 + -11 5 -3 + -11 7 13 + 15 3 -11 + -3 4 -2 + 4 18 -15 + 11 17 3 + 13 -21 7 + -6 -6 -7 + -8 -14 -2 + 4 2 -5 + -4 -5 0 + 9 -13 -8 + 11 10 9 + -2 -4 -3 + -8 20 20 + 11 5 10 + -3 -4 1 + -9 22 -3 + -17 11 2 + 17 -11 -3 + -24 17 -7 + 8 -24 12 + -1 -9 -22 + 8 6 6 + 17 14 -3 + 3 -16 -23 + -14 -16 0 + -15 -14 -5 + -1 11 -2 + -10 -8 11 + 1 5 18 + 12 10 -9 + 8 -18 21 + -27 14 -1 + 7 9 3 + 6 10 0 + 18 -8 10 + 21 2 -16 + 7 -4 1 + 10 30 17 + 12 -7 -18 + 9 9 7 + -9 8 -6 + 4 8 11 + 1 7 -12 + 15 -10 -9 + -1 20 8 + 11 1 -2 + -13 1 -8 + 26 26 -2 + 15 -12 14 + 3 14 -23 + 11 5 3 + 10 19 1 + -2 -18 0 + -11 11 3 + -7 -7 -11 + 9 7 6 + -26 22 -13 + -11 1 7 + 1 -12 -17 + -2 -1 -22 + 5 17 -15 + -1 1 -8 + -27 -4 14 + 11 -4 -13 + -4 -25 11 + 2 8 -6 + -3 14 -5 + 8 6 -17 + -5 0 -6 + -6 2 -16 + 12 -9 11 + 19 -1 11 + 4 14 -9 + 8 13 -11 + -14 6 2 + -18 11 -8 + 1 6 -5 + 16 -6 6 + -17 3 15 + -1 -11 -4 + -13 -4 5 + -9 9 -5 + 5 -9 16 + 8 -16 -12 + -9 -22 -15 + 5 -5 7 + 4 -7 3 + 6 1 21 + 14 -14 -13 + 1 -18 11 + -7 8 19 + 16 -5 19 + 10 15 -2 + -1 -13 -8 + -19 12 -9 + 3 16 4 + 12 3 -7 + 6 -6 18 + -10 -6 -18 + 5 -5 10 + -12 -12 -9 + -5 -7 -1 + -8 1 -4 + 13 17 5 + 10 23 14 + -1 -2 0 + -12 -12 0 + -1 8 -20 + 21 3 -6 + -10 2 -3 + 16 -10 -14 + 3 -13 -3 + 6 -1 3 + 2 -6 9 + -17 -16 -10 + -4 3 -9 + -3 -7 -7 + 9 5 -10 + -13 1 6 + 3 10 -15 + -20 -5 11 + 6 6 -4 + 5 -13 -2 + -9 -12 0 + 3 -16 12 + -2 -10 -6 + 0 16 13 + 22 -4 -26 + 22 -5 4 + -6 19 12 + -15 -8 16 + -6 23 12 + -18 7 -8 + 14 -9 12 + 5 13 18 + -18 -15 11 + -18 4 1 + -4 -6 -6 + -9 8 -18 + -9 -2 -17 + 9 -14 -9 + -20 17 -15 + -13 7 -13 + 11 25 -4 + 4 4 -3 + -4 -12 -13 + 18 -6 4 + 7 -8 4 + 13 -13 -27 + 7 31 10 + 20 -21 -6 + -14 1 13 + 6 -5 8 + -14 -6 -8 + 11 9 -10 + 2 -4 4 + 23 -7 16 + 5 -1 9 + 18 8 12 + 11 4 3 + 7 -6 -10 + 10 7 6 + 6 19 -17 + -26 10 5 + 4 -5 7 + -7 -14 -4 + -9 5 -12 + -6 9 16 + -9 5 22 + 7 6 -12 + -9 12 5 + 11 -3 4 + -15 -10 4 + -11 -19 -8 + 6 15 4 + 2 0 -24 + 21 10 -15 + 14 -19 14 + -10 0 9 + -8 2 14 + -13 -12 13 + 12 -20 -6 + 15 -19 13 + 17 11 -7 + 8 21 -2 + 15 9 -1 + -7 9 2 + -3 1 -6 + -11 4 3 + 5 15 0 + -7 -2 10 + -16 -20 8 + 3 8 10 + 19 -20 -1 + -15 -10 -7 + 8 -16 1 + -15 -11 -17 + 11 13 -7 + 4 9 10 + -1 -6 -13 + -8 -7 -6 + -3 14 13 + -2 4 4 + 10 -23 -10 + 14 22 -19 + 12 -8 -13 + 9 -5 9 + -10 0 -7 + 1 -9 -12 + 0 8 1 + 3 7 7 + 8 2 7 + 6 -3 -24 + 3 -12 -14 + 16 1 2 + 13 -14 15 + -7 11 15 + 3 9 -7 + -3 11 7 + 3 -26 -3 + -17 11 13 + -20 -10 -13 + 12 10 -1 + 13 2 -17 + 2 -7 2 + 14 -5 -1 + 2 -2 8 + 13 24 -2 + -4 -18 -9 + -13 9 17 + 5 7 -4 + -21 1 -10 + -27 -16 17 + 3 0 12 + 8 4 3 + 5 -22 5 + -5 9 -10 + 15 13 15 + 10 -6 15 + 6 9 -15 + 9 9 10 + -6 11 11 + 9 15 3 + 4 -12 -1 + -20 5 -20 + -16 30 -5 + 6 7 0 + -16 6 14 + 2 0 1 + -10 4 -16 + 9 1 -16 + -9 -10 -3 + 21 18 8 + -17 11 -12 + -13 7 23 + 4 -7 21 + -1 16 20 + 1 -4 15 + -20 12 -8 + -2 11 -14 + -2 -6 10 + -13 -12 12 + -4 15 -12 + 6 2 15 + -8 -6 -3 + 28 -9 4 + 5 -11 -14 + -11 -9 -6 + 3 13 3 + -17 -4 -7 + 3 -9 16 + -7 15 23 + -1 -11 -16 + -10 -7 8 + -11 17 15 + -2 -10 -15 + -10 7 -17 + -15 16 20 + 12 -1 -7 + -8 -1 -10 + 0 -13 12 + 7 -5 1 + -9 5 8 + 1 -6 1 + 21 6 -3 + -5 8 1 + 7 -21 13 + -19 14 -9 + -3 4 -2 + 0 -18 18 + -10 4 4 + 10 -7 6 + -7 -2 -2 + 8 -13 10 + -9 9 -18 + -17 10 1 + -9 9 10 + 1 9 -3 + 30 12 -3 + 8 8 5 + 3 0 8 + -2 -1 -3 + 11 -2 12 + 7 -10 14 + -5 9 -7 + -6 -5 -13 + 16 8 -12 + -19 17 29 + -8 -4 12 + 5 4 -6 + -2 14 -15 + 19 -6 2 + 16 -9 21 + -23 -2 -19 + -11 18 1 + -12 11 22 + -1 16 -2 + -3 9 -5 + 2 10 -1 + 4 19 2 + 4 16 -1 + -2 0 -25 + 2 11 -6 + -12 15 -8 + 16 10 -2 + 5 0 -5 + 2 -6 -3 + -4 20 -3 + 8 -7 -4 + -7 -1 10 + 10 3 -9 + -26 -24 -10 + 9 -4 -14 + -21 8 14 + -5 13 4 + -19 21 -2 + -5 -11 11 + 0 -11 9 + -3 13 -6 + -20 8 20 + 9 3 -22 + -4 -17 -10 + -14 -14 -9 + -7 -5 19 + 8 17 13 + -11 8 8 + -12 6 5 + -3 -10 -16 + -10 6 20 + -9 18 -16 + 31 -7 16 + -19 5 16 + -11 -5 -15 + 11 9 6 + -13 10 3 + -13 -18 4 + 5 -21 7 + 11 -1 18 + 13 -5 20 + -2 8 -12 + 3 -1 -16 + 4 -5 -9 + 19 -8 -6 + 3 -8 26 + 0 -9 11 + 15 9 -12 + -17 -7 9 + -8 -1 -20 + 8 -29 -24 + -16 13 -12 + -2 4 14 + 16 8 4 + 15 -2 -11 + 12 16 -12 + 14 6 -5 + -3 -4 -16 + -20 10 -3 + -12 0 5 + 0 -9 -6 + -17 -7 -11 + -2 -12 -27 + -9 14 15 + -9 2 8 + -19 0 4 + 2 1 11 + 10 15 3 + -11 -14 15 + -12 -6 8 + 3 6 20 + 7 -8 11 + -3 10 11 + -9 2 8 + 9 10 16 + -11 -12 1 + 26 15 3 + -3 -1 10 + -1 -7 3 + 2 0 11 + -2 -2 -18 + -19 -3 -4 + -16 -9 13 + 1 1 12 + 21 7 -10 + 28 -4 9 + -4 1 -5 + -12 -1 17 + 18 9 17 + -4 -12 -9 + -1 2 -2 + -7 -13 -5 + 15 -8 7 + 9 -4 -5 + -9 10 12 + -1 -12 10 + -9 12 19 + -24 8 -9 + -13 12 19 + 30 8 -26 + -2 -7 -14 + -6 -10 -1 + 7 -1 1 + 9 -6 -16 + -2 16 -15 + -7 3 -2 + -11 -20 -8 + 10 12 4 + 17 10 5 + -12 -18 16 + 12 -15 -5 + -8 7 23 + -8 -9 -2 + -2 -11 7 + 6 15 -6 + 6 0 20 + 3 5 -8 + 10 4 -20 + 21 2 17 + 17 6 -19 + -11 4 17 + 16 12 10 + 16 -9 15 + 7 -4 -16 + 14 8 12 + 13 22 -14 + -6 -14 -15 + 5 -14 6 + 20 30 18 + -11 19 22 + -4 -7 -10 + 6 7 -14 + -12 1 -7 + 0 -15 5 + 7 8 -3 + 10 -16 9 + 4 8 13 + 3 -15 -9 + 15 -15 -12 + -11 -5 -14 + -7 2 15 + -12 2 -10 + 0 -10 14 + 8 -4 3 + -2 -3 6 + 2 -23 3 + 7 -19 -28 + 8 -14 8 + 0 -22 17 + 13 24 22 + -17 -15 -7 + 10 -6 13 + 14 -12 -3 + -9 -6 -27 + -13 12 8 + 14 16 -21 + -14 -24 5 + 10 -9 -1 + -5 -7 2 + 15 24 3 + 8 7 -17 + -5 2 2 + -3 -3 -15 + 0 8 -3 + 0 -18 1 + 9 5 -7 + 16 -7 8 + -13 -7 4 + 14 8 14 + 1 0 -3 + -18 -22 15 + -22 6 5 + 8 16 -10 + 15 3 -7 + -16 11 -14 + -6 10 -8 + 19 -6 -6 + 2 -15 -12 + -2 -10 5 + -1 -3 -7 + -2 -1 10 + -15 -5 -2 + 6 -19 -5 + -6 16 -28 + -11 4 -11 + 1 13 -14 + -13 6 7 + 3 12 -12 + 10 -9 13 + 8 -12 5 + 22 -8 0 + 0 -2 -15 + 22 -1 11 + -8 -10 22 + 14 15 18 + -15 -8 -5 + 2 0 12 + -11 -8 17 + -17 8 -1 + 12 0 -1 + 3 14 -5 + -7 4 -23 + 7 -6 -15 + 9 26 -19 + -10 0 -9 + -14 11 14 + 19 15 8 + 7 -4 -1 + -4 -1 11 + 0 -16 4 + -12 7 -13 + -8 8 3 + 1 6 -14 + 7 10 -5 + 0 4 14 + -10 2 10 + -24 -8 3 + -11 -3 -9 + -3 0 1 + 21 11 -4 + 19 -17 7 + 2 -1 0 + 14 -9 -17 + -4 15 3 + 16 12 1 + -17 7 6 + 23 3 12 + -9 -6 0 + -5 -17 26 + -27 16 20 + -4 -5 19 + 12 4 16 + 20 0 -20 + -15 -17 13 + 7 8 -1 + -5 -5 18 + 22 -10 -8 + -7 0 -4 + 1 -3 -17 + 17 -15 -6 + 11 -2 -2 + -18 22 21 + -12 -3 9 + 12 10 12 + -10 3 -1 + 11 11 -2 + -6 -12 5 + 17 13 -19 + 3 -4 13 + -15 9 13 + 5 -3 -10 + -8 11 11 + 14 1 1 + -17 26 -2 + 1 17 12 + 17 0 -15 + -4 -12 -20 + -21 10 8 + 18 8 12 + 6 2 8 + -8 21 -26 + 5 -9 -12 + 13 7 -1 + -27 -17 -11 + -21 -2 0 + 12 11 0 + 8 16 -13 + -17 9 -6 + -11 3 12 + -13 19 -13 + -15 -7 -31 + -15 6 1 + -7 17 9 + -12 -14 4 + 6 -6 20 + 22 2 -18 + 12 -12 -18 + 24 -10 12 + 16 -11 9 + 4 -4 -8 + -1 14 3 + 9 -16 5 + 5 23 -2 + 5 -5 -1 + 24 7 8 + 16 -16 4 + -2 3 -20 + -14 9 -13 + 20 -3 -12 + 12 20 -6 + -22 -9 -12 + 7 -31 15 + 1 -5 -6 + 10 -7 -9 + -8 6 7 + 0 -6 -11 + 13 -25 2 + -15 1 -20 + 0 6 -10 + -6 3 -3 + -9 -6 -21 + -9 14 -3 + -18 7 17 + -16 19 8 + 12 -1 15 + 3 17 -20 + -11 -8 1 + 4 -12 6 + 15 8 2 + -15 4 16 + 13 -3 10 + 0 -9 23 + -2 2 -25 + 10 -11 9 + -4 8 0 + 16 12 8 + 22 5 -16 + 8 24 -22 + 12 2 12 + 21 -12 16 + 1 4 -14 + -4 20 -3 + 0 9 4 + 5 -11 3 + -24 11 8 + 1 -6 -5 + 9 10 1 + 9 2 10 + -4 -18 -12 + -22 14 5 + -16 -8 -9 + -8 3 -8 + 1 -11 14 + -9 -4 -7 + 3 -11 21 + 12 -1 14 + -20 21 -7 + -5 -9 0 + 18 -5 5 + 21 20 -2 + -19 20 -10 + -14 -13 -8 + 24 -13 1 + -11 -8 24 + 3 10 -7 + -11 -12 7 + 3 5 -11 + -1 21 8 + -31 6 12 + 9 -3 6 + -9 -10 -12 + -4 11 -8 + 9 6 1 + 3 12 -4 + 0 -11 -4 + 8 -11 27 + 8 15 5 + -4 -24 13 + -5 2 0 + 5 4 -13 + 13 -14 -14 + 15 2 14 + -6 0 -9 + -13 2 20 + 13 14 -10 + 14 -16 2 + -17 -9 5 + -1 -5 -14 + -13 8 5 + 24 8 8 + -4 15 7 + 6 -7 -7 + 19 7 -5 + 7 -9 6 + -4 -9 18 + 1 -7 8 + -5 -3 1 + -8 10 -10 + -7 8 17 + -6 22 -20 + -5 -4 -10 + -8 13 12 + 26 15 9 + -3 -7 14 + 4 -16 -11 + -13 16 -26 + 8 -9 -1 + -8 -24 -9 + -3 19 20 + 20 -1 6 + 5 4 2 + 10 -1 -5 + -16 -13 -19 + -16 0 2 + 9 -20 4 + 3 -3 11 + 5 -16 -14 + -6 3 0 + 7 4 4 + -4 -7 -6 + 7 16 -15 + -2 -6 -7 + 6 6 5 + 9 -12 -11 + 5 11 -8 + 12 -7 31 + 9 -21 -9 + -5 -2 -11 + 7 3 21 + 6 -8 -25 + 6 7 4 + 2 -1 10 + -6 -16 17 + -7 0 -9 + -2 6 0 + -2 -8 1 + -7 9 16 + -8 8 -8 + -12 17 1 + 13 -13 -16 + -14 0 -8 + 13 -22 -1 + -7 -1 -15 + -13 4 11 + 0 -7 10 + 5 8 7 + 2 10 24 + -13 -8 18 + 12 -11 -19 + -11 5 9 + -10 -11 -5 + 20 1 -4 + -6 20 1 + 8 19 -7 + 17 20 2 + -7 -10 8 + -8 11 -1 + 12 -3 5 + 5 5 -8 + -11 4 -9 + -9 27 11 + -3 -2 5 + 8 5 12 + 17 -21 20 + -21 8 -9 + 12 -15 -10 + 13 13 18 + -5 -11 -1 + 17 0 -14 + -3 7 -11 + 8 11 -3 + -4 3 4 + 14 3 -3 + -13 -13 0 + 3 4 7 + -5 11 -12 + -20 8 11 + 6 -15 -22 + -3 10 8 + -14 9 3 + 6 -14 10 + -4 13 4 + -5 11 7 + -5 -2 -15 + 0 2 2 + 6 18 -10 + 7 -3 -7 + 12 -12 -20 + 13 -19 23 + -4 19 -1 + -5 -11 0 + 14 -7 15 + 5 -21 -7 + -1 20 -9 + -11 -2 9 + -3 2 8 + -10 -11 6 + 23 8 -13 + -20 10 -13 + -1 3 25 + -1 -1 16 + -11 10 -4 + -7 -12 4 + 3 -17 5 + 6 -10 16 + 3 6 31 + 3 -24 -3 + -16 -11 -3 + -15 4 3 + 3 -3 -11 + 12 13 3 + 2 -24 25 + 0 22 1 + 1 -12 0 + 17 -8 10 + 10 11 0 + -2 8 -18 + -10 -12 -4 + 16 20 -8 + -11 10 5 + -10 9 2 + 2 -2 -18 + -10 2 -18 + -7 -7 -1 + 12 -12 14 + 21 13 -12 + 8 21 -7 + 2 5 19 + -1 0 -12 + 13 -11 10 + 5 -5 -10 + 5 -13 -23 + -1 -10 9 + 6 1 8 + 5 9 3 + -3 3 2 + -19 14 27 + 4 10 8 + -11 8 15 + -10 5 -3 + -16 10 -4 + -31 2 -2 + 16 2 -20 + 16 -11 15 + -7 -10 6 + 21 -5 11 + -12 -15 15 + -18 -2 -7 + 4 18 -5 + -1 3 -1 + 7 0 11 + -21 -14 -12 + -12 -4 -5 + -14 8 -1 + 4 22 1 + 10 4 -21 + 3 0 -9 + 26 5 -10 + 5 -11 -8 + -10 24 2 + 3 -9 4 + -2 10 -6 + -3 -6 -7 + 12 -8 -11 + -10 10 13 + 12 11 -16 + 6 -5 18 + 8 16 -3 + 3 -3 7 + -10 -5 -4 + -3 5 11 + -15 -16 2 + 4 -3 1 + 6 -15 -4 + 0 9 -8 + 14 6 -16 + 10 8 7 + 11 9 -8 + 11 3 -15 + -8 -17 -24 + 11 -8 2 + -10 13 -9 + -13 -9 0 + 3 -3 -10 + -11 -9 13 + 8 6 -17 + 30 7 -15 + -9 -22 0 + -1 15 13 + 4 -11 -8 + 3 3 -7 + -3 18 -14 + 9 -5 -3 + 23 3 -10 + 13 9 11 + 0 -9 -3 + 7 10 14 + 10 13 5 + -8 -6 17 + 17 -3 -7 + 5 -3 -4 + -19 9 -10 + -2 3 -4 + 11 6 -4 + 1 -14 -15 + -3 8 0 + 8 -1 6 + 11 18 -6 + 9 3 3 + 2 -4 -25 + 13 -1 1 + -23 -5 -14 + -12 -2 -7 + -1 6 23 + 4 7 -2 + -21 5 -14 + 13 -7 -10 + -4 4 -12 + 13 -19 5 + 7 5 0 + 3 -5 -5 + 0 1 -3 + -8 0 5 + 8 -12 -6 + -11 -5 -8 + 11 -14 -2 + -14 -19 -6 + -10 28 -14 + 1 7 -4 + -16 6 3 + -2 5 -10 + -9 -8 -20 + -9 -5 1 + 4 16 -14 + 22 -1 -13 + -14 -1 3 + -7 -7 1 + -1 -2 -2 + 11 6 3 + -15 -7 0 + -3 -12 12 + -2 -4 6 + 7 1 11 + -6 12 -4 + 2 -13 -21 + -14 -24 17 + -7 12 -7 + -2 -2 -11 + -7 25 -3 + -1 9 8 + -2 -7 5 + -5 13 -13 + -2 15 10 + 23 6 15 + -18 6 10 + 1 4 -8 + -2 8 3 + 25 12 -6 + -5 1 -6 + -4 2 9 + 22 -8 -10 + 14 10 -8 + 1 1 6 + -5 12 -24 + -8 -20 -6 + 13 -4 -3 + -7 -6 13 + 4 -7 13 + -5 -3 -11 + -16 -2 -18 + 7 9 8 + 0 0 8 + -2 -6 -18 + 0 3 11 + -3 0 -10 + -12 14 14 + 1 -1 -13 + -6 -6 1 + 4 -4 13 + 7 6 3 + -5 13 8 + -6 -7 8 + -15 8 -15 + 4 10 11 + 16 9 17 + -17 7 21 + -7 8 -3 + -8 -13 -6 + -17 -16 -2 + 9 -9 -24 + 14 -14 -21 + -8 4 -17 + -7 7 -10 + 1 2 4 + -10 11 0 + -16 -12 -14 + 24 -14 -8 + 13 14 13 + 2 3 8 + -8 18 11 + -5 -8 6 + 3 17 4 + -3 4 11 + -10 26 9 + 0 9 0 + -12 1 -9 + -13 2 1 + -8 3 10 + 12 22 19 + -5 -5 -12 + 4 -9 -18 + 13 0 7 + 17 -17 1 + 18 6 18 + 5 -14 1 + 9 -14 -6 + -2 -2 -6 + 13 17 1 + -5 -9 6 + -10 -17 -10 + 2 6 -4 + -10 7 -13 + 14 -25 17 + -12 -12 2 + 4 -13 11 + -8 -9 -11 + 15 4 -17 + -20 -26 15 + -10 2 -2 + -7 -1 13 + 5 18 -8 + -22 10 -14 + 23 -11 -21 + 12 5 -8 + 2 0 12 + -12 6 -10 + 21 4 -4 + 10 -8 8 + -8 -7 7 + 18 1 0 + -14 -9 11 + -9 -10 13 + -6 7 -17 + 9 22 -12 + 24 -1 -4 + 10 9 -7 + -7 6 -7 + 5 -5 -2 + 1 -15 13 + 13 13 -11 + 5 -4 -1 + -3 -8 -9 + 12 -5 0 + 10 3 -10 + 19 8 22 + -18 13 -3 + 22 -8 21 + -3 17 14 + 3 -26 7 + 6 19 -10 + -9 12 -5 + 13 -15 5 + -22 6 -19 + 15 -12 0 + -5 -14 23 + 12 11 10 + 1 -5 3 + -4 9 21 + -9 -22 -13 + 19 -19 -12 + -2 14 -6 + -12 3 12 + -6 -16 -6 + 18 -17 -4 + 3 -29 -10 + -21 -20 9 + 10 -10 15 + -6 12 12 + -10 -13 -2 + -8 -12 18 diff --git a/example/testvectors/wcdma/block8_soft_dec.bin b/example/testvectors/wcdma/block8_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..99dadab4cd104e27a458004569064a315803238d GIT binary patch literal 6000 zcmeH|%aYnK6h!l*S!a=|K*I2}@vVy=81Mv0RTlZ%oNh5y`GagMgDl;*S}i%wbr%_t z`-nC(8DB!J)40wiGFKVBY_N(rBhZNMIPiKTen%|wgnL%#&e^ui72ufp7FCs7JR~_G zll(xR#8OgA9Fd&6s1TFRFtQA7j4AOVy&XjQ1DYs@*GsbdYe%a zSGR13Jd=YskzL$l`#w4a5>}y{(&Q4GQh_jK6VJ@Ea-k}|!aAyC-J*f(prVovg6!jH zLn7cUGU1wo%`rZFRON``6`SPHd*Kyeyoea!o4VU&Vn~f#vUez(uPN`8-Y)h>Z>gEsRQl0x8&zp>Wd>geF zex#s%_$d*)cFw-YnNp@=dKEU5-}-937;5~GiK8&r^ePeMgKr!nWaJ>nqO!&zH0N*N zd+3?l8-^YG7KiS^K>^k!6A_78$YYP`NQvUTRX^n3bK)UwAVXFT^aVTblMo6K&AS{J)kWRmpV==Lv02dUyMfx%1Bx1?vDPs zNOXHJf;l*_98RZf)*KHGeZV?f({n;$sv^;|Xdd|AKpIqVy-GIFN6$ot^mdiGEE+{n z68`dWr%AE0Mh5ln0*IQ*YYbS=P%o|+@m>6u6N4J?$Pz2;myjs3YEV0tOk&;Z5az04 zfg#q|n3ehNd$RVo*7wTfn9{2T+bOA>c|d}v6|%0v31lf7niynbAdJ{hs_#;nahq$8 z;2X_%n=T%CI*7d(zv%Eq)$h+6C6-kjSQKkk+px912koQVS%?1?apTG!bz#<9hXt9h zsyE|%F-67Tr)1@k5*7f;<>?flB-xQqiYSJ82VhhE)L7q{vPO2NY`5Z}8q_hS<-Hub zt3Oer;I@gsFUMHlng6pjKC2&hKATG*r}8aYiYX$-EKK)|^u&BwHifqcuELmBbi6t) z6w{j5pgPLe&yFa34fU=id)-3t3QB4aRXJb!`m$F3eJ*plewy2iz>L6*z>L6*z>L6* Wz>L6*z>L6*z>L6*z>L6uN8m4h2j{;4 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block8_soft_dec.dat b/example/testvectors/wcdma/block8_soft_dec.dat new file mode 100644 index 0000000..9bbcde9 --- /dev/null +++ b/example/testvectors/wcdma/block8_soft_dec.dat @@ -0,0 +1,2000 @@ + 127 0 0 + -121 0 0 + 124 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -112 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + -125 0 0 + -125 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + 123 0 0 + 123 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -122 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -117 0 0 + -127 0 0 + -125 0 0 + -122 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -113 0 0 + 127 0 0 + 119 0 0 + -115 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -126 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + -127 0 0 + -117 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 111 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 111 0 0 + 111 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 111 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -123 0 0 + -120 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + 112 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 118 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 116 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 116 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + -107 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + -112 0 0 + -122 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + -114 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 121 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -111 0 0 + -127 0 0 + -127 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + 111 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 117 0 0 + -127 0 0 + 111 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + 124 0 0 + 111 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + -116 0 0 + 119 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 117 0 0 + -124 0 0 + -122 0 0 + -125 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 122 0 0 + -113 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -116 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 118 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 115 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + -125 0 0 + 126 0 0 + -103 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + -120 0 0 + -121 0 0 + 118 0 0 + -127 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + 110 0 0 + -120 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + -121 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 117 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + 119 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -116 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + -117 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -124 0 0 + -121 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + -124 0 0 + -112 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 117 0 0 + 112 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -116 0 0 + 125 0 0 + -127 0 0 + -123 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 114 0 0 + 125 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + 127 0 0 + -124 0 0 + -127 0 0 + -119 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -119 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + -127 0 0 + 120 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -111 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -112 0 0 + 127 0 0 + 116 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -120 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 124 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -123 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -110 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -120 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -113 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 93 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 117 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 121 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -124 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -124 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + -127 0 0 + 117 0 0 + 127 0 0 + -127 0 0 + 115 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 120 0 0 + -119 0 0 + 127 0 0 + -120 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -120 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -119 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 112 0 0 + 127 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 123 0 0 + 126 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 117 0 0 + -123 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 115 0 0 + 123 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 115 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -111 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + 116 0 0 + -125 0 0 + 127 0 0 + 111 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -116 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 122 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -119 0 0 + 127 0 0 + 127 0 0 + 118 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -126 0 0 + -123 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 122 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 103 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 121 0 0 + -121 0 0 + 118 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 122 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 118 0 0 + 127 0 0 + -124 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 120 0 0 + 127 0 0 + 122 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -117 0 0 + 127 0 0 + 127 0 0 + -117 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + -120 0 0 + -124 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 119 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + 107 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 113 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -114 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -113 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 126 0 0 + 127 0 0 + -119 0 0 + -111 0 0 + 127 0 0 + 122 0 0 + 121 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 125 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -120 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + -116 0 0 + 124 0 0 + -111 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 125 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + 123 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -122 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -113 0 0 + 124 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -118 0 0 + -123 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -120 0 0 + 126 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + -127 0 0 + 125 0 0 + 127 0 0 + 117 0 0 + -113 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -125 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 126 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -118 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -124 0 0 + 118 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + -126 0 0 + -127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -122 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 124 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -127 0 0 + 119 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 127 0 0 + -123 0 0 + -126 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + -123 0 0 + 120 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + -121 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + 123 0 0 + 127 0 0 + 127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + 123 0 0 + -123 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -127 0 0 + 127 0 0 + -125 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + 124 0 0 + -127 0 0 + -127 0 0 + 127 0 0 + -123 0 0 + -127 0 0 + 112 0 0 + -127 0 0 + -116 0 0 + -118 0 0 diff --git a/example/testvectors/wcdma/block8_status.bin b/example/testvectors/wcdma/block8_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..61c8b23a8e00b679f7fd772fdc0618eee6990e4e GIT binary patch literal 12 TcmXReVc艿Ó:‘‚ÙB§g%tFE?Mr&EeCM(vod@rDo!Po_tdarmEQC#6;;G6z-|eTKnz!5}(ne>5;O7fZv%+ zycAEVL#ATAG3DH#FeEM8BHy>kiy9&Z8}lXBYS~r5kFPa@$3`Hw1Gy zuS<%790mH(0JZz!nE-;c#o-pZONtbs#XEMqM7O|h@Vq8<0#_3z= z9mHa=KS}?hXA*A-Yut8kX{k}IV`U*OqMdM+nBCIQ$vIUsme!5EBJpEsZej zH)q#gLw!Q}P9C(|a8Z>)I5E_ou0RU>4461RlT-DF!#%MlkEOK)#B@TKWf@obSnROH zihXNs03r}z8$)93w7dQOcbX6*pr>3Au~(0+RcAiKQ5YA-jTV-u34&#`OB+3RIm#Ua zA=f&>)crFMh)S%Z80O!1S3`!SAn~}zt(9gUV&`0)LH3*SsT_7|Mes~`G@yxGEU#&x zj9#-CJm7q7=xZ{I17$9S@-Ivja#pbly-*+!N9YE~h?+aBcOm(u3W?fjc2nf7xP7gn z5BolCS{;5p=99ms z(=n$e>FdW!fglR6<26PyAux^u}U<6 zg{ygFEkQn9cN{Zl;0Sg*-4DG~iG_5L5c;Xu$=})>rWq~2kX&Hd$ER#&CYUuOcHxa- zA4C1(4axkN@BQW&3m7&&!m=zI1j+$eoWZ?#rn~Fs-vsJWyu~0Y)D>ImgB`Fn^XX_c zDOqjnO|!5xAkfDpPa^aN&9!HJs=Qwv12BKnR&%Cu2e~QiK|V&dfW4fHawV+tB-l|j z#aND9Re4CoBZ6O$MC3Cg`daOoVPU~P3^Vv5#ZHaoJ}rMKkhr8fK+THEauI6gynyOl z%I!6OPU@oDzswVE!aUH-Ca{W39Aa^sLF+BrFbu*hIl!m9Y5##@XDMX*_ZtFHKQgc5 z)Rwzo1$dJ$G8)6avhQ4(9|@VlC}Z;k$Ja?$Zoe#K?Hg|nGsy+=i^+pVi%d|cu0s`6W_hB0S79}YW4QmadgG8Dz^V)6eumWVy|>DPB;L97ZRhMo!ON#nNm!boIf4 z`p8W64%F9xRiQ_OCsL&LwAbYd+l4K0mNiOWvY0eIb*9T7{+crb9B#3HHV%I=75>85 zhx_7m+Iv$PU6935F4+`DoKd342yk#TzQ)+RZXyUY4uXp_qPOh+p# zK8QOr!s<;PmO#n}hA)2(ynu`buvoAgQE`-gHGi8bi+@92Jy9dW&d5N+%PA(pwk{x< zwow8)Wref%MHh=b8CvxyT*IZA>F&%M&dbN^SXISAvI^0$_>pfl55;WwWsI?0YVF0O z(k8(~V>x`;>IuTJ49m-{5!*Uk>D-Lu3eq~GErdL!|Ng+_WmwB z3udwvyAJ9DADM}dx^9w3OY&$K+aLQkq9y+pXpBWZS^7gWbud2dcv^npg*$(b6J2(; K`JDKlZT&whesmE4 literal 0 HcmV?d00001 diff --git a/example/testvectors/wcdma/block9_llrs.dat b/example/testvectors/wcdma/block9_llrs.dat new file mode 100644 index 0000000..ccb0362 --- /dev/null +++ b/example/testvectors/wcdma/block9_llrs.dat @@ -0,0 +1,800 @@ + 1 7 -7 + 5 7 13 + -12 10 -1 + 2 20 -19 + -8 0 -2 + -2 -1 2 + 11 -6 -9 + 5 -10 12 + -26 10 -9 + -5 -6 10 + 17 -2 -9 + 3 13 -8 + 1 -16 -1 + -19 -4 -14 + -5 -8 1 + -2 -8 -15 + 3 8 23 + -28 -5 -14 + 9 -6 11 + 7 6 14 + 14 8 -7 + 22 -6 -4 + -6 2 22 + 18 -16 -12 + 22 2 4 + 8 -14 -11 + -1 4 -17 + 9 22 16 + 18 -8 -6 + -19 7 -9 + 13 15 -18 + -2 5 -12 + 4 -5 14 + 10 5 4 + -10 6 -10 + -15 5 1 + -11 -22 -7 + -11 -1 28 + 12 8 -3 + 3 -16 6 + -1 -6 3 + -18 0 -16 + 12 7 1 + 20 7 19 + 24 -11 3 + 8 16 -1 + -10 5 6 + 4 23 10 + -5 -2 -10 + 5 -9 15 + -3 -12 -6 + -9 -7 -19 + -7 0 0 + 6 13 -13 + 10 -1 10 + 2 13 -4 + 3 8 -13 + -23 10 -12 + -8 -6 20 + 16 21 -10 + -1 6 2 + 20 8 8 + 15 12 8 + 8 9 3 + -21 -13 -6 + 14 10 -10 + 4 -3 3 + 1 14 3 + 17 -5 6 + -11 -17 17 + 1 8 12 + 2 10 -20 + 15 0 -16 + 15 -5 4 + -3 4 -20 + 0 -7 -17 + 0 4 -13 + -6 5 -13 + -24 -10 10 + -26 0 -4 + 12 4 10 + 2 -15 17 + 18 2 8 + 30 16 -4 + -21 -20 8 + -8 1 -1 + 1 15 6 + -22 -4 11 + 10 8 -3 + 3 9 13 + -8 7 13 + -6 22 -12 + 3 14 -3 + 21 -5 7 + -7 -2 11 + -1 5 4 + 7 -8 -6 + 13 -14 18 + -10 -13 25 + -6 -7 -11 + 12 -14 -5 + -3 -3 3 + -10 7 -5 + -7 17 5 + 3 8 9 + 19 -21 13 + -12 -24 14 + -2 -11 -11 + -2 8 -6 + -12 -17 -8 + -1 -5 7 + -8 -4 8 + -2 -4 4 + 23 -14 2 + 5 -10 -22 + -9 -1 3 + -14 11 -3 + 7 -13 14 + -25 -1 12 + -18 7 -10 + 7 14 -30 + -10 3 11 + 10 20 3 + -12 13 13 + 3 -12 5 + 5 -10 10 + 10 -15 -9 + 12 8 -11 + -4 25 -3 + 1 -5 3 + -14 -14 -21 + 6 -2 -17 + 8 12 6 + 13 -1 3 + -6 24 -8 + -7 11 -17 + 1 -24 -8 + 8 -15 -9 + -7 20 23 + -18 -14 8 + 10 2 0 + 2 6 5 + -11 -4 -13 + 15 23 -9 + -6 5 1 + -10 -3 -5 + -18 3 -26 + 21 -11 3 + -3 7 -9 + -18 9 -3 + -3 -12 -7 + -9 13 1 + -2 -16 1 + -14 22 -11 + -19 -14 3 + -2 14 8 + -1 3 18 + -7 -12 -9 + 1 2 24 + 0 -2 -4 + 7 10 7 + -20 6 4 + 6 1 17 + 9 6 7 + -2 -3 -14 + 7 4 -18 + 13 2 -7 + 8 17 -6 + -18 8 -2 + 9 13 13 + 11 28 -25 + -5 -15 5 + -1 6 -2 + 5 -8 -18 + 8 15 7 + -11 3 7 + 22 9 5 + 16 14 -7 + -8 7 -10 + -15 -12 -14 + 19 16 -21 + -9 20 1 + 16 -2 -4 + -2 -6 4 + 10 -3 14 + -20 -11 20 + -1 31 -22 + 30 0 8 + 6 14 -4 + 14 9 12 + 2 -1 19 + -21 -9 1 + -12 -6 -11 + 28 0 -10 + 18 2 -6 + 10 2 -11 + -7 8 -16 + 15 8 11 + 10 22 13 + -6 5 9 + -11 2 16 + -10 17 -7 + 15 29 -9 + 20 6 0 + 3 -1 9 + -7 0 1 + 8 1 22 + -21 -15 8 + 7 -14 1 + 19 -15 -12 + 10 7 11 + 4 -17 10 + -20 -1 5 + -4 17 -4 + -6 1 16 + 6 0 5 + 0 17 7 + 8 -8 -26 + 21 -11 -17 + -22 -21 7 + -4 -13 -11 + -15 4 -11 + -6 -9 -14 + 4 1 -20 + 3 -4 10 + -1 30 6 + -26 -11 -7 + -15 -3 1 + -9 8 -9 + -7 -15 5 + -3 1 -6 + 10 -6 3 + 16 11 13 + -11 -2 -21 + -12 7 -4 + -15 -7 4 + 5 -14 -9 + -2 -8 -17 + -3 7 -13 + 9 -19 5 + -6 11 22 + 17 14 4 + 20 0 9 + 7 -2 13 + 5 -13 -10 + -15 -9 -13 + -2 -12 5 + 0 12 16 + 11 -9 12 + 16 -3 21 + -3 -9 2 + 18 -1 -2 + 7 12 9 + 2 -11 7 + -8 -10 1 + 29 18 -3 + 15 -6 -7 + -23 -3 9 + 11 -1 1 + 6 10 11 + 12 6 2 + -5 -10 -7 + -1 -5 11 + -5 -9 -13 + -3 -20 18 + 18 9 14 + -6 16 6 + 8 -4 -2 + -1 12 -13 + -11 -14 -8 + 5 12 7 + 12 -6 1 + 10 15 -7 + -15 -3 15 + -14 -12 8 + 25 -7 -16 + -14 -2 -6 + -8 -7 15 + -12 23 -10 + 0 15 -15 + -30 -14 -11 + -8 -9 10 + -18 -9 25 + -5 2 0 + 0 -11 10 + 0 3 -24 + 4 -5 -16 + 0 -15 3 + 6 -16 10 + 5 -6 12 + -16 11 11 + 20 2 -15 + -23 7 2 + -14 -5 3 + 6 -2 -14 + -7 4 4 + -15 2 12 + 25 6 -2 + 7 -11 17 + -11 5 19 + -1 9 -4 + 2 1 15 + 16 5 13 + -3 -8 -11 + 1 -14 1 + -11 1 17 + -12 16 -12 + 5 10 6 + 0 -11 -12 + -16 14 -3 + -6 -6 -13 + -11 -9 9 + -11 6 15 + 14 2 2 + 8 5 -2 + 12 -16 -24 + 17 21 9 + 6 4 12 + 0 -3 -14 + -7 1 11 + -15 6 5 + -23 -17 19 + 10 6 18 + -12 -18 -9 + -12 13 18 + -18 -8 -1 + -5 -1 26 + 6 -11 -6 + -4 -1 -22 + -26 19 -1 + 16 -6 -1 + -10 -22 6 + 12 -2 0 + 6 19 7 + 8 -5 1 + -1 4 -10 + -22 16 -3 + 7 -9 -17 + 24 -2 -18 + 2 11 16 + -16 -22 -7 + 3 26 3 + -16 21 -24 + -9 12 6 + -3 2 10 + -6 1 -5 + -11 2 27 + -9 -5 3 + 13 23 3 + -24 -15 -6 + -20 -22 -5 + 0 -3 -20 + -7 -3 -12 + -12 -6 -7 + -15 -16 11 + -13 9 -2 + -15 -6 -4 + -8 9 -17 + 13 -15 -9 + 22 1 13 + 16 6 -9 + -8 -14 11 + 12 14 12 + 3 12 4 + 22 2 -12 + -14 3 -7 + -2 17 5 + -21 11 7 + 2 19 9 + 16 -18 6 + 6 -12 -14 + 10 14 -5 + -7 0 -5 + -10 -3 8 + 22 20 12 + 8 -12 1 + 25 -7 4 + 16 -9 23 + 4 -27 -15 + 3 0 -8 + 7 5 1 + 1 4 -13 + -13 12 1 + -11 9 -5 + -12 -9 -6 + -2 -4 1 + -3 -26 -8 + -5 -14 -9 + 4 -16 2 + -12 -2 2 + -18 -17 9 + -5 -17 -9 + -17 -3 -19 + -15 -5 18 + -9 -4 12 + 0 -7 -15 + 10 8 3 + -4 -19 2 + -6 -8 -9 + -1 -3 -7 + -6 3 11 + -4 10 -12 + 8 -2 -6 + -9 5 -8 + 16 -5 -8 + 12 0 -2 + -5 -12 9 + -7 7 -14 + 20 10 13 + -8 -13 -4 + -13 -15 -7 + -6 6 -1 + -26 17 11 + 14 4 -3 + 16 2 -2 + -13 -6 19 + 7 -5 16 + -2 -22 -2 + -8 -4 13 + 10 3 -1 + 17 -3 -18 + -14 -1 -2 + 9 0 -12 + 6 16 -3 + -26 1 7 + 11 -15 14 + -9 0 7 + 3 -4 -16 + -1 -8 8 + 6 -14 -20 + -18 -20 6 + -15 -9 -9 + -2 -6 8 + -7 0 -8 + 25 5 11 + -10 10 -10 + 5 8 9 + -14 -12 -10 + 11 4 1 + -1 18 -7 + 11 -3 1 + 0 4 5 + 3 4 7 + -26 5 -16 + 17 -26 6 + -24 10 3 + 7 6 22 + 15 19 -25 + 8 -6 -5 + 17 -21 -14 + -8 17 -2 + -22 -1 0 + 2 -5 -1 + 13 -14 2 + -5 -13 -16 + 4 2 0 + 16 -12 -12 + 7 31 -8 + 6 2 0 + -10 9 -4 + 12 -12 -9 + -3 1 8 + 13 13 14 + 4 -17 7 + -3 -3 2 + -3 -18 -1 + 9 9 -6 + -1 16 14 + -1 -13 -13 + 13 6 -23 + 11 8 -9 + 10 6 14 + -4 -8 -1 + 2 -9 8 + 8 4 6 + 12 -3 10 + 13 18 2 + 15 -5 3 + -10 24 10 + -9 6 -18 + 2 3 2 + -22 -6 16 + -14 -3 9 + 10 -5 -5 + 0 15 -4 + 11 21 6 + 15 -6 4 + 9 -9 -16 + -5 4 5 + -13 -1 -5 + -14 7 21 + 1 -2 19 + 5 -12 -3 + -12 15 -2 + 1 -4 4 + -3 -21 6 + 4 -7 -10 + 18 6 18 + 9 6 -5 + 19 -5 2 + 3 3 9 + 4 1 -2 + -17 16 -10 + 23 -6 -15 + 4 -3 9 + 18 1 0 + -1 13 5 + -4 13 -14 + 3 13 -1 + -13 16 10 + -1 2 3 + 4 0 -1 + -15 13 -6 + 9 -16 -6 + -19 0 12 + 3 -8 18 + 8 3 -3 + -3 -1 12 + -17 0 -4 + -13 -20 -2 + 9 12 -9 + -12 -18 5 + -9 -2 14 + -7 -20 -17 + 16 -7 2 + 12 -17 -5 + -9 -13 -22 + 16 -27 -5 + -7 4 22 + 11 1 16 + -21 11 -13 + -5 -15 5 + -17 8 -4 + -7 24 -7 + 1 -3 -9 + 3 -5 24 + 8 8 3 + -16 14 -1 + -8 2 -12 + 30 18 26 + 4 12 23 + -17 -10 -15 + 21 -2 14 + 11 -17 14 + -13 -5 12 + 4 -8 7 + -3 -16 14 + -21 3 3 + -2 -8 14 + 3 -9 2 + 11 -13 5 + 3 19 -15 + 17 9 12 + 18 -1 28 + 24 -9 -1 + -2 4 -21 + -12 13 15 + 15 6 7 + 2 15 -5 + 15 -8 12 + 11 15 -13 + -3 -10 -9 + 14 11 7 + -8 6 22 + 1 -5 -15 + 3 -12 -3 + 12 16 -3 + -3 0 13 + -8 -5 -12 + -14 5 15 + 3 -19 11 + 14 22 -6 + -2 -1 8 + 6 -14 -14 + -8 8 10 + -10 -5 -2 + -2 -17 -10 + -16 -9 9 + 18 2 0 + 9 -13 -14 + -13 15 5 + -2 -6 -3 + 14 6 13 + -13 -17 -16 + 3 -2 -24 + 9 14 -8 + -8 -6 14 + -7 -6 -18 + -15 -11 0 + -17 -7 -5 + 10 6 -7 + 4 0 1 + -3 1 6 + 26 -1 -12 + -12 -23 21 + 16 5 -21 + -21 17 16 + 8 11 8 + -4 7 -10 + 0 6 -11 + 1 10 -16 + 17 -1 -22 + 8 18 5 + 11 1 -13 + -10 7 16 + 6 -9 -15 + -16 12 4 + 7 -8 -22 + -9 -6 0 + 20 -7 -2 + -7 1 -11 + 17 6 -13 + -22 4 2 + -5 -10 -10 + 15 -5 -5 + 19 3 -5 + 2 -6 -1 + 11 9 -14 + -20 -13 -2 + 4 12 -29 + -19 13 28 + 5 -11 3 + 18 4 4 + -10 6 21 + 3 14 -16 + 12 -6 -11 + 14 4 24 + 13 -5 -20 + 8 -8 5 + 8 -15 -10 + -7 8 6 + 8 16 17 + -16 12 -12 + 15 -15 5 + -6 13 4 + 5 -15 0 + -11 7 2 + 0 10 0 + 9 14 -1 + 8 -1 14 + 3 -16 -10 + -18 -2 -19 + -5 12 12 + 3 -19 -12 + 4 -3 13 + -7 0 8 + 7 31 -14 + -13 1 11 + 4 4 1 + 19 -3 8 + 14 2 7 + -25 -6 14 + 7 -1 8 + 1 6 -17 + -4 4 15 + -2 11 10 + 6 -22 -4 + -18 14 -2 + 7 -4 -3 + -3 -1 -20 + 13 6 -8 + -8 3 -27 + -8 8 0 + 4 -8 13 + 0 0 -10 + -3 -31 -1 + -2 6 11 + 19 3 -22 + 2 6 9 + 3 1 -2 + 6 21 13 + -1 9 10 + 9 8 3 + -3 -4 -10 + -11 5 -6 + 9 -9 -18 + -19 -8 -7 + -12 7 -6 + -8 -6 9 + -16 -2 23 + -10 -12 3 + -3 27 0 + 14 10 -2 + 6 0 -13 + -23 -2 -14 + 11 7 7 + 11 9 -10 + -9 5 -4 + 0 -4 -6 + 2 0 20 + 4 2 0 + 1 16 -3 + 0 -11 -5 + 3 2 -18 + -8 13 2 + -3 13 5 + -5 -12 7 + -2 8 1 + 6 10 17 + 6 -13 -11 + 19 7 9 + -4 7 11 + -7 12 10 + -4 1 5 + -20 10 -13 + 29 20 10 + -2 13 17 + -14 9 0 + 2 -10 5 + 6 23 10 + 4 -1 8 + 0 -26 5 + -17 -14 -1 + 5 10 9 + 7 22 -3 + 8 11 17 + 4 17 -11 + 8 27 13 + -4 -9 -20 + 14 -18 8 + -19 1 6 + -10 -10 -9 + 17 8 -1 + 10 -9 -8 + 20 -19 8 + 7 2 -4 + -13 -13 11 + 1 6 -5 + -15 -14 10 + 8 0 26 + -9 -11 3 + -7 8 9 + -5 -1 -5 + -15 4 -13 + -10 -7 3 + 5 2 11 + 12 6 1 + -8 -3 8 + 4 -10 -7 + 10 -13 -14 + -14 0 9 + 1 17 -6 + 0 -6 14 + -12 -8 -13 + -15 2 -1 + -8 -10 -15 + -12 3 -9 + 17 1 6 + -3 -5 6 + -6 8 -4 + 7 -9 -19 + -7 -12 -4 + -1 -1 -23 + -3 -5 2 + 9 1 5 + -4 -18 13 + 3 9 7 + 0 -21 -23 + 8 11 8 + 9 -6 2 + -11 26 -15 + 15 2 -3 + -3 -3 12 + 1 18 -1 + -2 -8 19 + 18 5 -8 + -31 1 5 + -16 6 28 + 4 11 11 + 1 -27 6 + 2 24 10 + 13 2 9 + 3 0 -13 + 11 -3 10 + -3 11 -2 + 8 -19 -4 + -16 -1 3 + -13 7 -14 + -27 15 -12 + -20 -3 31 + -7 -14 3 + 15 17 -12 + 1 13 7 + 6 -4 -7 + 3 8 -6 + 9 6 -20 + 8 12 -3 + 4 0 -14 + -3 24 5 + 11 9 -12 + 11 21 -4 + -9 9 6 + -7 -3 -10 + -11 -9 -6 + 14 -9 -1 + 11 6 -2 + 6 -24 7 + 26 -1 -25 + 8 -6 -10 + -4 18 -11 diff --git a/example/testvectors/wcdma/block9_soft_dec.bin b/example/testvectors/wcdma/block9_soft_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..95a8e691847843ed2f18c8c072776f44ffaf88d1 GIT binary patch literal 2400 zcmeHF%TB{E5acJhb4ExUO53DPG8*UAgsSZgA@L9VA~WlL0p}!^hh^kN|6- zrz~Q*Yf;4CqJ=wNM`Ik|EKqBci0xjWcuBca>NQe55fw&$5Q#?@sE{`sOPoW@as&-B z9Eo9v$|?4HfzK1GZeg8h6$Z^^vkZg?#mez6Gsx?tTI5wZazab)MQsmEp9aiqGLV45 z@!xYG!K!uAFw(6scgRXQR2YUX*@>i}2+Q!msJbo`3T01KJV$5Ed%y@bY9Wqru^x@K zVIK^_daqQ4>z8X~B1Yw|h7Gx`& zkSVHkZct0b1#b#Dr3g7ndlU>Fn*=)uG}@#m&Qx;|3kIkc)UI6$st6MV?|9|MDfjnDV^IGCS&vc2~&07MrM|4Vex G^n1HpT^T3< literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block0_hard_dec.dat b/example/testvectors/wimax/block0_hard_dec.dat new file mode 100644 index 0000000..df9fb76 --- /dev/null +++ b/example/testvectors/wimax/block0_hard_dec.dat @@ -0,0 +1,12 @@ +03f10e74 +7c8df743 +b50fb4cc +bdc853e4 +c87c1308 +83031ff9 +f7cf8d83 +9f9838f8 +f7bdb27c +1744002f +744bff10 +bb7bf4d0 diff --git a/example/testvectors/wimax/block0_llrs.bin b/example/testvectors/wimax/block0_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..6e286a621bb76f21564bd28292855a0f54f4525f GIT binary patch literal 1152 zcmWNQ$9Cg500fZ}!K66a;Q#-wePfTUL@^)`L|C2s(yzLDyb*_WmA~2+voJdWKjX(H zQ4d5$^Dq-)zgAS6KIx?uLRI5GEWqHlZ&qsA2HL3l_jEkpO2%UU!x~Bx^OmO|mUJXX zG{V3?IL95yGIWcX@QSV|H(x|F#cMa;geN&F5IpiCgDoHtyX{4c@Rvz2FrT$$-MI;3u3o7S*@M=8J>YuXLG5{zUcPn|4jb@X(i$%a=CV&bAZ zYid@phDMzgTO7bEsplzMSxEs>i}xYah_={Xs$b#i?qePjnO&?mW>tjhT1ki+d zbb-p-Vz)P@SH8Oi1&X6w`x{g{SgqTaubym?=xkl<`n$%Lp}OWB6jl0bMT$!Xe8g1G z`~+Q^sQ{?LQ$KF$HJrjncqHiZ*gVIz$N$=l826A)wJTQmr5fcbdv$1ddiTL%6#L)v z0_DLhIiM#)wKTF+MCCkb7Dl@2jBYpZDqY2?>B)7h%PR)1$yvbz_GxQI_;4e-T-23? zS4^fwKu#6@j;Qrh#a;-aWZh3>qOQ4DJP!dF3{Y(IX+;yJGjEQOP6e^CGA~ScbM9UX z0sjVVcr!V(>nQ*HwVei(`;naCu~Ew*>TzoghiG$QNH)S%|3p)Wg_w7=?>w@0y_jz# zeuaAjK-${pd0PEbM9cwX$VhhFE$p%%0u>qZ4~aCD!31gX1QIN z|9Q&_tZNMLt=I$-v{<(mP#!+^^m^x0Fd{By(i%s J-y_@})&J(V5{Li* literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block0_llrs.dat b/example/testvectors/wimax/block0_llrs.dat new file mode 100644 index 0000000..c2d023f --- /dev/null +++ b/example/testvectors/wimax/block0_llrs.dat @@ -0,0 +1,384 @@ + -15 12 25 + -21 -1 10 + 4 4 -22 + -9 1 6 + 3 7 -6 + 12 6 -16 + 11 -13 -4 + -2 -7 -3 + -26 -6 -11 + 15 10 15 + 15 7 2 + 3 -22 0 + 6 6 9 + -6 1 -14 + -13 -6 11 + -9 18 3 + 8 -15 -24 + 1 13 -4 + -27 -11 2 + -4 -4 15 + 30 -2 -8 + -5 1 -14 + 9 16 11 + 2 16 6 + 17 -2 -16 + 0 -30 2 + 8 0 1 + -2 13 2 + 2 10 -3 + -13 -11 -10 + -17 11 -9 + -13 25 -23 + 4 8 -4 + 4 -4 6 + -10 9 8 + -26 -12 13 + -7 -2 13 + 2 -23 7 + 13 -25 -8 + -11 -15 10 + 17 13 7 + -3 -14 -2 + 12 -20 -17 + -12 0 -6 + 15 19 0 + 8 0 -11 + 8 5 3 + 10 -7 0 + 11 10 2 + -15 -17 -4 + 28 -13 15 + 6 12 -2 + -6 -1 22 + 1 -1 -7 + -6 5 2 + -9 22 -14 + -5 -1 3 + -24 16 5 + 6 12 -13 + -1 -3 7 + 13 -10 14 + 9 17 21 + 15 -9 -4 + -6 -9 5 + 5 2 -14 + 14 11 -1 + 10 2 2 + 13 -6 6 + -28 -10 -15 + -14 0 11 + 21 -10 -11 + 23 -15 -16 + -21 -18 3 + -1 2 4 + -2 10 7 + 3 8 14 + 8 -8 23 + 19 4 16 + -23 20 -16 + 6 6 -12 + 14 -23 4 + 5 10 0 + 5 -1 29 + -3 0 -6 + 6 11 12 + -8 -9 -11 + -10 4 7 + 7 12 14 + -3 -19 -14 + -6 -2 -9 + 8 5 -11 + -12 -11 18 + -3 -17 16 + 21 8 5 + 4 -19 7 + 21 -12 -27 + 2 -6 24 + -15 -1 -5 + 1 -6 22 + -6 -5 -17 + 7 -3 2 + 30 6 -2 + 7 -3 17 + 7 13 -15 + 3 13 4 + 16 4 23 + 4 10 1 + -2 0 21 + 9 0 14 + -6 10 10 + 16 -18 -12 + -12 6 20 + -11 -27 -4 + -14 5 12 + 3 8 -15 + -7 -8 -5 + 2 8 15 + -22 16 -11 + 2 -19 7 + -2 -2 1 + 14 -15 2 + -26 -12 -5 + 4 10 -9 + 8 -20 -6 + 14 2 -17 + -1 -16 -3 + -8 -8 -10 + 12 3 -4 + -9 -19 1 + -13 -7 -7 + -21 5 12 + 8 -11 -23 + -8 7 -4 + 4 10 -11 + -2 -6 -1 + -4 4 4 + 10 1 -10 + 0 9 1 + -6 1 3 + -8 -19 7 + 2 21 16 + -8 1 5 + 8 22 17 + -2 9 16 + 0 -8 -8 + -5 18 2 + -6 0 -10 + 2 -6 -10 + 8 -18 -7 + -4 -4 25 + 16 -3 -11 + -5 -9 -24 + -16 1 2 + 4 -11 8 + -11 -9 24 + 8 -6 -6 + -8 -2 -20 + -2 -1 14 + 6 12 0 + 4 4 0 + 10 -10 -3 + -19 -14 -5 + -10 0 15 + 3 2 -18 + 10 -14 23 + 18 2 -14 + 4 7 -7 + 6 -4 -8 + 14 -9 -18 + 4 -6 8 + 7 5 -4 + -8 9 3 + 4 -21 7 + -9 -12 0 + -6 -10 1 + 4 -5 6 + 10 0 2 + 8 3 -11 + -8 -7 9 + -9 -16 6 + 2 -2 21 + 15 -20 18 + -1 -9 -2 + -1 -12 -14 + 8 2 9 + 6 -6 0 + -11 5 -15 + -5 3 -8 + -1 -4 14 + -18 9 -10 + -4 -7 2 + 1 17 1 + 7 -21 -10 + 10 1 6 + -11 10 -6 + -14 18 -12 + -21 1 9 + -15 11 4 + -9 -7 1 + 2 -5 -13 + 10 -26 5 + -21 -8 25 + 0 11 20 + -5 -18 -14 + -14 6 1 + -7 -12 5 + -6 9 7 + 19 2 -6 + 15 23 -2 + -1 -10 -8 + -1 -9 4 + -3 15 6 + -6 -9 -5 + 1 17 5 + 13 -20 1 + 3 12 19 + 12 3 14 + 5 25 11 + 16 -17 -6 + -17 11 -9 + 7 -22 30 + 11 -2 12 + 8 18 2 + 6 1 -13 + 4 8 9 + -2 11 -5 + -11 -3 -22 + 9 26 6 + 22 -7 -8 + 16 2 -23 + 9 10 10 + -1 7 22 + -3 9 -9 + -7 6 0 + -9 0 -10 + 5 -8 -9 + 22 -4 14 + 22 3 -11 + 5 5 0 + -3 12 -8 + -10 -13 15 + -6 7 12 + -16 22 -5 + 17 1 -1 + 0 -9 5 + -4 -3 -19 + -3 -13 25 + 7 5 -21 + 8 8 -16 + 16 0 0 + 23 2 20 + 12 11 0 + 5 3 -5 + -11 -14 -7 + -7 17 13 + 8 -15 -27 + -7 -5 -13 + -6 -3 -7 + 14 -16 6 + 10 -17 3 + 23 22 20 + 10 -6 12 + 6 30 6 + -12 -6 9 + -9 -19 11 + 0 -3 -1 + 3 1 4 + -7 -9 -1 + 4 -2 -7 + 13 -15 17 + -13 14 4 + -14 -18 6 + -2 -15 -9 + -10 -7 -2 + 9 17 -7 + 11 3 15 + 9 29 13 + 8 -10 14 + 0 -2 -5 + -3 2 -5 + 15 6 5 + 3 7 10 + 19 -8 -26 + -6 1 -21 + -6 5 20 + 13 -14 -14 + 2 13 5 + 5 -9 7 + 15 -1 -13 + 3 -10 9 + -10 8 11 + 25 -8 -1 + 11 -12 -2 + 24 11 -13 + -6 -15 5 + -22 9 -1 + -9 -7 -19 + -20 9 -1 + -15 17 -4 + -2 10 19 + -17 20 1 + -3 14 13 + 4 7 3 + -13 -3 8 + -9 -10 5 + -4 -14 -24 + 13 0 1 + -5 3 -9 + 6 8 -18 + -10 -15 -1 + 10 8 -1 + -4 19 9 + 1 -28 7 + 10 -13 -24 + 22 -12 -11 + -9 1 -6 + -2 9 -4 + -5 20 -4 + -8 -11 -9 + -9 -12 3 + -3 -2 -17 + -26 -6 -5 + -12 2 5 + 2 -18 -25 + 2 6 7 + 1 2 -15 + -1 13 1 + 2 9 -2 + 10 -11 3 + 4 9 0 + 0 -1 10 + 13 11 16 + 5 4 2 + 13 10 6 + 4 -2 -3 + 27 -2 11 + 2 -14 -8 + 17 12 -2 + 12 6 16 + 3 -6 -10 + -4 -15 5 + -17 5 19 + 3 -7 20 + -2 12 4 + -14 -2 8 + -13 2 16 + 15 -21 -9 + -8 -21 3 + 7 0 8 + 23 -16 -8 + 8 -1 -2 + -6 16 -8 + -19 11 -1 + -13 7 -13 + -15 5 9 + -11 -11 10 + 14 17 10 + -4 4 -12 + -3 -22 3 + 19 -15 -3 + -8 13 17 + -17 -1 1 + 19 -16 5 + -11 -4 6 + 16 -6 -12 + 4 7 9 + 6 12 0 + 13 4 1 + 12 23 7 + -4 10 17 + -10 1 8 + 5 20 6 + -12 3 7 + 11 -8 5 + 12 -3 -11 + -10 -5 7 + 1 14 12 + 12 -15 3 + -6 1 -20 + 8 -19 -4 + 4 -9 1 + 20 -15 -5 + -13 2 -19 + -11 25 11 diff --git a/example/testvectors/wimax/block0_soft_dec.bin b/example/testvectors/wimax/block0_soft_dec.bin new file mode 100644 index 0000000..12a97a1 --- /dev/null +++ b/example/testvectors/wimax/block0_soft_dec.bin @@ -0,0 +1 @@ +y‡tttŒtŒ‚‰ƒy~Šˆ„‰ƒ„{vƒ…u}}}———uuƒ‰w‰w…{xˆˆƒ‰y‡{†„|„‰’’Œt„~|}†xxŠˆ‚xsss‡~~}v„†““‚‚Š{yy†}zzƒ}†„}‚‡„xˆ‚~…‡p|~~…{qxt†ˆ}ƒ|„ƒƒ„~qŽuŒ{ƒ{zr{szƒzz–•›ejoo–j‘x‘‘~‡y‡‡w——n—˜’˜hh’nh˜‰n{ˆˆw‰yyyˆx—iiu…{ˆsŽŽŽr†††††{†‘o{~…{‚~ŠŠ™™™gˆvv‡‡yyy‰w‘o~‚~‚ssuˆˆ„s…‰ww‰w‚‚‚‚~~~qqšš‰fuq{…ƒ‚‚~~„„„„„„|~~„|……l”{ƒ}~ƒƒ}Œte›trˆ{xxˆˆssstŠsŠvy‡i–—i—––žb–s‰ss’nƒ‰w}ƒ}}}’’pnpp‚~ŽŽ~‚xˆ†z}yyŠŠzvk•ŒŒŒƒy‡yz†ŠŠ„„†z†|„„|u‹tŒttttƒƒwwh˜wƒ‚}}}ƒ}{{{…{‚{sss \ No newline at end of file diff --git a/example/testvectors/wimax/block0_soft_dec.dat b/example/testvectors/wimax/block0_soft_dec.dat new file mode 100644 index 0000000..c56d83f --- /dev/null +++ b/example/testvectors/wimax/block0_soft_dec.dat @@ -0,0 +1,384 @@ + -127 122 127 + -127 -125 127 + 121 122 -127 + -121 122 127 + 116 -106 -127 + 116 -107 -127 + 116 -101 -126 + -116 101 -127 + -127 106 -126 + 116 111 126 + 127 111 126 + 127 -127 -127 + -116 -106 -124 + -126 106 -124 + -127 -111 127 + -119 120 -124 + 127 -127 -127 + -125 127 127 + -127 -111 -127 + -127 -111 127 + 127 126 -127 + 121 127 -127 + 127 127 127 + 127 127 127 + 127 -127 -127 + 126 -127 127 + -118 -127 -124 + -120 127 127 + -124 127 -124 + -127 -127 -124 + -127 127 124 + -127 127 -127 + 127 127 -127 + 127 -127 127 + -119 127 -127 + -127 -127 127 + -125 -127 126 + -124 -127 126 + 127 -127 -127 + -127 -127 127 + 127 127 127 + 123 -127 -127 + 118 -127 -124 + -127 127 124 + 127 127 -123 + 127 127 -123 + 127 -127 108 + 127 -127 -108 + 127 127 123 + -127 -127 -125 + 127 -127 127 + 127 127 -127 + -127 -127 127 + -125 -127 -127 + -123 127 127 + 117 127 -127 + -127 -121 125 + -127 127 126 + 127 121 -125 + 125 -121 -125 + 125 -121 125 + 125 119 127 + 127 -105 -116 + -105 -105 116 + -105 110 101 + -105 -105 -101 + 117 -104 116 + 117 -110 114 + -127 -104 -120 + -125 104 123 + 127 104 -127 + 127 -110 -127 + -127 -112 120 + -119 110 120 + 119 104 -127 + -119 -104 127 + 127 -119 127 + 119 110 127 + -123 127 -127 + 123 123 -127 + 127 -127 -120 + 127 127 -120 + 127 -120 115 + 120 -120 -115 + -120 119 -115 + -120 -119 115 + -125 121 115 + -119 121 116 + 121 -127 -118 + -121 121 -127 + 127 -127 -115 + -127 -127 115 + 123 -127 -118 + 127 127 118 + -122 -127 127 + 127 -127 -127 + -124 -127 127 + -127 -127 -127 + 124 -127 127 + -124 -127 -127 + -119 -120 127 + 127 120 -127 + 127 -105 127 + 127 105 -127 + 127 127 127 + 127 105 127 + -110 127 127 + -110 117 127 + 127 -127 127 + -127 127 127 + 127 -127 -127 + -127 -127 127 + -127 -127 -127 + -127 127 127 + -116 127 -127 + 116 -127 -127 + -124 127 127 + -127 127 -127 + 126 -127 121 + 124 127 -121 + 127 -127 105 + -127 -127 -106 + 127 127 -105 + 127 -127 105 + 127 127 -105 + 125 -127 -106 + -127 -127 -106 + 127 127 -113 + -127 -127 -98 + -127 127 98 + -127 127 -106 + 127 -127 -115 + -127 127 115 + -122 127 -119 + -127 -127 115 + -127 127 115 + 120 -123 -110 + 120 123 110 + -127 -127 -125 + -127 -127 127 + 127 127 127 + -127 127 127 + -118 127 127 + -120 127 127 + -126 -120 -127 + -127 127 -127 + 120 -115 -119 + 115 115 119 + 115 -114 -127 + 115 -114 127 + 127 -114 -127 + -127 114 -127 + -127 -122 127 + -121 -127 127 + -127 -127 127 + 127 -127 -127 + -127 -122 -127 + -127 -122 127 + 127 127 -127 + 127 127 -127 + 127 -127 -127 + -127 -127 -127 + -127 127 127 + 127 -127 -127 + 127 -122 127 + 127 -122 -127 + 126 123 127 + 127 -122 -127 + 127 -111 -127 + 126 111 125 + 125 123 -125 + 118 126 127 + 127 -127 125 + -124 -127 125 + -127 -123 125 + -122 123 127 + 127 -126 -115 + 127 126 -115 + -127 -118 127 + -127 -118 127 + -109 -127 127 + -109 -127 127 + -126 -103 -110 + -126 -127 -110 + 127 -103 112 + 127 -103 110 + -127 103 -112 + -127 -120 112 + -118 118 112 + -127 118 -127 + -127 -127 -126 + 127 127 126 + 127 -127 -114 + 127 127 -114 + -127 127 -127 + -127 127 -127 + -127 -127 126 + -127 127 -126 + -127 127 127 + 123 -127 -127 + 127 -127 -127 + -127 -127 127 + 121 127 127 + 121 -127 -127 + -127 127 127 + -122 -127 127 + -127 127 127 + 127 127 -127 + 127 127 120 + 125 -127 -120 + 122 -127 -122 + 122 127 122 + -127 127 -127 + -125 127 125 + 127 -127 127 + 127 127 127 + 127 127 127 + 127 127 127 + 127 -127 127 + -127 -127 -127 + 127 -127 127 + 125 127 127 + 127 127 -127 + 127 127 -127 + -122 127 127 + -124 127 -127 + -127 -121 -127 + 127 127 127 + 127 -121 -127 + 127 121 -127 + 127 121 127 + 125 127 127 + -127 121 127 + -127 127 127 + -126 -119 -127 + 127 119 -127 + 127 -111 127 + 127 111 -127 + -121 126 -127 + -124 127 -127 + -127 -126 127 + -127 126 127 + -127 127 121 + 127 -126 121 + 120 -127 127 + -120 -127 -127 + -127 -115 127 + 127 127 -127 + 127 -115 -118 + 127 115 -118 + 127 115 122 + 127 117 118 + 127 -127 107 + -127 -127 -107 + -126 127 -116 + 127 -127 -116 + -127 -127 -116 + -127 -127 -125 + 127 -127 121 + 127 -127 -121 + 127 127 127 + 127 -127 121 + 127 127 127 + -127 -127 127 + -127 -127 122 + 126 127 -122 + -123 127 127 + -127 -127 127 + 127 -120 -127 + 127 -120 127 + -121 127 127 + 112 -127 127 + 124 -127 -118 + -127 -127 -118 + 127 127 127 + 127 -127 127 + 126 127 127 + 126 -127 127 + -123 -124 127 + 123 127 -127 + 127 -115 127 + 113 115 127 + 127 -123 -127 + -127 -119 -127 + 120 119 127 + 127 -127 -127 + 127 119 -124 + 127 -119 -124 + 127 119 -122 + 127 -127 122 + 116 127 127 + 127 -127 -122 + -115 -127 127 + 127 127 -127 + -127 -127 124 + -127 127 127 + -127 -127 -124 + -127 127 -124 + -127 127 124 + -127 -127 127 + -127 127 127 + -127 127 127 + -122 127 117 + -127 -127 -117 + -127 -127 127 + -127 -127 -127 + 127 -127 127 + -127 -127 -127 + -120 127 -127 + -127 -127 -127 + 125 127 127 + -125 127 127 + 127 -127 127 + 127 -127 -127 + 127 -127 -127 + -127 127 -127 + 124 127 -127 + -127 127 -127 + -127 -126 -127 + -127 -127 127 + -127 -126 -127 + -127 -126 -127 + -127 -126 127 + -124 -127 -127 + 127 126 116 + -125 126 -127 + -125 127 -116 + -124 126 116 + 127 -127 116 + 127 127 127 + 126 127 127 + 127 127 127 + 113 113 116 + 127 113 116 + 127 -102 -127 + 127 -102 127 + 127 -119 -127 + 127 102 -127 + -114 127 127 + 117 117 -127 + -127 -113 127 + -127 113 127 + 127 -127 127 + -127 127 127 + -127 -127 127 + -116 -127 127 + 127 -127 -125 + -127 -127 -125 + 127 127 119 + 127 -127 119 + 123 -127 104 + -127 127 -104 + -127 127 119 + -125 127 -127 + -127 127 127 + -127 -127 127 + 127 127 127 + -127 127 -127 + 123 -127 -125 + 127 -127 -126 + -127 127 125 + -127 -127 125 + 127 -127 125 + -127 -127 127 + 127 -127 -127 + 127 127 127 + 127 127 -125 + 127 127 125 + 127 127 123 + 122 127 127 + -127 127 123 + 127 127 123 + 114 127 -123 + 123 -127 123 + 127 123 -126 + -127 -123 123 + 127 127 115 + 127 -127 115 + -127 127 -127 + 127 -127 115 + 127 -127 127 + 127 -127 -127 + -127 -125 -127 + 115 127 127 diff --git a/example/testvectors/wimax/block0_status.bin b/example/testvectors/wimax/block0_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..9aafa9bd4b6951b0ebc3a6908b89b1b11fd6edd2 GIT binary patch literal 12 TcmcCeWZ(#T!{}hoz`+0j548d) literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block0_status.dat b/example/testvectors/wimax/block0_status.dat new file mode 100644 index 0000000..43f1b9f --- /dev/null +++ b/example/testvectors/wimax/block0_status.dat @@ -0,0 +1,3 @@ +08002138 +4001ec52 +0008003f diff --git a/example/testvectors/wimax/block0_tail_llrs.dat b/example/testvectors/wimax/block0_tail_llrs.dat new file mode 100644 index 0000000..4f88df9 --- /dev/null +++ b/example/testvectors/wimax/block0_tail_llrs.dat @@ -0,0 +1,6 @@ + -16 13 + -12 -13 + -14 1 + -21 11 + -13 -12 + -12 -3 diff --git a/example/testvectors/wimax/block1_cfgreg.dat b/example/testvectors/wimax/block1_cfgreg.dat new file mode 100644 index 0000000..05cddc4 --- /dev/null +++ b/example/testvectors/wimax/block1_cfgreg.dat @@ -0,0 +1,35 @@ +2 +0 +3840 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wimax/block1_hard_dec.bin b/example/testvectors/wimax/block1_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..6f45e0b12ea5422b53064b5ecf5f5713b70f3b84 GIT binary patch literal 480 zcmV<60U!Qo4uK7W_KKTOs}BY1lPt_pUo~=xIWJ9gL6etaCq0P}53P6r>l|K}rMe38NX&JRY|A3~D{ z?ANoYB!9+kCfKfX*BRuDoIy0m@j4@u5#5jc(Y3ihJRV zS}zh1UrF?e^-&YO<$Xv6AF=*RqR^}p+nD7JT1jt+85W{cg9E3}9qo`hHKIw9_iYzU z>pKe?v296ilb!m%qyo)YwFP<1W)1y@a%G7um-fn$P@)Q*hL?Qjycaa|nEU%HvbyH*Sb8k%cmV<11UY~Sk3 W#M*WVww~M}J!xb*rP~R-%Jg)Oz3WN< literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block1_hard_dec.dat b/example/testvectors/wimax/block1_hard_dec.dat new file mode 100644 index 0000000..56cda9f --- /dev/null +++ b/example/testvectors/wimax/block1_hard_dec.dat @@ -0,0 +1,120 @@ +0d810e68 +9b8af683 +050fab50 +ba2e93eb +0613fff3 +9ec311b0 +285d1a84 +c3708ff9 +14f6b585 +e20a2880 +aa828d3c +0b67eb4c +4cad9e6a +ad436479 +0d2814bf +d7aea0aa +d2c089ea +0e722b46 +6df300dd +1f074e4c +23e7ffba +c1917c60 +460fcefb +93421fd8 +b3d7ec07 +c67f24a9 +aed8266e +e419d773 +34419c8c +233af1c8 +8fdd1193 +b9b5d1fc +ef223c3f +7d2c2d96 +d9a762a6 +42dfb52c +c0b064a4 +122f5af3 +f4495f10 +1351f58a +487de5bd +feb11f05 +acd0a24b +e598db13 +6f495a0e +a2161988 +a7038354 +90ed1dcf +49a2353a +176df792 +0b3beb4c +496db11a +fa9d936e +cd02a4bf +7905b558 +fd0d66cc +89657286 +caf6972c +0aa25091 +3e017ba1 +befff8b8 +11d18403 +7c18af84 +ea6bfc35 +59b29c51 +3c3dbf84 +ac3aee29 +7824ad9c +a92df2c4 +ee6e324e +6a708ea1 +84a09185 +6e6842ca +f6368d80 +c008c39c +306b0442 +c7a0f42e +4704cef9 +43f29e74 +98b4f685 +b6ee38a8 +e0c9aca4 +67b3e7f0 +82c2473c +bdeb6a2a +043c0218 +43460ef1 +b7dcae1f +564d3125 +289a7fac +164cef56 +5f1b7f44 +2e66f1d2 +5a1b8ae3 +430065ab +296c8c33 +b5c413f4 +58bc3519 +86853cea +2769588a +20b72909 +c130d948 +255f9caf +b2d23ab0 +a38fa255 +d06f49ef +d48f7619 +95711586 +1270ed4e +1c5d71b5 +99ba5fcd +0c56bbc6 +6b9a1a07 +3f206365 +eadf6cb0 +76dac4cb +dc9eb609 +64693d21 +09dba53a +74f4cabc diff --git a/example/testvectors/wimax/block1_llrs.bin b/example/testvectors/wimax/block1_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..0851039c12bf8cbcf071510e91cb03bc2cc864b4 GIT binary patch literal 11520 zcmWk!=bGEL5=A2bf?aLbCC>XlR&L^LlGqD6?)dZ1l_e6GIdjTPbSg!6T79t8j?Onb z8n($Ou@$HPZ4>$R*EmtW1W&r7Jkejn`QYBJUge%QAJ2dzO2tSfDVE!lEmd{lwY}d7 zndLD)jI8*hm`Uso%4r@h6LuQLo9mygJIME;G^9YVl(Kwrz={kI5Hrm5b})V$k~g zB<4QaMZ^#+vq>Xb%OEOOw8mTu{BIM&o5;*Riuyc5BkQC^`8Sed&5OzoDSu_A#JfB`8kT0S!k4!EmBS_E@>^{% zVVxdlT4Acme$|JP7dFK&)ZbZq&6-ZUn%hQQo6{QaE!$7GF>IEtZ92RLWbc=Wr!ZI$y3c%O zk!Fm`twPDjd~nE!!o)c9?Kzt+Zl(BWsmOi)(;lLU?|H@oH7l8ls9LhP^U^un-wKrZ zJ`{=udWa|gEzYJaB@~;>s3{M+5YA@Z96j0j;A^z-3a7)Y*tuji-98p9v*!NqMYIWk z#@916uEN=#9m)A*y3dVHcBe04pD#boWmuyvw@Gf|bsap?OcnJM`)t#sJO{4Ps|yKF z`2{&GYddH(?iaWS{_5)Xxbj%=LZA}*!Mi{+B?~HVjhNk$_=Ii6Fzy# zZ>i+;tk-6CjESwBbLei@`By#!5**-B=IsD2I}y0jFeP=jj@BkMw?jPU8ec7IupXGx z#J0z0aj!ki=P!1AD^xbZwdh^caS2g6t;%iFj-yo?y&bQM*$U0AuldW&9p#=SH^brn zUN%h7r6Klrv1HO>&I!sJ$MP3{Abv;#cP3^lx9SnyT37*JpifvnE>#?T?U!^qa`jw9 zpX6%gn6>Xi;%#mkTAv$3na!_p!`0Fb#NeYW(tM?~c*BQ`JVz$?m%&I%#HahRYyMfX zecI~OGo?e_45>xuZmB8MlouLG$zs#DHWch|8N4I%DCMns$?~%}{i42(m_7hO z)kIvHhI@HsO|wl^_FsQ|Yxh&Ablsb5OeVHe+HsZ3LB5INxves$6f%LxtV_8nU6wHb zz^O*^YfJm;w9b=fTI!y+Sf6Kx3?oZMd9o8y>#pi}F)44va@syhOVvZ!l3_JhQ$PYk zD~ac--4b;-s@@VG{~WT8Bb%9vOf_TvR+yecFl1ah(BN8NM|o^I4y}u0DxzH)^AXO%xY4HJ0tmsr0H=L6S{D z{n-^QOF>X2;fqQxGDWfXGn`Z2g-{dA%D<1}$Z&D^z*e%7my<*PlU?QtY*J?7Cg%u$ zq`us}9@2u<64ngb^ZE({NABxz1!P96=$LAcGeU0ok8esX-Fq`nUAeh#zVj*1S={ZV z?CL_!Pac23^%T-Ex9~gLh!TW48p67u7Dfm3-+Ddk?8qyEb(?x?^Ji8YXRNubdEBeV zsHU9Im6=V2`unjTi#!;og7Mt0-L70!M8b{~H{s37z1x>s`^{Y{w4J(@ zzPORB2Q#;l$%AV_PIIU@rY9(p)3D7r~Cho`pQG%;U7?d3i$9b9suKe=*c88{NgwG$#QK zp=R1Xt0Ty?`lnlHa9P%qBjG%)a;F&)ZXQVqrKBY3#2>b~r~{Yo-fTLAxsJ2G6n%5| zA?8Hv^=nMw(o9<*@(0~(1`}XI_59Y39A^b9%)xGtMm&yOfj#m6> z!92IE+)$is);z*tPbrOij`}KlMvZE+SJSUy$a-TuvJK&W>HJgoPo4I6cH_VTWQN&I zFSVfS5->T6bJTFC8LkGPcTaiJ*<(5OvkSPj#@bUJM}gG@7|!>~LK)*cHlw=7m1;AI z@&Ro+I&O>eZ~*t&O8H(K4rY6b-QsBf>N8%%L#o5ue~xvnMg-00hxdlC^_{6N>DE5j zod+E?F#Nfez;+C8*1r$`k~MuVsQVULEf+kt`&7;M-_L2zrG~TH3WD$3$n219EK590 z-D#r%XuSwU@KQfQ$?=&ohwxBTa9AiV$69f@mY8O60!u`Jf@FBqwLc8NI=^x<95~8& z2wHie$WG(y`LP-37qZg8`O0&*W6MuOhsLclGr$YJ{}h>(nhaYDEg}1ltEp^N`4?90 z)-0X9jnBfZsvm4}x(C;MGgXIeYgsn|O8<9x zSrP64c0(?J^pw1mQ_HV=4W0E#S2xHvmF6iOs^oei;giT%pyZZA#qzJQ&o9-g4thc- z4anBCPN)$$4j;Yu>w$o0RTay`x{O2IZhjSU=%l}-war?Y4v9T-<)JRrfj0V5mGFbQ zr=_b$^5n&qi?NbDkEP+$*5S`XdoK2}9Hqz#hqvFq^nNCAH0^D<>#=~w#3d_R>uNK{ zAnE&tKyHyj-|OS0KJPOLb_(HLDS5Q=QRnz*+MSzhIPyYP$u4d!O)8452#W+t^j~u0 z<)mQzySjQ>M)fp~;`_WcRvyxVp0vP*n>sQAYRO_Jnw#^j2l8JGgrm-&`WE&K@maVL z7iR|JhZWK&2F+6@p=48ay6rQd?Jg6Nd%lG!)Zx+ZoW;PrDAuji;!;0QePX-S2Y1-p zK9kQm`>Kx$s!AsWrONG*mGPiV<$bN3FAjuqfLX<-W!+o`K;-36RyzsszT&Pych?($ z=VLExPl^AZ=(MD{r=fftLR8XLa$JCp(+P zico=o^LG;<_XBDsp=vDuh**D+>yAWKrGGZN5OWmJ{g3D5)|IK@?c$nn(_H)p67>yB za5$PGpEgtTD1`-ZRx}kj`!UTyVLAKZcg#FsRx#T;Ho2dWk@$7Z>W@x1Tk^Si#)9ID ziG2uP`&8oWL>L`n1D5&iGjPN9-O~;#C%SX&2~j_wGQ$DnJ&{j*YNls#0UrRs z7pA9OkdCv8;L$vRs5?{jy%TZI|2iMtxR?7;k8l~s!Y5fiUdaXEip@`tUx;AaBgYfp zPW6OD5w2&`HK{ONy?TLP;sB6Hio#SI0VihNdMCl^AU`u?p028Q4-6ZbSL$&PYpFW9 zO>cFcrNJ@zd^wLVpVjoC_B(s~U9I&JOX_GO}iozHwoX_x!Ip@X*P!vK(_H$IJ^Y56;vz3uyBAxZr*j18&pLbM`8_NA zX~~lYsX9maIg!%r(%|P*^;x82w|wDH+9#CBm#7F&qpp@(&EaU33^`Nd0?G-bn2=TB z;l+Zpj{@rKsQ&`E0=6{xHJ-Vg@RxVvi2XL{VUaLJ={L|Xk7je2m{WXu9$r2_ie3J3P|(^AlB=aD_ho&T6Y%Ct`64&j zS{=}T6*_H4NBQ)Y`P{N+&SGP7#d2!gG5f zs(9w{u=$XI=Emz&>dufV`&_~B%R;i=^+Rj|&P&cDDY*ErB9~9JX$-?5C*h*Y#l6CC zTwKa{h(SC9GNI_Ra?ycl4C=^Epn;eB2918kfsnk|eI$}nY$up9^Di;g^*XE0 zxtNYRql_PE0vXBpn6B`P7j}K+Ih8Y!iUX1M6@`8Pg z9GykGR#Fvv;jKyXuX;AdaTr90#v6UvuFI>;z!&4)@+*tg(c%ZW)z*ESd8)0l+lXUX0)T}ii6NzH$fW^b!0M&56AgC9+#s5cD`>d zZXTj`VAS9nJ{NdV91tC(9W-eU=HRGdfcTxSC?wDYa$4TUWb^a56?84uG&ofsl%yy5@GLTD+^sRiwC44DB5LZ8o2A^v=UdaX~^LOcG@ zph|aDP8owCvis7H*#zA!OAG>b;HTRwox);wFpw2Es%YS0o!2N{9%Z0FI4wfscm*?r zvGpfmJ7YjqNlwlVrj!3#Lbo5Ai?gTA4(z?!qKAvClc_HtItO_SZ~*NyAO1JD1y^*j zgU7&?vEYug(<3yL?BAQRf#cStDaLt%H;dJ}7l`^e6XhMBr?v)t3kaA6Z2^**jdS|Q?l9|Jt$T)diR z#=&EsDw%CyUa8B8TpC4yN1^Lb2C+B>7Gy3h^Q!7TIrI%LZS}GS+eA6nM=CT32trE$ z8z6{xgA7TQ{o#1K&jH_aZfU5Vy#aH(kuvRYqXeAl z?9kxYPeK^_3w`BlHK6))c&v+PSxn!x5OgYX8cH3IZbf^?&ES_fW%>9; z56e!RZZ-M<;dsqn5koMR`un9d`**z$$N9)RV#}9`#`))P4RxQk zeBsaNb*Yu3B4(A67!1ruDGOXz==R+91J5!7h!+~FdQJXI6D{_&DQJ|R=kG_rLp;j3 zS`7HHWo^($2P1l^0(^?X`(F514iq^|WkyQG7IN*&dLDs-6NoK}j|8srw7g~0Q#QcU zQpW>=39b`gmL(u%^W~-QaC-tv!Mj!#q}+xT%xC^OmNxBd3ajbCs$8<*MrHCTAp*Gv z8AJ`Yt+KVL14Y%VXwk(4r?O{{fUo*gzKmbVp!I*j_PC}6*`c!d%=l};;Ju!|>k1n> z`_vsn4$gkJ5(41BB<>PO1GYAquWZ>KwMBzjYc01GBbuWLK&yWG@mYy+R9donEm^aE zMt5Y{AHPJVDaLvNhZue7wKCbstTXr!Ux6iDlN?l9?m-AB;BkD*d}Hc*`aI@sYPW?& zbGeT{AysJFqONPvR~lGJ!TwDDknzMwsjuK!ga*IuIz6K5h(~1w4^>HMly!YfuCJ=P zEX`GK;0uE}0LefoWn8jxBv&}KWfOHd<6ga+rCO269-iX8DY0Jj2^X$!5!VzC;LR?I zu6sDvh)@2$)-V@C_O$6=oO+3<`&h>O8O(sV;1KT>PbGJ$%i_?N8yH?w{>PFnFH^}S zp)(kZ>qq(OBeO!y5IYcX93m&YRUBf%?eJof*M&gjD0uHH*eT~QDcdv2wgKzS|PpLRq_%W}&bq87Qi zUdP&)qZNSDlfvy_pS(HA3t{|Vef*?k$}$Q+?NJ07zo8=PM2@4b8?4lJ94jf)kJ?qS zfer;nr|v}C5`^kDQXS^~2!r{#AYdqro(; zDp#$7FD+c~V%0AA%$MpHNCz-@ictbKx!e5GxfW_)%#w7MuXU@!l#5z z$PDCeq}J`}kl?dOh&e$GLL>=>gJ{4(Y*V4;VvaxUj}5#{w{PpXpJ-3u)EotOi3?zX zxc!BXqGqui*) ztO(Rl<6dS5QDwhRW`%^Z{s7e^4-oR`#+&I*Aj*7wKPY`BTp-2I`Ab~Empw&&2CajE z!YD&Y!&|58CZPOK(#MRTUmvTqSmlaHdL$YKh+|w4~#_SJCDzCb% z*0m;GoN^E3&CZG7v(^`IP5O#W($?NT>7|uyjV^K(IWgwJ<&Mf6J)Iq zbho>jh0&fVH1=(__6|oz6?y*Hg924oM!&qx-SHFjnUl(P|8XJs1@eaCWToHF$Rq>H z01N=JFw~DK*S=JWZl|@(CX(4XTXHag?e@B(=SH;#GfC#BzE+rM z%lURMj#-frG$BMw;k0h;z`hAVWSDb34&lc;0lnr#dmI(GUn=16m0-Gyp6g|9@r(7u zg8;$>TW0E$fXc!j|-H&TBkuzv+4*S&e^uNv6`BCC0A6F9$Y1u^YTz)}4C zbwIkfKu(R+))?_Dm{VuVA5M-i$#~vKTR6Q&R-$9QOk$5%J{9qvLIOF|4_2Jz07?Hm zSFp9wv8NO-e^oZ@x&`Y0l^qIFBN`0ZJ?GPXlL_sWuEM70CzvXjDt!XawiPB4euIijN4dKSkOe?`FJ>{^y zu|S6*u|pBdeW}2mkS{454&pnZ(iNg;53wisKwSprE3Asxt#E~VT-b1m^bKu5YRSuY zdy!R@pNG?*%cB%H@C$4l5Ne{OaoOiNZ?4RuiSbpddAa44a{Y6z1jlhLBPfg$q}(aO zY{|KSPoq~*!qV}ub9_Dcx14}nbKzqz(S`sAEvX@$Bwn|N?udXwKb1z)dbVD!qvtT1 z)ATRYQ!jxqOMwU9dZ_-H7g43 zv3+MK^vOw}!C(npE~hXZZ2eT(hJL8YFp34n{Wiy$r2lmfLJb%>)z0oj0McP=b7dKmk^}wka&OB zkKK9It`-3T9pn+ZHrVqoT@ zjRKvw8lI&h=>n?K_zNrtJO=zeh*0y9T@N5EdEX&dYc zD^&jDDVoN^j@#@yI?P8lxRvI{VsIEC8tfm-UZJ-Z73E>KST7Gn#D6Q@8;E~pyL1qU zmh60LIeL$G*dA;AK5R>_kvw0IT))hC0uP2$aJxu^@yXG*EpI;Rv3_C$qyx~_$h$5` z)usw)y+_P$2dLCDhE*)^MKh|8-WTRFJy;r>mwK6Rqy>ZcmY4f>W83lhhcip?{@PtW znm>`}89dqRBlxooa0Jbc4SUH2(Dsr<@W}wdW0PT|Vfig(8Dt^-iQCEE zr!dlAfj=vCUH5|v2+D9OA(u{flvO(uU=z%kl#eTDNw8b=)o#slsMZSi7p-0 zmrZPM?C(D!(%fKaY262&Ukje#2gl?Y>`Qc&Ex!5FzhH})Y}y8|UUGonn7%}L7%=nx zP-!P#V6}{#pcaM9=~`fTXEwb7{#9q2*!H~d49mCU1TW( zu8&z<=cR~O@L1EuCuk%{vPKp>;{_HrE?sswGG~sRYn>GeAo=L5Io)CIw+nR3R%`yvf&?Yh7+4vENp2hW zuyM8zURE2pOn&2pU7UsV9yEmJ!9!FA?L{9D$kY}VC}f!hiz;Yw;By~n=dws(yp2}) zYYi01ir3Q>;vLOtLwg+LxgtGGRZ!HQEDr4GO4x@1_1$nA;jXotFHeZcVPT-M-t(MQ zId*t-(-jC5c)}|A-w^o%?jqIkO64jBrGA-H0TC10(~o(vV-tFC(HsN>pmkwNS`_#1 z$9aHV0=*(A55-`gL`!#u?Vv$_ueVxNGkIxMxpuImwpVw^Xw3Phhj<4MdAil)PdRD? JFWcAI{{cM*&maH* literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block1_llrs.dat b/example/testvectors/wimax/block1_llrs.dat new file mode 100644 index 0000000..ea7a104 --- /dev/null +++ b/example/testvectors/wimax/block1_llrs.dat @@ -0,0 +1,3840 @@ + -15 13 11 + 3 18 -2 + -15 -5 -8 + 12 14 -1 + 7 13 2 + 17 -19 -9 + 18 -6 -9 + -12 4 14 + -4 3 14 + -3 -8 15 + -6 -15 1 + 3 -16 10 + -6 -16 10 + -16 7 -11 + -5 26 -9 + -4 -14 -9 + 15 -11 -12 + -10 15 2 + 0 -6 12 + -17 8 -1 + -11 -9 27 + -15 8 14 + -7 -6 -5 + 10 3 13 + 7 -17 -2 + -11 5 15 + 11 -6 12 + 18 13 8 + -30 -13 11 + -11 -7 -6 + -15 15 18 + 2 14 9 + 30 -2 14 + 29 4 17 + -16 2 7 + -15 9 16 + 3 -9 16 + 6 1 2 + -13 -6 0 + -3 1 0 + -4 -5 14 + 2 7 16 + 17 15 -2 + -9 22 3 + 12 -5 -8 + 18 -4 -3 + 3 16 -14 + 30 -4 -10 + -17 8 -9 + 19 3 -3 + -9 1 0 + 6 11 -29 + -4 -17 -1 + -6 2 11 + -12 6 22 + -4 0 -13 + 10 17 4 + 9 -7 6 + -4 0 -2 + 6 14 -4 + 15 22 8 + -24 -3 -22 + -19 -10 19 + -3 5 4 + 1 0 -9 + -2 6 -1 + 0 -14 -10 + -1 7 5 + 11 -5 -4 + -16 -16 -15 + 2 1 -10 + -15 11 25 + 8 19 -1 + 7 4 24 + -13 7 6 + 22 2 12 + -19 3 -9 + 4 4 14 + -13 11 4 + 13 8 -2 + 13 -7 2 + 20 10 13 + 6 4 -2 + 14 4 -7 + -6 22 -14 + -21 6 -1 + -21 12 9 + 2 -1 -18 + 2 7 -6 + -14 10 0 + 8 8 -5 + -9 15 -11 + -16 13 4 + -20 17 6 + -7 -8 -10 + 8 16 14 + 13 -18 -7 + 6 5 -14 + -20 7 -4 + 11 5 -19 + -14 2 0 + 2 -5 -12 + -1 5 -18 + -4 7 -14 + -1 8 5 + 7 6 3 + -18 -4 -11 + -3 6 -5 + 5 -11 -3 + -20 -3 -12 + -6 -15 6 + 8 -3 11 + -15 14 -1 + 4 -3 7 + -2 -20 12 + 21 -18 5 + -3 -10 9 + 1 6 -4 + -5 4 13 + -13 -2 1 + -3 -3 4 + 11 4 -1 + -5 -4 -2 + 5 7 10 + 10 11 13 + 1 -12 -5 + -7 -11 18 + 6 12 -15 + 14 -8 -29 + 9 7 13 + -18 20 7 + -1 14 -11 + 23 -20 15 + 9 0 -1 + 11 14 6 + 10 18 -8 + 8 4 23 + 23 -10 -5 + 28 -6 8 + 7 -8 14 + 1 -9 0 + 2 6 1 + 3 -5 1 + 1 1 -5 + 8 -4 9 + 11 -6 10 + -14 -18 12 + 8 5 -3 + 9 8 -5 + -28 -19 -12 + 12 -14 -12 + -12 5 20 + 5 -22 7 + 18 14 -10 + -8 -9 11 + -26 13 5 + -16 -2 -11 + -5 -9 2 + -10 7 -18 + -12 -8 -10 + -8 -1 2 + -3 0 11 + -6 5 12 + -5 -1 6 + -4 6 7 + 5 6 -9 + 2 -6 1 + 13 -9 1 + 19 5 -3 + -8 12 -13 + -5 -2 9 + -5 -9 -24 + 18 3 -13 + -23 4 13 + -7 10 -17 + -9 9 6 + 30 -18 -6 + 29 14 14 + -18 10 0 + -3 -5 -5 + -17 -4 13 + 8 11 18 + 4 -9 3 + 6 0 20 + -10 0 -8 + 9 9 2 + 13 -5 -22 + 17 10 -14 + 5 7 -7 + -13 10 9 + -4 6 -5 + 9 -15 13 + -2 -13 -10 + -2 -12 -6 + -1 -11 2 + -11 -5 16 + -11 5 4 + -6 -14 -11 + -19 14 21 + 3 -2 -6 + -17 -4 -5 + 5 8 -6 + -13 -17 -5 + 14 12 -7 + 29 13 5 + -4 -10 -5 + -10 2 -13 + -8 -3 12 + 2 -17 -15 + -19 -9 17 + 8 9 -7 + -1 7 1 + 6 -21 5 + -12 -8 15 + 3 -7 -7 + -17 8 14 + -7 13 -3 + -8 14 -21 + -12 -11 7 + 5 4 -12 + -23 14 -7 + 11 -17 -3 + 3 -20 3 + -21 -10 10 + 1 12 -15 + -7 6 21 + -13 -18 -2 + 8 -14 -12 + 10 -10 5 + 2 -26 -8 + 3 -12 -1 + 3 -3 12 + 7 -15 9 + 12 -1 -22 + 6 20 13 + 2 -9 26 + 9 -3 -17 + -2 6 -27 + 0 13 -2 + -7 -2 5 + 0 22 -8 + -8 18 1 + -16 -9 13 + 2 -3 13 + 1 -11 -5 + 8 17 13 + 14 13 -12 + -10 9 7 + 14 7 6 + 11 2 -13 + -4 20 16 + 3 24 -13 + -4 14 2 + -10 -6 -8 + 5 -23 -13 + 11 -3 -6 + 15 8 10 + -4 -12 -10 + 18 17 7 + -6 -10 6 + 1 -16 -14 + -1 9 6 + -7 -31 -13 + 10 10 13 + 24 -5 30 + -1 14 -13 + -6 0 -9 + -5 -8 2 + 9 -5 11 + 13 6 6 + -9 -17 4 + 12 -11 -10 + -15 22 -14 + 14 14 -4 + 12 -1 -5 + 5 4 2 + 7 -15 -10 + 17 -1 6 + 14 -10 -14 + 10 -5 14 + -13 -16 4 + -4 -26 -3 + 7 1 24 + -10 11 10 + 25 -14 -2 + -11 9 6 + -11 9 21 + -1 -7 8 + 6 -4 -7 + 0 -4 0 + -24 9 -7 + -15 17 -3 + -4 -7 15 + 11 10 4 + -26 11 4 + 13 -3 21 + -5 11 -2 + -2 7 7 + -12 7 11 + -9 -19 -20 + -5 6 -1 + -2 10 -11 + -3 -1 -6 + -8 6 0 + -8 -11 9 + 26 15 -1 + -15 11 0 + 7 -3 4 + -14 -10 17 + -18 13 -5 + -2 -18 21 + -6 13 8 + -13 -6 11 + 7 20 8 + -2 -3 1 + -3 -12 14 + -3 -4 -3 + -6 -2 -24 + 4 21 11 + -6 -19 21 + -1 -16 4 + -8 9 -14 + 0 -9 5 + 3 -5 2 + 14 0 -26 + 8 4 -3 + -3 16 4 + 7 -5 0 + 13 -9 -10 + -5 -12 -9 + 11 -6 -21 + 16 16 -5 + -7 11 -16 + -6 18 -2 + -8 9 -14 + 4 3 -3 + 0 -7 -13 + 11 13 -15 + -21 0 -6 + 3 3 14 + -11 18 6 + -9 3 -10 + -20 -2 24 + 0 -23 7 + -10 1 -4 + 3 -11 10 + -1 -10 13 + 5 -5 2 + 2 -24 17 + 9 -22 -14 + -14 -16 -7 + 7 -4 18 + -2 3 -2 + 3 4 23 + 4 11 10 + 11 0 13 + -11 8 7 + 1 -16 -9 + 10 5 12 + -20 12 -2 + 4 -5 16 + -7 -10 10 + -8 -2 16 + 10 10 -18 + -7 -8 0 + -1 4 4 + 6 -8 -3 + 1 6 -11 + 0 29 2 + 15 20 17 + -3 1 -8 + -14 -1 -10 + -3 13 4 + 8 -4 0 + 12 -4 -2 + 0 11 -11 + 17 4 -9 + 6 6 22 + -1 -21 6 + 10 -4 17 + -1 7 5 + 5 9 12 + -12 5 -16 + 0 -23 6 + -4 16 -12 + 11 18 -2 + -6 -14 -6 + 14 2 19 + -6 -7 8 + 15 7 13 + 0 -2 -1 + -13 0 7 + -5 2 -6 + 11 13 5 + 2 18 -19 + 10 -4 0 + 16 -12 -21 + -18 16 4 + -3 -4 -8 + 1 -3 -3 + 10 -16 -7 + -20 -22 -7 + 7 -6 -7 + 7 2 6 + -8 -5 -12 + 7 -1 0 + -21 1 0 + 11 -2 -23 + -27 10 -11 + 12 -10 12 + -9 9 6 + -4 4 -10 + -13 -1 3 + -7 -3 -9 + -6 -5 -4 + -21 -1 -12 + 16 -12 10 + -22 20 20 + 3 -3 13 + -6 -9 -3 + 8 -8 1 + 6 0 -11 + 2 5 14 + -1 6 19 + -11 -16 1 + -10 -2 5 + 0 11 16 + -13 5 7 + -2 -9 -19 + 4 7 -7 + -2 1 6 + -29 11 -10 + 3 -6 -8 + 0 -2 -13 + -9 9 -13 + -16 -8 2 + 1 11 0 + -8 5 -7 + 3 -21 7 + -12 2 -7 + 3 -17 14 + -14 -6 -25 + 14 -20 -4 + 15 14 22 + -10 -2 14 + -5 -13 -10 + -20 24 -10 + 8 -4 13 + 2 4 1 + 14 -6 -15 + -1 6 6 + 6 10 -2 + 9 13 11 + 12 -7 6 + 2 -7 13 + 15 -6 1 + 2 11 18 + -8 1 -1 + -2 -7 0 + -5 15 18 + 9 -10 0 + 1 5 -7 + -7 -6 -17 + 1 9 2 + -12 0 -21 + 1 -3 -7 + 7 -5 8 + 4 9 -8 + -26 2 -8 + 11 20 16 + -1 -29 18 + 5 1 -9 + 7 12 8 + -14 -14 2 + 8 -12 -19 + -8 21 6 + -2 -12 8 + -3 -12 13 + -14 -11 1 + -2 1 3 + 12 0 20 + 10 8 -5 + -17 -4 9 + 8 -6 -6 + -5 -10 -8 + 12 11 6 + -4 3 6 + 5 -3 4 + -2 2 -2 + -23 -12 7 + -10 6 15 + -12 15 8 + -1 -11 -14 + 2 11 8 + -8 4 16 + 22 -6 -1 + -13 8 11 + 13 6 10 + 2 -24 -14 + 7 -4 11 + -17 19 -14 + 9 10 -2 + -9 20 28 + 1 -4 -6 + 7 5 27 + -9 -4 -11 + 3 2 7 + 1 -10 -5 + 12 4 -14 + -16 -14 -5 + 16 7 -10 + 4 -12 -11 + -9 0 -12 + -2 0 -16 + -17 11 -10 + 9 0 18 + 6 7 3 + 9 0 -18 + 10 12 2 + 10 17 17 + 1 -15 -7 + -10 -2 1 + -6 -1 -5 + 26 -3 3 + -2 -20 16 + -6 -9 -12 + -10 15 6 + -1 16 6 + -16 -1 7 + 11 0 9 + -14 13 19 + -11 -16 -16 + 1 12 1 + -1 9 16 + -2 16 30 + 9 -2 1 + 3 -18 -11 + 2 -4 -3 + -12 -9 -17 + -12 2 -1 + 7 21 8 + -9 -10 -16 + 15 0 6 + 19 7 1 + -6 13 1 + 3 13 9 + 26 -1 -7 + -17 -31 -18 + 4 -11 25 + -7 -6 -11 + 17 -13 13 + -26 2 -4 + -3 -7 12 + 17 -9 -17 + -1 11 -18 + -2 -2 20 + -10 0 3 + 18 -3 -3 + -6 -20 -11 + -8 -19 -6 + -8 -15 0 + 7 -5 17 + -12 -12 -3 + -5 -12 13 + 4 4 3 + 10 10 -4 + 6 -17 11 + -5 -26 18 + -10 20 -11 + 17 -5 -8 + 1 15 -12 + 18 -3 -10 + -15 22 11 + -24 -8 14 + -11 6 -11 + -8 7 5 + 13 -27 -9 + -6 -5 19 + -6 17 4 + 14 14 1 + 1 25 -3 + -8 1 2 + 14 8 1 + 8 2 17 + 6 -1 -4 + -8 -4 -9 + -10 15 2 + 3 11 -25 + -1 9 -4 + -5 -15 -8 + 6 -11 -2 + -18 -7 17 + 9 14 -8 + 16 6 12 + -2 -2 -6 + -18 8 -18 + -1 7 -5 + 13 -6 -7 + 1 9 3 + 4 -10 10 + 14 1 0 + 2 10 1 + -1 3 -1 + 6 -1 6 + -14 11 10 + 3 1 9 + 22 5 -10 + -1 27 -24 + -11 -15 -7 + -7 -14 20 + -3 -3 -1 + 18 10 12 + -9 1 -13 + -16 8 -10 + 0 -14 3 + -7 -4 17 + -4 -17 -27 + 4 -27 -7 + 7 -2 -11 + 31 5 17 + -6 -4 11 + -16 -8 30 + 16 -7 12 + 4 -8 4 + 10 11 10 + -10 -14 16 + -1 -6 -5 + -14 14 7 + -22 -2 -23 + -13 15 13 + 3 9 8 + -4 -4 11 + 13 -15 5 + 9 0 11 + 6 -7 27 + 15 8 6 + 7 1 4 + -6 24 3 + 0 -12 -16 + 18 5 -5 + -6 14 16 + 31 -24 -19 + -17 17 2 + 20 7 22 + 2 -5 -9 + 2 -6 -16 + -6 12 12 + 22 6 -17 + 31 -14 7 + 3 15 8 + 4 -19 -22 + 0 -2 6 + 4 11 2 + 17 3 7 + 16 1 3 + 6 20 -2 + 5 -7 0 + 9 -2 28 + 17 -18 -7 + -22 -3 -14 + -15 -3 3 + 0 -22 10 + 3 -10 -4 + 5 -22 0 + 1 10 10 + 17 -5 7 + 6 -6 -4 + -5 5 -3 + -5 17 4 + -5 -16 9 + -4 20 1 + -6 17 0 + -12 -9 9 + -10 -2 -7 + 2 -16 10 + -25 6 -13 + 16 1 -7 + 11 7 -12 + 13 -11 0 + -7 -1 -8 + -24 1 -17 + -13 0 -13 + 16 25 15 + 20 -23 -5 + 16 -3 23 + 4 6 -14 + 10 -7 -5 + -7 4 7 + -3 -10 -1 + -3 -10 2 + -26 -4 -18 + 7 3 -10 + 5 17 -15 + -7 7 -7 + -31 11 -12 + 10 -12 11 + 3 -2 -9 + -4 -5 -1 + 9 19 14 + 5 -2 -24 + 0 -18 0 + -16 2 -1 + 4 2 -8 + 17 10 8 + 8 27 -9 + -6 1 5 + 0 -5 -4 + 9 7 2 + 25 -3 0 + 2 -9 22 + 9 1 6 + 1 8 15 + -8 -20 -15 + 6 -1 -21 + 11 2 2 + 13 -23 9 + -6 1 6 + -17 18 5 + -1 15 24 + 9 -15 -25 + 24 -19 -9 + 4 11 3 + -7 20 3 + 12 -5 -19 + 1 9 -1 + -10 1 1 + 8 13 11 + -9 -6 0 + -24 -9 10 + 15 7 6 + 4 0 19 + -1 7 9 + -14 -6 23 + -4 -13 -2 + 10 0 -12 + -3 -8 -3 + -22 -2 -2 + -8 -14 9 + -6 10 18 + 6 -2 -2 + 24 1 -8 + 6 -2 19 + 3 0 -8 + 4 -19 -6 + 11 -7 -12 + 9 1 1 + 8 -9 -8 + 25 -5 -10 + 14 -7 -1 + -7 13 17 + 1 -18 -2 + 2 -18 -4 + 4 -5 8 + 17 7 24 + -8 -2 -9 + -16 -10 5 + -14 9 6 + 3 29 24 + 13 19 -14 + 1 -9 15 + 3 17 3 + -8 -16 7 + 2 -10 26 + -10 12 10 + 21 -10 -15 + -8 -9 -1 + -9 14 -17 + 10 -16 20 + 8 -1 -7 + 20 13 3 + 4 -4 22 + -15 -9 14 + -2 -13 8 + -22 6 -5 + 0 -15 14 + -18 8 -6 + -21 12 -1 + 4 -20 21 + 16 24 1 + 21 2 12 + 5 20 2 + 15 6 -5 + 17 6 14 + 7 -12 -15 + 24 4 30 + -7 -14 23 + 22 -19 12 + -11 -4 -10 + 3 1 0 + -5 23 10 + 16 2 -4 + 9 7 12 + 3 4 13 + 14 -11 1 + 1 -20 16 + -10 9 18 + 16 1 -9 + 4 -15 8 + -10 6 4 + 18 -11 -1 + 22 18 -7 + -16 14 -15 + -3 -15 1 + -11 0 -18 + -6 7 3 + 4 11 16 + -12 -3 -1 + 12 21 -5 + -13 19 -4 + -15 -7 5 + -10 17 -8 + -13 15 -10 + -3 -1 -1 + -9 11 3 + 3 -7 12 + -5 17 21 + -5 14 -8 + -4 -12 12 + 4 -4 13 + 8 7 -12 + 3 1 -12 + 1 23 14 + 3 -2 2 + -4 -17 17 + -22 12 -2 + 3 1 -15 + 13 3 9 + -1 2 -4 + -15 11 -3 + 1 11 -8 + 3 -7 -6 + 2 13 -6 + -5 -11 -14 + 12 2 -1 + 8 -10 2 + 14 9 1 + -8 13 19 + -8 -12 -8 + 17 -11 -8 + -10 -18 20 + -7 -5 -1 + 6 8 4 + 16 7 -15 + -18 -2 -18 + -8 3 13 + 9 2 4 + -8 28 -15 + -7 5 8 + -6 0 -6 + -8 -7 14 + 6 -19 -4 + 26 -5 -4 + 10 13 -19 + 3 14 3 + 17 -10 20 + 21 -4 16 + -6 -1 8 + -3 -2 9 + -5 9 -3 + 1 0 3 + -10 -7 25 + 8 24 6 + -1 3 0 + 9 -4 -5 + 6 1 10 + 5 -3 0 + -15 7 -6 + -12 -12 -14 + 18 12 -11 + 7 10 0 + -3 17 6 + -27 8 11 + 5 -11 -13 + 9 -15 18 + 25 -26 -7 + 6 14 0 + 2 9 3 + -8 5 11 + 4 -1 -3 + 16 -17 12 + -3 -6 -9 + -9 4 3 + -9 10 -13 + 6 14 0 + 4 -17 -16 + -16 11 -15 + 8 1 1 + -1 2 18 + -19 -17 22 + -2 14 13 + 8 8 -13 + 3 -10 -20 + -8 -17 0 + 7 1 -21 + 10 11 -6 + -11 -11 -10 + -21 -4 10 + 3 4 -14 + -10 -5 7 + 26 -14 -7 + -7 -7 -8 + -1 14 -4 + -13 -8 4 + 6 18 10 + 3 13 0 + 8 -5 -16 + 8 -12 -18 + 22 -14 16 + 16 5 5 + -8 -12 -12 + -14 3 -18 + -3 4 -5 + 21 -1 1 + 2 -8 -2 + 0 -8 4 + -10 -12 3 + 3 -3 10 + -22 2 2 + 11 -5 -19 + -16 -4 27 + 1 16 -10 + 1 -12 -3 + 17 17 10 + -6 -3 12 + 5 -5 -10 + 4 -1 -13 + 4 8 12 + -4 -1 -2 + -19 3 -4 + -13 7 -13 + -24 3 -26 + 8 18 -14 + -2 -12 17 + -8 2 -9 + 3 -15 28 + 13 17 4 + 4 18 8 + -6 11 5 + -10 11 -5 + 7 5 8 + 5 -8 10 + 2 8 -6 + -1 20 17 + -3 17 -28 + -11 -2 6 + 6 -16 7 + -12 0 7 + -1 -1 6 + -7 16 20 + 7 -1 5 + 3 -17 -12 + -11 -15 8 + -2 18 11 + 11 4 18 + -3 14 -6 + -3 10 8 + -16 -12 -4 + 6 14 -10 + -8 -6 19 + -19 14 0 + 23 -1 -7 + 13 1 -1 + -14 -8 -7 + -11 4 3 + 1 7 -12 + -31 4 3 + 3 -13 4 + 19 -2 13 + 10 1 -3 + -6 10 -9 + -6 -4 11 + -20 -8 -7 + 22 11 3 + -11 9 -4 + -7 8 -16 + 1 3 10 + 16 -5 9 + -10 -8 -8 + 3 6 -4 + 22 8 12 + -6 -4 10 + -3 -16 10 + 30 4 3 + 1 -20 -11 + -2 -4 18 + -4 -11 -12 + 6 0 12 + 14 15 5 + -11 11 -15 + 1 20 2 + -12 8 5 + 0 20 -6 + 3 5 -14 + -16 16 5 + 22 -10 -13 + 16 11 9 + -6 -11 -11 + 15 -18 0 + 3 9 -2 + 15 -1 -6 + -2 16 -11 + -7 -15 24 + -1 11 -10 + -11 -13 0 + 0 -3 -19 + -5 -6 -11 + 0 -10 3 + -3 18 -8 + -10 -17 -8 + -2 1 -3 + 15 -14 -1 + -7 -8 12 + 25 5 8 + 7 24 2 + -1 6 13 + 1 9 11 + 0 -21 2 + -20 5 -1 + -9 11 16 + 11 -4 -9 + 9 18 3 + 10 -13 -8 + 8 9 -6 + 11 -1 -17 + 9 -8 4 + 6 -13 6 + 5 17 20 + -2 -5 10 + 7 -14 -2 + -1 -2 9 + 2 -4 -6 + -6 16 19 + -6 -12 -23 + -10 7 1 + 11 -1 2 + 6 -1 -4 + 22 -14 -2 + 13 -5 -14 + -13 -1 -10 + -7 -17 3 + 3 -4 -6 + 3 -14 9 + -25 -1 8 + -1 13 26 + 0 -18 21 + 11 5 8 + -9 -2 -2 + -1 3 -16 + -14 -16 5 + 1 17 -9 + 1 -13 -2 + 12 -22 16 + -11 1 13 + 13 -3 -10 + 0 12 -20 + -1 -6 15 + -7 -19 -4 + 8 2 1 + 9 -10 13 + -17 4 9 + -5 -22 -7 + 0 7 -4 + -7 13 -2 + 7 2 -22 + 11 6 5 + -7 -1 -3 + -2 -16 13 + -2 -8 1 + -14 13 -9 + 6 -13 -3 + -11 14 6 + -19 10 31 + -14 -14 2 + -7 -3 16 + 17 -9 -5 + -2 16 1 + -11 10 12 + 12 8 9 + 7 -3 10 + -24 9 18 + 16 4 -3 + 3 10 2 + 7 -16 -8 + 9 -13 -7 + -4 -6 -8 + 9 7 -16 + 28 6 2 + -6 8 -2 + -9 -7 -11 + 7 -8 -4 + 15 7 3 + -2 8 -5 + -25 13 12 + 9 11 13 + 5 -4 5 + 4 -1 -14 + -3 -17 16 + 3 -6 11 + -7 -3 -4 + -12 -5 -1 + 2 -6 10 + -15 -20 -8 + 11 11 -25 + -2 -3 -8 + 10 2 6 + 16 -12 -6 + 2 -9 -22 + -13 14 -4 + -5 29 4 + 19 -3 12 + -13 -5 5 + 17 5 13 + -5 -2 13 + -6 -1 11 + -18 -7 14 + 22 -17 -2 + 11 -4 6 + 0 -12 -4 + 5 -2 -11 + -4 19 -6 + -18 6 -1 + -3 8 3 + 11 -15 -11 + 10 1 10 + 3 -22 -17 + -3 -4 0 + 3 -5 2 + -9 -14 -21 + 7 -9 4 + -19 -14 5 + 6 -3 11 + -27 7 22 + 7 9 -10 + 19 1 -18 + -7 15 5 + 12 4 -16 + 12 11 -18 + 8 -3 10 + 9 -5 -8 + 10 5 0 + 10 -2 -18 + -5 -10 18 + 5 8 12 + 3 -6 0 + -7 -13 -24 + 12 14 -2 + -9 -13 15 + 3 19 11 + -13 -7 -8 + 2 16 -3 + 6 -19 1 + 4 19 -6 + -14 -3 -12 + -8 -8 -8 + 15 -16 7 + -9 -15 6 + -18 -7 9 + 2 28 10 + -10 0 7 + 6 -1 -9 + -17 -8 19 + -4 -1 23 + 14 18 25 + 0 18 -25 + -13 -14 -12 + 6 -2 0 + 13 -2 3 + 1 5 -21 + -1 -9 2 + -9 5 -2 + -7 6 19 + -12 -24 4 + 1 -13 4 + -5 2 3 + -5 -6 11 + -1 25 6 + -6 -15 15 + -8 -8 0 + 3 -17 -8 + -11 -13 15 + -24 8 -4 + -13 6 23 + 1 -10 19 + 8 13 22 + 5 3 -21 + 15 25 11 + -21 8 -9 + -29 -2 -14 + 20 -1 10 + 7 -20 2 + 16 15 -16 + -1 -11 9 + -3 -5 11 + 1 1 -10 + -2 2 4 + -4 -7 -12 + 14 18 2 + -14 -2 -3 + 8 -19 18 + 14 -4 -12 + -10 6 -11 + 10 -3 16 + 1 23 -17 + 5 -23 4 + -10 -24 25 + 5 11 7 + -9 -10 7 + -1 8 2 + -5 3 8 + -4 -4 -3 + -1 13 -14 + -7 9 9 + 17 0 -8 + -23 -12 -16 + -11 16 -17 + 3 -17 -3 + -15 8 27 + -6 6 -25 + -10 10 2 + 3 -13 -7 + 23 15 -5 + -3 12 6 + -10 -10 -5 + -14 -13 7 + 20 -12 16 + 27 -25 -9 + 19 8 -9 + 12 -15 13 + -3 0 2 + -12 -5 -3 + -2 -17 -17 + -6 5 10 + 12 10 -3 + -11 -4 1 + -15 11 -3 + 8 9 -22 + -11 -7 -1 + 7 5 -3 + 24 -12 0 + -12 13 9 + -17 -9 7 + -4 -11 -18 + 0 -10 6 + -8 -5 -8 + 4 13 -13 + 10 0 -14 + 11 18 16 + 14 -11 1 + -15 -9 23 + -2 17 -6 + -18 3 -4 + 5 6 2 + -11 -15 -4 + -8 -26 1 + 2 5 -13 + 12 -4 10 + 19 22 1 + -3 -15 11 + 6 17 4 + -8 -19 -13 + 0 -5 -14 + 24 12 6 + -5 -24 24 + -3 8 -2 + -1 -2 -15 + 1 6 -6 + -15 -11 10 + 9 -14 -7 + 20 -13 -23 + 0 8 -1 + -5 -12 23 + -8 0 19 + 8 11 8 + 14 10 19 + -6 -8 1 + -17 -6 -12 + -8 -12 -17 + 0 -24 -8 + -16 4 8 + -10 -14 -14 + 20 11 15 + -19 -1 8 + -2 1 -8 + 8 -2 -22 + 6 21 -1 + 24 -3 11 + -5 -1 -3 + 14 4 -4 + 16 8 7 + -9 5 -2 + 21 -9 10 + 6 7 16 + -2 -1 -18 + 11 10 -7 + 6 -12 23 + 11 3 -18 + 7 -15 21 + 0 1 -8 + 12 -1 0 + 9 -7 -6 + 6 18 11 + 9 -2 -6 + -4 -16 0 + -5 -5 -1 + -3 -4 -14 + 2 11 -12 + -11 -4 16 + 7 6 -1 + 2 -6 6 + -12 18 8 + 17 2 -12 + -16 10 4 + 0 11 -12 + -8 -19 -7 + 12 9 5 + 1 -2 -12 + -6 -9 -5 + -10 -6 18 + -22 9 -10 + -10 -17 -9 + 17 5 1 + 8 5 -4 + 16 -9 -14 + 17 -1 -22 + 7 1 -9 + -14 -12 -1 + -17 -19 -7 + -17 8 -2 + 9 -8 -13 + -15 17 -4 + 9 -7 14 + -7 2 0 + 1 13 0 + 3 5 10 + -17 -23 -11 + 4 -12 15 + 7 -15 -7 + -4 8 7 + -1 7 -19 + -4 5 11 + 8 -3 4 + 6 -1 -5 + 22 -6 10 + -1 -4 19 + 12 -5 -6 + 6 -18 6 + 3 -17 -20 + 19 -2 -5 + -8 15 8 + -12 -3 -16 + 15 1 -13 + -14 9 -11 + -5 12 7 + 4 6 6 + 4 4 9 + 7 8 15 + -11 2 8 + 12 11 -6 + -14 6 11 + 9 7 -5 + -3 -28 -8 + -14 13 -12 + -3 2 -2 + -5 20 4 + 17 -23 12 + -4 0 0 + 24 -11 -9 + 6 -8 -12 + -17 1 20 + -3 5 -15 + 2 7 7 + -3 -12 -10 + -5 9 -2 + -4 2 1 + -10 -3 8 + -8 20 -19 + 5 -8 10 + -4 12 2 + -6 -13 -4 + -17 -5 -4 + 0 24 3 + -9 7 -2 + -16 3 -1 + -15 13 -1 + 2 -13 -17 + 11 -5 14 + -16 -1 -20 + 1 5 4 + -3 6 11 + -15 -3 19 + -1 -2 8 + 10 -3 -17 + -21 7 -13 + -6 -19 6 + -5 -3 3 + 3 0 -14 + 14 -7 -14 + -7 -3 13 + -1 11 2 + 15 -18 14 + 22 5 -1 + -9 12 17 + 7 -13 4 + -20 -8 -19 + -14 -3 8 + 14 4 7 + 1 -8 23 + 21 1 29 + -6 -5 13 + 4 -9 -6 + 15 -6 -3 + 1 -6 -10 + -8 -15 -8 + -17 4 16 + 4 15 5 + -5 1 11 + -8 -13 -11 + 2 -21 -22 + -6 -11 5 + 16 -3 -9 + -9 -9 10 + -23 -8 -9 + 11 19 -3 + -21 1 -5 + 14 -3 3 + -4 2 -3 + 3 2 -7 + 9 9 2 + -14 11 -10 + -22 -10 -4 + 4 -4 6 + -9 -2 6 + 25 2 -15 + 11 8 -21 + 10 3 -11 + 5 3 8 + -16 1 -1 + 2 -6 0 + -6 -15 -10 + -6 -11 13 + -8 3 -8 + -10 2 13 + 7 21 -3 + 14 -6 -11 + -2 16 -8 + -13 9 -14 + -3 5 -19 + -2 -5 -19 + 8 -4 -5 + -5 23 13 + -8 -2 1 + 10 -1 3 + 12 14 10 + -11 14 -8 + -11 -12 18 + -8 -14 -1 + -5 10 -14 + 6 17 -15 + 0 -5 13 + -12 -5 -16 + 8 -2 6 + -7 -1 14 + -8 -9 6 + -11 -2 -19 + -9 -7 11 + 24 -5 0 + -13 15 -16 + -7 -3 15 + -11 3 -6 + 11 17 -6 + -8 3 -14 + 6 4 -12 + -6 3 -3 + -4 -9 12 + 14 12 -6 + 6 1 -4 + 23 2 -6 + -14 9 2 + 6 -12 -11 + -5 -10 -16 + 3 8 9 + 6 1 0 + -4 10 10 + 4 2 -13 + -1 -9 11 + -5 -16 8 + -14 -7 17 + 9 -12 8 + 10 -11 -6 + 10 6 -3 + -27 4 8 + -13 2 -6 + -11 22 23 + 1 -2 -8 + 2 10 -5 + 0 9 3 + 20 0 8 + 15 -8 8 + 2 -6 -14 + -6 4 -3 + -27 -13 9 + 11 -13 -5 + -13 2 -5 + 5 -24 2 + 8 8 10 + -6 1 -2 + 1 -1 10 + 6 4 -11 + 6 -17 -4 + 2 11 -1 + 0 8 -3 + 9 -21 7 + 15 -2 8 + -5 -20 0 + 4 10 8 + 9 -7 -7 + 23 6 -4 + -4 -8 -4 + -9 17 -17 + 0 8 6 + 6 -4 -11 + -9 -2 8 + 8 -10 7 + -7 6 -10 + -9 11 4 + 7 -16 -7 + 15 4 12 + 7 -9 6 + -14 -11 12 + -6 9 24 + 8 11 13 + -11 4 -9 + 13 -24 -3 + -20 -16 7 + -2 6 6 + -5 0 13 + -12 19 -8 + 11 7 -15 + -6 16 9 + 7 -12 -8 + 6 13 14 + 23 8 8 + -14 10 -13 + -8 11 -12 + 18 -10 0 + 1 11 -8 + 8 -4 0 + -20 -6 7 + 20 -7 -10 + 13 -1 -1 + -2 8 4 + -16 29 -15 + -4 14 8 + 14 -14 -10 + -4 -7 -13 + -13 -7 13 + -1 -5 8 + 18 6 -6 + -9 12 -13 + 9 -16 8 + 10 8 23 + -19 -9 -1 + -13 -8 -3 + 7 1 -9 + -18 -11 -5 + -1 3 1 + 8 23 -7 + -12 -11 -1 + -6 21 7 + 8 -13 10 + -16 24 -1 + 5 8 21 + 16 5 11 + -25 -6 10 + -17 -10 5 + -1 -1 -4 + 6 6 3 + 16 17 10 + 9 -13 -20 + -7 30 0 + 15 5 7 + 3 -2 11 + 14 13 17 + 19 -9 5 + 15 16 -2 + -7 1 -3 + 3 -20 8 + 4 2 1 + -6 22 -10 + 9 14 -6 + 21 -6 -6 + -2 -5 -11 + -11 -24 11 + 1 19 -5 + 13 6 11 + -13 16 -5 + 16 -8 -20 + -17 -16 20 + 2 8 4 + -7 5 -17 + 1 -9 18 + -9 -11 -2 + 12 4 3 + 11 27 -26 + -1 4 0 + -14 2 -11 + 21 3 -9 + 3 5 -1 + 3 16 12 + 11 9 2 + -26 19 23 + 1 -3 26 + -9 -10 -6 + 8 11 20 + -2 -1 8 + 6 -25 13 + 9 -2 13 + 0 2 9 + -7 -8 19 + 9 20 -17 + -4 -16 18 + 20 -11 15 + -17 12 0 + -7 6 -8 + 8 -4 15 + 3 7 3 + 2 -17 3 + 7 -15 -6 + -23 -14 3 + -5 -10 -3 + -22 16 23 + -6 6 -5 + -12 14 0 + 9 0 -3 + -23 11 2 + 12 13 3 + 4 16 -7 + -10 -14 -2 + -15 6 -6 + -11 7 3 + 14 -21 -2 + -1 -5 -13 + -18 -2 -10 + 4 -15 -14 + 10 1 -14 + -8 1 9 + -3 -7 15 + 14 -19 21 + 15 -27 4 + -17 -3 -6 + -1 -2 0 + 16 10 -15 + 0 -4 4 + 19 -16 6 + 17 7 -12 + -13 15 -8 + 14 3 10 + -23 17 -14 + -4 -6 -13 + 9 -4 22 + -11 0 9 + -8 -18 13 + 0 -18 10 + 16 -7 -5 + -11 -1 -18 + 3 11 -19 + 6 -11 -14 + 11 15 13 + -8 -20 7 + 7 -11 6 + 9 14 1 + -4 4 -2 + -6 -16 -12 + 1 -10 12 + -7 7 -2 + -18 -1 5 + 16 -12 6 + -6 -22 -14 + -3 14 18 + 11 -21 -5 + 4 7 -8 + -9 19 10 + -5 8 -1 + 5 0 -2 + -5 -13 4 + 6 -7 6 + 0 10 -2 + 0 -5 9 + -4 -8 6 + 0 9 -7 + -1 18 -14 + 9 -2 9 + 16 22 15 + 10 21 0 + 23 13 24 + 5 -3 -7 + 9 -9 10 + 19 -13 -5 + 7 3 8 + 18 1 -5 + 30 -2 6 + 3 -9 -3 + -4 -2 -10 + 14 -1 6 + -2 17 1 + 1 -15 21 + 3 5 -9 + -20 3 6 + -8 13 25 + 10 6 9 + -7 14 2 + 10 -7 4 + -15 -16 -5 + 2 -6 6 + -5 -16 -5 + -1 -7 -3 + -15 17 -24 + -17 11 -10 + -21 -9 12 + 12 2 0 + 21 3 -11 + 4 -18 0 + 15 -8 -13 + 15 15 2 + -11 -3 0 + -15 -8 -6 + 13 -7 2 + 5 -7 14 + -28 9 -6 + -18 1 -12 + -9 2 0 + 25 -15 2 + 16 -7 -4 + -10 -13 -8 + 18 -4 16 + -3 -3 -9 + 13 -9 -8 + -8 19 17 + 14 26 2 + -18 1 7 + -7 -16 9 + 5 -13 -11 + -16 -9 0 + -1 15 18 + -7 -13 12 + -2 10 -7 + 16 -11 -8 + 3 -10 3 + 8 -11 14 + -6 16 -14 + -16 1 -6 + -12 15 -4 + 8 -20 8 + -13 7 -12 + -9 14 -16 + 2 -5 -4 + 25 -2 6 + 7 -11 -5 + 11 12 2 + -19 1 -11 + -11 22 -1 + -12 1 -15 + 8 19 -29 + -2 11 4 + -1 1 4 + -1 -13 3 + -3 10 -18 + 5 6 8 + 7 -10 -6 + 0 -5 -4 + 2 -16 -3 + -14 -6 8 + -8 4 7 + 12 -10 1 + 8 8 -17 + -12 7 -4 + 10 -2 15 + -8 9 9 + 12 11 -13 + 12 -1 -13 + -2 5 -7 + -3 -16 -7 + -1 -8 -2 + -2 -9 7 + 9 0 -27 + 10 0 -17 + 15 -4 -3 + 8 -10 2 + 6 6 -5 + 21 -12 10 + 16 0 0 + 3 -3 -1 + -18 -1 -20 + 13 8 15 + 18 11 4 + -12 7 -8 + -14 8 -8 + -15 -15 3 + -4 -13 11 + 4 -25 5 + -8 -16 -12 + 8 -1 12 + -8 -6 -1 + -18 9 -2 + 6 19 -1 + 16 -16 -11 + 1 -11 0 + -8 11 2 + 19 3 22 + -14 -12 0 + 4 12 -11 + 0 -14 -11 + -7 -9 -11 + 4 9 8 + 2 -3 -1 + -13 15 -13 + 5 4 10 + 3 -14 7 + 6 13 5 + -1 -11 -14 + -6 -10 -13 + -15 -6 2 + 0 -5 7 + 10 6 9 + -12 -12 -9 + -10 17 1 + 10 13 5 + 14 3 22 + -2 8 -25 + 20 -6 13 + -7 -11 -7 + -1 -21 0 + 9 -7 13 + 15 -16 -7 + 7 -12 -18 + -13 6 -23 + 18 5 8 + -11 3 5 + -24 2 3 + 12 9 -22 + -6 0 -3 + 3 -5 0 + 10 -10 3 + -20 12 -24 + 10 13 5 + -6 8 -9 + 12 11 -13 + 4 -15 -6 + 1 -2 5 + 10 10 -15 + -14 8 19 + 13 -15 7 + -15 -2 -18 + -3 -13 2 + 0 -14 -11 + 7 -17 8 + 1 -6 -8 + -1 10 12 + 1 -17 13 + 0 -10 16 + 7 -17 6 + -19 5 -1 + -12 -2 2 + -8 4 12 + -5 16 20 + -13 11 14 + -2 -10 -16 + -8 15 -13 + 17 -5 -20 + -16 9 -12 + 10 7 4 + -18 10 10 + -6 24 22 + 2 25 25 + -4 -8 11 + -2 2 11 + 0 3 15 + 6 -2 -5 + -9 -16 4 + 8 6 0 + -8 4 16 + -2 -15 -9 + -16 6 1 + 4 13 2 + -14 9 -8 + 4 12 -14 + -5 5 0 + -14 -8 9 + -10 -18 0 + -6 -24 8 + -5 -19 4 + -9 13 5 + -6 5 9 + 5 -18 16 + -4 -7 -18 + 17 -13 6 + -6 3 3 + 5 -17 -10 + -5 20 -12 + 8 -17 -6 + 8 -4 -25 + 7 0 0 + 21 -21 10 + 5 -8 -1 + -4 4 5 + -3 -3 17 + -4 15 0 + -13 -16 -9 + -20 5 -6 + -3 17 -2 + -17 9 13 + -16 -6 6 + -13 -3 6 + 15 13 25 + 6 5 -9 + 10 -22 -5 + -2 -9 -24 + 3 5 15 + -12 18 5 + -15 4 18 + -6 0 -11 + -8 2 -16 + -1 -1 -10 + -2 -16 6 + 13 22 -20 + 15 1 -5 + -5 -28 -3 + -7 -16 -12 + -3 11 -4 + 10 7 -16 + -4 -8 -26 + -10 8 5 + 21 8 18 + -6 19 7 + 15 -1 2 + 7 16 2 + 15 -5 2 + 20 6 -11 + 6 0 6 + 21 -7 1 + 4 -7 3 + 23 2 -4 + 16 -14 0 + 14 -12 17 + -13 3 -3 + 6 4 12 + 2 -3 -3 + 16 -18 -2 + 12 9 0 + 11 -14 -6 + -2 -3 12 + 13 4 10 + 7 -8 -26 + 14 -4 -5 + -6 19 -10 + -31 20 -1 + -4 -13 0 + -4 8 5 + 10 -12 4 + -2 14 -23 + -8 18 -8 + -20 -6 8 + -4 -6 16 + 4 1 -7 + -24 -3 -23 + -7 12 31 + -21 27 9 + 29 -8 -7 + 17 -3 9 + -6 8 -12 + 2 2 6 + -20 -10 -12 + 5 10 -11 + -3 12 -12 + 18 -15 8 + -6 5 16 + -3 4 -2 + -12 13 12 + -23 -4 12 + -6 -4 3 + 13 -10 3 + -5 -4 17 + -10 12 2 + -16 -4 11 + -2 -16 11 + -20 5 -15 + 16 -15 16 + -9 -18 11 + -14 9 -6 + -19 -1 7 + -14 8 -5 + -7 12 9 + 5 1 10 + 2 4 -5 + 15 -15 7 + 10 3 1 + -5 -17 -24 + 7 6 -9 + -14 18 6 + 13 22 -16 + -10 24 3 + -11 3 -2 + -8 -15 -7 + 18 -3 -4 + 7 -13 25 + -30 -6 -6 + 10 -10 24 + -1 12 -19 + -8 -12 0 + 16 5 -3 + -4 10 3 + 14 11 -1 + 19 2 -7 + 13 10 13 + -13 0 4 + 9 -17 11 + 6 6 -19 + 7 -3 -17 + 13 -12 2 + 6 -14 -7 + 9 -12 -9 + -1 -2 -14 + -18 7 6 + -1 23 25 + -10 -20 -8 + 2 12 2 + -7 -3 -3 + 9 3 21 + 1 -11 -16 + 14 -11 13 + 5 12 15 + -5 -6 -23 + 12 0 15 + 8 0 -3 + -7 -16 12 + 6 -16 16 + -11 21 13 + 15 15 -6 + 12 -5 -5 + 4 4 3 + -4 4 -13 + 5 4 4 + -18 -12 -22 + 9 28 30 + -5 2 -5 + 17 4 -8 + 14 -10 4 + 18 4 -2 + 7 4 14 + -16 -5 17 + -10 6 3 + -7 -10 -5 + 10 2 15 + -11 9 -2 + 3 2 0 + -7 19 4 + 4 -5 -7 + -15 10 -10 + 3 -8 19 + 1 4 2 + 11 -4 -18 + -6 -22 -5 + -1 -13 5 + 15 -3 -14 + -6 17 0 + 4 -10 13 + -10 -9 -11 + -13 -11 9 + 18 -5 -3 + 12 -2 -10 + -4 -14 -8 + 10 -4 3 + 14 3 -7 + 10 15 17 + -3 -10 17 + 8 4 4 + 2 -5 -16 + -11 -4 -15 + 10 13 -2 + -6 -11 1 + -8 -2 -3 + -10 -4 15 + -6 -5 7 + -12 -2 -7 + 0 -15 14 + -13 14 6 + -13 -1 -10 + 11 -7 -14 + 2 14 -2 + 0 20 -19 + 13 11 -8 + 8 8 -1 + 6 -14 -10 + 9 -17 7 + -1 8 6 + 12 -9 -5 + 6 -17 11 + 7 0 7 + 5 -5 4 + 10 -10 10 + 3 16 -11 + 1 -19 -14 + -4 9 -1 + -4 -17 -8 + -14 -30 12 + -14 -14 4 + 4 16 7 + 0 11 17 + 9 6 -2 + 17 10 10 + -3 3 17 + -3 -13 -5 + 14 -6 -17 + 2 -17 -14 + -6 -4 -10 + 4 1 -13 + 12 6 -24 + 31 -1 7 + -9 0 -7 + -9 1 -14 + -9 7 -14 + 5 6 -1 + 1 -5 2 + 11 6 25 + -9 4 -18 + -4 18 17 + -3 -20 -7 + 4 -3 19 + -12 15 -12 + 2 3 -1 + -12 2 10 + 2 -10 0 + 23 26 -4 + 18 15 -17 + -5 12 22 + 0 15 -4 + -30 -5 7 + 8 -16 -11 + 17 -6 -9 + 5 -8 -3 + -5 12 14 + 11 -7 -17 + 1 11 -14 + -7 -16 13 + -1 -14 -22 + 5 -15 -2 + -6 11 13 + 0 7 -9 + -1 -8 -3 + 9 -2 -21 + -14 13 12 + -2 -12 3 + 11 -10 21 + -9 11 -17 + -4 0 -13 + 3 3 10 + -4 -4 -19 + 12 -2 -2 + -10 -14 1 + -4 2 -22 + -8 10 -15 + -17 -4 13 + -1 -5 -1 + -13 6 11 + 1 -14 2 + 10 -15 15 + -13 16 -15 + -3 14 -16 + -12 6 -14 + 5 -11 -6 + -8 10 -11 + 4 14 12 + 10 8 10 + 21 -10 15 + 24 5 8 + -10 -3 -2 + -1 -8 -16 + -16 -6 26 + 8 -18 13 + -10 -5 -5 + -12 7 6 + -17 4 11 + 21 -8 4 + -7 -2 10 + 1 3 -24 + 2 14 -1 + 0 -11 -6 + -12 5 16 + 7 11 -21 + 17 -11 10 + 4 -19 -2 + 10 5 -13 + 16 -10 6 + -9 -14 6 + 19 15 7 + 0 -5 1 + 0 -3 12 + -5 12 1 + -17 4 9 + -28 -9 4 + 6 4 7 + -11 -3 -3 + 10 10 19 + 10 0 -1 + -13 -10 7 + 17 -6 15 + -25 5 -17 + 15 -3 -9 + -14 -2 9 + -15 5 -20 + 17 15 -19 + 12 -11 20 + -11 4 18 + -5 6 0 + 17 7 4 + -14 14 9 + -21 6 8 + 6 -3 -11 + -15 21 5 + 9 -2 13 + 9 9 13 + 4 -19 16 + -2 -12 8 + -10 18 -9 + -6 15 -22 + 20 -13 -3 + 12 7 -26 + 17 5 -10 + 14 -13 2 + 11 -17 29 + 8 -3 8 + -14 -4 -4 + -19 -9 8 + 6 -25 8 + -2 -8 7 + 27 -7 7 + -15 -8 -16 + 0 8 -3 + 10 -1 -7 + 11 -19 -14 + 8 4 7 + -5 14 0 + 4 8 -6 + -5 2 2 + -13 -14 -6 + 6 6 4 + -21 28 10 + 4 -11 13 + -11 19 12 + 2 3 -8 + 10 -23 5 + 7 -13 -7 + 2 -5 -15 + 3 -8 -17 + -5 15 13 + 3 -3 -14 + -3 -7 10 + -3 9 3 + -12 11 -16 + -13 -6 6 + 0 16 14 + 16 0 -11 + -5 4 26 + -5 22 4 + -5 10 0 + -3 18 -3 + 2 3 -18 + -3 -2 -1 + -12 -11 -5 + 21 -12 8 + 19 12 -14 + -8 3 -2 + 5 11 8 + -9 11 -7 + 9 -6 -12 + 13 -9 -11 + 2 -5 20 + 1 0 20 + -8 5 18 + 16 7 -3 + -1 -31 -15 + -18 11 -9 + -6 0 4 + -6 -14 -12 + 9 -15 -23 + -19 -14 10 + 5 3 5 + 14 20 -11 + -7 -16 0 + -5 18 7 + -7 -15 7 + -6 -2 -5 + -7 -10 -11 + 20 6 -10 + -12 -13 -9 + 9 7 -16 + -2 -12 12 + -10 13 -10 + 13 14 12 + -20 -11 -5 + -16 -21 8 + 10 11 -3 + -15 -15 -1 + 9 -3 -11 + 2 0 -9 + 3 4 -9 + -12 3 2 + 4 -15 10 + -7 -17 -9 + -11 -8 26 + 10 -10 15 + -3 -1 5 + 14 3 15 + 26 0 -12 + -9 10 9 + -10 -2 -11 + -9 -12 1 + -13 -13 6 + 8 -15 4 + -9 -17 -22 + 4 10 2 + 6 -15 1 + 3 7 -15 + 7 17 3 + 4 -3 13 + 6 4 18 + 9 -2 4 + -6 10 -4 + -12 -2 3 + 17 -15 -3 + -10 17 -5 + 10 9 -1 + -5 2 -31 + 13 1 -6 + 11 -6 5 + -2 9 9 + 2 -4 1 + 4 -13 -15 + -9 9 6 + -1 12 6 + -2 9 -5 + -11 12 -23 + 7 9 10 + -4 -20 -11 + -7 -6 -12 + -12 5 19 + 6 6 -17 + -4 -14 -26 + -5 30 7 + -10 -4 -5 + -13 -4 2 + 14 0 1 + -8 0 -7 + -4 20 -13 + -11 -4 19 + -5 8 -12 + 20 3 -24 + 13 9 18 + -5 -6 17 + -13 -6 7 + -1 -7 10 + 6 -4 20 + 4 10 15 + -4 3 7 + -3 -7 -6 + 8 -25 -19 + 6 9 -15 + 12 -17 -3 + -19 -14 17 + -15 5 -3 + 6 -1 4 + 26 17 12 + 21 24 -9 + 5 -7 21 + -12 -13 -10 + 8 -2 15 + 21 7 3 + 1 -14 16 + -2 -16 2 + -22 3 -16 + 2 6 11 + -23 -20 20 + 6 26 -1 + 10 -4 12 + -10 7 -19 + 3 -16 19 + -10 3 3 + 16 -13 9 + -4 7 -3 + -16 -15 1 + -7 6 12 + -9 15 -19 + -3 -11 -8 + -5 5 -18 + 13 0 -10 + -5 17 -9 + -14 9 -4 + -18 -21 3 + 11 10 26 + -10 -1 -8 + -6 5 -20 + -3 13 -10 + -12 17 -5 + 3 -16 -4 + 12 2 10 + -6 13 16 + 9 -14 -12 + -21 12 -6 + 7 8 0 + -19 9 -12 + 9 -18 -2 + -14 9 4 + -15 24 15 + 2 -2 18 + 10 10 -12 + 3 -12 2 + 15 -13 6 + 5 -6 -3 + -15 22 2 + 19 -5 3 + -11 -8 21 + 7 -19 1 + 18 20 1 + -7 -7 10 + -14 -13 5 + -11 -20 -10 + -14 -14 -14 + -16 -18 1 + 14 -7 8 + -11 -18 -6 + -1 -3 3 + -19 -21 12 + -26 -2 6 + 4 -7 -17 + 12 -2 -2 + 3 3 14 + -18 11 -3 + 17 9 -12 + -21 7 3 + -7 -21 -1 + -6 -8 -8 + -15 15 -19 + 20 -8 -8 + 0 -2 -12 + 11 3 16 + 16 -5 2 + 8 1 4 + 23 -14 8 + -5 -12 -8 + -16 0 -9 + 2 24 -7 + -12 -16 8 + -9 -20 8 + 4 6 -2 + -7 1 -22 + 22 -8 -4 + 12 13 -9 + 4 8 -17 + 8 -3 -3 + -9 4 18 + 6 -7 9 + -8 -3 -14 + 7 -22 -1 + 2 0 4 + 18 -9 12 + -14 18 -3 + -3 22 -8 + 13 2 6 + 6 -7 9 + 1 -22 -10 + 3 -4 -7 + 18 28 -10 + -2 -20 -12 + 13 -9 11 + 15 -3 11 + 18 -1 -16 + -17 -9 -6 + -10 0 15 + 1 3 9 + 16 -10 -14 + 1 3 10 + -14 24 -16 + 4 3 -8 + -28 -1 7 + -25 -18 -8 + -3 10 -1 + -2 22 -5 + -11 -22 -12 + 13 -4 21 + 13 -3 -18 + 15 8 7 + -7 6 1 + -16 -15 15 + -1 -7 11 + 8 25 -2 + -12 22 4 + -7 26 15 + -9 6 9 + 24 21 4 + -26 -10 21 + 8 5 0 + 9 -2 -22 + 9 19 15 + -7 9 -3 + -26 6 6 + 4 16 -5 + 8 16 -18 + -2 -3 22 + 27 -6 -8 + 14 9 -9 + 2 -5 5 + -9 -16 -13 + -8 -30 -8 + 6 -3 3 + -12 8 31 + -4 -7 13 + 21 6 5 + 9 8 -10 + 8 4 -21 + 15 2 14 + -7 22 5 + -11 1 20 + -10 2 -1 + 5 -2 -8 + -9 -2 -8 + -17 -12 -8 + -4 1 -6 + -5 -1 4 + 28 -13 -11 + -8 14 13 + 13 -6 6 + -15 -11 -9 + -6 -8 -5 + -11 10 -16 + -17 0 15 + 11 2 -15 + -25 -4 -12 + 8 -18 2 + 11 -4 -15 + 7 -2 2 + 4 -3 -7 + 3 3 -11 + 12 6 7 + 15 -20 -5 + -24 -14 0 + -4 11 -11 + 10 24 3 + -19 -7 14 + -3 -19 14 + -1 5 7 + 2 6 -6 + 6 7 -8 + -15 -8 15 + -8 7 18 + -10 -15 -12 + 1 13 13 + 0 8 2 + -9 5 -1 + -7 -11 20 + 5 12 -8 + -3 11 7 + -19 -1 7 + 3 10 -7 + 7 20 -4 + 4 18 20 + 17 2 -10 + 0 20 2 + 3 15 -7 + 1 10 -19 + -9 2 -17 + -12 -11 -6 + 1 -5 0 + 4 5 -1 + 11 0 10 + -9 21 -10 + -10 -17 -8 + -16 12 -16 + 16 -3 -6 + 11 7 -14 + -4 -13 14 + -23 -5 20 + 6 4 -17 + 5 -12 0 + 1 1 -14 + 11 -5 -17 + 13 9 -18 + 5 8 7 + -13 -6 -4 + 10 4 10 + 13 -4 22 + -22 10 -24 + 18 13 5 + -4 17 -4 + -27 -23 17 + 19 6 -12 + -22 -6 -12 + -15 4 5 + 0 -10 -18 + -2 6 0 + 13 12 -6 + -13 -6 -4 + -6 13 3 + -2 23 1 + -1 -12 0 + -7 -3 -10 + 4 -6 17 + -19 15 2 + 5 -2 0 + 8 8 -3 + -5 -14 -5 + -13 14 3 + 10 -9 -1 + -11 -1 -11 + 5 11 -17 + 1 -8 -6 + 2 4 -12 + -11 5 3 + -12 -1 13 + -8 2 1 + -2 3 -4 + -1 12 -24 + 12 -11 -19 + 19 6 7 + 20 4 15 + -8 14 15 + -2 -2 -4 + -10 4 -14 + -23 -21 7 + 5 -7 -2 + 20 0 -14 + 19 -7 -5 + 1 2 17 + 4 -1 3 + 9 -6 -17 + 15 4 -14 + -4 7 -9 + -18 8 5 + -6 6 -17 + 10 -4 -5 + 18 -10 -12 + -3 -4 3 + -3 9 9 + -5 -5 -7 + -5 5 -6 + 10 -2 1 + 7 9 -14 + -11 6 -13 + 0 -6 8 + -1 3 -8 + 9 -3 5 + 16 13 -20 + -12 -19 -18 + -15 12 -20 + -8 -10 -13 + 3 -2 -10 + 10 3 13 + -12 10 0 + -6 -3 -26 + -4 -12 16 + 0 -3 0 + 1 -12 11 + 5 8 12 + -1 -15 -9 + 1 -18 -6 + 8 -17 -11 + -4 6 -2 + 7 -10 14 + -6 9 -13 + 1 -10 -20 + -9 3 10 + 1 -11 2 + -6 -18 7 + -20 0 -28 + 5 -9 -12 + -9 -1 3 + -19 12 -10 + 3 -7 15 + -11 1 1 + 1 6 9 + 9 -10 1 + 1 8 8 + 6 -4 16 + -2 -7 -13 + 0 -4 17 + -7 -6 11 + -9 -12 4 + 1 15 11 + 0 8 12 + -9 8 4 + 2 -1 19 + 10 -10 18 + 8 -13 16 + -7 7 6 + 1 5 0 + 4 2 -25 + -19 -4 -2 + -10 10 -21 + 11 -3 3 + -7 5 -1 + 12 -9 -5 + -11 -8 15 + 8 -8 -4 + 13 -2 -10 + -3 -3 -17 + 22 -15 -11 + 6 7 -13 + -11 7 9 + 1 -7 -8 + 6 3 0 + 9 30 8 + -6 0 19 + -4 -22 21 + 7 9 -9 + -11 -12 9 + 22 13 -8 + 7 -17 23 + 0 0 -14 + 7 14 1 + 4 -23 -15 + 14 -17 4 + -17 -20 -5 + 11 -12 -4 + 11 -13 6 + 11 7 3 + -6 16 -9 + -8 4 2 + -11 -2 3 + -14 -1 2 + -2 26 -2 + 7 -8 -7 + -9 7 0 + -3 7 3 + -10 3 6 + -5 -15 0 + -2 11 25 + -7 9 -11 + -13 3 9 + 1 -3 15 + -8 0 -24 + 14 -3 14 + -7 -12 -16 + 9 15 14 + -2 9 -19 + -3 -6 1 + -26 -4 -7 + -3 -3 -3 + 10 -12 2 + -18 10 1 + -12 3 11 + 0 13 -5 + 8 -16 -8 + -3 17 -7 + 23 2 8 + -4 -12 -21 + -19 -11 -8 + -11 11 11 + 21 16 2 + 4 -21 13 + 6 1 16 + 2 15 -1 + -6 -17 13 + 17 -4 3 + 16 -13 -14 + 18 -2 10 + -23 -15 -4 + 4 5 0 + -10 9 4 + -18 -16 -6 + -13 -22 -11 + 7 3 -9 + 4 -9 13 + -9 -6 13 + -9 4 7 + -6 18 19 + 19 6 1 + 7 3 -8 + 8 -11 9 + 19 14 -8 + -12 0 10 + 4 -24 -13 + -4 -10 15 + 1 -7 5 + -1 8 3 + -12 21 -8 + 9 5 -9 + 9 23 -18 + 12 -1 -4 + 18 3 11 + 0 19 -7 + -15 9 20 + -19 -8 -15 + -13 -14 -20 + -19 2 4 + 7 5 -1 + 9 -12 -16 + 6 19 15 + -22 6 23 + 4 7 14 + 0 -7 -13 + 17 -15 -14 + -13 6 22 + -11 5 2 + 3 -5 16 + -10 13 6 + 7 1 8 + -17 -8 -4 + 15 22 22 + 15 -3 9 + 18 12 12 + 7 -7 -10 + 2 -9 -11 + -7 4 22 + 9 2 4 + 10 -8 -11 + -14 -4 -9 + 3 3 -23 + 16 -7 8 + -19 6 -11 + 13 19 -5 + -9 3 -18 + -3 21 8 + 8 5 11 + -1 -1 -4 + -12 12 -6 + -4 -5 16 + -19 -6 -10 + -5 -12 8 + -13 -13 -20 + 3 -5 15 + -3 -1 0 + -5 -3 11 + 5 16 8 + 5 2 5 + -18 31 19 + 2 -4 -19 + -9 -8 19 + -1 -14 -3 + 1 -1 21 + 9 4 -20 + -1 -11 -3 + -12 -12 -4 + 8 11 19 + -10 12 -6 + 3 2 -3 + 5 -20 0 + 2 -4 -14 + 7 2 -17 + -5 3 9 + -14 17 -4 + -16 -7 4 + 2 -3 13 + 12 -9 -11 + -3 5 -10 + 2 4 16 + -3 5 -3 + 10 4 -5 + 8 -3 -15 + 2 16 14 + 17 1 -9 + 7 10 22 + -4 13 -12 + 9 13 15 + -2 7 8 + -2 12 -2 + -13 14 -15 + 10 2 23 + -9 12 -16 + 1 -3 -16 + 12 3 -13 + -5 -12 14 + -21 -21 10 + 15 4 0 + -11 -12 -6 + -8 9 5 + -3 19 -16 + -3 -9 -16 + -14 -11 -16 + 14 -18 6 + -2 -9 17 + -14 8 -4 + -8 -1 4 + 20 -10 8 + 11 14 -7 + -18 26 -4 + 15 20 20 + -21 16 18 + -4 -7 4 + -3 -10 20 + -2 26 -11 + 9 -8 11 + 2 -10 -1 + 7 -17 4 + -10 -9 6 + 14 19 24 + 24 -9 12 + -2 9 0 + -1 17 13 + -3 2 3 + 20 -6 -7 + 15 12 8 + -15 23 -4 + -11 13 -15 + -3 3 10 + 2 -2 2 + 8 -14 1 + 27 28 5 + 3 -17 8 + -10 21 -14 + 14 -3 -1 + 4 14 -8 + -5 -18 -5 + -4 -1 3 + -10 -11 -12 + -11 9 3 + 0 -13 19 + 14 6 -7 + -14 -19 5 + -26 -2 12 + 16 -4 16 + -16 -8 -5 + 6 12 -13 + 1 -8 13 + 5 10 19 + 11 -5 11 + 4 3 2 + 11 7 3 + -7 -2 -5 + -9 5 14 + 4 13 -8 + 22 10 13 + -20 8 5 + 15 1 -10 + 7 -12 13 + -20 8 7 + -9 -7 -4 + -11 -20 23 + 2 12 9 + 7 8 7 + 20 11 -6 + 8 1 4 + 5 14 9 + -7 13 12 + 13 0 2 + -5 22 -2 + -6 -19 4 + -3 -11 -15 + 3 -10 6 + 10 -9 12 + 29 1 -6 + 0 -14 -4 + 15 8 -2 + 0 -2 15 + 9 1 5 + -16 2 1 + -13 9 0 + -4 11 -8 + 13 -8 6 + -13 -4 5 + 5 -9 9 + 14 -25 -1 + -9 -12 5 + 16 -1 5 + -2 -4 -2 + -15 -22 0 + -15 -8 2 + 1 2 -18 + 1 -8 18 + 6 7 6 + -5 -10 -6 + -11 -12 -15 + -5 15 -6 + 9 11 -21 + -6 3 -15 + 18 -2 -3 + -7 8 -16 + 4 -23 3 + 7 19 30 + 17 26 -3 + -15 -9 6 + -10 -3 -19 + -7 1 13 + 8 -17 10 + 16 -2 21 + 24 -9 -12 + -17 12 -10 + 8 -2 -9 + -14 -12 6 + 8 -6 7 + -14 1 17 + 3 0 1 + -7 -21 -23 + 17 -8 1 + -1 -11 -1 + 23 5 12 + -18 16 -10 + 8 -3 3 + 1 -8 5 + 4 -9 -1 + -9 17 -21 + -9 -18 0 + -7 5 5 + 9 -2 13 + -10 -13 -10 + 1 13 4 + 14 -3 7 + -8 7 0 + 1 -10 -22 + -10 -12 9 + 22 3 -14 + 15 3 1 + -5 -9 2 + 1 -6 12 + -12 20 -20 + -8 6 21 + -5 -16 4 + 9 12 -3 + 9 -17 1 + -13 3 0 + 3 0 17 + -22 -5 9 + -6 1 -8 + 0 3 21 + 3 8 -6 + -7 5 -11 + 5 2 15 + -13 12 -13 + 0 0 -9 + -22 4 9 + -21 -13 -1 + -8 2 -26 + 2 21 2 + -4 -18 -8 + 2 12 21 + -3 14 -22 + -7 -14 9 + -19 -16 12 + -11 10 -4 + -11 8 8 + 12 15 0 + -11 2 20 + 0 17 17 + -2 -1 3 + -15 -2 -8 + -6 11 20 + 5 -24 -11 + 15 -1 7 + -20 -1 -11 + -3 -9 -26 + -9 -7 4 + -6 -15 31 + 18 -13 12 + -1 -26 16 + -1 5 -9 + -16 -15 14 + -10 -19 -7 + 9 8 22 + 0 15 -4 + -18 -4 8 + 13 15 6 + 5 11 -12 + -19 -1 -10 + -2 17 -17 + -8 6 6 + 0 -3 9 + 14 0 21 + 2 9 11 + -10 4 6 + 13 10 -1 + -15 -8 -8 + 30 -1 6 + -17 6 5 + -17 -13 -16 + 5 -13 -1 + -18 -13 -4 + -7 -3 4 + -7 0 -13 + -4 10 0 + 0 -6 16 + -6 9 17 + 15 -13 13 + 2 23 -6 + 6 -18 11 + -4 17 25 + -13 1 -4 + 17 16 18 + -4 18 -29 + -19 -18 7 + -8 -12 -8 + -18 0 7 + -19 -4 -7 + -8 -5 5 + -1 16 -15 + -10 8 -11 + -25 11 -17 + 4 2 -4 + 22 12 10 + 6 -11 23 + -1 -17 9 + 0 -12 9 + 11 1 15 + 8 8 0 + 5 5 -2 + 1 6 -1 + 4 24 -22 + 22 -16 7 + -8 12 12 + -13 -6 -9 + 14 -1 -7 + 7 -10 6 + 3 4 4 + -12 -15 -15 + -13 -3 -7 + -3 -12 -3 + 1 -7 3 + 2 -18 10 + -9 -11 -5 + 11 3 7 + 19 6 23 + -2 -13 22 + -8 5 -6 + 4 -3 -3 + -4 -5 2 + 1 -16 18 + 5 10 -10 + 1 -7 -12 + 13 9 11 + -17 -15 7 + 14 -1 8 + 2 0 9 + -1 2 3 + -19 -6 -12 + 8 14 11 + 18 1 1 + -8 2 11 + 5 -17 -1 + -20 7 4 + -13 14 4 + -9 5 -15 + -10 -2 -25 + 19 9 -8 + -5 10 -1 + -3 5 -5 + 1 -12 4 + 16 15 10 + -6 14 -9 + -7 -3 10 + -6 3 -4 + -6 0 10 + 18 13 -6 + 9 24 3 + -2 7 -2 + -16 16 -9 + 7 0 6 + 1 20 2 + 10 -7 8 + -15 -3 6 + 4 -5 -5 + -9 10 -19 + -5 5 9 + 6 -19 -4 + -10 -18 23 + 13 0 -5 + -6 11 12 + -9 5 -3 + 4 -9 1 + -7 -4 -3 + 1 -1 -23 + 9 12 4 + -2 23 -17 + 15 -16 4 + -16 -22 6 + 10 -1 -25 + -21 -7 -1 + -2 0 -3 + -12 -12 9 + 3 -30 9 + -8 -3 -9 + -7 -6 8 + -15 -18 -14 + 7 1 15 + 12 14 -13 + -20 3 8 + 4 11 12 + -11 2 8 + 2 -10 -3 + -16 1 1 + -5 -5 14 + 6 9 -9 + -6 6 -14 + 11 -14 7 + 19 4 21 + -17 6 -14 + -9 24 -13 + 7 11 11 + 10 4 -2 + -11 -3 21 + -11 1 8 + 12 -17 -9 + 8 -19 -8 + -25 -27 -1 + 11 14 20 + -9 13 -4 + -5 1 -1 + -1 -7 15 + -3 3 7 + 1 -14 -6 + -1 -4 7 + -2 -1 10 + 17 17 6 + -13 -9 -16 + -5 -17 4 + 3 9 -3 + -18 -12 -4 + 24 -1 4 + -4 -7 6 + 5 17 11 + 6 -12 1 + 11 2 7 + -2 2 -6 + -9 16 -2 + 8 14 -13 + 10 6 17 + -9 4 5 + -4 8 -9 + -6 1 -5 + -31 17 2 + -9 -1 -14 + -12 -8 5 + -12 7 -5 + 13 20 4 + -16 4 19 + 0 -12 14 + -1 15 -8 + -2 5 5 + -11 -4 11 + -4 13 10 + -17 -6 0 + -25 12 -11 + 15 16 -11 + 2 -9 -9 + 4 14 17 + -12 -6 -6 + -25 0 -7 + 4 -17 18 + 10 -7 -21 + -22 -12 7 + 8 14 7 + -5 -8 2 + -12 8 16 + -18 -11 -13 + -3 -12 4 + -6 1 -8 + -10 0 6 + 6 3 -18 + -3 9 -11 + -8 0 11 + -2 -15 -11 + -8 2 9 + -7 9 9 + -8 2 14 + -12 14 10 + -14 -19 21 + 14 -4 2 + 8 -16 -8 + 3 -19 -6 + 22 13 -4 + -6 7 -11 + -7 -16 4 + 6 -16 3 + 15 10 12 + -12 -8 6 + 31 8 -5 + -9 4 0 + -4 14 20 + 23 -12 -9 + 5 12 1 + 15 4 -3 + -18 15 4 + -18 -12 -6 + 7 -23 -2 + 3 -2 -12 + -5 -5 9 + 25 -9 -14 + -3 5 6 + 16 5 -5 + -8 -8 -14 + 8 -11 13 + -13 -14 4 + 1 -2 2 + -16 8 4 + 16 -1 -2 + -10 -15 -20 + -15 -2 15 + 13 -2 11 + -14 14 -13 + -21 -15 -6 + -27 -8 -9 + -19 6 -16 + -15 -6 -16 + -14 0 -13 + 9 -22 20 + 8 -8 21 + -8 -12 24 + 8 13 -10 + -14 -7 1 + 3 5 -1 + -11 18 -17 + 11 -7 -6 + 2 -12 -18 + 1 -14 12 + -21 16 12 + -11 -16 -8 + -16 6 15 + 4 -22 22 + -6 -3 18 + -17 4 -4 + 5 -1 -10 + -11 1 15 + 4 14 0 + 5 2 4 + -1 9 6 + 6 8 5 + -3 -1 -16 + -15 -9 3 + 17 9 -9 + 18 -4 -1 + -11 17 -15 + 3 13 14 + -3 9 4 + -12 10 6 + -9 3 10 + -5 2 -8 + 7 11 2 + -3 6 -1 + 11 -11 3 + -3 5 -1 + -4 -4 -17 + 8 15 -6 + -8 -7 -2 + -20 14 7 + -3 14 -7 + 12 -15 -4 + 6 -23 -14 + 1 -9 -1 + 19 -14 6 + 3 -11 4 + 4 -15 21 + -5 16 -7 + 0 -11 15 + 1 -13 16 + -17 4 -10 + 11 -2 13 + 13 -7 -13 + -1 20 15 + -16 -21 1 + -10 -16 -9 + 0 28 -14 + -2 19 5 + -13 10 4 + -9 -6 3 + -12 15 1 + 13 16 -16 + 6 11 -2 + 8 14 -1 + -12 14 -11 + 12 14 -5 + 1 7 20 + 3 -18 -5 + 5 13 -19 + -13 -8 -8 + -3 -13 17 + 1 2 10 + -13 -6 -16 + -2 11 9 + 0 4 4 + -3 17 2 + 3 -7 4 + 5 2 -5 + 11 13 16 + 15 -3 -4 + -20 5 13 + 14 6 -11 + 14 -1 -6 + -4 4 -11 + -9 2 10 + -7 12 -2 + -9 -8 -15 + -6 21 12 + 5 9 13 + 6 -16 -10 + 21 -13 18 + 6 -3 -10 + 2 15 -13 + -17 1 -18 + -9 -26 -1 + 1 -10 0 + -2 -8 -9 + 8 -1 0 + -2 -20 -19 + -9 -2 2 + 7 10 0 + 3 17 6 + 13 2 -9 + -4 -4 3 + 7 0 13 + 10 12 14 + 2 13 -5 + -10 9 -10 + 3 2 -8 + -2 14 -8 + 24 13 -6 + 19 8 1 + -20 -12 -20 + -11 -3 22 + -7 -6 -3 + 13 -12 -14 + -13 -12 -10 + -6 -20 18 + 2 -15 12 + -12 -5 -20 + 3 -18 -11 + -3 13 10 + 6 13 13 + 6 14 -8 + -12 12 -12 + 6 12 -20 + 9 -7 21 + -5 21 -9 + -10 -8 18 + 1 -11 12 + -6 -2 0 + 6 6 2 + 18 9 -6 + 2 18 7 + -8 9 1 + -3 -2 -19 + 15 2 10 + -5 -13 -5 + -12 -5 12 + -14 -3 15 + 4 12 -12 + -7 8 -16 + 2 -2 15 + -3 -13 9 + -5 5 3 + 26 -16 -12 + 28 -16 -20 + 7 2 6 + 5 21 -8 + -6 9 -15 + 8 10 -1 + -8 5 -16 + 2 -13 10 + -17 -11 10 + -11 7 5 + 16 14 -11 + -9 12 0 + 1 -14 13 + -6 1 1 + 8 -18 4 + -18 10 -10 + -24 -25 2 + 21 -7 6 + -7 -13 11 + 13 13 -9 + -6 -12 -10 + 13 0 3 + 13 -7 5 + -4 5 -10 + 23 -20 10 + 4 -4 -8 + 13 3 -9 + -10 1 -9 + -6 -10 -12 + -7 15 -11 + -13 12 -12 + 17 1 -6 + -6 -8 -5 + 22 -12 -13 + -16 9 -8 + -19 -15 -20 + 11 1 -5 + -5 11 -11 + -12 -5 -2 + 10 -18 -2 + -18 16 5 + -16 0 16 + -3 6 -6 + -6 -8 7 + -7 3 20 + 19 1 14 + -21 -17 13 + -4 -8 -8 + 11 8 5 + -17 -8 15 + 8 -13 -8 + 10 10 8 + -10 3 25 + -8 -12 -4 + -12 -10 -15 + 3 -3 -11 + 12 -9 5 + 16 -12 -4 + -12 -2 2 + 6 1 4 + -11 18 -2 + 2 -4 4 + 16 -21 17 + 7 -12 -20 + -12 14 -20 + 14 13 -2 + -14 -3 -2 + -9 -9 16 + -11 -3 -5 + 3 5 -2 + 2 -19 -7 + 4 -6 -15 + -18 -1 14 + 5 -29 -5 + 5 1 -8 + 27 -1 10 + -19 -18 -6 + -2 8 8 + 3 0 -7 + -10 3 16 + -3 -5 6 + -5 -24 3 + 15 -13 -4 + 25 -16 12 + -7 9 -29 + 13 -19 5 + 17 -3 -3 + 1 -7 8 + -6 -17 16 + 16 0 4 + -6 6 -11 + 4 7 15 + 17 6 -7 + -15 2 -4 + 9 1 -19 + -1 8 -13 + 12 11 7 + -28 -19 -10 + 20 10 -1 + 23 8 -6 + -12 -10 15 + 0 8 -5 + 1 -8 -20 + 17 12 -6 + -14 11 -2 + -2 -9 -14 + 11 -8 -6 + -3 20 -20 + 9 22 6 + 7 -4 12 + -5 10 13 + -3 -19 -11 + -1 -15 8 + 12 9 8 + 6 0 -1 + 12 6 -4 + 8 -9 -11 + -15 8 6 + 16 12 2 + 6 20 4 + 21 -15 20 + -10 12 -5 + 14 6 -6 + -6 8 1 + -4 2 5 + 7 3 1 + -23 -14 -10 + 3 10 -8 + -12 -13 -13 + -5 17 -8 + -17 -12 6 + 8 -24 -3 + -26 12 -4 + 10 24 9 + -1 -4 0 + -14 -2 -3 + -15 4 -15 + -1 -6 4 + -9 7 -5 + 10 10 3 + 12 -14 -20 + 6 0 4 + -8 -13 10 + -15 6 14 + 2 2 14 + -3 8 -6 + -23 10 6 + 2 -9 2 + 8 -2 -6 + -2 6 8 + 11 2 12 + 0 6 5 + -1 16 -3 + -5 10 -6 + -13 6 0 + -9 12 13 + 10 6 2 + -2 2 0 + 12 -11 -3 + 29 -9 12 + -16 -4 13 + -18 7 5 + 9 -15 -24 + 20 8 0 + 13 21 -10 + -12 -13 6 + 10 2 8 + -9 -8 11 + 3 -5 -1 + 18 -5 -22 + 0 7 -4 + 18 6 28 + -8 -18 -16 + 21 -4 -6 + 1 13 7 + -2 8 -4 + 15 15 21 + 16 5 14 + -5 27 -1 + 7 -1 11 + 10 -7 -3 + -16 -11 -6 + -14 12 7 + -5 -3 24 + 4 -8 18 + 6 -16 21 + -16 3 0 + -4 1 -7 + -4 11 -19 + -4 -4 -8 + -12 -12 6 + -9 16 3 + 0 0 15 + -2 0 3 + -6 -8 -18 + 12 8 1 + 13 3 -3 + 13 -19 8 + 4 -10 19 + 5 -6 13 + 7 4 2 + -12 -10 -18 + -13 -1 -4 + -16 -8 -3 + -17 0 8 + -2 -5 8 + -11 2 2 + 22 -11 3 + -4 -10 -23 + -12 -3 4 + 7 2 -2 + -2 1 -17 + -17 -9 4 + 17 -3 -9 + 8 -18 17 + -4 13 12 + 20 -9 8 + -1 -3 6 + -12 -11 12 + 16 6 2 + 5 -4 1 + 16 19 8 + 8 -15 15 + -1 -14 6 + -9 -1 -6 + 8 8 -2 + 1 3 15 + -4 15 -13 + 0 -4 8 + -5 -5 -8 + 12 3 -5 + -9 -21 -14 + 10 2 20 + 20 -14 -19 + 3 15 -9 + -5 1 -7 + 8 6 -9 + -3 7 -4 + 7 -11 1 + -22 10 5 + 10 6 13 + 13 4 -6 + 7 -16 -4 + -4 16 -4 + -17 13 6 + 10 -2 9 + -21 1 4 + -1 -15 13 + -13 -3 9 + 17 -20 1 + 14 -15 -5 + -16 -11 1 + 2 3 -16 + -19 -5 -5 + 6 17 -15 + 11 14 21 + -11 -7 0 + 9 21 10 + 7 2 -11 + -16 9 5 + 13 -15 -18 + 8 8 -7 + -18 14 10 + 6 17 -1 + -2 12 -4 + 12 -5 -27 + -7 2 12 + 6 5 12 + -15 8 -16 + -11 1 9 + 17 3 -11 + 1 18 1 + -23 -12 0 + -9 -12 10 + -8 -1 17 + -4 -2 6 + 6 -13 13 + 7 20 10 + -10 11 9 + 12 1 10 + 12 -7 -2 + -16 -20 -3 + 8 20 10 + 7 -3 10 + 5 11 30 + 11 -4 -7 + -5 -7 18 + 1 -9 11 + -11 -11 -4 + -27 -5 7 + 30 -7 1 + -8 -9 0 + -10 5 -10 + 19 -6 -1 + 2 1 27 + 1 3 -14 + -6 15 -13 + 8 -3 -6 + 16 5 -16 + 22 -4 15 + -13 5 -3 + -21 6 -18 + -8 1 -10 + -16 16 -2 + 11 -3 3 + -3 6 -5 + -5 9 15 + 5 12 1 + 1 -14 -13 + 12 20 18 + 4 -8 -10 + 12 -5 0 + 16 11 -12 + -6 11 -4 + -5 2 -16 + 14 2 -6 + -7 -2 0 + -14 -18 -2 + -2 6 -10 + -3 -6 26 + 8 8 -9 + 3 10 19 + -25 -15 -17 + -11 21 12 + 0 -19 -20 + 16 -16 4 + -7 -13 -8 + -6 6 -12 + 2 -4 0 + 11 18 14 + -8 -10 -8 + -21 0 5 + 14 2 10 + -9 12 4 + 23 -6 -19 + 14 4 3 + 19 9 -11 + -10 -6 -8 + -14 6 8 + 2 15 -5 + -3 2 19 + -6 10 9 + -15 -13 4 + -3 8 -2 + -3 -11 -17 + -25 -5 -8 + 10 -18 26 + 10 -8 14 + 8 -2 -11 + -9 14 14 + 16 -7 10 + 8 -7 13 + -20 -9 -14 + 14 16 2 + 9 7 23 + 1 0 16 + -9 20 10 + 15 -4 12 + 16 -15 -12 + -10 10 17 + 6 1 -11 + -7 16 1 + 5 -17 13 + -17 -6 -10 + -9 -19 13 + 9 6 -21 + 11 15 8 + 8 18 -7 + 13 8 -8 + -1 20 -7 + -6 2 19 + -13 4 22 + -5 6 -8 + -12 -9 -17 + 12 4 -2 + -7 -18 -21 + -1 -2 -6 + 11 -23 -6 + 11 3 1 + -11 2 -15 + 11 -15 22 + -3 5 14 + -13 5 2 + 8 3 -3 + 1 8 9 + 6 14 9 + 6 17 -9 + -28 -4 -8 + -1 0 0 + -5 -2 -3 + -16 -9 -6 + 20 0 0 + 18 -2 -18 + 10 -11 14 + -18 0 5 diff --git a/example/testvectors/wimax/block1_tail_llrs.dat b/example/testvectors/wimax/block1_tail_llrs.dat new file mode 100644 index 0000000..4f88df9 --- /dev/null +++ b/example/testvectors/wimax/block1_tail_llrs.dat @@ -0,0 +1,6 @@ + -16 13 + -12 -13 + -14 1 + -21 11 + -13 -12 + -12 -3 diff --git a/example/testvectors/wimax/block2_cfgreg.dat b/example/testvectors/wimax/block2_cfgreg.dat new file mode 100644 index 0000000..6a17903 --- /dev/null +++ b/example/testvectors/wimax/block2_cfgreg.dat @@ -0,0 +1,35 @@ +2 +0 +48 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wimax/block2_hard_dec.bin b/example/testvectors/wimax/block2_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..42dc702a657a8b419dfef1b4e6c5b028b71007a8 GIT binary patch literal 8 Pcma#z^AuTJ%D?~s2|oee literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block2_hard_dec.dat b/example/testvectors/wimax/block2_hard_dec.dat new file mode 100644 index 0000000..48657e0 --- /dev/null +++ b/example/testvectors/wimax/block2_hard_dec.dat @@ -0,0 +1,2 @@ +14490e5a +000075a3 diff --git a/example/testvectors/wimax/block2_llrs.bin b/example/testvectors/wimax/block2_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..c63facd12e7daa057f31cc1b1bc20007a6cbe239 GIT binary patch literal 144 zcmV~$TM~jG6aY{_2{i>X2b-z=udM0Art-n#dKKuL*})~J=bi5|u+>I^gkY?|qdNNF zpcLPfgr^O%B^33%8m*-5ZsjS}SO+&qlWp6W-Cv37Ch9k5r22_gTkR*p2iO;c5iC06 dS)r_{AZq&oLASokWWE?a9S@%*ZLd#f@DFu|OdJ3J literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block2_llrs.dat b/example/testvectors/wimax/block2_llrs.dat new file mode 100644 index 0000000..db0dd38 --- /dev/null +++ b/example/testvectors/wimax/block2_llrs.dat @@ -0,0 +1,48 @@ + -15 -13 -8 + -10 -12 -5 + -8 22 -14 + 17 15 -6 + 4 14 -8 + 1 -11 -22 + 11 18 -8 + -5 24 -11 + 5 9 -6 + -5 6 -10 + 14 -1 -12 + -3 12 -9 + 2 -6 2 + -13 12 8 + -11 -3 15 + -2 -10 -11 + 7 23 -12 + -6 14 10 + 0 -12 -8 + 0 3 -2 + -6 -7 22 + -2 -7 -11 + 10 -22 -19 + -8 3 -8 + -9 27 7 + -6 -26 1 + 15 -1 -7 + -4 1 20 + 20 22 18 + -3 13 3 + -10 -2 14 + -8 22 4 + 9 -21 -14 + 7 5 -12 + -18 2 5 + -1 0 -16 + -1 10 -4 + 7 -17 28 + -9 7 -9 + 1 16 -1 + 13 22 14 + -6 -11 1 + 2 22 16 + -14 -9 19 + -3 -16 -28 + 8 0 -10 + 12 5 -12 + -15 23 -6 diff --git a/example/testvectors/wimax/block2_soft_dec.bin b/example/testvectors/wimax/block2_soft_dec.bin new file mode 100644 index 0000000..f199d6d --- /dev/null +++ b/example/testvectors/wimax/block2_soft_dec.bin @@ -0,0 +1 @@ +tŒq™gxˆˆ‚~›{~Œtyq}}¨x§§§p§§›¥¥¥«UU f \ No newline at end of file diff --git a/example/testvectors/wimax/block2_soft_dec.dat b/example/testvectors/wimax/block2_soft_dec.dat new file mode 100644 index 0000000..af30874 --- /dev/null +++ b/example/testvectors/wimax/block2_soft_dec.dat @@ -0,0 +1,48 @@ + -127 -127 -127 + 116 -127 127 + -127 126 -127 + 127 127 -127 + 127 -116 -127 + -116 116 -127 + 113 121 -127 + -113 113 -127 + -103 125 -91 + 103 125 -127 + 127 -88 -91 + 120 120 -91 + -120 -89 -85 + -120 -89 127 + -127 -89 127 + -127 -112 -127 + 127 127 85 + -127 112 85 + -126 -89 -96 + 126 -89 102 + -127 -101 127 + -101 -112 -113 + 127 -127 -127 + -127 -127 -127 + -127 127 -127 + -127 -127 127 + 127 127 -127 + -127 127 127 + 127 127 127 + -127 127 -127 + -127 127 127 + -127 127 127 + 127 -127 -127 + 127 127 -127 + -127 127 127 + -127 127 -127 + -127 127 -127 + 127 -127 127 + -127 127 -127 + 127 127 -127 + 127 127 127 + -127 -127 127 + 127 127 127 + -127 -127 127 + 123 -127 -127 + 127 127 -127 + 127 127 -127 + -127 127 -127 diff --git a/example/testvectors/wimax/block2_status.bin b/example/testvectors/wimax/block2_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..32ceb821b34ca5beb0d3e5165b419c6262edd227 GIT binary patch literal 12 TcmY#kVc;;cWpH3;U}69O2I~Or literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block2_status.dat b/example/testvectors/wimax/block2_status.dat new file mode 100644 index 0000000..9e4a934 --- /dev/null +++ b/example/testvectors/wimax/block2_status.dat @@ -0,0 +1,3 @@ +08000424 +40003d36 +00020007 diff --git a/example/testvectors/wimax/block2_tail_llrs.dat b/example/testvectors/wimax/block2_tail_llrs.dat new file mode 100644 index 0000000..4f88df9 --- /dev/null +++ b/example/testvectors/wimax/block2_tail_llrs.dat @@ -0,0 +1,6 @@ + -16 13 + -12 -13 + -14 1 + -21 11 + -13 -12 + -12 -3 diff --git a/example/testvectors/wimax/block3_cfgreg.dat b/example/testvectors/wimax/block3_cfgreg.dat new file mode 100644 index 0000000..f3bdf43 --- /dev/null +++ b/example/testvectors/wimax/block3_cfgreg.dat @@ -0,0 +1,35 @@ +2 +0 +72 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wimax/block3_hard_dec.bin b/example/testvectors/wimax/block3_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..4b3ed64eb017f99bfc8296fef10175f4b8055422 GIT binary patch literal 12 Tcmea{laza0!n|lZ0|Ns97P13J literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block3_hard_dec.dat b/example/testvectors/wimax/block3_hard_dec.dat new file mode 100644 index 0000000..06d0cde --- /dev/null +++ b/example/testvectors/wimax/block3_hard_dec.dat @@ -0,0 +1,3 @@ +1e190e4e +a20374e3 +000000b7 diff --git a/example/testvectors/wimax/block3_llrs.bin b/example/testvectors/wimax/block3_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..2bcb7a0a2b75383040e2701e5c3d6e0f05d675f4 GIT binary patch literal 216 zcmV~$337uV002O4kRWJt{{L~EX;N+E79@0cn@;uqU;C5PYo7ztD%qbAZ!OiC{s608IK?HbHehQ+zuaiv`Xl{ zc2i@H@UJwX-I=BFEh**2rk=ydwbjpP3}2>&Iq&=INmj21tu3w^PQ>ObCE8xL45W)P Wh#_H7elkrC#4VQJ&{g)w8UF(vN@?=| literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block3_llrs.dat b/example/testvectors/wimax/block3_llrs.dat new file mode 100644 index 0000000..036346f --- /dev/null +++ b/example/testvectors/wimax/block3_llrs.dat @@ -0,0 +1,72 @@ + -15 22 -14 + 17 -5 14 + 11 -11 -22 + 9 -1 -10 + 2 13 15 + -2 10 15 + -5 -4 7 + 6 4 -19 + -3 6 16 + 2 -7 -19 + 12 0 6 + 14 9 -13 + -18 -11 -12 + 7 -6 -12 + -9 16 -1 + 6 -1 17 + 21 15 -12 + -19 -3 4 + -11 12 -8 + 23 15 12 + 8 -12 -21 + -13 3 24 + 1 24 5 + -6 17 -5 + -6 -22 -3 + 8 16 -10 + 10 3 -18 + 8 10 14 + 15 -26 1 + -21 4 16 + -3 22 4 + -16 -4 -14 + 7 -12 -8 + 0 -10 21 + -6 -7 5 + -6 2 4 + 4 -18 14 + 8 10 -14 + 10 1 20 + 10 -13 -15 + -12 18 -8 + -5 -7 0 + -10 15 10 + 14 -5 -13 + 14 -10 -10 + -12 -8 10 + 3 -10 -11 + 2 1 8 + 7 -17 9 + 12 -6 -9 + -10 -3 3 + 6 8 8 + 0 14 -6 + -8 -13 -23 + -2 19 -8 + 2 6 5 + -1 -9 -9 + 1 13 -13 + -9 -16 0 + -7 10 -10 + -14 5 -15 + 2 5 -10 + -8 7 -6 + -12 -6 -20 + 9 -14 -11 + 15 -9 -1 + 7 -1 12 + 11 -8 -8 + -3 -11 -12 + 1 13 -4 + -6 7 19 + 12 14 3 diff --git a/example/testvectors/wimax/block3_soft_dec.bin b/example/testvectors/wimax/block3_soft_dec.bin new file mode 100644 index 0000000..93d4302 --- /dev/null +++ b/example/testvectors/wimax/block3_soft_dec.bin @@ -0,0 +1 @@ +xsŽŽsf˜››…k†’u††v‰‰vru W©urw‰xƒ“‰‰ƒ„p‰‚qqvrx“qq†z[¥[eke¥[šŽdd˜œweo‘‘}ˆx}ƒ}ƒ„„z–pdœ` u^‹p‡‰wu‰ccŽwcŽ“ccc}‘rƒ||mŒm…c“›§f§Y˜h”tXfš¡¨n]R…¦ZO±b›k‰žžnžh¬rT¬¬bž˜ºF¯¯_Q¡¤¤‘¤¤¤¡œ¡\\ \ No newline at end of file diff --git a/example/testvectors/wimax/block3_soft_dec.dat b/example/testvectors/wimax/block3_soft_dec.dat new file mode 100644 index 0000000..38ff49f --- /dev/null +++ b/example/testvectors/wimax/block3_soft_dec.dat @@ -0,0 +1,72 @@ + -127 91 -111 + 120 -91 114 + 127 91 -127 + 115 101 -125 + -114 107 124 + -114 101 124 + 115 -91 109 + -115 91 -116 + -115 -102 109 + 102 -114 -123 + 127 100 99 + 127 100 -99 + -127 -104 -109 + -104 -100 -101 + -101 119 -89 + -101 101 102 + 127 111 -89 + -123 -111 89 + -127 -111 -104 + 127 125 104 + 107 -120 -108 + -122 120 116 + -110 125 88 + -127 127 -112 + -127 -127 102 + 127 127 -102 + 127 -125 -95 + 127 125 -88 + 117 -127 110 + -127 -125 93 + -122 127 82 + -122 -127 -123 + 127 -124 -90 + 118 -124 90 + -119 -127 79 + -119 122 -79 + -115 -106 98 + 118 112 -101 + 114 100 107 + 117 -100 -119 + -127 96 -98 + -96 -96 -98 + 87 117 110 + -87 94 -98 + 117 -112 -113 + 114 -117 104 + 119 -112 -84 + -119 112 114 + 120 -112 84 + 127 -121 -84 + -125 -119 -84 + -109 119 98 + -119 117 -98 + -119 -119 -104 + -125 99 -70 + -124 99 70 + -112 -99 -81 + 112 127 -81 + -119 -114 95 + -126 119 81 + -127 99 -95 + 113 -99 -92 + -113 -114 -92 + 113 -113 -111 + 118 -109 -92 + 114 -99 -92 + 120 99 -92 + -109 -112 -95 + 113 -99 -100 + 113 99 -95 + -122 99 92 + 122 125 92 diff --git a/example/testvectors/wimax/block3_status.bin b/example/testvectors/wimax/block3_status.bin new file mode 100644 index 0000000000000000000000000000000000000000..04ca2aba097d38a5fb70a9ce03daa1b1b9c0a2c1 GIT binary patch literal 12 TcmWe-W8esmU~mv%U}69O2o?b$ literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block3_status.dat b/example/testvectors/wimax/block3_status.dat new file mode 100644 index 0000000..81b6bce --- /dev/null +++ b/example/testvectors/wimax/block3_status.dat @@ -0,0 +1,3 @@ +08000615 +40005853 +00020010 diff --git a/example/testvectors/wimax/block3_tail_llrs.dat b/example/testvectors/wimax/block3_tail_llrs.dat new file mode 100644 index 0000000..4f88df9 --- /dev/null +++ b/example/testvectors/wimax/block3_tail_llrs.dat @@ -0,0 +1,6 @@ + -16 13 + -12 -13 + -14 1 + -21 11 + -13 -12 + -12 -3 diff --git a/example/testvectors/wimax/block4_cfgreg.dat b/example/testvectors/wimax/block4_cfgreg.dat new file mode 100644 index 0000000..3d83930 --- /dev/null +++ b/example/testvectors/wimax/block4_cfgreg.dat @@ -0,0 +1,35 @@ +2 +0 +216 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/example/testvectors/wimax/block4_hard_dec.bin b/example/testvectors/wimax/block4_hard_dec.bin new file mode 100644 index 0000000000000000000000000000000000000000..03c1ac0f619bbb73b40b732d92841d9556752d25 GIT binary patch literal 28 kcmY%3Td2YOX~s#ZSNuy)30JIoIkk8(i;454X&FWg0I&ND761SM literal 0 HcmV?d00001 diff --git a/example/testvectors/wimax/block4_hard_dec.dat b/example/testvectors/wimax/block4_hard_dec.dat new file mode 100644 index 0000000..212d62c --- /dev/null +++ b/example/testvectors/wimax/block4_hard_dec.dat @@ -0,0 +1,7 @@ +28a10e20 +c998f203 +a50fea1a +aa7813ca +a37395e9 +d2433404 +00326896 diff --git a/example/testvectors/wimax/block4_llrs.bin b/example/testvectors/wimax/block4_llrs.bin new file mode 100644 index 0000000000000000000000000000000000000000..f3a2dd80b60f907851e3e85f1e217934141ee533 GIT binary patch literal 648 zcmWN|+j^TI003Y?If#f_P11|4egD_m*Jf>PlL&Ga*#7%}d-q|b-reT&BFnCrb2MEn z(~VnHYc^7F%G#;O@m&yxe$3Gf=2jb8hBpJC4Pjsv_Bq2b_RTc(ZS8`+Vhf!c4Nbo? zw>U6Hq@iBlT?sUu#1_!b*Iu*McPtEJJv=Hz_qBVP@#oa_JD;^9 zawM6?SnO_`4^>|tvcHdvsJ3zMp#ov;C!3yJyBgDO%=+hq^ z?Ij*rnrmdPxB4Nl8rO7hu%YO==5x$$`sh)y*(siT7=@XtB$!XKfVa7tYFHRZ-|b(A z{rP{|NtJS`>df^hh)oo1%!d#%ZXcSCWCIvz!I3UB+{kyKxOtU}bgjHs$mP>z!iN%H zq%0Rc)efc_IM&b)!ncAO68!N6.exe + +ApplicationID +08292447-1685-4FD9-BBE3-CCBBF48436A0 + +ApplicationURL +{} + +AutoRefreshFiles +Yes + +BuildFailureAction +{Fail (recommended)} + +CancelledInstallAction +{Rollback and Stop} + +CleanupCancelledInstall +Yes + +CommandLineFailureAction +{Fail (recommended)} + +Company +{Texas Instruments} + +CompressionLevel +6 + +CompressionMethod +zlib + +Copyright +{} + +DefaultLanguage +English + +Ext +.exe + +ExtractSolidArchivesOnStartup +No + +Icon +Modern/Small/SetupModernSmall01.gif + +Image +Modern/SetupModern01.gif + +IncludeDebugging +Yes + +InstallPassword +{} + +InstallVersion +1.00.00 + +Language,de +Yes + +Language,en +Yes + +Language,es +Yes + +Language,fr +Yes + +Language,hu +Yes + +Language,it +Yes + +Language,nl +Yes + +Language,pl +Yes + +Language,pt_br +Yes + +PackageDescription +{} + +PackageLicense +{} + +PackageMaintainer +{} + +PackageName +<%ShortAppName%> + +PackagePackager +{} + +PackageRelease +<%PatchVersion%> + +PackageSummary +{} + +PackageVersion +<%MajorVersion%>.<%MinorVersion%> + +PreserveFilePermissions +Yes + +ProjectID +7411AF15-11B6-4788-A724-5593C23D1A85 + +ProjectVersion +1.2.5.1 + +SaveOnlyToplevelDirs +No + +ScriptExt +.bat + +SkipUnusedFileGroups +Yes + +Theme +Modern_Wizard + +ThemeDir +Modern_Wizard + +ThemeVersion +1 + +UpgradeApplicationID +{} + +Version +1.00.00 + +} + +array set ::InstallJammer::InstallCommandLineOptions { +debug +{Debugging Switch Yes No {} {run installer in debug mode}} + +debugconsole +{ShowConsole Switch Yes No {} {run installer with a debug console open}} + +mode +{InstallMode Choice No No {Console Default Silent Standard} {set the mode to run the installer in}} + +prefix +{InstallDir String No No {} {set the installation directory}} + +test +{Testing Switch Yes No {} {run installer without installing any files}} + +} +array set ::InstallJammer::UninstallCommandLineOptions { +debugconsole +{ShowConsole Switch Yes No {} {run uninstaller with a debug console open}} + +mode +{UninstallMode Choice No No {Console Silent Standard} {set the mode to run the uninstaller in}} + +test +{Testing Switch Yes No {} {run uninstaller without uninstalling any files}} + +} +FileGroup ::9C2BD124-0063-45FA-B2A1-C07E95BD54A1 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 MacOS-X Solaris-sparc Windows TarArchive ZipArchive} -name {Program Files} -parent FileGroups +File ::FE37B907-83B3-438F-9B8B-A82F07506482 -type dir -directory <%InstallDir%> -name <%PackageBaseDir%> -parent 9C2BD124-0063-45FA-B2A1-C07E95BD54A1 +Component ::4A7B5960-702D-4678-8533-D085CF653F0E -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 MacOS-X Solaris-sparc Windows} -name {Default Component} -parent Components +SetupType ::88F9D095-410E-4CF2-80DB-1423246F8E42 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 MacOS-X Solaris-sparc Windows} -name Typical -parent SetupTypes +SetupType ::B1323B62-5067-4380-9E19-A2F6DFE8F186 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 MacOS-X Solaris-sparc Windows} -name Custom -parent SetupTypes + +InstallComponent 4833AC49-ACAD-4F73-9DCA-5117D5C142A5 -setup Install -type pane -title {Welcome Screen} -component Welcome -active Yes -parent StandardInstall +InstallComponent ED5A5BCE-2833-4247-A114-51E972369F26 -setup Install -type pane -conditions {42CE5801-5679-4E0A-B2D6-BF04187F6D6D 7B57D332-CFA8-4B68-AC63-2AA9DE785606} -title {Select Destination} -component SelectDestination -command insert -active Yes -parent StandardInstall +Condition 42CE5801-5679-4E0A-B2D6-BF04187F6D6D -active Yes -parent ED5A5BCE-2833-4247-A114-51E972369F26 -title {Script Condition} -component ScriptCondition +Condition 7B57D332-CFA8-4B68-AC63-2AA9DE785606 -active Yes -parent ED5A5BCE-2833-4247-A114-51E972369F26 -title {File Permission Condition} -component FilePermissionCondition +InstallComponent 498D9EBC-6F70-4CCC-8A88-B3F019A2B880 -setup Install -type pane -title {Start Copying Files} -component StartCopyingFiles -active Yes -parent StandardInstall +InstallComponent 0A802EE9-DF59-4623-91FC-CB9765D8F9B3 -setup Install -type pane -title {License Agreement} -component License -active Yes -parent StandardInstall +InstallComponent 2E8052B5-4C1E-45E5-8C6E-5021E7D9835A -setup Install -type action -conditions {318C333C-A42B-4001-954A-DCC1EB64CE38 C6028DBC-6E23-4643-9B0F-4F7524BA11E5} -title {Modify Widget} -component ModifyWidget -command insert -active Yes -parent 0A802EE9-DF59-4623-91FC-CB9765D8F9B3 +Condition 318C333C-A42B-4001-954A-DCC1EB64CE38 -active Yes -parent 2E8052B5-4C1E-45E5-8C6E-5021E7D9835A -title {String Is Condition} -component StringIsCondition +Condition C6028DBC-6E23-4643-9B0F-4F7524BA11E5 -active Yes -parent 2E8052B5-4C1E-45E5-8C6E-5021E7D9835A -title {String Is Condition} -component StringIsCondition +InstallComponent 13317AAD-0D0A-4D0A-9BEA-922810029FE5 -setup Install -type pane -title {Copying Files} -component CopyFiles -active Yes -parent StandardInstall +InstallComponent 8758570E-CC44-456D-918E-2E5249DAC439 -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent 13317AAD-0D0A-4D0A-9BEA-922810029FE5 +InstallComponent AAF9B489-84A3-4C35-A9CB-BBA9130F22F7 -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent 13317AAD-0D0A-4D0A-9BEA-922810029FE5 +InstallComponent 648469D4-E8C8-4AFC-9AE3-F3BC6252F8CE -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent 13317AAD-0D0A-4D0A-9BEA-922810029FE5 +InstallComponent CEC0D285-9438-4659-94E5-AC4B5F753CDB -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent StandardInstall +InstallComponent E0654B3D-6ABE-4640-9503-3DCE15658FEE -setup Install -type pane -title {Copying Files} -component CopyFiles -active Yes -parent DefaultInstall +InstallComponent 0FF988B2-BC2F-4F17-BE70-28D7FE7846C9 -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent E0654B3D-6ABE-4640-9503-3DCE15658FEE +InstallComponent 836D6530-DC39-4773-BE74-19D0B2B54492 -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent E0654B3D-6ABE-4640-9503-3DCE15658FEE +InstallComponent 01720202-EE2E-4FE8-897F-E7F5D4445E2B -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent E0654B3D-6ABE-4640-9503-3DCE15658FEE +InstallComponent 6428BA12-614A-4569-8D06-E7F83657F0F1 -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent DefaultInstall +InstallComponent FF7E9736-C092-4E83-8CA7-634DAEBB819A -setup Install -type action -title {Console Ask Yes Or No} -component ConsoleAskYesOrNo -active Yes -parent ConsoleInstall +InstallComponent A7800E5F-F3E8-41B2-BE9F-8C7B3BC59209 -setup Install -type action -conditions 5F91FDFD-757E-48E1-A71E-A886EACEFEA2 -title Exit -component Exit -command insert -active Yes -parent ConsoleInstall +Condition 5F91FDFD-757E-48E1-A71E-A886EACEFEA2 -active Yes -parent A7800E5F-F3E8-41B2-BE9F-8C7B3BC59209 -title {String Is Condition} -component StringIsCondition +InstallComponent 16772531-4012-4BDA-946C-64DA3926C388 -setup Install -type action -conditions 2358DAA5-293A-4A4D-91F8-5F48B2F85AD6 -title {Console Get User Input} -component ConsoleGetUserInput -command insert -active Yes -parent ConsoleInstall +Condition 2358DAA5-293A-4A4D-91F8-5F48B2F85AD6 -active Yes -parent 16772531-4012-4BDA-946C-64DA3926C388 -title {File Permission Condition} -component FilePermissionCondition +InstallComponent EFC3A89B-C0AB-441F-9AF0-420E66AE1431 -setup Install -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleInstall +InstallComponent 10512CB0-772F-47B7-A58B-61B920D94C1F -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent ConsoleInstall +InstallComponent A116668A-21D1-4E54-A590-9E523E6CF807 -setup Install -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleInstall +InstallComponent 4A6B20C7-EEA3-4C05-A9FA-7234E3DBE91E -setup Install -type action -title Exit -component Exit -active Yes -parent ConsoleInstall +InstallComponent 5442E77A-E443-4D83-8FE8-0D4FED32E57A -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent SilentInstall +InstallComponent 76F4FED5-0F82-4FE4-A14C-0DD5392B9BBF -setup Install -type action -title Exit -component Exit -active Yes -parent SilentInstall +InstallComponent 52CA7D36-64EE-4764-94D3-B6A39AC459FE -setup Install -type actiongroup -title {Setup Actions} -alias {Setup Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 20725B89-270C-423C-A0E6-A7632A296664 -setup Install -type actiongroup -title {Startup Actions} -alias {Startup Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 2C2E1A2C-CB1E-49A3-A557-82185D2F1B9A -setup Install -type action -conditions {60B1FD97-331A-4F0D-8CA9-4EA1F08E7FC8 1F9C9836-090E-4017-95FD-C4F288FD3A99} -title Exit -component Exit -command insert -active Yes -parent 20725B89-270C-423C-A0E6-A7632A296664 +Condition 60B1FD97-331A-4F0D-8CA9-4EA1F08E7FC8 -active Yes -parent 2C2E1A2C-CB1E-49A3-A557-82185D2F1B9A -title {String Is Condition} -component StringIsCondition +Condition 1F9C9836-090E-4017-95FD-C4F288FD3A99 -active Yes -parent 2C2E1A2C-CB1E-49A3-A557-82185D2F1B9A -title {Ask Yes or No} -component AskYesOrNo +InstallComponent FF789AC3-26B4-42DD-824B-E49A00C4777B -setup Install -type action -title {Create Install Panes} -component CreateInstallPanes -active Yes -parent 20725B89-270C-423C-A0E6-A7632A296664 +InstallComponent 9D397587-6063-49F6-9BA4-E43087E1FB87 -setup Install -type actiongroup -title {Install Actions} -alias {Install Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 62C46726-ACBB-4E99-8A2F-DD5BFB8E6DCD -setup Install -type action -title {Install Selected Files} -component InstallSelectedFiles -active Yes -parent 9D397587-6063-49F6-9BA4-E43087E1FB87 +InstallComponent CF6BE1B7-08AA-4981-814E-20DDC4DD857C -setup Install -type action -conditions BD8849A8-F751-4F23-960A-81E257F72CAB -title {Install Uninstaller} -component InstallUninstaller -command insert -active Yes -parent 9D397587-6063-49F6-9BA4-E43087E1FB87 +Condition BD8849A8-F751-4F23-960A-81E257F72CAB -active Yes -parent CF6BE1B7-08AA-4981-814E-20DDC4DD857C -title {String Is Condition} -component StringIsCondition +InstallComponent F700A731-92D7-4A9A-91AB-71A5AFCB2E5E -setup Install -type action -conditions 969091FA-E868-4D96-8A8E-5F1E210773ED -title {Windows Uninstall Registry} -component AddWindowsUninstallEntry -command insert -active Yes -parent 9D397587-6063-49F6-9BA4-E43087E1FB87 +Condition 969091FA-E868-4D96-8A8E-5F1E210773ED -active Yes -parent F700A731-92D7-4A9A-91AB-71A5AFCB2E5E -title {String Is Condition} -component StringIsCondition +InstallComponent 0402CF48-EBA5-47C5-A284-9D3E54108FD3 -setup Install -type action -conditions 1174CE7D-A448-4E31-8816-3A25BD3B73D9 -title {Uninstall Shortcut} -component InstallProgramFolderShortcut -command insert -active Yes -parent 9D397587-6063-49F6-9BA4-E43087E1FB87 +Condition 1174CE7D-A448-4E31-8816-3A25BD3B73D9 -active Yes -parent 0402CF48-EBA5-47C5-A284-9D3E54108FD3 -title {String Is Condition} -component StringIsCondition +InstallComponent A026EF93-0A9B-4999-A486-955C04DCFB09 -setup Install -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 0370AA35-7C4C-4E74-8F5E-C66476F94086 -setup Install -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 5FEBB1BD-3149-4C74-A78B-371B77E1FB9F -setup Uninstall -type pane -title Uninstall -component Uninstall -active Yes -parent StandardUninstall +InstallComponent E6CA0D36-9668-4BA2-9E9C-602C3494E55A -setup Uninstall -type action -title {Modify Widget} -component ModifyWidget -active Yes -parent 5FEBB1BD-3149-4C74-A78B-371B77E1FB9F +InstallComponent 88E02976-6EA5-4751-B9D9-103F6F8227BD -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent 5FEBB1BD-3149-4C74-A78B-371B77E1FB9F +InstallComponent 228A3DE6-B4F9-4C11-A5F3-3DF0662DD301 -setup Uninstall -type action -title {Move Forward} -component MoveForward -active Yes -parent 5FEBB1BD-3149-4C74-A78B-371B77E1FB9F +InstallComponent 076D9CCF-B23A-4447-8710-F537D58862A1 -setup Uninstall -type pane -conditions A86627D3-E9C1-4C26-911F-88A6FEC509F8 -title {Uninstall Details} -component UninstallDetails -command insert -active Yes -parent StandardUninstall +Condition A86627D3-E9C1-4C26-911F-88A6FEC509F8 -active Yes -parent 076D9CCF-B23A-4447-8710-F537D58862A1 -title {String Is Condition} -component StringIsCondition +InstallComponent C499EBD2-D0B6-4873-AA19-CDF54C0ACED4 -setup Uninstall -type pane -title {Uninstall Complete} -component UninstallComplete -active Yes -parent StandardUninstall +InstallComponent 24B5E09F-F106-4E29-9D0F-B9ED9AECB943 -setup Uninstall -type action -title {Console Ask Yes Or No} -component ConsoleAskYesOrNo -active Yes -parent ConsoleUninstall +InstallComponent B6214AD1-C7FA-4D8A-B51E-F65A7BC21E97 -setup Uninstall -type action -conditions 64C4C595-A95A-451B-A6F1-A1E59E4C0B8F -title Exit -component Exit -command insert -active Yes -parent ConsoleUninstall +Condition 64C4C595-A95A-451B-A6F1-A1E59E4C0B8F -active Yes -parent B6214AD1-C7FA-4D8A-B51E-F65A7BC21E97 -title {String Is Condition} -component StringIsCondition +InstallComponent F864D537-DF36-457D-BE7D-A5E6F2EB0CC3 -setup Uninstall -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleUninstall +InstallComponent 92D22608-7C5F-4CAD-AAE5-87326173AE33 -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent ConsoleUninstall +InstallComponent 114852AB-A479-460A-B139-F9C6E555725A -setup Uninstall -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleUninstall +InstallComponent C9837310-0797-4CBF-A9BA-858915E68834 -setup Uninstall -type action -title Exit -component Exit -active Yes -parent ConsoleUninstall +InstallComponent 15A00390-3975-4EEB-8BC1-6EDFCE8BC568 -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent SilentUninstall +InstallComponent 8E57417F-BDEC-404E-BEB3-D4150CCFDAEA -setup Uninstall -type action -title Exit -component Exit -active Yes -parent SilentUninstall +InstallComponent 6A5748B3-5EF0-4D83-A630-0CADE4297BDC -setup Uninstall -type actiongroup -title {Setup Actions} -alias {Setup Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent B9E7DFF9-FA48-4550-96B8-9B34A099DB31 -setup Uninstall -type actiongroup -title {Startup Actions} -alias {Startup Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent 70931750-18F3-4193-BD62-25072CAB7BBC -setup Uninstall -type action -conditions {165FC255-9AD5-4B2B-9568-802DB97E2B08 4141B0E2-5A8A-423C-9823-6B01CF4DAA01} -title Exit -component Exit -command insert -active Yes -parent B9E7DFF9-FA48-4550-96B8-9B34A099DB31 +Condition 165FC255-9AD5-4B2B-9568-802DB97E2B08 -active Yes -parent 70931750-18F3-4193-BD62-25072CAB7BBC -title {String Is Condition} -component StringIsCondition +Condition 4141B0E2-5A8A-423C-9823-6B01CF4DAA01 -active Yes -parent 70931750-18F3-4193-BD62-25072CAB7BBC -title {Ask Yes or No} -component AskYesOrNo +InstallComponent 385606CF-EDE2-4760-9F57-F7680187B9AD -setup Uninstall -type actiongroup -title {Uninstall Actions} -alias {Uninstall Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent 459C9EA6-D9EA-4D3D-915F-AD575C7F3C73 -setup Uninstall -type action -title {Uninstall Selected Files} -component UninstallSelectedFiles -active Yes -parent 385606CF-EDE2-4760-9F57-F7680187B9AD +InstallComponent 040C8D36-0AB4-4436-99BA-EBDFC9B77FF6 -setup Uninstall -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent 8DBDA5C6-A4D9-464C-9AB1-9BC6FF981A3A -setup Uninstall -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsUninstall + +array set Properties { +01720202-EE2E-4FE8-897F-E7F5D4445E2B,Conditions +{0 conditions} + +0370AA35-7C4C-4E74-8F5E-C66476F94086,Alias +{Cancel Actions} + +0370AA35-7C4C-4E74-8F5E-C66476F94086,Conditions +{0 conditions} + +0402CF48-EBA5-47C5-A284-9D3E54108FD3,Conditions +{1 condition} + +0402CF48-EBA5-47C5-A284-9D3E54108FD3,FileName +<%ShortAppName%>-uninstall + +0402CF48-EBA5-47C5-A284-9D3E54108FD3,ShortcutName +{Uninstall <%AppName%>} + +0402CF48-EBA5-47C5-A284-9D3E54108FD3,TargetFileName +<%Uninstaller%> + +0402CF48-EBA5-47C5-A284-9D3E54108FD3,WorkingDirectory +<%InstallDir%> + +040C8D36-0AB4-4436-99BA-EBDFC9B77FF6,Alias +{Finish Actions} + +040C8D36-0AB4-4436-99BA-EBDFC9B77FF6,Conditions +{0 conditions} + +076D9CCF-B23A-4447-8710-F537D58862A1,BackButton,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,CancelButton,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,Caption,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,Conditions +{1 condition} + +076D9CCF-B23A-4447-8710-F537D58862A1,Message,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,NextButton,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,Subtitle,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,Text,subst +1 + +076D9CCF-B23A-4447-8710-F537D58862A1,Title,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,AcceptRadiobutton,subst +0 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Active +Yes + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,BackButton,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,CancelButton,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Caption,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Conditions +{0 conditions} + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,DeclineRadiobutton,subst +0 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Message,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,NextButton,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Subtitle,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Text,subst +1 + +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Title,subst +1 + +0FF988B2-BC2F-4F17-BE70-28D7FE7846C9,Conditions +{0 conditions} + +0FF988B2-BC2F-4F17-BE70-28D7FE7846C9,State +disabled + +0FF988B2-BC2F-4F17-BE70-28D7FE7846C9,Widget +{Back Button;Next Button} + +10512CB0-772F-47B7-A58B-61B920D94C1F,Action +{Install Actions} + +114852AB-A479-460A-B139-F9C6E555725A,Conditions +{0 conditions} + +114852AB-A479-460A-B139-F9C6E555725A,Message,subst +1 + +1174CE7D-A448-4E31-8816-3A25BD3B73D9,CheckCondition +{Before Action is Executed} + +1174CE7D-A448-4E31-8816-3A25BD3B73D9,Operator +false + +1174CE7D-A448-4E31-8816-3A25BD3B73D9,String +<%UpgradeInstall%> + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,BackButton,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,CancelButton,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,Caption,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,Conditions +{0 conditions} + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,FileLabel,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,Message,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,NextButton,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,ProgressValue,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,Subtitle,subst +1 + +13317AAD-0D0A-4D0A-9BEA-922810029FE5,Title,subst +1 + +15A00390-3975-4EEB-8BC1-6EDFCE8BC568,Action +{Uninstall Actions} + +15A00390-3975-4EEB-8BC1-6EDFCE8BC568,Conditions +{0 conditions} + +165FC255-9AD5-4B2B-9568-802DB97E2B08,CheckCondition +{Before Action is Executed} + +165FC255-9AD5-4B2B-9568-802DB97E2B08,String +<%GuiMode%> + +16772531-4012-4BDA-946C-64DA3926C388,Conditions +{1 condition} + +16772531-4012-4BDA-946C-64DA3926C388,Prompt +<%ConsoleSelectDestinationText%> + +16772531-4012-4BDA-946C-64DA3926C388,VirtualText +InstallDir + +1F9C9836-090E-4017-95FD-C4F288FD3A99,CheckCondition +{Before Action is Executed} + +1F9C9836-090E-4017-95FD-C4F288FD3A99,Message,subst +1 + +1F9C9836-090E-4017-95FD-C4F288FD3A99,Title,subst +1 + +1F9C9836-090E-4017-95FD-C4F288FD3A99,TrueValue +No + +20725B89-270C-423C-A0E6-A7632A296664,Alias +{Startup Actions} + +20725B89-270C-423C-A0E6-A7632A296664,Conditions +{0 conditions} + +228A3DE6-B4F9-4C11-A5F3-3DF0662DD301,Conditions +{0 conditions} + +2358DAA5-293A-4A4D-91F8-5F48B2F85AD6,CheckCondition +{Before Next Action is Executed} + +2358DAA5-293A-4A4D-91F8-5F48B2F85AD6,FailureMessage +<%DirectoryPermissionText%> + +2358DAA5-293A-4A4D-91F8-5F48B2F85AD6,Filename +<%InstallDir%> + +2358DAA5-293A-4A4D-91F8-5F48B2F85AD6,Permission +{can create} + +24B5E09F-F106-4E29-9D0F-B9ED9AECB943,Conditions +{0 conditions} + +24B5E09F-F106-4E29-9D0F-B9ED9AECB943,Default +Yes + +24B5E09F-F106-4E29-9D0F-B9ED9AECB943,Prompt +<%UninstallStartupText%> + +2C2E1A2C-CB1E-49A3-A557-82185D2F1B9A,Comment +{Ask the user if they want to proceed with the install.} + +2E8052B5-4C1E-45E5-8C6E-5021E7D9835A,Conditions +{2 conditions} + +2E8052B5-4C1E-45E5-8C6E-5021E7D9835A,State +disabled + +2E8052B5-4C1E-45E5-8C6E-5021E7D9835A,Widget +NextButton + +318C333C-A42B-4001-954A-DCC1EB64CE38,CheckCondition +{Before Action is Executed} + +318C333C-A42B-4001-954A-DCC1EB64CE38,String +{<%Property <%CurrentPane%> UserMustAcceptLicense%>} + +385606CF-EDE2-4760-9F57-F7680187B9AD,Alias +{Uninstall Actions} + +4141B0E2-5A8A-423C-9823-6B01CF4DAA01,CheckCondition +{Before Action is Executed} + +4141B0E2-5A8A-423C-9823-6B01CF4DAA01,Message,subst +1 + +4141B0E2-5A8A-423C-9823-6B01CF4DAA01,Title,subst +1 + +4141B0E2-5A8A-423C-9823-6B01CF4DAA01,TrueValue +No + +42CE5801-5679-4E0A-B2D6-BF04187F6D6D,Comment +{Do not display this pane if this is an upgrade install unless there is more than one installation present} + +42CE5801-5679-4E0A-B2D6-BF04187F6D6D,Script +{!<%UpgradeInstall%> || <%PreviousInstallCount%> != 1} + +459C9EA6-D9EA-4D3D-915F-AD575C7F3C73,Conditions +{0 conditions} + +4833AC49-ACAD-4F73-9DCA-5117D5C142A5,BackButton,subst +1 + +4833AC49-ACAD-4F73-9DCA-5117D5C142A5,CancelButton,subst +1 + +4833AC49-ACAD-4F73-9DCA-5117D5C142A5,Caption,subst +1 + +4833AC49-ACAD-4F73-9DCA-5117D5C142A5,Conditions +{0 conditions} + +4833AC49-ACAD-4F73-9DCA-5117D5C142A5,Message,subst +1 + +4833AC49-ACAD-4F73-9DCA-5117D5C142A5,NextButton,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,BackButton,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,CancelButton,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,Caption,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,Conditions +{0 conditions} + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,Message,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,NextButton,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,Subtitle,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,Text,subst +1 + +498D9EBC-6F70-4CCC-8A88-B3F019A2B880,Title,subst +1 + +4A6B20C7-EEA3-4C05-A9FA-7234E3DBE91E,ExitType +Finish + +4A7B5960-702D-4678-8533-D085CF653F0E,Description,subst +1 + +4A7B5960-702D-4678-8533-D085CF653F0E,DisplayName,subst +1 + +4A7B5960-702D-4678-8533-D085CF653F0E,FileGroups +9C2BD124-0063-45FA-B2A1-C07E95BD54A1 + +4A7B5960-702D-4678-8533-D085CF653F0E,Name +{Default Component} + +4A7B5960-702D-4678-8533-D085CF653F0E,RequiredComponent +Yes + +52CA7D36-64EE-4764-94D3-B6A39AC459FE,Alias +{Setup Actions} + +52CA7D36-64EE-4764-94D3-B6A39AC459FE,Conditions +{0 conditions} + +5442E77A-E443-4D83-8FE8-0D4FED32E57A,Action +{Install Actions} + +5442E77A-E443-4D83-8FE8-0D4FED32E57A,Conditions +{0 conditions} + +5F91FDFD-757E-48E1-A71E-A886EACEFEA2,CheckCondition +{Before Action is Executed} + +5F91FDFD-757E-48E1-A71E-A886EACEFEA2,Operator +false + +5F91FDFD-757E-48E1-A71E-A886EACEFEA2,String +<%Answer%> + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,BackButton,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,CancelButton,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,Caption,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,Conditions +{0 conditions} + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,FileValue,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,Message,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,NextButton,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,ProgressValue,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,Subtitle,subst +1 + +5FEBB1BD-3149-4C74-A78B-371B77E1FB9F,Title,subst +1 + +60B1FD97-331A-4F0D-8CA9-4EA1F08E7FC8,CheckCondition +{Before Action is Executed} + +60B1FD97-331A-4F0D-8CA9-4EA1F08E7FC8,String +<%GuiMode%> + +62C46726-ACBB-4E99-8A2F-DD5BFB8E6DCD,Conditions +{0 conditions} + +6428BA12-614A-4569-8D06-E7F83657F0F1,BackButton,subst +1 + +6428BA12-614A-4569-8D06-E7F83657F0F1,CancelButton,subst +1 + +6428BA12-614A-4569-8D06-E7F83657F0F1,Caption,subst +1 + +6428BA12-614A-4569-8D06-E7F83657F0F1,Conditions +{0 conditions} + +6428BA12-614A-4569-8D06-E7F83657F0F1,Message,subst +1 + +6428BA12-614A-4569-8D06-E7F83657F0F1,NextButton,subst +1 + +648469D4-E8C8-4AFC-9AE3-F3BC6252F8CE,Conditions +{0 conditions} + +64C4C595-A95A-451B-A6F1-A1E59E4C0B8F,CheckCondition +{Before Action is Executed} + +64C4C595-A95A-451B-A6F1-A1E59E4C0B8F,Operator +false + +64C4C595-A95A-451B-A6F1-A1E59E4C0B8F,String +<%Answer%> + +6A5748B3-5EF0-4D83-A630-0CADE4297BDC,Alias +{Setup Actions} + +6A5748B3-5EF0-4D83-A630-0CADE4297BDC,Conditions +{0 conditions} + +70931750-18F3-4193-BD62-25072CAB7BBC,Comment +{Ask the user if they want to proceed with the uninstall.} + +70931750-18F3-4193-BD62-25072CAB7BBC,Conditions +{2 conditions} + +76F4FED5-0F82-4FE4-A14C-0DD5392B9BBF,ExitType +Finish + +7B57D332-CFA8-4B68-AC63-2AA9DE785606,CheckCondition +{Before Next Pane is Displayed} + +7B57D332-CFA8-4B68-AC63-2AA9DE785606,FailureMessage +<%DirectoryPermissionText%> + +7B57D332-CFA8-4B68-AC63-2AA9DE785606,Filename +<%InstallDir%> + +7B57D332-CFA8-4B68-AC63-2AA9DE785606,Permission +{can create} + +836D6530-DC39-4773-BE74-19D0B2B54492,Action +{Install Actions} + +836D6530-DC39-4773-BE74-19D0B2B54492,Conditions +{0 conditions} + +8758570E-CC44-456D-918E-2E5249DAC439,Conditions +{0 conditions} + +8758570E-CC44-456D-918E-2E5249DAC439,State +disabled + +8758570E-CC44-456D-918E-2E5249DAC439,Widget +{Back Button;Next Button} + +88E02976-6EA5-4751-B9D9-103F6F8227BD,Action +{Uninstall Actions} + +88E02976-6EA5-4751-B9D9-103F6F8227BD,Conditions +{0 conditions} + +88F9D095-410E-4CF2-80DB-1423246F8E42,Components +4A7B5960-702D-4678-8533-D085CF653F0E + +88F9D095-410E-4CF2-80DB-1423246F8E42,Description,subst +1 + +88F9D095-410E-4CF2-80DB-1423246F8E42,DisplayName,subst +1 + +88F9D095-410E-4CF2-80DB-1423246F8E42,Name +Typical + +8DBDA5C6-A4D9-464C-9AB1-9BC6FF981A3A,Alias +{Cancel Actions} + +8DBDA5C6-A4D9-464C-9AB1-9BC6FF981A3A,Conditions +{0 conditions} + +8E57417F-BDEC-404E-BEB3-D4150CCFDAEA,Conditions +{0 conditions} + +8E57417F-BDEC-404E-BEB3-D4150CCFDAEA,ExitType +Finish + +92D22608-7C5F-4CAD-AAE5-87326173AE33,Action +{Uninstall Actions} + +969091FA-E868-4D96-8A8E-5F1E210773ED,CheckCondition +{Before Action is Executed} + +969091FA-E868-4D96-8A8E-5F1E210773ED,Operator +false + +969091FA-E868-4D96-8A8E-5F1E210773ED,String +<%UpgradeInstall%> + +9C2BD124-0063-45FA-B2A1-C07E95BD54A1,Destination +<%InstallDir%> + +9C2BD124-0063-45FA-B2A1-C07E95BD54A1,FileSize +75612381 + +9C2BD124-0063-45FA-B2A1-C07E95BD54A1,Name +{Program Files} + +9D397587-6063-49F6-9BA4-E43087E1FB87,Alias +{Install Actions} + +9D397587-6063-49F6-9BA4-E43087E1FB87,Conditions +{0 conditions} + +A026EF93-0A9B-4999-A486-955C04DCFB09,Alias +{Finish Actions} + +A026EF93-0A9B-4999-A486-955C04DCFB09,Conditions +{0 conditions} + +A116668A-21D1-4E54-A590-9E523E6CF807,Conditions +{0 conditions} + +A116668A-21D1-4E54-A590-9E523E6CF807,Message,subst +1 + +A7800E5F-F3E8-41B2-BE9F-8C7B3BC59209,Conditions +{1 condition} + +A86627D3-E9C1-4C26-911F-88A6FEC509F8,String +<%ErrorsOccurred%> + +AAF9B489-84A3-4C35-A9CB-BBA9130F22F7,Action +{Install Actions} + +AAF9B489-84A3-4C35-A9CB-BBA9130F22F7,Conditions +{0 conditions} + +AIX-ppc,Active +No + +AIX-ppc,DefaultDirectoryPermission +0755 + +AIX-ppc,DefaultFilePermission +0755 + +AIX-ppc,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +AIX-ppc,FallBackToConsole +Yes + +AIX-ppc,InstallDir +<%Home%>/<%ShortAppName%> + +AIX-ppc,InstallMode +Standard + +AIX-ppc,InstallType +Typical + +AIX-ppc,ProgramExecutable +{} + +AIX-ppc,ProgramFolderAllUsers +No + +AIX-ppc,ProgramFolderName +<%AppName%> + +AIX-ppc,ProgramLicense +<%InstallDir%>/LICENSE.txt + +AIX-ppc,ProgramName +{} + +AIX-ppc,ProgramReadme +<%InstallDir%>/README.txt + +AIX-ppc,PromptForRoot +Yes + +AIX-ppc,RequireRoot +No + +AIX-ppc,RootInstallDir +/usr/local/<%ShortAppName%> + +B1323B62-5067-4380-9E19-A2F6DFE8F186,Components +4A7B5960-702D-4678-8533-D085CF653F0E + +B1323B62-5067-4380-9E19-A2F6DFE8F186,Description,subst +1 + +B1323B62-5067-4380-9E19-A2F6DFE8F186,DisplayName,subst +1 + +B1323B62-5067-4380-9E19-A2F6DFE8F186,Name +Custom + +B6214AD1-C7FA-4D8A-B51E-F65A7BC21E97,Conditions +{1 condition} + +B9E7DFF9-FA48-4550-96B8-9B34A099DB31,Alias +{Startup Actions} + +B9E7DFF9-FA48-4550-96B8-9B34A099DB31,Conditions +{0 conditions} + +BD8849A8-F751-4F23-960A-81E257F72CAB,CheckCondition +{Before Action is Executed} + +BD8849A8-F751-4F23-960A-81E257F72CAB,Operator +false + +BD8849A8-F751-4F23-960A-81E257F72CAB,String +<%UpgradeInstall%> + +C499EBD2-D0B6-4873-AA19-CDF54C0ACED4,BackButton,subst +1 + +C499EBD2-D0B6-4873-AA19-CDF54C0ACED4,CancelButton,subst +1 + +C499EBD2-D0B6-4873-AA19-CDF54C0ACED4,Caption,subst +1 + +C499EBD2-D0B6-4873-AA19-CDF54C0ACED4,Conditions +{0 conditions} + +C499EBD2-D0B6-4873-AA19-CDF54C0ACED4,Message,subst +1 + +C499EBD2-D0B6-4873-AA19-CDF54C0ACED4,NextButton,subst +1 + +C6028DBC-6E23-4643-9B0F-4F7524BA11E5,CheckCondition +{Before Action is Executed} + +C6028DBC-6E23-4643-9B0F-4F7524BA11E5,Operator +false + +C6028DBC-6E23-4643-9B0F-4F7524BA11E5,String +<%LicenseAccepted%> + +C9837310-0797-4CBF-A9BA-858915E68834,Conditions +{0 conditions} + +C9837310-0797-4CBF-A9BA-858915E68834,ExitType +Finish + +CEC0D285-9438-4659-94E5-AC4B5F753CDB,BackButton,subst +1 + +CEC0D285-9438-4659-94E5-AC4B5F753CDB,CancelButton,subst +1 + +CEC0D285-9438-4659-94E5-AC4B5F753CDB,Caption,subst +1 + +CEC0D285-9438-4659-94E5-AC4B5F753CDB,Conditions +{0 conditions} + +CEC0D285-9438-4659-94E5-AC4B5F753CDB,Message,subst +1 + +CEC0D285-9438-4659-94E5-AC4B5F753CDB,NextButton,subst +1 + +CF6BE1B7-08AA-4981-814E-20DDC4DD857C,Conditions +{1 condition} + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,BackButton,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,CancelButton,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,Caption,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,Conditions +{0 conditions} + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,FileLabel,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,Message,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,NextButton,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,ProgressValue,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,Subtitle,subst +1 + +E0654B3D-6ABE-4640-9503-3DCE15658FEE,Title,subst +1 + +E6CA0D36-9668-4BA2-9E9C-602C3494E55A,Conditions +{0 conditions} + +E6CA0D36-9668-4BA2-9E9C-602C3494E55A,State +disabled + +E6CA0D36-9668-4BA2-9E9C-602C3494E55A,Widget +{NextButton; CancelButton} + +ED5A5BCE-2833-4247-A114-51E972369F26,BackButton,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,BrowseButton,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,BrowseText,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,CancelButton,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,Caption,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,Conditions +{2 conditions} + +ED5A5BCE-2833-4247-A114-51E972369F26,DestinationLabel,subst +0 + +ED5A5BCE-2833-4247-A114-51E972369F26,Message,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,NextButton,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,Subtitle,subst +1 + +ED5A5BCE-2833-4247-A114-51E972369F26,Title,subst +1 + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Conditions +{0 conditions} + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message,subst +1 + +F700A731-92D7-4A9A-91AB-71A5AFCB2E5E,Conditions +{1 condition} + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Conditions +{0 conditions} + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message,subst +1 + +FF789AC3-26B4-42DD-824B-E49A00C4777B,Conditions +{0 conditions} + +FF7E9736-C092-4E83-8CA7-634DAEBB819A,Conditions +{0 conditions} + +FF7E9736-C092-4E83-8CA7-634DAEBB819A,Default +Yes + +FF7E9736-C092-4E83-8CA7-634DAEBB819A,Prompt +<%InstallStartupText%> + +FreeBSD-4-x86,Active +No + +FreeBSD-4-x86,DefaultDirectoryPermission +0755 + +FreeBSD-4-x86,DefaultFilePermission +0755 + +FreeBSD-4-x86,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +FreeBSD-4-x86,FallBackToConsole +Yes + +FreeBSD-4-x86,InstallDir +<%Home%>/<%ShortAppName%> + +FreeBSD-4-x86,InstallMode +Standard + +FreeBSD-4-x86,InstallType +Typical + +FreeBSD-4-x86,ProgramExecutable +{} + +FreeBSD-4-x86,ProgramFolderAllUsers +No + +FreeBSD-4-x86,ProgramFolderName +<%AppName%> + +FreeBSD-4-x86,ProgramLicense +<%InstallDir%>/LICENSE.txt + +FreeBSD-4-x86,ProgramName +{} + +FreeBSD-4-x86,ProgramReadme +<%InstallDir%>/README.txt + +FreeBSD-4-x86,PromptForRoot +Yes + +FreeBSD-4-x86,RequireRoot +No + +FreeBSD-4-x86,RootInstallDir +/usr/local/<%ShortAppName%> + +FreeBSD-x86,Active +No + +FreeBSD-x86,DefaultDirectoryPermission +0755 + +FreeBSD-x86,DefaultFilePermission +0755 + +FreeBSD-x86,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +FreeBSD-x86,FallBackToConsole +Yes + +FreeBSD-x86,InstallDir +<%Home%>/<%ShortAppName%> + +FreeBSD-x86,InstallMode +Standard + +FreeBSD-x86,InstallType +Typical + +FreeBSD-x86,ProgramExecutable +{} + +FreeBSD-x86,ProgramFolderAllUsers +No + +FreeBSD-x86,ProgramFolderName +<%AppName%> + +FreeBSD-x86,ProgramLicense +<%InstallDir%>/LICENSE.txt + +FreeBSD-x86,ProgramName +{} + +FreeBSD-x86,ProgramReadme +<%InstallDir%>/README.txt + +FreeBSD-x86,PromptForRoot +Yes + +FreeBSD-x86,RequireRoot +No + +FreeBSD-x86,RootInstallDir +/usr/local/<%ShortAppName%> + +HPUX-hppa,Active +No + +HPUX-hppa,DefaultDirectoryPermission +0755 + +HPUX-hppa,DefaultFilePermission +0755 + +HPUX-hppa,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +HPUX-hppa,FallBackToConsole +Yes + +HPUX-hppa,InstallDir +<%Home%>/<%ShortAppName%> + +HPUX-hppa,InstallMode +Standard + +HPUX-hppa,InstallType +Typical + +HPUX-hppa,ProgramExecutable +{} + +HPUX-hppa,ProgramFolderAllUsers +No + +HPUX-hppa,ProgramFolderName +<%AppName%> + +HPUX-hppa,ProgramLicense +<%InstallDir%>/LICENSE.txt + +HPUX-hppa,ProgramName +{} + +HPUX-hppa,ProgramReadme +<%InstallDir%>/README.txt + +HPUX-hppa,PromptForRoot +Yes + +HPUX-hppa,RequireRoot +No + +HPUX-hppa,RootInstallDir +/usr/local/<%ShortAppName%> + +Linux-x86,Active +Yes + +Linux-x86,DefaultDirectoryPermission +0755 + +Linux-x86,DefaultFilePermission +0755 + +Linux-x86,Executable +setupLinux_<%AppName%>-<%Version%>.bin + +Linux-x86,FallBackToConsole +Yes + +Linux-x86,InstallDir +<%Home%>/<%ShortAppName%> + +Linux-x86,InstallMode +Standard + +Linux-x86,InstallType +Typical + +Linux-x86,ProgramExecutable +{} + +Linux-x86,ProgramFolderAllUsers +No + +Linux-x86,ProgramFolderName +<%AppName%> + +Linux-x86,ProgramLicense +<%InstallDir%>/LICENSE.txt + +Linux-x86,ProgramName +{} + +Linux-x86,ProgramReadme +{} + +Linux-x86,PromptForRoot +Yes + +Linux-x86,RequireRoot +No + +Linux-x86,RootInstallDir +/usr/local/<%ShortAppName%> + +MacOS-X,Active +No + +MacOS-X,DefaultDirectoryPermission +0755 + +MacOS-X,DefaultFilePermission +0755 + +MacOS-X,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +MacOS-X,FallBackToConsole +Yes + +MacOS-X,InstallDir +<%Home%>/<%ShortAppName%> + +MacOS-X,InstallMode +Standard + +MacOS-X,InstallType +Typical + +MacOS-X,ProgramExecutable +{} + +MacOS-X,ProgramFolderAllUsers +No + +MacOS-X,ProgramFolderName +<%AppName%> + +MacOS-X,ProgramLicense +<%InstallDir%>/LICENSE.txt + +MacOS-X,ProgramName +{} + +MacOS-X,ProgramReadme +<%InstallDir%>/README.txt + +MacOS-X,PromptForRoot +Yes + +MacOS-X,RequireRoot +No + +MacOS-X,RootInstallDir +/usr/local/<%ShortAppName%> + +Solaris-sparc,Active +No + +Solaris-sparc,DefaultDirectoryPermission +0755 + +Solaris-sparc,DefaultFilePermission +0755 + +Solaris-sparc,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +Solaris-sparc,FallBackToConsole +Yes + +Solaris-sparc,InstallDir +<%Home%>/<%ShortAppName%> + +Solaris-sparc,InstallMode +Standard + +Solaris-sparc,InstallType +Typical + +Solaris-sparc,ProgramExecutable +{} + +Solaris-sparc,ProgramFolderAllUsers +No + +Solaris-sparc,ProgramFolderName +<%AppName%> + +Solaris-sparc,ProgramLicense +<%InstallDir%>/LICENSE.txt + +Solaris-sparc,ProgramName +{} + +Solaris-sparc,ProgramReadme +<%InstallDir%>/README.txt + +Solaris-sparc,PromptForRoot +Yes + +Solaris-sparc,RequireRoot +No + +Solaris-sparc,RootInstallDir +/usr/local/<%ShortAppName%> + +TarArchive,Active +No + +TarArchive,CompressionLevel +6 + +TarArchive,DefaultDirectoryPermission +0755 + +TarArchive,DefaultFilePermission +0755 + +TarArchive,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +TarArchive,FallBackToConsole +Yes + +TarArchive,InstallDir +<%Home%>/<%ShortAppName%> + +TarArchive,InstallMode +Standard + +TarArchive,InstallType +Typical + +TarArchive,OutputFileName +<%ShortAppName%>-<%Version%>.tar.gz + +TarArchive,ProgramExecutable +{} + +TarArchive,ProgramFolderAllUsers +No + +TarArchive,ProgramFolderName +<%AppName%> + +TarArchive,ProgramLicense +<%InstallDir%>/LICENSE.txt + +TarArchive,ProgramName +{} + +TarArchive,ProgramReadme +<%InstallDir%>/README.txt + +TarArchive,PromptForRoot +Yes + +TarArchive,RequireRoot +No + +TarArchive,RootInstallDir +/usr/local/<%ShortAppName%> + +TarArchive,VirtualTextMap +{<%InstallDir%> <%ShortAppName%>} + +Windows,Active +Yes + +Windows,Executable +setupwin32_<%AppName%>-<%Version%><%Ext%> + +Windows,IncludeTWAPI +No + +Windows,InstallDir +<%WinInstallDir%> + +Windows,InstallMode +Standard + +Windows,InstallType +Typical + +Windows,ProgramExecutable +{} + +Windows,ProgramFolderAllUsers +No + +Windows,ProgramFolderName +<%AppName%> + +Windows,ProgramLicense +<%InstallDir%>/LICENSE.txt + +Windows,ProgramName +{} + +Windows,ProgramReadme +{} + +Windows,WindowsIcon +{Setup Blue Screen.ico} + +ZipArchive,Active +No + +ZipArchive,CompressionLevel +6 + +ZipArchive,DefaultDirectoryPermission +0755 + +ZipArchive,DefaultFilePermission +0755 + +ZipArchive,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +ZipArchive,FallBackToConsole +Yes + +ZipArchive,InstallDir +<%Home%>/<%ShortAppName%> + +ZipArchive,InstallMode +Standard + +ZipArchive,InstallType +Typical + +ZipArchive,OutputFileName +<%ShortAppName%>-<%Version%>.zip + +ZipArchive,ProgramExecutable +{} + +ZipArchive,ProgramFolderAllUsers +No + +ZipArchive,ProgramFolderName +<%AppName%> + +ZipArchive,ProgramLicense +<%InstallDir%>/LICENSE.txt + +ZipArchive,ProgramName +{} + +ZipArchive,ProgramReadme +<%InstallDir%>/README.txt + +ZipArchive,PromptForRoot +Yes + +ZipArchive,RequireRoot +No + +ZipArchive,RootInstallDir +/usr/local/<%ShortAppName%> + +ZipArchive,VirtualTextMap +{<%InstallDir%> <%ShortAppName%>} + +} + +::msgcat::mcmset de { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset en { +0A802EE9-DF59-4623-91FC-CB9765D8F9B3,Text +{Software Evaluation Agreement + +IMPORTANT - THIS IS A LEGALLY BINDING AGREEMENT. PLEASE READ IT CAREFULLY. +IF YOU DO NOT AGREE WITH THE FOLLOWING PROVISIONS, YOU MAY NOT USE THE +ENCLOSED MATERIALS. AFTER YOU READ THIS LICENSE AGREEMENT, YOU WILL BE ASKED +WHETHER YOU ACCEPT AND AGREE TO THE TERMS OF THIS LICENSE AGREEMENT. DO NOT +CLICK "I HAVE READ AND AGREE" UNLESS: (1) YOU ARE AUTHORIZED TO ACCEPT AND AGREE TO THE TERMS OF THIS LICENSE AGREEMENT ON BEHALF OF YOURSELF AND YOUR COMPANY; AND (2) YOU INTEND TO ENTER INTO AND TO BE BOUND BY THE TERMS OF THIS LEGALLY BINDING AGREEMENT ON BEHALF OF YOURSELF AND YOUR COMPANY. + +This Software Evaluation Agreement (or "Agreement") is a legal agreement +between you ("You," either an individual or entity) and Texas Instruments +Incorporated ("TI"). The "Evaluation Materials" subject to this Agreement +include the enclosed or downloaded software programs and documentation that +accompany this Agreement and any "on-line" or electronic documentation +associated with the software programs. The "Evaluation Materials" include +certain TI proprietary software programs that are specifically designed and +licensed for execution solely and exclusively on or with TI Devices. For the +purposes of this Agreement the term "TI Devices" means a TI EVM or DSK manufactured by or for TI. By installing, copying or otherwise using the Evaluation Materials, you agree to abide by the following provisions. + +This Agreement is displayed for You to read prior to using the Evaluation Materials. If You do not accept or agree with these provisions then: + +(1) do not unzip, download, copy, install or otherwise use the Evaluation Materials; and + +(2) return the Evaluation Materials to TI's designated representative. + +Intellectual Property, Title and Limited License Grants - The Evaluation Materials contain copyrighted material, trade secrets and other proprietary information of TI and its licensors and are protected by copyright laws, international copyright treaties, and trade secret laws, as well as other intellectual property laws and treaties. The Evaluation Materials are licensed, not sold to You, and can only be used in accordance with the terms of this Agreement. You agree that You will not mortgage, pledge or encumber the Evaluation Materials in any way. TI and its licensors retain all title and ownership of the Evaluation Materials, including all intellectual property rights in the Evaluation Materials and all copies of the Evaluation Materials. + +a. Limited Evaluation License. Subject to the terms of this Agreement, TI +grants to You a fully paid-up, royalty free, non-transferable, +non-sub-licensable, non-exclusive, non-assignable, site-specific, temporary, +limited license to use the Evaluation Materials solely and exclusively with or +on TI Devices and solely for testing and evaluation purposes in accordance +with the terms of this Agreement. You agree that upon termination of this +Agreement, this license expires and that You will destroy any and all copies +of the Evaluation Materials, including any portions or derivatives thereof, in +your possession, custody or control and will provide to TI's designated representative a written statement signed by You or Your companyÆs authorized representative certifying such destruction. + +b. Limited Demonstration License. Subject to the terms of this Agreement, TI +grants to You a free, non-transferable, non-exclusive, non-assignable, +worldwide, non-sub-licensable, temporary, limited license to demonstrate the +Evaluation Materials as they are used in a product that includes a TI Device +and consists of both hardware and software components, including executable +versions of the software programs included with the Evaluation Materials that +execute solely and exclusively on a TI Device and not on a device manufactured +by or for an entity other than TI, provided that such software programs are +demonstrated solely in object or executable versions only and such hardware +and software programs are not left with or retained by any third party and +remain in your possession and under your control at all times. You agree that +upon termination of this Agreement, this license expires and that You will +destroy any and all copies of the Evaluation Materials, including any portions +or derivatives thereof, in your possession, custody or control and will +provide to TI's designated representative a written statement signed by You or your companyÆs authorized representative certifying such destruction. + +c. No Development, Production or Distribution License. You acknowledge and agree that this license is limited to testing, evaluation and limited demonstration purposes only and You specifically agree not to use or distribute the Evaluation Materials, or any portion or derivative thereof, to any third party for any commercial purpose. NOTWITHSTANDING ANYTHING TO THE CONTRARY, THIS AGREEMENT DOES NOT CONVEY ANY LICENSE TO USE THE EVALUATION MATERIALS, OR ANY PORTION OR DERIVATIVE THEREOF, IN PRODUCTION, OR TO DISTRIBUTE THE EVALUATION MATERIALS, OR ANY PORTION OR DERIVATIVE THEREOF, TO ANY THIRD PARTY. YOU ARE REQUIRED TO EXECUTE A SEPARATE LICENSE AGREEMENT WITH TI BEFORE MANUFACTURING OR DISTRIBUTING THE EVALUATION MATERIALS, OR ANY PORTION OR DERIVATIVE THEREOF, OR ANY PRODUCTS THAT CONTAIN THE EVALUATION MATERIALS, OR ANY PORTION OR DERIVATIVE THEREOF. + +d. No Other License. Notwithstanding anything to the contrary, nothing in this Agreement shall be construed as a license to any intellectual property rights of TI or its licensors other than those rights embodied in the software programs provided to You by TI as part of the Evaluation Materials. EXCEPT AS PROVIDED HEREIN, NO OTHER LICENSE, WHETHER EXPRESS, IMPLIED, OR STATUTORY, BY ESTOPPEL OR OTHERWISE, TO ANY OTHER TI INTELLECTUAL PROPERTY RIGHTS IS GRANTED HEREIN. + +e. Use Restrictions. You will not disclose the Evaluation Materials, or +any portion or derivative thereof, to any person other than those employees, +consultants and contractors whose job performance directly requires access to +the Evaluation Materials. You will use the Evaluation Materials solely for +testing, evaluation and limited demonstration purposes and will not use or +distribute the Evaluation Materials, or any portion thereof, to any third +party for any commercial purpose. You will not copy, publish, disclose, +provide, transfer or make available the Evaluation Materials, or any portion +thereof, to any third party. You will not sub-license, transfer or assign the +Evaluation Materials or Your rights under this Agreement to any third party. +You will not (a) incorporate, combine, or distribute the Evaluation Materials, +or any portions or derivatives thereof, with any Public Software, or (b) use +Public Software in the development of any derivatives of the Evaluation +Materials, in such a way that would cause the Evaluation Materials, or any +portions or derivatives thereof, to be subject to all or part of the license +obligations or other intellectual property related terms with respect to such +Public Software, including but not limited to, the obligations that the +Evaluation Materials, or any portions or derivatives thereof, incorporated +into, combined, or distributed with such Public Software (i) be disclosed or +distributed in source code form, be licensed for the purpose of making +derivatives of such software, or be redistributed free of charge, contrary to +the terms and conditions of this Agreement, (ii) be used with devices other +than TI Devices, or (iii) be otherwise used or distributed in a manner +contrary to the terms and conditions of this Agreement. As used herein, +"Public Software" means any software that contains, or is derived in whole or +in part from, any software distributed as open source software, including but +not limited to software licensed under the following or similar models: (a) +GNU's General Public License (GPL) or Lesser/Library GPL (LGPL), (b) the Artistic License (e.g., PERL), (c) the Mozilla Public License, (d) the Netscape Public License, (e) the Sun Community Source License (SCSL), (f) the Sun Industry Standards Source License (SISL), (g) the Apache Server license, (h) QT Free Edition License, (i) IBM Public License, and (j) BitKeeper. + +f. Intellectual Property Rights. You acknowledge and agree that the +Evaluation Materials contain copyrighted material, trade secrets and other +proprietary information of TI or its licensors. To protect TI and its +licensors' rights in the Evaluation Materials, You agree that You will not decompile, reverse engineer, disassemble or otherwise translate any of the software programs included with the Evaluation Materials to a human-perceivable form nor permit any person or entity under Your employ or control to do so. In no event will You alter, remove or destroy any copyright or proprietary notice of TI or its licensors included in the Evaluation Materials. TI and its licensors reserve all rights not specifically granted under this Agreement. You further acknowledge and agree that all fixes, modifications and improvements to the Evaluation Materials conceived of or made by TI that are based, either in whole or in part, on Your feedback, suggestions or recommendations are the exclusive property of TI and all right, title and interest in and to all such fixes, modifications and improvements to the Evaluation Materials will vest solely in TI. + +Warranties and Disclaimers. + +a. No Warranty of Production or Support. Nothing contained in this +Agreement will be construed as a warranty or representation by TI to maintain +production of any TI semiconductor device or other hardware or software with +which the Evaluation Materials may be used or to otherwise support the +Evaluation Materials in any manner. You acknowledge and agree that the +Evaluation Materials are provided to You "AS-IS" and that TI is under no obligation to maintain or support the Evaluation Materials or to assist You in Your use of the Evaluation Materials. + +b. Disclaimers. TI does not warrant that operation of the Evaluation +Materials will be error-free, or that the Evaluation Materials will meet Your +individual requirements. THE EVALUATION MATERIALS ARE PROVIDED "AS IS" AND WITH ALL FAULTS. TI MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS, IMPLIED, OR STATUTORY, REGARDING THE EVALUATION MATERIALS, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT OF ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADE SECRETS OR OTHER INTELLECTUAL PROPERTY RIGHTS. TI DISCLAIMS ANY WARRANTY OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE EVALUATION MATERIALS OR YOUR USE OF THOSE MATERIALS. YOU AGREE TO USE YOUR INDEPENDENT ANALYSIS, EVALUATION, AND JUDGMENT IN THE EVALUATION OF THE EVALUATION MATERIALS. FURTHER, THE EVALUATION MATERIALS ARE NOT FAULT TOLERANT AND ARE NOT DESIGNED, MANUFACTURED, OR INTENDED FOR USE IN OR WITH ONLINE CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT FLIGHT CONTROL, AIRCRAFT NAVIGATION OR COMMUNICATIONS SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE MALFUNCTION OR FAILURE OF THE EVALUATION MATERIALS COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE. + +Evaluation Reports and Access. At TI's request, You will provide to TI, +evaluation reports concerning performance of the Evaluation Materials that +include Your evaluation of the strengths and weaknesses of the Evaluation +Materials, any benchmarking results relating to a comparison of the Evaluation +Materials with competitive products, and any recommended improvements. In +performing this evaluation, You agree that You will use the Evaluation +Materials under normal conditions. TI's designated representative for such discussions regarding any evaluations, benchmarking, malfunctions or needed improvements to the Evaluation Materials is: + + Texas Instruments Incorporated + Catalog Software Operations + 12203 Southwest Freeway + Mail Station 722 + Stafford, Texas 77477 + 281-274-5888 + +Confidential Information. + +The term "Confidential Information" shall mean the Evaluation Materials, +whether so marked or not, and any benchmarking results for the Evaluation +Materials. You agree that You will (i) use the Evaluation Materials only in +connection with fulfilling Your rights and obligations under this Agreement, +and (ii) implement reasonable procedures to prohibit the disclosure, +unauthorized duplication, misuse or removal of TI's Confidential Information +and will not disclose such Confidential Information to any third party, except +as may be necessary and required in connection with the rights and obligations +under this Agreement. Without limiting the foregoing, You agree to hold TI's +Confidential Information in confidence and to use at least the same procedures +and degree of care that You use to prevent disclosure of Your own confidential +information of like importance, but in no instance less than reasonable degree +of care. You agree to obtain executed confidentiality agreements with Your +employees, consultants and contractors having access to TI's Confidential Information and to diligently take steps to enforce such agreements or be responsible for the actions of such employees, consultants and contractors in this respect. Employment agreements used in the normal course of business that include confidentiality provisions shall satisfy the requirements of this section. The obligations set forth in this Section (Confidential Information) will survive any termination of this Agreement for three (3) years after such termination. + +Intellectual Property Indemnification Disclaimer. + +You acknowledge and agree that the Evaluation Materials are based on industry recognized standards, including, but not limited to, the ITU and ITU-T standards, the TCP/IP standard, the ISO MPEG and JPEG standards, and the SMPTE standard, and software programs published by industry recognized standards bodies and that certain third parties claim to own patents, copyrights or other intellectual property rights that cover implementation of those standards. You acknowledge and agree that this Agreement does not convey any license to any such third party patents, copyrights, and other intellectual property rights and that You are solely responsible for any intellectual property infringement claims made by such third parties that relate to Your use of the Evaluation Materials. + +YOU AGREE THAT TI SHALL NOT BE LIABLE FOR AND SHALL NOT DEFEND OR INDEMNIFY +YOU AGAINST ANY THIRD PARTY INFRINGEMENT CLAIM THAT RELATES TO OR IS BASED ON +YOUR USE OF THE EVALUATION MATERIALS IN ANY MANNER. THE FOREGOING STATES TI'S ENTIRE LIABILITY WITH RESPECT TO INFRINGEMENT OF ANY PATENT OR OTHER INTELLECTUAL PROPERTY RIGHT UNDER THIS AGREEMENT AND IS IN LIEU OF ALL WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, IN REGARD THERETO. + +Termination. + +The Agreement is effective until terminated and begins on the date you accept +this Agreement's terms and conditions. You may terminate this Agreement at any time by written notice to TI. Without prejudice to any other rights, if You fail to comply with any of the terms or conditions of this Agreement, TI may terminate this Agreement. Upon any termination, all licenses granted under this Agreement expire. + +Further, TI may terminate this Agreement on thirty (30) days written notice to +You, at any time, for TI's convenience. Upon termination of this Agreement, +all licenses granted under this Agreement expire, and You will destroy any and +all copies of the Evaluation Materials or any portions or derivatives thereof, +in Your possession, custody or control, and provide to TI a written statement +signed by You, or Your company's authorized representative, certifying such destruction. + +Liability Limitations. + +IN NO EVENT SHALL TI, OR ANY APPLICABLE LICENSOR, BE LIABLE FOR ANY SPECIAL, INDIRECT, COLLATERAL, INCIDENTAL, PUNATIVE, OR CONSEQUENTIAL DAMAGES HOWEVER CAUSED, ON ANY THEORY OF LIABILITY, IN CONNECTION WITH OR ARISING OUT OF THE LICENSES GRANTED HEREIN, THIS AGREEMENT OR USE OF THE EVALUATION MATERIALS, REGARDLESS OF WHETHER OR NOT TI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE EXCLUDED DAMAGES INCLUDE, BUT ARE NOT LIMITED TO, COST OF REMOVAL OR REINSTALLATION, OUTSIDE COMPUTER TIME, LABOR COSTS, LOSS OF GOODWILL, LOSS OF PROFITS, LOSS OF SAVINGS, LOSS OF DATA, OR LOSS OF USE OR INTERRUPTION OF BUSINESS. + +IN NO EVENT SHALL TI'S AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED FIVE HUNDRED DOLLARS ($500). The existence of more than one claim will not enlarge or extend these limits. + +Governing Law, Jurisdiction and Severability. This Agreement will be governed by and interpreted in accordance with the laws of the State of Texas, U.S.A., without reference to that stateÆs conflict-of-laws principles. This Agreement shall not be governed by the United Nations Convention on Contracts for the International Sale of Goods, nor shall it be governed by the Uniform Computer Information Transactions Act. Any dispute arising out of or related to this Agreement will be brought in, and each party consents to non-exclusive jurisdiction and venue in, the state and federal courts sitting in Dallas County, Texas, U.S.A. Each party waives all defenses of lack of personal jurisdiction and forum non-conveniens and agrees that process may be served on either party in a manner authorized by applicable law or court rule. If for any reason a court of competent jurisdiction finds any provision of the Agreement to be unenforceable, that provision will be enforced to the maximum extent possible to effectuate the intent of the parties and the remainder of the Agreement shall continue in full force and effect. + +Export Control. You hereby acknowledge and agree that unless prior +authorization is obtained from the United States Department of Commerce, +neither You nor your agents will export, re-export, or release, directly or +indirectly, any technology, software, or software source code (as defined in +Part 772 of the Export Administration Regulations of the U.S. Department of +Commerce ("EAR")), received from TI, or export, directly or indirectly, any +direct product of such technology, software, or software source code (as +defined in Part 734 of the EAR), to any destination or country to which the +export, re-export or release of the technology, software, software source +code, or direct product is prohibited by the EAR. You agree that none of the +Licensed Materials may be downloaded or otherwise exported or re-exported (i) +into (or to a national or resident of) Cuba, Iran, Iraq, Libya, North Korea, +Sudan and Syria or any other country for which the U.S. has embargoed goods; +or (ii) to anyone on the U.S. Treasury Department's List of Specially Designated Nationals or the U.S. Commerce DepartmentÆs Denied Person List or Entity List. You represent and warrant that you are not located in, under the control of, or a national or resident of any such country or on any such list and you will not use or transfer the Licensed Materials for use in any sensitive nuclear, chemical or biological weapons, or missile technology end-uses unless authorized by the U.S. Government by regulation or specific license. The assurances provided for herein are furnished to TI by You in compliance with Part 740 (Technology and Software Under Restriction) of the EAR. You also understand and acknowledge that products, technology (regardless of the form in which it is provided), software or software source code, received from TI under this Agreement may be under export control of the United States or other countries. You shall comply with the United States and other applicable non-U.S. laws and regulations governing the export, re-export and release of any products, technology, software, or software source code received under this Agreement from TI. You shall not undertake any action that is prohibited by the EAR. Without limiting the generality of the foregoing, You specifically agrees that You shall not transfer or release products, technology, software, or software source code of TI to, or for use by, military end users or for use in military, missile, nuclear, biological, or chemical weapons end uses. +You shall secure at Your own expense, such licenses and export and import documents as are necessary for You to fulfill its obligations under this Agreement. If such licenses or government approvals cannot be obtained, TI may terminate this Agreement, or shall otherwise be excused from the performance of any obligations it may have under this Agreement for which the licenses or government approvals are required. + +Governing Language. This Agreement is written and executed in the English language. If a translation of this Agreement is required for any purpose, including but not limited to registration of the Agreement pursuant to any governmental laws, regulations or rules, You warrant and represent that You will be solely responsible for creating such translation. It is understood and agreed that any translation of this Agreement into a language other than English is intended solely in order to comply with such laws or for reference purposes, and the English language version shall be authoritative and controlling. + +Registration Requirements. If required, You agree that You will be solely responsible for performing all acts and obtaining all approvals that may beárequired in connection with this Agreement by the government of the People's Republic of China, including but not limited to registering pursuant to, and otherwise complying with, the PRC Measures on the Administration of Software Products, Management Regulations on Technology Import-Export, and Technology Import and Export Contract Registration Management Rules. Upon receipt of such approvals from the government authorities, You will forward evidence of all such approvals to TI for its records. In the event that You fail to obtain any such approval or registration, You shall be solely responsible for any and all losses, damages or costs resulting therefrom, and shall indemnify TI for all such losses, damages or costs. + +Entire Agreement. This is the entire Agreement between You and TI and supersedes any prior and contemporaneous agreements, understandings, negotiations and discussions between the parties related to the subject matter of this Agreement. Neither party shall be bound by any conditions, definitions, warranties, understandings, nor representations with respect to the subject matter hereof other than as expressly provided herein. These terms and conditions will prevail notwithstanding any different, conflicting or additional terms and conditions that may appear in any purchase order, acknowledgement or other writing not expressly incorporated into this Agreement. No amendment or modification of this Agreement will be effective unless in writing and signed by a duly authorized representative of TI. You hereby warrant and represent that You have obtained all authorizations and other applicable consents required empowering you to enter into this Agreement and use the Evaluation Materials. + + + +} + +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +1F9C9836-090E-4017-95FD-C4F288FD3A99,Message +<%InstallStartupText%> + +1F9C9836-090E-4017-95FD-C4F288FD3A99,Title +<%InstallApplicationText%> + +2555563F-1BC1-4F42-8413-82FBC0DBEB72,Caption +{Installing CSL Libraries} + +2555563F-1BC1-4F42-8413-82FBC0DBEB72,Message +{Installation of the CSL Libraries in progress} + +4141B0E2-5A8A-423C-9823-6B01CF4DAA01,Message +<%UninstallStartupText%> + +4141B0E2-5A8A-423C-9823-6B01CF4DAA01,Title +<%UninstallApplicationText%> + +4A7B5960-702D-4678-8533-D085CF653F0E,Description +<%ProgramFilesDescription%> + +88F9D095-410E-4CF2-80DB-1423246F8E42,Description +<%TypicalInstallDescription%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +B1323B62-5067-4380-9E19-A2F6DFE8F186,Description +<%CustomInstallDescription%> + +CFC03BF9-B5A7-4504-85AF-FE5AEA67EC4A,Message +Testing + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset es { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset fr { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset hu { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset it { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset nl { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset pl { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} +::msgcat::mcmset pt_br { +114852AB-A479-460A-B139-F9C6E555725A,Message +<%UninstallCompleteText%> + +A116668A-21D1-4E54-A590-9E523E6CF807,Message +<%InstallationCompleteText%> + +EFC3A89B-C0AB-441F-9AF0-420E66AE1431,Message +<%InstallingApplicationText%> + +F864D537-DF36-457D-BE7D-A5E6F2EB0CC3,Message +<%UninstallingApplicationText%> + +} + diff --git a/package.bld b/package.bld new file mode 100644 index 0000000..5f02a0a --- /dev/null +++ b/package.bld @@ -0,0 +1,212 @@ +/****************************************************************************** + * FILE PURPOSE: Build description for the TCP3D Driver + ****************************************************************************** + * FILE NAME: package.bld + * + * DESCRIPTION: + * This file contains the build specification and description for the TCP3D driver + * + * The file takes the following parameters from the command line through the + * XDCARGS variable. + * XDCARGS[0] = TCP3D Driver Install Type + * Valid Values are "TAR" or "SETUP" + * DEFAULT is "TAR" + * + * Example for a valid command: + * xdc XDCARGS=SETUP release + * + * Copyright (C) 2011, Texas Instruments, Inc. + *****************************************************************************/ + +/* List of all subdirectories that combine to make the TCP3D Driver Package. */ +var subDirectories = [ "src", "docs", "example", "test" ]; + +/* Determine if we need to create the InstallJammer Application or not? + * TCP3D Driver deliverables be either of the following formats: + * - TAR Ball Package + * - Setup Executable + * DEFAULT is a TAR package. */ +if ((arguments[0] != "TAR") && (arguments[0] != "SETUP")) + tcp3dDriverInstallType = Pkg.attrs.archiver; +else + tcp3dDriverInstallType = arguments[0]; + +/* Irrespective of the InstallType we always create a TAR Ball Package as a part + * of the RTSC Build. Here we determine the name of the TAR Ball Package + * Format is as follows: + * tcp3d_ */ +var tcp3dRTSCFileName = "tcp3d" + "_" + + tcp3dPartNumber + "_" + + tcp3dDriverReleaseVersion[0] + "_" + + tcp3dDriverReleaseVersion[1] + "_" + + tcp3dDriverReleaseVersion[2] + "_" + + tcp3dDriverReleaseVersion[3]; + +/****************************************************************** + ************************ Release Banner ************************** + ******************************************************************/ + +print ("************* TCP3D Driver Build Information *************"); +print ("TCP3D Driver Install : " + tcp3dDriverInstallType); +print ("TCP3D Driver Version : " + tcp3dDriverReleaseVersion); +print ("Tools Directory : " + toolsBaseDir); +print ("RTSC File Name : " + tcp3dRTSCFileName); +print ("TCP3D Driver Path : " + tcp3dDriverPath); +print ("Coverity Analysis : " + (coverityAnalysis == "ON" ? "ON" : "OFF")); +print ("CC LE opts : " + C66LE.ccOpts.prefix); +print ("CC BE opts : " + C66BE.ccOpts.prefix); +print ("**********************************************************"); + +/* Create the release package for the TCP3D Driver */ +Pkg.defaultRelease = Pkg.addRelease (tcp3dRTSCFileName, {prefix: "./packages/"}); + +/* Cycle through all the sub-directories and build all the files */ +for (var i = 0; i < subDirectories.length; i++) +{ + /* Load the capsule in the sub directory. */ + var caps = xdc.loadCapsule (subDirectories[i]+"/Module.xs"); + + print ("Building directory " + subDirectories[i]); + + /* Build the capsule. */ + caps.modBuild(); + + /* Package the module.xs files for building via package */ + Pkg.otherFiles[Pkg.otherFiles.length++] = subDirectories[i]+"/Module.xs"; +} + +/* Package the remaining files */ +Pkg.otherFiles[Pkg.otherFiles.length++] = "config.bld"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "package.bld"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "package.xdc"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "package.xs"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "Settings.xdc"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "Settings.xdc.xdt"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "tcp3d_drv.h"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "tcp3d_osal.h"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "tcp3d_drv_types.h"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "tcp3dver.h"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "tcp3dver.h.xdt"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/TCP3D_DRV_doxconfig"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "docs/TCP3D_DRV_doxconfig.xdt"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "build/buildlib.xs"; +Pkg.otherFiles[Pkg.otherFiles.length++] = "makefile"; + +/* Generate Users Manual Doxyfile */ +var tplt = xdc.loadTemplate("./docs/TCP3D_DRV_doxconfig.xdt"); +tplt.genFile("./docs/TCP3D_DRV_doxconfig",tcp3dDriverReleaseVersion); + +/* Generate Settings.xdc */ +var tplt = xdc.loadTemplate("./Settings.xdc.xdt"); +tplt.genFile("./Settings.xdc",tcp3dDriverReleaseVersion); + +/* Generate paver.h */ +var tplt = xdc.loadTemplate("./tcp3dver.h.xdt"); +tplt.genFile("./tcp3dver.h",tcp3dDriverReleaseVersion); + +/* Generate eclipse sample file */ +var tplt = xdc.loadTemplate("./docs/eclipse/sample.xml.xdt"); +tplt.genFile("./docs/eclipse/sample.xml",tcp3dDriverReleaseVersion); + + +/*************************************************************************** + ********************************* MINI Package **************************** + ***************************************************************************/ +/* Check if we need to create the mini package? */ +var miniBuild = java.lang.System.getenv("MINI_PACKAGE"); + +if (miniBuild == "ON") +{ + /* Create the MINI RTSC Package */ + var additionalFiles = []; + + var libUtility = xdc.loadCapsule ("build/buildlib.xs"); + libUtility.createMiniPkg(tcp3dRTSCFileName, additionalFiles); +} + +/********************************************************************* + *********************** INSTALL-JAMMER Support ********************** + * In order to create the InstallJammer Application; we need to UNTAR + * the package into a temporary directory. This is required because + * currently the InstallJammer does not support the TAR Files and thus + * creating an UNTAR of the file. So to work-around the problem we will + * do the following in the EPILOGUE Section:- + * (a) Create a temporary directory called 'tmp' + * (b) UNTAR the package into 'tmp' + * (c) Run the INSTALL Jammer on 'tmp' + * (d) Remove the 'tmp' directory. + * + * This can be done only after the 'release' package has been created. + * Thus all of this work is being done in the EPILOGUE. + *********************************************************************/ +if (tcp3dDriverInstallType == "SETUP") +{ + /* Create the Install Jammer Version Variable. This is used inside the + * MPI File to create the Final executable. + * The format supported is as follows:- + * - setupwin32_tcp3d__.exe + */ + var InstallJammerVersion = "-DVersion " + + tcp3dPartNumber + "_" + + tcp3dDriverReleaseVersion[0] + "_" + + tcp3dDriverReleaseVersion[1] + "_" + + tcp3dDriverReleaseVersion[2] + "_" + + tcp3dDriverReleaseVersion[3]; + + /* This is the location where the tmp directory is located; this is used as + * the input directory for the Install Jammer. */ + var PackageBaseDir = " -DPackageBaseDir " + tcp3dDriverPath + "./tmp"; + + /* This is the location where the TCP3D Driver will be installed by default. */ + var WinInstallDir = " -DWinInstallDir " + + "C:/ti/tcp3d" + "_" + + tcp3dPartNumber + "_" + + tcp3dDriverReleaseVersion[0] + "_" + + tcp3dDriverReleaseVersion[1] + "_" + + tcp3dDriverReleaseVersion[2] + "_" + + tcp3dDriverReleaseVersion[3]; + + /* Create the actual EPILOGUE Section for the INSTALLER */ + Pkg.makeEpilogue += "release: install_application\n"; + Pkg.makeEpilogue += "install_application:\n"; + Pkg.makeEpilogue += "\t @echo -------------------------------------------------------\n"; + Pkg.makeEpilogue += "\t @echo Creating the Install\n"; + Pkg.makeEpilogue += "\t @echo -------------------------------------------------------\n"; + Pkg.makeEpilogue += "\t -$(MKDIR) tmp\n"; + Pkg.makeEpilogue += "\t -$(MKDIR) tmp/packages\n"; + Pkg.makeEpilogue += "\t -$(MKDIR) tmp/eclipse\n"; + Pkg.makeEpilogue += "\t -$(CP) -R eclipse tmp\n"; + Pkg.makeEpilogue += "\t tar -xf ./packages/" + tcp3dRTSCFileName + ".tar" + " -Ctmp/packages \n"; + Pkg.makeEpilogue += "\t installjammer " + InstallJammerVersion + PackageBaseDir + WinInstallDir + + " --output-dir packages/ --build install/tcp3d.mpi\n"; + Pkg.makeEpilogue += "\t -$(RMDIR) tmp\n\n"; +} + +/* We need to clean after ourselves; extend the 'clean' target to take care of this. */ +Pkg.makeEpilogue += "clean::\n"; +Pkg.makeEpilogue += "\t -$(RM) .xdcenv.mak\n"; +Pkg.makeEpilogue += "\t -$(RM) tcp3dver.h\n"; +Pkg.makeEpilogue += "\t -$(RM) Settings.xdc\n"; +Pkg.makeEpilogue += "\t -$(RM) makefile\n"; +Pkg.makeEpilogue += "\t -$(RM) docs/TCP3D_DRV_APIIF.chm\n"; +Pkg.makeEpilogue += "\t -$(RM) docs/TCP3D_DRV_doxconfig\n"; +Pkg.makeEpilogue += "\t -$(RM) docs/eclipse/sample.xml\n"; +Pkg.makeEpilogue += "\t -$(RMDIR) docs/doxy/rtf\n"; +Pkg.makeEpilogue += "\t -$(RMDIR) docs/doxy/html\n"; +Pkg.makeEpilogue += "\t -$(RMDIR) lib\n"; +// for (var i = 0; i < devices.length; i++) +// { + // Pkg.makeEpilogue += "\t -$(RMDIR) lib/" + devices[i].split("/")[0] + "\n"; +// } +if (tcp3dDriverInstallType == "SETUP") +{ + Pkg.makeEpilogue += "\t -$(RM) packages/*.exe\n"; + Pkg.makeEpilogue += "\t -$(RM) packages/*.bin\n"; + Pkg.makeEpilogue += "\t -$(RMDIR) eclipse\n"; + Pkg.makeEpilogue += "\t -$(RMDIR) tmp\n"; +} +if (miniBuild == "ON") +{ + Pkg.makeEpilogue += "\t -$(RM) simpleC66LE.mak\n"; + Pkg.makeEpilogue += "\t -$(RM) simpleC66BE.mak\n"; +} diff --git a/package.xdc b/package.xdc new file mode 100644 index 0000000..89ca30f --- /dev/null +++ b/package.xdc @@ -0,0 +1,15 @@ +/****************************************************************************** + * FILE PURPOSE: Package specification file + ****************************************************************************** + * FILE NAME: package.xdc + * + * DESCRIPTION: + * This file contains the package specification for the TCP3D Driver + * + * Copyright (C) 2012, Texas Instruments, Inc. + *****************************************************************************/ + +package ti.drv.tcp3d[2, 00, 00, 01] { + module Settings; +} + diff --git a/package.xs b/package.xs new file mode 100644 index 0000000..37b1ffc --- /dev/null +++ b/package.xs @@ -0,0 +1,53 @@ +/* + * ======== package.xs ======== + * + */ + + +/* + * ======== Package.getLibs ======== + * This function is called when a program's configuration files are + * being generated and it returns the name of a library appropriate + * for the program's configuration. + */ + +function getLibs(prog) +{ + var suffix = prog.build.target.suffix; + + var name = this.$name + ".a" + suffix; + + /* Read LIBDIR variable */ + var lib = java.lang.System.getenv("LIBDIR"); + + /* If NULL, default to "lib" folder */ + if (lib == null) + { + lib = "./lib"; + } else { + print ("\tSystem environment LIBDIR variable defined : " + lib); + } + + /* Get target folder, if applicable */ + if ( java.lang.String(suffix).contains('66') ) + lib = lib + "/c66"; + + /* Get library name with path */ + lib = lib + "/" + name; + if (java.io.File(this.packageBase + lib).exists()) { + return lib; + } + + /* Could not find any library, throw exception */ + throw new Error("\tLibrary not found: " + this.packageBase + lib); +} + +/* + * ======== package.close ======== + */ +function close() +{ + if (xdc.om.$name != 'cfg') { + return; + } +} diff --git a/projectCreate.bat b/projectCreate.bat new file mode 100755 index 0000000..561ad17 --- /dev/null +++ b/projectCreate.bat @@ -0,0 +1,150 @@ +@REM ****************************************************************************** +@REM * FILE PURPOSE: Unit Test and Example Project Creator +@REM ****************************************************************************** +@REM * FILE NAME: projectCreate.bat +@REM * +@REM * DESCRIPTION: +@REM * The script file is used to create the test and example projects for +@REM * TCP3D. These projects are available in the specified workspace. +@REM * +@REM * USAGE: +@REM * projectCreate.bat big +@REM * --- OR --- +@REM * projectCreate.bat +@REM * +@REM * DEPENDENCIES: +@REM * "C:\Program Files\Texas Instruments\pdk_C6657_1_0_0_1001\packages" +@REM * +@REM * Copyright (C) 2011, Texas Instruments, Inc. +@REM ***************************************************************************** +@echo OFF + +REM skip checking as done for PDK +REM @call setupenv.bat + +REM ***************************************************************************** +REM ***************************************************************************** +REM Customer Modifiable Section +REM ***************************************************************************** +REM ***************************************************************************** + +REM This is to control the CCS version specific project create command +REM Set to 'no' when using CCSv5 or set to 'yes' when using CCSv4 +set IS_CCS_VERSION_4=no + +REM Set to 'no' when using QT, EVM, VDB, or other hardware. Set to 'yes' only when using the simulator. +set IS_SIMULATOR_SUPPORT_NEEDED=yes + +REM Install Location for CCS. Ensure the PATH here is in compliance with the 'IS_CCS_VERSION_4' variable +REM defined above. +set CCS_INSTALL_PATH=c:\ti\ccsv5 + +REM Workspace where the projects will be created in "example" and "test" folders. +set MY_WORKSPACE=. + +REM This is Endianess of the Projects being created. +REM Valid Values are 'little' and 'big' +if "%1" == "big" ( +set ENDIAN=big +) else ( +set ENDIAN=little +) + +REM This is the format of the executable being created +REM Valid Values are 'ELF' and 'COFF' +set OUTPUT_FORMAT=ELF + +REM Version of CG-Tools +set CGT_VERSION=7.3.1 + +REM Version of XDC +set XDC_VERSION=3.23.03.53 + +REM Version of BIOS +set BIOS_VERSION=6.33.05.46 + +REM Version of the IPC +set IPC_VERSION=1.24.02.27 + +REM Version of the PDK +set PDK_VERSION=1.00.00.1003 + +REM Version of the EDMA +set EDMA_VERSION=02.11.05 + +REM RTSC Platform Name +set RTSC_PLATFORM_NAME=ti.platforms.simKepler + +REM RTSC Target +REM - Please ensure that you select this taking into account the +REM OUTPUT_FORMAT and the RTSC_PLATFORM_NAME +if "%ENDIAN%" == "big" ( +set RTSC_TARGET=ti.targets.elf.C66_big_endian +) else ( +set RTSC_TARGET=ti.targets.elf.C66 +) + +REM ***************************************************************************** +REM ***************************************************************************** +REM Please do NOT change anything below this +REM ***************************************************************************** +REM ***************************************************************************** + +REM Batch file execution location +set WORKDIR_SHORT=%~sdp0 + +REM Set auto create command by default for use with CCSv5 +set AUTO_CREATE_COMMAND=eclipse\eclipsec -noSplash + +REM If is CCS version 4 then set auto create command for use with CCSv4 +If .%IS_CCS_VERSION_4% == .yes set AUTO_CREATE_COMMAND=eclipse\jre\bin\java -jar %CCS_INSTALL_PATH%\eclipse\startup.jar + +REM Set project for Silicon or QT by default +set SIMULATOR_SUPPORT_DEFINE= + +REM If simulator support is needed then set the define +If .%IS_SIMULATOR_SUPPORT_NEEDED% == .yes set SIMULATOR_SUPPORT_DEFINE=-ccs.setCompilerOptions "--define SIMULATOR_SUPPORT" + +echo ***************************************************************************** +echo Detecting UnitTest Projects in PDK and importing them in the workspace %MY_WORKSPACE% + +set listFile=testpjtlist.txt +dir /b /s *testproject.txt | findstr "tcp3" > %listFile% +REM Search for all the test Project Files in the PDK. +for /F %%I IN (%listFile%) do ( +echo Detected Test Project: %%~nI + +REM Goto each directory where the test project file is located and create the projects. +pushd test + +REM Execute the command to create the project using the parameters specified above. +%CCS_INSTALL_PATH%\%AUTO_CREATE_COMMAND% -data %MY_WORKSPACE% -application com.ti.ccstudio.apps.projectCreate -ccs.name %%~nI_%ENDIAN% -ccs.outputFormat %OUTPUT_FORMAT% -ccs.device com.ti.ccstudio.deviceModel.C6000.GenericC64xPlusDevice -ccs.endianness %ENDIAN% -ccs.kind executable -ccs.cgtVersion %CGT_VERSION% -rtsc.xdcVersion %XDC_VERSION% -rtsc.enableDspBios -rtsc.biosVersion %BIOS_VERSION% -rtsc.buildProfile "debug" -rtsc.products "com.ti.rtsc.IPC:%IPC_VERSION%;com.ti.rtsc.SYSBIOS:%BIOS_VERSION%;ti.csl_lld:%PDK_VERSION%;com.ti.sdo.edma3:%EDMA_VERSION%" -rtsc.platform "%RTSC_PLATFORM_NAME%" -rtsc.target %RTSC_TARGET% -ccs.rts libc.a -ccs.args %%I %SIMULATOR_SUPPORT_DEFINE% -ccs.overwrite full + +REM copy the macros.ini to project location +copy %WORKDIR_SHORT%test\macros.ini %MY_WORKSPACE%\%%~nI_%ENDIAN%\macros.ini + +popd +) +@del /q %listFile% + +echo ***************************************************************************** +echo Detecting Example Projects in PDK and importing them in the workspace %MY_WORKSPACE% + +set listFile=examplepjtlist.txt +dir /b /s *exampleproject.txt | findstr "tcp3" > %listFile% +REM Search for all the Example Project Files in the PDK. +for /F %%I IN (%listFile%) do ( +echo Detected Example Project: %%~nI + +REM Goto each directory where the example project file is located and create the projects. +pushd example + +REM Execute the command to create the project using the parameters specified above. +%CCS_INSTALL_PATH%\%AUTO_CREATE_COMMAND% -data %MY_WORKSPACE% -application com.ti.ccstudio.apps.projectCreate -ccs.name %%~nI_%ENDIAN% -ccs.outputFormat %OUTPUT_FORMAT% -ccs.device com.ti.ccstudio.deviceModel.C6000.GenericC64xPlusDevice -ccs.endianness %ENDIAN% -ccs.kind executable -ccs.cgtVersion %CGT_VERSION% -rtsc.xdcVersion %XDC_VERSION% -rtsc.enableDspBios -rtsc.biosVersion %BIOS_VERSION% -rtsc.buildProfile "debug" -rtsc.products "com.ti.rtsc.IPC:%IPC_VERSION%;com.ti.rtsc.SYSBIOS:%BIOS_VERSION%;ti.csl_lld:%PDK_VERSION%;com.ti.sdo.edma3:%EDMA_VERSION%" -rtsc.platform "%RTSC_PLATFORM_NAME%" -rtsc.target %RTSC_TARGET% -ccs.rts libc.a -ccs.args %%I %SIMULATOR_SUPPORT_DEFINE% -ccs.overwrite full + +REM copy the macros.ini to project location +copy %WORKDIR_SHORT%test\macros.ini %MY_WORKSPACE%\%%~nI_%ENDIAN%\macros.ini + +popd +) +@del /q %listFile% diff --git a/setupenv.bat b/setupenv.bat new file mode 100755 index 0000000..ea7ed3f --- /dev/null +++ b/setupenv.bat @@ -0,0 +1,87 @@ +@REM *************************************************************************** +@REM * FILE PURPOSE: Environment Setup for building TCP3D driver +@REM *************************************************************************** +@REM * FILE NAME: setupenv.bat +@REM * +@REM * DESCRIPTION: +@REM * Configures and sets up the Build Environment +@REM * +@REM * Copyright (C) 2012, Texas Instruments, Inc. +@REM *************************************************************************** + +@echo ------------------------------------------------ +@echo Configuring TCP3D Driver Build Environment +@echo off + +REM Set CCS Installation Root directory +REM ============================================================================ +if exist "c:\ti" ( +set CCS_ROOT="c:/ti" +) else if exist "C:\Program Files (x86)\Texas Instruments" ( +set CCS_ROOT="C:/Program Files (x86)/Texas Instruments" +) else if exist "C:\Program Files\Texas Instruments" ( +set CCS_ROOT="C:/Program Files/Texas Instruments" +) else ( +echo. ******************************************** +echo. CCS_ROOT is not defined, check the script +echo. ******************************************** +) +REM Print message about the CCS base path detected +echo. ******************************************** +echo. Detected CCS_ROOT is set to %CCS_ROOT% +echo. ******************************************** +REM ============================================================================ +REM Get XDC utililty path and set to path to use 'path2dos' +for /f "tokens=1* delims=" %%a in ('dir /b %CCS_ROOT:/=\%\xdctools_3_23*') do ( +set XDC_UTIL_PATH=%CCS_ROOT:/=\%\%%a\packages\xdc\services\io\release +) +set PATH=%PATH%;%XDC_UTIL_PATH% +set XDC_UTIL_PATH= + +REM Covert variables for short path +for /f "tokens=1* delims=" %%a in ('cmd /q/c path2dos %CCS_ROOT%') do (set CCS_ROOT=%%a) +REM ============================================================================ + +@REM EDMA3 LLD installation path variables +set EDMA3LLD_BIOS6_INSTALLDIR=%CCS_ROOT%/edma3_lld_02_11_05_02 + +@REM PDK installation path +set PDK_INSTALL_PATH=%CCS_ROOT:/=\%\csl_lld_keystone2_1_0_0_3\packages + +@REM Specify the XDC Tool Path +REM set XDC_INSTALL_PATH=T:/gen/xdc/xdctools_3_20_07_86 +set XDC_INSTALL_PATH=%CCS_ROOT%/xdctools_3_23_03_53 + +@REM Third Party Tools: Coverity +set STATIC_ANALYZE_PATH=T:\gen\coverity\prevent-mingw-3.8.0 +set COVERITY_INSTALL_PATH=%STATIC_ANALYZE_PATH:\=/% + +@REM Eclipse Help Plugin (Not required by customers) +set XDC_ECLIPSE_PLUGIN_INSTALL_PATH=T:/gen/xdc/xdc_eclipse_plugin_gen/20091203 + +@REM XDC filete for creating simple makefile +set XDC_FILTER_INSTALL_PATH=T:/gen/xdc/xdcFilter/20100428 + +@REM set the Code Gen tools +set C6X_GEN_INSTALL_PATH=T:/c6xx/cgen7_2_02/c6000/cgtools + +@REM set the CG XML path +set CG_XML_BIN_INSTALL_PATH=T:/SDOApps/cg_xml/cg_xml_v2_20_00/bin + +@REM Third Party Tools: Doxygen +set DOXYGEN_INSTALL_PATH=T:\Doxygen\doxygen\1.5.1-p1\bin + +@REM Third Party Tools: Install-Jammer (Not required by customers) +set INSTALL_JAMMER_DIR=T:\gen\InstallJammer\v1_2_05 + +@REM Third Party Tools: HTML Help compiler. +set HTML_HELP_WORKSHOP_INSTALL_PATH=T:\Doxygen\HTML_Help_Workshop\10-01-2007 + +@REM PDK Environment Setup: +@call %PDK_INSTALL_PATH%\pdksetupenv.bat + +@REM set XDCPATH with necessary packages +set XDCPATH=%XDCPATH%;%COVERITY_INSTALL_PATH% + +@echo TCP3D Driver Build Environment Configured +@echo ------------------------------------------------ diff --git a/src/Module.xs b/src/Module.xs new file mode 100644 index 0000000..353af15 --- /dev/null +++ b/src/Module.xs @@ -0,0 +1,54 @@ +/****************************************************************************** + * FILE PURPOSE: TCP3D Driver Source Module specification file. + ****************************************************************************** + * FILE NAME: module.xs + * + * DESCRIPTION: + * This file contains the module specification for the TCP3D Driver + * + * Copyright (C) 2009, Texas Instruments, Inc. + *****************************************************************************/ + +/* Load the library utility. */ +var libUtility = xdc.loadCapsule ("../build/buildlib.xs"); + +/* List of all the TCP3D Files for library building */ +var tcp3dLibFiles = [ + "src/tcp3d_drv.c", + "src/tcp3d_reg.c", + "src/tcp3d_utils.c", + "src/tcp3d_betaState.c", +]; + +/* Other files for packaging */ +var tcp3dOtherFiles = [ + "src/tcp3d_drv_priv.h", + "src/tcp3d_utils.h", +]; + +/************************************************************************** + * FUNCTION NAME : modBuild + ************************************************************************** + * DESCRIPTION : + * The function is used to build the TCP3D Driver and to add the core + * driver files to the package. + **************************************************************************/ +function modBuild() +{ + /* Build the libraries for all the targets specified. */ + for (var targets=0; targets < Build.targets.length; targets++) + { + var libOptions = { incs: tcp3dIncludePath, }; + + libUtility.buildLibrary (libOptions, Pkg.name, Build.targets[targets], tcp3dLibFiles); + } + + /* Add all the .c files to the release package. */ + for (var k = 0 ; k < tcp3dLibFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = tcp3dLibFiles[k]; + + /* Add all the .h files to the release package. */ + for (var k = 0 ; k < tcp3dOtherFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = tcp3dOtherFiles[k]; +} + diff --git a/src/tcp3d_betaState.c b/src/tcp3d_betaState.c new file mode 100644 index 0000000..aa65d18 --- /dev/null +++ b/src/tcp3d_betaState.c @@ -0,0 +1,323 @@ +/** + * \file tcp3d_betaState.c + * + * \brief Beta State calculations functions from the tail bits for TCP3D pre-process. + * + * Copyright (c) Texas Instruments Incorporated 2008 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#include + +/** + * \brief Calculates initial beta states using the tail bits for use with the + * TCP3D input configuration registers. + */ +void Tcp3d_betaStates( + IN int8_t * const RESTRICT tailBits, + IN int32_t signChange, + IN int32_t Kt, + OUT int8_t * const RESTRICT beta0Ptr, + OUT int8_t * const RESTRICT beta1Ptr) +{ + int32_t Tmp0,Tmp1,Tmp2; + int64_t llRes, llFin; + int32_t bit10, bit32, bit54, bit76, bit98, bitba; + + int32_t scale; + int32_t beta0,beta1,beta2,beta3,beta4,beta5,beta6,beta7,betaMax; + + if(signChange) + { + scale = 0x00800080; //+128 + } + else + { + scale = 0xff80ff80; //-128 + } + + //Load 12 tail samples + Tmp0 = _mem4(&tailBits[0]); + Tmp1 = _mem4(&tailBits[4]); + Tmp2 = _mem4(&tailBits[8]); + +#ifdef _BIG_ENDIAN + Tmp0 = _rotl(_swap4(Tmp0), 16); + Tmp1 = _rotl(_swap4(Tmp1), 16); + Tmp2 = _rotl(_swap4(Tmp2), 16); +#endif + + //*************************************************** + //Initial Beta States Calculation for MAP 0 and MAP1 + //*************************************************** + //Process 4 samples + llRes = _mpysu4ll(Tmp0, 0x01010101); + llFin = _smpy2ll(_loll(llRes), scale); + bit10 = _shr2(_spack2(_hill(llFin),_loll(llFin)), 8); + llFin = _smpy2ll(_hill(llRes), scale); + bit32 = _shr2(_spack2(_hill(llFin),_loll(llFin)), 8); + + //Process 4 samples + //llRes = _mpysu4ll(_hill(llTmp), 0x01010101); + llRes = _mpysu4ll(Tmp1, 0x01010101); + llFin = _smpy2ll(_loll(llRes), scale); + bit54 = _shr2(_spack2(_hill(llFin),_loll(llFin)), 8); + llFin = _smpy2ll(_hill(llRes), scale); + bit76 = _shr2(_spack2(_hill(llFin),_loll(llFin)), 8); + + //Process 4 samples + llRes = _mpysu4ll(Tmp2, 0x01010101); + llFin = _smpy2ll(_loll(llRes), scale); + bit98 = _shr2(_spack2(_hill(llFin),_loll(llFin)), 8); + llFin = _smpy2ll(_hill(llRes), scale); + bitba = _shr2(_spack2(_hill(llFin),_loll(llFin)), 8); + + //Compute beta state values based on the Kt (# of trellis stages) + if(Kt==3) + { + //Beta MAP0 + beta0 = 0; + beta1 = _ext(bit10,16,16) + _ext(bit10,0,16); //xt0[0] + xt0[1]; + beta2 = _ext(bit10,16,16) + _ext(bit32,16,16) + _ext(bit32,0,16); //xt0[0] + xt0[2] + xt0[3]; + beta3 = _ext(bit10,0,16) + _ext(bit32,16,16) + _ext(bit32,0,16); //xt0[1] + xt0[2] + xt0[3]; + beta4 = _ext(bit10,0,16) + _ext(bit32,16,16) + _ext(bit54,16,16) + _ext(bit54,0,16); //xt0[1] + xt0[2]+ xt0[4] + xt0[5]; + beta5 = _ext(bit10,16,16) + _ext(bit32,16,16) + _ext(bit54,16,16) + _ext(bit54,0,16);//xt0[0]+ xt0[2]+ xt0[4] + xt0[5]; + beta6 = _ext(bit10,16,16) + _ext(bit10,0,16) + _ext(bit32,0,16) + _ext(bit54,16,16) + _ext(bit54,0,16); //xt0[0] + xt0[1]+ xt0[3] + xt0[4] + xt0[5]; + beta7 = _ext(bit32,0,16) + _ext(bit54,16,16) + _ext(bit54,0,16);// xt0[3] + xt0[4] + xt0[5]; + + betaMax = _max2(beta0,beta1); + betaMax = _max2(betaMax,beta2); + betaMax = _max2(betaMax,beta3); + betaMax = _max2(betaMax,beta4); + betaMax = _max2(betaMax,beta5); + betaMax = _max2(betaMax,beta6); + betaMax = _max2(betaMax,beta7); + betaMax = _ext(betaMax,16,16); + betaMax = 127 - betaMax; + + beta0 = beta0 + betaMax; + beta1 = beta1 + betaMax; + beta2 = beta2 + betaMax; + beta3 = beta3 + betaMax; + beta4 = beta4 + betaMax; + beta5 = beta5 + betaMax; + beta6 = beta6 + betaMax; + beta7 = beta7 + betaMax; + + beta0 = _max2(0x8000ff81, beta0); + beta1 = _max2(0x8000ff81, beta1); + beta2 = _max2(0x8000ff81, beta2); + beta3 = _max2(0x8000ff81, beta3); + beta4 = _max2(0x8000ff81, beta4); + beta5 = _max2(0x8000ff81, beta5); + beta6 = _max2(0x8000ff81, beta6); + beta7 = _max2(0x8000ff81, beta7); + +#ifdef _BIG_ENDIAN + _mem4(&beta0Ptr[0]) = _packl4(_pack2(beta0,beta1),_pack2(beta2,beta3)); + _mem4(&beta0Ptr[4]) = _packl4(_pack2(beta4,beta5),_pack2(beta6,beta7)); +#else + _mem4(&beta0Ptr[0]) = _packl4(_pack2(beta3,beta2),_pack2(beta1,beta0)); + _mem4(&beta0Ptr[4]) = _packl4(_pack2(beta7,beta6),_pack2(beta5,beta4)); +#endif + + //Beta MAP1 + beta0 = 0; + beta1 = _ext(bit76,16,16) + _ext(bit76,0,16); //xt1[0] + xt1[1]; + beta2 = _ext(bit76,16,16) + _ext(bit98,16,16) + _ext(bit98,0,16); //xt1[0] + xt1[2] + xt1[3]; + beta3 = _ext(bit76,0,16) + _ext(bit98,16,16) + _ext(bit98,0,16); //xt1[1] + xt1[2] + xt1[3]; + beta4 = _ext(bit76,0,16) + _ext(bit98,16,16) + _ext(bitba,16,16) + _ext(bitba,0,16); //xt1[1] + xt1[2]+ xt1[4] + xt1[5]; + beta5 = _ext(bit76,16,16) + _ext(bit98,16,16) + _ext(bitba,16,16) + _ext(bitba,0,16);//xt1[0]+ xt1[2]+ xt1[4] + xt1[5]; + beta6 = _ext(bit76,16,16) + _ext(bit76,0,16) + _ext(bit98,0,16) + _ext(bitba,16,16) + _ext(bitba,0,16); //xt1[0] + xt1[1]+ xt1[3] + xt1[4] + xt1[5]; + beta7 = _ext(bit98,0,16) + _ext(bitba,16,16) + _ext(bitba,0,16);// xt1[3] + xt1[4] + xt1[5]; + + betaMax = _max2(beta0,beta1); + betaMax = _max2(betaMax,beta2); + betaMax = _max2(betaMax,beta3); + betaMax = _max2(betaMax,beta4); + betaMax = _max2(betaMax,beta5); + betaMax = _max2(betaMax,beta6); + betaMax = _max2(betaMax,beta7); + betaMax = _ext(betaMax,16,16); + betaMax = 127 - betaMax; + + beta0 = beta0 + betaMax; + beta1 = beta1 + betaMax; + beta2 = beta2 + betaMax; + beta3 = beta3 + betaMax; + beta4 = beta4 + betaMax; + beta5 = beta5 + betaMax; + beta6 = beta6 + betaMax; + beta7 = beta7 + betaMax; + + beta0 = _max2(0x8000ff81, beta0); + beta1 = _max2(0x8000ff81, beta1); + beta2 = _max2(0x8000ff81, beta2); + beta3 = _max2(0x8000ff81, beta3); + beta4 = _max2(0x8000ff81, beta4); + beta5 = _max2(0x8000ff81, beta5); + beta6 = _max2(0x8000ff81, beta6); + beta7 = _max2(0x8000ff81, beta7); + +#ifdef _BIG_ENDIAN + _mem4(&beta1Ptr[0]) = _packl4(_pack2(beta0,beta1),_pack2(beta2,beta3)); + _mem4(&beta1Ptr[4]) = _packl4(_pack2(beta4,beta5),_pack2(beta6,beta7)); +#else + _mem4(&beta1Ptr[0]) = _packl4(_pack2(beta3,beta2),_pack2(beta1,beta0)); + _mem4(&beta1Ptr[4]) = _packl4(_pack2(beta7,beta6),_pack2(beta5,beta4)); +#endif + } + else if(Kt==2) + { + //Beta MAP0 + beta0 = 0; + beta1 = _ext(bit32,16,16) + _ext(bit32,0,16); //xt0[0] + xt0[1]; + beta2 = _ext(bit32,16,16) + _ext(bit54,16,16) + _ext(bit54,0,16); //xt0[0] + xt0[2] + xt0[3]; + beta3 = _ext(bit32,0,16) + _ext(bit54,16,16) + _ext(bit54,0,16); //xt0[1] + xt0[2] + xt0[3]; + + betaMax = _max2(beta0,beta1); + betaMax = _max2(betaMax,beta2); + betaMax = _max2(betaMax,beta3); + betaMax = _ext(betaMax,16,16); + betaMax = 127 - betaMax; + + beta0 = beta0 + betaMax; + beta1 = beta1 + betaMax; + beta2 = beta2 + betaMax; + beta3 = beta3 + betaMax; + + beta0 = _max2(0x8000ff81, beta0); + beta1 = _max2(0x8000ff81, beta1); + beta2 = _max2(0x8000ff81, beta2); + beta3 = _max2(0x8000ff81, beta3); + +#ifdef _BIG_ENDIAN + _mem4(&beta0Ptr[0]) = _packl4(_pack2(beta0,beta1),_pack2(beta2,beta3)); +#else + _mem4(&beta0Ptr[0]) = _packl4(_pack2(beta3,beta2),_pack2(beta1,beta0)); +#endif + _mem4(&beta0Ptr[4]) = 0x81818181; + + //Beta MAP1 + //temp + beta0 = _ext(bit98,16,16); + beta0 = _ext(bit98,0,16); + beta0 = _ext(bitba,16,16); + beta0 = _ext(bitba,0,16); + + //temp + beta0 = 0; + beta1 = _ext(bit98,16,16) + _ext(bit98,0,16); //xt1[0] + xt1[1]; + beta2 = _ext(bit98,16,16) + _ext(bitba,16,16) + _ext(bitba,0,16); //xt1[0] + xt1[2] + xt1[3]; + beta3 = _ext(bit98,0,16) + _ext(bitba,16,16) + _ext(bitba,0,16); //xt1[1] + xt1[2] + xt1[3]; + + betaMax = _max2(beta0,beta1); + betaMax = _max2(betaMax,beta2); + betaMax = _max2(betaMax,beta3); + betaMax = _ext(betaMax,16,16); + betaMax = 127 - betaMax; + + beta0 = beta0 + betaMax; + beta1 = beta1 + betaMax; + beta2 = beta2 + betaMax; + beta3 = beta3 + betaMax; + + beta0 = _max2(0x8000ff81, beta0); + beta1 = _max2(0x8000ff81, beta1); + beta2 = _max2(0x8000ff81, beta2); + beta3 = _max2(0x8000ff81, beta3); + +#ifdef _BIG_ENDIAN + _mem4(&beta1Ptr[0]) = _packl4(_pack2(beta0,beta1),_pack2(beta2,beta3)); +#else + _mem4(&beta1Ptr[0]) = _packl4(_pack2(beta3,beta2),_pack2(beta1,beta0)); +#endif + _mem4(&beta1Ptr[4]) = 0x81818181; + } + else if(Kt==1) + { + //Beta MAP0 + beta0 = 0; + beta1 = _ext(bit54,16,16) + _ext(bit54,0,16); //xt0[0] + xt0[1]; + + betaMax = _max2(beta0,beta1); + betaMax = _ext(betaMax,16,16); + betaMax = 127 - betaMax; + + beta0 = beta0 + betaMax; + beta1 = beta1 + betaMax; + + beta0 = _max2(0x8000ff81, beta0); + beta1 = _max2(0x8000ff81, beta1); + +#ifdef _BIG_ENDIAN + _mem4(&beta0Ptr[0]) = _packl4(_pack2(beta0,beta1),0x81818181); +#else + _mem4(&beta0Ptr[0]) = _packl4(0x81818181,_pack2(beta1,beta0)); +#endif + _mem4(&beta0Ptr[4]) = 0x81818181; + + //Beta MAP1 + beta0 = 0; + beta1 = _ext(bitba,16,16) + _ext(bitba,0,16); //xt1[0] + xt1[1]; + + betaMax = _max2(beta0,beta1); + betaMax = _ext(betaMax,16,16); + betaMax = 127 - betaMax; + + beta0 = beta0 + betaMax; + beta1 = beta1 + betaMax; + + beta0 = _max2(0x8000ff81, beta0); + beta1 = _max2(0x8000ff81, beta1); + +#ifdef _BIG_ENDIAN + _mem4(&beta1Ptr[0]) = _packl4(_pack2(beta0,beta1),0x81818181); +#else + _mem4(&beta1Ptr[0]) = _packl4(0x81818181,_pack2(beta1,beta0)); +#endif + _mem4(&beta1Ptr[4]) = 0x81818181; + + } + else if(Kt==0) + { +#ifdef _BIG_ENDIAN + _mem4(&beta0Ptr[0]) = 0x7f818181; + _mem4(&beta1Ptr[0]) = 0x7f818181; +#else + _mem4(&beta0Ptr[0]) = 0x8181817f; + _mem4(&beta1Ptr[0]) = 0x8181817f; +#endif + _mem4(&beta0Ptr[4]) = 0x81818181; + _mem4(&beta1Ptr[4]) = 0x81818181; + } +} + +/* nothing past this line */ diff --git a/src/tcp3d_drv.c b/src/tcp3d_drv.c new file mode 100644 index 0000000..b703d0b --- /dev/null +++ b/src/tcp3d_drv.c @@ -0,0 +1,2297 @@ +/** + * \file tcp3d_drv.c + * + * \brief TCP3D Driver functions. + * + * Copyright (C) Texas Instruments Incorporated 2009 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** + * Include Files + */ +/* TCP3D driver includes */ +#include +#include + +/* TCP3D Types and OSAL defintions: These files can be overriden by customers + * to point to their copies. Because of this the files have not been explicitly + * specified to include the driver path.*/ +#include +#include + +#define TWO_PATHS 0 + +#define TPCC_REVT_REGS 0 +#define TPCC_L2P_REGS 1 + +#define PING_INDEX 0 +#define PONG_INDEX 1 + +/** @brief Global Variable which describes the TCP3D Driver Version Information */ +const char Tcp3dDrvVersionStr[] = TCP3D_DRV_VERSION_STR ":" __DATE__ ":" __TIME__; + +/**************************************************************************** + * TCP3D Driver Functions * + ****************************************************************************/ +/******************************************************************************* + * Enables interrupt generation by EDMA CC. Sets two bits of L2P channels + * in the TPCC_IESR/TPCC_IESRH. + ******************************************************************************/ +static void Tcp3d_enableEdmaL2pIntr(Tcp3d_Instance *inst) +{ +#if UNTESTED_CODE + *inst->intEnSetReg[TPCC_L2P_REGS] = (inst->l2pChMaskPing | inst->l2pChMaskPong); +#ifdef SIM_WORKAROUND + /** + * WORKAROUND: Current Simulator does not generate interrupt + * when there is a pending IPR bit and we enable the IER in the + * EDMA register space. So, We are forcing the EDMA to generate + * the interrupt if the IPR has valid bits. + */ + if ( inst->intPendReg[TPCC_L2P_REGS] && + (inst->l2pChMaskPing | inst->l2pChMaskPong) ) + { + inst->tpccShadowRegs->TPCC_IEVAL = 1; + } +#endif +#else + /* Set/Clear ITCINT bit in OPT field based on drvCtrl->intrFlag */ + inst->pingPtrL2p->opt |= (1 << CSL_TPCC_PARAM_OPT_ITCINTEN_SHIFT); + inst->pongPtrL2p->opt |= (1 << CSL_TPCC_PARAM_OPT_ITCINTEN_SHIFT); + inst->pingPtrL2p->opt |= (1 << CSL_TPCC_PARAM_OPT_TCINTEN_SHIFT); + inst->pongPtrL2p->opt |= (1 << CSL_TPCC_PARAM_OPT_TCINTEN_SHIFT); +#endif + inst->pingL2pEnCntr++; +} + +/******************************************************************************* + * Disables interrupt generation by EDMA CC. Sets two bits of L2P channels + * in the TPCC_IECR/TPCC_IECRH. + ******************************************************************************/ +static void Tcp3d_disableEdmaL2pIntr(Tcp3d_Instance *inst) +{ +#if UNTESTED_CODE + *inst->intEnClrReg[TPCC_L2P_REGS] = (inst->l2pChMaskPing | inst->l2pChMaskPong); +#else + /* Set/Clear ITCINT bit in OPT field based on drvCtrl->intrFlag */ + inst->pingPtrL2p->opt &= ~(1 << CSL_TPCC_PARAM_OPT_ITCINTEN_SHIFT); + inst->pongPtrL2p->opt &= ~(1 << CSL_TPCC_PARAM_OPT_ITCINTEN_SHIFT); + inst->pingPtrL2p->opt &= ~(1 << CSL_TPCC_PARAM_OPT_TCINTEN_SHIFT); + inst->pongPtrL2p->opt &= ~(1 << CSL_TPCC_PARAM_OPT_TCINTEN_SHIFT); +#endif + inst->pingL2pEnCntr--; +} + +/******************************************************************************* + * Clears pending interrupt generated by EDMA CC. Sets two bits of L2P channels + * in the TPCC_ICR/TPCC_ICRH. + ******************************************************************************/ +static void Tcp3d_clearEdmaL2pIntr(Tcp3d_Instance *inst) +{ +#if UNTESTED_CODE + *inst->clrIntPendReg[TPCC_L2P_REGS] = (inst->l2pChMaskPing | inst->l2pChMaskPong); +#endif + inst->pingL2pEnCntr=0; +} + +/******************************************************************************* + * Enables interrupt generation by EDMA CC. Sets two bits of REVT channels + * in the TPCC_IESR/TPCC_IESRH. + ******************************************************************************/ +static void Tcp3d_enableEdmaPauseIntr(Tcp3d_Instance *inst) +{ + *inst->intEnSetReg[TPCC_REVT_REGS] = (inst->pauseChMaskPing | inst->pauseChMaskPong); +#ifdef SIM_WORKAROUND + /** + * WORKAROUND: Current Simulator does not generate interrupt + * when there is a pending IPR bit and we enable the IER in the + * EDMA register space. So, We are forcing the EDMA to generate + * the interrupt if the IPR has valid bits. + */ + if ( inst->intPendReg[TPCC_REVT_REGS] && + (inst->pauseChMaskPing | inst->pauseChMaskPong) ) + { + inst->tpccShadowRegs->TPCC_IEVAL = 1; + } +#endif + inst->pingPauseEnCntr++; +} + +/******************************************************************************* + * Disables interrupt generation by EDMA CC. Sets two bits of REVT channels + * in the TPCC_IECR/TPCC_IECRH. + ******************************************************************************/ +static void Tcp3d_disableEdmaPauseIntr(Tcp3d_Instance *inst) +{ + *inst->intEnClrReg[TPCC_REVT_REGS] = (inst->pauseChMaskPing | inst->pauseChMaskPong); + inst->pingPauseEnCntr--; +} + +/******************************************************************************* + * Clears pending interrupt generated by EDMA CC. Sets two bits of REVT channels + * in the TPCC_ICR/TPCC_ICRH. + ******************************************************************************/ +static void Tcp3d_clearEdmaPauseIntr(Tcp3d_Instance *inst) +{ + *inst->clrIntPendReg[TPCC_REVT_REGS] = (inst->pauseChMaskPing | inst->pauseChMaskPong); + inst->pingPauseEnCntr=0; +} + +/** + * @brief TCP3D Driver function for providing the number of buffers + * required. + */ +Tcp3d_Result Tcp3d_getNumBuf (IN Tcp3d_SizeCfg *cfg, + OUT int16_t *nbufs) +{ + *nbufs = TCP3D_DRV_NUM_BUF; + + return ( TCP3D_DRV_NO_ERR ); +} + +/** + * @brief TCP3D Driver function for providing the attributes of all the + * number of buffers requested through the structure of type + * Tcp3d_MemBuffer provided. + */ +Tcp3d_Result Tcp3d_getBufDesc ( IN Tcp3d_SizeCfg *cfg, + OUT Tcp3d_MemBuffer bufs[]) +{ + bufs[TCP3D_DRV_INST_BUFN].size = sizeof(Tcp3d_Instance); + bufs[TCP3D_DRV_INST_BUFN].log2align = 2; + bufs[TCP3D_DRV_INST_BUFN].mclass = Tcp3d_BufClass_L2RAM; + bufs[TCP3D_DRV_INST_BUFN].volat = TRUE; + + bufs[TCP3D_DRV_PSEUDO_PARAM_BUFN].size = (cfg->maxCodeBlocks<<5)*TCP3D_DRV_LINK_CB; + bufs[TCP3D_DRV_PSEUDO_PARAM_BUFN].log2align = 2; + bufs[TCP3D_DRV_PSEUDO_PARAM_BUFN].mclass = Tcp3d_BufClass_L2RAM; + bufs[TCP3D_DRV_PSEUDO_PARAM_BUFN].volat = TRUE; + + return ( TCP3D_DRV_NO_ERR ); +} + +/** + * @brief TCP3D Driver Initialization function which must be called only + * once to initialize the driver instance and other required + * resources needed for the driver functionality. + */ +Tcp3d_Result Tcp3d_init( IN Tcp3d_MemBuffer bufs[], + IN Tcp3d_InitParams *drvInitParams) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + Tcp3d_Instance *tcp3dInst; + uint32_t modeReg = 0, endReg = 0, exeRegP0 = 0, exeRegP1 =0; + int32_t idx, locBufSize[TCP3D_DRV_NUM_BUF]; + CSL_Tcp3d_cfgRegs *tcp3dCfgRegs; + + /* Check for valid instance number */ + if ( drvInitParams->instNum > TCP3D_DRV_MAX_NUM_INSTANCES ) + { + /* Return error */ + tcp3dResult = TCP3D_DRV_INVALID_INSTANCE_NUMBER; + + return ( tcp3dResult ); + } + + /* compute the buffer sizes table */ + locBufSize[TCP3D_DRV_INST_BUFN] = sizeof(Tcp3d_Instance); + locBufSize[TCP3D_DRV_PSEUDO_PARAM_BUFN] = (drvInitParams->maxCodeBlocks<<5)*TCP3D_DRV_LINK_CB; + + /* Check if all buffers have valid addresses and sizes */ + for ( idx = 0; idx < TCP3D_DRV_NUM_BUF; idx++) + { + if ( bufs[idx].base == NULL || bufs[idx].size < locBufSize[idx] ) + tcp3dResult = TCP3D_DRV_INVALID_BUFF; + } + + /* Initialize the instance if the buffer addresses are not NULL */ + if ( tcp3dResult == TCP3D_DRV_NO_ERR ) + { + /* Initialize the driver Instance */ + tcp3dInst = (Tcp3d_Instance *) bufs[TCP3D_DRV_INST_BUFN].base; + + /* Initialize the pseudo PaRAM array pointer */ + tcp3dInst->pseudoParamBufPtr = (EDMA3_DRV_PaRAMRegs *) bufs[TCP3D_DRV_PSEUDO_PARAM_BUFN].base; + } + else + { + /* Return the error */ + return ( tcp3dResult ); + } + + /* Get the address of TCP3D configuration registers base address */ + tcp3dCfgRegs = drvInitParams->tcp3dCfgRegs; + + /* Update the instace with the input parameters */ + tcp3dInst->mode = drvInitParams->ctrlParams.mode; + tcp3dInst->doubleBuffer = drvInitParams->ctrlParams.doubleBuf; + tcp3dInst->edmaHnd = drvInitParams->edmaHnd; + tcp3dInst->edmaRegionId = drvInitParams->edmaRegionId; + tcp3dInst->maxCodeBlocks = drvInitParams->maxCodeBlocks; + tcp3dInst->notificationEventNum = drvInitParams->notificationEventNum; + tcp3dInst->instNum = drvInitParams->instNum; + tcp3dInst->coreId = drvInitParams->coreID; + + /* Verify the REVT channels */ + if ( ( drvInitParams->pingCh[0] != drvInitParams->pingConfig.revtCh ) || + ( drvInitParams->pongCh[0] != drvInitParams->pongConfig.revtCh ) ) + { + /* Return error */ + tcp3dResult = TCP3D_DRV_INVALID_EDMA_CH; + + return ( tcp3dResult ); + } + + for ( idx = 0; idx < TCP3D_DRV_MAX_CH_PER_PATH; idx++ ) + { + /* Copy PING Channels */ + tcp3dInst->pingCh[idx] = drvInitParams->pingCh[idx]; + + /* Copy PONG Channels */ + tcp3dInst->pongCh[idx] = drvInitParams->pongCh[idx]; + } + + for ( idx = 0; idx < (TCP3D_DRV_MAX_LINK_CH>>1); idx++ ) + { + /* Copy PING Channels */ + tcp3dInst->pingLinkCh[idx] = drvInitParams->linkCh[idx]; + + /* Copy PONG Channels */ + tcp3dInst->pongLinkCh[idx] = drvInitParams->linkCh[idx+(TCP3D_DRV_MAX_LINK_CH>>1)]; + } + + /* Set the Driver variables to defaults */ + tcp3dInst->constantOne = 1; + tcp3dInst->pauseState = TCP3D_DRV_STATE_PAUSE; + + /* Initialize the driver variables */ + tcp3dInst->maxPingCbCnt = (tcp3dInst->maxCodeBlocks >> 1); + tcp3dInst->maxPongCbCnt = (tcp3dInst->maxCodeBlocks >> 1); + tcp3dInst->maxPingCbIdx = ((tcp3dInst->maxPingCbCnt - 1) << 1); + tcp3dInst->maxPongCbIdx = ((tcp3dInst->maxPongCbCnt << 1) - 1); + + /* Reset run-time variables */ + Tcp3d_resetRuntimeVariables(tcp3dInst); + + /* EDMA3 - get PaRAM addresses of all physical channels */ + if ( EDMA3_DRV_SOK != Tcp3d_getEdmaChParamAddr(tcp3dInst) ) + { + tcp3dResult = TCP3D_DRV_FAIL_EDMA_GET_PARAM_ADDR; + + return ( tcp3dResult ); + } + + /* Initialize the EDMA PaRAM memory for the physical channels */ + if ( EDMA3_DRV_SOK != Tcp3d_initEdmaChParam(tcp3dInst) ) + { + tcp3dResult = TCP3D_DRV_FAIL_EDMA_PARAM_INIT; + + return ( tcp3dResult ); + } + + /* EDMA3 - Enable the EVENT triggered channels */ + if ( EDMA3_DRV_SOK != Tcp3d_enableEdmaChannels(tcp3dInst) ) + { + tcp3dResult = TCP3D_DRV_FAIL_EDMA_ENABLE_CHANNEL; + + return ( tcp3dResult ); + } + + /* Initialize the pseudo PaRAM memory */ + Tcp3d_initPseudoParam ( tcp3dInst, + tcp3dInst->maxCodeBlocks, + &drvInitParams->pingConfig, + &drvInitParams->pongConfig); + + /* Prepare the control registers for both P0 and P1 processes */ + Tcp3d_prepControlRegs ( &drvInitParams->ctrlParams, + &modeReg, + &endReg, + &exeRegP0, + &exeRegP1); + + /* + * Soft Reset the TCP3D. + * Insert NOPs b/w the reset calls in HW to work properly. + */ + tcp3dCfgRegs->TCP3_SOFT_RESET = 1; + tcp3dCfgRegs->TCP3_SOFT_RESET = 0; + + /** + * Write to the Control registers with the prepared values to start + * the TCP3D state machine. + */ + tcp3dCfgRegs->TCP3_MODE = modeReg; + tcp3dCfgRegs->TCP3_END = endReg; + tcp3dCfgRegs->TCP3_EXE_P0 = exeRegP0; + if ( tcp3dInst->doubleBuffer != CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE ) + tcp3dCfgRegs->TCP3_EXE_P1 = exeRegP1; + + /* Set Local Variables used in the runtime APIs */ + Tcp3d_setLocalVariables(tcp3dInst); + + /* Disable the interrupts */ + Tcp3d_disableEdmaL2pIntr(tcp3dInst); + Tcp3d_disableEdmaPauseIntr(tcp3dInst); + + /* Clear pending interrupts */ + Tcp3d_clearEdmaL2pIntr(tcp3dInst); + Tcp3d_clearEdmaPauseIntr(tcp3dInst); + + /* Reset the EDMA Channels */ + Tcp3d_resetEdmaChParam (tcp3dInst, + tcp3dInst->maxPingCbCnt, + tcp3dInst->maxPongCbCnt); + + /* Change the state */ + tcp3dInst->state = TCP3D_DRV_STATE_INIT; + + return ( tcp3dResult ); + +} /* end of - Tcp3d_init() function */ + +/** + * @brief TCP3D Driver Deinitialization function. + */ +Tcp3d_Result Tcp3d_deInit ( IN Tcp3d_Instance *inst ) +{ + /* Disable interrupts */ + Tcp3d_disableEdmaL2pIntr(inst); + Tcp3d_disableEdmaPauseIntr(inst); + + /* Clear pending interrupts */ + Tcp3d_clearEdmaL2pIntr(inst); + Tcp3d_clearEdmaPauseIntr(inst); + + return ( TCP3D_DRV_NO_ERR ); +} + +/** + * @brief TCP3D Driver function called to reset the driver at sub-frame + * boundary. This function does the following: + * 1) Set the instance with the passed values - for example number + * of blocks for decoding in this subframe which is needed to + * for checking the boundary and a new status array pointer + * where the status register values for each code block are + * trasferred. + * 2) Initialize all the run-time instance variables to default. + * 3) Initialize the pseudo PaRAM memory with all the defaults + * based on mode. + * 4) Reset the EDMA channels with default values. + */ +Tcp3d_Result Tcp3d_reset ( IN Tcp3d_Instance *tcp3dInst, + IN uint32_t codeBlocks) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + + /* First check for valid statte */ + if ( ( tcp3dInst->pingStop != 1 ) && ( tcp3dInst->pongStop != 1) ) + tcp3dResult = TCP3D_DRV_INVALID_STATE; + + /* Check if the codeblocks value is valid */ + if ( ( codeBlocks > tcp3dInst->maxCodeBlocks ) || ( codeBlocks < 2 ) ) + tcp3dResult = TCP3D_DRV_INVALID_PARAMETER; + + /* Return if any error found */ + if ( tcp3dResult != TCP3D_DRV_NO_ERR ) + return ( tcp3dResult ); + + /* update the maxCodeBlocks and dependent variables, if needed */ + if ( codeBlocks != NULL ) + { + tcp3dInst->maxCodeBlocks = codeBlocks; + tcp3dInst->maxPingCbCnt = (codeBlocks >> 1); + tcp3dInst->maxPongCbCnt = (codeBlocks >> 1); + /* max position index in pseudo Param Buffer */ + tcp3dInst->maxPingCbIdx = ((tcp3dInst->maxPingCbCnt - 1) << 1); + tcp3dInst->maxPongCbIdx = ((tcp3dInst->maxPongCbCnt << 1) - 1); + } + + /* Reset run-time variables */ + Tcp3d_resetRuntimeVariables(tcp3dInst); + + /* Reset the pseudo PaRAM memory */ + Tcp3d_resetPseudoParam(tcp3dInst, tcp3dInst->maxCodeBlocks); + + /* Reset the EDMA Channels */ + Tcp3d_resetEdmaChParam (tcp3dInst, + tcp3dInst->maxPingCbCnt, + tcp3dInst->maxPongCbCnt); + + /* Disable the interrupts */ + Tcp3d_disableEdmaL2pIntr(tcp3dInst); + Tcp3d_disableEdmaPauseIntr(tcp3dInst); + + /* Clear pending interrupts */ + Tcp3d_clearEdmaL2pIntr(tcp3dInst); + Tcp3d_clearEdmaPauseIntr(tcp3dInst); + + /* Change the state */ + tcp3dInst->state = TCP3D_DRV_STATE_INIT; + + return ( tcp3dResult ); +} /* end of - Tcp3d_reset() function */ + +/** + * @brief TCP3D Driver function for enqueuing the code blocks to the input + * list. Here the input list is a pseudo PaRAM list consisting of + * actual PaRAM entries for INCFG, LLR, HD, SD & STS transfers. + */ +Tcp3d_Result Tcp3d_enqueueCodeBlock(IN Tcp3d_Instance *tcp3dInst, + IN uint32_t blockLength, + IN uint32_t *inputConfigPtr, + IN int8_t *llrPtr, + IN uint32_t llrOffset, + IN uint32_t *hdPtr, + IN int8_t *sdPtr, + IN uint32_t sdOffset, + IN uint32_t *statusPtr, + IN uint8_t ntfEventFlag) +{ + EDMA3_DRV_PaRAMRegs *lastOutPrm; + int32_t blockIndex; + int32_t pathFlag; + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + Tcp3d_Result tcp3dResult2 = TCP3D_DRV_NO_ERR; + EDMA3_DRV_PaRAMRegs *prmCfg; + EDMA3_DRV_PaRAMRegs *prmLlr; + EDMA3_DRV_PaRAMRegs *prmHd; + EDMA3_DRV_PaRAMRegs *prmSts; + EDMA3_DRV_PaRAMRegs *prmSd; + EDMA3_DRV_PaRAMRegs *prevLastPrmPtr; + EDMA3_DRV_PaRAMRegs *prmWrap; + uint32_t l2pCh[2]; + uint16_t revtLink[2]; + uint16_t ntfdLink[2]; + uint16_t ntfLink[2]; + uint16_t stsLink[2]; + uint16_t sdLink[2]; + uint32_t wrapLink[2]; + + l2pCh[PING_INDEX] = tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_L2P]; + l2pCh[PONG_INDEX] = tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_L2P]; + revtLink[PING_INDEX] = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_REVT]; + revtLink[PONG_INDEX] = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_REVT]; + ntfdLink[PING_INDEX] = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_NTFD]; + ntfdLink[PONG_INDEX] = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_NTFD]; + ntfLink[PING_INDEX] = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_NTF]; + ntfLink[PONG_INDEX] = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_NTF]; + stsLink[PING_INDEX] = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_STS]; + stsLink[PONG_INDEX] = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_STS]; + sdLink[PING_INDEX] = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_SD]; + sdLink[PONG_INDEX] = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_SD]; + wrapLink[PING_INDEX] = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_WRAP]; + wrapLink[PONG_INDEX] = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_WRAP]; + +#if TWO_PATHS + /* get next available path index */ + pathFlag = tcp3dInst->nextCodeBlockIndex; + if ( pathFlag ) + { + if ( tcp3dInst->pongFreeCnt ) + { + blockIndex = tcp3dInst->nextPongInIdx; + } + else if ( tcp3dInst->pingFreeCnt ) + { + blockIndex = tcp3dInst->nextPingInIdx; + pathFlag = 0; + } + } + else + { + if ( tcp3dInst->pingFreeCnt ) + { + blockIndex = tcp3dInst->nextPingInIdx; + } + else if ( tcp3dInst->pongFreeCnt ) + { + blockIndex = tcp3dInst->nextPongInIdx; + pathFlag = 1; + } + } + + /* update the next path flag */ + if ( pathFlag ) + tcp3dInst->nextCodeBlockIndex = 0; + else + tcp3dInst->nextCodeBlockIndex = 1; + + /* add new block to the list until available capacity */ + if ( tcp3dInst->pingFreeCnt || tcp3dInst->pongFreeCnt ) +#else + /* path flag from the blockIndex value */ + blockIndex = tcp3dInst->nextCodeBlockIndex; + pathFlag = (blockIndex & 1); + + /* add new block to the list until available capacity */ + if ( ( ( pathFlag == 0 ) && tcp3dInst->pingFreeCnt ) || + ( ( pathFlag == 1 ) && tcp3dInst->pongFreeCnt ) ) +#endif + { + /* Update the pointers */ + prmCfg = &tcp3dInst->pseudoParamBufPtr[blockIndex*TCP3D_DRV_LINK_CB]; + prmLlr = prmCfg + LINK_CH_IDX_LLR; + prmHd = prmCfg + LINK_CH_IDX_HD; + prmSts = prmCfg + LINK_CH_IDX_STS; + prmSd = prmCfg + LINK_CH_IDX_SD; + + /** + * Update addresses first + */ + prmCfg->srcAddr = (uint32_t) inputConfigPtr; + prmLlr->srcAddr = (uint32_t) llrPtr; + prmHd->destAddr = (uint32_t) hdPtr; + prmSts->destAddr = (uint32_t) statusPtr; + prmSd->destAddr = (uint32_t) sdPtr; + /** + * Update counts for needed + */ + prmSd->aCnt = blockLength; + if ( ( tcp3dInst->mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE) || + ( tcp3dInst->mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX ) ) + { + prmLlr->aCnt = (blockLength>>1); + prmLlr->srcBIdx = (blockLength>>1); + prmLlr->srcCIdx = llrOffset; + prmHd->aCnt = (blockLength>>3); + prmSd->destBIdx = sdOffset; + } + else + { + prmLlr->aCnt = COMPUTE_KOUT(blockLength); + prmLlr->srcBIdx = llrOffset; + prmHd->aCnt = COMPUTE_HD_BYTE_SIZE(blockLength); + } + + /** + * Link Status & Soft decisions if avaiable. + * NOTE: For wrap-around case, load OPT & LINK fields with reset values + */ + /* load HD OPT reset value */ + prmHd->opt = tcp3dInst->resetHdOpt[pathFlag]; + /* Check if STS is available */ + if ( statusPtr != NULL ) + { + /* update HD link */ + prmHd->linkAddr = stsLink[pathFlag]; + /* load STS OPT reset value */ + prmSts->opt = tcp3dInst->resetStsOpt[pathFlag]; + /* Check if SD is available */ + if ( sdPtr != NULL ) + { + /* load SD OPT reset value */ + prmSd->opt = tcp3dInst->resetSdOpt[pathFlag]; + /* update Status link */ + prmSts->linkAddr = sdLink[pathFlag]; + /* load SD link reset value */ + prmSd->linkAddr = tcp3dInst->resetSdLink[pathFlag]; + /* last param pointer */ + lastOutPrm = prmSd; + } + else + { + /* link reset value */ + prmSts->linkAddr = tcp3dInst->resetStsLink[pathFlag]; + /* last param pointer */ + lastOutPrm = prmSts; + } + } + else if ( sdPtr != NULL ) + { + /* update HD link */ + prmHd->linkAddr = sdLink[pathFlag]; + /* load SD OPT reset value */ + prmSd->opt = tcp3dInst->resetSdOpt[pathFlag]; + /* load SD link reset value */ + prmSd->linkAddr = tcp3dInst->resetSdLink[pathFlag]; + /* last param pointer */ + lastOutPrm = prmSd; + } + else + { + /* load HD link reset value */ + prmHd->linkAddr = tcp3dInst->resetHdLink[pathFlag]; + /* last param pointer */ + lastOutPrm = prmHd; + } + + /* Add the WRAP param at the end of the output PaRAM */ + if ( blockIndex >= (tcp3dInst->maxCodeBlocks-2) ) + { + /* get the pointer for the wrap param for the appropriate path */ + prmWrap = (EDMA3_DRV_PaRAMRegs *) wrapLink[pathFlag]; + /* link with last out param */ + lastOutPrm->linkAddr = 0xFFFF & wrapLink[pathFlag]; + /* change the last param pointer */ + lastOutPrm = prmWrap; + } + + /** + * If Interrupt nofication is requested, change the default link + * to LINK_CH_IDX_NTF for the last PaRAM. + */ + if ( ntfEventFlag ) + { + lastOutPrm->linkAddr = ntfLink[pathFlag]; + } + + /** + * Chain the block to previous one in each path. This is done for blocks + * starting from the second one in each path. + * + * Since the blockIndex is tracking linearly the pseudo param buffer + * and ping & pong lists are used as interleaved lists, chaining is + * done starting from index 2 onwards till max. + */ + if ( blockIndex > 1 ) + { + /* Get the previous last output PaRAM, used in chaining */ + prevLastPrmPtr = tcp3dInst->lastParam[pathFlag]; + + /* Change the TCC to L2P */ + CSL_FINS(prevLastPrmPtr->opt, TPCC_PARAM_OPT_TCC, l2pCh[pathFlag]); + + /** + * If previous block has notification, change the previous param + * link to NTFD, otherwise change to dummy REVT link PaRAM. + */ + if ( tcp3dInst->prevNtfFlag[pathFlag] ) + { + /* Change the LINK to interrupt Notify PaRAM */ + prevLastPrmPtr->linkAddr = ntfdLink[pathFlag]; + } + else + { + /* Change the LINK to dummy REVT PaRAM */ + prevLastPrmPtr->linkAddr = revtLink[pathFlag]; + } + } + + /* Store ntfEventFlag, used in chaining next block */ + tcp3dInst->prevNtfFlag[pathFlag] = ntfEventFlag; + + /* Store the last output PaRAM, used in chaining next block */ + tcp3dInst->lastParam[pathFlag] = lastOutPrm; + + /* Increment the ping/pong load counter */ + if ( pathFlag ) + { + tcp3dInst->pongLoadCnt++; + tcp3dInst->pongFreeCnt--; + tcp3dInst->nextPongInIdx += 2; + } + else + { + tcp3dInst->pingLoadCnt++; + tcp3dInst->pingFreeCnt--; + tcp3dInst->nextPingInIdx += 2; + } + + /* Reset index when reached maximum */ + if ( tcp3dInst->nextPingInIdx > tcp3dInst->maxPingCbIdx ) + { + tcp3dInst->nextPingInIdx = 0; + } + if ( tcp3dInst->nextPongInIdx > tcp3dInst->maxPongCbIdx ) + { + tcp3dInst->nextPongInIdx = 1; + } + +#if !TWO_PATHS + /* Increment the index value until reaching the last block */ + tcp3dInst->nextCodeBlockIndex++; + + /* Reset index when reached maximum */ + if ( tcp3dInst->nextCodeBlockIndex >= tcp3dInst->maxCodeBlocks ) + { + tcp3dInst->nextCodeBlockIndex = 0; + } +#endif + } /* if enqueue possible */ + else + { + tcp3dResult = TCP3D_DRV_INPUT_LIST_FULL; + } /* if enqueue not possible */ + + /* Call Start function as needed */ + if ( ( tcp3dInst->startFlag ) && + ( (tcp3dInst->pingStop) || (tcp3dInst->pongStop) ) ) + { + tcp3dResult2 = Tcp3d_start(tcp3dInst, TCP3D_DRV_START_AUTO); + + /* If start returned an error, generate an error message. */ + if ( TCP3D_DRV_NO_ERR != tcp3dResult2 ) + { + Tcp3d_osalLog("Enqueue: Tcp3d_start function returned error with value : %d\n", tcp3dResult2); + } + } + + return ( tcp3dResult ); +} /* end of - Tcp3d_enqueueCodeBlock() function */ + +/** + * @brief This API could be used for starting the driver to start doing + * EDMA transfers to TCP3 decoder for decoding from the pseudo + * PaRAM list. + * + * This function is executed at the application task thread for + * starting either the PING or PONG path execution. + */ +Tcp3d_Result Tcp3d_start ( INOUT Tcp3d_Instance *inst, + IN uint8_t startMode) +{ + EDMA3_DRV_Result result = EDMA3_DRV_SOK; + EDMA3_DRV_PaRAMRegs *currPrmPtr1, *currPrmPtr2; + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + uint16_t startNeeded = 0; /* 0 - not started, 1 - started */ + int32_t pingOutIdx, pongOutIdx; + + /* Set startFlag if first call to the function is made with AUTO mode */ + if ( ( startMode == TCP3D_DRV_START_AUTO) && ( !inst->startFlag ) ) + { + inst->startFlag = startMode; + } + + /** + * Return immediately, if both stop flags are not set. + * This is possible in two scenarios + * 1) After the init and before calling start with AUTO mode. + * 2) In steady state when both ping and pong decoders are busy. + */ + if ( ( ( inst->pingStop == NULL ) && ( inst->pongStop == NULL ) ) || + ( !inst->startFlag ) ) + { + return ( tcp3dResult ); + } + + /** + * Check startMode parameter to see if start needed + */ + if ( startMode == TCP3D_DRV_START_AUTO ) + { + /** + * Read the source address of L2P Channel PaRAM to get the current + * pseudo PaRAM pointer for PING/PONG paths. Then compare with the start + * pointer to get the out indexes. + */ + currPrmPtr1 = (EDMA3_DRV_PaRAMRegs *) inst->pingPtrL2p->srcAddr; + currPrmPtr2 = (EDMA3_DRV_PaRAMRegs *) inst->pongPtrL2p->srcAddr; + pingOutIdx = GET_CB_IDX(currPrmPtr1 - inst->startPrmPtr); + pongOutIdx = GET_CB_IDX(currPrmPtr2 - inst->startPrmPtr); + + /* Update the counters and indexes using the current out indexes */ + Tcp3d_updateListVariables( inst, pingOutIdx, pongOutIdx ); + + /** + * Start is needed in the following cases. + * - if the current out index is less than next in index + * - if not, in the wrap case when blocks are loaded from beginning + * of the list where out index could be greater than next in index. + * Here check for the load count. + * + * Two LSB bits of the variable startNeeded are used for indicating the + * need to do start. LSB0 is used for PING and LSB1 is used for PONG. + */ + /* PING STOP */ + if ( inst->pingStop ) + { + if ( pingOutIdx < inst->nextPingInIdx ) + { + startNeeded |= 1; + } + else if ( inst->pingLoadCnt > 0 ) + { + startNeeded |= 1; + } + } + + /* PING STOP */ + if ( inst->pongStop ) + { + if ( pongOutIdx < inst->nextPongInIdx ) + { + startNeeded |= 2; + } + else if ( inst->pongLoadCnt > 0 ) + { + startNeeded |= 2; + } + } + } + else if ( ( startMode == TCP3D_DRV_START_PING ) && ( inst->pingStop ) ) + { + startNeeded |= 1; + } + else if ( ( startMode == TCP3D_DRV_START_PONG ) && ( inst->pongStop ) ) + { + startNeeded |= 2; + } + + /* If LSB0 is set, start PING */ + if ( startNeeded & 0x1 ) + { + /** + * Clear the wrap adjust flags, + * when the last block decoding in the ping list is detected. + */ + if (inst->pingLastOutFlag) + { + inst->pingLastOutFlag = 0; + inst->pingWrapCheck = 1; + } + + /* increment counter */ + inst->pingStartCntr++; + /* Clear the stop flag */ + inst->pingStop = 0; + /* Enable L2P channel in the PING path */ + result |= EDMA3_DRV_enableTransfer( inst->edmaHnd, + inst->pingCh[TCP3D_DRV_CH_IDX_L2P], + EDMA3_DRV_TRIG_MODE_MANUAL); + } + + /* If LSB1 is set, start PONG */ + if ( startNeeded & 0x2 ) + { + /** + * Clear the wrap adjust flags, + * when the last block decoding in the pong list is detected. + */ + if (inst->pongLastOutFlag) + { + inst->pongLastOutFlag = 0; + inst->pongWrapCheck = 1; + } + + /* increment counter */ + inst->pongStartCntr++; + /* Clear the stop flag */ + inst->pongStop = 0; + + /* Enable L2P channel in the PONG path */ + result |= EDMA3_DRV_enableTransfer( inst->edmaHnd, + inst->pongCh[TCP3D_DRV_CH_IDX_L2P], + EDMA3_DRV_TRIG_MODE_MANUAL); + } + + /* Update the return status, if any EDMA starts fail */ + if ( result != EDMA3_DRV_SOK ) + { + tcp3dResult = TCP3D_DRV_FAIL_EDMA_ENABLE_CHANNEL; + } + + /* Change the state to RUNNING, if start successful */ + if ( ( startNeeded ) && ( result == EDMA3_DRV_SOK ) ) + { + inst->state = TCP3D_DRV_STATE_RUNNING; + } + + return ( tcp3dResult ); + +} /* end of - Tcp3d_start() function */ + +/** + * @brief This API could be used for querying the TCP3D driver to get + * updates or take appropriate actions. + * + * \note This API is not fully scoped currently and the possible query + * commands and their actions are open as of now. + */ +Tcp3d_Result Tcp3d_status ( IN Tcp3d_Instance *inst, + INOUT Tcp3d_Sts *drvStatus ) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + EDMA3_DRV_PaRAMRegs *currPrmPtr1, *currPrmPtr2; + + /* Check the control command */ + switch ( drvStatus->cmd ) + { + case TCP3D_DRV_GET_STATE : + /* Read state value from driver instance */ + drvStatus->state = inst->state; + break; + + case TCP3D_DRV_GET_MIN_OUT_IDX: + /** + * Get the L2P Channel PaRAM address and then read the source + * address from the PaRAM to get the index to the pseudo PaRAM + * current read pointer. + * + * Compute the minimum index by comparing the current indexes with + * the pseudo PaRAM start pointer. + */ + currPrmPtr1 = (EDMA3_DRV_PaRAMRegs *) inst->pingPtrL2p->srcAddr; + currPrmPtr2 = (EDMA3_DRV_PaRAMRegs *) inst->pongPtrL2p->srcAddr; + drvStatus->prmOutIdx = (MIN(currPrmPtr1, currPrmPtr2) - inst->startPrmPtr)>>2; + break; + + case TCP3D_DRV_GET_PING_OUT_IDX: + /** + * Read the source address of L2P Channel PaRAM to get the current + * pseudo PaRAM pointer for PING path. Then compare with the start + * pointer for the index. + */ + currPrmPtr1 = (EDMA3_DRV_PaRAMRegs *) inst->pingPtrL2p->srcAddr; + drvStatus->prmOutIdx = (currPrmPtr1 - inst->startPrmPtr)>>2; + break; + + case TCP3D_DRV_GET_PONG_OUT_IDX: + /** + * Read the source address of L2P Channel PaRAM to get the current + * pseudo PaRAM pointer for PONG path. Then compare with the start + * pointer for the index. + */ + currPrmPtr2 = (EDMA3_DRV_PaRAMRegs *) inst->pongPtrL2p->srcAddr; + drvStatus->prmOutIdx = (currPrmPtr2 - inst->startPrmPtr)>>2; + break; + + default: + /* If invalid command passed, flag error */ + tcp3dResult = TCP3D_DRV_FAIL; + break; + } + + return (tcp3dResult); + +} /* end of - Tcp3d_status() function */ + +/** + * \brief This API could be used for change or update the TCP3D driver + * instance values which are set during the init time. + * + * Currently, there are few commands supported with some the + * limitation that they are allowed only when the driver is in + * IDLE state. + * + * \note -# This API is not fully scoped currently and the possible + * control commands and their actions are open as of now. + * -# We may need to protect the instance value updations, once + * they are allowed to change in any state. + */ +Tcp3d_Result Tcp3d_control (IN Tcp3d_Instance *inst, + IN Tcp3d_Ctrl *drvCtrl) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + + /* Check the control command */ + switch ( drvCtrl->cmd ) + { + case TCP3D_DRV_SET_L2P_INT : + if ( drvCtrl->intrFlag ) + { + Tcp3d_enableEdmaL2pIntr(inst); + } + else + { + Tcp3d_disableEdmaL2pIntr(inst); + } + break; + case TCP3D_DRV_SET_REVT_INT : + if ( drvCtrl->intrFlag ) + { + Tcp3d_enableEdmaPauseIntr(inst); + } + else + { + Tcp3d_disableEdmaPauseIntr(inst); + } + break; + + case TCP3D_DRV_CLR_REVT_INT : + Tcp3d_clearEdmaPauseIntr(inst); + break; + + case TCP3D_DRV_SET_PING_L2P_INT : + case TCP3D_DRV_SET_PONG_L2P_INT : + case TCP3D_DRV_SET_PING_PAUSE_INT : + case TCP3D_DRV_SET_PONG_PAUSE_INT : + default: + /* If invalid command passed, flag error */ + tcp3dResult = TCP3D_DRV_FAIL; + break; + } + + return (tcp3dResult); + +} /* end of - Tcp3d_control() function */ + +/******************************************************************************* + ******************************************************************************/ +static void Tcp3d_setLocalVariables (IN Tcp3d_Instance *tcp3dInst) +{ + CSL_TpccRegs *tpcc2Regs = (CSL_TpccRegs *) CSL_EDMACC_2_REGS; + EDMA3_DRV_PaRAMRegs *prm; + + /* Set EDMA PaRAM pointers */ + tcp3dInst->startPrmPtr = (EDMA3_DRV_PaRAMRegs *) L2GLBMAP(tcp3dInst->coreId, \ + tcp3dInst->pseudoParamBufPtr); + tcp3dInst->pingPtrL2p = (EDMA3_DRV_PaRAMRegs *) tcp3dInst->pingChParamAddr[TCP3D_DRV_CH_IDX_L2P]; + tcp3dInst->pongPtrL2p = (EDMA3_DRV_PaRAMRegs *) tcp3dInst->pongChParamAddr[TCP3D_DRV_CH_IDX_L2P]; + + /* Store pointers for the end of list (PING starts first in the list)*/ + prm = &tcp3dInst->pseudoParamBufPtr[(tcp3dInst->maxCodeBlocks-2)*TCP3D_DRV_LINK_CB]; + if ( tcp3dInst->maxCodeBlocks % 1 ) + { /* even */ + tcp3dInst->endListParam[PING_INDEX] = prm; + tcp3dInst->endListParam[PONG_INDEX] = prm+TCP3D_DRV_LINK_CB; + } + else + { /* odd */ + tcp3dInst->endListParam[PING_INDEX] = prm+TCP3D_DRV_LINK_CB; + tcp3dInst->endListParam[PONG_INDEX] = prm; + } + + /** + * Set interrupt enable/disable mask for channels using the shadow region + * registers. + */ + /* Get EDMA Controller shadow registers pointer */ + tcp3dInst->tpccShadowRegs = &tpcc2Regs->SHADOW[tcp3dInst->edmaRegionId]; + /* REVT channel mask and registers (for PAUSE interrupt) */ + tcp3dInst->pauseChMaskPing = 1 << (tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT] & 0x1f); + tcp3dInst->pauseChMaskPong = 1 << (tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT] & 0x1f); + if ( tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT] < 32 ) + { + tcp3dInst->intEnClrReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IECR; + tcp3dInst->intEnSetReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IESR; + tcp3dInst->clrIntPendReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_ICR; + tcp3dInst->intPendReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IPR; + } + else + { + tcp3dInst->intEnClrReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IECRH; + tcp3dInst->intEnSetReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IESRH; + tcp3dInst->clrIntPendReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_ICRH; + tcp3dInst->intPendReg[TPCC_REVT_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IPRH; + } + /* L2P channel mask and registers (for L2P interrupt) */ + tcp3dInst->l2pChMaskPing = 1 << (tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_L2P] & 0x1f); + tcp3dInst->l2pChMaskPong = 1 << (tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_L2P] & 0x1f); + if ( tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_L2P] < 32 ) + { + tcp3dInst->intEnClrReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IECR; + tcp3dInst->intEnSetReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IESR; + tcp3dInst->clrIntPendReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_ICR; + tcp3dInst->intPendReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IPR; + } + else + { + tcp3dInst->intEnClrReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IECRH; + tcp3dInst->intEnSetReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IESRH; + tcp3dInst->clrIntPendReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_ICRH; + tcp3dInst->intPendReg[TPCC_L2P_REGS] = (uint32_t *) &tcp3dInst->tpccShadowRegs->TPCC_IPRH; + } + + /* Clear countes */ + tcp3dInst->pingStartCntr = 0; + tcp3dInst->pongStartCntr = 0; + tcp3dInst->pingPauseEnCntr = 0; + tcp3dInst->pingL2pEnCntr = 0; + tcp3dInst->pingIntr = 0; + tcp3dInst->pongIntr = 0; +} + +static void Tcp3d_resetRuntimeVariables (IN Tcp3d_Instance *tcp3dInst) +{ + /* Initialize the driver instace run-time variables */ + tcp3dInst->nextCodeBlockIndex = 0; + tcp3dInst->pingStop = 1; + tcp3dInst->pongStop = 1; + tcp3dInst->startFlag = 0; + tcp3dInst->prevNtfFlag[PING_INDEX] = 0; + tcp3dInst->prevNtfFlag[PONG_INDEX] = 0; + tcp3dInst->pingLoadCnt = 0; + tcp3dInst->pongLoadCnt = 0; + tcp3dInst->prevPingOutIdx = 0; + tcp3dInst->prevPongOutIdx = 1; + tcp3dInst->nextPingInIdx = 0; + tcp3dInst->nextPongInIdx = 1; + tcp3dInst->pingWrapCheck = 1; + tcp3dInst->pongWrapCheck = 1; + tcp3dInst->pingLastOutFlag = 0; + tcp3dInst->pongLastOutFlag = 0; + tcp3dInst->pingFreeCnt = tcp3dInst->maxPingCbCnt; + tcp3dInst->pongFreeCnt = tcp3dInst->maxPongCbCnt; +} + +static void Tcp3d_updateListVariables ( INOUT Tcp3d_Instance *inst, + IN int32_t pingOutIdx, + IN int32_t pongOutIdx ) +{ + int32_t indexDiff1, indexDiff2; + + /** + * Load count adjustment is done following the steps described below. + * + * step1 : get index difference between current and previous indexes + * step2 : convert the index difference to count + * step3 : reduce the load count by index difference. It is possible that + * the diffrence could be negative, which gets corrected after + * step4 is completed. + * step4 : wrap is detected, reduce the load count by maximum one time. + * The wrap detection is done either of the cases. + * 1) when index difference is negative + * 2) the last block decoding is detected + * + * NOTES: + * - At reset/init, checking for wrap is enabled. + * - Once the adjustment is done, checking is disabled until the last + * block decoding is done. + */ + + /* Adjust the loaded count - PING */ + /* step1 */ + indexDiff1 = ( pingOutIdx - inst->prevPingOutIdx ); + /* step2, step3 */ + inst->pingLoadCnt -= (indexDiff1>>1); + /* step4 */ + if ( ( (indexDiff1 < 0) || (inst->pingLastOutFlag) ) && (inst->pingWrapCheck) ) + { + inst->pingLoadCnt -= inst->maxPingCbCnt; + inst->pingWrapCheck = 0; + } + + /* Adjust the loaded count - PING */ + /* step1 */ + indexDiff2 = ( pongOutIdx - inst->prevPongOutIdx ); + /* step2, step3 */ + inst->pongLoadCnt -= (indexDiff2>>1); + /* step4 */ + if ( ( (indexDiff2 < 0) || (inst->pongLastOutFlag) ) && (inst->pongWrapCheck) ) + { + inst->pongLoadCnt -= inst->maxPongCbCnt; + inst->pongWrapCheck = 0; + } + + /* update free counts - can be negative */ + inst->pingFreeCnt = ( inst->maxPingCbCnt - inst->pingLoadCnt ); + inst->pongFreeCnt = ( inst->maxPongCbCnt - inst->pongLoadCnt ); + + /* update previous out index */ + inst->prevPingOutIdx = pingOutIdx; + inst->prevPongOutIdx = pongOutIdx; +} + +/** + * @brief Function to get the physical addresses of all the EDMA3 channels + * used in TCP3D driver. + */ +static EDMA3_DRV_Result Tcp3d_getEdmaChParamAddr(IN Tcp3d_Instance *tcp3dInst) +{ + EDMA3_DRV_Result result = EDMA3_DRV_SOK; + int32_t cnt; + + for ( cnt = 0; cnt < TCP3D_DRV_MAX_CH_PER_PATH; cnt++ ) + { + /* Get PaRAM address for PING physical channel */ + result |= EDMA3_DRV_getPaRAMPhyAddr(tcp3dInst->edmaHnd, + tcp3dInst->pingCh[cnt], + &tcp3dInst->pingChParamAddr[cnt]); + + /* Get PaRAM address for PONG physical channel */ + result |= EDMA3_DRV_getPaRAMPhyAddr(tcp3dInst->edmaHnd, + tcp3dInst->pongCh[cnt], + &tcp3dInst->pongChParamAddr[cnt]); + } + + for ( cnt = 0; cnt < (TCP3D_DRV_MAX_LINK_CH>>1); cnt++ ) + { + /* Get PaRAM address for PING Link channel */ + result |= EDMA3_DRV_getPaRAMPhyAddr(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[cnt], + &tcp3dInst->pingLinkChParamAddr[cnt]); + + /* Get PaRAM address for PONG link channel */ + result |= EDMA3_DRV_getPaRAMPhyAddr(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[cnt], + &tcp3dInst->pongLinkChParamAddr[cnt]); + } + + return ( result ); + +} /* end of - Tcp3d_getEdmaChParamAddr() function */ + +/** + * @brief Enabling the Event triggered EDMA3 channels + */ +static EDMA3_DRV_Result Tcp3d_enableEdmaChannels(Tcp3d_Instance *tcp3dInst) +{ + EDMA3_DRV_Result result = EDMA3_DRV_SOK; + + /* Enable PING channels */ + result |= EDMA3_DRV_enableTransfer( tcp3dInst->edmaHnd, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + EDMA3_DRV_TRIG_MODE_EVENT); + + /* Enable PoNG channels */ + result |= EDMA3_DRV_enableTransfer( tcp3dInst->edmaHnd, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + EDMA3_DRV_TRIG_MODE_EVENT); + + return ( result ); +} /* end of - Tcp3d_enableEdmaChannels() function */ + +/** + * @brief Initialize the EDMA channels PaRAM memory with default values + */ +static EDMA3_DRV_Result Tcp3d_initEdmaChParam (IN Tcp3d_Instance *tcp3dInst) +{ + EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0,0}; + EDMA3_DRV_PaRAMRegs *prm = ¶mSet; + EDMA3_DRV_Result status = EDMA3_DRV_SOK; + CSL_CPINTC_RegsOvly cpintc0Regs = (CSL_CPINTC_RegsOvly) CSL_CIC_0_REGS; + + /* Channel - REVT 0 (dummy PaRAM) */ + /* chain to REVT 0 + link to ping link cfg channel + A-sync + ACNT = 1 + BCNT = 0 + CCNT = 0 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + /* First set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + prm->opt = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_EARLY, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + prm->opt = 0; + /* Enable Final transfer completion chain */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* Program the TCC */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Early Trasfer Completion */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCCMOD_SHIFT); + /* A Sync Transfer Mode */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + /* Src & Dest are in INCR modes */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); +#endif + prm->srcAddr = NULL; + prm->destAddr = NULL; + prm->aCnt = 1; + prm->bCnt = 0; + prm->cCnt = 0; + prm->bCntReload = 0; + prm->srcBIdx = 0; + prm->destBIdx = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_INCFG]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + prm); + + /* Link Channel - set the reload Link PaRAM */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_REVT], + prm); + + /* Copy to use in reset function */ + memcpy(&tcp3dInst->revtPrm[PING_INDEX], prm, sizeof(EDMA3_DRV_PaRAMRegs)); + + /* Channel - REVT 1 (dummy PaRAM) */ + /* chain to REVT 1 + link to ping link cfg channel + A-sync + ACNT = 1 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_INCFG]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + prm); + + /* Link Channel - set the reload Link PaRAM */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_REVT], + prm); + + /* Copy to use in reset */ + memcpy(&tcp3dInst->revtPrm[PONG_INDEX], prm, sizeof(EDMA3_DRV_PaRAMRegs)); + + /* Channel - L2P 0 */ + /* chain to REVT 0 + link to ping link l2p channel + AB-sync + ACNT = 32 + BCNT = 4 + CCNT = pingNumCBs + scrBIDX = 32 + desBIDX = 32 + scrCIDX = 32*4*2 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + prm->opt = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_EN, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_AB, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + prm->opt = 0; + /* Enable Intermediate & Final transfer completion chain */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_ITCCHEN_SHIFT); + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* Program the TCC */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* AB Sync Transfer Mode */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + /* Src & Dest are in INCR modes */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); +#endif + prm->srcAddr = NULL; + prm->destAddr = (uint32_t)(tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_INCFG]); + prm->aCnt = 32; + prm->bCnt = TCP3D_DRV_LINK_CB; + prm->cCnt = NULL; + prm->bCntReload = TCP3D_DRV_LINK_CB; + prm->srcBIdx = 32; + prm->destBIdx = 32; + prm->srcCIdx = (32<<1)*TCP3D_DRV_LINK_CB; + prm->destCIdx = 0; + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_L2P]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_L2P], + prm); + + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_L2P], + prm); + + /* Copy to use in reset function */ + memcpy(&tcp3dInst->l2pPrm[PING_INDEX], prm, sizeof(EDMA3_DRV_PaRAMRegs)); + + /* Channel - L2P 1 */ + /* chain to REVT 1 + link to ping link l2p channel + AB-sync + ACNT = 32 + BCNT = 4 + CCNT = pingNumCBs + scrBIDX = 32 + desBIDX = 32 + scrCIDX = 32*4*2 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + prm->destAddr = (uint32_t)(tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_INCFG]); + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_L2P]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_L2P], + prm); + + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_L2P], + prm); + + /* Copy to use in reset function */ + memcpy(&tcp3dInst->l2pPrm[PONG_INDEX], prm, sizeof(EDMA3_DRV_PaRAMRegs)); + + /* Link Channel - pause 0 */ + /* chain to REVT 0 + link to ping link revt channel + AB-sync + ACNT = 1 + BCNT = 2 + CCNT = 1 + scrBIDX = offset b/w tcp3dInst->pauseState & tcp3dInst->constantOne + scrCIDX = 0 + desBIDX = offet b/w tcp3dInst->state & tcp3dInst->pingStop + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + prm->opt = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_DIS, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_EN, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_AB, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + prm->opt = 0; + /* Enable Intermediate & Final transfer completion interrupt */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCINTEN_SHIFT); + /* Program the TCC */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* AB Sync Transfer Mode */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + /* Src & Dest are in INCR modes */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); +#endif + prm->srcAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->constantOne); + prm->destAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->pingStop); + prm->aCnt = 1; + prm->bCnt = 2; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcBIdx = ((uint8_t *)&tcp3dInst->pauseState - &tcp3dInst->constantOne); + prm->destBIdx = ((uint8_t *)&tcp3dInst->state - &tcp3dInst->pingStop); + prm->srcCIdx = 0; + prm->destCIdx = 0; + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_REVT]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_PAUSE], + prm); + + /* Link Channel - pause 1 */ + /* chain to REVT 1 + link to ping link revt channel + AB-sync + ACNT = 1 + BCNT = 2 + CCNT = 1 + scrBIDX = offset b/w tcp3dInst->pauseState & tcp3dInst->constantOne + scrCIDX = 0 + desBIDX = offet b/w tcp3dInst->state & tcp3dInst->pingStop + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + prm->destAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->pongStop); + prm->destBIdx = ((uint8_t *)&tcp3dInst->state - &tcp3dInst->pongStop); + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_REVT]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_PAUSE], + prm); + + /* Link Channel - INT 0 (notification PaRAM) */ + /* chain to REVT 0 + link to ping link cfg channel + A-sync + ACNT = 4 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + /* First set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + prm->opt = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_EARLY, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + prm->opt = 0; + /* Enable Final transfer completion chain */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* Program the TCC */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Early Trasfer Completion */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCCMOD_SHIFT); + /* A Sync Transfer Mode */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + /* Src & Dest are in INCR modes */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); +#endif + prm->srcAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->notificationEventNum); + prm->destAddr = (uint32_t)(&cpintc0Regs->STATUS_SET_INDEX_REG); + prm->aCnt = 4; + prm->bCnt = 1; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcBIdx = 0; + prm->destBIdx = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + prm->linkAddr = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_PAUSE]; + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_NTF], + prm); + + prm->linkAddr = tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_INCFG]; + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_NTFD], + prm); + + /* Link Channel - INT 1 (notification PaRAM) */ + /* chain to REVT 1 + link to ping link cfg channel + A-sync + ACNT = 4 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + prm->linkAddr = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_PAUSE]; + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_NTF], + prm); + + /* Now, write the PaRAM Set. */ + prm->linkAddr = tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_INCFG]; + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_NTFD], + prm); + + /* Link Channel - Wrap 0 */ + /* chain to REVT 0 + link to ping link l2p channel + A-sync + ACNT = 4 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + scrCIDX = 0 + desBIDX = 0 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + prm->opt = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + prm->opt = 0; + /* Enable Final transfer completion chain */ + prm->opt |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* Program the TCC */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* A Sync Transfer Mode */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + /* Src & Dest are in INCR modes */ + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + prm->opt &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); +#endif + prm->srcAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->maxPingCbCnt); + prm->destAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->pingLastOutFlag); + prm->aCnt = 4; + prm->bCnt = 1; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcBIdx = 0; + prm->destBIdx = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_PAUSE]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_WRAP], + prm); + + /* Link Channel - Wrap 1 */ + /* chain to REVT 1 + link to ping link l2p channel + A-sync + ACNT = 4 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + scrCIDX = 0 + desBIDX = 0 + desCIDX = 0 */ + /* Fill the PaRAM Set with transfer specific information */ + CSL_FINS(prm->opt, TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + prm->srcAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->maxPongCbCnt); + prm->destAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->pongLastOutFlag); + prm->linkAddr = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_PAUSE]); + + /* Now, write the PaRAM Set. */ + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_WRAP], + prm); + + return ( status ); + +} /* end of - Tcp3d_initEdmaChParam() function */ + +/** + * @brief Resets the the EDMA channels PaRAM memory with default values + */ +static EDMA3_DRV_Result Tcp3d_resetEdmaChParam( IN Tcp3d_Instance *tcp3dInst, + IN uint32_t pingNumCBs, + IN uint32_t pongNumCBs) +{ + EDMA3_DRV_Result status = EDMA3_DRV_SOK; + EDMA3_DRV_PaRAMRegs *prm; + + /* L2P 0 */ + prm = &tcp3dInst->l2pPrm[PING_INDEX]; + prm->srcAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->pseudoParamBufPtr[0]); + prm->cCnt = pingNumCBs; + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_L2P], + prm); + + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingLinkCh[LINK_CH_IDX_L2P], + prm); + + /* L2P 1 */ + prm = &tcp3dInst->l2pPrm[PONG_INDEX]; + prm->srcAddr = L2GLBMAP(tcp3dInst->coreId, &tcp3dInst->pseudoParamBufPtr[TCP3D_DRV_LINK_CB]); + prm->cCnt = pongNumCBs; + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_L2P], + prm); + + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongLinkCh[LINK_CH_IDX_L2P], + prm); + + /* REVT 0 */ + prm = &tcp3dInst->revtPrm[PING_INDEX]; + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + prm); + + /* REVT 1 */ + prm = &tcp3dInst->revtPrm[PONG_INDEX]; + status |= EDMA3_DRV_setPaRAM(tcp3dInst->edmaHnd, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + prm); + + return ( status ); + +} /* end of - Tcp3d_resetEdmaChParam() function */ + +/** + * @brief Initialize the Pseudo PaRAM memory with default values + */ +static void Tcp3d_initPseudoParam ( IN Tcp3d_Instance *tcp3dInst, + IN uint32_t codeBlocks, + IN Tcp3d_Config *pingConfig, + IN Tcp3d_Config *pongConfig) +{ + int32_t cnt, flag; + EDMA3_DRV_PaRAMRegs prmSet[TCP3D_DRV_LINK_CB]; + EDMA3_DRV_PaRAMRegs *prm; + uint8_t mode = tcp3dInst->mode; + uint32_t incfgOpt[2]; + uint32_t incfgLink[2]; + uint32_t incfgStartAddress[2]; + uint32_t stsOpt[2]; + uint32_t stsLink[2]; + uint32_t stsStartAddress[2]; + uint32_t hdOpt[2]; + uint32_t hdLink[2]; + uint32_t hdStartAddress[2]; + uint32_t llrOpt[2]; + uint32_t llrLink[2]; + uint32_t llrStartAddress[2]; + uint32_t sdOpt[2]; + uint32_t sdLink[2]; + uint32_t sdStartAddress[2]; + + incfgStartAddress[PING_INDEX] = pingConfig->inCfgStart; + incfgStartAddress[PONG_INDEX] = pongConfig->inCfgStart; + + incfgLink[PING_INDEX] = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_LLR]); + incfgLink[PONG_INDEX] = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_LLR]); + + llrStartAddress[PING_INDEX] = pingConfig->llrStart; + llrStartAddress[PONG_INDEX] = pongConfig->llrStart; + + llrLink[PING_INDEX] = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_HD]); + llrLink[PONG_INDEX] = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_HD]); + + hdStartAddress[PING_INDEX] = pingConfig->hdStart; + hdStartAddress[PONG_INDEX] = pongConfig->hdStart; + + hdLink[PING_INDEX] = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_PAUSE]); + hdLink[PONG_INDEX] = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_PAUSE]); + + stsStartAddress[PING_INDEX] = pingConfig->stsStart; + stsStartAddress[PONG_INDEX] = pongConfig->stsStart; + + stsLink[PING_INDEX] = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_PAUSE]); + stsLink[PONG_INDEX] = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_PAUSE]); + + sdStartAddress[PING_INDEX] = pingConfig->sdStart; + sdStartAddress[PONG_INDEX] = pongConfig->sdStart; + + sdLink[PING_INDEX] = (0xFFFFu) & (tcp3dInst->pingLinkChParamAddr[LINK_CH_IDX_PAUSE]); + sdLink[PONG_INDEX] = (0xFFFFu) & (tcp3dInst->pongLinkChParamAddr[LINK_CH_IDX_PAUSE]); + + /** + * INCFG Ping & Pong - fill all the initial values + */ + /* chain to REVT + link to link llr channel + A-sync + ACNT = 60 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + incfgOpt[PING_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); + + incfgOpt[PONG_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + incfgOpt[PING_INDEX] = 0; + /* Src & Dest are in INCR modes */ + incfgOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + incfgOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(incfgOpt[PING_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Final transfer completion chain */ + incfgOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + incfgOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + + incfgOpt[PONG_INDEX] = 0; + /* Src & Dest are in INCR modes */ + incfgOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + incfgOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(incfgOpt[PONG_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Final transfer completion chain */ + incfgOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* AB Sync Transfer Mode */ + incfgOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); +#endif + prm = &prmSet[LINK_CH_IDX_INCFG]; + prm->srcAddr = NULL; + prm->aCnt = 60; + prm->bCnt = 1; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcBIdx = 0; + prm->destBIdx = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + + /** + * LLR Ping & Pong - fill all the initial values + */ + /* chain to REVT + link to link hd channel + AB-sync + ACNT = NULL (updated during enque operation) + BCNT = NULL (updated during enque operation) + CCNT = NULL (updated during enque operation) + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + llrOpt[PING_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_DIS, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_AB, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); + + llrOpt[PONG_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_DIS, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_AB, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + llrOpt[PING_INDEX] = 0; + /* Src & Dest are in INCR modes */ + llrOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + llrOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(llrOpt[PING_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Intermediate & Final transfer completion chain */ + llrOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_ITCCHEN_SHIFT); + /* AB Sync Transfer Mode */ + llrOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + + llrOpt[PONG_INDEX] = 0; + /* Src & Dest are in INCR modes */ + llrOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + llrOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(llrOpt[PONG_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Intermediate & Final transfer completion chain */ + llrOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_ITCCHEN_SHIFT); + /* AB Sync Transfer Mode */ + llrOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); +#endif + prm = &prmSet[LINK_CH_IDX_LLR]; + prm->srcAddr = NULL; + prm->aCnt = NULL; + prm->bCntReload = 0; + if ( ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE) || + ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX ) ) + { + prm->bCnt = 2; + prm->cCnt = 3; + prm->srcBIdx = NULL; + prm->destBIdx = 0x1000; + prm->srcCIdx = NULL; + prm->destCIdx = 0x2000; + } + else + { + prm->bCnt = 3; + prm->cCnt = 1; + prm->srcBIdx = NULL; + prm->destBIdx = 0x2000; + prm->srcCIdx = 0; + prm->destCIdx = 0; + llrOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_ITCCHEN_SHIFT); + llrOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_ITCCHEN_SHIFT); + } + + /** + * HD Ping & Pong - fill all the initial values + */ + /* chain to REVT + link to link pause channel + A-sync + ACNT = NULL (updated during enque operation) + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + hdOpt[PING_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); + + hdOpt[PONG_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + hdOpt[PING_INDEX] = 0; + /* Src & Dest are in INCR modes */ + hdOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + hdOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(hdOpt[PING_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Intermediate & Final transfer completion chain */ + hdOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + hdOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + + hdOpt[PONG_INDEX] = 0; + /* Src & Dest are in INCR modes */ + hdOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + hdOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(hdOpt[PONG_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Intermediate & Final transfer completion chain */ + hdOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + hdOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); +#endif + prm = &prmSet[LINK_CH_IDX_HD]; + prm->destAddr = NULL; + prm->aCnt = NULL; + prm->bCnt = 1; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcBIdx = 0; + prm->destBIdx = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + + /** + * STS Ping & Pong - fill all the initial values + */ + /* chain to REVT + link to link sd channel + A-sync + ACNT = 12 + BCNT = 1 + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + stsOpt[PING_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); + + stsOpt[PONG_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + stsOpt[PING_INDEX] = 0; + /* Src & Dest are in INCR modes */ + stsOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + stsOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(stsOpt[PING_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Final transfer completion chain */ + stsOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + stsOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + + stsOpt[PONG_INDEX] = 0; + /* Src & Dest are in INCR modes */ + stsOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + stsOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(stsOpt[PONG_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Final transfer completion chain */ + stsOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + stsOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); +#endif + prm = &prmSet[LINK_CH_IDX_STS]; + prm->destAddr = NULL; + prm->aCnt = 12; + prm->bCnt = 1; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcBIdx = 0; + prm->destBIdx = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + + /** + * SD Ping & Pong - fill all the initial values + */ + /* chain to REVT + link to link pause channel + A-sync / AB-sync based on mode + ACNT = NULL (updated during enque operation) + BCNT = 1/3 based on mode + CCNT = 1 + scrBIDX = 0 + desBIDX = 0 + scrCIDX = 0 + desCIDX = 0 */ + /* Set OPT field with appropriate values */ +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE + sdOpt[PING_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); + + sdOpt[PONG_INDEX] = CSL_EDMA3_OPT_MAKE ( CSL_EDMA3_ITCCH_DIS, + CSL_EDMA3_TCCH_EN, + CSL_EDMA3_ITCINT_DIS, + CSL_EDMA3_TCINT_DIS, + tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT], + CSL_EDMA3_TCC_NORMAL, + CSL_EDMA3_FIFOWIDTH_NONE, + CSL_EDMA3_STATIC_DIS, + CSL_EDMA3_SYNC_A, + CSL_EDMA3_ADDRMODE_INCR, + CSL_EDMA3_ADDRMODE_INCR ); +#else + sdOpt[PING_INDEX] = 0; + /* Src & Dest are in INCR modes */ + sdOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + sdOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(sdOpt[PING_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pingCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Intermediate & Final transfer completion chain */ + sdOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + sdOpt[PING_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + + sdOpt[PONG_INDEX] = 0; + /* Src & Dest are in INCR modes */ + sdOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SAM_SHIFT); + sdOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_DAM_SHIFT); + /* Program the TCC */ + CSL_FINS(sdOpt[PONG_INDEX], TPCC_PARAM_OPT_TCC, tcp3dInst->pongCh[TCP3D_DRV_CH_IDX_REVT]); + /* Enable Intermediate & Final transfer completion chain */ + sdOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_TCCHEN_SHIFT); + /* A Sync Transfer Mode */ + sdOpt[PONG_INDEX] &= ~(1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); +#endif + prm = &prmSet[LINK_CH_IDX_SD]; + prm->destAddr = NULL; + prm->aCnt = NULL; + prm->cCnt = 1; + prm->bCntReload = 0; + prm->srcCIdx = 0; + prm->destCIdx = 0; + if ( ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE) || + ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX ) ) + { + prm->bCnt = 3; + prm->srcBIdx = 0x2000; + prm->destBIdx = NULL; + sdOpt[PING_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + sdOpt[PONG_INDEX] |= (1 << CSL_TPCC_PARAM_OPT_SYNCDIM_SHIFT); + } + else + { + prm->bCnt = 1; + prm->srcBIdx = 0; + prm->destBIdx = 0; + } + + for ( cnt = 0; cnt < codeBlocks; cnt++ ) + { + flag = cnt & 1; + + prm = &prmSet[LINK_CH_IDX_INCFG]; + prm->opt = incfgOpt[flag]; + prm->destAddr = incfgStartAddress[flag]; + prm->linkAddr = incfgLink[flag]; + + prm = &prmSet[LINK_CH_IDX_LLR]; + prm->opt = llrOpt[flag]; + prm->destAddr = llrStartAddress[flag]; + prm->linkAddr = llrLink[flag]; + + prm = &prmSet[LINK_CH_IDX_STS]; + prm->opt = stsOpt[flag]; + prm->srcAddr = stsStartAddress[flag]; + prm->linkAddr = stsLink[flag]; + + prm = &prmSet[LINK_CH_IDX_HD]; + prm->opt = hdOpt[flag]; + prm->srcAddr = hdStartAddress[flag]; + prm->linkAddr = hdLink[flag]; + + prm = &prmSet[LINK_CH_IDX_SD]; + prm->opt = sdOpt[flag]; + prm->srcAddr = sdStartAddress[flag]; + prm->linkAddr = sdLink[flag]; + + memcpy(&tcp3dInst->pseudoParamBufPtr[cnt*TCP3D_DRV_LINK_CB], &prmSet[0], 32*TCP3D_DRV_LINK_CB); + + } /* end of - for ( cnt = 0; cnt < codeBlocks; cnt++ ) */ + + /* Store the lastOpt & lastLink values for use in enque function */ + tcp3dInst->resetHdOpt[PING_INDEX] = hdOpt[PING_INDEX]; + tcp3dInst->resetHdOpt[PONG_INDEX] = hdOpt[PONG_INDEX]; + tcp3dInst->resetHdLink[PING_INDEX] = hdLink[PING_INDEX]; + tcp3dInst->resetHdLink[PONG_INDEX] = hdLink[PONG_INDEX]; + + tcp3dInst->resetStsOpt[PING_INDEX] = stsOpt[PING_INDEX]; + tcp3dInst->resetStsOpt[PONG_INDEX] = stsOpt[PONG_INDEX]; + tcp3dInst->resetStsLink[PING_INDEX] = stsLink[PING_INDEX]; + tcp3dInst->resetStsLink[PONG_INDEX] = stsLink[PONG_INDEX]; + + tcp3dInst->resetSdOpt[PING_INDEX] = sdOpt[PING_INDEX]; + tcp3dInst->resetSdOpt[PONG_INDEX] = sdOpt[PONG_INDEX]; + tcp3dInst->resetSdLink[PING_INDEX] = sdLink[PING_INDEX]; + tcp3dInst->resetSdLink[PONG_INDEX] = sdLink[PONG_INDEX]; +} /* end of - Tcp3d_initPseudoParam() function */ + +/** + * @brief Resets Pseudo PaRAM memory with default values + */ +static void Tcp3d_resetPseudoParam (IN Tcp3d_Instance *tcp3dInst, + IN uint32_t codeBlocks) +{ + int32_t cnt; + EDMA3_DRV_PaRAMRegs *prm1 = &tcp3dInst->pseudoParamBufPtr[LINK_CH_IDX_HD]; + EDMA3_DRV_PaRAMRegs *prm2 = &tcp3dInst->pseudoParamBufPtr[LINK_CH_IDX_STS]; + EDMA3_DRV_PaRAMRegs *prm3 = &tcp3dInst->pseudoParamBufPtr[LINK_CH_IDX_SD]; + + for ( cnt = 0; cnt < codeBlocks; cnt++ ) + { + prm1->opt = tcp3dInst->resetHdOpt[cnt & 1]; + prm1->linkAddr = tcp3dInst->resetHdLink[cnt & 1]; + prm2->opt = tcp3dInst->resetStsOpt[cnt & 1]; + prm2->linkAddr = tcp3dInst->resetStsLink[cnt & 1]; + prm3->opt = tcp3dInst->resetSdOpt[cnt & 1]; + prm3->linkAddr = tcp3dInst->resetSdLink[cnt & 1]; + + prm1 +=TCP3D_DRV_LINK_CB; + prm2 +=TCP3D_DRV_LINK_CB; + prm3 +=TCP3D_DRV_LINK_CB; + } /* end of - for ( cnt = 0; cnt < codeBlocks; cnt++ ) */ +} /* end of - Tcp3d_resetPseudoParam() function */ + +/** + * @b Description + * @n + * The function is used to get the version information of the TCP3D Driver. + * + * @retval + * Version Information. + */ +uint32_t Tcp3d_getVersion (void) +{ + return TCP3D_DRV_VERSION_ID; +} + +/** + * @b Description + * @n + * The function is used to get the version string for the TCP3D Driver. + * + * @retval + * Version String. + */ +const char* Tcp3d_getVersionStr (void) +{ + return Tcp3dDrvVersionStr; +} + +/* end of file */ diff --git a/src/tcp3d_drv_priv.h b/src/tcp3d_drv_priv.h new file mode 100644 index 0000000..3317834 --- /dev/null +++ b/src/tcp3d_drv_priv.h @@ -0,0 +1,141 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_DRV_PRIV_H_ +#define _TCP3D_DRV_PRIV_H_ + +/** + * Local Compile Flags + */ +#define TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE 0 + +/** + * Local includes + */ +#include +#include + +#include +#include +#include + +#if TCP3D_DRV_USE_CSL_EDMA3_OPT_MAKE +#include +#else +#include +#endif + +/** + * Local Defines + */ +#define LINK_CH_IDX_INCFG 0 +#define LINK_CH_IDX_LLR 1 +#define LINK_CH_IDX_HD 2 +#define LINK_CH_IDX_STS 3 +#define LINK_CH_IDX_SD 4 + +#define LINK_CH_IDX_LAST LINK_CH_IDX_SD + +#define LINK_CH_IDX_PAUSE (LINK_CH_IDX_LAST + 1) +#define LINK_CH_IDX_REVT (LINK_CH_IDX_LAST + 2) +#define LINK_CH_IDX_L2P (LINK_CH_IDX_LAST + 3) +#define LINK_CH_IDX_NTF (LINK_CH_IDX_LAST + 4) +#define LINK_CH_IDX_NTFD (LINK_CH_IDX_LAST + 5) +#define LINK_CH_IDX_WRAP (LINK_CH_IDX_LAST + 6) + +#define ONE_OVER_LINK_CB_Q15 (32768/TCP3D_DRV_LINK_CB) + +/** + * Local Macros + */ +/** + * @brief Macro for getting the global map for L2 memory addresses + */ +#define L2GLBMAP(coreID, addr) \ + ( ( ((uint32_t)(addr) >= 0x00800000) && ((uint32_t)(addr) < 0x00900000) ) ? \ + ( (uint32_t)(addr) | (uint32_t)((0x10 | (coreID & 0x3)) << 24) ) : \ + (uint32_t)(addr) ) + +/** + * @brief Macro for getting the code block index using division by TCP3D_DRV_LINK_CB + */ +#define GET_CB_IDX(input) ((_smpy((input), ONE_OVER_LINK_CB_Q15) + 32768)>>16) + +/** + * Local Structures + */ +/** + * @brief Structure for keeping the local variables + */ +typedef struct Tcp3d_Internal +{ + uint8_t constantOne;/**< variable set to 1 at init time and + used by PAUSE channels */ + Tcp3d_State pauseState; /**< variable set to TCP3D_DRV_STATE_PAUSE + and used by PAUSE channels */ + uint32_t lastOpt[2]; + uint32_t lastLink[2]; + EDMA3_DRV_PaRAMRegs *startPrmPtr; + EDMA3_DRV_PaRAMRegs *pingPtrL2p; + EDMA3_DRV_PaRAMRegs *pongPtrL2p; + uint8_t pingVar[2]; + uint8_t pongVar[2]; + EDMA3_DRV_PaRAMRegs revtPrm[2]; +} Tcp3d_Internal; + +/** + * Local Functions + */ +static EDMA3_DRV_Result Tcp3d_getEdmaChParamAddr (IN Tcp3d_Instance *tcp3dInst); +static EDMA3_DRV_Result Tcp3d_enableEdmaChannels (IN Tcp3d_Instance *tcp3dInst); +static EDMA3_DRV_Result Tcp3d_initEdmaChParam (IN Tcp3d_Instance *tcp3dInst); +static EDMA3_DRV_Result Tcp3d_resetEdmaChParam (IN Tcp3d_Instance *tcp3dInst, + IN uint32_t pingNumCBs, + IN uint32_t pongNumCBs); +static void Tcp3d_initPseudoParam ( IN Tcp3d_Instance *tcp3dInst, + IN uint32_t codeBlocks, + IN Tcp3d_Config *pingConfig, + IN Tcp3d_Config *pongConfig); +static void Tcp3d_resetPseudoParam (IN Tcp3d_Instance *tcp3dInst, + IN uint32_t codeBlocks); +static void Tcp3d_setLocalVariables (IN Tcp3d_Instance *tcp3dInst); +static void Tcp3d_resetRuntimeVariables (IN Tcp3d_Instance *tcp3dInst); +static void Tcp3d_updateListVariables ( INOUT Tcp3d_Instance *inst, + IN int32_t pingOutIdx, + IN int32_t pongOutIdx ); + +#endif /* _TCP3D_DRV_PRIV_H_ */ diff --git a/src/tcp3d_isr.c b/src/tcp3d_isr.c new file mode 100644 index 0000000..9d8bd6d --- /dev/null +++ b/src/tcp3d_isr.c @@ -0,0 +1,127 @@ +/** + * \file tcp3d_isr.c + * + * \brief TCP3D Driver ISR functions. + * + * Copyright (C) Texas Instruments Incorporated 2012 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** + * Include Files + */ +/* TCP3D driver includes */ +#include +#include + +/* TCP3D Types and OSAL defintions: These files can be overriden by customers + * to point to their copies. Because of this the files have not been explicitly + * specified to include the driver path.*/ +#include +#include + +/**************************************************************************** + * TCP3D Driver Functions * + ****************************************************************************/ + +/** + * @brief TCP3D Driver ISR function for the channels associated with REVT0. + */ +static void Tcp3d_revt0ChannelIsr (Tcp3d_Instance *inst) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + uint32_t utmpIdx; + uint32_t pingOutIdx; + EDMA3_DRV_PaRAMRegs *currPrmPtr1; + + utmpIdx = inst->maxCodeBlocks; + + /* Increment the ISR counter */ + inst->pingIntr++; + + /* Check to see if restart needed before exit */ + /** + * Read the source address of L2P Channel PaRAM to get the current + * pseudo PaRAM pointer for PING path. Then compare with the start + * pointer for the index. + */ + currPrmPtr1 = (EDMA3_DRV_PaRAMRegs *) inst->pingPtrL2p->srcAddr; + pingOutIdx = GET_CB_IDX(currPrmPtr1 - inst->startPrmPtr); + + /* Check if PING path completed decoding */ + if ( pingOutIdx < utmpIdx ) + { + tcp3dResult = Tcp3d_start(inst, TCP3D_DRV_START_AUTO); + + if ( TCP3D_DRV_NO_ERR != tcp3dResult ) + { + Tcp3d_osalLog("REVT0 ISR: Tcp3d_start function returned error with value : %d\n", tcp3dResult); + } + } +} + +/** + * @brief TCP3D Driver ISR function for the channels associated with REVT1. + */ +static void Tcp3d_revt1ChannelIsr (Tcp3d_Instance *inst) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + uint32_t utmpIdx; + uint32_t pongOutIdx; + EDMA3_DRV_PaRAMRegs *currPrmPtr1; + + utmpIdx = inst->maxCodeBlocks; + + /* Increment the ISR counter */ + inst->pongIntr++; + + /* Check to see if restart needed before exit */ + /** + * Read the source address of L2P Channel PaRAM to get the current + * pseudo PaRAM pointer for PONG path. Then compare with the start + * pointer for the index. + */ + currPrmPtr1 = (EDMA3_DRV_PaRAMRegs *) inst->pongPtrL2p->srcAddr; + pongOutIdx = GET_CB_IDX(currPrmPtr1 - inst->startPrmPtr); + + /* Check if PING path completed decoding */ + if ( pongOutIdx < utmpIdx ) + { + tcp3dResult = Tcp3d_start(inst, TCP3D_DRV_START_AUTO); + + if ( TCP3D_DRV_NO_ERR != tcp3dResult ) + { + Tcp3d_osalLog("REVT1 ISR: Tcp3d_start function returned error with value : %d\n", tcp3dResult); + } + } +} + +/* end of file */ diff --git a/src/tcp3d_reg.c b/src/tcp3d_reg.c new file mode 100644 index 0000000..322a9de --- /dev/null +++ b/src/tcp3d_reg.c @@ -0,0 +1,349 @@ +/** + * \file tcp3d_reg.c + * + * \brief TCP3D Driver functions for TCP3D register preparation functions. + * + * Copyright (C) Texas Instruments Incorporated 2009 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** + * Include Files + */ +#include + +/** + * \brief TCP3D Driver function for preparing the common control registers + * from the input structure parameters using the CSL_FINS macro. + * + * The outputs could be used to write into the actual TCP3 decoder + * memory registers directly or DMAed to bring the TCP3 decoder + * state machine to WAIT for inputs state. + * + */ +void Tcp3d_prepControlRegs( IN Tcp3d_CtrlParams *ctrl, + OUT uint32_t *modeReg, + OUT uint32_t *endReg, + OUT uint32_t *exeRegP0, + OUT uint32_t *exeRegP1) +{ + /* Set MODE register parameters */ + CSL_FINS (*modeReg, TCP3D_CFG_TCP3_MODE_MODE_SEL, ctrl->mode); + CSL_FINS (*modeReg, TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN, ctrl->doubleBuf); + CSL_FINS (*modeReg, TCP3D_CFG_TCP3_MODE_ITG_EN, ctrl->intTable); + CSL_FINS (*modeReg, TCP3D_CFG_TCP3_MODE_ERROR_IGNORE_EN, ctrl->errIgnore); + CSL_FINS (*modeReg, TCP3D_CFG_TCP3_MODE_AUTO_TRIG_EN, ctrl->autoTrig); + CSL_FINS (*modeReg, TCP3D_CFG_TCP3_MODE_LTE_CRC_ISEL, ctrl->lteCrcSel); + + /* Set ENDIAN register parameters */ + CSL_FINS (*endReg, TCP3D_CFG_TCP3_END_ENDIAN_INTR, ctrl->endInt); + CSL_FINS (*endReg, TCP3D_CFG_TCP3_END_ENDIAN_INDATA, ctrl->endInData); + + /* Set EXECUTE P0 register parameters */ + CSL_FINS (*exeRegP0, TCP3D_CFG_TCP3_EXE_P0_EXE_CMD, ctrl->exeP0cmd); + + /* Set EXECUTE P1 register parameters */ + CSL_FINS (*exeRegP1, TCP3D_CFG_TCP3_EXE_P1_EXE_CMD, ctrl->exeP1cmd); + +} /* end of Tcp3d_prepControlRegs() */ + +/** + * \brief This is a utility function provided as part of TCP3D Driver for + * preparing a fixed set of input config registers that would be + * fixed for a typical configuration and will not vary from + * code block to code block. + * + * This function is used for preparing IC2, IC3, IC8-IC11 registers + * only out of 15 registers (IC0-IC14) using CSL_FINS macro. + * + * The output outICRegs could be used as template IC registers + * array when preparing the input config registers for code blocks. + * + */ +void Tcp3d_prepFixedConfigRegs(IN Tcp3d_InCfgParams * const RESTRICT param, + OUT uint32_t * const RESTRICT outICRegs) +{ + uint32_t *reg; + + /* Prepare input config register 2 */ + reg = &outICRegs[2]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_INTER_LOAD_SEL, param->intLoadSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_MAXST_EN, param->maxStar); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_OUT_FLAG_EN, param->outStsRead); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_OUT_ORDER_SEL, param->outOrderSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_EXT_SCALE_EN, param->extScale); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_FLAG_EN, param->softOutRead); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_ORDER_SEL, param->softOutOrderSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_FMT, param->softOutFrmtSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_MIN_ITR, param->minIter); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_MAX_ITR, param->maxIter); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_SNR_VAL, param->snrVal); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_SNR_REP, param->snrReport); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_STOP_SEL, param->stopSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_CRC_ITER_PASS, param->crcIterSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG2_P0_CRC_SEL, param->crcPolySel); + + /* Prepare input config register 3 */ + reg = &outICRegs[3]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG3_P0_MAXST_THOLD, param->maxStarThres); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG3_P0_MAXST_VALUE, param->maxStarValue); + + /* Prepare input config register 8 */ + reg = &outICRegs[8]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG8_P0_EXT_SCALE_0, param->extrScale[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG8_P0_EXT_SCALE_1, param->extrScale[1]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG8_P0_EXT_SCALE_2, param->extrScale[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG8_P0_EXT_SCALE_3, param->extrScale[3]); + + /* Prepare input config register 9 */ + reg = &outICRegs[9]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG9_P0_EXT_SCALE_4, param->extrScale[4]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG9_P0_EXT_SCALE_5, param->extrScale[5]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG9_P0_EXT_SCALE_6, param->extrScale[6]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG9_P0_EXT_SCALE_7, param->extrScale[7]); + + /* Prepare input config register 10 */ + reg = &outICRegs[10]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG10_P0_EXT_SCALE_8, param->extrScale[8]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG10_P0_EXT_SCALE_9, param->extrScale[9]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG10_P0_EXT_SCALE_10, param->extrScale[10]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG10_P0_EXT_SCALE_11, param->extrScale[11]); + + /* Prepare input config register 11 */ + reg = &outICRegs[11]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG11_P0_EXT_SCALE_12, param->extrScale[12]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG11_P0_EXT_SCALE_13, param->extrScale[13]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG11_P0_EXT_SCALE_14, param->extrScale[14]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG11_P0_EXT_SCALE_15, param->extrScale[15]); + +} /* end of Tcp3d_prepFixedConfigRegs() */ + +/** + * \brief This is a utility function provided as part of TCP3D Driver for + * preparing the input config registers that will be used for + * sending to TCP3 decoder IP memory before sending the LLR data. + * + * This function is used for preparing all the 15 input config + * registers (IC0-IC14) using CSL_FINS macro. + * + */ +void Tcp3d_prepConfigRegs( IN uint8_t mode, + IN Tcp3d_InCfgParams* const RESTRICT param, + OUT uint32_t * const RESTRICT outICRegs, + IN uint32_t * const RESTRICT tempICRegs, + IN uint8_t copyFixedReg) +{ + uint32_t *reg; + + /* Prepare input config register 0 */ + reg = &outICRegs[0]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG0_P0_NUM_SW0, param->numsw0); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG0_P0_BLK_LN, param->blockLen); + + /* Prepare input config register 1 */ + reg = &outICRegs[1]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG1_P0_SW0_LN_SEL, param->sw0LenSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG1_P0_SW2_LN_SEL, param->sw2LenSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG1_P0_SW1_LN, param->sw1Len); + + /* Prepare input config register - 2,3,8-11 */ + if (copyFixedReg) + { + /* Copy fixed registers from template IC */ + outICRegs[2] = tempICRegs[2]; + outICRegs[3] = tempICRegs[3]; + outICRegs[8] = tempICRegs[8]; + outICRegs[9] = tempICRegs[9]; + outICRegs[10] = tempICRegs[10]; + outICRegs[11] = tempICRegs[11]; + } + else + { + /* Prepare fixed registers from inCfgParams */ + Tcp3d_prepFixedConfigRegs ( param, outICRegs ); + } + + /* Prepare input config register 4 */ + reg = &outICRegs[4]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST0_MAP0, param->betaMap0[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST1_MAP0, param->betaMap0[1]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST2_MAP0, param->betaMap0[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST3_MAP0, param->betaMap0[3]); + + /* Prepare input config register 5 */ + reg = &outICRegs[5]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST4_MAP0, param->betaMap0[4]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST5_MAP0, param->betaMap0[5]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST6_MAP0, param->betaMap0[6]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST7_MAP0, param->betaMap0[7]); + + /* Prepare input config register 6 */ + reg = &outICRegs[6]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST0_MAP1, param->betaMap1[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST1_MAP1, param->betaMap1[1]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST2_MAP1, param->betaMap1[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST3_MAP1, param->betaMap1[3]); + + /* Prepare input config register 7 */ + reg = &outICRegs[7]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST4_MAP1, param->betaMap1[4]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST5_MAP1, param->betaMap1[5]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST6_MAP1, param->betaMap1[6]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST7_MAP1, param->betaMap1[7]); + + /* LTE or WIMAX */ + if ( ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE ) || + ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX ) ) + { + /* Prepare input config register 12 */ + reg = &outICRegs[12]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG12_P0_ITG_PARAM0, param->itgParam[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG12_P0_ITG_PARAM1, param->itgParam[1]); + + /* Prepare input config register 13 */ + reg = &outICRegs[13]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG13_P0_ITG_PARAM2, param->itgParam[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG13_P0_ITG_PARAM3, param->itgParam[3]); + + /* Prepare input config register 14 */ + reg = &outICRegs[14]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG14_P0_ITG_PARAM4, param->itgParam[4]); + } + else + { + /* ITG Params are not required for 3GPP */ + outICRegs[12] = 0; + outICRegs[13] = 0; + outICRegs[14] = 0; + } + +} /* end of Tcp3d_prepConfigRegs() */ + +/** + * \brief This is a utility function is provided as part of TCP3D Driver + * for preparing the specific input config registers which depend + * on the block size. + * + * This function can be used for preparing IC0, IC1, IC12-IC14 + * registers only out of 15 registers (IC0-IC14) using + * CSL_FINS macro. + * + */ +void Tcp3d_prepBlockSizeDepConfigRegs ( IN uint8_t mode, + OUT uint32_t * const RESTRICT outICRegs, + IN uint8_t numsw0, + IN uint16_t blockLen, + IN uint8_t sw0LenSel, + IN uint8_t sw2LenSel, + IN uint8_t sw1Len, + IN uint16_t * const RESTRICT itgParam) +{ + uint32_t *reg; + + /* Prepare input config register 0 */ + reg = &outICRegs[0]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG0_P0_NUM_SW0, numsw0); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG0_P0_BLK_LN, blockLen); + + /* Prepare input config register 1 */ + reg = &outICRegs[1]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG1_P0_SW0_LN_SEL, sw0LenSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG1_P0_SW2_LN_SEL, sw2LenSel); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG1_P0_SW1_LN, sw1Len); + + /* LTE or WIMAX */ + if ( ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE ) || + ( mode == CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX ) ) + { + /* Prepare input config register 12 */ + reg = &outICRegs[12]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG12_P0_ITG_PARAM0, itgParam[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG12_P0_ITG_PARAM1, itgParam[1]); + + /* Prepare input config register 13 */ + reg = &outICRegs[13]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG13_P0_ITG_PARAM2, itgParam[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG13_P0_ITG_PARAM3, itgParam[3]); + + /* Prepare input config register 14 */ + reg = &outICRegs[14]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG14_P0_ITG_PARAM4, itgParam[4]); + } + +} /* end of Tcp3d_prepBlockSizeDepConfigRegs() */ + +/** + * \brief This is a utility function is provided as part of TCP3D Driver + * for preparing the beta state value dependent input config + * registers only. + * + * This function can be used for preparing IC4-IC7 registers only + * out of 15 registers (IC0-IC14) using CSL_FINS macro. + * + */ +void Tcp3d_prepBetaStateConfigRegs( IN uint8_t mode, + OUT uint32_t * const RESTRICT outICRegs, + IN int8_t * const RESTRICT betaMap0, + IN int8_t * const RESTRICT betaMap1) +{ + uint32_t *reg; + + /* Prepare input config register 4 */ + reg = &outICRegs[4]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST0_MAP0, betaMap0[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST1_MAP0, betaMap0[1]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST2_MAP0, betaMap0[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG4_P0_BETA_ST3_MAP0, betaMap0[3]); + + /* Prepare input config register 5 */ + reg = &outICRegs[5]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST4_MAP0, betaMap0[4]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST5_MAP0, betaMap0[5]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST6_MAP0, betaMap0[6]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG5_P0_BETA_ST7_MAP0, betaMap0[7]); + + /* Prepare input config register 6 */ + reg = &outICRegs[6]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST0_MAP1, betaMap1[0]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST1_MAP1, betaMap1[1]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST2_MAP1, betaMap1[2]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG6_P0_BETA_ST3_MAP1, betaMap1[3]); + + /* Prepare input config register 7 */ + reg = &outICRegs[7]; + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST4_MAP1, betaMap1[4]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST5_MAP1, betaMap1[5]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST6_MAP1, betaMap1[6]); + CSL_FINS (*reg, TCP3D_DMA_TCP3D_IC_CFG7_P0_BETA_ST7_MAP1, betaMap1[7]); + +} /* end of Tcp3d_prepBetaStateConfigRegs() */ + +/* end of file */ diff --git a/src/tcp3d_utils.c b/src/tcp3d_utils.c new file mode 100644 index 0000000..bbb349a --- /dev/null +++ b/src/tcp3d_utils.c @@ -0,0 +1,105 @@ +/** + * \file tcp3d_utils.c + * + * \brief TCP3D Driver utility functions. + * + * Copyright (C) Texas Instruments Incorporated 2009 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** + * Include Files + */ +/* c99 types includes */ +#include +#include + +/** + * @brief This is a utility function provided as part of TCP3D Driver for + * converting the local address to the global address using the + * coreID. + * The address mapping will be done only if the address falls in + * the defined local L2 memory area. Otherwise, the address is + * returned as is. + */ +uint32_t Tcp3d_glbMap (uint8_t coreID, uint32_t addr) +{ + uint32_t upcastAddr = 0; + + /* + * Address mapping is done based on the mapping shown below. + * + * L2SRAM : org = 0x00800000, len = 0x100000 (local) + * GEM0_L2_MEM : org = 0x10800000, len = 0x100000 (global) + * GEM1_L2_MEM : org = 0x11800000, len = 0x100000 (global) + * GEM2_L2_MEM : org = 0x12800000, len = 0x100000 (global) + * GEM3_L2_MEM : org = 0x13800000, len = 0x100000 (global) + * + * MSMCSRAM : org = 0x0c000000, len = 0x200000 (global) + */ + + /* Check if the address is in L2SRAM & a valid coreID */ + if ( ( addr >= 0x00800000 ) && ( addr < 0x00900000 ) ) + { + upcastAddr = (uint32_t)( (0x10 | ( coreID & 0x3 )) << 24 ); + } + + return ( addr | upcastAddr ); +} + +/* Division of (a/b) */ +uint32_t Tcp3d_div32by16(uint32_t num, uint16_t den) +{ + int32_t expn; + uint32_t normal; + uint32_t a, b; + int32_t i; + int32_t ret; + + normal = _norm( den ); + a = ( den << normal ) & 0x7fff0000; + b = 0x80000000; /* dividend = 1 */ + + #ifdef _TMS320C6X + #pragma MUST_ITERATE( 15,15 ); + #endif + for(i = 15; i > 0; i--) + { + b = _subc( b, a ); /* divide */ + } + b = b & 0x7fff; + expn = 30 - (int32_t) normal; + ret = _sshvr( _mpylir( b,num), expn ); + + return (ret); +} + +/* end of file */ diff --git a/src/tcp3d_utils.h b/src/tcp3d_utils.h new file mode 100644 index 0000000..28219f0 --- /dev/null +++ b/src/tcp3d_utils.h @@ -0,0 +1,145 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_UTILS_H_ +#define _TCP3D_UTILS_H_ + +/* c99 types includes */ +#include +#include + +/* ========================================================================= */ +/** + * @brief Macro for providing the address with the alignment requested + */ +#define ALIGN(Addr, Algnmt) ((Addr+(Algnmt)-1)&(0xFFFF-(Algnmt)+1)) + +/** + * @brief Macro for computing minimum of the two values + */ +#define MIN(x,y) ((x) < (y) ? (x):(y)) + +/** + * @brief Macro for computing maximum of the two values + */ +#define MAX(x,y) ((x) > (y) ? (x):(y)) + +/** + * @brief Macro for computing hard decisions size in words + */ +#define COMPUTE_HD_WORD_SIZE(x) (((x)+31)>>5) + +/** + * @brief Macro for computing hard decisions size in bytes + */ +#define COMPUTE_HD_BYTE_SIZE(x) (COMPUTE_HD_WORD_SIZE(x)*4) + +/** + * @brief Macro for computing Kext value for WCDMA using the formula + * Kext=4*Ceil(K/4) + */ +#define COMPUTE_KEXT(a) (4*((a+3)>>2)) + +/** + * @brief Macro for computing Kout value for WCDMA using the formula + * Kout = (2*KEXT-K). + * @ref COMPUTE_KEXT macro + */ +#define COMPUTE_KOUT(x) ((2*COMPUTE_KEXT(x))-(x)) + +/** + * @brief Macro for computing Kt value for WCDMA using the formula + * Kt = 3 - (Kext-K) + * @ref COMPUTE_KOUT macro + */ +#define COMPUTE_KT(x) (3 -(COMPUTE_KEXT(x)-(x))) + +/* ========================================================================= */ + +/* ========================================================================= */ +/** + * \fn uint32_t Tcp3d_glbMap (uint8_t coreID, uint32_t addr) + * + * \brief This is a utility function provided as part of TCP3D Driver for + * converting the local address to the global address using the + * coreID. + * The address mapping will be done only if the address falls in + * the defined local L2 memory area. Otherwise, the address is + * returned as is. + * + * \param[in] coreID + * Core ID value corresponding to the local core. If the coreID + * value is invalid, the address translation is not done. + * + * \param[in] addr + * Local address for which the global mapped address is required. + * + * \pre Pass the coreID value [0-3] depending on where test application + * is running. + * + * \post None + * + * \return Returns the global address value of the passed local address. + * + */ +uint32_t Tcp3d_glbMap (uint8_t coreID, uint32_t addr); + +/** + * \fn uint32_t Tcp3d_div32by16(uint32_t num, uint16_t den) + * + * \brief This is a utility function provided as part of TCP3D Driver for + * calculating the division of a 32-bit value by a 16-bit value. + * + * \param[in] num + * Numerator value. + * + * \param[in] den + * Denominator value. + * + * \pre Pass the coreID value [0-3] depending on where test application + * is running. + * + * \post None + * + * \return Returns the global address value of the passed local address. + * + */ +uint32_t Tcp3d_div32by16(uint32_t num, uint16_t den); + +/* ========================================================================= */ + +#endif /* _TCP3D_UTILS_H_ */ diff --git a/tcp3d_drv.h b/tcp3d_drv.h new file mode 100644 index 0000000..419abe8 --- /dev/null +++ b/tcp3d_drv.h @@ -0,0 +1,1523 @@ +/** + * @file tcp3d_drv.h + * + * @brief + * Header file for the TCP3 Decoder Driver. The file exposes the data + * structures and exported API which are available for use by the driver + * users. + * + * \par + * NOTE: + * (C) Copyright 2011 Texas Instruments, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** @defgroup TCP3D_DRV_API TCP3 Decoder Driver + * + * @section Introduction + * + * @subsection xxx Overview + * The TCP3 decoder driver provides a well defined standard interface + * which allows application developers to send code blocks for decoding and + * receive hard decision and status via EDMA3 transfers. + */ + +#ifndef _TCP3D_DRV_H_ +#define _TCP3D_DRV_H_ + +/** +@defgroup TCP3D_DRV_SYMBOL TCP3D Driver Symbols Defined +@ingroup TCP3D_DRV_API +*/ +/** +@defgroup TCP3D_DRV_FUNCTION TCP3D Driver Functions +@ingroup TCP3D_DRV_API +*/ +/** +@defgroup TCP3D_DRV_UTIL_FUNCTION TCP3D Driver Utility Functions +@ingroup TCP3D_DRV_API +*/ +/** +@defgroup TCP3D_DRV_DATASTRUCT TCP3D Driver Data Structures +@ingroup TCP3D_DRV_API +*/ +/** +@defgroup TCP3D_OSAL_API TCP3D Driver OSAL Functions +@ingroup TCP3D_DRV_API +*/ + +/** + * Driver Includes + */ +/* Types include */ +#include + +/* EDMA3 LLD Driver include */ +#include + +/* CSL includes */ +#include +#include +#include + +/* Version include */ +#include "tcp3dver.h" + +/* ========================================================================= */ +/** @addtogroup TCP3D_DRV_SYMBOL + @{ */ + +/** + * @brief Used for indexing the Status Channel. + */ +#define TCP3D_DRV_MAX_NUM_INSTANCES (CSL_TCP3D_PER_CNT) + +/** + * @brief This is the TCP3D Driver maximum channels required per each PING + * and PONG paths. Channel Index values are defined to get references + * to the pingCh[] or pongCh[] arrays in the driver instance. + */ +#define TCP3D_DRV_MAX_CH_PER_PATH (2u) + +/** + * @brief Used for indexing the Status Channel. + */ +#define TCP3D_DRV_CH_IDX_REVT (0u) + +/** + * @brief Used for indexing the L2 to PaRAM Channel. + */ +#define TCP3D_DRV_CH_IDX_L2P (1u) + +/** + * @brief Maximum Link channels required per code block for swapping from + * pseudo PaRAM memory during run-time. + */ +#define TCP3D_DRV_LINK_CB (5u) + +/** + * @brief Number of Link channels used for control/reload operations. + */ +#define TCP3D_DRV_LINK_CTRL (4u) + +/** + * @brief Number of Link channels used for notification use. + */ +#define TCP3D_DRV_LINK_NOTIFY (2u) + +/** + * @brief This is the TCP3D Driver maximum link channels required for both + * PING and PONG paths. + */ +#define TCP3D_DRV_MAX_LINK_CH (((TCP3D_DRV_LINK_CB) + \ + (TCP3D_DRV_LINK_CTRL) + \ + (TCP3D_DRV_LINK_NOTIFY)) << 1) + +/** + * @brief This define gives the number of buffers required for TCP3D Driver. + */ +#define TCP3D_DRV_NUM_BUF (2u) + +/** + * @brief This is used for getting the instance buffer index. + */ +#define TCP3D_DRV_INST_BUFN (0u) + +/** + * @brief This is used for getting the pseudo param buffer index. + */ +#define TCP3D_DRV_PSEUDO_PARAM_BUFN (1u) + +/** + * @brief This is the start flag for PING. + */ +#define TCP3D_DRV_START_PING (1u) + +/** + * @brief This is the start flag for PONG. + */ +#define TCP3D_DRV_START_PONG (2u) + +/** + * @brief This is the start flag for AUTO. + */ +#define TCP3D_DRV_START_AUTO (3u) + +/** +@} +*/ + +/* ========================================================================= */ + +/* ========================================================================= */ +/** @addtogroup TCP3D_DRV_DATASTRUCT + @{ */ + +/** + * @brief Memory Buffer class definitions. + */ +typedef enum Tcp3d_BufClass +{ + Tcp3d_BufClass_EXTERNAL = 0, /**< generic (bulk) external memory */ + Tcp3d_BufClass_INTERNAL, /**< generic (bulk) internal memory */ + Tcp3d_BufClass_L2RAM, /**< Local L2 Memory */ + Tcp3d_BufClass_L2SRAM, /**< Shared L2 Memory (on another core) */ + Tcp3d_BufClass_MSMC /**< Shared Memory */ +} Tcp3d_BufClass; + +/** + * @brief Driver return values to application. + */ +typedef enum Tcp3d_Result +{ + TCP3D_DRV_NO_ERR, /**< No Error, Success */ + TCP3D_DRV_FAIL, /**< General Error */ + TCP3D_DRV_INPUT_LIST_FULL, /**< Enqueue error message */ + TCP3D_DRV_INVALID_INSTANCE_NUMBER, /**< Unsupported Instance number */ + TCP3D_DRV_INVALID_PARAMETER, /**< Parameter value is not correct */ + TCP3D_DRV_INVALID_STATE, /**< API called in invalid state */ + TCP3D_DRV_INVALID_BUFF, /**< Invalid buffer pointer */ + TCP3D_DRV_INVALID_EDMA_CH, /**< Invalid EDMA channel */ + TCP3D_DRV_FAIL_EDMA_PARAM_INIT, /**< EDMA PaRAM initialization failed */ + TCP3D_DRV_FAIL_EDMA_ENABLE_CHANNEL, /**< EDMA enable channel failed */ + TCP3D_DRV_FAIL_EDMA_GET_PARAM_ADDR /**< EDMA get PaRAM address failed */ +} Tcp3d_Result; + +/** + * @brief Driver state indication + */ +typedef enum Tcp3d_State +{ + /** This is the driver init state which is used to set in the state + * variables either at the end of initialization or after the reset. */ + TCP3D_DRV_STATE_INIT = 0, + + /** This state indicates the driver is running in a steady state. This is + * used when ever the driver start is done. In this state, the code blocks + * are DMAed from input list to TCP3D for execution continuously. */ + TCP3D_DRV_STATE_RUNNING, + + /** This state indicates the driver is halted from steady state execution. + * It could happen if chain to the next code block is not available when + * the time previous block was DMAed for execution or there are no more + * code blocks for decoding. If there are more blocks for decoding, restart + * is required for the driver to complete all decoding. */ + TCP3D_DRV_STATE_PAUSE +} Tcp3d_State; + +/** + * @brief Driver Control Commands. + */ +typedef enum Tcp3d_CtrlCmd +{ + /** Used for enabling or disbling the interrupt generation by REVT channels. + * This is done using the EDMA CC IER or IERH register. */ + TCP3D_DRV_SET_REVT_INT, + + /** Used for clearing the pending interrupts generated by REVT channels + * in the EDMA CC IPR or IPRH register. */ + TCP3D_DRV_CLR_REVT_INT, + + /** Used for enabling or disbling the interrupt generation by L2P channels. + * This is done by setting the corresponding PaRAM OPT field bit. + * \b Note that this will result in REVT Channel ISR as the TCC value on the + * L2P channel PaRAM is set with REVT channel number for chaining use. */ + TCP3D_DRV_SET_L2P_INT, + + /** Set interrupt for PING Pause channel (depricated) */ + TCP3D_DRV_SET_PING_PAUSE_INT, + + /** Set interrupt for PONG Pause channel (depricated) */ + TCP3D_DRV_SET_PONG_PAUSE_INT, + + /** Set interrupt for PING L2P channel (depricated) */ + TCP3D_DRV_SET_PING_L2P_INT, + + /** Set interrupt for PONG L2P channel (depricated) */ + TCP3D_DRV_SET_PONG_L2P_INT +} Tcp3d_CtrlCmd; + +/** + * @brief Driver Status query Commands + */ +typedef enum Tcp3d_StsCmd +{ + TCP3D_DRV_GET_STATE, /**< Get driver state information */ + TCP3D_DRV_GET_PING_OUT_IDX, /**< To compute the PING output index in + the pseudo PaRAM list */ + TCP3D_DRV_GET_PONG_OUT_IDX, /**< To compute the PONG output index in + the pseudo PaRAM list */ + TCP3D_DRV_GET_MIN_OUT_IDX /**< To compute minimum output index in + the pseudo PaRAM list, used in the + wrap-around case */ +} Tcp3d_StsCmd; + +/** +@} +*/ +/* ========================================================================= */ + +/* ========================================================================= */ +/** @addtogroup TCP3D_DRV_DATASTRUCT + @{ */ + +/** + * @brief Parameters which determine buffer sizes. + * + * These are configured and passed with getNumBuf() & getBufDesc() funcitons + * to get the buffer requirement of the TCP3. + */ +typedef struct Tcp3d_SizeCfg +{ + uint32_t maxCodeBlocks; /**< Maximum code blocks for which driver will + be configured */ + uint32_t mode; /**< TCP3 Decode mode for which the driver + instance will be used */ +} Tcp3d_SizeCfg; + +/** + * @brief Memory Buffer Structure. + * + * This structure is used to request and/or supply the + * dynamic memory to the components. + */ +typedef struct Tcp3d_MemBuffer +{ + + Tcp3d_BufClass mclass; /**< Memory class. It is used to describe kind of + memory that is requested or returned. For + example: external, internal, or similar. One + should use MEM_CLASS_xxx constants. On RETURN, + class may be changed if original memory class + is exhausted. */ + uint16_t log2align; /**< Alignment information (>= 0). If zero, no + alignment is required nor provided. Otherwise, + memory buffer is aligned on appropriate power + of 2 (e.g. if log2align=3, buffer is aligned + modulo-8). */ + uint32_t size; /**< Number of 8 bit words that are requested or supplied. + Word length depends on the platform, and + corresponds to the shortest element that can be + addressed by the CPU. Word storage length in bits + is defined in types.h as TYP_TWORD_SIZE. The + maximum size depends on the platform. */ + uint16_t volat; /**< TRUE: Memory buffer must be restored before and + saved after it is used. + FALSE: Save/restore are not necessary. + On RETURN, volatile flag may be changed if + original request could not be satisfied. */ + void *base; /**< Base address of the requested buffer. */ +} Tcp3d_MemBuffer; + +/** + * @brief The TCP3 decoder initialization parameters structure holds all the + * information concerning the user channel. These values are used to + * generate the control configuration register values for the TCP3D. + * + * Valid values for each field are provided in the brackets in the + * comments following the field name. + */ +typedef struct Tcp3d_CtrlParams +{ + /* Mode Control Register parameters */ + uint8_t mode; /**< TCP3D mode (0 - 3) */ + uint16_t doubleBuf; /**< Enable/disable the double buffer (0,1) */ + uint16_t intTable; /**< Enable/disable the Interleaver Table + Generation (0,1) */ + uint16_t errIgnore; /**< Enable/disable error detection to stop + TCP3D from running (0,1) */ + uint16_t autoTrig; /**< Enable/disable auto trigger mode (0,1) */ + uint8_t lteCrcSel; /**< LTE CRC initial value selection (0,1) */ + + /* Endian Control Register parameters */ + uint8_t endInt; /**< Interleaver Table Endian mode (0,1) */ + uint8_t endInData; /**< Input systematic and parity data Endian + mode (0,1) */ + + /* Emulation Control Register parameters */ + uint8_t emuFreeRun; /**< Emulation suspend signal (0,1) */ + uint8_t emuSoftStop; /**< Emulation Soft or Hard Stop (0,1) */ + uint8_t emuRtSel; /**< Maximum number of iterations (0,1) */ + + /* Process 0 Execution Register parameters */ + uint8_t exeP0cmd; /**< Process 0 execution command (0,1,4,5,6,7)*/ + + /* Process 1 Execution Register parameters */ + uint8_t exeP1cmd; /**< Process 1 execution command (0,1,4,5,6,7)*/ + +} Tcp3d_CtrlParams; + +/** + * @brief The TCP3D runtime parameters structure holds all the information + * that could be changed per code block. These values are used to + * generate the appropriate input configuration register values for + * the TCP3D. + * + * Valid values for each field are provided in the brackets in the + * comments following the field name. + */ +typedef struct Tcp3d_InCfgParams +{ + /* IC0 */ + uint8_t numsw0; /**< number of SW0s (0 - 62) */ + uint16_t blockLen; /**< code Block Length (39 - 8191) */ + + /* IC1 */ + uint8_t sw0LenSel; /**< SW0 Length Selection value (0 - 5) */ + uint8_t sw2LenSel; /**< SW2 Length Selection value (0,1,2) */ + uint8_t sw1Len; /**< SW1 Length (9 - 127) */ + + /* IC2 */ + uint8_t intLoadSel; /**< Interleaver Table load or generate + selection (0,1) */ + uint16_t maxStar; /**< Enable/disable Max Star (0,1) */ + uint16_t outStsRead; /**< Enable/disable Output Status registers + read via EDMA3 (0,1) */ + uint8_t outOrderSel; /**< Output bit order swapping within 32-bit + word (0,1) */ + uint16_t extScale; /**< Enable/disable Extrinsic scaling (0,1) */ + uint16_t softOutRead; /**< Enable/disable Soft outputs read + via EDMA3 (0,1) */ + uint8_t softOutOrderSel;/**< Soft output byte order (0,1) + used only in BIG ENDIAN mode */ + uint8_t softOutFrmtSel; /**< Soft output bit format (0,1) */ + uint8_t minIter; /**< Minumun iterations (0 - 15) */ + uint8_t maxIter; /**< Maximum iterations (0 - 15) */ + uint8_t snrVal; /**< SNR threshold value in dB used as stopping + criteria (0 - 20) */ + uint16_t snrReport; /**< Enable/disable SNR reporting (0,1) */ + uint8_t stopSel; /**< Stopping criteria selection (0 - 3) */ + uint8_t crcIterSel; /**< LTE CRC consecutive matches for + stopping (0 - 3 ) */ + uint8_t crcPolySel; /**< LTE CRC polynomial selection (0,1) */ + + /* IC3 */ + uint8_t maxStarThres; /**< Max Star Threshold value (0 - 63) */ + uint8_t maxStarValue; /**< Max Star Value (0 - 63) */ + + /* IC4-IC7 */ + int8_t betaMap0[8]; /**< Beta state values for MAP0 decoder */ + int8_t betaMap1[8]; /**< Beta state values for MAP1 decoder */ + + /* IC8-IC11 */ + uint8_t extrScale[16]; /**< Extrinsic scale values */ + + /* IC12-IC14 */ + uint16_t itgParam[5]; /**< Interleaver Table Generation init params */ + +} Tcp3d_InCfgParams; + +/** + * @brief Structure to store TCP3 decoder specific values to identify its + * instance configuration information. This is created to facilitate + * the application to choose TCP3 decoder (either TCP3D_A or TCP3D_B) + * for which the driver will be configured. + * + * This structure could be used for both PING and PONG specific values. + */ +typedef struct Tcp3d_Config +{ + uint32_t inCfgStart; /**< input configuration registers start address */ + uint32_t llrStart; /**< input data (LLR) start address */ + uint32_t interStart; /**< inter leaver start address */ + uint32_t hdStart; /**< output hard decision start address */ + uint32_t sdStart; /**< output soft decision start address */ + uint32_t stsStart; /**< output status registers start address */ + uint32_t revtCh; /**< Channel number associated with REVT */ +}Tcp3d_Config; + +/** + * @brief TCP3D Driver instance structure + */ +typedef struct Tcp3d_Instance +{ + /** TCP3D Peripheral instance number */ + uint8_t instNum; + + /** Variable to keep the driver state */ + volatile Tcp3d_State state; + + /** Driver operating Mode for the given instance */ + uint8_t mode; + + /** Double Buffer mode enable/disable */ + uint16_t doubleBuffer; + + /** If true, PING path is stopped */ + volatile uint8_t pingStop; + + /** If true, PONG path is stopped */ + volatile uint8_t pongStop; + + /** TCP3D driver start mode flag. Set to NULL during init to disable the + * auto start function call from enqueue funciton until application + * initiates. + */ + uint8_t startFlag; + + /** CPU/DSP core ID on which this instance of driver is running */ + uint8_t coreId; + + /** Gives the number of free entries available in the input ping list for + * enqueue. This flag is decremented when a code block is enqueued into + * the ping list. It's value is updated in the start funciton. */ + int32_t pingFreeCnt; + + /** Gives the number of free entries available in the input pong list for + * enqueue. This flag is decremented when a code block is enqueued into + * the pong list. It's value is updated in the start funciton. */ + int32_t pongFreeCnt; + + /** Gives the Maximum number of code blocks that can be enqueued using the + * driver. This value is set during the init. */ + uint32_t maxCodeBlocks; + + /** Gives the next code block index for enqueue into the input list. */ + uint32_t nextCodeBlockIndex; + + /** Pointer to the pseudo PaRAM buffer array base. */ + EDMA3_DRV_PaRAMRegs *pseudoParamBufPtr; + + /** CP_INTC0 input event number used for the output notification. Driver + * uses this value to write (using EDMA) into the STATUS_SET_INDEX_REG + * during run-time to cause system event/interrupt. */ + uint32_t notificationEventNum; + + /* EDMA Variables */ + EDMA3_DRV_Handle edmaHnd; /**< EDMA3 LLD Driver Handle */ + uint32_t edmaRegionId; /**< EDMA shadow region number*/ + uint32_t pingCh[TCP3D_DRV_MAX_CH_PER_PATH]; + /**< Ping channels stored here */ + uint32_t pongCh[TCP3D_DRV_MAX_CH_PER_PATH]; + /**< Pong channels stored here */ + uint32_t pingChParamAddr[TCP3D_DRV_MAX_CH_PER_PATH]; + /**< Physical PaRAM addresses of the + Ping channels */ + uint32_t pongChParamAddr[TCP3D_DRV_MAX_CH_PER_PATH]; + /**< Physical PaRAM addresses of the + Pong channels */ + uint32_t pingLinkCh[TCP3D_DRV_MAX_LINK_CH>>1]; + /**< Link channels for Ping path */ + uint32_t pongLinkCh[TCP3D_DRV_MAX_LINK_CH>>1]; + /**< Link channels for Pong path */ + uint32_t pingLinkChParamAddr[TCP3D_DRV_MAX_LINK_CH>>1]; + /**< Link channel PaRAM address for + Ping path */ + uint32_t pongLinkChParamAddr[TCP3D_DRV_MAX_LINK_CH>>1]; + /**< Link channel PaRAM address for + Pong path */ + + /** bit masks used for controlling interrupt generation by EDMA CC */ + uint32_t l2pChMaskPing; /**< L2P Channel Mask for PING */ + uint32_t l2pChMaskPong; /**< L2P Channel Mask for PONG */ + uint32_t pauseChMaskPing; /**< REVT Channel Mask for PING */ + uint32_t pauseChMaskPong; /**< REVT Channel Mask for PING */ + + /** EDMA shadow registers base address used during run-time */ + CSL_TPCC_ShadowRegs *tpccShadowRegs; + /** Register address of TPCC_IECR used for clearing (diable) the IER bits */ + uint32_t *intEnClrReg[2]; + /** Register address of TPCC_IESR used for setting (enable) the IER bits */ + uint32_t *intEnSetReg[2]; + /** Register address of TPCC_ICR used for clearing the pending IPR bits */ + uint32_t *clrIntPendReg[2]; + /** Register address of TPCC_IPR used for checking pending interrupts */ + uint32_t *intPendReg[2]; + + /* Internal Variables (most of the names are self explanatory) */ + uint8_t constantOne;/**< variable set to 1 at init time and + used by PAUSE channels */ + Tcp3d_State pauseState; /**< variable set to TCP3D_DRV_STATE_PAUSE + and used by PAUSE channels */ + uint32_t resetHdOpt[2]; + uint32_t resetHdLink[2]; + uint32_t resetStsOpt[2]; + uint32_t resetStsLink[2]; + uint32_t resetSdOpt[2]; + uint32_t resetSdLink[2]; + EDMA3_DRV_PaRAMRegs *startPrmPtr; + EDMA3_DRV_PaRAMRegs *pingPtrL2p; + EDMA3_DRV_PaRAMRegs *pongPtrL2p; + EDMA3_DRV_PaRAMRegs revtPrm[2]; + EDMA3_DRV_PaRAMRegs l2pPrm[2]; + EDMA3_DRV_PaRAMRegs *lastParam[2]; + EDMA3_DRV_PaRAMRegs *endListParam[2]; + uint32_t prevNtfFlag[2]; + uint32_t maxPingCbIdx; + uint32_t maxPongCbIdx; + uint32_t maxPingCbCnt; + uint32_t maxPongCbCnt; + uint32_t nextPingInIdx; + uint32_t nextPongInIdx; + uint32_t prevPingOutIdx; + uint32_t prevPongOutIdx; + int32_t pingLoadCnt; + int32_t pongLoadCnt; + volatile uint32_t pingLastOutFlag; + volatile uint32_t pongLastOutFlag; + uint8_t pingWrapCheck; + uint8_t pongWrapCheck; + + /* Debug Flags */ + volatile uint32_t pingStartCntr; + volatile uint32_t pongStartCntr; + volatile uint32_t pingPauseEnCntr; + volatile uint32_t pingL2pEnCntr; + volatile uint32_t pingIntr; + volatile uint32_t pongIntr; + +} Tcp3d_Instance; + +/** + * @brief TCP3D Driver Initialization parameters structure + */ +typedef struct Tcp3d_InitParams +{ + /** + * TCP3D Peripheral instance number to setup. Possible values are + * CSL_TCP3D_A or CSL_TCP3D_B. + */ + uint8_t instNum; + + /** + * Maximum code blocks for which the driver resources will be + * configured. This value is required to configure some parameters. + */ + uint32_t maxCodeBlocks; + + /** + * Core Index value [0,1,2,3]. Used for traslating local L2 + * addresses into global addresses used in the EDMA transfers. + */ + uint8_t coreID; + + /** + * Control parameters for TCP3 decoder. All the elements in this + * structure must be filled with the required values with which + * the driver is intended to run. + * + * They are used to set the MODE, ENDIAN and EXECUTE control + * registers and also to control the driver code based on the + * configuration information like mode & double buffer. + */ + Tcp3d_CtrlParams ctrlParams; + + /** + * TCP3 decoder configuration registers start address. This is used + * only in the init function to start the TCP3 decoder state + * machine by writing into the control registers with the correct + * configuration values. + */ + CSL_Tcp3d_cfgRegs *tcp3dCfgRegs; + + /** + * Start addresses of PING (P0) memory area of TCP3 Decoder and + * the assiciated REVT channel number will be provided here. + * This structure values must be filled with appropriate addresses + * depending on the decoder instance. + */ + Tcp3d_Config pingConfig; + + /** + * Start addresses of PONG (P1) memory area of TCP3 Decoderand + * the assiciated REVT channel number will be provided here. + * This structure values must be filled with appropriate addresses + * depending on the decoder instance. + */ + Tcp3d_Config pongConfig; + + /** + * EDMA3 LLD Driver handle used in the driver to call EDMA LLD + * driver funcitons. + */ + EDMA3_DRV_Handle edmaHnd; + + /** + * EDMA3 shadow region ID through which all the resources are + * allocated. + */ + uint32_t edmaRegionId; + + /** + * Ping Channels Array. First channel must be "0" since it is tied + * to the event (REVT0) generated from TCP3D and used for reading + * outputs from the decoder memory. Total physical channels + * required is given by the define TCP3D_DRV_MAX_CH_PER_PATH. + * + * This arrary could be accesssed with the index values provided + * as define names starting with TCP3D_DRV_CH_IDX. This is useful + * for the application when it needs to setup a callback with + * specific Channel (TCC). + */ + uint32_t pingCh[TCP3D_DRV_MAX_CH_PER_PATH]; + + /** + * Pong Channels Array. First channel must be "1" since it is tied + * to the event (REVT1) generated from TCP3D and used for reading + * outputs from the decoder memory. + * + * Total physical channels required is given by the define + * TCP3D_DRV_MAX_CH_PER_PATH. + * + * This arrary could be accesssed with the index values provided + * as define names starting with TCP3D_DRV_CH_IDX. This is useful + * for the application when it needs to setup a callback with + * specific Channel (TCC). + */ + uint32_t pongCh[TCP3D_DRV_MAX_CH_PER_PATH]; + + /** + * Link Channels Array. + * + * Total physical channels required is given by the define + * TCP3D_DRV_MAX_LINK_CH. + * + * @note It is required that all these link channels be consecutive in + * their PaRAM memory. + */ + uint32_t linkCh[TCP3D_DRV_MAX_LINK_CH]; + + /** + * CP_INTC0 input event used for the output notification. + */ + uint32_t notificationEventNum; + +} Tcp3d_InitParams; + +/** + * @brief TCP3D Driver Status structure. + */ +typedef struct Tcp3d_Sts +{ + Tcp3d_StsCmd cmd; /**< Command flag for Status query */ + Tcp3d_State state; /**< to keep the Driver state value */ + uint32_t prmOutIdx; /**< to keep the queried input pseudo PaRAM + index value */ +} Tcp3d_Sts; + +/** + * @brief TCP3D Driver Control structure. + */ +typedef struct Tcp3d_Ctrl +{ + Tcp3d_CtrlCmd cmd; /**< Command flag for control operation */ + uint32_t intrFlag; /**< interrupt flag to enable or disable + 1 - for enable + 0 - for disable */ +} Tcp3d_Ctrl; + +/** +@} +*/ +/* ========================================================================= */ + +/* ========================================================================= */ +/** + * Driver Function definitions + */ +/** @addtogroup TCP3D_DRV_FUNCTION + @{ */ + +/** + * @b Description + * @n + * TCP3D Driver function for providing the number of buffers + * required. + * + * \param[in] *cfg + * Pointer to the structure of type Tcp3d_SizeCfg which has + * specific information used for determining the buffer + * requirements. + * + * For Example, TCP3D could use one field maxCodeBlocks to + * determine number of buffers required. + * + * \param[out] *nbufs + * Pointer of a variable to which TCP3D Driver proveds the number + * of buffers required. + * + * \pre Set the cfg->maxCodeBlocks value before calling this API. + * + * \post + * + * \return Status reported as either TCP3D_DRV_NO_ERR or TCP3D_DRV_FAIL. + * + */ +Tcp3d_Result Tcp3d_getNumBuf (IN Tcp3d_SizeCfg *cfg, + OUT int16_t *nbufs); + +/** + * @b Description + * @n + * TCP3D Driver function for providing the attributes of all the + * number of buffers requested through the structure of type + * Tcp3d_MemBuffer provided. + * + * \param[in] *cfg + * Pointer to the structure of type Tcp3d_SizeCfg which has + * specific information used for determining the buffer + * requirements. + * + * TCP3D Driver uses the field maxCodeBlocks for determining + * the buffer sizes required. + * + * \param[out] **bufs + * Pointer to the array of Tcp3d_MemBuffer structure of size + * provided through the Tcp3d_getNumBuf() API. + * + * TCP3D Driver fills all the fileds of the structure except the + * base which application fills after allocating the memory as per + * the attributes requested. + * + * \pre Set the cfg->maxCodeBlocks value before calling this API. + * + * \post + * + * \return Status reported as either TCP3D_DRV_NO_ERR or TCP3D_DRV_FAIL. + * + */ +Tcp3d_Result Tcp3d_getBufDesc ( IN Tcp3d_SizeCfg *cfg, + OUT Tcp3d_MemBuffer bufs[]); + +/** + * @b Description + * @n + * TCP3D Driver function called to reset the driver at any time + * after init and only if both PING & PONG decoders have nothing + * in the input list for decoding. + * + * This API checks if it is called in a correct state and returns + * appropriate error message. + * + * This function does the following: + * 1) Set the instance with the passed values - for example number + * of blocks for decoding in the current subframe which is + * needed for boundary checks and to setup the EDMA channels + * and a new status array pointer where the status register + * values for each code block are to be DMAed. + * 2) Initialize all the run-time instance variables to default. + * 3) Initialize the pseudo PaRAM memory with all the defaults + * based on mode. + * 4) Reset the EDMA channels with default values. + * 5) Change the state to TCP3D_DRV_STATE_INIT. + * + * \param[in] *tcp3dInst + * This is the driver instance. + * + * \param[in] codeBlocks + * Number of code blocks to be decoded for the current sub-frame. + * This value should be equal to the maxCodeBlocks. + * + * For saving cycles, you can set to lower value that should be + * multiple of 2. + * + * \pre Allocation of the statusBuf arrary must be big enough to fit + * all the register trasfers for the given codeBlocks. If the size + * is small, there will be memory step-over. + * + * \post + * + * \retVal Success - TCP3D_DRV_NO_ERR + * \retVal Failure - TCP3D_DRV_INVALID_STATE + * \retVal Failure - TCP3D_DRV_INVALID_PARAMETER + * + */ +Tcp3d_Result Tcp3d_reset ( IN Tcp3d_Instance *tcp3dInst, + IN uint32_t codeBlocks); + +/** + * @b Description + * @n + * TCP3D Driver Initialization function which must be called only + * once to initialize the driver instance and other required + * resources needed for the driver functionality. + * + * This funciton does the following: + * -# First this function reads the bufs structure to get the base + * addresses to set the instance and other strucures. If any + * base address is NULL, driver exits immediately with error. + * -# Initializes all the run-time instance variables to default + * values. + * -# All init-time variables are set either from the drvInitParams + * input structure or set directly. + * -# Copies all the EDMA resource information into the instance. + * - Does some sanity check on the channel numbers associated + * with REVTs. + * - Enables all the EVENT triggered channels. + * - Pre-fill most of the PaRAM entries for both the physical + * and linked channels which will be used in run-time in + * the enqueue funciton. + * -# Initializes the pseudo PaRAM buffer with fixed values. + * -# All required reset funcitons are called from this function + * to eliminate the need to call the reset API immediately. + * -# Finally before exit, starts the TCP3 Decoder state machine by + * writing into the control registers from the values provided + * in the drvInitParams->ctrlParams structure. + * + * \param[in] **bufs + * Pointer to the array of Tcp3d_MemBuffer structure of size + * provided through the Tcp3d_getNumBuf() API. This strucure must + * have all the fields filled by now. The bufs[0]->base value will + * be used for initializing the driver instance. + * + * \param[in] drvInitParams + * Driver initialization parameters structure. This structure is + * used for getting all the required resources for the driver to + * initialize the instance. Look into the description of the + * Tcp3d_InitParams structure elements for details. + * + * \pre + * + * \post + * + * \retVal Success - TCP3D_DRV_NO_ERR + * \retVal Failure - TCP3D_DRV_INVALID_BUFF + * \retVal Failure - TCP3D_DRV_INVALID_EDMA_CH + * \retVal Failure - TCP3D_DRV_FAIL_EDMA_GET_PARAM_ADDR + * \retVal Failure - TCP3D_DRV_FAIL_EDMA_PARAM_INIT + * \retVal Failure - TCP3D_DRV_FAIL_EDMA_ENABLE_CHANNEL + * + */ +Tcp3d_Result Tcp3d_init(IN Tcp3d_MemBuffer bufs[], + IN Tcp3d_InitParams *drvInitParams); + +/** + * @b Description + * @n + * TCP3D Driver De-Initialization function which must be called + * to close the corresponding instance. + * + * This funciton does the following: + * -# First this function clears any EDMA specific registers set. + * + * \param [in] *tcp3dInst + * This is the driver instance. + * + * \pre + * + * \post Application can free the resources and memory allocated for this + * instance after this function. + * + * \retVal Success - TCP3D_DRV_NO_ERR + * \retVal Failure - TCP3D_DRV_FAIL + * + */ +Tcp3d_Result Tcp3d_deInit(IN Tcp3d_Instance *tcp3dInst); + +/** + * @b Description + * @n + * This is a run-time API for appending the codeblocks to the + * pseudo PaRAM list as the blocks arrive. This function updates + * the pseudo PaRAM set entries and chains to the previous block + * in the corresponding list (PING or PONG). + * + * Enqueuing is done alternately between the two lists until the + * current list is full. The no room case is indicated with return + * error TCP3D_DRV_INPUT_LIST_FULL. + * + * On each succeesful enqueue, the corresponding load counter for + * the path is incremented. This funciton updates some run-time + * varaibles which keeps track of ping and pong list indexes + * and counters. + * + * This function primarily does the following: + * -# Updates the pseudo PaRAM set with the addresses passed as + * paramters. Also, updates necessary count and index values + * within the pseudo PaRAM set which depend on the block size + * and are not pre-filled during init. + * -# Links the optional outputs, if present, to the HD param and + * sets necessary TCC values. + * -# If the ntfEventFlag is set for notification, the NTF Param is + * linked with the last param from the set. + * -# Chaining to the previous block in the corresponding list is + * done, execept for the first one in the list. This is done by + * - Changing the TCC field of the last param in the previous + * block to trigger the L2P channel. + * - Updating the link field with the dummy or NTFD depending + * on whether the previous block has notification or not. + * -# Calls the Tcp3d_start() function with auto mode as needed + * after the application initiated the first start. + * + * This function is executed at the application task thread for + * queueing the code blocks to the input pseudo PaRAM list. They + * will be copied to the actual PaRAM area using the L2P channel + * when the previous block is decoded and outputs are read as + * specified. + * + * Application need to check the return value to take appropriate + * action. + * -# If no error try enqueuing next block. + * -# If LIST FULL error, either wait for some time and try + * enqueuing or enable EDMA completion interrupts for L2P + * channels. Upon receiving the interrupt the enqueuing could + * be tried again. + * + * Since the TCC for L2P channels always point to REVT, enabling + * L2P channel interrupts would showup as REVT channel call backs. + * + * \param [in] *tcp3dInst + * This is the driver instance. + * + * \param [in] blockLength + * Code Block length value which is used for setting some of the + * PaRAM counts. + * + * \param [in] *inputConfigPtr + * Pointer to the input config registers prepared for the current + * code block. + * + * \param [in] *llrPtr + * Input data pointer where the systematic, parity 1 and parity 2 + * streams are available. + * + * \param [in] llrOffset + * Input data offset between the three streams. Used for setting + * the EDMA trasfer type (A-Sync or AB-Sync) and also to set the + * source jump index. + * + * \param [in] *hdPtr + * Pointer to the memory where the decoded hard decision values to + * be DMAed. + * + * \param [in] *statusPtr + * Pointer to the memory to DMA the three status register values. + * + * This is a selective parameter which application uses only if the + * corresponding bit is set in the inputConfigRegs for reading the + * TCP3D output memory. + * + * If not used, set to @b NULL to avoid any undesired behaviour + * from the TCP3 decoder. This will also save the time for + * programming. + * + * \param [in] *sdPtr + * Pointer to the memory where the decoded soft decision values to + * be DMAed. + * + * This is a selective parameter which application uses only if the + * corresponding bit is set in the inputConfigRegs for reading the + * TCP3D output memory. + * + * If not used, set to @b NULL to avoid any undesired behaviour + * from the TCP3 decoder. This will also save the time for + * programming. + * + * \param [in] sdOffset + * Output data offset between the three streams. Not valid for + * split more, since there will be only one stream. + * + * If not used, set to @b NULL to avoid any undesired behaviour + * from the TCP3 decoder. + * + * \param [in] ntfEventFlag + * Flag for enabling the notification event to be generated at + * the end of output transfer completion of the code block. When + * set, the event number provided during the init. + * + * Useful for application to get notification after a specific + * code block is decoded to start the post-processing. + * + * \pre This driver API MUST be called only after the Tcp3d_init() + * function is called. + * + * \post Driver state value could be changed to TCP3D_DRV_STATE_RUNNING + * from TCP3D_DRV_STATE_PAUSE. This happens only if the startFlag + * was set by this time. + * + * \retVal Success - TCP3D_DRV_NO_ERR + * \retVal Failure - TCP3D_DRV_INPUT_LIST_FULL + */ +Tcp3d_Result Tcp3d_enqueueCodeBlock(IN Tcp3d_Instance *tcp3dInst, + IN uint32_t blockLength, + IN uint32_t *inputConfigPtr, + IN int8_t *llrPtr, + IN uint32_t llrOffset, + IN uint32_t *hdPtr, + IN int8_t *sdPtr, + IN uint32_t sdOffset, + IN uint32_t *statusPtr, + IN uint8_t ntfEventFlag); + +/** + * @b Description + * @n + * This API could be used for starting the driver to start doing + * EDMA transfers to TCP3 decoder for decoding from the pseudo + * PaRAM list. + * + * This function updates the load and free counts for both ping + * and pong lists. + * + * This function is executed at the application task thread for + * starting either the PING or PONG path execution. + * + * \param [in] *inst + * This is the driver instance. + * + * \param [in] startMode + * Flag tells the mode of operation. + * -# If set to TCP3D_DRV_START_AUTO, function checks both the paths + * (PING & PONG) and start the needed paths. + * -# If set with either TCP3D_DRV_START_PING or TCP3D_DRV_START_PONG, + * and the corresponding flag (pingStop or pongStop) is set then + * that path alone is started. + * + * \pre Application must have atleast one code block enqueued to the + * pseudo PaRAM list before calling this API so that driver will + * have something to start the EDMA trasfers and decoding before + * going to PAUSE state. + * + * This function should be called only after the Tcp3d_init() + * function is called. + * + * \post Driver state variable is updated, if any paths are started. + * + * \retVal Success - TCP3D_DRV_NO_ERR + * \retVal Failure - TCP3D_DRV_FAIL_EDMA_ENABLE_CHANNEL + * + */ +Tcp3d_Result Tcp3d_start ( IN Tcp3d_Instance *inst, + IN uint8_t startMode); + +/** + * @b Description + * @n + * This API could be used for querying the TCP3D driver to get + * updates or take appropriate actions. The Tcp3d_StsCmd enum + * structure gives the supported commads. + * + * \note This API is not fully scoped and the possible query commands + * could be extended in future. + * + * \param[in] *inst + * This is the driver instance for which status query is made. + * + * \param[in,out] *drvStatus + * Structure used for keeping the status request command and + * for keeping the status query output. + * + * \pre Set appropriate command value before calling the function. + * + * \post + * + * \retVal Success - TCP3D_DRV_NO_ERR (valid command) + * \retVal Failure - TCP3D_DRV_FAIL (invalid command) + * + */ +Tcp3d_Result Tcp3d_status ( IN Tcp3d_Instance *inst, + INOUT Tcp3d_Sts *drvStatus ); + +/** + * @b Description + * @n + * This API could be used to change or update the TCP3D driver + * instance values which are set during the init time. The + * Tcp3d_CtrlCmd enum structure gives the supported commads. + * + * \note -# This API is not fully scoped and the possible control + * commands could be extended in future. + * -# We may need to protect the instance value updations, once + * they are allowed to change in any state. + * + * \param[in] *inst + * This is the driver instance. + * + * \param[in] *drvCtrl + * Structure used for keeping the control request command and + * also for passing any input values along with as required. + * + * \pre Set appropriate command value before calling the function. + * + * \post Depending on the command the driver behaviour would be changed. + * + * \retVal Success - TCP3D_DRV_NO_ERR (valid command) + * \retVal Failure - TCP3D_DRV_FAIL (invalid command) + * + */ +Tcp3d_Result Tcp3d_control (IN Tcp3d_Instance *inst, + IN Tcp3d_Ctrl *drvCtrl ); + +/** +@} +*/ +/* ========================================================================= */ + +/* ========================================================================= */ +/** + * Utility Function definitions + * - Register Preparation Function definitions + * - Any other functions + */ + +/** @addtogroup TCP3D_DRV_UTIL_FUNCTION + @{ */ + +/** + * @b Description + * @n + * TCP3D Driver function for preparing the common control registers + * from the input structure parameters using the CSL_FINS macro. + * + * The outputs could be used to write into the actual TCP3 decoder + * memory registers directly or DMAed to bring the TCP3 decoder + * state machine to WAIT for inputs state. + * + * \param[in] *ctrl + * Pointer to structure of type Tcp3d_CtrlParams for providing + * the input parameters for the control variables. + * + * \param[out] *modeReg + * Pointer to the mode register variable to put the prepared value. + * + * \param[out] *endReg + * Pointer to the endian register variable for placing the + * prepared value. + * + * \param[out] *exeRegP0 + * Pointer to the process 0 execution register variable for + * placing the prepared value. + * + * \param[out] *exeRegP1 + * Pointer to the process 1 execution register variable for + * placing the prepared value. + * + * \pre All the parameters in the input ctrl structure must be set + * before calling this API. Read the Tcp3d_CtrlParams structure + * description to see if some parameters are reserved for future + * use in which case they need not be set. + * + * \post + * + * \return + * + */ +void Tcp3d_prepControlRegs( IN Tcp3d_CtrlParams *ctrl, + OUT uint32_t *modeReg, + OUT uint32_t *endReg, + OUT uint32_t *exeRegP0, + OUT uint32_t *exeRegP1); + +/** + * @b Description + * @n + * This is a utility function provided as part of TCP3D Driver for + * preparing a fixed set of input config registers that would be + * fixed for a typical configuration and will not vary from + * code block to code block. + * + * This function is used for preparing IC2, IC3, IC8-IC11 registers + * only of 15 registers (IC0-IC14) using CSL_FINS macro. + * + * The output outICRegs could be used as template IC registers + * array when preparing the input config registers for code blocks. + * + * \param[in] *inCfgParams + * Pointer to structure of input parameters of type + * Tcp3d_InCfgParams for preparing IC0-IC14 (15 registers). + * + * \param[out] *outICRegs + * Pointer to the array for holding the 15 registers memory. + * @b Note that only the relavent registers are updated. + * + * \pre Parameters required for preparing fixed registers (IC2, IC3, + * IC8-IC11) must be set in the input parameters structure + * before calling this API. + * + * Read the Tcp3d_InCfgParams structure description to see details + * on which parameters are needed. + * + * \post + * + * \return + * + */ +void Tcp3d_prepFixedConfigRegs ( + IN Tcp3d_InCfgParams * const RESTRICT inCfgParams, + OUT uint32_t * const RESTRICT outICRegs); + +/** + * @b Description + * @n + * This is a utility function provided as part of TCP3D Driver for + * preparing the input config registers that will be used for + * sending to TCP3 decoder IP memory before sending the LLR data. + * + * This function is used for preparing all the 15 input config + * registers (IC0-IC14) using CSL_FINS macro. + * + * This function along with Tcp3d_prepFixedConfigRegs provides + * an otimization knowing that some of the registers will not + * change for each block in general. The last two paramaters are + * provided to use this feature. Once the fixed register fields + * are known, Tcp3d_prepFixedConfigRegs funciton could be + * called for preparing the fixed registers and get the tempICRegs + * array ready in advance sometime during init time. This array + * could be supplied with the Tcp3d_prepConfigRegs API along + * with a flag to copy the fixed registers from the array instead + * of preparing. + * + * \param[in] mode + * Mode of the TCP3D IP block used for determing what to fill in to + * IC12, IC13, IC14 registers (Initial ITG Param values). + * These registers must be prepared only for LTE and WIMAX case, + * otherwise set to ZERO always. + * + * \param[in] *inCfgParams + * Pointer to structure of input parameters of type + * Tcp3d_InCfgParams for preparing IC0-IC14 (15 registers). + * + * \param[out] *outICRegs + * Pointer to the memory array for holding the fully prepared + * registers, ready to be copied to TCP3 decoder IP memory. + * + * \param[in] *tempICRegs + * Template memory array pointer with fixed registers prepared. + * This array should have been prepared one time by calling the + * Tcp3d_prepFixedConfigRegs function well in advance. + * Part of this array will be used only if the copyFixedReg flag + * parameter is set to non-zero value. + * + * \param[in] copyFixedReg + * Flag to tell whether to use the tempICRegs array to copy the + * fixed input config registers or to prepare all of them in this + * function. + * + * \pre All the parameters in the input structure param must be set + * before calling this API. + * + * You can avoid setting some of the register parameters, if you + * use the optimization trick as described in the description. In + * that case, the fixed register parameterss need not be set. + * + * Read the Tcp3d_InCfgParams structure description to see details + * on which parameters are needed. + * + * \post + * + * \return + * + * \ref Tcp3d_prepFixedConfigRegs + * + */ +void Tcp3d_prepConfigRegs ( + IN uint8_t mode, + IN Tcp3d_InCfgParams * const RESTRICT inCfgParams, + OUT uint32_t * const RESTRICT outICRegs, + IN uint32_t * const RESTRICT tempICRegs, + IN uint8_t copyFixedReg); + +/** + * @b Description + * @n + * This is a utility function is provided as part of TCP3D Driver + * for preparing the specific input config registers which depend + * on the block size. + * + * This function can be used for preparing IC0, IC1, IC12-IC14 + * registers only out of 15 registers (IC0-IC14) using + * CSL_FINS macro. + * + * This function is called per code block. + * + * \param[in] mode + * Driver mode of operation. + * + * \param[out] *outICRegs + * Pointer to the array for holding the 15 registers memory. + * @b Note that only the relavent registers are updated. + * + * \param[in] numsw0 + * Number of SW0 used in the decoder. + * + * \param[in] blockLen + * Block length value as required to be populated in the registers. + * + * \param[in] sw0LenSel + * The value of this parameter depends on the actual SW0 length + * used and the possible values are described below. + * 0 – 16 bits + * 1 – 32 bits + * 2 – 48 bits + * 3 – 64 bits + * 4 – 96 bits + * 5 – 128 bits + * + * \param[in] sw1Len + * The value of this parameter depends on the actual SW1 length + * used and the possible values are described below. + * 9 – 10 bits + * 10 – 11 bits + * 11 – 12 bits + * ... + * 127 – 128 bits + * + * \param[in] sw2LenSel + * The value of this parameter depends on the actual SW1 length + * used and the possible values are described below. + * 0 – SW2 is not present + * 1 – SW2 length is same as SW1 + * 2 – SW2 length is less by 2 bits from SW1 + * + * \param[in] *itgParam + * Interleaver Table Generation init params. + * + * \pre Input Parameters required for this function must be computed + * as per the guildelines given in the user guide for preparing + * these specific registers (IC0, IC1, IC12-IC14). + * + * \Note The following rules must be followed when programming sliding + * window values, otherwise expect unpredictable results. + * 1. SW0 length >= SW1 length; If num_sw0 > 0 + * 2. SW1 length >= 10 + * 3. If (SW0 length - SW1 length < 4 and SW1 length != SW2 length ) + * then SW2 length must = 0 (off) + * 4. K <= N * 128 * SW0 Nominal length + * + * where K = block Length and N = Number of MAP decoders + * ( 2 - LTE/WiMAX mode ) + * ( 1 - WCDMA mode ) + * + * \post + * + * \return + * + */ +void Tcp3d_prepBlockSizeDepConfigRegs ( IN uint8_t mode, + OUT uint32_t * const RESTRICT outICRegs, + IN uint8_t numsw0, + IN uint16_t blockLen, + IN uint8_t sw0LenSel, + IN uint8_t sw2LenSel, + IN uint8_t sw1Len, + IN uint16_t * const RESTRICT itgParam); + +/** + * @b Description + * @n + * This is a utility function is provided as part of TCP3D Driver + * for preparing the beta state value dependent input config + * registers only. + * + * This function can be used for preparing IC4-IC7 registers only + * out of 15 registers (IC0-IC14) using CSL_FINS macro. + * + * \param[in] mode + * Driver mode of operation. + * + * \param[out] *outICRegs + * Pointer to the array for holding the 15 registers memory. + * @b Note that only the relavent registers are updated. + * + * \param[in] *betaMap0 + * Beta state values for MAP0 decoder. + * + * \param[in] *betaMap1 + * Beta state values for MAP1 decoder. + * + * \pre Input Parameters required for this function must be computed + * as per the guildelines given in the user guide for preparing + * these specific registers (IC4-IC7). + * + * \post + * + * \return + * + */ +void Tcp3d_prepBetaStateConfigRegs( IN uint8_t mode, + OUT uint32_t * const RESTRICT outICRegs, + IN int8_t * const RESTRICT betaMap0, + IN int8_t * const RESTRICT betaMap1); + +/** + * @b Description + * @n + * Calculates initial beta state values using the tail bits that + * could be used in preparing the TCP3D input configuration + * registers. + * + * \param[in] tailBits + * Tail Bits buffer of size 12. The tail bits are expected to be + * in the order Xt1[0],Pt1[0],Xt1[1],Pt1[1],Xt1[2],Pt1[2],Xt2[0], + * Pt2[0],Xt2[1],Pt2[1],Xt2[2],Pt2[2]. + * + * \param[in] signChange + * For sign inversion information. + * 1 - the sign of the outputs changed + * 0 - the output sign is unchanged. + * + * \param[out] Kt + * Number of trellis stages used to calculate initial beta states. + * This values is computed using the formula [3 - (Kext-K)], + * where K is the code block length. + * + * \param[out] beta0Ptr + * Initial beta state values for the MAP0 decoder computed from + * the tail bits. The buffer size is 8. + * + * \param[out] beta1Ptr + * Initial beta state values for the MAP1 decoder computed from + * the tail bits. The buffer size is 8. + * + * \return + */ +void Tcp3d_betaStates( IN int8_t * const RESTRICT tailBits, + IN int32_t signChange, + IN int32_t Kt, + OUT int8_t * const RESTRICT beta0Ptr, + OUT int8_t * const RESTRICT beta1Ptr); + +/** + * @b Description + * @n + * The function is used to get the version information of the TCP3D Driver. + * + * @retval + * Version Information. + */ +uint32_t Tcp3d_getVersion (void); + +/** + * @b Description + * @n + * The function is used to get the version string for the TCP3D Driver. + * + * @retval + * Version String. + */ +const char* Tcp3d_getVersionStr (void); + +/** +@} +*/ +/* ========================================================================= */ + +#endif /* _TCP3D_DRV_H_ */ diff --git a/tcp3d_drv_types.h b/tcp3d_drv_types.h new file mode 100644 index 0000000..d18b66b --- /dev/null +++ b/tcp3d_drv_types.h @@ -0,0 +1,78 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_DRV_TYPES_H_ +#define _TCP3D_DRV_TYPES_H_ + +/* c99 types includes */ +#include +#include + +/** @addtogroup TCP3D_DRV_MACRO + @{ */ + +/** + * @brief Key work used with the function definitions to represent them as + * static and inline type functions. + */ +#define INLINE static inline + +/** + * @brief Key work for restrict abstracted to support various compilers. + */ +#define RESTRICT restrict + +/** + * @brief Key word used for indicating the argument as INPUT only. + */ +#define IN + +/** + * @brief Key word used for indicating the argument as OUTPUT only. + */ +#define OUT + +/** + * @brief Key word used for indicating the argument as both INPUT and OUTPUT. + */ +#define INOUT + +/** +@} +*/ + +#endif /* _TCP3D_DRV_TYPES_H_ */ diff --git a/tcp3d_osal.h b/tcp3d_osal.h new file mode 100644 index 0000000..82c5876 --- /dev/null +++ b/tcp3d_osal.h @@ -0,0 +1,106 @@ +/** + * @file tcp3d_osal.h + * + * @brief + * This is the sample OS Adaptation layer which is used by the TCP3D + * driver. The OSAL layer can be ported in either of the following + * manners to a native OS: + * + * Approach 1: + * @n Use Prebuilt Libraries + * - Ensure that the provide an implementation of all + * Osal_XXX API for their native OS. + * - Link the prebuilt libraries with their application. + * - Refer to the "example" directory for an example of this + * @n Pros: + * - Customers can reuse prebuilt TI provided libraries + * @n Cons: + * - Level of indirection in the API to get to the actual OS call + * + * Approach 2: + * @n Rebuilt Library + * - Create a copy of this file and modify it to directly + * inline the native OS calls + * - Rebuild the TCP3D Driver library; ensure that the Include + * path points to the directory where the copy of this file + * has been provided. + * - Please refer to the "test" directory for an example of this + * @n Pros: + * - Optimizations can be done to remove the level of indirection + * @n Cons: + * - TCP3D Libraries need to be rebuilt by the customer. + * + * \par + * NOTE: + * (C) Copyright 2009 Texas Instruments, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#ifndef __TCP3D_OSAL_H__ +#define __TCP3D_OSAL_H__ + +/** @addtogroup TCP3D_OSAL_API + @{ */ + +/********************************************************************** + ************************* Extern Declarations ************************ + **********************************************************************/ + +extern void* memset(void *_mem, int32_t _ch, size_t _n); +extern void* memcpy(void *_s1, const void *_s2, size_t _n); + +extern void Osal_tcp3dLog( String fmt, ... ); +extern void Osal_tcp3dBeginMemAccess (void *ptr, uint32_t size); +extern void Osal_tcp3dEndMemAccess (void *ptr, uint32_t size); + +/** + * @brief The macro is used by the TCP3D driver to log various messages. + * + * Prototype: + * The following is the C prototype for the expected OSAL API. + * + * @verbatim + void Osal_tcp3dLog( String fmt, ... ) + @endverbatim + * + * Parameter + * @n printf-style format string + * + * Return Value + * @n Not applicable. + */ +#define Tcp3d_osalLog Osal_tcp3dLog + +/** +@} +*/ + +#endif /* __TCP3D_OSAL_H__ */ + diff --git a/tcp3dver.h.xdt b/tcp3dver.h.xdt new file mode 100644 index 0000000..ea047d4 --- /dev/null +++ b/tcp3dver.h.xdt @@ -0,0 +1,100 @@ +%%{ +/*! + * This template implements the tcp3dver.h + */ + /* Versioning */ + var ver = this; + var ver1 = [00,00,00,00]; + var ver2 = [00,00,00,00]; + + for each(i=0;i Arch (AA); API Changes (BB); Major (CC); Minor (DD) + */ +#define TCP3D_DRV_VERSION_ID `versionID` + +/** + * @brief This is the version string which describes the TCP3D Driver along with the + * date and build information. + */ +#define TCP3D_DRV_VERSION_STR `versionStr` + + +#ifdef __cplusplus +} +#endif + + +#endif /* _TCP3DVER_H */ diff --git a/test/Module.xs b/test/Module.xs new file mode 100644 index 0000000..eea6e4d --- /dev/null +++ b/test/Module.xs @@ -0,0 +1,73 @@ +/****************************************************************************** + * FILE PURPOSE: TCP3D Test files. + ****************************************************************************** + * FILE NAME: module.xs + * + * DESCRIPTION: + * This file contains the module specification for TCP3D Driver Unit Test + * Files + * + * Copyright (C) 2009, Texas Instruments, Inc. + *****************************************************************************/ + +/* Load the library utility. */ +var libUtility = xdc.loadCapsule ("../build/buildlib.xs"); + +var otherFiles = [ + "test/gen_test_vectors/msvc/GenTestVectors.dsp", + "test/gen_test_vectors/msvc/Debug/GenTestVectors.exe", + "test/gen_test_vectors/simulator/debug/Test_c_model.exe", + "test/gen_test_vectors/cleanTestVect.bat", + "test/gen_test_vectors/genTestVect.bat", + "test/gen_test_vectors/genTestVect_200.bat", + "test/gen_test_vectors/GenConfig_wimax.m", + "test/gen_test_vectors/GenConfig_wcdma.m", + "test/gen_test_vectors/GenConfig_lte.m", + "test/gen_test_vectors/LTE_200/GenConfig_lte.m", + "test/gen_test_vectors/WCDMA_200/GenConfig_wcdma.m", + "test/gen_test_vectors/WIMAX_200/GenConfig_wimax.m", +]; + +/************************************************************************** + * FUNCTION NAME : modBuild + ************************************************************************** + * DESCRIPTION : + * The function is used to add all the source files in the test + * directory into the package. + **************************************************************************/ +function modBuild() +{ + /* Add all the .c files to the release package. */ + var testFiles = libUtility.listAllFiles (".c", "test"); + for (var k = 0 ; k < testFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = testFiles[k]; + + /* Add all the .h files to the release package. */ + var testFiles = libUtility.listAllFiles (".h", "test"); + for (var k = 0 ; k < testFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = testFiles[k]; + + /* Add all the .cfg files to the release package. */ + var testFiles = libUtility.listAllFiles (".cfg", "test"); + for (var k = 0 ; k < testFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = testFiles[k]; + + /* Add all the .cmd files to the release package. */ + var testFiles = libUtility.listAllFiles (".cmd", "test"); + for (var k = 0 ; k < testFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = testFiles[k]; + + /* Add all the .txt files to the release package. */ + var testFiles = libUtility.listAllFiles (".txt", "test"); + for (var k = 0 ; k < testFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = testFiles[k]; + + /* Add all the .ini files to the release package. */ + var testFiles = libUtility.listAllFiles (".ini", "test"); + for (var k = 0 ; k < testFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = testFiles[k]; + + /* Add all other files to the release package. */ + for (var k = 0 ; k < otherFiles.length; k++) + Pkg.otherFiles[Pkg.otherFiles.length++] = otherFiles[k]; +} diff --git a/test/gen_test_vectors/GenConfig_lte.m b/test/gen_test_vectors/GenConfig_lte.m new file mode 100644 index 0000000..96d1ac4 --- /dev/null +++ b/test/gen_test_vectors/GenConfig_lte.m @@ -0,0 +1,58 @@ +rand('seed', 2006) + +sw0 = [ 32 48 64 96 128 ]; + +fidL = fopen('config_list.cfg', 'w'); + +for ind = 1:100 + mode = 1; + + frmSizeInd = round(rand*(187)); + fprintf(fidL, '%s\n', sprintf('config_%d.cfg',ind)); + + fid = fopen(sprintf('config_%d.cfg',ind), 'w'); + fprintf(fid, 'Coding_standard = %d\n', mode); + fprintf(fid, 'Frame_size_index = %d\n', frmSizeInd); + fprintf(fid, 'Max_number_of_turbo_iterations = 8\n'); + fprintf(fid, 'Min_number_of_turbo_iterations = 1\n'); + fprintf(fid, 'Max_star_enable = 0\n'); + fprintf(fid, 'Max_star_threshold = 4\n'); + fprintf(fid, 'Max_star_value = 2\n'); + fprintf(fid, 'tcp3_extrScaleEn = 1\n'); + fprintf(fid, 'Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 \n'); + fprintf(fid, 'tcp3_SW0_length = %d\n', sw0(1+fix(rand*5))); + fprintf(fid, 'tcp3_stopSel = 0\n'); + fprintf(fid, 'tcp3_SNR_Report = 1\n'); + fprintf(fid, 'tcp3_SNR_stopVal = 14\n'); + fprintf(fid, 'tcp3_intlvGenEn = 1\n'); + fprintf(fid, 'tcp3_softOutBitFormat = 1\n'); + fprintf(fid, 'tcp3_lteCrcInitSel = 0\n'); + fprintf(fid, 'tcp3_lteCrcIterPass = 1\n'); + fprintf(fid, 'tcp3_outStatusReadEn = %d\n', round(rand*1)); + fprintf(fid, 'tcp3_softOutBitsReadEn = %d\n', round(rand*1)); + fprintf(fid, 'Save_intermediate_data = 1\n'); + fprintf(fid, 'Minimum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Maximum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Snr_increment_step = 0\n'); + fprintf(fid, 'Frame_error_rate_limit = -4\n'); + fprintf(fid, 'Snr_init_value = %d\n',round(rand*7)-3); + fprintf(fid, 'Add_noise = 1\n'); + seed = round(rand*2^25); + if(seed<1000) + seed = seed+1000; + end + fprintf(fid, 'c_model_seed = %d\n', seed); + fprintf(fid, 'Bit_width_of_integer_part = 4\n'); + fprintf(fid, 'Bit_width_of_fractional_part = 2\n'); + fprintf(fid, 'Minimum_number_of_frame_errors = 0\n'); + fprintf(fid, 'Store_info_bits_to_file = 1\n'); + fprintf(fid, 'Load_info_bits_from_file = 0\n'); + fprintf(fid, 'Info_bits_file_name = infobits_file.txt\n'); + fprintf(fid, 'Info_bits_file_includes_CRC= 1\n'); + fprintf(fid, 'Initial_process_index = 0\n'); + fprintf(fid, 'Store_coded_bits_to_file = 0\n'); + fprintf(fid, 'Coded_bits_file_name = codedbits_file.txt\n'); + fclose(fid); + ind = ind + 1; +end +fclose(fidL); diff --git a/test/gen_test_vectors/GenConfig_wcdma.m b/test/gen_test_vectors/GenConfig_wcdma.m new file mode 100644 index 0000000..1600be5 --- /dev/null +++ b/test/gen_test_vectors/GenConfig_wcdma.m @@ -0,0 +1,58 @@ +rand('seed', 1213) + +sw0 = [ 48 64 96 128 ]; + +fidL = fopen('config_list.cfg', 'w'); + +for ind = 1:100 + mode = 3; + + frmSizeInd = round(40 + rand*(5114-40)); + fprintf(fidL, '%s\n', sprintf('config_%d.cfg',ind)); + + fid = fopen(sprintf('config_%d.cfg',ind), 'w'); + fprintf(fid, 'Coding_standard = %d\n', mode); + fprintf(fid, 'Frame_size_index = %d\n', frmSizeInd); + fprintf(fid, 'Max_number_of_turbo_iterations = 8\n'); + fprintf(fid, 'Min_number_of_turbo_iterations = 1\n'); + fprintf(fid, 'Max_star_enable = 0\n'); + fprintf(fid, 'Max_star_threshold = 4\n'); + fprintf(fid, 'Max_star_value = 2\n'); + fprintf(fid, 'tcp3_extrScaleEn = 1\n'); + fprintf(fid, 'Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 \n'); + fprintf(fid, 'tcp3_SW0_length = %d\n', sw0(1+fix(rand*3))); + fprintf(fid, 'tcp3_stopSel = 0\n'); + fprintf(fid, 'tcp3_SNR_Report = 1\n'); + fprintf(fid, 'tcp3_SNR_stopVal = 14\n'); + fprintf(fid, 'tcp3_intlvGenEn = 1\n'); + fprintf(fid, 'tcp3_softOutBitFormat = 1\n'); + fprintf(fid, 'tcp3_lteCrcInitSel = 0\n'); + fprintf(fid, 'tcp3_lteCrcIterPass = 1\n'); + fprintf(fid, 'tcp3_outStatusReadEn = %d\n', round(rand*1)); + fprintf(fid, 'tcp3_softOutBitsReadEn = %d\n', round(rand*1)); + fprintf(fid, 'Save_intermediate_data = 1\n'); + fprintf(fid, 'Minimum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Maximum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Snr_increment_step = 0\n'); + fprintf(fid, 'Frame_error_rate_limit = -4\n'); + fprintf(fid, 'Snr_init_value = %d\n',round(rand*7)-3); + fprintf(fid, 'Add_noise = 1\n'); + seed = round(rand*2^25); + if(seed<1000) + seed = seed+1000; + end + fprintf(fid, 'c_model_seed = %d\n', seed); + fprintf(fid, 'Bit_width_of_integer_part = 4\n'); + fprintf(fid, 'Bit_width_of_fractional_part = 2\n'); + fprintf(fid, 'Minimum_number_of_frame_errors = 0\n'); + fprintf(fid, 'Store_info_bits_to_file = 1\n'); + fprintf(fid, 'Load_info_bits_from_file = 0\n'); + fprintf(fid, 'Info_bits_file_name = infobits_file.txt\n'); + fprintf(fid, 'Info_bits_file_includes_CRC= 1\n'); + fprintf(fid, 'Initial_process_index = 0\n'); + fprintf(fid, 'Store_coded_bits_to_file = 0\n'); + fprintf(fid, 'Coded_bits_file_name = codedbits_file.txt\n'); + fclose(fid); + ind = ind + 1; +end +fclose(fidL); diff --git a/test/gen_test_vectors/GenConfig_wimax.m b/test/gen_test_vectors/GenConfig_wimax.m new file mode 100644 index 0000000..ae9b893 --- /dev/null +++ b/test/gen_test_vectors/GenConfig_wimax.m @@ -0,0 +1,58 @@ +rand('seed', 1976) + +sw0 = [ 32 48 64 96 128 ]; + +fidL = fopen('config_list.cfg', 'w'); + +for ind = 1:100 + mode = 2; + + frmSizeInd = round(rand*(16)); + fprintf(fidL, '%s\n', sprintf('config_%d.cfg',ind)); + + fid = fopen(sprintf('config_%d.cfg',ind), 'w'); + fprintf(fid, 'Coding_standard = %d\n', mode); + fprintf(fid, 'Frame_size_index = %d\n', frmSizeInd); + fprintf(fid, 'Max_number_of_turbo_iterations = 8\n'); + fprintf(fid, 'Min_number_of_turbo_iterations = 1\n'); + fprintf(fid, 'Max_star_enable = 0\n'); + fprintf(fid, 'Max_star_threshold = 4\n'); + fprintf(fid, 'Max_star_value = 2\n'); + fprintf(fid, 'tcp3_extrScaleEn = 1\n'); + fprintf(fid, 'Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 \n'); + fprintf(fid, 'tcp3_SW0_length = %d\n', sw0(1+fix(rand*5))); + fprintf(fid, 'tcp3_stopSel = 0\n'); + fprintf(fid, 'tcp3_SNR_Report = 1\n'); + fprintf(fid, 'tcp3_SNR_stopVal = 14\n'); + fprintf(fid, 'tcp3_intlvGenEn = 1\n'); + fprintf(fid, 'tcp3_softOutBitFormat = 1\n'); + fprintf(fid, 'tcp3_lteCrcInitSel = 0\n'); + fprintf(fid, 'tcp3_lteCrcIterPass = 1\n'); + fprintf(fid, 'tcp3_outStatusReadEn = %d\n', round(rand*1)); + fprintf(fid, 'tcp3_softOutBitsReadEn = %d\n', round(rand*1)); + fprintf(fid, 'Save_intermediate_data = 1\n'); + fprintf(fid, 'Minimum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Maximum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Snr_increment_step = 0\n'); + fprintf(fid, 'Frame_error_rate_limit = -4\n'); + fprintf(fid, 'Snr_init_value = %d\n',round(rand*7)-3); + fprintf(fid, 'Add_noise = 1\n'); + seed = round(rand*2^25); + if(seed<1000) + seed = seed+1000; + end + fprintf(fid, 'c_model_seed = %d\n', seed); + fprintf(fid, 'Bit_width_of_integer_part = 4\n'); + fprintf(fid, 'Bit_width_of_fractional_part = 2\n'); + fprintf(fid, 'Minimum_number_of_frame_errors = 0\n'); + fprintf(fid, 'Store_info_bits_to_file = 1\n'); + fprintf(fid, 'Load_info_bits_from_file = 0\n'); + fprintf(fid, 'Info_bits_file_name = infobits_file.txt\n'); + fprintf(fid, 'Info_bits_file_includes_CRC= 1\n'); + fprintf(fid, 'Initial_process_index = 0\n'); + fprintf(fid, 'Store_coded_bits_to_file = 0\n'); + fprintf(fid, 'Coded_bits_file_name = codedbits_file.txt\n'); + fclose(fid); + ind = ind + 1; +end +fclose(fidL); diff --git a/test/gen_test_vectors/LTE/config_1.cfg b/test/gen_test_vectors/LTE/config_1.cfg new file mode 100644 index 0000000..e23a07f --- /dev/null +++ b/test/gen_test_vectors/LTE/config_1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 167 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 24354030 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_10.cfg b/test/gen_test_vectors/LTE/config_10.cfg new file mode 100644 index 0000000..24613e8 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_10.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 20 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 13520376 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_100.cfg b/test/gen_test_vectors/LTE/config_100.cfg new file mode 100644 index 0000000..8a48eca --- /dev/null +++ b/test/gen_test_vectors/LTE/config_100.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 7886149 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_11.cfg b/test/gen_test_vectors/LTE/config_11.cfg new file mode 100644 index 0000000..606c9c3 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_11.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 35 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 19805099 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_12.cfg b/test/gen_test_vectors/LTE/config_12.cfg new file mode 100644 index 0000000..ccc413e --- /dev/null +++ b/test/gen_test_vectors/LTE/config_12.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 24 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 15581787 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_13.cfg b/test/gen_test_vectors/LTE/config_13.cfg new file mode 100644 index 0000000..b0f76d7 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_13.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 135 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 24728032 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_14.cfg b/test/gen_test_vectors/LTE/config_14.cfg new file mode 100644 index 0000000..4c8127c --- /dev/null +++ b/test/gen_test_vectors/LTE/config_14.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 181 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 29445162 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_15.cfg b/test/gen_test_vectors/LTE/config_15.cfg new file mode 100644 index 0000000..932b368 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_15.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 134 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 33540583 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_16.cfg b/test/gen_test_vectors/LTE/config_16.cfg new file mode 100644 index 0000000..e061a4d --- /dev/null +++ b/test/gen_test_vectors/LTE/config_16.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 17847336 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_17.cfg b/test/gen_test_vectors/LTE/config_17.cfg new file mode 100644 index 0000000..b92fd90 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_17.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 95 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 30868114 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_18.cfg b/test/gen_test_vectors/LTE/config_18.cfg new file mode 100644 index 0000000..d4734ce --- /dev/null +++ b/test/gen_test_vectors/LTE/config_18.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 85 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 32178489 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_19.cfg b/test/gen_test_vectors/LTE/config_19.cfg new file mode 100644 index 0000000..7cbdf8f --- /dev/null +++ b/test/gen_test_vectors/LTE/config_19.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 151 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 12981063 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_2.cfg b/test/gen_test_vectors/LTE/config_2.cfg new file mode 100644 index 0000000..d62c526 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 118 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 18382796 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_20.cfg b/test/gen_test_vectors/LTE/config_20.cfg new file mode 100644 index 0000000..485f2b2 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_20.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 5191308 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_21.cfg b/test/gen_test_vectors/LTE/config_21.cfg new file mode 100644 index 0000000..30801b8 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_21.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 49 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 3260312 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_22.cfg b/test/gen_test_vectors/LTE/config_22.cfg new file mode 100644 index 0000000..515ccdf --- /dev/null +++ b/test/gen_test_vectors/LTE/config_22.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 33400862 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_23.cfg b/test/gen_test_vectors/LTE/config_23.cfg new file mode 100644 index 0000000..21b2690 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_23.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 4939726 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_24.cfg b/test/gen_test_vectors/LTE/config_24.cfg new file mode 100644 index 0000000..4d863c7 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_24.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 46 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 3996869 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_25.cfg b/test/gen_test_vectors/LTE/config_25.cfg new file mode 100644 index 0000000..70a1a18 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_25.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 184 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 25042903 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_26.cfg b/test/gen_test_vectors/LTE/config_26.cfg new file mode 100644 index 0000000..abbd325 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_26.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 127 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 19210561 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_27.cfg b/test/gen_test_vectors/LTE/config_27.cfg new file mode 100644 index 0000000..3bc1949 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_27.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 62 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 30187236 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_28.cfg b/test/gen_test_vectors/LTE/config_28.cfg new file mode 100644 index 0000000..29c26a2 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_28.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 77 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 22270868 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_29.cfg b/test/gen_test_vectors/LTE/config_29.cfg new file mode 100644 index 0000000..dfe6ff5 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_29.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 38 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 22627707 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_3.cfg b/test/gen_test_vectors/LTE/config_3.cfg new file mode 100644 index 0000000..1009267 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 134 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 23926213 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_30.cfg b/test/gen_test_vectors/LTE/config_30.cfg new file mode 100644 index 0000000..03e4e70 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_30.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 176 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 15191395 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_31.cfg b/test/gen_test_vectors/LTE/config_31.cfg new file mode 100644 index 0000000..d11dab0 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_31.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 34 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 10589991 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_32.cfg b/test/gen_test_vectors/LTE/config_32.cfg new file mode 100644 index 0000000..fbec1b2 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_32.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 74 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 13884362 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_33.cfg b/test/gen_test_vectors/LTE/config_33.cfg new file mode 100644 index 0000000..a803724 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_33.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 94 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 28941592 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_34.cfg b/test/gen_test_vectors/LTE/config_34.cfg new file mode 100644 index 0000000..83bc23b --- /dev/null +++ b/test/gen_test_vectors/LTE/config_34.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 11307578 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_35.cfg b/test/gen_test_vectors/LTE/config_35.cfg new file mode 100644 index 0000000..4ab7e06 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_35.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 154 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 32551466 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_36.cfg b/test/gen_test_vectors/LTE/config_36.cfg new file mode 100644 index 0000000..58339cb --- /dev/null +++ b/test/gen_test_vectors/LTE/config_36.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 117 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 3962448 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_37.cfg b/test/gen_test_vectors/LTE/config_37.cfg new file mode 100644 index 0000000..bfa516f --- /dev/null +++ b/test/gen_test_vectors/LTE/config_37.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 139 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 21795968 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_38.cfg b/test/gen_test_vectors/LTE/config_38.cfg new file mode 100644 index 0000000..74dcf07 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_38.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 62 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 28305603 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_39.cfg b/test/gen_test_vectors/LTE/config_39.cfg new file mode 100644 index 0000000..5dae206 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_39.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 173 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 20258023 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_4.cfg b/test/gen_test_vectors/LTE/config_4.cfg new file mode 100644 index 0000000..1758024 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 64 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 25289171 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_40.cfg b/test/gen_test_vectors/LTE/config_40.cfg new file mode 100644 index 0000000..4aebe22 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_40.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 186 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 25557409 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_41.cfg b/test/gen_test_vectors/LTE/config_41.cfg new file mode 100644 index 0000000..e00fcdb --- /dev/null +++ b/test/gen_test_vectors/LTE/config_41.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 73 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 14086458 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_42.cfg b/test/gen_test_vectors/LTE/config_42.cfg new file mode 100644 index 0000000..5938d1d --- /dev/null +++ b/test/gen_test_vectors/LTE/config_42.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 137 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 30775054 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_43.cfg b/test/gen_test_vectors/LTE/config_43.cfg new file mode 100644 index 0000000..5235048 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_43.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 158 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 6806740 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_44.cfg b/test/gen_test_vectors/LTE/config_44.cfg new file mode 100644 index 0000000..112a0d0 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_44.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 77 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 16904157 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_45.cfg b/test/gen_test_vectors/LTE/config_45.cfg new file mode 100644 index 0000000..3dfbad6 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_45.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 16 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 32163819 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_46.cfg b/test/gen_test_vectors/LTE/config_46.cfg new file mode 100644 index 0000000..9dcc25e --- /dev/null +++ b/test/gen_test_vectors/LTE/config_46.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 86 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 16195353 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_47.cfg b/test/gen_test_vectors/LTE/config_47.cfg new file mode 100644 index 0000000..0dcb6af --- /dev/null +++ b/test/gen_test_vectors/LTE/config_47.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 6732493 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_48.cfg b/test/gen_test_vectors/LTE/config_48.cfg new file mode 100644 index 0000000..1bc9c60 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_48.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 42 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 10097332 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_49.cfg b/test/gen_test_vectors/LTE/config_49.cfg new file mode 100644 index 0000000..58900c7 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_49.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 118 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 29939589 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_5.cfg b/test/gen_test_vectors/LTE/config_5.cfg new file mode 100644 index 0000000..41792a0 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_5.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 32072282 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_50.cfg b/test/gen_test_vectors/LTE/config_50.cfg new file mode 100644 index 0000000..55f0c9d --- /dev/null +++ b/test/gen_test_vectors/LTE/config_50.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 69 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 3451196 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_51.cfg b/test/gen_test_vectors/LTE/config_51.cfg new file mode 100644 index 0000000..b8b93f4 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_51.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 124 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 10641431 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_52.cfg b/test/gen_test_vectors/LTE/config_52.cfg new file mode 100644 index 0000000..a802052 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_52.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 30 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 7140765 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_53.cfg b/test/gen_test_vectors/LTE/config_53.cfg new file mode 100644 index 0000000..aaefdaf --- /dev/null +++ b/test/gen_test_vectors/LTE/config_53.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 135 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 19741026 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_54.cfg b/test/gen_test_vectors/LTE/config_54.cfg new file mode 100644 index 0000000..848334a --- /dev/null +++ b/test/gen_test_vectors/LTE/config_54.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 32444325 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_55.cfg b/test/gen_test_vectors/LTE/config_55.cfg new file mode 100644 index 0000000..e8bfbd6 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_55.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 180 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 1974559 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_56.cfg b/test/gen_test_vectors/LTE/config_56.cfg new file mode 100644 index 0000000..4ee05c4 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_56.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 31565813 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_57.cfg b/test/gen_test_vectors/LTE/config_57.cfg new file mode 100644 index 0000000..9b98748 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_57.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 173 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 31089184 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_58.cfg b/test/gen_test_vectors/LTE/config_58.cfg new file mode 100644 index 0000000..ebf77fa --- /dev/null +++ b/test/gen_test_vectors/LTE/config_58.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 35 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 22267870 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_59.cfg b/test/gen_test_vectors/LTE/config_59.cfg new file mode 100644 index 0000000..bb82284 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_59.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 131 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 16284583 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_6.cfg b/test/gen_test_vectors/LTE/config_6.cfg new file mode 100644 index 0000000..abde08c --- /dev/null +++ b/test/gen_test_vectors/LTE/config_6.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 114 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 14655936 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_60.cfg b/test/gen_test_vectors/LTE/config_60.cfg new file mode 100644 index 0000000..91bfaa2 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_60.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 140 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 32393986 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_61.cfg b/test/gen_test_vectors/LTE/config_61.cfg new file mode 100644 index 0000000..4b515ba --- /dev/null +++ b/test/gen_test_vectors/LTE/config_61.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 140 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 21277903 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_62.cfg b/test/gen_test_vectors/LTE/config_62.cfg new file mode 100644 index 0000000..07df9ca --- /dev/null +++ b/test/gen_test_vectors/LTE/config_62.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 157 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 7532787 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_63.cfg b/test/gen_test_vectors/LTE/config_63.cfg new file mode 100644 index 0000000..7588aa7 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_63.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 2695062 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_64.cfg b/test/gen_test_vectors/LTE/config_64.cfg new file mode 100644 index 0000000..34c5cb6 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_64.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 173 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 26550527 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_65.cfg b/test/gen_test_vectors/LTE/config_65.cfg new file mode 100644 index 0000000..6017c66 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_65.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 155 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 7016471 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_66.cfg b/test/gen_test_vectors/LTE/config_66.cfg new file mode 100644 index 0000000..1b62b6d --- /dev/null +++ b/test/gen_test_vectors/LTE/config_66.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 87 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 27758661 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_67.cfg b/test/gen_test_vectors/LTE/config_67.cfg new file mode 100644 index 0000000..38f4ab6 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_67.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 181 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 15758832 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_68.cfg b/test/gen_test_vectors/LTE/config_68.cfg new file mode 100644 index 0000000..d4a526f --- /dev/null +++ b/test/gen_test_vectors/LTE/config_68.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 76 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 9164852 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_69.cfg b/test/gen_test_vectors/LTE/config_69.cfg new file mode 100644 index 0000000..bf2640a --- /dev/null +++ b/test/gen_test_vectors/LTE/config_69.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 105 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 270762 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_7.cfg b/test/gen_test_vectors/LTE/config_7.cfg new file mode 100644 index 0000000..ebf37fa --- /dev/null +++ b/test/gen_test_vectors/LTE/config_7.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 183 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 20401148 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_70.cfg b/test/gen_test_vectors/LTE/config_70.cfg new file mode 100644 index 0000000..277309d --- /dev/null +++ b/test/gen_test_vectors/LTE/config_70.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 116 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 28405582 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_71.cfg b/test/gen_test_vectors/LTE/config_71.cfg new file mode 100644 index 0000000..489493e --- /dev/null +++ b/test/gen_test_vectors/LTE/config_71.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 7042586 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_72.cfg b/test/gen_test_vectors/LTE/config_72.cfg new file mode 100644 index 0000000..ec89843 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_72.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 102 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 1489241 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_73.cfg b/test/gen_test_vectors/LTE/config_73.cfg new file mode 100644 index 0000000..855b56c --- /dev/null +++ b/test/gen_test_vectors/LTE/config_73.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 176 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 16901004 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_74.cfg b/test/gen_test_vectors/LTE/config_74.cfg new file mode 100644 index 0000000..5e11d0e --- /dev/null +++ b/test/gen_test_vectors/LTE/config_74.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 94 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 21104385 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_75.cfg b/test/gen_test_vectors/LTE/config_75.cfg new file mode 100644 index 0000000..edc3dd4 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_75.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 173 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 3794878 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_76.cfg b/test/gen_test_vectors/LTE/config_76.cfg new file mode 100644 index 0000000..1b01278 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_76.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 151 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 1522925 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_77.cfg b/test/gen_test_vectors/LTE/config_77.cfg new file mode 100644 index 0000000..1933aa0 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_77.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 152 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 5217501 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_78.cfg b/test/gen_test_vectors/LTE/config_78.cfg new file mode 100644 index 0000000..0a15df9 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_78.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 71 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 16196608 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_79.cfg b/test/gen_test_vectors/LTE/config_79.cfg new file mode 100644 index 0000000..afb5393 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_79.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 127 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 29471748 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_8.cfg b/test/gen_test_vectors/LTE/config_8.cfg new file mode 100644 index 0000000..f2aef9a --- /dev/null +++ b/test/gen_test_vectors/LTE/config_8.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 128 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 25330404 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_80.cfg b/test/gen_test_vectors/LTE/config_80.cfg new file mode 100644 index 0000000..46bb0df --- /dev/null +++ b/test/gen_test_vectors/LTE/config_80.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 30252473 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_81.cfg b/test/gen_test_vectors/LTE/config_81.cfg new file mode 100644 index 0000000..7872796 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_81.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 17 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 8099319 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_82.cfg b/test/gen_test_vectors/LTE/config_82.cfg new file mode 100644 index 0000000..4e7ee4e --- /dev/null +++ b/test/gen_test_vectors/LTE/config_82.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 159 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 16235519 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_83.cfg b/test/gen_test_vectors/LTE/config_83.cfg new file mode 100644 index 0000000..1fcfc59 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_83.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 32 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 25180841 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_84.cfg b/test/gen_test_vectors/LTE/config_84.cfg new file mode 100644 index 0000000..d9bf411 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_84.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 144 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 10025764 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_85.cfg b/test/gen_test_vectors/LTE/config_85.cfg new file mode 100644 index 0000000..dcafc37 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_85.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 146 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 32128982 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_86.cfg b/test/gen_test_vectors/LTE/config_86.cfg new file mode 100644 index 0000000..98a4af1 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_86.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 6117373 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_87.cfg b/test/gen_test_vectors/LTE/config_87.cfg new file mode 100644 index 0000000..042201c --- /dev/null +++ b/test/gen_test_vectors/LTE/config_87.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 22 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 22679004 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_88.cfg b/test/gen_test_vectors/LTE/config_88.cfg new file mode 100644 index 0000000..6982358 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_88.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 118 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 23816281 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_89.cfg b/test/gen_test_vectors/LTE/config_89.cfg new file mode 100644 index 0000000..3328b64 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_89.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 52 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 3683419 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_9.cfg b/test/gen_test_vectors/LTE/config_9.cfg new file mode 100644 index 0000000..362a026 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_9.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 128 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 4709850 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_90.cfg b/test/gen_test_vectors/LTE/config_90.cfg new file mode 100644 index 0000000..229be4d --- /dev/null +++ b/test/gen_test_vectors/LTE/config_90.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 183 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 16694402 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_91.cfg b/test/gen_test_vectors/LTE/config_91.cfg new file mode 100644 index 0000000..7596333 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_91.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 4 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 14469549 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_92.cfg b/test/gen_test_vectors/LTE/config_92.cfg new file mode 100644 index 0000000..6d9478f --- /dev/null +++ b/test/gen_test_vectors/LTE/config_92.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 116 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 15066912 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_93.cfg b/test/gen_test_vectors/LTE/config_93.cfg new file mode 100644 index 0000000..001d238 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_93.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 155 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 10355584 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_94.cfg b/test/gen_test_vectors/LTE/config_94.cfg new file mode 100644 index 0000000..9465858 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_94.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 184 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 28431638 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_95.cfg b/test/gen_test_vectors/LTE/config_95.cfg new file mode 100644 index 0000000..cbd45f9 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_95.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 2517471 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_96.cfg b/test/gen_test_vectors/LTE/config_96.cfg new file mode 100644 index 0000000..30f291f --- /dev/null +++ b/test/gen_test_vectors/LTE/config_96.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 181 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 26878243 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_97.cfg b/test/gen_test_vectors/LTE/config_97.cfg new file mode 100644 index 0000000..532b418 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_97.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 183 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 27063671 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_98.cfg b/test/gen_test_vectors/LTE/config_98.cfg new file mode 100644 index 0000000..4f2a8af --- /dev/null +++ b/test/gen_test_vectors/LTE/config_98.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 160 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 8947472 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_99.cfg b/test/gen_test_vectors/LTE/config_99.cfg new file mode 100644 index 0000000..e18b4b1 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_99.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 127 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 625023 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/LTE/config_list.cfg b/test/gen_test_vectors/LTE/config_list.cfg new file mode 100644 index 0000000..903f027 --- /dev/null +++ b/test/gen_test_vectors/LTE/config_list.cfg @@ -0,0 +1,80 @@ +config_1.cfg +config_2.cfg +config_3.cfg +config_4.cfg +config_5.cfg +config_6.cfg +config_7.cfg +config_8.cfg +config_9.cfg +config_10.cfg +config_11.cfg +config_12.cfg +config_13.cfg +config_14.cfg +config_15.cfg +config_16.cfg +config_17.cfg +config_18.cfg +config_19.cfg +config_20.cfg +config_21.cfg +config_22.cfg +config_23.cfg +config_24.cfg +config_25.cfg +config_26.cfg +config_27.cfg +config_28.cfg +config_29.cfg +config_30.cfg +config_31.cfg +config_32.cfg +config_33.cfg +config_34.cfg +config_35.cfg +config_36.cfg +config_37.cfg +config_38.cfg +config_39.cfg +config_40.cfg +config_41.cfg +config_42.cfg +config_43.cfg +config_44.cfg +config_45.cfg +config_46.cfg +config_47.cfg +config_48.cfg +config_49.cfg +config_50.cfg +config_51.cfg +config_52.cfg +config_53.cfg +config_54.cfg +config_55.cfg +config_56.cfg +config_57.cfg +config_58.cfg +config_59.cfg +config_60.cfg +config_61.cfg +config_62.cfg +config_63.cfg +config_64.cfg +config_65.cfg +config_66.cfg +config_67.cfg +config_68.cfg +config_69.cfg +config_70.cfg +config_71.cfg +config_72.cfg +config_73.cfg +config_74.cfg +config_75.cfg +config_76.cfg +config_77.cfg +config_78.cfg +config_79.cfg +config_80.cfg diff --git a/test/gen_test_vectors/LTE_200/GenConfig_lte.m b/test/gen_test_vectors/LTE_200/GenConfig_lte.m new file mode 100644 index 0000000..2c53eff --- /dev/null +++ b/test/gen_test_vectors/LTE_200/GenConfig_lte.m @@ -0,0 +1,58 @@ +rand('seed', 040511) + +sw0 = [ 32 48 64 96 128 ]; + +fidL = fopen('config_list.cfg', 'w'); + +for ind = 1:180 + mode = 1; + + frmSizeInd = round(rand*(187)); + fprintf(fidL, '%s\n', sprintf('config_%03d.cfg',ind)); + + fid = fopen(sprintf('config_%03d.cfg',ind), 'w'); + fprintf(fid, 'Coding_standard = %d\n', mode); + fprintf(fid, 'Frame_size_index = %d\n', frmSizeInd); + fprintf(fid, 'Max_number_of_turbo_iterations = 8\n'); + fprintf(fid, 'Min_number_of_turbo_iterations = 1\n'); + fprintf(fid, 'Max_star_enable = 0\n'); + fprintf(fid, 'Max_star_threshold = 4\n'); + fprintf(fid, 'Max_star_value = 2\n'); + fprintf(fid, 'tcp3_extrScaleEn = 1\n'); + fprintf(fid, 'Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 \n'); + fprintf(fid, 'tcp3_SW0_length = %d\n', sw0(1+fix(rand*5))); + fprintf(fid, 'tcp3_stopSel = 0\n'); + fprintf(fid, 'tcp3_SNR_Report = 1\n'); + fprintf(fid, 'tcp3_SNR_stopVal = 14\n'); + fprintf(fid, 'tcp3_intlvGenEn = 1\n'); + fprintf(fid, 'tcp3_softOutBitFormat = 1\n'); + fprintf(fid, 'tcp3_lteCrcInitSel = 0\n'); + fprintf(fid, 'tcp3_lteCrcIterPass = 1\n'); + fprintf(fid, 'tcp3_outStatusReadEn = %d\n', round(rand*1)); + fprintf(fid, 'tcp3_softOutBitsReadEn = %d\n', round(rand*1)); + fprintf(fid, 'Save_intermediate_data = 1\n'); + fprintf(fid, 'Minimum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Maximum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Snr_increment_step = 0\n'); + fprintf(fid, 'Frame_error_rate_limit = -4\n'); + fprintf(fid, 'Snr_init_value = %d\n',round(rand*7)-3); + fprintf(fid, 'Add_noise = 1\n'); + seed = round(rand*2^25); + if(seed<1000) + seed = seed+1000; + end + fprintf(fid, 'c_model_seed = %d\n', seed); + fprintf(fid, 'Bit_width_of_integer_part = 4\n'); + fprintf(fid, 'Bit_width_of_fractional_part = 2\n'); + fprintf(fid, 'Minimum_number_of_frame_errors = 0\n'); + fprintf(fid, 'Store_info_bits_to_file = 1\n'); + fprintf(fid, 'Load_info_bits_from_file = 0\n'); + fprintf(fid, 'Info_bits_file_name = infobits_file.txt\n'); + fprintf(fid, 'Info_bits_file_includes_CRC= 1\n'); + fprintf(fid, 'Initial_process_index = 0\n'); + fprintf(fid, 'Store_coded_bits_to_file = 0\n'); + fprintf(fid, 'Coded_bits_file_name = codedbits_file.txt\n'); + fclose(fid); + ind = ind + 1; +end +fclose(fidL); diff --git a/test/gen_test_vectors/WCDMA/config_1.cfg b/test/gen_test_vectors/WCDMA/config_1.cfg new file mode 100644 index 0000000..d0b77f8 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 849 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 10143332 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_10.cfg b/test/gen_test_vectors/WCDMA/config_10.cfg new file mode 100644 index 0000000..451f070 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_10.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4565 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 13193692 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_100.cfg b/test/gen_test_vectors/WCDMA/config_100.cfg new file mode 100644 index 0000000..2bec5b6 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_100.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3339 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 19371345 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_11.cfg b/test/gen_test_vectors/WCDMA/config_11.cfg new file mode 100644 index 0000000..68e77eb --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_11.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2883 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 18817222 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_12.cfg b/test/gen_test_vectors/WCDMA/config_12.cfg new file mode 100644 index 0000000..a2d1326 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_12.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1642 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 19893212 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_13.cfg b/test/gen_test_vectors/WCDMA/config_13.cfg new file mode 100644 index 0000000..a13edae --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_13.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1386 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 23466754 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_14.cfg b/test/gen_test_vectors/WCDMA/config_14.cfg new file mode 100644 index 0000000..4201ae3 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_14.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1096 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 27807843 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_15.cfg b/test/gen_test_vectors/WCDMA/config_15.cfg new file mode 100644 index 0000000..f94f153 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_15.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3125 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 13573978 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_16.cfg b/test/gen_test_vectors/WCDMA/config_16.cfg new file mode 100644 index 0000000..f03cc50 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_16.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 233 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 8249524 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_17.cfg b/test/gen_test_vectors/WCDMA/config_17.cfg new file mode 100644 index 0000000..a956f11 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_17.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 471 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 27480662 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_18.cfg b/test/gen_test_vectors/WCDMA/config_18.cfg new file mode 100644 index 0000000..26bc23b --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_18.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3733 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 25412704 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_19.cfg b/test/gen_test_vectors/WCDMA/config_19.cfg new file mode 100644 index 0000000..cb1561f --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_19.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4681 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 24325596 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_2.cfg b/test/gen_test_vectors/WCDMA/config_2.cfg new file mode 100644 index 0000000..b0cbe79 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3457 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 25484341 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_20.cfg b/test/gen_test_vectors/WCDMA/config_20.cfg new file mode 100644 index 0000000..a07dc60 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_20.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2031 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 3172565 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_21.cfg b/test/gen_test_vectors/WCDMA/config_21.cfg new file mode 100644 index 0000000..c322d37 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_21.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 544 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 26326027 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_22.cfg b/test/gen_test_vectors/WCDMA/config_22.cfg new file mode 100644 index 0000000..1a7a407 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_22.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1987 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 26402762 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_23.cfg b/test/gen_test_vectors/WCDMA/config_23.cfg new file mode 100644 index 0000000..d124657 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_23.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4209 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 29649877 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_24.cfg b/test/gen_test_vectors/WCDMA/config_24.cfg new file mode 100644 index 0000000..5bc2d39 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_24.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1349 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 10830549 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_25.cfg b/test/gen_test_vectors/WCDMA/config_25.cfg new file mode 100644 index 0000000..fdb3849 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_25.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4572 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 5675590 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_26.cfg b/test/gen_test_vectors/WCDMA/config_26.cfg new file mode 100644 index 0000000..3ba695b --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_26.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4290 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 10328375 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_27.cfg b/test/gen_test_vectors/WCDMA/config_27.cfg new file mode 100644 index 0000000..2a183fe --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_27.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1853 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 7565222 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_28.cfg b/test/gen_test_vectors/WCDMA/config_28.cfg new file mode 100644 index 0000000..d8b91f0 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_28.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1704 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 27099414 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_29.cfg b/test/gen_test_vectors/WCDMA/config_29.cfg new file mode 100644 index 0000000..52a7aa0 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_29.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3926 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 4733693 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_3.cfg b/test/gen_test_vectors/WCDMA/config_3.cfg new file mode 100644 index 0000000..cb619f8 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4079 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 20339034 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_30.cfg b/test/gen_test_vectors/WCDMA/config_30.cfg new file mode 100644 index 0000000..b9db888 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_30.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 286 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 1424679 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_31.cfg b/test/gen_test_vectors/WCDMA/config_31.cfg new file mode 100644 index 0000000..c250e27 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_31.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3122 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 15419491 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_32.cfg b/test/gen_test_vectors/WCDMA/config_32.cfg new file mode 100644 index 0000000..06a311c --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_32.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2246 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 9934566 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_33.cfg b/test/gen_test_vectors/WCDMA/config_33.cfg new file mode 100644 index 0000000..be03fe0 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_33.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 556 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 8518156 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_34.cfg b/test/gen_test_vectors/WCDMA/config_34.cfg new file mode 100644 index 0000000..f13e19e --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_34.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3302 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 1066706 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_35.cfg b/test/gen_test_vectors/WCDMA/config_35.cfg new file mode 100644 index 0000000..17bd63d --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_35.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1571 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 27729118 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_36.cfg b/test/gen_test_vectors/WCDMA/config_36.cfg new file mode 100644 index 0000000..34bb50e --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_36.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 919 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 21130316 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_37.cfg b/test/gen_test_vectors/WCDMA/config_37.cfg new file mode 100644 index 0000000..2bb7157 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_37.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4705 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 33252157 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_38.cfg b/test/gen_test_vectors/WCDMA/config_38.cfg new file mode 100644 index 0000000..6ce7969 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_38.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3073 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 11897165 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_39.cfg b/test/gen_test_vectors/WCDMA/config_39.cfg new file mode 100644 index 0000000..15d6ee5 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_39.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 770 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 27738976 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_4.cfg b/test/gen_test_vectors/WCDMA/config_4.cfg new file mode 100644 index 0000000..517f3c3 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2952 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 15492730 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_40.cfg b/test/gen_test_vectors/WCDMA/config_40.cfg new file mode 100644 index 0000000..832fb56 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_40.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 601 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 1537313 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_41.cfg b/test/gen_test_vectors/WCDMA/config_41.cfg new file mode 100644 index 0000000..2db4298 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_41.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 147 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 1743434 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_42.cfg b/test/gen_test_vectors/WCDMA/config_42.cfg new file mode 100644 index 0000000..8472622 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_42.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1391 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 8322116 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_43.cfg b/test/gen_test_vectors/WCDMA/config_43.cfg new file mode 100644 index 0000000..0a776de --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_43.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2311 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 7963158 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_44.cfg b/test/gen_test_vectors/WCDMA/config_44.cfg new file mode 100644 index 0000000..d6ef734 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_44.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3345 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 285847 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_45.cfg b/test/gen_test_vectors/WCDMA/config_45.cfg new file mode 100644 index 0000000..c382e94 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_45.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 945 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 20820626 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_46.cfg b/test/gen_test_vectors/WCDMA/config_46.cfg new file mode 100644 index 0000000..660f38f --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_46.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4093 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 32859683 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_47.cfg b/test/gen_test_vectors/WCDMA/config_47.cfg new file mode 100644 index 0000000..2459d1c --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_47.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 86 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 11765480 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_48.cfg b/test/gen_test_vectors/WCDMA/config_48.cfg new file mode 100644 index 0000000..e375667 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_48.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 976 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 19554251 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_49.cfg b/test/gen_test_vectors/WCDMA/config_49.cfg new file mode 100644 index 0000000..1fc1202 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_49.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2503 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 16866248 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_5.cfg b/test/gen_test_vectors/WCDMA/config_5.cfg new file mode 100644 index 0000000..54c8d74 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_5.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 637 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 3536429 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_50.cfg b/test/gen_test_vectors/WCDMA/config_50.cfg new file mode 100644 index 0000000..b8f249c --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_50.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 526 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 26357817 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_51.cfg b/test/gen_test_vectors/WCDMA/config_51.cfg new file mode 100644 index 0000000..3e8e3a0 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_51.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1595 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 329356 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_52.cfg b/test/gen_test_vectors/WCDMA/config_52.cfg new file mode 100644 index 0000000..e8a4849 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_52.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4993 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 9034944 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_53.cfg b/test/gen_test_vectors/WCDMA/config_53.cfg new file mode 100644 index 0000000..319164d --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_53.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2550 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 19815554 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_54.cfg b/test/gen_test_vectors/WCDMA/config_54.cfg new file mode 100644 index 0000000..62a0fc4 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_54.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1908 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 14600517 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_55.cfg b/test/gen_test_vectors/WCDMA/config_55.cfg new file mode 100644 index 0000000..f9f495c --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_55.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1153 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 20798073 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_56.cfg b/test/gen_test_vectors/WCDMA/config_56.cfg new file mode 100644 index 0000000..6aaa687 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_56.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2580 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 29792706 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_57.cfg b/test/gen_test_vectors/WCDMA/config_57.cfg new file mode 100644 index 0000000..dd9ea42 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_57.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4112 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 22378778 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_58.cfg b/test/gen_test_vectors/WCDMA/config_58.cfg new file mode 100644 index 0000000..d1429e3 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_58.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1332 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 6121900 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_59.cfg b/test/gen_test_vectors/WCDMA/config_59.cfg new file mode 100644 index 0000000..40f4e50 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_59.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2000 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 178832 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_6.cfg b/test/gen_test_vectors/WCDMA/config_6.cfg new file mode 100644 index 0000000..0183e8f --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_6.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1845 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 31861912 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_60.cfg b/test/gen_test_vectors/WCDMA/config_60.cfg new file mode 100644 index 0000000..1c03d0e --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_60.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2974 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 218282 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_61.cfg b/test/gen_test_vectors/WCDMA/config_61.cfg new file mode 100644 index 0000000..f46d2d4 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_61.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1748 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 20828518 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_62.cfg b/test/gen_test_vectors/WCDMA/config_62.cfg new file mode 100644 index 0000000..5bff314 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_62.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3852 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 27504463 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_63.cfg b/test/gen_test_vectors/WCDMA/config_63.cfg new file mode 100644 index 0000000..a0a48f3 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_63.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3333 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 30199442 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_64.cfg b/test/gen_test_vectors/WCDMA/config_64.cfg new file mode 100644 index 0000000..34a11ed --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_64.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2729 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 22645182 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_65.cfg b/test/gen_test_vectors/WCDMA/config_65.cfg new file mode 100644 index 0000000..7ba8564 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_65.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3570 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 11452113 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_66.cfg b/test/gen_test_vectors/WCDMA/config_66.cfg new file mode 100644 index 0000000..52ae1af --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_66.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1173 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 10546088 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_67.cfg b/test/gen_test_vectors/WCDMA/config_67.cfg new file mode 100644 index 0000000..4a7883a --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_67.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2108 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 32127368 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_68.cfg b/test/gen_test_vectors/WCDMA/config_68.cfg new file mode 100644 index 0000000..241cbe6 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_68.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1067 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 406657 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_69.cfg b/test/gen_test_vectors/WCDMA/config_69.cfg new file mode 100644 index 0000000..2de0949 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_69.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3560 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 2722962 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_7.cfg b/test/gen_test_vectors/WCDMA/config_7.cfg new file mode 100644 index 0000000..ba5b58e --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_7.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1252 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 2383702 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_70.cfg b/test/gen_test_vectors/WCDMA/config_70.cfg new file mode 100644 index 0000000..1341cbb --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_70.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4624 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 17895719 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_71.cfg b/test/gen_test_vectors/WCDMA/config_71.cfg new file mode 100644 index 0000000..dbf2e6a --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_71.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3838 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 20216144 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_72.cfg b/test/gen_test_vectors/WCDMA/config_72.cfg new file mode 100644 index 0000000..816f098 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_72.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 124 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 24034012 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_73.cfg b/test/gen_test_vectors/WCDMA/config_73.cfg new file mode 100644 index 0000000..c53aaba --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_73.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1773 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 27013743 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_74.cfg b/test/gen_test_vectors/WCDMA/config_74.cfg new file mode 100644 index 0000000..b71e1c8 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_74.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4377 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 30191095 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_75.cfg b/test/gen_test_vectors/WCDMA/config_75.cfg new file mode 100644 index 0000000..d910487 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_75.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1807 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 12431293 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_76.cfg b/test/gen_test_vectors/WCDMA/config_76.cfg new file mode 100644 index 0000000..5e09693 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_76.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3515 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 20809336 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_77.cfg b/test/gen_test_vectors/WCDMA/config_77.cfg new file mode 100644 index 0000000..3cd3f96 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_77.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 750 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 4810926 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_78.cfg b/test/gen_test_vectors/WCDMA/config_78.cfg new file mode 100644 index 0000000..ad7d3db --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_78.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3783 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 32659718 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_79.cfg b/test/gen_test_vectors/WCDMA/config_79.cfg new file mode 100644 index 0000000..fad4a36 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_79.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4372 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 7634388 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_8.cfg b/test/gen_test_vectors/WCDMA/config_8.cfg new file mode 100644 index 0000000..088ed62 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_8.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4974 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 27410585 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_80.cfg b/test/gen_test_vectors/WCDMA/config_80.cfg new file mode 100644 index 0000000..841f66f --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_80.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4993 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 29918534 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_81.cfg b/test/gen_test_vectors/WCDMA/config_81.cfg new file mode 100644 index 0000000..0ba4ad8 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_81.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4244 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 24049999 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_82.cfg b/test/gen_test_vectors/WCDMA/config_82.cfg new file mode 100644 index 0000000..a7d85b9 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_82.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1812 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 1905502 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_83.cfg b/test/gen_test_vectors/WCDMA/config_83.cfg new file mode 100644 index 0000000..ac5cf1c --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_83.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2299 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 21131144 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_84.cfg b/test/gen_test_vectors/WCDMA/config_84.cfg new file mode 100644 index 0000000..06a95e0 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_84.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1717 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 30734815 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_85.cfg b/test/gen_test_vectors/WCDMA/config_85.cfg new file mode 100644 index 0000000..60cd6fb --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_85.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3555 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 13356030 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_86.cfg b/test/gen_test_vectors/WCDMA/config_86.cfg new file mode 100644 index 0000000..cca0571 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_86.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4482 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 20894481 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_87.cfg b/test/gen_test_vectors/WCDMA/config_87.cfg new file mode 100644 index 0000000..e11543d --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_87.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4058 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 1954569 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_88.cfg b/test/gen_test_vectors/WCDMA/config_88.cfg new file mode 100644 index 0000000..0386af6 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_88.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 140 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 7426197 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_89.cfg b/test/gen_test_vectors/WCDMA/config_89.cfg new file mode 100644 index 0000000..9d47b97 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_89.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3562 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 26832780 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_9.cfg b/test/gen_test_vectors/WCDMA/config_9.cfg new file mode 100644 index 0000000..9630855 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_9.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3221 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 15242713 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_90.cfg b/test/gen_test_vectors/WCDMA/config_90.cfg new file mode 100644 index 0000000..aad3430 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_90.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 29314233 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_91.cfg b/test/gen_test_vectors/WCDMA/config_91.cfg new file mode 100644 index 0000000..b9fd611 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_91.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 739 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 20107189 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_92.cfg b/test/gen_test_vectors/WCDMA/config_92.cfg new file mode 100644 index 0000000..e9096e8 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_92.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2298 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 8742755 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_93.cfg b/test/gen_test_vectors/WCDMA/config_93.cfg new file mode 100644 index 0000000..68940c0 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_93.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 743 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 8503299 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_94.cfg b/test/gen_test_vectors/WCDMA/config_94.cfg new file mode 100644 index 0000000..ef9ff59 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_94.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1047 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 26090994 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_95.cfg b/test/gen_test_vectors/WCDMA/config_95.cfg new file mode 100644 index 0000000..b48f2a8 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_95.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 3390 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 24990309 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_96.cfg b/test/gen_test_vectors/WCDMA/config_96.cfg new file mode 100644 index 0000000..20e0aa1 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_96.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1759 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 20183749 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_97.cfg b/test/gen_test_vectors/WCDMA/config_97.cfg new file mode 100644 index 0000000..240e84c --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_97.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4073 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 11012370 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_98.cfg b/test/gen_test_vectors/WCDMA/config_98.cfg new file mode 100644 index 0000000..007e9fb --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_98.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4939 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 11599413 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_99.cfg b/test/gen_test_vectors/WCDMA/config_99.cfg new file mode 100644 index 0000000..81d99cc --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_99.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 54 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 15114461 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WCDMA/config_list.cfg b/test/gen_test_vectors/WCDMA/config_list.cfg new file mode 100644 index 0000000..903f027 --- /dev/null +++ b/test/gen_test_vectors/WCDMA/config_list.cfg @@ -0,0 +1,80 @@ +config_1.cfg +config_2.cfg +config_3.cfg +config_4.cfg +config_5.cfg +config_6.cfg +config_7.cfg +config_8.cfg +config_9.cfg +config_10.cfg +config_11.cfg +config_12.cfg +config_13.cfg +config_14.cfg +config_15.cfg +config_16.cfg +config_17.cfg +config_18.cfg +config_19.cfg +config_20.cfg +config_21.cfg +config_22.cfg +config_23.cfg +config_24.cfg +config_25.cfg +config_26.cfg +config_27.cfg +config_28.cfg +config_29.cfg +config_30.cfg +config_31.cfg +config_32.cfg +config_33.cfg +config_34.cfg +config_35.cfg +config_36.cfg +config_37.cfg +config_38.cfg +config_39.cfg +config_40.cfg +config_41.cfg +config_42.cfg +config_43.cfg +config_44.cfg +config_45.cfg +config_46.cfg +config_47.cfg +config_48.cfg +config_49.cfg +config_50.cfg +config_51.cfg +config_52.cfg +config_53.cfg +config_54.cfg +config_55.cfg +config_56.cfg +config_57.cfg +config_58.cfg +config_59.cfg +config_60.cfg +config_61.cfg +config_62.cfg +config_63.cfg +config_64.cfg +config_65.cfg +config_66.cfg +config_67.cfg +config_68.cfg +config_69.cfg +config_70.cfg +config_71.cfg +config_72.cfg +config_73.cfg +config_74.cfg +config_75.cfg +config_76.cfg +config_77.cfg +config_78.cfg +config_79.cfg +config_80.cfg diff --git a/test/gen_test_vectors/WCDMA_200/GenConfig_wcdma.m b/test/gen_test_vectors/WCDMA_200/GenConfig_wcdma.m new file mode 100644 index 0000000..1f24d38 --- /dev/null +++ b/test/gen_test_vectors/WCDMA_200/GenConfig_wcdma.m @@ -0,0 +1,58 @@ +rand('seed', 040511) + +sw0 = [ 48 64 96 128 ]; + +fidL = fopen('config_list.cfg', 'w'); + +for ind = 1:180 + mode = 3; + + frmSizeInd = round(40 + rand*(5114-40)); + fprintf(fidL, '%s\n', sprintf('config_%03d.cfg',ind)); + + fid = fopen(sprintf('config_%03d.cfg',ind), 'w'); + fprintf(fid, 'Coding_standard = %d\n', mode); + fprintf(fid, 'Frame_size_index = %d\n', frmSizeInd); + fprintf(fid, 'Max_number_of_turbo_iterations = 8\n'); + fprintf(fid, 'Min_number_of_turbo_iterations = 1\n'); + fprintf(fid, 'Max_star_enable = 0\n'); + fprintf(fid, 'Max_star_threshold = 4\n'); + fprintf(fid, 'Max_star_value = 2\n'); + fprintf(fid, 'tcp3_extrScaleEn = 1\n'); + fprintf(fid, 'Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 \n'); + fprintf(fid, 'tcp3_SW0_length = %d\n', sw0(1+fix(rand*3))); + fprintf(fid, 'tcp3_stopSel = 0\n'); + fprintf(fid, 'tcp3_SNR_Report = 1\n'); + fprintf(fid, 'tcp3_SNR_stopVal = 14\n'); + fprintf(fid, 'tcp3_intlvGenEn = 1\n'); + fprintf(fid, 'tcp3_softOutBitFormat = 1\n'); + fprintf(fid, 'tcp3_lteCrcInitSel = 0\n'); + fprintf(fid, 'tcp3_lteCrcIterPass = 1\n'); + fprintf(fid, 'tcp3_outStatusReadEn = %d\n', round(rand*1)); + fprintf(fid, 'tcp3_softOutBitsReadEn = %d\n', round(rand*1)); + fprintf(fid, 'Save_intermediate_data = 1\n'); + fprintf(fid, 'Minimum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Maximum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Snr_increment_step = 0\n'); + fprintf(fid, 'Frame_error_rate_limit = -4\n'); + fprintf(fid, 'Snr_init_value = %d\n',round(rand*7)-3); + fprintf(fid, 'Add_noise = 1\n'); + seed = round(rand*2^25); + if(seed<1000) + seed = seed+1000; + end + fprintf(fid, 'c_model_seed = %d\n', seed); + fprintf(fid, 'Bit_width_of_integer_part = 4\n'); + fprintf(fid, 'Bit_width_of_fractional_part = 2\n'); + fprintf(fid, 'Minimum_number_of_frame_errors = 0\n'); + fprintf(fid, 'Store_info_bits_to_file = 1\n'); + fprintf(fid, 'Load_info_bits_from_file = 0\n'); + fprintf(fid, 'Info_bits_file_name = infobits_file.txt\n'); + fprintf(fid, 'Info_bits_file_includes_CRC= 1\n'); + fprintf(fid, 'Initial_process_index = 0\n'); + fprintf(fid, 'Store_coded_bits_to_file = 0\n'); + fprintf(fid, 'Coded_bits_file_name = codedbits_file.txt\n'); + fclose(fid); + ind = ind + 1; +end +fclose(fidL); diff --git a/test/gen_test_vectors/WIMAX/config_1.cfg b/test/gen_test_vectors/WIMAX/config_1.cfg new file mode 100644 index 0000000..c639420 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 15057575 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_10.cfg b/test/gen_test_vectors/WIMAX/config_10.cfg new file mode 100644 index 0000000..62cea38 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_10.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 3014323 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_100.cfg b/test/gen_test_vectors/WIMAX/config_100.cfg new file mode 100644 index 0000000..40dd503 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_100.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 3285365 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_11.cfg b/test/gen_test_vectors/WIMAX/config_11.cfg new file mode 100644 index 0000000..c405ebd --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_11.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 13 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 30515300 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_12.cfg b/test/gen_test_vectors/WIMAX/config_12.cfg new file mode 100644 index 0000000..5887d21 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_12.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 9059394 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_13.cfg b/test/gen_test_vectors/WIMAX/config_13.cfg new file mode 100644 index 0000000..4757c03 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_13.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 20745181 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_14.cfg b/test/gen_test_vectors/WIMAX/config_14.cfg new file mode 100644 index 0000000..5cec756 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_14.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 22782349 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_15.cfg b/test/gen_test_vectors/WIMAX/config_15.cfg new file mode 100644 index 0000000..4c99836 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_15.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 31600454 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_16.cfg b/test/gen_test_vectors/WIMAX/config_16.cfg new file mode 100644 index 0000000..e5de272 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_16.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 4 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 3563171 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_17.cfg b/test/gen_test_vectors/WIMAX/config_17.cfg new file mode 100644 index 0000000..ed0cbd4 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_17.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 31543915 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_18.cfg b/test/gen_test_vectors/WIMAX/config_18.cfg new file mode 100644 index 0000000..53c19aa --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_18.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 21259586 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_19.cfg b/test/gen_test_vectors/WIMAX/config_19.cfg new file mode 100644 index 0000000..5351b19 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_19.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 8036452 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_2.cfg b/test/gen_test_vectors/WIMAX/config_2.cfg new file mode 100644 index 0000000..584bec1 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 13658488 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_20.cfg b/test/gen_test_vectors/WIMAX/config_20.cfg new file mode 100644 index 0000000..7f68106 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_20.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 24282854 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_21.cfg b/test/gen_test_vectors/WIMAX/config_21.cfg new file mode 100644 index 0000000..d41e3da --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_21.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 16 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 33286762 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_22.cfg b/test/gen_test_vectors/WIMAX/config_22.cfg new file mode 100644 index 0000000..f40052c --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_22.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 15237599 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_23.cfg b/test/gen_test_vectors/WIMAX/config_23.cfg new file mode 100644 index 0000000..c84551e --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_23.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 15437338 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_24.cfg b/test/gen_test_vectors/WIMAX/config_24.cfg new file mode 100644 index 0000000..b3b4704 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_24.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 9925373 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_25.cfg b/test/gen_test_vectors/WIMAX/config_25.cfg new file mode 100644 index 0000000..8013550 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_25.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 2053432 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_26.cfg b/test/gen_test_vectors/WIMAX/config_26.cfg new file mode 100644 index 0000000..21d4074 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_26.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 2330046 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_27.cfg b/test/gen_test_vectors/WIMAX/config_27.cfg new file mode 100644 index 0000000..b0d7306 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_27.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 28865976 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_28.cfg b/test/gen_test_vectors/WIMAX/config_28.cfg new file mode 100644 index 0000000..113d786 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_28.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 31974025 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_29.cfg b/test/gen_test_vectors/WIMAX/config_29.cfg new file mode 100644 index 0000000..bc6138d --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_29.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 11584004 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_3.cfg b/test/gen_test_vectors/WIMAX/config_3.cfg new file mode 100644 index 0000000..5902911 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 15539417 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_30.cfg b/test/gen_test_vectors/WIMAX/config_30.cfg new file mode 100644 index 0000000..310eee8 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_30.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 30453440 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_31.cfg b/test/gen_test_vectors/WIMAX/config_31.cfg new file mode 100644 index 0000000..8f14f3b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_31.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 25920851 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_32.cfg b/test/gen_test_vectors/WIMAX/config_32.cfg new file mode 100644 index 0000000..3dfb268 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_32.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 23043859 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_33.cfg b/test/gen_test_vectors/WIMAX/config_33.cfg new file mode 100644 index 0000000..fd993cc --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_33.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 32188715 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_34.cfg b/test/gen_test_vectors/WIMAX/config_34.cfg new file mode 100644 index 0000000..90a8f35 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_34.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 9566130 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_35.cfg b/test/gen_test_vectors/WIMAX/config_35.cfg new file mode 100644 index 0000000..9423e31 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_35.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 28518523 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_36.cfg b/test/gen_test_vectors/WIMAX/config_36.cfg new file mode 100644 index 0000000..f07f1c2 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_36.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 1226864 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_37.cfg b/test/gen_test_vectors/WIMAX/config_37.cfg new file mode 100644 index 0000000..032a531 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_37.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 13809024 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_38.cfg b/test/gen_test_vectors/WIMAX/config_38.cfg new file mode 100644 index 0000000..7ecdcf4 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_38.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 23834347 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_39.cfg b/test/gen_test_vectors/WIMAX/config_39.cfg new file mode 100644 index 0000000..65928a7 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_39.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 3361843 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_4.cfg b/test/gen_test_vectors/WIMAX/config_4.cfg new file mode 100644 index 0000000..f0cb77f --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 5708332 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_40.cfg b/test/gen_test_vectors/WIMAX/config_40.cfg new file mode 100644 index 0000000..d03abc5 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_40.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 14 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 3195870 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_41.cfg b/test/gen_test_vectors/WIMAX/config_41.cfg new file mode 100644 index 0000000..d277f66 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_41.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 7653337 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_42.cfg b/test/gen_test_vectors/WIMAX/config_42.cfg new file mode 100644 index 0000000..efbe0c8 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_42.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 24594163 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_43.cfg b/test/gen_test_vectors/WIMAX/config_43.cfg new file mode 100644 index 0000000..b971cb9 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_43.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 30122793 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_44.cfg b/test/gen_test_vectors/WIMAX/config_44.cfg new file mode 100644 index 0000000..595fe3a --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_44.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 27657742 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_45.cfg b/test/gen_test_vectors/WIMAX/config_45.cfg new file mode 100644 index 0000000..544752b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_45.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 12312898 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_46.cfg b/test/gen_test_vectors/WIMAX/config_46.cfg new file mode 100644 index 0000000..a9c612e --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_46.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 29435139 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_47.cfg b/test/gen_test_vectors/WIMAX/config_47.cfg new file mode 100644 index 0000000..5faf815 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_47.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 19913074 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_48.cfg b/test/gen_test_vectors/WIMAX/config_48.cfg new file mode 100644 index 0000000..5644564 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_48.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 31992557 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_49.cfg b/test/gen_test_vectors/WIMAX/config_49.cfg new file mode 100644 index 0000000..aad9bee --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_49.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 24875177 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_5.cfg b/test/gen_test_vectors/WIMAX/config_5.cfg new file mode 100644 index 0000000..5a6786f --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_5.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 4 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 5097014 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_50.cfg b/test/gen_test_vectors/WIMAX/config_50.cfg new file mode 100644 index 0000000..54d3117 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_50.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 2329052 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_51.cfg b/test/gen_test_vectors/WIMAX/config_51.cfg new file mode 100644 index 0000000..8758653 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_51.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 18544718 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_52.cfg b/test/gen_test_vectors/WIMAX/config_52.cfg new file mode 100644 index 0000000..d295ecd --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_52.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 13 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 25534074 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_53.cfg b/test/gen_test_vectors/WIMAX/config_53.cfg new file mode 100644 index 0000000..d6b5e81 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_53.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 20717051 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_54.cfg b/test/gen_test_vectors/WIMAX/config_54.cfg new file mode 100644 index 0000000..790e709 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_54.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 8708537 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_55.cfg b/test/gen_test_vectors/WIMAX/config_55.cfg new file mode 100644 index 0000000..f9d1bdf --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_55.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 16 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 27905388 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_56.cfg b/test/gen_test_vectors/WIMAX/config_56.cfg new file mode 100644 index 0000000..9f4451e --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_56.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 24770923 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_57.cfg b/test/gen_test_vectors/WIMAX/config_57.cfg new file mode 100644 index 0000000..4c45b0b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_57.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 1351930 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_58.cfg b/test/gen_test_vectors/WIMAX/config_58.cfg new file mode 100644 index 0000000..4cce68e --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_58.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 25380621 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_59.cfg b/test/gen_test_vectors/WIMAX/config_59.cfg new file mode 100644 index 0000000..16e1d87 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_59.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 13 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 12628730 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_6.cfg b/test/gen_test_vectors/WIMAX/config_6.cfg new file mode 100644 index 0000000..2c1a59c --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_6.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 23134813 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_60.cfg b/test/gen_test_vectors/WIMAX/config_60.cfg new file mode 100644 index 0000000..ec0d283 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_60.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 5915718 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_61.cfg b/test/gen_test_vectors/WIMAX/config_61.cfg new file mode 100644 index 0000000..f749aef --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_61.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 19822251 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_62.cfg b/test/gen_test_vectors/WIMAX/config_62.cfg new file mode 100644 index 0000000..f0e17ff --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_62.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 4141635 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_63.cfg b/test/gen_test_vectors/WIMAX/config_63.cfg new file mode 100644 index 0000000..c3e954f --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_63.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 32127793 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_64.cfg b/test/gen_test_vectors/WIMAX/config_64.cfg new file mode 100644 index 0000000..82bba8a --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_64.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 7 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 10831496 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_65.cfg b/test/gen_test_vectors/WIMAX/config_65.cfg new file mode 100644 index 0000000..1570382 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_65.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 27452337 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_66.cfg b/test/gen_test_vectors/WIMAX/config_66.cfg new file mode 100644 index 0000000..8243cf5 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_66.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 25838094 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_67.cfg b/test/gen_test_vectors/WIMAX/config_67.cfg new file mode 100644 index 0000000..14f1fb8 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_67.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 16 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 29072054 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_68.cfg b/test/gen_test_vectors/WIMAX/config_68.cfg new file mode 100644 index 0000000..efff58b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_68.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 13 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 2571155 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_69.cfg b/test/gen_test_vectors/WIMAX/config_69.cfg new file mode 100644 index 0000000..76c6440 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_69.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 14 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 7091343 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_7.cfg b/test/gen_test_vectors/WIMAX/config_7.cfg new file mode 100644 index 0000000..e1c5020 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_7.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 4740628 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_70.cfg b/test/gen_test_vectors/WIMAX/config_70.cfg new file mode 100644 index 0000000..d2dbafb --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_70.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 20687786 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_71.cfg b/test/gen_test_vectors/WIMAX/config_71.cfg new file mode 100644 index 0000000..59588e6 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_71.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 4 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 23831568 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_72.cfg b/test/gen_test_vectors/WIMAX/config_72.cfg new file mode 100644 index 0000000..1359d5b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_72.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 19732891 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_73.cfg b/test/gen_test_vectors/WIMAX/config_73.cfg new file mode 100644 index 0000000..280bb3d --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_73.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 9455623 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_74.cfg b/test/gen_test_vectors/WIMAX/config_74.cfg new file mode 100644 index 0000000..43d5490 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_74.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 8711847 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_75.cfg b/test/gen_test_vectors/WIMAX/config_75.cfg new file mode 100644 index 0000000..7033466 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_75.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 7083532 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_76.cfg b/test/gen_test_vectors/WIMAX/config_76.cfg new file mode 100644 index 0000000..7160e6b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_76.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 5849179 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_77.cfg b/test/gen_test_vectors/WIMAX/config_77.cfg new file mode 100644 index 0000000..6f132a1 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_77.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 13 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 31267101 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_78.cfg b/test/gen_test_vectors/WIMAX/config_78.cfg new file mode 100644 index 0000000..f3eaaa1 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_78.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 15084580 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_79.cfg b/test/gen_test_vectors/WIMAX/config_79.cfg new file mode 100644 index 0000000..6296070 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_79.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 13709031 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_8.cfg b/test/gen_test_vectors/WIMAX/config_8.cfg new file mode 100644 index 0000000..fee316b --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_8.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 25620666 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_80.cfg b/test/gen_test_vectors/WIMAX/config_80.cfg new file mode 100644 index 0000000..dad9548 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_80.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 30536032 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_81.cfg b/test/gen_test_vectors/WIMAX/config_81.cfg new file mode 100644 index 0000000..9ed40c3 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_81.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 26812834 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_82.cfg b/test/gen_test_vectors/WIMAX/config_82.cfg new file mode 100644 index 0000000..93e0692 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_82.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 29106710 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_83.cfg b/test/gen_test_vectors/WIMAX/config_83.cfg new file mode 100644 index 0000000..25b7701 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_83.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 2390031 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_84.cfg b/test/gen_test_vectors/WIMAX/config_84.cfg new file mode 100644 index 0000000..a33bf7d --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_84.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 3954457 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_85.cfg b/test/gen_test_vectors/WIMAX/config_85.cfg new file mode 100644 index 0000000..b107811 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_85.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 12 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 3 +Add_noise = 1 +c_model_seed = 25325670 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_86.cfg b/test/gen_test_vectors/WIMAX/config_86.cfg new file mode 100644 index 0000000..ead66d6 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_86.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 27536853 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_87.cfg b/test/gen_test_vectors/WIMAX/config_87.cfg new file mode 100644 index 0000000..1cffd9c --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_87.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 14 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 12035983 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_88.cfg b/test/gen_test_vectors/WIMAX/config_88.cfg new file mode 100644 index 0000000..7522333 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_88.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 11 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 2885852 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_89.cfg b/test/gen_test_vectors/WIMAX/config_89.cfg new file mode 100644 index 0000000..2e3ed07 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_89.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 8 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 26477463 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_9.cfg b/test/gen_test_vectors/WIMAX/config_9.cfg new file mode 100644 index 0000000..c694b88 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_9.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 10058973 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_90.cfg b/test/gen_test_vectors/WIMAX/config_90.cfg new file mode 100644 index 0000000..004ccff --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_90.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 4 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 6508876 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_91.cfg b/test/gen_test_vectors/WIMAX/config_91.cfg new file mode 100644 index 0000000..ec2ee2d --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_91.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 96 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 29407848 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_92.cfg b/test/gen_test_vectors/WIMAX/config_92.cfg new file mode 100644 index 0000000..b6b1ac9 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_92.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 5307174 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_93.cfg b/test/gen_test_vectors/WIMAX/config_93.cfg new file mode 100644 index 0000000..d240528 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_93.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 48 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -1 +Add_noise = 1 +c_model_seed = 19467492 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_94.cfg b/test/gen_test_vectors/WIMAX/config_94.cfg new file mode 100644 index 0000000..2d4177c --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_94.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 4 +Add_noise = 1 +c_model_seed = 26735184 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_95.cfg b/test/gen_test_vectors/WIMAX/config_95.cfg new file mode 100644 index 0000000..3cd686f --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_95.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 1 +Add_noise = 1 +c_model_seed = 11110971 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_96.cfg b/test/gen_test_vectors/WIMAX/config_96.cfg new file mode 100644 index 0000000..53fbbc6 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_96.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 13930999 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_97.cfg b/test/gen_test_vectors/WIMAX/config_97.cfg new file mode 100644 index 0000000..ad7db98 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_97.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 14 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 +Add_noise = 1 +c_model_seed = 13043123 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_98.cfg b/test/gen_test_vectors/WIMAX/config_98.cfg new file mode 100644 index 0000000..062e6f3 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_98.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 128 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 31896969 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_99.cfg b/test/gen_test_vectors/WIMAX/config_99.cfg new file mode 100644 index 0000000..53c13be --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_99.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 13 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -2 +Add_noise = 1 +c_model_seed = 5700695 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/WIMAX/config_list.cfg b/test/gen_test_vectors/WIMAX/config_list.cfg new file mode 100644 index 0000000..c625a82 --- /dev/null +++ b/test/gen_test_vectors/WIMAX/config_list.cfg @@ -0,0 +1,100 @@ +config_1.cfg +config_2.cfg +config_3.cfg +config_4.cfg +config_5.cfg +config_6.cfg +config_7.cfg +config_8.cfg +config_9.cfg +config_10.cfg +config_11.cfg +config_12.cfg +config_13.cfg +config_14.cfg +config_15.cfg +config_16.cfg +config_17.cfg +config_18.cfg +config_19.cfg +config_20.cfg +config_21.cfg +config_22.cfg +config_23.cfg +config_24.cfg +config_25.cfg +config_26.cfg +config_27.cfg +config_28.cfg +config_29.cfg +config_30.cfg +config_31.cfg +config_32.cfg +config_33.cfg +config_34.cfg +config_35.cfg +config_36.cfg +config_37.cfg +config_38.cfg +config_39.cfg +config_40.cfg +config_41.cfg +config_42.cfg +config_43.cfg +config_44.cfg +config_45.cfg +config_46.cfg +config_47.cfg +config_48.cfg +config_49.cfg +config_50.cfg +config_51.cfg +config_52.cfg +config_53.cfg +config_54.cfg +config_55.cfg +config_56.cfg +config_57.cfg +config_58.cfg +config_59.cfg +config_60.cfg +config_61.cfg +config_62.cfg +config_63.cfg +config_64.cfg +config_65.cfg +config_66.cfg +config_67.cfg +config_68.cfg +config_69.cfg +config_70.cfg +config_71.cfg +config_72.cfg +config_73.cfg +config_74.cfg +config_75.cfg +config_76.cfg +config_77.cfg +config_78.cfg +config_79.cfg +config_80.cfg +config_81.cfg +config_82.cfg +config_83.cfg +config_84.cfg +config_85.cfg +config_86.cfg +config_87.cfg +config_88.cfg +config_89.cfg +config_90.cfg +config_91.cfg +config_92.cfg +config_93.cfg +config_94.cfg +config_95.cfg +config_96.cfg +config_97.cfg +config_98.cfg +config_99.cfg +config_100.cfg diff --git a/test/gen_test_vectors/WIMAX_200/GenConfig_wimax.m b/test/gen_test_vectors/WIMAX_200/GenConfig_wimax.m new file mode 100644 index 0000000..8b33896 --- /dev/null +++ b/test/gen_test_vectors/WIMAX_200/GenConfig_wimax.m @@ -0,0 +1,58 @@ +rand('seed', 040511) + +sw0 = [ 32 48 64 96 128 ]; + +fidL = fopen('config_list.cfg', 'w'); + +for ind = 1:180 + mode = 2; + + frmSizeInd = round(rand*(16)); + fprintf(fidL, '%s\n', sprintf('config_%03d.cfg',ind)); + + fid = fopen(sprintf('config_%03d.cfg',ind), 'w'); + fprintf(fid, 'Coding_standard = %d\n', mode); + fprintf(fid, 'Frame_size_index = %d\n', frmSizeInd); + fprintf(fid, 'Max_number_of_turbo_iterations = 8\n'); + fprintf(fid, 'Min_number_of_turbo_iterations = 1\n'); + fprintf(fid, 'Max_star_enable = 0\n'); + fprintf(fid, 'Max_star_threshold = 4\n'); + fprintf(fid, 'Max_star_value = 2\n'); + fprintf(fid, 'tcp3_extrScaleEn = 1\n'); + fprintf(fid, 'Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 \n'); + fprintf(fid, 'tcp3_SW0_length = %d\n', sw0(1+fix(rand*5))); + fprintf(fid, 'tcp3_stopSel = 0\n'); + fprintf(fid, 'tcp3_SNR_Report = 1\n'); + fprintf(fid, 'tcp3_SNR_stopVal = 14\n'); + fprintf(fid, 'tcp3_intlvGenEn = 1\n'); + fprintf(fid, 'tcp3_softOutBitFormat = 1\n'); + fprintf(fid, 'tcp3_lteCrcInitSel = 0\n'); + fprintf(fid, 'tcp3_lteCrcIterPass = 1\n'); + fprintf(fid, 'tcp3_outStatusReadEn = %d\n', round(rand*1)); + fprintf(fid, 'tcp3_softOutBitsReadEn = %d\n', round(rand*1)); + fprintf(fid, 'Save_intermediate_data = 1\n'); + fprintf(fid, 'Minimum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Maximum_number_of_FEC_blocks = 1\n'); + fprintf(fid, 'Snr_increment_step = 0\n'); + fprintf(fid, 'Frame_error_rate_limit = -4\n'); + fprintf(fid, 'Snr_init_value = %d\n',round(rand*7)-3); + fprintf(fid, 'Add_noise = 1\n'); + seed = round(rand*2^25); + if(seed<1000) + seed = seed+1000; + end + fprintf(fid, 'c_model_seed = %d\n', seed); + fprintf(fid, 'Bit_width_of_integer_part = 4\n'); + fprintf(fid, 'Bit_width_of_fractional_part = 2\n'); + fprintf(fid, 'Minimum_number_of_frame_errors = 0\n'); + fprintf(fid, 'Store_info_bits_to_file = 1\n'); + fprintf(fid, 'Load_info_bits_from_file = 0\n'); + fprintf(fid, 'Info_bits_file_name = infobits_file.txt\n'); + fprintf(fid, 'Info_bits_file_includes_CRC= 1\n'); + fprintf(fid, 'Initial_process_index = 0\n'); + fprintf(fid, 'Store_coded_bits_to_file = 0\n'); + fprintf(fid, 'Coded_bits_file_name = codedbits_file.txt\n'); + fclose(fid); + ind = ind + 1; +end +fclose(fidL); diff --git a/test/gen_test_vectors/cleanTestVect.bat b/test/gen_test_vectors/cleanTestVect.bat new file mode 100755 index 0000000..8fa2375 --- /dev/null +++ b/test/gen_test_vectors/cleanTestVect.bat @@ -0,0 +1,4 @@ +@echo off + +@del /s *.dat +@del /s *.bin diff --git a/test/gen_test_vectors/genTestVect.bat b/test/gen_test_vectors/genTestVect.bat new file mode 100755 index 0000000..7fa2fe3 --- /dev/null +++ b/test/gen_test_vectors/genTestVect.bat @@ -0,0 +1,60 @@ +@echo off + +REM set MSDEV_PATH="C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin" +REM if exist %MSDEV_PATH% ( +REM set path=%path%;%MSDEV_PATH% +REM ) else ( +REM echo !!! MSDEV path not set. Not found at %MSDEV_PATH%. !!! +REM goto end +REM ) + +REM Get the current directory +@set CUR_DIR=%~sdp0 + +REM build the executable first +REM @msdev %CUR_DIR%\msvc\GenTestVectors.dsp /make "all - Win32 Debug" +REM Set your Executable file path +@set EXE_NAME=%CUR_DIR%\msvc\Debug\GenTestVectors.exe +REM Set your Source list folder path +@set SRC_PATH=%CUR_DIR% +REM Set your Destination test vector folder path +@set DST_PATH=%CUR_DIR% + +REM ~~~~~~~~~~~~~~~~~~~~~~ GENERATE TEST VECTORS ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +REM GenTestVectors.exe [Destination Folder] [Out File Type] +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +REM ~~~~~~~~~~~~~~~ LTE TEST ~~~~~~~~~~~~~~~ +@%EXE_NAME% %SRC_PATH%\test0_lte config_list.cfg %DST_PATH%\test0_lte %1 +@%EXE_NAME% %SRC_PATH%\test1_lte test1_list.cfg %DST_PATH%\test1_lte %1 +@%EXE_NAME% %SRC_PATH%\test2_lte test2_list.cfg %DST_PATH%\test2_lte %1 +@%EXE_NAME% %SRC_PATH%\test3_lte test3_list.cfg %DST_PATH%\test3_lte %1 +@%EXE_NAME% %SRC_PATH%\test4_lte test4_list.cfg %DST_PATH%\test4_lte %1 +@%EXE_NAME% %SRC_PATH%\sim_config\LTE lte_list.cfg %DST_PATH%\sim_config\LTE %1 +@%EXE_NAME% %SRC_PATH%\LTE config_list.cfg %DST_PATH%\LTE %1 +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +REM ~~~~~~~~~~~~~~~ WCDMA TEST ~~~~~~~~~~~~~~~ +@%EXE_NAME% %SRC_PATH%\test0_wcdma config_list.cfg %DST_PATH%\test0_wcdma %1 +@%EXE_NAME% %SRC_PATH%\test1_wcdma test1_list.cfg %DST_PATH%\test1_wcdma %1 +@%EXE_NAME% %SRC_PATH%\test2_wcdma test2_list.cfg %DST_PATH%\test2_wcdma %1 +@%EXE_NAME% %SRC_PATH%\test3_wcdma test3_list.cfg %DST_PATH%\test3_wcdma %1 +@%EXE_NAME% %SRC_PATH%\sim_config\WCDMA wcdma_list.cfg %DST_PATH%\sim_config\WCDMA %1 +@%EXE_NAME% %SRC_PATH%\WCDMA config_list.cfg %DST_PATH%\WCDMA %1 +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +REM ~~~~~~~~~~~~~~~ WIMAX TEST ~~~~~~~~~~~~~~~ +@%EXE_NAME% %SRC_PATH%\test0_wimax config_list.cfg %DST_PATH%\test0_wimax %1 +@%EXE_NAME% %SRC_PATH%\test1_wimax test1_list.cfg %DST_PATH%\test1_wimax %1 +@%EXE_NAME% %SRC_PATH%\test2_wimax test2_list.cfg %DST_PATH%\test2_wimax %1 +@%EXE_NAME% %SRC_PATH%\test3_wimax test3_list.cfg %DST_PATH%\test3_wimax %1 +@%EXE_NAME% %SRC_PATH%\sim_config\WIMAX wimax_list.cfg %DST_PATH%\sim_config\WIMAX %1 +@%EXE_NAME% %SRC_PATH%\WIMAX config_list.cfg %DST_PATH%\WIMAX %1 +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +REM @%EXE_NAME% %SRC_PATH%\WCDMA_200 config_list.cfg %DST_PATH%\WCDMA_200 %1 +REM @%EXE_NAME% %SRC_PATH%\LTE_200 config_list.cfg %DST_PATH%\LTE_200 %1 +REM @%EXE_NAME% %SRC_PATH%\WIMAX_200 config_list.cfg %DST_PATH%\WIMAX_200 %1 + +:end diff --git a/test/gen_test_vectors/genTestVect_200.bat b/test/gen_test_vectors/genTestVect_200.bat new file mode 100755 index 0000000..fb1f2d2 --- /dev/null +++ b/test/gen_test_vectors/genTestVect_200.bat @@ -0,0 +1,32 @@ +@echo off + +set MSDEV_PATH="C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin" +if exist %MSDEV_PATH% ( +set path=%path%;%MSDEV_PATH% +) else ( +echo !!! MSDEV path not set. Not found at %MSDEV_PATH%. !!! +goto end +) + +REM Get the current directory +@set CUR_DIR=%~sdp0 + +REM build the executable first +@msdev %CUR_DIR%\msvc\GenTestVectors.dsp /make "all - Win32 Debug" +REM Set your Executable file path +@set EXE_NAME=%CUR_DIR%\msvc\Debug\GenTestVectors.exe +REM Set your Source list folder path +@set SRC_PATH=%CUR_DIR% +REM Set your Destination test vector folder path +@set DST_PATH=%CUR_DIR% + +REM ~~~~~~~~~~~~~~~~~~~~~~ GENERATE TEST VECTORS ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +REM GenTestVectors.exe [Destination Folder] [Out File Type] +REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@%EXE_NAME% %SRC_PATH%\WCDMA_200 config_list.cfg %DST_PATH%\WCDMA_200 %1 +@%EXE_NAME% %SRC_PATH%\LTE_200 config_list.cfg %DST_PATH%\LTE_200 %1 +@%EXE_NAME% %SRC_PATH%\WIMAX_200 config_list.cfg %DST_PATH%\WIMAX_200 %1 + +:end diff --git a/test/gen_test_vectors/include/cfg_param.h b/test/gen_test_vectors/include/cfg_param.h new file mode 100644 index 0000000..3b4e247 --- /dev/null +++ b/test/gen_test_vectors/include/cfg_param.h @@ -0,0 +1,94 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef CFG_PARAM_H +#define CFG_PARAM_H +#include "typedefs.h" + + +/** + * \struct _OUT_TCP3_REGS + * + * \brief The structure holds configuration parameters + * used by tcp3d driver test bench. + * + * \sa + * + */ +typedef struct _OUT_TCP3_REGS +{ + int32_t mode_sel; //TCP3_MODE + int32_t lte_crc_init_sel; + int32_t NumInfoBits; //Not part of tcp3 registers + int32_t SW0_length; //Not part of tcp3 registers + int32_t maxst_en; + int32_t out_flag_en; + int32_t out_order_sel; + int32_t ext_scale_en; + int32_t soft_out_flag_en; + int32_t soft_out_fmt; + int32_t min_itr; + int32_t max_itr; + int32_t snr_val; + int32_t snr_rep; + int32_t stop_sel; + int32_t crc_iter_pass; + int32_t crc_sel; + int32_t maxst_thold; //CFG3 + int32_t maxst_value; + int32_t ext_scale_0; //CFG8 + int32_t ext_scale_1; + int32_t ext_scale_2; + int32_t ext_scale_3; + int32_t ext_scale_4; //CFG9 + int32_t ext_scale_5; + int32_t ext_scale_6; + int32_t ext_scale_7; + int32_t ext_scale_8; //CFG10 + int32_t ext_scale_9; + int32_t ext_scale_10; + int32_t ext_scale_11; + int32_t ext_scale_12; //CFG11 + int32_t ext_scale_13; + int32_t ext_scale_14; + int32_t ext_scale_15; +} OUT_TCP3_REGS; + + + + +#endif \ No newline at end of file diff --git a/test/gen_test_vectors/include/sim_param.h b/test/gen_test_vectors/include/sim_param.h new file mode 100644 index 0000000..342a934 --- /dev/null +++ b/test/gen_test_vectors/include/sim_param.h @@ -0,0 +1,272 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef SIM_PARAM_H +#define SIM_PARAM_H +#include "typedefs.h" + + +/** + * \struct _TCP3_SIM_PARMS + * + * \brief The structure holds main simulation parameters that are read from the configuration file + * + * \sa + * + */ +typedef struct _TCP3_SIM_PARMS +{ + int32_t CodingStandard; /**< 0 - UMTS, 1 - LTE, 2 - WiMAX, 3 - HSUPA Split mode */ + int32_t frameLenInd; /**< For LTE and WiMAX: index of the block size (LTE: 0-187, Wimax: 0-16), For UMTS/HSUPA block size (40-5114) */ + int32_t MaxNumTurboIterations; /**< Maximum number of turbo iterations */ + int32_t MinNumTurboIterations; /**< Minimum number of turbo iterations */ + int32_t RateTimesOneTwenty; /**< Currently not used */ + int32_t mappingSign; /**< Currently hardcoded to 1 */ + + int32_t NumInfoBits; /**< Number of info bits */ + int32_t NumInfoSymb; /**< Half of the number of info bits */ + int32_t NumInfoBytes; /**< Number of info bytes */ + int32_t NumCodedBits; /**< Number of coded bits at the output of turbo encoder */ + int32_t NumTransmitBits; /**< Number of transmitted bits (after rate matching) */ + + + int32_t MinNumFecBlocks; /**< For BER calculation - maximum number of FEC blocks at one SNR point */ + int32_t MaxNumFecBlocks; /**< For BER calculation - minimum number of FEC blocks at one SNR point */ + int32_t MinNumFerErrors; /**< For BER calculation - minimum number of FEC erros at one SNR point */ + + int32_t PrevFerComputed; /**< FER calculated for the previous point*/ + float PrevFer; /**< FER of the previous snr point*/ + int32_t FrameErrorRateLimit; /**< Exponent value of the minimum frame error rate of the FER curve. For example -4 means stop curve computation when FER=10^-4 is reached. */ + float SnrInitValue; /**< Initial SNR value in dB */ + float SnrIncrementStep; /**< SNR increment steps for BER calculation */ + float SnrLimitValue; /**< Stop BER calculation if snr reaches this value */ + float noiseSigma; /**< Noise RMS value */ + float SnrPointValue; /**< Current SNR value during the calculation of BER/FER */ + int32_t AdaptiveSnrStep; /**< =1 Enables adaptive SNR step. If the previous_FER/current_FER > 4 SNR step is divided in two */ + int32_t seed; /**< Noise seed */ + int32_t NoiseSwitch; /**< =1 nose addition to signal in the chanel enabled */ + uint32_t Scr2318ShiftReg; /**< Initial value of the 23-bit scrambler shift register for info bit generation */ + + + uint32_t SnrPointCounter; /**< Counts the SNR points during BER/FER curve calculation */ + uint32_t FecBlockCntrLimit; /**< Maximum number of FEC blocks at the current SNR point */ + + uint32_t AccBitErrors; /**< Accumulated bit errors at the current SNR point */ + uint32_t AccFrameErrors; /**< Accumulated frame errors at the current SNR point */ + uint32_t FecBlockCounter; /**< FEC block counter at the current SNR point */ + uint32_t AccParity0BitErrors; /**< Accumulated bit errors at the current SNR point */ + uint32_t AccParity1BitErrors; /**< Accumulated bit errors at the current SNR point */ + + int32_t ErrorProcessingOption; /**< =1 coded error processing, =0 raw error processing */ + + + int32_t simulationState; /**< simulaton state */ + + int32_t bitWidthInt; /**< Input LLR bit width integer part including sign bit */ + int32_t bitWidthFrac; /**< Number of fractional bits of input LLR */ + int32_t maxStarEn; /**< =1 MaxStar enabled */ + int32_t maxStarThreshold; /**< MaxStar thershold - width of the step function that approximates MaxStar correction term*/ + int32_t maxStarValue; /**< MaxStar value - hight of the step function that approximates MaxStar correction term */ + + int32_t alternateProcInd; /**< =1 alternates process index (0 or 1) during BER/FER computation */ + int32_t initialProcInd; /**< (0or 1) initial process index */ + + + int32_t extrinsicScales[16]; /**< Extrinsic scales for first 16 half iterations in Q5 format */ + int32_t tcp3_SW0_length; /**< Sliding window 0 length in bits {16,32, 48, 64, 96 128} */ + int32_t tcp3_SNR_stopVal; /**< SNR threshold in dB used as a stopping criterion (0-20) */ + int32_t tcp3_SNR_Report; /**< =1 report SNR, =0 do not report SNR */ + int32_t tcp3_stopSel; /**< Stopping criteria: =0 Max iter, =1 CRC, =2 or 3 SNR */ + int32_t tcp3_crcSel; /**< CRC polynomial selector: =0 gCRC24B, =1 gCRC24A */ + int32_t tcp3_intlvGenEn; /**< =0 Internal LTE interleaver table generation disabled, =1 enabled */ + int32_t tcp3_intlvLoadSel; /**< =0 do not load or generate intlv table, =1 load or generate intlv table */ + int32_t tcp3_extrScaleEn; /**< =0 Extrinsic scale disabled, =1 Extrinsics scale enabled */ + int32_t tcp3_softOutBitFormat; /**< =0 - Soft output is truncated from 9 to 8-bits for storage in RAM (i.e. LSB truncated), =1 - Soft output is saturated from 9 to 8-bits for storage in RAM.*/ + int32_t tcp3_outBitOrderSel; /**< =0 - LSB bit first in time, =1 - MSB bit first in time */ + int32_t tcp3_lteCrcInitSel; /**< =0 Use 0x000000 as initial value, =1 Use 0xffffff as initial value */ + int32_t tcp3_lteCrcIterPass; /**< Select number of consecutive LTE CRC matches as stopping criterion =0: 1 match, =1: 2 matches, =2: 3 matches, =3: 4 matches */ + int32_t tcp3_softOutBitsReadEn; /**< =1 sends out soft output bits */ + int32_t tcp3_outStatusReadEn; /**< =1 sends out output status */ + + + /*For device verificaton*/ + int32_t enableTopLvlDeviceVerification; /**< =1 Top level device verification enabled, =0 disabled */ + int32_t enableDeviceVerification; /**< =1 Device verification enabled, =0 disabled */ + int32_t disableBeliefPropagation; /**< =1 Belief propagation enabled, =0 disabled */ + int32_t disableAlphaBeliefPropagation;/**< =1 Belief Alpha propagation enabled, =0 disabled */ + int32_t disableBetaBeliefPropagation; /**< =1 Belief Beta propagation enabled, =0 disabled */ + + int32_t devVerAlphaBlockNumber; /**< Alpha block number used for comparison in device verification */ + int32_t devVerBetaBlockNumber; /**< Beta block number used for comparison in device verification*/ + int32_t devVerExtrBlockNumber; /**< Extrinsic block number used for comparison in device verification*/ + int32_t devVerSendIntermediteInternalMemories; /**< =1 send, =0 do not send */ + int32_t devVerUseLinearInterleaver; /**< =1 interleaver is linear (for testing) =0 regular interleaver*/ + int32_t devVerZeroAprioriInHardDec; /**< Only for device verification, =1 : soft decision = extrinisc + systematic (no apriori) */ + + int32_t saveIntermediateData; /**< =1 Intermediate data recording to files enabled, =0 disabled */ + int32_t beliefPropWithinTurboIterEnabled; /**< =1 Belief propagation within turbo iteration is enabled, =0 disabled, default = 0 */ + + int32_t punctureInterval; /**< Used for testing: punctures (punctureInterval-1) out of punctureInterval parity bits, =-1 puncturing disabled, default = -1 */ + int32_t enableRateMatching; /**< =1 Rate matching enabled, =0 disabled, default = 0 */ + float codingRate; /**< If rate matching is enabled, coding rate */ + int32_t redundancyVersionNumber; /**< Reundancy version number for LTE rate matching */ + int32_t loadInfoBitsFromFile; /**< =0 info bits generated internally, =1 info bits read from file */ + int32_t infoBitsFileIncludesCRC; /**< =1 File with info bits includes crc, =0 crc not included */ + char infoBitsFileName[128]; /**< File name with the input bits to the encoder, used if loadInfoBitsFromFile=1 or storeInfoBitsToFile=1 */ + int32_t storeCodedBitsToFile; /**< =1 coded bits stored to file, =0 not stored */ + int32_t storeInfoBitsToFile; /**< =1 info bits stored to file, =0 not stored */ + char codedBitsFileName[128]; /**< File name with the coded bits, used if storeCodedBitsToFile=1 */ + int32_t use_tcp3_encoder_c_model; /**< =1 Use TCP3 encoder C model, =0 use existing encoders within the transmitter */ +} TCP3_SIM_PARMS; + + +/** + * \struct _TCP3_SIM_PARMS + * + * \brief The structure holds all tcp3d control and configuration register parameters + * + * \sa + * + */ +typedef struct _TCP3_REGS +{ + int32_t mode_sel; //TCP3_MODE + int32_t in_mem_db_en; + int32_t itg_en; + int32_t err_ignore_en; + int32_t auto_trig_en; + int32_t lte_crc_init_sel; + int32_t trig; //TRIGGER_REG + int32_t endian_intr; //TCP_ENDIAN + int32_t endian_indata; + int32_t exe_cmd; //TCP3_EXE + int32_t num_sw0; //CFG0 + int32_t blk_ln; + int32_t sw1_ln; //CFG1 + int32_t sw2_ln_sel; + int32_t sw0_ln_sel; + int32_t inter_load_sel; //CFG2 + int32_t maxst_en; + int32_t out_flag_en; + int32_t out_order_sel; + int32_t ext_scale_en; + int32_t soft_out_flag_en; + int32_t soft_out_order_sel; + int32_t soft_out_fmt; + int32_t min_itr; + int32_t max_itr; + int32_t snr_val; + int32_t snr_rep; + int32_t stop_sel; + int32_t crc_iter_pass; + int32_t crc_sel; + int32_t maxst_thold; //CFG3 + int32_t maxst_value; + int32_t beta_st0_map0; //CFG4 + int32_t beta_st1_map0; + int32_t beta_st2_map0; + int32_t beta_st3_map0; + int32_t beta_st4_map0; //CFG5 + int32_t beta_st5_map0; + int32_t beta_st6_map0; + int32_t beta_st7_map0; + int32_t beta_st0_map1; //CFG6 + int32_t beta_st1_map1; + int32_t beta_st2_map1; + int32_t beta_st3_map1; + int32_t beta_st4_map1; //CFG7 + int32_t beta_st5_map1; + int32_t beta_st6_map1; + int32_t beta_st7_map1; + int32_t ext_scale_0; //CFG8 + int32_t ext_scale_1; + int32_t ext_scale_2; + int32_t ext_scale_3; + int32_t ext_scale_4; //CFG9 + int32_t ext_scale_5; + int32_t ext_scale_6; + int32_t ext_scale_7; + int32_t ext_scale_8; //CFG10 + int32_t ext_scale_9; + int32_t ext_scale_10; + int32_t ext_scale_11; + int32_t ext_scale_12; //CFG11 + int32_t ext_scale_13; + int32_t ext_scale_14; + int32_t ext_scale_15; + int32_t itg_param_0; //CFG12 + int32_t itg_param_1; + int32_t itg_param_2; //CFG13 + int32_t itg_param_3; + int32_t itg_param_4; //CFG14 + //Not part of tcp3 registers: + int32_t proc_id; + int32_t ExtndNumInfoBits; + int32_t NumInfoBits; + int32_t IntlvLen; + int32_t SW0_length; +} TCP3_REGS; + + + + +typedef struct _CODE_BLOCK_PARMS +{ + TCP3_SIM_PARMS sparms; + TCP3_REGS reg; + int8_t sysLLR[8192]; + int8_t par0LLR[8192]; + int8_t par1LLR[8192]; + int8_t tailLLRs[12]; + int16_t interleaver[8192]; + uint32_t ref_infoBits[256]; + uint32_t ref_hardDecisions[256]; + int8_t ref_softDecisions[3][8192]; + uint32_t ref_outStatus[3]; + + uint32_t ssi_hardDecisions[256]; + int8_t ssi_softDecisions[3][8192]; + uint32_t ssi_outStatus[3]; + + int32_t codeBlockNumber; //block number read from the codeBlockList file + + int32_t transferError; + +} CODE_BLOCK_PARMS; + + +#endif \ No newline at end of file diff --git a/test/gen_test_vectors/include/typedefs.h b/test/gen_test_vectors/include/typedefs.h new file mode 100644 index 0000000..057c739 --- /dev/null +++ b/test/gen_test_vectors/include/typedefs.h @@ -0,0 +1,81 @@ +/*========================================================================== +* Copyright (c) Texas Instruments Incorporated 2006, 2007, 2008, 2009, 2010 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#ifndef _TYPEDEFS_H_ +#define _TYPEDEFS_H_ +#include + +#if (CC_VERSION == 42) + #ifdef bool + #undef bool + #endif + #define bool uint8_t + #define true 1 + #define false 0 +#endif + +#if !defined(_SYS_INT_TYPES_H) && !defined(__BIT_TYPES_DEFINED__) +typedef unsigned char uint8_t; +typedef signed char int8_t; +typedef unsigned short uint16_t; +typedef short int16_t; +typedef unsigned int uint32_t; +typedef int int32_t; + +#ifdef _WIN32 +#ifndef GCC +typedef unsigned __int64 uint64_t; +typedef __int64 int64_t; +#else +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif +#else +typedef unsigned long long uint64_t; +typedef long long int64_t; +#endif/*WIN32*/ + +#elif defined(__BIT_TYPES_DEFINED__) +typedef u_int8_t uint8_t; +typedef u_int16_t uint16_t; +typedef u_int32_t uint32_t; +typedef u_int64_t uint64_t; +#endif /* !defined(_SYS_INT_TYPES_H) && !defined(__bit_types_defined__) */ +#if defined(__hpux) +#define tid_t tid_t_t +#endif + +#ifndef WIN32 +#define stricmp strcasecmp +#endif +#endif /*_TYPEDEFS_H_*/ diff --git a/test/gen_test_vectors/msvc/Debug/GenTestVectors.exe b/test/gen_test_vectors/msvc/Debug/GenTestVectors.exe new file mode 100755 index 0000000000000000000000000000000000000000..3a94cc903a728ba093bb0315a244dc07006727d7 GIT binary patch literal 245870 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�LvY{&C^MEeoy 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 NHAVFq8Sqw+{{uL4(#8M) literal 0 HcmV?d00001 diff --git a/test/gen_test_vectors/msvc/GenTestVectors.dsp b/test/gen_test_vectors/msvc/GenTestVectors.dsp new file mode 100644 index 0000000..850b770 --- /dev/null +++ b/test/gen_test_vectors/msvc/GenTestVectors.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="GenTestVectors" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=GenTestVectors - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "GenTestVectors.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "GenTestVectors.mak" CFG="GenTestVectors - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "GenTestVectors - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "GenTestVectors - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "GenTestVectors" +# PROP Scc_LocalPath ".." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "GenTestVectors - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "GenTestVectors - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "GenTestVectors - Win32 Release" +# Name "GenTestVectors - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\src\conv2bin.c +# End Source File +# Begin Source File + +SOURCE=..\src\GenTestVectorsMain.c +# End Source File +# Begin Source File + +SOURCE=..\src\load_config.c +# End Source File +# Begin Source File + +SOURCE=..\src\set_reg.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/test/gen_test_vectors/sim_config/LTE/lte_list.cfg b/test/gen_test_vectors/sim_config/LTE/lte_list.cfg new file mode 100644 index 0000000..5c6dca5 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/lte_list.cfg @@ -0,0 +1,20 @@ +test1_config1.cfg +test1_config2.cfg +test1_config3.cfg +test1_config4.cfg +test1_config5.cfg +test1_config6.cfg +test4_config1.cfg +test4_config2.cfg +test4_config3.cfg +test4_config4.cfg +test7_config1.cfg +test7_config2.cfg +test7_config3.cfg +test7_config4.cfg +test10_config1.cfg +test10_config2.cfg +test10_config3.cfg +test10_config4.cfg +test10_config5.cfg +test10_config6.cfg diff --git a/test/gen_test_vectors/sim_config/LTE/test10_config1.cfg b/test/gen_test_vectors/sim_config/LTE/test10_config1.cfg new file mode 100644 index 0000000..ed307d4 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_config1.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test10_config2.cfg b/test/gen_test_vectors/sim_config/LTE/test10_config2.cfg new file mode 100644 index 0000000..583208a --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_config2.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 2 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test10_config3.cfg b/test/gen_test_vectors/sim_config/LTE/test10_config3.cfg new file mode 100644 index 0000000..90a1244 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_config3.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 3 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test10_config4.cfg b/test/gen_test_vectors/sim_config/LTE/test10_config4.cfg new file mode 100644 index 0000000..8cd9dc1 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_config4.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 4 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test10_config5.cfg b/test/gen_test_vectors/sim_config/LTE/test10_config5.cfg new file mode 100644 index 0000000..1ce3848 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test10_config6.cfg b/test/gen_test_vectors/sim_config/LTE/test10_config6.cfg new file mode 100644 index 0000000..0681fa8 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 6 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test10_list.cfg b/test/gen_test_vectors/sim_config/LTE/test10_list.cfg new file mode 100644 index 0000000..aaea460 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test10_list.cfg @@ -0,0 +1,6 @@ +test10_config1.cfg +test10_config2.cfg +test10_config3.cfg +test10_config4.cfg +test10_config5.cfg +test10_config6.cfg diff --git a/test/gen_test_vectors/sim_config/LTE/test1_config1.cfg b/test/gen_test_vectors/sim_config/LTE/test1_config1.cfg new file mode 100644 index 0000000..4095ebf --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test1_config2.cfg b/test/gen_test_vectors/sim_config/LTE/test1_config2.cfg new file mode 100644 index 0000000..a18139b --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 92 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -10 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test1_config3.cfg b/test/gen_test_vectors/sim_config/LTE/test1_config3.cfg new file mode 100644 index 0000000..9356800 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 93 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#cp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test1_config4.cfg b/test/gen_test_vectors/sim_config/LTE/test1_config4.cfg new file mode 100644 index 0000000..1d0022a --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 94 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test1_config5.cfg b/test/gen_test_vectors/sim_config/LTE/test1_config5.cfg new file mode 100644 index 0000000..6dc6b51 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test1_config6.cfg b/test/gen_test_vectors/sim_config/LTE/test1_config6.cfg new file mode 100644 index 0000000..6c373e5 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test1_list.cfg b/test/gen_test_vectors/sim_config/LTE/test1_list.cfg new file mode 100644 index 0000000..71f4258 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test1_list.cfg @@ -0,0 +1,6 @@ +test1_config1.cfg +test1_config2.cfg +test1_config3.cfg +test1_config4.cfg +test1_config5.cfg +test1_config6.cfg diff --git a/test/gen_test_vectors/sim_config/LTE/test4_config1.cfg b/test/gen_test_vectors/sim_config/LTE/test4_config1.cfg new file mode 100644 index 0000000..bd87e4d --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test4_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<======LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test4_config2.cfg b/test/gen_test_vectors/sim_config/LTE/test4_config2.cfg new file mode 100644 index 0000000..3e5a7bc --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test4_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 81 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 1; #<======LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test4_config3.cfg b/test/gen_test_vectors/sim_config/LTE/test4_config3.cfg new file mode 100644 index 0000000..7413385 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test4_config3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 0; +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test4_config4.cfg b/test/gen_test_vectors/sim_config/LTE/test4_config4.cfg new file mode 100644 index 0000000..6372c06 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test4_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 81 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 0; #do not load interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test4_list.cfg b/test/gen_test_vectors/sim_config/LTE/test4_list.cfg new file mode 100644 index 0000000..67b6dc0 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test4_list.cfg @@ -0,0 +1,4 @@ +test4_config1.cfg +test4_config2.cfg +test4_config3.cfg +test4_config4.cfg diff --git a/test/gen_test_vectors/sim_config/LTE/test7_config1.cfg b/test/gen_test_vectors/sim_config/LTE/test7_config1.cfg new file mode 100644 index 0000000..bd87e4d --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test7_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<======LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test7_config2.cfg b/test/gen_test_vectors/sim_config/LTE/test7_config2.cfg new file mode 100644 index 0000000..3e5a7bc --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test7_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 81 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 1; #<======LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test7_config3.cfg b/test/gen_test_vectors/sim_config/LTE/test7_config3.cfg new file mode 100644 index 0000000..7413385 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test7_config3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 0; +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test7_config4.cfg b/test/gen_test_vectors/sim_config/LTE/test7_config4.cfg new file mode 100644 index 0000000..6372c06 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test7_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 81 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 0; #do not load interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/LTE/test7_list.cfg b/test/gen_test_vectors/sim_config/LTE/test7_list.cfg new file mode 100644 index 0000000..c5ccc96 --- /dev/null +++ b/test/gen_test_vectors/sim_config/LTE/test7_list.cfg @@ -0,0 +1,4 @@ +test7_config1.cfg +test7_config2.cfg +test7_config3.cfg +test7_config4.cfg diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config1.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config1.cfg new file mode 100644 index 0000000..44f2c5f --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config1.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config10.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config10.cfg new file mode 100644 index 0000000..34ece04 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config10.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 800 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config11.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config11.cfg new file mode 100644 index 0000000..c35c3e2 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config11.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 810 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config12.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config12.cfg new file mode 100644 index 0000000..fb39ba7 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config12.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 820 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config2.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config2.cfg new file mode 100644 index 0000000..a3c6529 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config2.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 101 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config3.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config3.cfg new file mode 100644 index 0000000..6440f59 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config3.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 102 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config4.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config4.cfg new file mode 100644 index 0000000..263e429 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config4.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 103 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579160 #1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config5.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config5.cfg new file mode 100644 index 0000000..3c8bc9e --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 104 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579170 #1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config6.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config6.cfg new file mode 100644 index 0000000..26b1e4a --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 105 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config7.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config7.cfg new file mode 100644 index 0000000..52bd745 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config7.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 106 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config8.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config8.cfg new file mode 100644 index 0000000..5042240 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config8.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 107 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_config9.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_config9.cfg new file mode 100644 index 0000000..53cda94 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_config9.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 2000 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test11_list.cfg b/test/gen_test_vectors/sim_config/WCDMA/test11_list.cfg new file mode 100644 index 0000000..ebd5514 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test11_list.cfg @@ -0,0 +1,12 @@ +test11_config1.cfg +test11_config2.cfg +test11_config3.cfg +test11_config4.cfg +test11_config5.cfg +test11_config6.cfg +test11_config7.cfg +test11_config8.cfg +test11_config9.cfg +test11_config10.cfg +test11_config11.cfg +test11_config12.cfg diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config1.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config1.cfg new file mode 100644 index 0000000..a80d468 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config1.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 10 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config10.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config10.cfg new file mode 100644 index 0000000..34ece04 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config10.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 800 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config11.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config11.cfg new file mode 100644 index 0000000..c35c3e2 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config11.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 810 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config12.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config12.cfg new file mode 100644 index 0000000..fb39ba7 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config12.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 820 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config2.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config2.cfg new file mode 100644 index 0000000..e0ee631 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config2.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 101 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config3.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config3.cfg new file mode 100644 index 0000000..94ed703 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config3.cfg @@ -0,0 +1,42 @@ +Coding_standard = 3 +Frame_size_index = 102 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config4.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config4.cfg new file mode 100644 index 0000000..c4e7b9d --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config4.cfg @@ -0,0 +1,42 @@ +Coding_standard = 3 +Frame_size_index = 103 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config5.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config5.cfg new file mode 100644 index 0000000..aa21036 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config5.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 104 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config6.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config6.cfg new file mode 100644 index 0000000..c89e06f --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config6.cfg @@ -0,0 +1,41 @@ +Coding_standard = 3 +Frame_size_index = 105 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config7.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config7.cfg new file mode 100644 index 0000000..52bd745 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config7.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 106 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config8.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config8.cfg new file mode 100644 index 0000000..5042240 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config8.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 107 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_config9.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_config9.cfg new file mode 100644 index 0000000..53cda94 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_config9.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 2000 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test3_list.cfg b/test/gen_test_vectors/sim_config/WCDMA/test3_list.cfg new file mode 100644 index 0000000..1594011 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test3_list.cfg @@ -0,0 +1,12 @@ +test3_config1.cfg +test3_config2.cfg +test3_config3.cfg +test3_config4.cfg +test3_config5.cfg +test3_config6.cfg +test3_config7.cfg +test3_config8.cfg +test3_config9.cfg +test3_config10.cfg +test3_config11.cfg +test3_config12.cfg diff --git a/test/gen_test_vectors/sim_config/WCDMA/test6_config1.cfg b/test/gen_test_vectors/sim_config/WCDMA/test6_config1.cfg new file mode 100644 index 0000000..e565b43 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test6_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 5113 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test6_config2.cfg b/test/gen_test_vectors/sim_config/WCDMA/test6_config2.cfg new file mode 100644 index 0000000..66a39f6 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test6_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 5114 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test6_list.cfg b/test/gen_test_vectors/sim_config/WCDMA/test6_list.cfg new file mode 100644 index 0000000..55e5e73 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test6_list.cfg @@ -0,0 +1,2 @@ +test6_config1.cfg +test6_config2.cfg diff --git a/test/gen_test_vectors/sim_config/WCDMA/test9_config1.cfg b/test/gen_test_vectors/sim_config/WCDMA/test9_config1.cfg new file mode 100644 index 0000000..b15ca44 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test9_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2001 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test9_config2.cfg b/test/gen_test_vectors/sim_config/WCDMA/test9_config2.cfg new file mode 100644 index 0000000..ce0d45e --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test9_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 2002 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WCDMA/test9_list.cfg b/test/gen_test_vectors/sim_config/WCDMA/test9_list.cfg new file mode 100644 index 0000000..fc5c43f --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/test9_list.cfg @@ -0,0 +1,2 @@ +test9_config1.cfg +test9_config2.cfg diff --git a/test/gen_test_vectors/sim_config/WCDMA/wcdma_list.cfg b/test/gen_test_vectors/sim_config/WCDMA/wcdma_list.cfg new file mode 100644 index 0000000..54f1a77 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WCDMA/wcdma_list.cfg @@ -0,0 +1,28 @@ +test3_config1.cfg +test3_config2.cfg +test3_config3.cfg +test3_config4.cfg +test3_config5.cfg +test3_config6.cfg +test3_config7.cfg +test3_config8.cfg +test3_config9.cfg +test3_config10.cfg +test3_config11.cfg +test3_config12.cfg +test6_config1.cfg +test6_config2.cfg +test9_config1.cfg +test9_config2.cfg +test11_config1.cfg +test11_config2.cfg +test11_config3.cfg +test11_config4.cfg +test11_config5.cfg +test11_config6.cfg +test11_config7.cfg +test11_config8.cfg +test11_config9.cfg +test11_config10.cfg +test11_config11.cfg +test11_config12.cfg diff --git a/test/gen_test_vectors/sim_config/WIMAX/test2_config1.cfg b/test/gen_test_vectors/sim_config/WIMAX/test2_config1.cfg new file mode 100644 index 0000000..1e56818 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test2_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test2_config2.cfg b/test/gen_test_vectors/sim_config/WIMAX/test2_config2.cfg new file mode 100644 index 0000000..efc0f8c --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test2_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test2_config3.cfg b/test/gen_test_vectors/sim_config/WIMAX/test2_config3.cfg new file mode 100644 index 0000000..ad96872 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test2_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test2_config4.cfg b/test/gen_test_vectors/sim_config/WIMAX/test2_config4.cfg new file mode 100644 index 0000000..18b596c --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test2_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test2_config5.cfg b/test/gen_test_vectors/sim_config/WIMAX/test2_config5.cfg new file mode 100644 index 0000000..cb7cd75 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test2_config5.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test2_list.cfg b/test/gen_test_vectors/sim_config/WIMAX/test2_list.cfg new file mode 100644 index 0000000..791f604 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test2_list.cfg @@ -0,0 +1,5 @@ +test2_config1.cfg +test2_config2.cfg +test2_config3.cfg +test2_config4.cfg +test2_config5.cfg diff --git a/test/gen_test_vectors/sim_config/WIMAX/test5_config1.cfg b/test/gen_test_vectors/sim_config/WIMAX/test5_config1.cfg new file mode 100644 index 0000000..a164146 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test5_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test5_config2.cfg b/test/gen_test_vectors/sim_config/WIMAX/test5_config2.cfg new file mode 100644 index 0000000..dcd00fe --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test5_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test5_config3.cfg b/test/gen_test_vectors/sim_config/WIMAX/test5_config3.cfg new file mode 100644 index 0000000..3f1cac7 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test5_config3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 0; #<======DO NOT LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test5_config4.cfg b/test/gen_test_vectors/sim_config/WIMAX/test5_config4.cfg new file mode 100644 index 0000000..fee995a --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test5_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 0; #<======DO NOT LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test5_list.cfg b/test/gen_test_vectors/sim_config/WIMAX/test5_list.cfg new file mode 100644 index 0000000..13c61ba --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test5_list.cfg @@ -0,0 +1,4 @@ +test5_config1.cfg +test5_config2.cfg +test5_config3.cfg +test5_config4.cfg diff --git a/test/gen_test_vectors/sim_config/WIMAX/test8_config1.cfg b/test/gen_test_vectors/sim_config/WIMAX/test8_config1.cfg new file mode 100644 index 0000000..a164146 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test8_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test8_config2.cfg b/test/gen_test_vectors/sim_config/WIMAX/test8_config2.cfg new file mode 100644 index 0000000..dcd00fe --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test8_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test8_config3.cfg b/test/gen_test_vectors/sim_config/WIMAX/test8_config3.cfg new file mode 100644 index 0000000..3f1cac7 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test8_config3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 0; #<======DO NOT LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test8_config4.cfg b/test/gen_test_vectors/sim_config/WIMAX/test8_config4.cfg new file mode 100644 index 0000000..fee995a --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test8_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 0; #<======DO NOT LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/WIMAX/test8_list.cfg b/test/gen_test_vectors/sim_config/WIMAX/test8_list.cfg new file mode 100644 index 0000000..16662d8 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/test8_list.cfg @@ -0,0 +1,4 @@ +test8_config1.cfg +test8_config2.cfg +test8_config3.cfg +test8_config4.cfg diff --git a/test/gen_test_vectors/sim_config/WIMAX/wimax_list.cfg b/test/gen_test_vectors/sim_config/WIMAX/wimax_list.cfg new file mode 100644 index 0000000..c16b679 --- /dev/null +++ b/test/gen_test_vectors/sim_config/WIMAX/wimax_list.cfg @@ -0,0 +1,13 @@ +test2_config1.cfg +test2_config2.cfg +test2_config3.cfg +test2_config4.cfg +test2_config5.cfg +test5_config1.cfg +test5_config2.cfg +test5_config3.cfg +test5_config4.cfg +test8_config1.cfg +test8_config2.cfg +test8_config3.cfg +test8_config4.cfg diff --git a/test/gen_test_vectors/sim_config/test12_config1.cfg b/test/gen_test_vectors/sim_config/test12_config1.cfg new file mode 100644 index 0000000..a793986 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 0 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_softOutBitsReadEn = 1 +tcp3_outStatusReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config10.cfg b/test/gen_test_vectors/sim_config/test12_config10.cfg new file mode 100644 index 0000000..c36ef67 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config10.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 800 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config11.cfg b/test/gen_test_vectors/sim_config/test12_config11.cfg new file mode 100644 index 0000000..d753f4d --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config11.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 810 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config12.cfg b/test/gen_test_vectors/sim_config/test12_config12.cfg new file mode 100644 index 0000000..770f8b9 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config12.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 820 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config2.cfg b/test/gen_test_vectors/sim_config/test12_config2.cfg new file mode 100644 index 0000000..98b85a3 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config2.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 101 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config3.cfg b/test/gen_test_vectors/sim_config/test12_config3.cfg new file mode 100644 index 0000000..84e8db4 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config3.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 102 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config4.cfg b/test/gen_test_vectors/sim_config/test12_config4.cfg new file mode 100644 index 0000000..ccca305 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config4.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 103 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config5.cfg b/test/gen_test_vectors/sim_config/test12_config5.cfg new file mode 100644 index 0000000..8007794 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 104 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config6.cfg b/test/gen_test_vectors/sim_config/test12_config6.cfg new file mode 100644 index 0000000..b22d1b7 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 105 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config7.cfg b/test/gen_test_vectors/sim_config/test12_config7.cfg new file mode 100644 index 0000000..72e25df --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config7.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 106 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config8.cfg b/test/gen_test_vectors/sim_config/test12_config8.cfg new file mode 100644 index 0000000..1b3c3a9 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config8.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 107 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_config9.cfg b/test/gen_test_vectors/sim_config/test12_config9.cfg new file mode 100644 index 0000000..3b4a9dc --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_config9.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 2000 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test12_list.cfg b/test/gen_test_vectors/sim_config/test12_list.cfg new file mode 100644 index 0000000..7cb2caf --- /dev/null +++ b/test/gen_test_vectors/sim_config/test12_list.cfg @@ -0,0 +1,12 @@ +test12_config1.cfg +test12_config2.cfg +test12_config3.cfg +test12_config4.cfg +test12_config5.cfg +test12_config6.cfg +test12_config7.cfg +test12_config8.cfg +test12_config9.cfg +test12_config10.cfg +test12_config11.cfg +test12_config12.cfg diff --git a/test/gen_test_vectors/sim_config/test13_config1.cfg b/test/gen_test_vectors/sim_config/test13_config1.cfg new file mode 100644 index 0000000..a793986 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test13_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 0 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_softOutBitsReadEn = 1 +tcp3_outStatusReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test13_config2.cfg b/test/gen_test_vectors/sim_config/test13_config2.cfg new file mode 100644 index 0000000..37c0b86 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test13_config2.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 5555555555 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test13_config3.cfg b/test/gen_test_vectors/sim_config/test13_config3.cfg new file mode 100644 index 0000000..92d9792 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test13_config3.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 102 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 2222222222 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test13_config4.cfg b/test/gen_test_vectors/sim_config/test13_config4.cfg new file mode 100644 index 0000000..f296087 --- /dev/null +++ b/test/gen_test_vectors/sim_config/test13_config4.cfg @@ -0,0 +1,36 @@ +Coding_standard = 0 +Frame_size_index = 103 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 666666666 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/sim_config/test13_list.cfg b/test/gen_test_vectors/sim_config/test13_list.cfg new file mode 100644 index 0000000..3a1cc6f --- /dev/null +++ b/test/gen_test_vectors/sim_config/test13_list.cfg @@ -0,0 +1,5 @@ +test13_config1.cfg +test13_config2.cfg +test13_config3.cfg +test13_config4.cfg + diff --git a/test/gen_test_vectors/simulator/config_list.cfg b/test/gen_test_vectors/simulator/config_list.cfg new file mode 100644 index 0000000..6b81a66 --- /dev/null +++ b/test/gen_test_vectors/simulator/config_list.cfg @@ -0,0 +1 @@ +config.cfg diff --git a/test/gen_test_vectors/simulator/debug/Test_c_model.exe b/test/gen_test_vectors/simulator/debug/Test_c_model.exe new file mode 100755 index 0000000000000000000000000000000000000000..adc500a583509ce2fb3e46e94579442b437fc8f5 GIT binary patch literal 258167 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%0D&c31EJt-)DiF<|je+){5; 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 O+2_3V4Wq+*GXDkG3CUCd literal 0 HcmV?d00001 diff --git a/test/gen_test_vectors/src/GenTestVectorsMain.c b/test/gen_test_vectors/src/GenTestVectorsMain.c new file mode 100644 index 0000000..d8d5625 --- /dev/null +++ b/test/gen_test_vectors/src/GenTestVectorsMain.c @@ -0,0 +1,427 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include +#include +#include +#include +#include +//#include +//#include +#include +#include "typedefs.h" +#include "sim_param.h" +#include "cfg_param.h" + +char *folderName; +char *folderNameOut; +char *listFileName; +char fullName[300]; +char **codeBlockList; +int32_t numCodeBlocks; +int32_t codeBlockCntr; +char *outFileType = {"BOTH"}; + +TCP3_SIM_PARMS sparms; +TCP3_REGS reg; +OUT_TCP3_REGS outReg; + +int32_t readCodeBlockList(char * blockListName); +void freeCodeBlockList(void); +void SetReg(TCP3_SIM_PARMS *sparms, TCP3_REGS *reg); +void LoadConfig(char *cfgFileName, TCP3_SIM_PARMS *sparms); +int32_t get_code_block(char *cfgFileName, int32_t Cntr); +int32_t save_code_block_files(char *folderName, int32_t cntr); +void SetOutReg(TCP3_REGS *reg, OUT_TCP3_REGS *outReg); +void conv2bin(char *infile, char *outfile, int type); + +//******************************************************************** +//This program generates input test vectors for the TCP3d driver +//Folder structure: +//+---gen_test_vectors +//¦ +---include +//¦ +---msvc +//¦ ¦ +---Debug +//¦ +---simulator +//¦ ¦ +---debug +//¦ +---src +//¦ ¦ +---Debug +//¦ +---test1_split +//¦ +---test2_split +//¦ +---test3_split +// +// Program GenerateTestVectors.exe is executed from the folder gen_test_vectors. +// Usage form dos prompt: +// 1) Goto gen_test_vectors directory +// 2) Then ./msvc/debug/GenerateTestVectors.exe folder_name list_file_name +// Program arguments: +// folder_name - Folder name with the configuration files in the gen_test_vectors. +// Example folders: test1_split, test2_split,... +// list_file_name - List file with the configuration file names to be processed. Configuration +// files must be in the same folder. All configuration files in the folder +// should be set for the same mode (lte, wimax or wcdma), and one code block +// per file. +// The following configuration parmeters must be set as: +// Save_intermediate_data = 1 +// Minimum_number_of_FEC_blocks = 1 +// Maximum_number_of_FEC_blocks = 1 +// Snr_increment_step = 0 +// Minimum_number_of_frame_errors = 0 +// Program opens the the list file, reads configuration file names and +// per each configuration file perfoms: +// 1. Copies configuration file to config.cfg in the simulator folder, +// 2. Runs the simulator executable from the simulator\debug folder, +// 3. Copies generated files form simulator\debug folder to the folder_name. +// +//******************************************************************** +void main(int argc, char * argv[]) +{ + int32_t isFound; + FILE *fid; + + if(argc < 3) + { + printf("Program %s must be called with minimum 2 arguments:\n", argv[0]); + printf(" Syntax:\n\t%s folder_name list_file_name \n", argv[0]); + return; + } + + folderName = argv[1]; + listFileName = argv[2]; + strcpy(fullName, folderName); + strcat(fullName, "\\"); + strcat(fullName, listFileName); + + if (argc == 4) + { + folderNameOut = argv[3]; + } + else + { + folderNameOut = argv[1]; + } + + if (argc == 5) + { + outFileType = argv[4]; + } + + isFound = readCodeBlockList(fullName); + if(isFound == 0) + { + printf("List file %s is not found!\n", fullName); + return; + } + + + for(codeBlockCntr=0; codeBlockCntr +#include +#include + +//#define DEBUG_CONV2BIN 0 - define in the compile options for prints + +#define DATA_LLRS 0 +#define DATA_BITS 1 + +//Converts input formated data file to output binary file +//Two type of input data files: +// 1. LLR data file - file contains three columns of LLRs: systematic, parity0, parity1 LLRs ar signed 8-bit numbers +// 2. Bits file - file with bits packed in 32-bit words in hex format +//Output file is binary file +//LLR data are stored in 32-bit words in three LSB bytes as [Byte3, Byte2,Byte1, Byte0] = [0, Sys, Par0, Par1] +void conv2bin(char *infile, char *outfile, int type) +{ + + FILE *fidIn, *fidOut; + char buffer[300]; + unsigned int val; + int cnt, LLRLen; + int sys, par0, par1; + char *sysPtr, *par0Ptr, *par1Ptr; + + //Open input file, either bits in hex format, or 8-bit LLRs in 3 column integer format + if( (fidIn = fopen(infile,"r")) == NULL) + { + printf("File %s is not found!\n", infile); + return; + } + + //Get the LLRs size + LLRLen = 0; + if(type == DATA_LLRS) + { + while(fgets(buffer,300,fidIn) != NULL) + { + LLRLen++; + } + } + fclose(fidIn); + + //Open input file + fidIn = fopen(infile, "r"); + + //Open output binary file + fidOut = fopen(outfile, "wb"); + + //Read from input and write to output file + if(type == DATA_BITS) + { + cnt=0; + while(fgets(buffer,300,fidIn) != NULL) + { + sscanf(buffer, "%x", &val); + fwrite(&val, sizeof(int), 1, fidOut); + cnt++; + } +#ifdef DEBUG_CONV2BIN + printf("Info bits file, converted %d lines!\n", cnt); +#endif + } + else + { + cnt=0; + sysPtr = malloc(LLRLen); + par0Ptr = malloc(LLRLen); + par1Ptr = malloc(LLRLen); + while(fgets(buffer,300,fidIn) != NULL) + { + sscanf(buffer, "%d %d %d", &sys, &par0, &par1); + sysPtr[cnt] = sys; + par0Ptr[cnt] = par0; + par1Ptr[cnt] = par1; + cnt++; + } + fwrite(sysPtr, sizeof(char), LLRLen, fidOut); + fwrite(par0Ptr, sizeof(char), LLRLen, fidOut); + fwrite(par1Ptr, sizeof(char), LLRLen, fidOut); +#ifdef DEBUG_CONV2BIN + printf("LLR data file, converted %d lines!\n", cnt); +#endif + } + fclose(fidIn); + fclose(fidOut); +} \ No newline at end of file diff --git a/test/gen_test_vectors/src/initial_beta_calc.c b/test/gen_test_vectors/src/initial_beta_calc.c new file mode 100644 index 0000000..d31ec0f --- /dev/null +++ b/test/gen_test_vectors/src/initial_beta_calc.c @@ -0,0 +1,266 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include "sim_param.h" + +//**************************************************************************** +//Calculates initial beta states for 3gpp and stores them into the register +//structure. The 12 input tail bit LLRs are stored in array of 12 elements, first +//six elements correspond to tail bits of encoder 1, next 6 elements correspond +// to encoder 2. +//**************************************************************************** +void Initial_beta_calc(TCP3_REGS *reg, int8_t tail_llrs[]) +{ + int32_t xt0[6]; + int32_t xt1[6]; + int32_t i, Kt; + int32_t beta0[8]; + int32_t beta1[8]; + int32_t betaMax; + + + //Initial beta states (only for LTE and 3GPP) + if(reg->mode_sel != 2) + { + //In LTE or 3gpp handle tail bits: + Kt = 3 - (reg->ExtndNumInfoBits - reg->NumInfoBits); //number of tail stages + if(Kt==3) + { + for(i=0; i<6; i++) + { + xt0[i] = tail_llrs[i]; //MAP 0 tail bits + xt1[i] = tail_llrs[i+6]; //MAP 1 tail bits + } + beta0[0] = 0; + beta0[1] = xt0[0] + xt0[1]; + beta0[2] = xt0[0] + xt0[2] + xt0[3]; + beta0[3] = xt0[1] + xt0[2] + xt0[3]; + beta0[4] = xt0[1] + xt0[2] + xt0[4] + xt0[5]; + beta0[5] = xt0[0] + xt0[2] + xt0[4] + xt0[5]; + beta0[6] = xt0[0] + xt0[1] + xt0[3] + xt0[4] + xt0[5]; + beta0[7] = xt0[3] + xt0[4] + xt0[5]; + + betaMax = beta0[0]; + for(i=1; i<8; i++) + { + if(beta0[i]>betaMax) + betaMax = beta0[i]; + } + for(i=0; i<8; i++) + { + beta0[i] += 127 - betaMax; + } + + beta1[0] = 0; + beta1[1] = xt1[0] + xt1[1]; + beta1[2] = xt1[0] + xt1[2] + xt1[3]; + beta1[3] = xt1[1] + xt1[2] + xt1[3]; + beta1[4] = xt1[1] + xt1[2] + xt1[4] + xt1[5]; + beta1[5] = xt1[0] + xt1[2] + xt1[4] + xt1[5]; + beta1[6] = xt1[0] + xt1[1] + xt1[3] + xt1[4] + xt1[5]; + beta1[7] = xt1[3] + xt1[4] + xt1[5]; + + betaMax = beta1[0]; + for(i=1; i<8; i++) + { + if(beta1[i]>betaMax) + betaMax = beta1[i]; + } + for(i=0; i<8; i++) + { + beta1[i] += 127 - betaMax; + } + } + else if(Kt==2) + { + for(i=0; i<4; i++) + { + xt0[i] = tail_llrs[i+2]; //MAP 0 + xt1[i] = tail_llrs[i+2+6]; //MAP 1 + } + beta0[0] = 0; + beta0[1] = xt0[0] + xt0[1]; + beta0[2] = xt0[0] + xt0[2] + xt0[3]; + beta0[3] = xt0[1] + xt0[2] + xt0[3]; + + betaMax = beta0[0]; + for(i=1; i<4; i++) + { + if(beta0[i]>betaMax) + betaMax = beta0[i]; + } + for(i=0; i<4; i++) + { + beta0[i] += 127 - betaMax; + } + for(i=4; i<8; i++) + { + beta0[i] = -127; + } + + beta1[0] = 0; + beta1[1] = xt1[0] + xt1[1]; + beta1[2] = xt1[0] + xt1[2] + xt1[3]; + beta1[3] = xt1[1] + xt1[2] + xt1[3]; + + betaMax = beta1[0]; + for(i=1; i<4; i++) + { + if(beta1[i]>betaMax) + betaMax = beta1[i]; + } + for(i=0; i<4; i++) + { + beta1[i] += 127 - betaMax; + } + for(i=4; i<8; i++) + { + beta1[i] = -127; + } + } + else if(Kt==1) + { + for(i=0; i<2; i++) + { + xt0[i] = tail_llrs[i+4]; //MAP 0 + xt1[i] = tail_llrs[i+4+6]; //MAP 1 + } + beta0[0] = 0; + beta0[1] = xt0[0] + xt0[1]; + + betaMax = beta0[0]; + for(i=1; i<2; i++) + { + if(beta0[i]>betaMax) + betaMax = beta0[i]; + } + for(i=0; i<2; i++) + { + beta0[i] += 127 - betaMax; + } + for(i=2; i<8; i++) + { + beta0[i] = -127; + } + + beta1[0] = 0; + beta1[1] = xt1[0] + xt1[1]; + + betaMax = beta1[0]; + for(i=1; i<2; i++) + { + if(beta1[i]>betaMax) + betaMax = beta1[i]; + } + for(i=0; i<2; i++) + { + beta1[i] += 127 - betaMax; + } + for(i=2; i<8; i++) + { + beta1[i] = -127; + } + } + else if(Kt==0) + { + beta0[0] = +127; + for(i=1; i<8; i++) + { + beta0[i] = -127; + } + + beta1[0] = +127; + for(i=1; i<8; i++) + { + beta1[i] = -127; + } + } + + //CFG4 + reg->beta_st0_map0 = beta0[0]; + reg->beta_st1_map0 = beta0[1]; + reg->beta_st2_map0 = beta0[2]; + reg->beta_st3_map0 = beta0[3]; + + //CFG5 + reg->beta_st4_map0 = beta0[4]; + reg->beta_st5_map0 = beta0[5]; + reg->beta_st6_map0 = beta0[6]; + reg->beta_st7_map0 = beta0[7]; + + //CFG6 + reg->beta_st0_map1 = beta1[0]; + reg->beta_st1_map1 = beta1[1]; + reg->beta_st2_map1 = beta1[2]; + reg->beta_st3_map1 = beta1[3]; + + //CFG7 + reg->beta_st4_map1 = beta1[4]; + reg->beta_st5_map1 = beta1[5]; + reg->beta_st6_map1 = beta1[6]; + reg->beta_st7_map1 = beta1[7]; + } + else + { + //WiMAX mode: + //CFG4 + reg->beta_st0_map0 = 0; + reg->beta_st1_map0 = 0; + reg->beta_st2_map0 = 0; + reg->beta_st3_map0 = 0; + + //CFG5 + reg->beta_st4_map0 = 0; + reg->beta_st5_map0 = 0; + reg->beta_st6_map0 = 0; + reg->beta_st7_map0 = 0; + + //CFG6 + reg->beta_st0_map1 = 0; + reg->beta_st1_map1 = 0; + reg->beta_st2_map1 = 0; + reg->beta_st3_map1 = 0; + + //CFG7 + reg->beta_st4_map1 = 0; + reg->beta_st5_map1 = 0; + reg->beta_st6_map1 = 0; + reg->beta_st7_map1 = 0; + + } +} \ No newline at end of file diff --git a/test/gen_test_vectors/src/load_config.c b/test/gen_test_vectors/src/load_config.c new file mode 100644 index 0000000..c07b27a --- /dev/null +++ b/test/gen_test_vectors/src/load_config.c @@ -0,0 +1,531 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include +#include + +#include "sim_param.h" +#include "cfg_param.h" + + +void SetDefaultConfig(TCP3_SIM_PARMS *sparms); + +//******************************************************************** +//Loads parameters from the configuration file into sparms structure +//******************************************************************** +void LoadConfig(char *cfgFileName, TCP3_SIM_PARMS *sparms) +{ +FILE *cfgFile; +char buffer[300]; +char *pb,*pt; +int32_t itemp; +float ftemp; + + //Set default values into sparms + SetDefaultConfig(sparms); + + if( (cfgFile = fopen(cfgFileName,"r")) == NULL) + { + printf("Configuration file %s is not found!\n",cfgFileName); + return; + } + while(fgets(buffer,300,cfgFile) != NULL) + { + if(buffer[0] == '#') continue; /* skip the line if it begins with the comment */ + if((pb = strchr(buffer,'=')) != NULL) /* process the line if it contains '=' */ + { + pb = strtok(buffer, " \t=#"); /* position to parameter descriptor */ + pt = strtok(NULL, " \t=#"); /* position to its value */ + + if(strcmp(pb,"Coding_standard") == 0) { + sscanf(pt, "%d", &itemp); + sparms->CodingStandard = itemp; + continue; + } + if(strcmp(pb,"Frame_size_index") == 0) { + sscanf(pt, "%d", &itemp); + sparms->frameLenInd = itemp; + continue; + } + if(strcmp(pb,"Minimum_number_of_FEC_blocks") == 0) { + sscanf(pt, "%d", &itemp); + sparms->MinNumFecBlocks = (uint32_t) itemp; + continue; + } + if(strcmp(pb,"Maximum_number_of_FEC_blocks") == 0) { + sscanf(pt, "%d", &itemp); + sparms->MaxNumFecBlocks = (uint32_t) itemp; + continue; + } + if(strcmp(pb,"Minimum_number_of_frame_errors") == 0) { + sscanf(pt, "%d", &itemp); + sparms->MinNumFerErrors = (uint32_t) itemp; + continue; + } + + if(strcmp(pb,"Frame_error_rate_limit") == 0) { + sscanf(pt, "%d", &itemp); + sparms->FrameErrorRateLimit = itemp; + continue; + } + if(strcmp(pb,"Coded_error_processing") == 0) { + sscanf(pt, "%d", &itemp); + sparms->ErrorProcessingOption = (uint32_t) itemp; + continue; + } + + if(strcmp(pb,"Snr_init_value") == 0) { + sscanf(pt, "%f", &ftemp); + sparms->SnrInitValue = ftemp; + sparms->noiseSigma = (float) (1.0 / pow(10.0, (double)sparms->SnrInitValue/20.0)); + continue; + } + if(strcmp(pb,"Snr_increment_step") == 0) { + sscanf(pt, "%f", &ftemp); + sparms->SnrIncrementStep = ftemp; + continue; + } + if(strcmp(pb,"Snr_limit_value") == 0) { + sscanf(pt, "%f", &ftemp); + sparms->SnrLimitValue = ftemp; + continue; + } + if(strcmp(pb,"Adaptive_snr_step") == 0) { + sscanf(pt, "%d", &itemp); + sparms->AdaptiveSnrStep = itemp; + continue; + } + + if(strcmp(pb,"Add_noise") == 0) { + sscanf(pt, "%d", &itemp); + sparms->NoiseSwitch = itemp; + continue; + } + if(strcmp(pb,"c_model_seed") == 0) { + sscanf(pt, "%d", &itemp); + sparms->seed = itemp; + if(itemp<512) itemp <<= 9;//Fix for 23 bit scrambler register. The register occupies upper 23 bits + sparms->Scr2318ShiftReg = itemp; + + continue; + } + if(strcmp(pb,"Bit_width_of_integer_part") == 0) { + sscanf(pt, "%d", &itemp); + sparms->bitWidthInt = itemp; + continue; + } + + if(strcmp(pb,"Bit_width_of_fractional_part") == 0) { + sscanf(pt, "%d", &itemp); + sparms->bitWidthFrac = itemp; + continue; + } + if(strcmp(pb,"Max_star_enable") == 0) { + sscanf(pt, "%d", &itemp); + sparms->maxStarEn = itemp; + continue; + } + if(strcmp(pb,"Max_star_threshold") == 0) { + sscanf(pt, "%d", &itemp); + sparms->maxStarThreshold = itemp; + continue; + } + if(strcmp(pb,"Max_star_value") == 0) { + sscanf(pt, "%d", &itemp); + sparms->maxStarValue = itemp; + continue; + } + + + if(strcmp(pb,"Max_number_of_turbo_iterations") == 0) { + sscanf(pt, "%d", &itemp); + sparms->MaxNumTurboIterations = itemp; + continue; + } + if(strcmp(pb,"Min_number_of_turbo_iterations") == 0) { + sscanf(pt, "%d", &itemp); + sparms->MinNumTurboIterations = itemp; + continue; + } + + if(strcmp(pb,"Extrinsic_scales") == 0) { + { + int32_t i; + for(i=0; i<16; i++) + { + sscanf(pt, "%d", &itemp); + sparms->extrinsicScales[i] = itemp; + pt = strtok(NULL, " \t=#,"); + if(pt == NULL) + break; + } + } + continue; + } + + if(strcmp(pb,"tcp3_SW0_length") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_SW0_length = itemp; + continue; + } + + if(strcmp(pb,"tcp3_stopSel") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_stopSel = itemp; //=0 Max iter, =1 CRC, =2 or 3 SNR + continue; + } + + if(strcmp(pb,"tcp3_crcSel") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_crcSel = itemp; //=0 gCRC24B, =1 gCRC24A + continue; + } + + if(strcmp(pb,"tcp3_SNR_Report") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_SNR_Report = itemp; + continue; + } + + if(strcmp(pb,"tcp3_SNR_stopVal") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_SNR_stopVal = itemp; + continue; + } + + if(strcmp(pb,"tcp3_intlvGenEn") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_intlvGenEn = itemp; + continue; + } + + if(strcmp(pb,"tcp3_intlvLoadSel") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_intlvLoadSel = itemp; + continue; + } + + if(strcmp(pb,"tcp3_extrScaleEn") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_extrScaleEn = itemp; + continue; + } + + if(strcmp(pb,"tcp3_softOutBitFormat") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_softOutBitFormat = itemp; + continue; + } + + if(strcmp(pb,"tcp3_outBitOrderSel") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_outBitOrderSel = itemp; + continue; + } + + if(strcmp(pb,"tcp3_lteCrcInitSel") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_lteCrcInitSel = itemp; + continue; + } + + if(strcmp(pb,"tcp3_lteCrcIterPass") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_lteCrcIterPass = itemp; + continue; + } + + if(strcmp(pb,"tcp3_softOutBitsReadEn") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_softOutBitsReadEn = itemp; + continue; + } + + + if(strcmp(pb,"tcp3_outStatusReadEn") == 0) { + sscanf(pt, "%d", &itemp); + sparms->tcp3_outStatusReadEn = itemp; + continue; + } + + + if(strcmp(pb,"Enable_top_level_device_verification") == 0) { + sscanf(pt, "%d", &itemp); + sparms->enableTopLvlDeviceVerification = itemp; + continue; + } + + if(strcmp(pb,"Enable_device_verification") == 0) { + sscanf(pt, "%d", &itemp); + sparms->enableDeviceVerification = itemp; + continue; + } + + if(strcmp(pb,"Belief_propagation_disabled") == 0) { + sscanf(pt, "%d", &itemp); + sparms->disableBeliefPropagation = itemp; + continue; + } + + if(strcmp(pb,"Alpha_belief_propagation_disabled") == 0) { + sscanf(pt, "%d", &itemp); + sparms->disableAlphaBeliefPropagation = itemp; + continue; + } + + if(strcmp(pb,"Beta_belief_propagation_disabled") == 0) { + sscanf(pt, "%d", &itemp); + sparms->disableBetaBeliefPropagation = itemp; + continue; + } + + if(strcmp(pb,"Dev_ver_alpha_block_number") == 0) { + sscanf(pt, "%d", &itemp); + sparms->devVerAlphaBlockNumber = itemp; + continue; + } + + if(strcmp(pb,"Dev_ver_extr_block_number") == 0) { + sscanf(pt, "%d", &itemp); + sparms->devVerExtrBlockNumber = itemp; + continue; + } + + if(strcmp(pb,"Dev_ver_beta_block_number") == 0) { + sscanf(pt, "%d", &itemp); + sparms->devVerBetaBlockNumber = itemp; + continue; + } + + if(strcmp(pb,"Dev_ver_use_linear_interleaver") == 0) { + sscanf(pt, "%d", &itemp); + sparms->devVerUseLinearInterleaver = itemp; + continue; + } + + if(strcmp(pb,"Dev_ver_zero_apriori_in_hard_dec") == 0) { + sscanf(pt, "%d", &itemp); + sparms->devVerZeroAprioriInHardDec = itemp; + continue; + } + + + + if(strcmp(pb,"Send_intermedite_internal_memories") == 0) { + sscanf(pt, "%d", &itemp); + sparms->devVerSendIntermediteInternalMemories = itemp; + continue; + } + + + + if(strcmp(pb,"Save_intermediate_data") == 0) { + sscanf(pt, "%d", &itemp); + sparms->saveIntermediateData = itemp; + continue; + } + + if(strcmp(pb,"Initial_process_index") == 0) { + sscanf(pt, "%d", &itemp); + sparms->initialProcInd = itemp; + continue; + } + + if(strcmp(pb,"Alternate_process_index") == 0) { + sscanf(pt, "%d", &itemp); + sparms->alternateProcInd = itemp; + continue; + } + + if(strcmp(pb,"Belief_prop_within_turbo_iter_enabled") == 0) { + sscanf(pt, "%d", &itemp); + sparms->beliefPropWithinTurboIterEnabled = itemp; + continue; + } + + if(strcmp(pb,"Puncture_interval") == 0) { + sscanf(pt, "%d", &itemp); + sparms->punctureInterval = itemp; + continue; + } + + if(strcmp(pb,"Enable_rate_matching") == 0) { + sscanf(pt, "%d", &itemp); + sparms->enableRateMatching = itemp; + continue; + } + + if(strcmp(pb,"Redundancy_version_number") == 0) { + sscanf(pt, "%d", &itemp); + sparms->redundancyVersionNumber = itemp; + continue; + } + + + + if(strcmp(pb,"Coding_rate") == 0) { + sscanf(pt, "%f", &ftemp); + sparms->codingRate = ftemp; + continue; + } + + if(strcmp(pb,"Load_info_bits_from_file") == 0) { + sscanf(pt, "%d", &itemp); + sparms->loadInfoBitsFromFile = itemp; + continue; + } + if(strcmp(pb,"Store_info_bits_to_file") == 0) { + sscanf(pt, "%d", &itemp); + sparms->storeInfoBitsToFile = itemp; + continue; + } + if(strcmp(pb,"Info_bits_file_name") == 0) { + sscanf(pt, "%s", sparms->infoBitsFileName); + continue; + } + if(strcmp(pb,"Store_coded_bits_to_file") == 0) { + sscanf(pt, "%d", &itemp); + sparms->storeCodedBitsToFile = itemp; + continue; + } + if(strcmp(pb,"Coded_bits_file_name") == 0) { + sscanf(pt, "%s", sparms->codedBitsFileName); + continue; + } + if(strcmp(pb,"Info_bits_file_includes_CRC") == 0) { + sscanf(pt, "%d", &itemp); + sparms->infoBitsFileIncludesCRC = itemp; + continue; + } + if(strcmp(pb,"Use_tcp3_encoder_c_model") == 0) { + sscanf(pt, "%d", &itemp); + sparms->use_tcp3_encoder_c_model = itemp; + continue; + } + + + } + } + fclose(cfgFile); +} + +//******************************************************************** +//******************************************************************** +void SetDefaultConfig(TCP3_SIM_PARMS *sparms){ +int32_t i; + + sparms->CodingStandard = 0; + sparms->MaxNumTurboIterations = 8; + sparms->MinNumTurboIterations = 1; + sparms->frameLenInd = 0; + sparms->mappingSign = 1; + sparms->seed = 0x55555555; + sparms->Scr2318ShiftReg = 0xffffffff; + sparms->SnrInitValue = -2.; + sparms->SnrIncrementStep = 0.25; + sparms->AdaptiveSnrStep = 0; + sparms->SnrLimitValue = 10.; + sparms->noiseSigma = (float) (1.0 / pow(10.0, (double)sparms->SnrInitValue/20.0)); + sparms->bitWidthInt = 4; + sparms->bitWidthInt = 2; + sparms->maxStarEn = 0; // =0 MaxLogMAP, =1 MAXStar + + sparms->ErrorProcessingOption = 1; + sparms->FrameErrorRateLimit = -1; + sparms->MinNumFecBlocks = 100; + sparms->MaxNumFecBlocks = 1000; + sparms->MinNumFerErrors = 0; + + + for(i=0; i<16; i++) + { + sparms->extrinsicScales[i] = 32; + } + sparms->tcp3_SW0_length = 64; + + sparms->tcp3_stopSel = 0; //=0 Max iter, =1 CRC, =2 or 3 SNR + sparms->tcp3_crcSel = 0; //=0 gCRC24B, =1 gCRC24A + sparms->tcp3_SNR_stopVal = 20; + sparms->tcp3_SNR_Report = 0; + sparms->tcp3_intlvGenEn = 0; + sparms->tcp3_intlvLoadSel = 1; + sparms->tcp3_extrScaleEn = 1; + sparms->tcp3_softOutBitFormat = 1; + sparms->tcp3_outBitOrderSel = 0; + sparms->tcp3_lteCrcInitSel = 0; + sparms->tcp3_lteCrcIterPass = 0; + sparms->tcp3_softOutBitsReadEn = 0; + sparms->tcp3_outStatusReadEn = 0; + + + sparms->enableTopLvlDeviceVerification = 0; + sparms->enableDeviceVerification = 0; + sparms->disableBeliefPropagation = 0; + sparms->disableAlphaBeliefPropagation = 0; + sparms->disableBetaBeliefPropagation = 0; + + sparms->devVerAlphaBlockNumber = 0; + sparms->devVerExtrBlockNumber = 0; + sparms->devVerBetaBlockNumber = 0; + sparms->devVerSendIntermediteInternalMemories = 0; + sparms->devVerUseLinearInterleaver = 0; + sparms->devVerZeroAprioriInHardDec = 0; + + + sparms->maxStarThreshold = 4; + sparms->maxStarValue = 2; + sparms->saveIntermediateData = 0; + + sparms->alternateProcInd = 0; + sparms->initialProcInd = 0; + + sparms->beliefPropWithinTurboIterEnabled = 0; + + sparms->punctureInterval = -1; + sparms->enableRateMatching = 0; + sparms->redundancyVersionNumber = 0; + sparms->codingRate = 0; + sparms->loadInfoBitsFromFile = 0; + sparms->storeCodedBitsToFile = 0; + sparms->storeInfoBitsToFile = 0; + sparms->infoBitsFileIncludesCRC = 0; + sparms->infoBitsFileName[0] = 0; + sparms->codedBitsFileName[0] = 0; + sparms->use_tcp3_encoder_c_model = 0; +} + diff --git a/test/gen_test_vectors/src/set_reg.c b/test/gen_test_vectors/src/set_reg.c new file mode 100644 index 0000000..da78984 --- /dev/null +++ b/test/gen_test_vectors/src/set_reg.c @@ -0,0 +1,653 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include "sim_param.h" +#include "cfg_param.h" + +#define WCDMA_SINGLE_MAP_MODE 0 +#define LTE_DUAL_MAP_MODE 1 +#define WIMAX_DUAL_MAP_MODE 2 +#define WCDMA_SPLIT_DEC_MODE 3 + +int32_t SW0_LN_Tab[] = {16, 32, 48, 64, 96, 128}; + +/********************************************************************************/ +/*LTE interleaver block sizes */ +/********************************************************************************/ +int32_t LTE_FRAME_LENGTHS [] = { + 40, 48, 56, 64, 72, 80, 88, 96, + 104, 112, 120, 128, 136, 144, 152, 160, + 168, 176, 184, 192, 200, 208, 216, 224, + 232, 240, 248, 256, 264, 272, 280, 288, + 296, 304, 312, 320, 328, 336, 344, 352, + 360, 368, 376, 384, 392, 400, 408, 416, + 424, 432, 440, 448, 456, 464, 472, 480, + 488, 496, 504, 512, 528, 544, 560, 576, + 592, 608, 624, 640, 656, 672, 688, 704, + 720, 736, 752, 768, 784, 800, 816, 832, + 848, 864, 880, 896, 912, 928, 944, 960, + 976, 992, 1008, 1024, 1056, 1088, 1120, 1152, + 1184, 1216, 1248, 1280, 1312, 1344, 1376, 1408, + 1440, 1472, 1504, 1536, 1568, 1600, 1632, 1664, + 1696, 1728, 1760, 1792, 1824, 1856, 1888, 1920, + 1952, 1984, 2016, 2048, 2112, 2176, 2240, 2304, + 2368, 2432, 2496, 2560, 2624, 2688, 2752, 2816, + 2880, 2944, 3008, 3072, 3136, 3200, 3264, 3328, + 3392, 3456, 3520, 3584, 3648, 3712, 3776, 3840, + 3904, 3968, 4032, 4096, 4160, 4224, 4288, 4352, + 4416, 4480, 4544, 4608, 4672, 4736, 4800, 4864, + 4928, 4992, 5056, 5120, 5184, 5248, 5312, 5376, + 5440, 5504, 5568, 5632, 5696, 5760, 5824, 5888, + 5952, 6016, 6080, 6144, +/*********FOLLOWING PART IS EXTENTION TO 8192 with step 64 TO TEST TCP3 *************/ + 6208, 6272, 6336, 6400, 6464, 6528, 6592, 6656, + 6720, 6784, 6848, 6912, 6976, 7040, 7104, 7168, + 7232, 7296, 7360, 7424, 7488, 7552, 7616, 7680, + 7744, 7808, 7872, 7936, 8000, 8064, 8128, 8192 + }; +/*WiMAX frame lengths*/ +int32_t WIMAX_FRAME_LENGTHS[] = { + 48, /* 0: 6 Bytes */ + 72, /* 1: 9 Bytes */ + 96, /* 2: 12 Bytes */ + 144, /* 3: 18 Bytes */ + 192, /* 4: 24 Bytes */ + 216, /* 5: 27 Bytes */ + 240, /* 6: 30 Bytes */ + 288, /* 7: 36 Bytes */ + 360, /* 8: 45 Bytes */ + 384, /* 9: 48 Bytes */ + 432, /* 10: 54 Bytes */ + 480, /* 11: 60 Bytes */ + 960, /* 12: 120 Bytes */ + 1920, /* 13: 240 Bytes */ + 2880, /* 14: 360 Bytes */ + 3840, /* 15: 480 Bytes */ + 4800 /* 16: 600 Bytes */ +}; +/***************************************************************************/ +/* LTE Interelaver table with the coefficients P0,P1,P2 and G0 needed for */ +/* internal LTE coefficient generation. */ +/* K f1 f2 P0 P1 P2 G0 */ +/* See matlab file rec_gen_parallel_v3_extend_to_8192.m */ +/***************************************************************************/ +int16_t TCP3_LteInterleaverTable [220][7] = { + 40, 3, 10, 30, 20, 10, 13, // 0 + 48, 7, 12, 36, 24, 12, 19, // 1 + 56, 19, 42, 42, 28, 14, 5, // 2 + 64, 7, 16, 48, 32, 16, 23, // 3 + 72, 7, 18, 54, 36, 18, 25, // 4 + 80, 11, 20, 60, 40, 20, 31, // 5 + 88, 5, 22, 22, 44, 66, 27, // 6 + 96, 11, 24, 72, 48, 24, 35, // 7 + 104, 7, 26, 78, 52, 26, 33, // 8 + 112, 41, 84, 28, 56, 84, 13, // 9 + 120, 103, 90, 90, 60, 30, 73, // 10 + 128, 15, 32, 96, 64, 32, 47, // 11 + 136, 9, 34, 34, 68, 102, 43, // 12 + 144, 17, 108, 36, 72, 108, 125, // 13 + 152, 9, 38, 38, 76, 114, 47, // 14 + 160, 21, 120, 40, 80, 120, 141, // 15 + 168, 101, 84, 42, 84, 126, 17, // 16 + 176, 21, 44, 44, 88, 132, 65, // 17 + 184, 57, 46, 46, 92, 138, 103, // 18 + 192, 23, 48, 144, 96, 48, 71, // 19 + 200, 13, 50, 50, 100, 150, 63, // 20 + 208, 27, 52, 156, 104, 52, 79, // 21 + 216, 11, 36, 162, 108, 54, 47, // 22 + 224, 27, 56, 168, 112, 56, 83, // 23 + 232, 85, 58, 58, 116, 174, 143, // 24 + 240, 29, 60, 60, 120, 180, 89, // 25 + 248, 33, 62, 62, 124, 186, 95, // 26 + 256, 15, 32, 192, 128, 64, 47, // 27 + 264, 17, 198, 66, 132, 198, 215, // 28 + 272, 33, 68, 68, 136, 204, 101, // 29 + 280, 103, 210, 210, 140, 70, 33, // 30 + 288, 19, 36, 216, 144, 72, 55, // 31 + 296, 19, 74, 222, 148, 74, 93, // 32 + 304, 37, 76, 76, 152, 228, 113, // 33 + 312, 19, 78, 234, 156, 78, 97, // 34 + 320, 21, 120, 80, 160, 240, 141, // 35 + 328, 21, 82, 82, 164, 246, 103, // 36 + 336, 115, 84, 252, 168, 84, 199, // 37 + 344, 193, 86, 86, 172, 258, 279, // 38 + 352, 21, 44, 88, 176, 264, 65, // 39 + 360, 133, 90, 90, 180, 270, 223, // 40 + 368, 81, 46, 92, 184, 276, 127, // 41 + 376, 45, 94, 94, 188, 282, 139, // 42 + 384, 23, 48, 288, 192, 96, 71, // 43 + 392, 243, 98, 294, 196, 98, 341, // 44 + 400, 151, 40, 300, 200, 100, 191, // 45 + 408, 155, 102, 306, 204, 102, 257, // 46 + 416, 25, 52, 104, 208, 312, 77, // 47 + 424, 51, 106, 318, 212, 106, 157, // 48 + 432, 47, 72, 324, 216, 108, 119, // 49 + 440, 91, 110, 330, 220, 110, 201, // 50 + 448, 29, 168, 112, 224, 336, 197, // 51 + 456, 29, 114, 114, 228, 342, 143, // 52 + 464, 247, 58, 348, 232, 116, 305, // 53 + 472, 29, 118, 118, 236, 354, 147, // 54 + 480, 89, 180, 120, 240, 360, 269, // 55 + 488, 91, 122, 366, 244, 122, 213, // 56 + 496, 157, 62, 124, 248, 372, 219, // 57 + 504, 55, 84, 378, 252, 126, 139, // 58 + 512, 31, 64, 384, 256, 128, 95, // 59 + 528, 17, 66, 132, 264, 396, 83, // 60 + 544, 35, 68, 408, 272, 136, 103, // 61 + 560, 227, 420, 420, 280, 140, 87, // 62 + 576, 65, 96, 144, 288, 432, 161, // 63 + 592, 19, 74, 444, 296, 148, 93, // 64 + 608, 37, 76, 152, 304, 456, 113, // 65 + 624, 41, 234, 156, 312, 468, 275, // 66 + 640, 39, 80, 480, 320, 160, 119, // 67 + 656, 185, 82, 164, 328, 492, 267, // 68 + 672, 43, 252, 504, 336, 168, 295, // 69 + 688, 21, 86, 172, 344, 516, 107, // 70 + 704, 155, 44, 528, 352, 176, 199, // 71 + 720, 79, 120, 540, 360, 180, 199, // 72 + 736, 139, 92, 552, 368, 184, 231, // 73 + 752, 23, 94, 564, 376, 188, 117, // 74 + 768, 217, 48, 192, 384, 576, 265, // 75 + 784, 25, 98, 196, 392, 588, 123, // 76 + 800, 17, 80, 200, 400, 600, 97, // 77 + 816, 127, 102, 612, 408, 204, 229, // 78 + 832, 25, 52, 208, 416, 624, 77, // 79 + 848, 239, 106, 636, 424, 212, 345, // 80 + 864, 17, 48, 216, 432, 648, 65, // 81 + 880, 137, 110, 220, 440, 660, 247, // 82 + 896, 215, 112, 672, 448, 224, 327, // 83 + 912, 29, 114, 228, 456, 684, 143, // 84 + 928, 15, 58, 696, 464, 232, 73, // 85 + 944, 147, 118, 708, 472, 236, 265, // 86 + 960, 29, 60, 240, 480, 720, 89, // 87 + 976, 59, 122, 732, 488, 244, 181, // 88 + 992, 65, 124, 248, 496, 744, 189, // 89 +1008, 55, 84, 756, 504, 252, 139, // 90 +1024, 31, 64, 768, 512, 256, 95, // 91 +1056, 17, 66, 264, 528, 792, 83, // 92 +1088, 171, 204, 816, 544, 272, 375, // 93 +1120, 67, 140, 840, 560, 280, 207, // 94 +1152, 35, 72, 864, 576, 288, 107, // 95 +1184, 19, 74, 888, 592, 296, 93, // 96 +1216, 39, 76, 912, 608, 304, 115, // 97 +1248, 19, 78, 936, 624, 312, 97, // 98 +1280, 199, 240, 960, 640, 320, 439, // 99 +1312, 21, 82, 328, 656, 984, 103, // 100 +1344, 211, 252, 1008, 672, 336, 463, // 101 +1376, 21, 86, 344, 688, 1032, 107, // 102 +1408, 43, 88, 1056, 704, 352, 131, // 103 +1440, 149, 60, 360, 720, 1080, 209, // 104 +1472, 45, 92, 368, 736, 1104, 137, // 105 +1504, 49, 846, 376, 752, 1128, 895, // 106 +1536, 71, 48, 1152, 768, 384, 119, // 107 +1568, 13, 28, 392, 784, 1176, 41, // 108 +1600, 17, 80, 400, 800, 1200, 97, // 109 +1632, 25, 102, 408, 816, 1224, 127, // 110 +1664, 183, 104, 1248, 832, 416, 287, // 111 +1696, 55, 954, 1272, 848, 424, 1009, // 112 +1728, 127, 96, 1296, 864, 432, 223, // 113 +1760, 27, 110, 1320, 880, 440, 137, // 114 +1792, 29, 112, 448, 896, 1344, 141, // 115 +1824, 29, 114, 456, 912, 1368, 143, // 116 +1856, 57, 116, 464, 928, 1392, 173, // 117 +1888, 45, 354, 472, 944, 1416, 399, // 118 +1920, 31, 120, 1440, 960, 480, 151, // 119 +1952, 59, 610, 1464, 976, 488, 669, // 120 +1984, 185, 124, 496, 992, 1488, 309, // 121 +2016, 113, 420, 504, 1008, 1512, 533, // 122 +2048, 31, 64, 1536, 1024, 512, 95, // 123 +2112, 17, 66, 528, 1056, 1584, 83, // 124 +2176, 171, 136, 1632, 1088, 544, 307, // 125 +2240, 209, 420, 560, 1120, 1680, 629, // 126 +2304, 253, 216, 576, 1152, 1728, 469, // 127 +2368, 367, 444, 1776, 1184, 592, 811, // 128 +2432, 265, 456, 608, 1216, 1824, 721, // 129 +2496, 181, 468, 624, 1248, 1872, 649, // 130 +2560, 39, 80, 1920, 1280, 640, 119, // 131 +2624, 27, 164, 1968, 1312, 656, 191, // 132 +2688, 127, 504, 2016, 1344, 672, 631, // 133 +2752, 143, 172, 2064, 1376, 688, 315, // 134 +2816, 43, 88, 2112, 1408, 704, 131, // 135 +2880, 29, 300, 720, 1440, 2160, 329, // 136 +2944, 45, 92, 736, 1472, 2208, 137, // 137 +3008, 157, 188, 752, 1504, 2256, 345, // 138 +3072, 47, 96, 2304, 1536, 768, 143, // 139 +3136, 13, 28, 784, 1568, 2352, 41, // 140 +3200, 111, 240, 2400, 1600, 800, 351, // 141 +3264, 443, 204, 2448, 1632, 816, 647, // 142 +3328, 51, 104, 2496, 1664, 832, 155, // 143 +3392, 51, 212, 2544, 1696, 848, 263, // 144 +3456, 451, 192, 2592, 1728, 864, 643, // 145 +3520, 257, 220, 880, 1760, 2640, 477, // 146 +3584, 57, 336, 896, 1792, 2688, 393, // 147 +3648, 313, 228, 912, 1824, 2736, 541, // 148 +3712, 271, 232, 2784, 1856, 928, 503, // 149 +3776, 179, 236, 2832, 1888, 944, 415, // 150 +3840, 331, 120, 2880, 1920, 960, 451, // 151 +3904, 363, 244, 2928, 1952, 976, 607, // 152 +3968, 375, 248, 2976, 1984, 992, 623, // 153 +4032, 127, 168, 3024, 2016, 1008, 295, // 154 +4096, 31, 64, 3072, 2048, 1024, 95, // 155 +4160, 33, 130, 1040, 2080, 3120, 163, // 156 +4224, 43, 264, 3168, 2112, 1056, 307, // 157 +4288, 33, 134, 1072, 2144, 3216, 167, // 158 +4352, 477, 408, 1088, 2176, 3264, 885, // 159 +4416, 35, 138, 3312, 2208, 1104, 173, // 160 +4480, 233, 280, 1120, 2240, 3360, 513, // 161 +4544, 357, 142, 1136, 2272, 3408, 499, // 162 +4608, 337, 480, 1152, 2304, 3456, 817, // 163 +4672, 37, 146, 1168, 2336, 3504, 183, // 164 +4736, 71, 444, 3552, 2368, 1184, 515, // 165 +4800, 71, 120, 3600, 2400, 1200, 191, // 166 +4864, 37, 152, 1216, 2432, 3648, 189, // 167 +4928, 39, 462, 3696, 2464, 1232, 501, // 168 +4992, 127, 234, 3744, 2496, 1248, 361, // 169 +5056, 39, 158, 3792, 2528, 1264, 197, // 170 +5120, 39, 80, 3840, 2560, 1280, 119, // 171 +5184, 31, 96, 3888, 2592, 1296, 127, // 172 +5248, 113, 902, 1312, 2624, 3936, 1015, // 173 +5312, 41, 166, 1328, 2656, 3984, 207, // 174 +5376, 251, 336, 4032, 2688, 1344, 587, // 175 +5440, 43, 170, 4080, 2720, 1360, 213, // 176 +5504, 21, 86, 1376, 2752, 4128, 107, // 177 +5568, 43, 174, 4176, 2784, 1392, 217, // 178 +5632, 45, 176, 1408, 2816, 4224, 221, // 179 +5696, 45, 178, 1424, 2848, 4272, 223, // 180 +5760, 161, 120, 1440, 2880, 4320, 281, // 181 +5824, 89, 182, 1456, 2912, 4368, 271, // 182 +5888, 323, 184, 4416, 2944, 1472, 507, // 183 +5952, 47, 186, 4464, 2976, 1488, 233, // 184 +6016, 23, 94, 4512, 3008, 1504, 117, // 185 +6080, 47, 190, 4560, 3040, 1520, 237, // 186 +6144, 263, 480, 4608, 3072, 1536, 743, // 187 + +/*********FOLLOWING PART IS EXTENTION TO 8192 with step 64 TO TEST TCP3 *************/ + 6208, 3, 194, 4656, 3104, 1552, 197, // 188 + 6272, 3, 14, 4704, 3136, 1568, 17, // 189 + 6336, 5, 66, 1584, 3168, 4752, 71, // 190 + 6400, 3, 10, 4800, 3200, 1600, 13, // 191 + 6464, 3, 202, 4848, 3232, 1616, 205, // 192 + 6528, 5, 102, 1632, 3264, 4896, 107, // 193 + 6592, 3, 206, 4944, 3296, 1648, 209, // 194 + 6656, 3, 26, 4992, 3328, 1664, 29, // 195 + 6720, 11, 210, 5040, 3360, 1680, 221, // 196 + 6784, 3, 106, 5088, 3392, 1696, 109, // 197 + 6848, 3, 214, 5136, 3424, 1712, 217, // 198 + 6912, 5, 6, 1728, 3456, 5184, 11, // 199 + 6976, 3, 218, 5232, 3488, 1744, 221, // 200 + 7040, 3, 110, 5280, 3520, 1760, 113, // 201 + 7104, 5, 222, 1776, 3552, 5328, 227, // 202 + 7168, 3, 14, 5376, 3584, 1792, 17, // 203 + 7232, 3, 226, 5424, 3616, 1808, 229, // 204 + 7296, 5, 114, 1824, 3648, 5472, 119, // 205 + 7360, 3, 230, 5520, 3680, 1840, 233, // 206 + 7424, 3, 58, 5568, 3712, 1856, 61, // 207 + 7488, 5, 78, 1872, 3744, 5616, 83, // 208 + 7552, 3, 118, 5664, 3776, 1888, 121, // 209 + 7616, 3, 238, 5712, 3808, 1904, 241, // 210 + 7680, 7, 30, 5760, 3840, 1920, 37, // 211 + 7744, 3, 22, 5808, 3872, 1936, 25, // 212 + 7808, 3, 122, 5856, 3904, 1952, 125, // 213 + 7872, 5, 246, 1968, 3936, 5904, 251, // 214 + 7936, 3, 62, 5952, 3968, 1984, 65, // 215 + 8000, 3, 10, 6000, 4000, 2000, 13, // 216 + 8064, 5, 42, 2016, 4032, 6048, 47, // 217 + 8128, 3, 254, 6096, 4064, 2032, 257, // 218 + 8192, 3, 2, 6144, 4096, 2048, 5, // 219 + +}; + +int32_t TCP3_WimaxInterleaverTable[][4] ={ + 20, 18, 11, 4, + 8, 12, 23, 34, + 4, 14, 27, 40, + 44, 54, 23, 4, + 28, 8, 39, 46, + 44, 12, 79, 90, + 52, 14, 27, 40, + 68, 20, 107, 126, + 44, 12, 23, 34, + 44, 12, 71, 82, + 52, 14, 27, 40, + 52, 14, 87, 100, + 212, 356, 119, 402, + 172, 588, 387, 474, + 172, 44, 447, 1390, + 124, 1000, 87, 1070, + 212, 1320, 131, 1362 +}; + +//********************************************************************* +//Sets the register structure that contains all tcp3 register parameters +//based on sparms structure. +//********************************************************************* +void SetReg(TCP3_SIM_PARMS *sparms, TCP3_REGS *reg) +{ + + int32_t i; + uint8_t *ptr; + int32_t numMap; + int32_t subFrameLen; + int32_t sw0NomLen; + int32_t numSW; + int32_t SW1LenSelTmp; + int32_t SW2LenSelTmp; + + + //Initialize reg structure + ptr = (uint8_t *) reg; + for(i=0; iproc_id = 0; + + switch (sparms->CodingStandard) + { + case WCDMA_SINGLE_MAP_MODE: + reg->NumInfoBits = sparms->frameLenInd; + reg->ExtndNumInfoBits = (reg->NumInfoBits+3) & 0xFFFFFFFC; + reg->IntlvLen = reg->ExtndNumInfoBits; + numMap = 1; + break; + case LTE_DUAL_MAP_MODE: + reg->NumInfoBits = LTE_FRAME_LENGTHS[sparms->frameLenInd]; + reg->ExtndNumInfoBits = reg->NumInfoBits; + reg->IntlvLen = reg->ExtndNumInfoBits; + numMap = 2; + break; + case WIMAX_DUAL_MAP_MODE: + reg->NumInfoBits = WIMAX_FRAME_LENGTHS[sparms->frameLenInd]; + reg->ExtndNumInfoBits = reg->NumInfoBits; + reg->IntlvLen = reg->ExtndNumInfoBits>>1; + numMap = 2; + break; + case WCDMA_SPLIT_DEC_MODE: + reg->NumInfoBits = sparms->frameLenInd; + reg->ExtndNumInfoBits = (reg->NumInfoBits+3) & 0xFFFFFFFC; + reg->IntlvLen = reg->ExtndNumInfoBits; + numMap = 1; + break; + } + + + //Common registers: + //TCP3_MODE + reg->mode_sel = sparms->CodingStandard; + if(reg->mode_sel == 3) + { + reg->in_mem_db_en = 0; + } + else + { + reg->in_mem_db_en = 1; + } + + reg->itg_en = sparms->tcp3_intlvGenEn; + reg->err_ignore_en = 1; + reg->auto_trig_en = 0; + reg->lte_crc_init_sel = sparms->tcp3_lteCrcInitSel; + + //TRIGGER_REG + reg->trig = 1; + + //TCP_ENDIAN + reg->endian_intr = 1; + reg->endian_indata = 1; + + //Per process control register: + //TCP3_EXE + reg->exe_cmd = 1; //Execute new decode + + //Per process configuration registers: + //CFG0 + reg->blk_ln = reg->NumInfoBits - 1; + + //CFG2 + reg->inter_load_sel = sparms->tcp3_intlvLoadSel; //Load or generate interleaver + reg->maxst_en = sparms->maxStarEn; + reg->out_flag_en = sparms->tcp3_outStatusReadEn; + reg->out_order_sel = sparms->tcp3_outBitOrderSel; + reg->ext_scale_en = sparms->tcp3_extrScaleEn; + reg->soft_out_flag_en = sparms->tcp3_softOutBitsReadEn; + reg->soft_out_order_sel = 0; + reg->soft_out_fmt = sparms->tcp3_softOutBitFormat; + reg->min_itr = sparms->MinNumTurboIterations; + reg->max_itr = sparms->MaxNumTurboIterations; + reg->snr_val = sparms->tcp3_SNR_stopVal; + reg->snr_rep = sparms->tcp3_SNR_Report; + reg->stop_sel = sparms->tcp3_stopSel; + reg->crc_iter_pass = sparms->tcp3_lteCrcIterPass; + reg->crc_sel = sparms->tcp3_crcSel; + + //CFG3 + reg->maxst_thold = sparms->maxStarThreshold; + reg->maxst_value = sparms->maxStarValue; + + + + //CFG8 + reg->ext_scale_0 = sparms->extrinsicScales[0]; + reg->ext_scale_1 = sparms->extrinsicScales[1]; + reg->ext_scale_2 = sparms->extrinsicScales[2]; + reg->ext_scale_3 = sparms->extrinsicScales[3]; + + //CFG9 + reg->ext_scale_4 = sparms->extrinsicScales[4]; + reg->ext_scale_5 = sparms->extrinsicScales[5]; + reg->ext_scale_6 = sparms->extrinsicScales[6]; + reg->ext_scale_7 = sparms->extrinsicScales[7]; + + //CFG10 + reg->ext_scale_8 = sparms->extrinsicScales[8 ]; + reg->ext_scale_9 = sparms->extrinsicScales[9 ]; + reg->ext_scale_10 = sparms->extrinsicScales[10]; + reg->ext_scale_11 = sparms->extrinsicScales[11]; + + //CFG11 + reg->ext_scale_12 = sparms->extrinsicScales[12]; + reg->ext_scale_13 = sparms->extrinsicScales[13]; + reg->ext_scale_14 = sparms->extrinsicScales[14]; + reg->ext_scale_15 = sparms->extrinsicScales[15]; + + //CFG12-CFG14 + if(sparms->CodingStandard == 1) //LTE interleaver parameters + { + reg->itg_param_1 = TCP3_LteInterleaverTable[sparms->frameLenInd][6]; + reg->itg_param_0 = (int32_t) ((2*TCP3_LteInterleaverTable[sparms->frameLenInd][2]) % TCP3_LteInterleaverTable[sparms->frameLenInd][0]); + reg->itg_param_2 = TCP3_LteInterleaverTable[sparms->frameLenInd][3]; + reg->itg_param_3 = TCP3_LteInterleaverTable[sparms->frameLenInd][4]; + reg->itg_param_4 = TCP3_LteInterleaverTable[sparms->frameLenInd][5]; + } + else if(sparms->CodingStandard == 2) //WIMAX interleaver parameters + { + reg->itg_param_0 = 0; + reg->itg_param_1 = TCP3_WimaxInterleaverTable[sparms->frameLenInd][0]; + reg->itg_param_2 = TCP3_WimaxInterleaverTable[sparms->frameLenInd][1]; + reg->itg_param_3 = TCP3_WimaxInterleaverTable[sparms->frameLenInd][2]; + reg->itg_param_4 = TCP3_WimaxInterleaverTable[sparms->frameLenInd][3]; + } + else + { + reg->itg_param_0 = 0; + reg->itg_param_1 = 0; + reg->itg_param_2 = 0; + reg->itg_param_3 = 0; + reg->itg_param_4 = 0; + } + + + + //Calculate SW0LenSel, SW1LenSel, SW2LenSel, numSW0 + if((reg->mode_sel == 1) || (reg->mode_sel == 2)) + { + subFrameLen = reg->ExtndNumInfoBits / (2*2); + } + else + { + subFrameLen = reg->ExtndNumInfoBits / (2); + } + + + //CFG1 + reg->SW0_length = sparms->tcp3_SW0_length; + switch (sparms->tcp3_SW0_length) + { + case 16: + reg->sw0_ln_sel = 0; + break; + case 32: + reg->sw0_ln_sel = 1; + break; + case 48: + reg->sw0_ln_sel = 2; + break; + case 64: + reg->sw0_ln_sel = 3; + break; + case 96: + reg->sw0_ln_sel = 4; + break; + case 128: + reg->sw0_ln_sel = 5; + break; + default: + reg->sw0_ln_sel = 5; + } + + //Check that this holds: (reg->NumInfoBits <= 128 * sparms->tcp3_SW0_length * numMap) + while(reg->NumInfoBits > 128 * SW0_LN_Tab[reg->sw0_ln_sel] * numMap) + { + reg->sw0_ln_sel++; + } + + //CFG0 & CFG1 + sw0NomLen = SW0_LN_Tab[reg->sw0_ln_sel]; + numSW = (int32_t) ceil((double)subFrameLen/sw0NomLen); + if(numSW == 1) + { + reg->num_sw0 = 0; + reg->sw1_ln = subFrameLen-1; //stored value is (sw1_length -1) + reg->sw2_ln_sel = 0; //SW2 is Off. + } + else if(numSW == 2) + { + reg->num_sw0 = 0; + SW1LenSelTmp = 2 * (int32_t) ceil(subFrameLen/4.0) - 1; //stored value is (sw1_length-1) + SW2LenSelTmp = 2 * (int32_t) floor(subFrameLen/4.0) - 1; + if(SW1LenSelTmp == SW2LenSelTmp) + { + reg->sw2_ln_sel = 1; //SW1Len = SW2Len + } + else + { + reg->sw2_ln_sel = 2; //SW1Len > SW2Len + } + reg->sw1_ln = SW1LenSelTmp; + } + else if( (int32_t) (subFrameLen % sw0NomLen) <= (sw0NomLen/2) ) + { + reg->num_sw0 = numSW-2; + SW1LenSelTmp = 2 * (int32_t) ceil((subFrameLen - (numSW-2)*sw0NomLen)/4.0) - 1; + SW2LenSelTmp = 2 * (int32_t) floor((subFrameLen - (numSW-2)*sw0NomLen)/4.0) - 1; + if(SW1LenSelTmp == SW2LenSelTmp) + { + reg->sw2_ln_sel = 1; //SW1Len = SW2Len + } + else + { + reg->sw2_ln_sel = 2; //SW1Len > SW2Len + } + + reg->sw1_ln = SW1LenSelTmp; + } + else + { + reg->num_sw0 = numSW-1; + reg->sw2_ln_sel = 0; //SW2 is Off. + reg->sw1_ln = (int32_t) (subFrameLen % sw0NomLen) - 1; + } +} + + +//********************************************************************* +// Copy from reg structure to output reg structure (stripped version) +//********************************************************************* +void SetOutReg(TCP3_REGS *reg, OUT_TCP3_REGS *outReg) +{ + + + outReg->mode_sel = reg->mode_sel ; + outReg->lte_crc_init_sel = reg->lte_crc_init_sel ; + outReg->NumInfoBits = reg->NumInfoBits ; + outReg->SW0_length = reg->SW0_length ; + outReg->maxst_en = reg->maxst_en ; + outReg->out_flag_en = reg->out_flag_en ; + outReg->out_order_sel = reg->out_order_sel ; + outReg->ext_scale_en = reg->ext_scale_en ; + outReg->soft_out_flag_en = reg->soft_out_flag_en ; + outReg->soft_out_fmt = reg->soft_out_fmt ; + outReg->min_itr = reg->min_itr ; + outReg->max_itr = reg->max_itr ; + outReg->snr_val = reg->snr_val ; + outReg->snr_rep = reg->snr_rep ; + outReg->stop_sel = reg->stop_sel ; + outReg->crc_iter_pass = reg->crc_iter_pass ; + outReg->crc_sel = reg->crc_sel ; + outReg->maxst_thold = reg->maxst_thold ; + outReg->maxst_value = reg->maxst_value ; + outReg->ext_scale_0 = reg->ext_scale_0 ; + outReg->ext_scale_1 = reg->ext_scale_1 ; + outReg->ext_scale_2 = reg->ext_scale_2 ; + outReg->ext_scale_3 = reg->ext_scale_3 ; + outReg->ext_scale_4 = reg->ext_scale_4 ; + outReg->ext_scale_5 = reg->ext_scale_5 ; + outReg->ext_scale_6 = reg->ext_scale_6 ; + outReg->ext_scale_7 = reg->ext_scale_7 ; + outReg->ext_scale_8 = reg->ext_scale_8 ; + outReg->ext_scale_9 = reg->ext_scale_9 ; + outReg->ext_scale_10 = reg->ext_scale_10 ; + outReg->ext_scale_11 = reg->ext_scale_11 ; + outReg->ext_scale_12 = reg->ext_scale_12 ; + outReg->ext_scale_13 = reg->ext_scale_13 ; + outReg->ext_scale_14 = reg->ext_scale_14 ; + outReg->ext_scale_15 = reg->ext_scale_15 ; + +} \ No newline at end of file diff --git a/test/gen_test_vectors/test0_lte/block0_cfgreg.dat b/test/gen_test_vectors/test0_lte/block0_cfgreg.dat new file mode 100644 index 0000000..0817a15 --- /dev/null +++ b/test/gen_test_vectors/test0_lte/block0_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +5504 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test0_lte/config_1.cfg b/test/gen_test_vectors/test0_lte/config_1.cfg new file mode 100644 index 0000000..90d1d94 --- /dev/null +++ b/test/gen_test_vectors/test0_lte/config_1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 177 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 18882671 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test0_lte/config_list.cfg b/test/gen_test_vectors/test0_lte/config_list.cfg new file mode 100644 index 0000000..d7796b0 --- /dev/null +++ b/test/gen_test_vectors/test0_lte/config_list.cfg @@ -0,0 +1 @@ +config_1.cfg diff --git a/test/gen_test_vectors/test0_lte/number_of_blocks.dat b/test/gen_test_vectors/test0_lte/number_of_blocks.dat new file mode 100644 index 0000000..f33dfa2 --- /dev/null +++ b/test/gen_test_vectors/test0_lte/number_of_blocks.dat @@ -0,0 +1 @@ +1 diff --git a/test/gen_test_vectors/test0_wcdma/config_1.cfg b/test/gen_test_vectors/test0_wcdma/config_1.cfg new file mode 100644 index 0000000..2243e56 --- /dev/null +++ b/test/gen_test_vectors/test0_wcdma/config_1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 4845 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 18882671 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test0_wcdma/config_list.cfg b/test/gen_test_vectors/test0_wcdma/config_list.cfg new file mode 100644 index 0000000..d7796b0 --- /dev/null +++ b/test/gen_test_vectors/test0_wcdma/config_list.cfg @@ -0,0 +1 @@ +config_1.cfg diff --git a/test/gen_test_vectors/test0_wimax/config_1.cfg b/test/gen_test_vectors/test0_wimax/config_1.cfg new file mode 100644 index 0000000..a7de42e --- /dev/null +++ b/test/gen_test_vectors/test0_wimax/config_1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 0 +tcp3_softOutBitsReadEn = 0 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 2 +Add_noise = 1 +c_model_seed = 18882671 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test0_wimax/config_list.cfg b/test/gen_test_vectors/test0_wimax/config_list.cfg new file mode 100644 index 0000000..d7796b0 --- /dev/null +++ b/test/gen_test_vectors/test0_wimax/config_list.cfg @@ -0,0 +1 @@ +config_1.cfg diff --git a/test/gen_test_vectors/test1_lte/block0_cfgreg.dat b/test/gen_test_vectors/test1_lte/block0_cfgreg.dat new file mode 100644 index 0000000..3ea2f89 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/block0_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +1024 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test1_lte/block1_cfgreg.dat b/test/gen_test_vectors/test1_lte/block1_cfgreg.dat new file mode 100644 index 0000000..2b693a5 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/block1_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +1056 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test1_lte/block2_cfgreg.dat b/test/gen_test_vectors/test1_lte/block2_cfgreg.dat new file mode 100644 index 0000000..08bb066 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/block2_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +1088 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test1_lte/block3_cfgreg.dat b/test/gen_test_vectors/test1_lte/block3_cfgreg.dat new file mode 100644 index 0000000..cce91e9 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/block3_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +1120 +64 +0 +1 +0 +1 +1 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test1_lte/block4_cfgreg.dat b/test/gen_test_vectors/test1_lte/block4_cfgreg.dat new file mode 100644 index 0000000..9f654b8 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/block4_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +40 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test1_lte/block5_cfgreg.dat b/test/gen_test_vectors/test1_lte/block5_cfgreg.dat new file mode 100644 index 0000000..208dd48 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/block5_cfgreg.dat @@ -0,0 +1,35 @@ +1 +0 +6144 +64 +0 +0 +0 +1 +0 +1 +1 +8 +14 +1 +0 +1 +0 +4 +2 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 diff --git a/test/gen_test_vectors/test1_lte/test1_config1.cfg b/test/gen_test_vectors/test1_lte/test1_config1.cfg new file mode 100644 index 0000000..4095ebf --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_lte/test1_config2.cfg b/test/gen_test_vectors/test1_lte/test1_config2.cfg new file mode 100644 index 0000000..a18139b --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 92 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -10 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_lte/test1_config3.cfg b/test/gen_test_vectors/test1_lte/test1_config3.cfg new file mode 100644 index 0000000..9356800 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 93 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#cp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_lte/test1_config4.cfg b/test/gen_test_vectors/test1_lte/test1_config4.cfg new file mode 100644 index 0000000..1d0022a --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 94 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_lte/test1_config5.cfg b/test/gen_test_vectors/test1_lte/test1_config5.cfg new file mode 100644 index 0000000..6dc6b51 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_lte/test1_config6.cfg b/test/gen_test_vectors/test1_lte/test1_config6.cfg new file mode 100644 index 0000000..6c373e5 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_lte/test1_list.cfg b/test/gen_test_vectors/test1_lte/test1_list.cfg new file mode 100644 index 0000000..71f4258 --- /dev/null +++ b/test/gen_test_vectors/test1_lte/test1_list.cfg @@ -0,0 +1,6 @@ +test1_config1.cfg +test1_config2.cfg +test1_config3.cfg +test1_config4.cfg +test1_config5.cfg +test1_config6.cfg diff --git a/test/gen_test_vectors/test1_wcdma/test1_config1.cfg b/test/gen_test_vectors/test1_wcdma/test1_config1.cfg new file mode 100644 index 0000000..d4043f6 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config1.cfg @@ -0,0 +1,39 @@ +Coding_standard = 3 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 10 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 0 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test1_wcdma/test1_config10.cfg b/test/gen_test_vectors/test1_wcdma/test1_config10.cfg new file mode 100644 index 0000000..4ae3ed8 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config10.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 800 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wcdma/test1_config11.cfg b/test/gen_test_vectors/test1_wcdma/test1_config11.cfg new file mode 100644 index 0000000..095ce8a --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config11.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 810 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wcdma/test1_config12.cfg b/test/gen_test_vectors/test1_wcdma/test1_config12.cfg new file mode 100644 index 0000000..443ac8a --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config12.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 820 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wcdma/test1_config2.cfg b/test/gen_test_vectors/test1_wcdma/test1_config2.cfg new file mode 100644 index 0000000..2965862 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config2.cfg @@ -0,0 +1,39 @@ +Coding_standard = 3 +Frame_size_index = 101 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test1_wcdma/test1_config3.cfg b/test/gen_test_vectors/test1_wcdma/test1_config3.cfg new file mode 100644 index 0000000..3944415 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config3.cfg @@ -0,0 +1,41 @@ +Coding_standard = 3 +Frame_size_index = 102 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test1_wcdma/test1_config4.cfg b/test/gen_test_vectors/test1_wcdma/test1_config4.cfg new file mode 100644 index 0000000..0aa66c4 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config4.cfg @@ -0,0 +1,41 @@ +Coding_standard = 3 +Frame_size_index = 103 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test1_wcdma/test1_config5.cfg b/test/gen_test_vectors/test1_wcdma/test1_config5.cfg new file mode 100644 index 0000000..1cc12fc --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config5.cfg @@ -0,0 +1,39 @@ +Coding_standard = 3 +Frame_size_index = 104 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test1_wcdma/test1_config6.cfg b/test/gen_test_vectors/test1_wcdma/test1_config6.cfg new file mode 100644 index 0000000..1124108 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config6.cfg @@ -0,0 +1,39 @@ +Coding_standard = 3 +Frame_size_index = 105 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test1_wcdma/test1_config7.cfg b/test/gen_test_vectors/test1_wcdma/test1_config7.cfg new file mode 100644 index 0000000..7a7f1ab --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config7.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 106 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wcdma/test1_config8.cfg b/test/gen_test_vectors/test1_wcdma/test1_config8.cfg new file mode 100644 index 0000000..42f4193 --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config8.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 107 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wcdma/test1_config9.cfg b/test/gen_test_vectors/test1_wcdma/test1_config9.cfg new file mode 100644 index 0000000..1fdc9ee --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_config9.cfg @@ -0,0 +1,40 @@ +Coding_standard = 3 +Frame_size_index = 2000 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 + +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 + +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wcdma/test1_list.cfg b/test/gen_test_vectors/test1_wcdma/test1_list.cfg new file mode 100644 index 0000000..82f5a5e --- /dev/null +++ b/test/gen_test_vectors/test1_wcdma/test1_list.cfg @@ -0,0 +1,32 @@ +test1_config1.cfg +test1_config2.cfg +test1_config3.cfg +test1_config4.cfg +test1_config5.cfg +test1_config6.cfg +test1_config7.cfg +test1_config8.cfg +test1_config9.cfg +test1_config10.cfg +test1_config11.cfg +test1_config12.cfg +test1_config2.cfg +test1_config1.cfg +test1_config3.cfg +test1_config4.cfg +test1_config5.cfg +test1_config6.cfg +test1_config2.cfg +test1_config7.cfg +test1_config8.cfg +test1_config9.cfg +test1_config10.cfg +test1_config11.cfg +test1_config12.cfg +test1_config7.cfg +test1_config8.cfg +test1_config9.cfg +test1_config10.cfg +test1_config11.cfg +test1_config12.cfg +test1_config1.cfg diff --git a/test/gen_test_vectors/test1_wimax/test1_config1.cfg b/test/gen_test_vectors/test1_wimax/test1_config1.cfg new file mode 100644 index 0000000..1e56818 --- /dev/null +++ b/test/gen_test_vectors/test1_wimax/test1_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wimax/test1_config2.cfg b/test/gen_test_vectors/test1_wimax/test1_config2.cfg new file mode 100644 index 0000000..efc0f8c --- /dev/null +++ b/test/gen_test_vectors/test1_wimax/test1_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 15 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wimax/test1_config3.cfg b/test/gen_test_vectors/test1_wimax/test1_config3.cfg new file mode 100644 index 0000000..ad96872 --- /dev/null +++ b/test/gen_test_vectors/test1_wimax/test1_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 0 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wimax/test1_config4.cfg b/test/gen_test_vectors/test1_wimax/test1_config4.cfg new file mode 100644 index 0000000..18b596c --- /dev/null +++ b/test/gen_test_vectors/test1_wimax/test1_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 1 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wimax/test1_config5.cfg b/test/gen_test_vectors/test1_wimax/test1_config5.cfg new file mode 100644 index 0000000..cb7cd75 --- /dev/null +++ b/test/gen_test_vectors/test1_wimax/test1_config5.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 5 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test1_wimax/test1_list.cfg b/test/gen_test_vectors/test1_wimax/test1_list.cfg new file mode 100644 index 0000000..a4b1f1d --- /dev/null +++ b/test/gen_test_vectors/test1_wimax/test1_list.cfg @@ -0,0 +1,5 @@ +test1_config1.cfg +test1_config2.cfg +test1_config3.cfg +test1_config4.cfg +test1_config5.cfg diff --git a/test/gen_test_vectors/test2_lte/test2_config1.cfg b/test/gen_test_vectors/test2_lte/test2_config1.cfg new file mode 100644 index 0000000..bd87e4d --- /dev/null +++ b/test/gen_test_vectors/test2_lte/test2_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<======LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_lte/test2_config2.cfg b/test/gen_test_vectors/test2_lte/test2_config2.cfg new file mode 100644 index 0000000..3e5a7bc --- /dev/null +++ b/test/gen_test_vectors/test2_lte/test2_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 81 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 1; #<======LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_lte/test2_config3.cfg b/test/gen_test_vectors/test2_lte/test2_config3.cfg new file mode 100644 index 0000000..7413385 --- /dev/null +++ b/test/gen_test_vectors/test2_lte/test2_config3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 91 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 0; +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_lte/test2_config4.cfg b/test/gen_test_vectors/test2_lte/test2_config4.cfg new file mode 100644 index 0000000..6372c06 --- /dev/null +++ b/test/gen_test_vectors/test2_lte/test2_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 1 +Frame_size_index = 81 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_intlvLoadSel = 0; #do not load interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_lte/test2_list.cfg b/test/gen_test_vectors/test2_lte/test2_list.cfg new file mode 100644 index 0000000..7d8ea25 --- /dev/null +++ b/test/gen_test_vectors/test2_lte/test2_list.cfg @@ -0,0 +1,4 @@ +test2_config1.cfg +test2_config2.cfg +test2_config3.cfg +test2_config4.cfg diff --git a/test/gen_test_vectors/test2_wcdma/test2_config1.cfg b/test/gen_test_vectors/test2_wcdma/test2_config1.cfg new file mode 100644 index 0000000..d7f613d --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_config1.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 5113 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test2_wcdma/test2_config2.cfg b/test/gen_test_vectors/test2_wcdma/test2_config2.cfg new file mode 100644 index 0000000..bc61e97 --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_config2.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 5114 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test2_wcdma/test2_config3.cfg b/test/gen_test_vectors/test2_wcdma/test2_config3.cfg new file mode 100644 index 0000000..186b3d5 --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_config3.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 400 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test2_wcdma/test2_config4.cfg b/test/gen_test_vectors/test2_wcdma/test2_config4.cfg new file mode 100644 index 0000000..d6e97f2 --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_config4.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 300 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test2_wcdma/test2_config5.cfg b/test/gen_test_vectors/test2_wcdma/test2_config5.cfg new file mode 100644 index 0000000..9ca8085 --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 200 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test2_wcdma/test2_config6.cfg b/test/gen_test_vectors/test2_wcdma/test2_config6.cfg new file mode 100644 index 0000000..bf44f4f --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_config6.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_wcdma/test2_list.cfg b/test/gen_test_vectors/test2_wcdma/test2_list.cfg new file mode 100644 index 0000000..b7a0ab3 --- /dev/null +++ b/test/gen_test_vectors/test2_wcdma/test2_list.cfg @@ -0,0 +1,6 @@ +test2_config1.cfg +test2_config2.cfg +test2_config3.cfg +test2_config4.cfg +test2_config5.cfg +test2_config6.cfg diff --git a/test/gen_test_vectors/test2_wimax/test2_config1.cfg b/test/gen_test_vectors/test2_wimax/test2_config1.cfg new file mode 100644 index 0000000..a164146 --- /dev/null +++ b/test/gen_test_vectors/test2_wimax/test2_config1.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_wimax/test2_config2.cfg b/test/gen_test_vectors/test2_wimax/test2_config2.cfg new file mode 100644 index 0000000..dcd00fe --- /dev/null +++ b/test/gen_test_vectors/test2_wimax/test2_config2.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_wimax/test2_config3.cfg b/test/gen_test_vectors/test2_wimax/test2_config3.cfg new file mode 100644 index 0000000..3f1cac7 --- /dev/null +++ b/test/gen_test_vectors/test2_wimax/test2_config3.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 0; #<======DO NOT LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_wimax/test2_config4.cfg b/test/gen_test_vectors/test2_wimax/test2_config4.cfg new file mode 100644 index 0000000..fee995a --- /dev/null +++ b/test/gen_test_vectors/test2_wimax/test2_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 0; #<======DO NOT LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test2_wimax/test2_list.cfg b/test/gen_test_vectors/test2_wimax/test2_list.cfg new file mode 100644 index 0000000..7d8ea25 --- /dev/null +++ b/test/gen_test_vectors/test2_wimax/test2_list.cfg @@ -0,0 +1,4 @@ +test2_config1.cfg +test2_config2.cfg +test2_config3.cfg +test2_config4.cfg diff --git a/test/gen_test_vectors/test3_lte/test3_config1.cfg b/test/gen_test_vectors/test3_lte/test3_config1.cfg new file mode 100644 index 0000000..7f90bf5 --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_lte/test3_config2.cfg b/test/gen_test_vectors/test3_lte/test3_config2.cfg new file mode 100644 index 0000000..ff8e371 --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -10 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_lte/test3_config3.cfg b/test/gen_test_vectors/test3_lte/test3_config3.cfg new file mode 100644 index 0000000..cdf28e2 --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#cp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_lte/test3_config4.cfg b/test/gen_test_vectors/test3_lte/test3_config4.cfg new file mode 100644 index 0000000..ab21069 --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_lte/test3_config5.cfg b/test/gen_test_vectors/test3_lte/test3_config5.cfg new file mode 100644 index 0000000..14c4517 --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_lte/test3_config6.cfg b/test/gen_test_vectors/test3_lte/test3_config6.cfg new file mode 100644 index 0000000..14c4517 --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 187 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_lte/test3_list.cfg b/test/gen_test_vectors/test3_lte/test3_list.cfg new file mode 100644 index 0000000..d0a5e8d --- /dev/null +++ b/test/gen_test_vectors/test3_lte/test3_list.cfg @@ -0,0 +1,6 @@ +test3_config1.cfg +test3_config2.cfg +test3_config3.cfg +test3_config4.cfg +test3_config5.cfg +test3_config6.cfg diff --git a/test/gen_test_vectors/test3_wcdma/test3_config1.cfg b/test/gen_test_vectors/test3_wcdma/test3_config1.cfg new file mode 100644 index 0000000..2313b76 --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config1.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 2001 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_config2.cfg b/test/gen_test_vectors/test3_wcdma/test3_config2.cfg new file mode 100644 index 0000000..045d15e --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config2.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 2002 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_config3.cfg b/test/gen_test_vectors/test3_wcdma/test3_config3.cfg new file mode 100644 index 0000000..c5afa2e --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config3.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 1100 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_config4.cfg b/test/gen_test_vectors/test3_wcdma/test3_config4.cfg new file mode 100644 index 0000000..7b7c25d --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config4.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 1200 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wcdma/test3_config5.cfg b/test/gen_test_vectors/test3_wcdma/test3_config5.cfg new file mode 100644 index 0000000..470fe1e --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 1300 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_config6.cfg b/test/gen_test_vectors/test3_wcdma/test3_config6.cfg new file mode 100644 index 0000000..65723c4 --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 1400 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_config7.cfg b/test/gen_test_vectors/test3_wcdma/test3_config7.cfg new file mode 100644 index 0000000..729f7a2 --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config7.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 50 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_config8.cfg b/test/gen_test_vectors/test3_wcdma/test3_config8.cfg new file mode 100644 index 0000000..1390fd0 --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config8.cfg @@ -0,0 +1,37 @@ +Coding_standard = 3 +Frame_size_index = 51 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wcdma/test3_config9.cfg b/test/gen_test_vectors/test3_wcdma/test3_config9.cfg new file mode 100644 index 0000000..d3d5771 --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_config9.cfg @@ -0,0 +1,36 @@ +Coding_standard = 3 +Frame_size_index = 52 +Max_number_of_turbo_iterations = 8 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 #<==This one is irellevant +tcp3_intlvLoadSel = 1; #<====== LOAD interleaver +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt diff --git a/test/gen_test_vectors/test3_wcdma/test3_list.cfg b/test/gen_test_vectors/test3_wcdma/test3_list.cfg new file mode 100644 index 0000000..1c85397 --- /dev/null +++ b/test/gen_test_vectors/test3_wcdma/test3_list.cfg @@ -0,0 +1,9 @@ +test3_config1.cfg +test3_config2.cfg +test3_config3.cfg +test3_config4.cfg +test3_config5.cfg +test3_config6.cfg +test3_config7.cfg +test3_config8.cfg +test3_config9.cfg diff --git a/test/gen_test_vectors/test3_wimax/test3_config1.cfg b/test/gen_test_vectors/test3_wimax/test3_config1.cfg new file mode 100644 index 0000000..c3c4f80 --- /dev/null +++ b/test/gen_test_vectors/test3_wimax/test3_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wimax/test3_config2.cfg b/test/gen_test_vectors/test3_wimax/test3_config2.cfg new file mode 100644 index 0000000..81c6f4f --- /dev/null +++ b/test/gen_test_vectors/test3_wimax/test3_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wimax/test3_config3.cfg b/test/gen_test_vectors/test3_wimax/test3_config3.cfg new file mode 100644 index 0000000..b08fd40 --- /dev/null +++ b/test/gen_test_vectors/test3_wimax/test3_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wimax/test3_config4.cfg b/test/gen_test_vectors/test3_wimax/test3_config4.cfg new file mode 100644 index 0000000..b08fd40 --- /dev/null +++ b/test/gen_test_vectors/test3_wimax/test3_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 10 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wimax/test3_config5.cfg b/test/gen_test_vectors/test3_wimax/test3_config5.cfg new file mode 100644 index 0000000..c3c4f80 --- /dev/null +++ b/test/gen_test_vectors/test3_wimax/test3_config5.cfg @@ -0,0 +1,38 @@ +Coding_standard = 2 +Frame_size_index = 9 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 64 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test3_wimax/test3_list.cfg b/test/gen_test_vectors/test3_wimax/test3_list.cfg new file mode 100644 index 0000000..446d70c --- /dev/null +++ b/test/gen_test_vectors/test3_wimax/test3_list.cfg @@ -0,0 +1,5 @@ +test3_config1.cfg +test3_config2.cfg +test3_config3.cfg +test3_config4.cfg +test3_config5.cfg diff --git a/test/gen_test_vectors/test4_lte/test4_config1.cfg b/test/gen_test_vectors/test4_lte/test4_config1.cfg new file mode 100644 index 0000000..97af5dc --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_config1.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 95 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -3 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test4_lte/test4_config2.cfg b/test/gen_test_vectors/test4_lte/test4_config2.cfg new file mode 100644 index 0000000..cf2f23c --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_config2.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 90 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = -10 #0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test4_lte/test4_config3.cfg b/test/gen_test_vectors/test4_lte/test4_config3.cfg new file mode 100644 index 0000000..5ff547b --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_config3.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 95 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +#tcp3_outStatusReadEn = 1 +#cp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test4_lte/test4_config4.cfg b/test/gen_test_vectors/test4_lte/test4_config4.cfg new file mode 100644 index 0000000..31d4501 --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_config4.cfg @@ -0,0 +1,38 @@ +Coding_standard = 1 +Frame_size_index = 95 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +tcp3_outStatusReadEn = 1 +tcp3_softOutBitsReadEn = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test4_lte/test4_config5.cfg b/test/gen_test_vectors/test4_lte/test4_config5.cfg new file mode 100644 index 0000000..fd8a4b3 --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_config5.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 90 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test4_lte/test4_config6.cfg b/test/gen_test_vectors/test4_lte/test4_config6.cfg new file mode 100644 index 0000000..626d7b7 --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_config6.cfg @@ -0,0 +1,36 @@ +Coding_standard = 1 +Frame_size_index = 95 +Max_number_of_turbo_iterations = 7 +Min_number_of_turbo_iterations = 1 +Max_star_enable = 0 +Max_star_threshold = 4 +Max_star_value = 2 +tcp3_extrScaleEn = 1 +Extrinsic_scales = 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 +tcp3_SW0_length = 32 +tcp3_stopSel = 0 +tcp3_SNR_Report = 1 +tcp3_SNR_stopVal = 14 +tcp3_intlvGenEn = 1 +tcp3_softOutBitFormat = 1 +tcp3_lteCrcInitSel = 0 +tcp3_lteCrcIterPass = 1 +Save_intermediate_data = 1 +Minimum_number_of_FEC_blocks = 1 +Maximum_number_of_FEC_blocks = 1 +Snr_increment_step = 0 +Frame_error_rate_limit = -4 +Snr_init_value = 0 +Add_noise = 1 +c_model_seed = 1075579159 +Bit_width_of_integer_part = 4 +Bit_width_of_fractional_part = 2 +Minimum_number_of_frame_errors = 0 +Store_info_bits_to_file = 1 +Load_info_bits_from_file = 0 +Info_bits_file_name = infobits_file.txt +Info_bits_file_includes_CRC= 1 +Initial_process_index = 0 +Store_coded_bits_to_file = 1 +Coded_bits_file_name = codedbits_file.txt + \ No newline at end of file diff --git a/test/gen_test_vectors/test4_lte/test4_list.cfg b/test/gen_test_vectors/test4_lte/test4_list.cfg new file mode 100644 index 0000000..a280b3f --- /dev/null +++ b/test/gen_test_vectors/test4_lte/test4_list.cfg @@ -0,0 +1,6 @@ +test4_config1.cfg +test4_config2.cfg +test4_config3.cfg +test4_config4.cfg +test4_config5.cfg +test4_config6.cfg diff --git a/test/macros.ini b/test/macros.ini new file mode 100644 index 0000000..4a7cd7f --- /dev/null +++ b/test/macros.ini @@ -0,0 +1 @@ +TCP3D_INSTALL_PATH = ..\..\..\..\.. diff --git a/test/simtci6634/c66/bios/link_test.cmd b/test/simtci6634/c66/bios/link_test.cmd new file mode 100644 index 0000000..3e83883 --- /dev/null +++ b/test/simtci6634/c66/bios/link_test.cmd @@ -0,0 +1,7 @@ +SECTIONS +{ + .init_array: load >> L2SRAM + .csl_vect > L2SRAM + .main_mem > L2SRAM + .profile_mem > L2SRAM +} diff --git a/test/simtci6634/c66/bios/tcp3dSimtci6634C66BiosTestProject.txt b/test/simtci6634/c66/bios/tcp3dSimtci6634C66BiosTestProject.txt new file mode 100644 index 0000000..e4c37f2 --- /dev/null +++ b/test/simtci6634/c66/bios/tcp3dSimtci6634C66BiosTestProject.txt @@ -0,0 +1,18 @@ +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/src/tcp3d_betaState.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/src/tcp3d_drv.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/src/tcp3d_reg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/tcp3d_drv_sample_init.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/sample_cfg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/tcp3d_main.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/sample_cs.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/sample_init.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/sample_int_reg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/CpIntc_local.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/tcp3d_codeBlkSeg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/tcp3d_inputConfigPrep.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/tcp3d_itg.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/src/tcp3d_testset_functions.c" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/simtci6634/c66/bios/link_test.cmd" +-ccs.linkFile "TCP3D_INSTALL_PATH/ti/drv/tcp3d/test/simtci6634/c66/bios/tcp3d_drv_test.cfg" +-ccs.setCompilerOptions "-mv6600 -g -DUSE_TCP3D_DRIVER_TYPES --diag_warning=225 -I${TCP3D_INSTALL_PATH} -I${TCP3D_INSTALL_PATH}/ti/drv/tcp3d/test/src -I${TCP3D_INSTALL_PATH}/ti/drv/tcp3d/test/simtci6634/c66/bios" +-rtsc.enableRtsc diff --git a/test/simtci6634/c66/bios/tcp3d_drv_test.cfg b/test/simtci6634/c66/bios/tcp3d_drv_test.cfg new file mode 100644 index 0000000..99b2ecc --- /dev/null +++ b/test/simtci6634/c66/bios/tcp3d_drv_test.cfg @@ -0,0 +1,125 @@ +/* + * ======== tcp3d_drv_test.cfg ======== + */ + +/* IPC packages */ +var ListMP = xdc.useModule('ti.sdo.ipc.ListMP'); +var GateMP = xdc.useModule('ti.sdo.ipc.GateMP'); +var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion'); +var HeapMemMP = xdc.useModule('ti.sdo.ipc.heaps.HeapMemMP'); +var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc'); +var Ipc = xdc.useModule('ti.sdo.ipc.Ipc'); + +/* + * Configure System to use SysMin + */ +System = xdc.useModule('xdc.runtime.System'); +SysStd = xdc.useModule('xdc.runtime.SysStd'); +System.SupportProxy = xdc.useModule('xdc.runtime.SysMin') +System.SupportProxy = SysStd; +System.extendedFormats = "%$S%f"; + +/* Set the system stack - 0x2000 */ +Program.stack = 0x4000; + +/* + * Pull in BIOS modules + */ +xdc.useModule('ti.sysbios.BIOS'); +xdc.useModule('ti.sysbios.hal.Timer'); +xdc.useModule('ti.sysbios.knl.Semaphore'); +xdc.useModule('ti.sysbios.knl.Swi'); +xdc.useModule('ti.sysbios.knl.Task'); +xdc.useModule('ti.sysbios.hal.Cache'); +xdc.useModule('xdc.runtime.Log'); +xdc.useModule('xdc.runtime.Error'); + +/* + * Memory related modules and then allocate as needed + */ +var Memory = xdc.useModule('xdc.runtime.Memory'); +var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem'); + +/* Use HeapMem for default heap manager and give it 49152 (0xC000) + * bytes to work with. + */ +Program.sectMap["systemHeap"] = Program.platform.dataMemory; +var heapMemParams = new HeapMem.Params; +heapMemParams.size = 0x18000; +heapMemParams.sectionName = "systemHeap"; +Memory.defaultHeapInstance = HeapMem.create(heapMemParams); + +/* + * Creating Heap Memories for using with test application + */ +/* Create a heap for TCP3D input/output data using ti.bios.HeapMem. */ +/* Program.sectMap["tcp3DataSection"] = {loadSegment: "MSMCSRAM"}; +var heapMemParams1 = new HeapMem.Params; +heapMemParams1.size = 0x180000; +heapMemParams1.sectionName = "tcp3DataSection"; +Program.global.tcp3dDataHeap = HeapMem.create(heapMemParams1); */ + +/* Create a heap for TCP3D driver using ti.bios.HeapMem. */ +Program.sectMap["tcp3DriverSection"] = Program.platform.dataMemory; +var heapMemParams2 = new HeapMem.Params; +heapMemParams2.size = 0x4000; +heapMemParams2.sectionName = "tcp3DriverSection"; +Program.global.tcp3dDrvHeap = HeapMem.create(heapMemParams2); + +/* To avoid wasting shared memory for Notify and MessageQ transports */ +for (var i = 0; i < MultiProc.numProcessors; i++) { + Ipc.setEntryMeta({ + remoteProcId: i, + setupNotify: false, + setupMessageQ: false, + }); +} + + +SharedRegion.setEntryMeta(0, + { base: 0x0C000000, + len: 0x200000, + ownerProcId: 0, + cacheLineSize: 64, + isValid: true, + name: "sharemem", + }); + +/* + * Setup the Logger for Driver + */ +var LoggerSys = xdc.useModule('xdc.runtime.LoggerSys'); +var LoggerSys0Params0 = new LoggerSys.Params; +LoggerSys0Params0.instance.name = 'tcp3dDrvLog'; +Program.global.tcp3dDrvLog = LoggerSys.create(LoggerSys0Params0); + +/* + * Pull in modules for EDMA3 LLD use + */ +xdc.useModule('ti.sysbios.family.c64p.Hwi'); +xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc'); +var ECM = xdc.useModule('ti.sysbios.family.c64p.EventCombiner'); + +/* + * Enable Event Groups here and registering of ISR for specific GEM INTC is done + * using EventCombiner_dispatchPlug() and Hwi_eventMap() APIs + */ +ECM.eventGroupHwiNum[0] = 7; +ECM.eventGroupHwiNum[1] = 8; +ECM.eventGroupHwiNum[2] = 9; +ECM.eventGroupHwiNum[3] = 10; + +/******************************************************************* + * Other Dependent packages + *******************************************************************/ +/*xdc.loadPackage('ti.wbi.common.api');*/ +xdc.loadPackage('ti.sdo.edma3.drv'); + +/* Load the CSL package */ +var Csl = xdc.useModule('ti.csl.Settings'); + +/* Device specific configuration */ +var devName = "tci6634"; +Csl.deviceType = devName; + +/* end of file */ diff --git a/test/simtci6634/c66/bios/tcp3d_osal.h b/test/simtci6634/c66/bios/tcp3d_osal.h new file mode 100644 index 0000000..822b7cd --- /dev/null +++ b/test/simtci6634/c66/bios/tcp3d_osal.h @@ -0,0 +1,56 @@ +/** + * @file tcp3d_osal.h + * + * @brief + * This is the OS adaptation layer for the TCP3D Driver which has + * been ported for XDC Runtime and BIOS. + * + * This is an example of Approach 2 in which the + * application rebuilds the TCP3D driver with the new definitions. + * + * Please refer to the 'tcp3d_osal.h' in the API documentation. + * + * \par + * NOTE: + * (C) Copyright 2009 Texas Instruments, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#ifndef __TCP3D_OSAL_H__ +#define __TCP3D_OSAL_H__ + +#include +#include + +/* TCP3D OSAL Logging API is mapped directly to an XDC Runtime API */ +#define Tcp3d_osalLog System_printf + +#endif /* __TCP3D_OSAL_H__ */ + diff --git a/test/src/CpIntc_local.c b/test/src/CpIntc_local.c new file mode 100644 index 0000000..678879d --- /dev/null +++ b/test/src/CpIntc_local.c @@ -0,0 +1,144 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +/* + * Copyright (c) 2009 + * Texas Instruments + * + * All rights reserved. Property of Texas Instruments + * Restricted rights to use, duplicate or disclose this code are + * granted through contract. + * + * */ +/* + * ======== CpIntc.c ======== + */ + +#include +#include +#include +#include + +#include "ti/sysbios/family/c66/tci66xx/package/internal/CpIntc.xdc.h" + +/* + * ======== CpIntc_dispatch ======== + */ +//UInt32 cpintcCntr = 0; +//UInt32 cpintcCntr1 = 0; +//UInt32 cpintcCntr2 = 0; +//UInt32 sysIntTrack[200]; +Void CpIntc_dispatchLoc(UInt hostInt) +{ + Int32 i; + UInt32 index; + UInt32 offset; + UInt32 srsrVal; + Int32 sysInt; + UInt32 id = 0; + extern volatile cregister UInt32 DNUM; + +// cpintcCntr++; + + /* for core# 4-7 use INTC1 otherwise use INTC0 */ + if (DNUM > 3) { + id = 1; + } + +// if ( (*((UInt32*)0x0180000C)) == 0x1 ) +// System_printf("MISS detected\n"); + + sysInt = CpIntc_module->hostIntToSysInt[hostInt]; + +// sysIntTrack[cpintcCntr]=((hostInt<<16)|sysInt); +// sysIntTrack[0]=((hostInt<<16)|sysInt); + + /* + * If only one system interrupt is mapped to a host interrupt + * we don't need to read the Sys Status Raw Registers. We + * know exactly which system interrupt triggered the interrupt. + */ + if (sysInt != 0xff && sysInt != 0xfe) { +// cpintcCntr1++; + /* clear system interrupt associated with host interrupt */ + CpIntc_clearSysInt(id, sysInt); + + /* call function with arg */ + CpIntc_module->dispatchTab[sysInt].fxn( + CpIntc_module->dispatchTab[sysInt].arg); + } + else { +// cpintcCntr2++; + /* + * Loop through System Interrupt Status Enabled/Clear Registers for + * pending enabled interrupts. The highest numbered system interrupt + * will be processed first from left to right. + */ + for (i = CpIntc_numStatusRegs - 1; i >= 0; i--) { + offset = i << 5; + + /* + * SDOCM00062100 - Nyquist CpIntc_dispatch needs to read the + * correct status pending and enabled register once the + * Simulator is fixed. + * Fix is: + * srsrVal = CpIntc_module->controller[id]->SECR[j - i]; + */ + srsrVal = CpIntc_module->controller[id]->SRSR[i] & + CpIntc_module->controller[id]->ESR[i]; + + /* Find pending interrupts from left to right */ + while (srsrVal) { + index = 31 - _lmbd(1, srsrVal); + srsrVal &= ~(1 << index); + + /* Make sure pending interrupt is mapped to host interrupt */ + if (CpIntc_module->controller[id]->CMR[offset + index] + == hostInt) { + /* clear system interrupt first */ + CpIntc_clearSysInt(id, offset + index); + + /* call function with arg */ + CpIntc_module->dispatchTab[offset + index].fxn( + CpIntc_module->dispatchTab[offset + index].arg); + } + } + } + } +} + + diff --git a/test/src/sample.h b/test/src/sample.h new file mode 100644 index 0000000..70aa3c7 --- /dev/null +++ b/test/src/sample.h @@ -0,0 +1,215 @@ +/* + * bios6_edma3_drv_sample.h + * + * Header file for the sample application for the EDMA3 Driver. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#ifndef _BIOS6_EDMA3_DRV_SAMPLE_H_ +#define _BIOS6_EDMA3_DRV_SAMPLE_H_ + +#include +#include + +/* Include EDMA3 Driver */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Set this flag to use the CpIntc_dispatchLoc() function as the Event Combiner + * dispatchPlug function when ever the system interrupts are registered with + * CPINTC with callbacks. + */ +#define USE_LOCAL_CPINTC_DISPATCH 0 + +/** + * Set this flag to use the edma3ComplHandlerLoc() function as the completion + * interrupt ISR for the region used for driver testing. + */ +#define EDMA_LOCAL_COMP_ISR 1 + +#if EDMA_LOCAL_COMP_ISR +/** + * \brief TCC Callback - Caters to channel specific status reporting. + */ +typedef struct { + /** Callback function */ + EDMA3_RM_TccCallback tccCb; + + /** Callback data, passed to the Callback function */ + void *cbData; +} tccCallbackParams; +#endif + +/* Macro to get CPINTC number */ +#define WHICH_CPINTC_NUM(core) ((core > 3)? 1: 0 ) + +/** + * Cache line size on the underlying SoC. It needs to be modified + * for different cache line sizes, if the Cache is Enabled. + */ +#define EDMA3_CACHE_LINE_SIZE_IN_BYTES (128u) + +/* Error returned in case of buffers are not aligned on the cache boundary */ +#define EDMA3_NON_ALIGNED_BUFFERS_ERROR (-1) + +/* Error returned in case of data mismatch */ +#define EDMA3_DATA_MISMATCH_ERROR (-2) + +/** + * \brief EDMA3 Initialization + * + * This function initializes the EDMA3 Driver for the given EDMA3 controller + * and opens a EDMA3 driver instance. It internally calls EDMA3_DRV_create() and + * EDMA3_DRV_open(), in that order. + * + * It also registers interrupt handlers for various EDMA3 interrupts like + * transfer completion or error interrupts. + * + * \param edma3Id [IN] EDMA3 Controller Instance Id (Hardware + * instance id, starting from 0) + * \param errorCode [IN/OUT] Error code while opening DRV instance + * \return EDMA3_DRV_Handle: If successfully opened, the API will return the + * associated driver's instance handle. + */ +EDMA3_DRV_Handle edma3init (unsigned int edma3Id, EDMA3_DRV_Result *errorCode, + unsigned int dspCoreID, unsigned int tpccRegionUsed); + +/** + * \brief EDMA3 De-initialization + * + * This function de-initializes the EDMA3 Driver for the given EDMA3 controller + * and closes the previously opened EDMA3 driver instance. It internally calls + * EDMA3_DRV_close and EDMA3_DRV_delete(), in that order. + * + * It also un-registers the previously registered interrupt handlers for various + * EDMA3 interrupts. + * + * \param edma3Id [IN] EDMA3 Controller Instance Id (Hardware + * instance id, starting from 0) + * \param hEdma [IN] EDMA3 Driver handle, returned while using + * edma3init(). + * \return EDMA3_DRV_SOK if success, else error code + */ +EDMA3_DRV_Result edma3deinit (unsigned int edma3Id, EDMA3_DRV_Handle hEdma); + + +/** + * \brief EDMA3 Cache Invalidate + * + * This function invalidates the D cache. + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheInvalidate(unsigned int mem_start_ptr, + unsigned int num_bytes); + + + +/** + * \brief EDMA3 Cache Flush + * + * This function flushes (cleans) the Cache + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheFlush(unsigned int mem_start_ptr, + unsigned int num_bytes); + + + +/** + * Counting Semaphore related functions (OS dependent) should be + * called/implemented by the application. A handle to the semaphore + * is required while opening the driver/resource manager instance. + */ + +/** + * \brief EDMA3 OS Semaphore Create + * + * This function creates a counting semaphore with specified + * attributes and initial value. It should be used to create a semaphore + * with initial value as '1'. The semaphore is then passed by the user + * to the EDMA3 driver/RM for proper sharing of resources. + * \param initVal [IN] is initial value for semaphore + * \param semParams [IN] is the semaphore attributes. + * \param hSem [OUT] is location to receive the handle to just created + * semaphore. + * \return EDMA3_DRV_SOK if successful, else a suitable error code. + */ +EDMA3_DRV_Result edma3OsSemCreate(int initVal, + const Semaphore_Params *semParams, + EDMA3_OS_Sem_Handle *hSem); + + + +/** + * \brief EDMA3 OS Semaphore Delete + * + * This function deletes or removes the specified semaphore + * from the system. Associated dynamically allocated memory + * if any is also freed up. + * \param hSem [IN] handle to the semaphore to be deleted + * \return EDMA3_DRV_SOK if successful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemDelete(EDMA3_OS_Sem_Handle hSem); + +#ifdef __cplusplus +} +#endif /* extern "C" */ + +#endif /* _BIOS6_EDMA3_DRV_SAMPLE_H_ */ + diff --git a/test/src/sample_cfg.c b/test/src/sample_cfg.c new file mode 100644 index 0000000..0f8b834 --- /dev/null +++ b/test/src/sample_cfg.c @@ -0,0 +1,1771 @@ +/* + * sample_cfg.c + * + * Platform specific EDMA3 hardware related information like number of transfer + * controllers, various interrupt ids etc. It is used while interrupts + * enabling / disabling. It needs to be ported for different SoCs. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include + +/* Number of EDMA3 controllers present in the system */ +#define NUM_EDMA3_INSTANCES 3u +const unsigned int numEdma3Instances = NUM_EDMA3_INSTANCES; + +/* Number of DSPs present in the system */ +#define NUM_DSPS 4u +//const unsigned int numDsps = NUM_DSPS; + +#define CGEM_REG_START (0x01800000) + +/* Determine the processor id by reading DNUM register. */ +unsigned short determineProcId() + { + volatile unsigned int *addr; + unsigned int core_no; + + /* Identify the core number */ + addr = (unsigned int *)(CGEM_REG_START+0x40000); + core_no = ((*addr) & 0x000F0000)>>16; + + return core_no; + } + +/** Whether global configuration required for EDMA3 or not. + * This configuration should be done only once for the EDMA3 hardware by + * any one of the masters (i.e. DSPs). + * It can be changed depending on the use-case. + */ +unsigned int gblCfgReqdArray [NUM_DSPS] = { + 0, /* DSP#0 is Master, will do the global init */ + 1, /* DSP#1 is Slave, will not do the global init */ + 1, /* DSP#2 is Slave, will not do the global init */ + 1, /* DSP#3 is Slave, will not do the global init */ + }; + +unsigned short isGblConfigRequired(unsigned int dspNum) + { + return gblCfgReqdArray[dspNum]; + } + +/* Semaphore handles */ +EDMA3_OS_Sem_Handle semHandle[NUM_EDMA3_INSTANCES] = {NULL,NULL,NULL}; + + +/* Variable which will be used internally for referring number of Event Queues. */ +unsigned int numEdma3EvtQue[NUM_EDMA3_INSTANCES] = {2u, 4u, 4u}; + +/* Variable which will be used internally for referring number of TCs. */ +unsigned int numEdma3Tc[NUM_EDMA3_INSTANCES] = {2u, 4u, 4u}; + +/** + * Variable which will be used internally for referring transfer completion + * interrupt. Completion interrupts for all the shadow regions and all the + * EDMA3 controllers are captured since it is a multi-DSP platform. + */ +unsigned int ccXferCompInt[NUM_EDMA3_INSTANCES][EDMA3_MAX_REGIONS] = { + { + 38u, 39u, 40u, 41u, + 42u, 43u, 44u, 45u, + }, + { + 8u, 9u, 10u, 11u, + 12u, 13u, 14u, 15u, + }, + { + 24u, 25u, 26u, 27u, + 28u, 29u, 30u, 31u, + }, + }; + +/** + * Variable which will be used internally for referring channel controller's + * error interrupt. + */ +unsigned int ccErrorInt[NUM_EDMA3_INSTANCES] = {32u, 0u, 16u}; + +/** + * Variable which will be used internally for referring transfer controllers' + * error interrupts. + */ +unsigned int tcErrorInt[NUM_EDMA3_INSTANCES][EDMA3_MAX_TC] = { + { + 34u, 35u, 0u, 0u, + 0u, 0u, 0u, 0u, + }, + { + 2u, 3u, 4u, 5u, + 0u, 0u, 0u, 0u, + }, + { + 18u, 19u, 20u, 21u, + 0u, 0u, 0u, 0u, + }, + }; + +/* Driver Object Initialization Configuration */ +EDMA3_DRV_GblConfigParams sampleEdma3GblCfgParams[NUM_EDMA3_INSTANCES] = +{ + { + /* EDMA3 INSTANCE# 0 */ + /** Total number of DMA Channels supported by the EDMA3 Controller */ + 16u, + /** Total number of QDMA Channels supported by the EDMA3 Controller */ + 8u, + /** Total number of TCCs supported by the EDMA3 Controller */ + 16u, + /** Total number of PaRAM Sets supported by the EDMA3 Controller */ + 128u, + /** Total number of Event Queues in the EDMA3 Controller */ + 2u, + /** Total number of Transfer Controllers (TCs) in the EDMA3 Controller */ + 2u, + /** Number of Regions on this EDMA3 controller */ + 8u, + + /** + * \brief Channel mapping existence + * A value of 0 (No channel mapping) implies that there is fixed association + * for a channel number to a parameter entry number or, in other words, + * PaRAM entry n corresponds to channel n. + */ + 1u, + + /** Existence of memory protection feature */ + 1u, + + /** Global Register Region of CC Registers */ + (void *)0x02700000u, + /** Transfer Controller (TC) Registers */ + { + (void *)0x02760000u, + (void *)0x02768000u, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL + }, + /** Interrupt no. for Transfer Completion */ + 38u, + /** Interrupt no. for CC Error */ + 32u, + /** Interrupt no. for TCs Error */ + { + 34u, + 35u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u, + }, + + /** + * \brief EDMA3 TC priority setting + * + * User can program the priority of the Event Queues + * at a system-wide level. This means that the user can set the + * priority of an IO initiated by either of the TCs (Transfer Controllers) + * relative to IO initiated by the other bus masters on the + * device (ARM, DSP, USB, etc) + */ + { + 0u, + 1u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u + }, + /** + * \brief To Configure the Threshold level of number of events + * that can be queued up in the Event queues. EDMA3CC error register + * (CCERR) will indicate whether or not at any instant of time the + * number of events queued up in any of the event queues exceeds + * or equals the threshold/watermark value that is set + * in the queue watermark threshold register (QWMTHRA). + */ + { + 16u, + 16u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief To Configure the Default Burst Size (DBS) of TCs. + * An optimally-sized command is defined by the transfer controller + * default burst size (DBS). Different TCs can have different + * DBS values. It is defined in Bytes. + */ + { + 16u, + 16u, + 0u, + 0u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief Mapping from each DMA channel to a Parameter RAM set, + * if it exists, otherwise of no use. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, + /* DMA channels 16-63 DOES NOT exist */ + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS, + EDMA3_MAX_PARAM_SETS, EDMA3_MAX_PARAM_SETS + }, + + /** + * \brief Mapping from each DMA channel to a TCC. This specific + * TCC code will be returned when the transfer is completed + * on the mapped channel. + */ + { + 0u, 1u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 4u, 5u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 8u, 9u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 12u, 13u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + /* DMA channels 16-63 DOES NOT exist */ + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, + EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC, EDMA3_MAX_TCC + }, + + /** + * \brief Mapping of DMA channels to Hardware Events from + * various peripherals, which use EDMA for data transfer. + * All channels need not be mapped, some can be free also. + */ + { + 0x00003333u, + 0x00000000u + } + }, + + { + /* EDMA3 INSTANCE# 1 */ + /** Total number of DMA Channels supported by the EDMA3 Controller */ + 64u, + /** Total number of QDMA Channels supported by the EDMA3 Controller */ + 8u, + /** Total number of TCCs supported by the EDMA3 Controller */ + 64u, + /** Total number of PaRAM Sets supported by the EDMA3 Controller */ + 512u, + /** Total number of Event Queues in the EDMA3 Controller */ + 4u, + /** Total number of Transfer Controllers (TCs) in the EDMA3 Controller */ + 4u, + /** Number of Regions on this EDMA3 controller */ + 8u, + + /** + * \brief Channel mapping existence + * A value of 0 (No channel mapping) implies that there is fixed association + * for a channel number to a parameter entry number or, in other words, + * PaRAM entry n corresponds to channel n. + */ + 1u, + + /** Existence of memory protection feature */ + 1u, + + /** Global Register Region of CC Registers */ + (void *)0x02720000u, + /** Transfer Controller (TC) Registers */ + { + (void *)0x02770000u, + (void *)0x02778000u, + (void *)0x02780000u, + (void *)0x02788000u, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL + }, + /** Interrupt no. for Transfer Completion */ + 8u, + /** Interrupt no. for CC Error */ + 0u, + /** Interrupt no. for TCs Error */ + { + 2u, + 3u, + 4u, + 5u, + 0u, + 0u, + 0u, + 0u, + }, + + /** + * \brief EDMA3 TC priority setting + * + * User can program the priority of the Event Queues + * at a system-wide level. This means that the user can set the + * priority of an IO initiated by either of the TCs (Transfer Controllers) + * relative to IO initiated by the other bus masters on the + * device (ARM, DSP, USB, etc) + */ + { + 0u, + 1u, + 2u, + 3u, + 0u, + 0u, + 0u, + 0u + }, + /** + * \brief To Configure the Threshold level of number of events + * that can be queued up in the Event queues. EDMA3CC error register + * (CCERR) will indicate whether or not at any instant of time the + * number of events queued up in any of the event queues exceeds + * or equals the threshold/watermark value that is set + * in the queue watermark threshold register (QWMTHRA). + */ + { + 16u, + 16u, + 16u, + 16u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief To Configure the Default Burst Size (DBS) of TCs. + * An optimally-sized command is defined by the transfer controller + * default burst size (DBS). Different TCs can have different + * DBS values. It is defined in Bytes. + */ + { + 8u, + 8u, + 8u, + 8u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief Mapping from each DMA channel to a Parameter RAM set, + * if it exists, otherwise of no use. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, + 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, + 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, + 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u, + 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, + 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u + }, + + /** + * \brief Mapping from each DMA channel to a TCC. This specific + * TCC code will be returned when the transfer is completed + * on the mapped channel. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, + 40u, 41u, 42u, 43u, 44u, 45u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, + 56u, 57u, 58u, 59u, 60u, 61u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP + }, + + /** + * \brief Mapping of DMA channels to Hardware Events from + * various peripherals, which use EDMA for data transfer. + * All channels need not be mapped, some can be free also. + */ + { + 0x3FFF3FFFu, + 0x3FFF3FFFu + } + }, + + { + /* EDMA3 INSTANCE# 2 */ + /** Total number of DMA Channels supported by the EDMA3 Controller */ + 64u, + /** Total number of QDMA Channels supported by the EDMA3 Controller */ + 8u, + /** Total number of TCCs supported by the EDMA3 Controller */ + 64u, + /** Total number of PaRAM Sets supported by the EDMA3 Controller */ + 512u, + /** Total number of Event Queues in the EDMA3 Controller */ + 4u, + /** Total number of Transfer Controllers (TCs) in the EDMA3 Controller */ + 4u, + /** Number of Regions on this EDMA3 controller */ + 8u, + + /** + * \brief Channel mapping existence + * A value of 0 (No channel mapping) implies that there is fixed association + * for a channel number to a parameter entry number or, in other words, + * PaRAM entry n corresponds to channel n. + */ + 1u, + + /** Existence of memory protection feature */ + 1u, + + /** Global Register Region of CC Registers */ + (void *)0x02740000u, + /** Transfer Controller (TC) Registers */ + { + (void *)0x02790000u, + (void *)0x02798000u, + (void *)0x027A0000u, + (void *)0x027A8000u, + (void *)NULL, + (void *)NULL, + (void *)NULL, + (void *)NULL + }, + /** Interrupt no. for Transfer Completion */ + 24u, + /** Interrupt no. for CC Error */ + 16u, + /** Interrupt no. for TCs Error */ + { + 18u, + 19u, + 20u, + 21u, + 0u, + 0u, + 0u, + 0u, + }, + + /** + * \brief EDMA3 TC priority setting + * + * User can program the priority of the Event Queues + * at a system-wide level. This means that the user can set the + * priority of an IO initiated by either of the TCs (Transfer Controllers) + * relative to IO initiated by the other bus masters on the + * device (ARM, DSP, USB, etc) + */ + { + 0u, + 1u, + 2u, + 3u, + 0u, + 0u, + 0u, + 0u + }, + /** + * \brief To Configure the Threshold level of number of events + * that can be queued up in the Event queues. EDMA3CC error register + * (CCERR) will indicate whether or not at any instant of time the + * number of events queued up in any of the event queues exceeds + * or equals the threshold/watermark value that is set + * in the queue watermark threshold register (QWMTHRA). + */ + { + 16u, + 16u, + 16u, + 16u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief To Configure the Default Burst Size (DBS) of TCs. + * An optimally-sized command is defined by the transfer controller + * default burst size (DBS). Different TCs can have different + * DBS values. It is defined in Bytes. + */ + { + 8u, + 8u, + 8u, + 8u, + 0u, + 0u, + 0u, + 0u + }, + + /** + * \brief Mapping from each DMA channel to a Parameter RAM set, + * if it exists, otherwise of no use. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, + 16u, 17u, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, 30u, 31u, + 32u, 33u, 34u, 35u, 36u, 37u, 38u, 39u, + 40u, 41u, 42u, 43u, 44u, 45u, 46u, 47u, + 48u, 49u, 50u, 51u, 52u, 53u, 54u, 55u, + 56u, 57u, 58u, 59u, 60u, 61u, 62u, 63u + }, + + /** + * \brief Mapping from each DMA channel to a TCC. This specific + * TCC code will be returned when the transfer is completed + * on the mapped channel. + */ + { + 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, + 8u, 9u, 10u, 11u, 12u, 13u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, 18u, 19u, 20u, 21u, 22u, 23u, + 24u, 25u, 26u, 27u, 28u, 29u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 32u, 33u, 34u, 35u, 36u, 37u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 40u, 41u, 42u, 43u, 44u, 45u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 48u, 49u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, + 56u, 57u, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP, EDMA3_RM_CH_NO_TCC_MAP + }, + + /** + * \brief Mapping of DMA channels to Hardware Events from + * various peripherals, which use EDMA for data transfer. + * All channels need not be mapped, some can be free also. + */ + { + 0x3FFC3FFFu, + 0x03033F3Fu + } + }, +}; + +EDMA3_DRV_InstanceInitConfig sampleInstInitConfig[NUM_EDMA3_INSTANCES][EDMA3_MAX_REGIONS] = + { + /* EDMA3 INSTANCE# 0 */ + { + /* Resources owned/reserved by region 0 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0xFFFF000Fu, 0x00000FFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000003u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 */ + {0x00000003u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 */ + {0x00000003u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 1 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x000000F0u, 0xFFFFF000u, 0x000000FFu, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x000000F0u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x0000000Cu}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x000000F0u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000030u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000030u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000030u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 2 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000F00u, 0x00000000u, 0xFFFFFF00u, 0x0000000Fu, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000F00u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000030u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000F00u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000300u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000300u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 3 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0xFFFFFFF0u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000F000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x000000C0u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000F000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00003000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00003000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00003000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 4 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 5 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 6 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 7 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + }, + + /* EDMA3 INSTANCE# 1 */ + { + /* Resources owned/reserved by region 0 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000FFFFu, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 159 128 191 160 223 192 255 224 */ + 0xFFFFFFFFu, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000FFFFu, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000003u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000FFFFu, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00003FFFu, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00003FFFu, 0x00000000u}, + }, + + /* Resources owned/reserved by region 1 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0xFFFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 287 256 319 288 351 320 383 352 */ + 0xFFFFFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x0000000Cu}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x3FFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 2 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 415 384 447 416 479 448 511 480 */ + 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000030u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00003FFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + }, + + /* Resources owned/reserved by region 3 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0xFFFF0000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0xFFFF0000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x000000C0u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0xFFFF0000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x3FFF0000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x3FFF0000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x3FFF0000u}, + }, + + /* Resources owned/reserved by region 4 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 5 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 6 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 7 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + }, + + /* EDMA3 INSTANCE# 2 */ + { + /* Resources owned/reserved by region 0 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000FFF0u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 159 128 191 160 223 192 255 224 */ + 0xFFFFFFFFu, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000FFF0u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000003u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000FFF0u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00003FF0u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00003FF0u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00003FF0u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 1 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0xFFFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 287 256 319 288 351 320 383 352 */ + 0xFFFFFFFFu, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x0000000Cu}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0xFFFF0000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x3FFF0000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x3FFF0000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 2 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x0000FFFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, + /* 415 384 447 416 479 448 511 480 */ + 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000030u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x0000FFFFu}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00003FFFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00003FFFu}, + }, + + /* Resources owned/reserved by region 3 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000000Fu, 0xFFFF00FFu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x0000000Fu, 0xFFFF00FFu}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x000000C0u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x0000000Fu, 0xFFFF00FFu}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000000Fu, 0x0303003Cu, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x0303003Cu}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x0000000Fu, 0x0303003Cu}, + }, + + /* Resources owned/reserved by region 4 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 5 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 6 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + + /* Resources owned/reserved by region 7 */ + { + /* ownPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x0000F000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* ownDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* ownQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* ownTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdPaRAMSets */ + /* 31 0 63 32 95 64 127 96 */ + {0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 159 128 191 160 223 192 255 224 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 287 256 319 288 351 320 383 352 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, + /* 415 384 447 416 479 448 511 480 */ + 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u}, + + /* resvdDmaChannels */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + + /* resvdQdmaChannels */ + /* 31 0 */ + {0x00000000u}, + + /* resvdTccs */ + /* 31 0 63 32 */ + {0x00000000u, 0x00000000u}, + }, + }, + }; + +/* End of File */ diff --git a/test/src/sample_cs.c b/test/src/sample_cs.c new file mode 100644 index 0000000..5057ef3 --- /dev/null +++ b/test/src/sample_cs.c @@ -0,0 +1,503 @@ +/* + * sample_cs.c + * + * Sample functions showing the implementation of critical section entry/exit + * routines and various semaphore related routines (all BIOS6 depenedent). + * These implementations MUST be provided by the user / application, using the + * EDMA3 driver, for its correct functioning. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include +#include +#include +#include +#include +#include + +#include "sample.h" + +#define CHECK_OS_PROTECT_FUNCTIONS 0 + +extern unsigned int ccXferCompInt[][EDMA3_MAX_REGIONS]; +extern unsigned int ccErrorInt[]; +extern unsigned int tcErrorInt[][EDMA3_MAX_TC]; + +/** + * DSP instance number on which the executable is running. Its value is + * determined by reading the processor specific register DNUM. + */ +extern unsigned int dsp_num; +extern unsigned int tpccRegionUsedLoc; +extern unsigned int gemEvents[2]; + +/* Local variables used for Temp Fix */ +#if CHECK_OS_PROTECT_FUNCTIONS +#include +#include "c6x.h" + +volatile unsigned int testOsFuncFlag = 0; +volatile unsigned int testOsFuncLog[2][100]; +volatile unsigned int testOsFuncCntr[2] = {0,0}; + +#endif + +Void edmaTestInit(Void) +{ +#if CHECK_OS_PROTECT_FUNCTIONS + Int i; + for(i=0;i<100;i++) + { + testOsFuncLog[0][i] = 0; + testOsFuncLog[1][i] = 0; + } + testOsFuncCntr[0] = 0; + testOsFuncCntr[1] = 0; +#endif +} + +/** + * \brief EDMA3 OS Protect Entry + * + * This function saves the current state of protection in 'intState' + * variable passed by caller, if the protection level is + * EDMA3_OS_PROTECT_INTERRUPT. It then applies the requested level of + * protection. + * For EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION and + * EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR, variable 'intState' is ignored, + * and the requested interrupt is disabled. + * For EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR, '*intState' specifies the + * Transfer Controller number whose interrupt needs to be disabled. + * + * \param level is numeric identifier of the desired degree of protection. + * \param intState is memory location where current state of protection is + * saved for future use while restoring it via edma3OsProtectExit() (Only + * for EDMA3_OS_PROTECT_INTERRUPT protection level). + * \return None + */ +void edma3OsProtectEntry (unsigned int edma3InstanceId, + int level, unsigned int *intState) + { +#if CHECK_OS_PROTECT_FUNCTIONS + testOsFuncLog[0][testOsFuncCntr[0]++] = TSCL; +#endif + if (((level == EDMA3_OS_PROTECT_INTERRUPT) + || (level == EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR)) + && (intState == NULL)) + { + return; + } + else + { + switch (level) + { + /* Disable all (global) interrupts */ + case EDMA3_OS_PROTECT_INTERRUPT : + *intState = Hwi_disable(); + break; + + /* Disable scheduler */ + case EDMA3_OS_PROTECT_SCHEDULER : + Task_disable(); + break; + + /* Disable EDMA3 transfer completion interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 0 ) + testOsFuncFlag = 1; + else + System_exit(1); +#endif + CpIntc_disableSysInt(WHICH_CPINTC_NUM(dsp_num), ccXferCompInt[edma3InstanceId][tpccRegionUsedLoc]); + //EventCombiner_disableEvent(ccXferCompInt[edma3InstanceId][dsp_num]); + //intState_cs = Hwi_disable(); // Temp fix + //eventId = CpIntc_getEventId(ccXferHostInt[edma3InstanceId][dsp_num]); + //EventCombiner_disableEvent(gemEvents[0]); + break; + + /* Disable EDMA3 CC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 0 ) + testOsFuncFlag = 2; + else + System_exit(1); +#endif + CpIntc_disableSysInt(WHICH_CPINTC_NUM(dsp_num), ccErrorInt[edma3InstanceId]); + //EventCombiner_disableEvent(ccErrorInt[edma3InstanceId]); + break; + + /* Disable EDMA3 TC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR : + switch (*intState) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + /* Fall through... */ + /* Disable the corresponding interrupt */ +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 0 ) + testOsFuncFlag = 3; + else + System_exit(1); +#endif + CpIntc_disableSysInt(WHICH_CPINTC_NUM(dsp_num), tcErrorInt[edma3InstanceId][*intState]); + //EventCombiner_disableEvent(tcErrorInt[edma3InstanceId][*intState]); + break; + + default: + break; + } + + break; + + default: + break; + } + } + } + + +/** + * \brief EDMA3 OS Protect Exit + * + * This function undoes the protection enforced to original state + * as is specified by the variable 'intState' passed, if the protection + * level is EDMA3_OS_PROTECT_INTERRUPT. + * For EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION and + * EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR, variable 'intState' is ignored, + * and the requested interrupt is enabled. + * For EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR, 'intState' specifies the + * Transfer Controller number whose interrupt needs to be enabled. + * \param level is numeric identifier of the desired degree of protection. + * \param intState is original state of protection at time when the + * corresponding edma3OsProtectEntry() was called (Only + * for EDMA3_OS_PROTECT_INTERRUPT protection level). + * \return None + */ +void edma3OsProtectExit (unsigned int edma3InstanceId, + int level, unsigned int intState) + { +#if CHECK_OS_PROTECT_FUNCTIONS + testOsFuncLog[1][testOsFuncCntr[1]++] = TSCL; +#endif + switch (level) + { + /* Enable all (global) interrupts */ + case EDMA3_OS_PROTECT_INTERRUPT : + Hwi_restore(intState); + break; + + /* Enable scheduler */ + case EDMA3_OS_PROTECT_SCHEDULER : + Task_enable(); + break; + + /* Enable EDMA3 transfer completion interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 1 ) + testOsFuncFlag = 0; + else + System_exit(0); +#endif + CpIntc_enableSysInt(WHICH_CPINTC_NUM(dsp_num), ccXferCompInt[edma3InstanceId][tpccRegionUsedLoc]); + //EventCombiner_enableEvent(ccXferCompInt[edma3InstanceId][dsp_num]); + //Hwi_restore(intState_cs); // Temp fix + //eventId = CpIntc_getEventId(ccXferHostInt[edma3InstanceId][dsp_num]); + //EventCombiner_enableEvent(gemEvents[0]); + break; + + /* Enable EDMA3 CC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_CC_ERROR : +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 2 ) + testOsFuncFlag = 0; + else + System_exit(0); +#endif + CpIntc_enableSysInt(WHICH_CPINTC_NUM(dsp_num), ccErrorInt[edma3InstanceId]); + //EventCombiner_enableEvent(ccErrorInt[edma3InstanceId]); + break; + + /* Enable EDMA3 TC error interrupt only */ + case EDMA3_OS_PROTECT_INTERRUPT_TC_ERROR : + switch (intState) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + /* Fall through... */ + /* Enable the corresponding interrupt */ +#if CHECK_OS_PROTECT_FUNCTIONS + if ( testOsFuncFlag == 3 ) + testOsFuncFlag = 0; + else + System_exit(0); +#endif + CpIntc_enableSysInt(WHICH_CPINTC_NUM(dsp_num), tcErrorInt[edma3InstanceId][intState]); + //EventCombiner_enableEvent(tcErrorInt[edma3InstanceId][intState]); + break; + + default: + break; + } + + break; + + default: + break; + } + } + + +/** + * \brief EDMA3 Cache Invalidate + * + * This function invalidates the D cache. + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheInvalidate(unsigned int mem_start_ptr, + unsigned int num_bytes) + { + EDMA3_DRV_Result cacheInvResult = EDMA3_DRV_SOK; + + /* Verify whether the start address is cache aligned or not */ + if((mem_start_ptr & (EDMA3_CACHE_LINE_SIZE_IN_BYTES-1u)) != 0) + { +#ifdef EDMA3_DRV_DEBUG + EDMA3_DRV_PRINTF("\r\n Cache : Memory is not %d bytes alinged\r\n", + EDMA3_CACHE_LINE_SIZE_IN_BYTES); +#endif + cacheInvResult = EDMA3_NON_ALIGNED_BUFFERS_ERROR; + } + else + { + Cache_inv((Ptr)mem_start_ptr, num_bytes, Cache_Type_ALL, TRUE); + } + + return cacheInvResult; +} + + + +/** + * \brief EDMA3 Cache Flush + * + * This function flushes (cleans) the Cache + * + * \param mem_start_ptr [IN] Starting address of memory. + * Please note that this should be + * aligned according to the cache line size. + * \param num_bytes [IN] length of buffer + * \return EDMA3_DRV_SOK if success, else error code in case of error + * or non-alignment of buffers. + * + * Note: This function is required if the buffer is in DDR. + * For other cases, where buffer is NOT in DDR, user + * may or may not require the below implementation and + * should modify it according to her need. + */ +EDMA3_DRV_Result Edma3_CacheFlush(unsigned int mem_start_ptr, + unsigned int num_bytes) + { + EDMA3_DRV_Result cacheFlushResult = EDMA3_DRV_SOK; + + /* Verify whether the start address is cache aligned or not */ + if((mem_start_ptr & (EDMA3_CACHE_LINE_SIZE_IN_BYTES-1u)) != 0) + { +#ifdef EDMA3_DRV_DEBUG + EDMA3_DRV_PRINTF("\r\n Cache : Memory is not %d bytes alinged\r\n", + EDMA3_CACHE_LINE_SIZE_IN_BYTES); +#endif + cacheFlushResult = EDMA3_NON_ALIGNED_BUFFERS_ERROR; + } + else + { + Cache_wb((Ptr)mem_start_ptr, num_bytes, Cache_Type_ALL, TRUE); + } + + return cacheFlushResult; +} + + +/** + * Counting Semaphore related functions (OS dependent) should be + * called/implemented by the application. A handle to the semaphore + * is required while opening the driver/resource manager instance. + */ + +/** + * \brief EDMA3 OS Semaphore Create + * + * This function creates a counting semaphore with specified + * attributes and initial value. It should be used to create a semaphore + * with initial value as '1'. The semaphore is then passed by the user + * to the EDMA3 driver/RM for proper sharing of resources. + * \param initVal [IN] is initial value for semaphore + * \param semParams [IN] is the semaphore attributes. + * \param hSem [OUT] is location to recieve the handle to just created + * semaphore + * \return EDMA3_DRV_SOK if succesful, else a suitable error code. + */ +EDMA3_DRV_Result edma3OsSemCreate(int initVal, + const Semaphore_Params *semParams, + EDMA3_OS_Sem_Handle *hSem) + { + EDMA3_DRV_Result semCreateResult = EDMA3_DRV_SOK; + + if(NULL == hSem) + { + semCreateResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + *hSem = (EDMA3_OS_Sem_Handle)Semaphore_create(initVal, semParams, NULL); + if ( (*hSem) == NULL ) + { + semCreateResult = EDMA3_DRV_E_SEMAPHORE; + } + } + + return semCreateResult; + } + + +/** + * \brief EDMA3 OS Semaphore Delete + * + * This function deletes or removes the specified semaphore + * from the system. Associated dynamically allocated memory + * if any is also freed up. + * \param hSem [IN] handle to the semaphore to be deleted + * \return EDMA3_DRV_SOK if succesful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemDelete(EDMA3_OS_Sem_Handle hSem) + { + EDMA3_DRV_Result semDeleteResult = EDMA3_DRV_SOK; + + if(NULL == hSem) + { + semDeleteResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + Semaphore_delete((Semaphore_Handle *)&hSem); + } + + return semDeleteResult; + } + + +/** + * \brief EDMA3 OS Semaphore Take + * + * This function takes a semaphore token if available. + * If a semaphore is unavailable, it blocks currently + * running thread in wait (for specified duration) for + * a free semaphore. + * \param hSem [IN] is the handle of the specified semaphore + * \param mSecTimeout [IN] is wait time in milliseconds + * \return EDMA3_DRV_Result if successful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemTake(EDMA3_OS_Sem_Handle hSem, int mSecTimeout) + { + EDMA3_DRV_Result semTakeResult = EDMA3_DRV_SOK; + unsigned short semPendResult; + + if(NULL == hSem) + { + semTakeResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + semPendResult = Semaphore_pend(hSem, mSecTimeout); + if (semPendResult == FALSE) + { + semTakeResult = EDMA3_DRV_E_SEMAPHORE; + } + } + + return semTakeResult; + } + + +/** + * \brief EDMA3 OS Semaphore Give + * + * This function gives or relinquishes an already + * acquired semaphore token + * \param hSem [IN] is the handle of the specified semaphore + * \return EDMA3_DRV_Result if successful else a suitable error code + */ +EDMA3_DRV_Result edma3OsSemGive(EDMA3_OS_Sem_Handle hSem) + { + EDMA3_DRV_Result semGiveResult = EDMA3_DRV_SOK; + + if(NULL == hSem) + { + semGiveResult = EDMA3_DRV_E_INVALID_PARAM; + } + else + { + Semaphore_post(hSem); + } + + return semGiveResult; + } + +/* End of File */ + diff --git a/test/src/sample_init.c b/test/src/sample_init.c new file mode 100644 index 0000000..5741313 --- /dev/null +++ b/test/src/sample_init.c @@ -0,0 +1,217 @@ +/* + * sample_init.c + * + * Sample Initialization for the EDMA3 Driver for BIOS 6 based applications. + * It should be MANDATORILY done once before EDMA3 usage. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include +#include + +#include +#include +#include + +#include "sample.h" + +/** @brief EDMA3 Driver Instance specific Semaphore handle */ +extern EDMA3_OS_Sem_Handle semHandle[]; + +/** To Register the ISRs with the underlying OS, if required. */ +extern void registerEdma3Interrupts ( unsigned int edma3Id, + unsigned int tpccRegionUsed, + unsigned int dsp_num); +/** To Unregister the ISRs with the underlying OS, if previously registered. */ +extern void unregisterEdma3Interrupts ( unsigned int edma3Id, + unsigned int dsp_num); + +/* To find out the DSP# */ +extern unsigned short determineProcId(); + +/** + * To check whether the global EDMA3 configuration is required or not. + * It should be done ONCE by any of the masters present in the system. + * This function checks whether the global configuration is required by the + * current master or not. In case of many masters, it should be done only + * by one of the masters. Hence this function will return TRUE only once + * and FALSE for all other masters. + */ +extern unsigned short isGblConfigRequired(unsigned int dspNum); + +/** + * DSP instance number on which the executable is running. Its value is + * determined by reading the processor specific register DNUM. + */ +unsigned int dsp_num; + +/* Number of EDMA3 controllers present in the system */ +extern const unsigned int numEdma3Instances; + +/* External Global Configuration Structure */ +extern EDMA3_DRV_GblConfigParams sampleEdma3GblCfgParams[]; + +/* External Instance Specific Configuration Structure */ +extern EDMA3_DRV_InstanceInitConfig sampleInstInitConfig[][EDMA3_MAX_REGIONS]; + +/* Variables defined in tcp3d_main.c +extern unsigned int tpccRegionUsed; +extern unsigned int dspCoreID;*/ +unsigned int tpccRegionUsedLoc; + +/* variable available only if CHECK_OS_PROTECT_FUNCTIONS is defined in sample_cs.c */ +//extern unsigned int testOsFuncLog[2][100]; +extern Void edmaTestInit(Void); + +/** + * \brief EDMA3 Initialization + * + * This function initializes the EDMA3 Driver and registers the + * interrupt handlers. + * + * \return EDMA3_DRV_SOK if success, else error code + */ +EDMA3_DRV_Handle edma3init (unsigned int edma3Id, EDMA3_DRV_Result *errorCode, + unsigned int dspCoreID, unsigned int tpccRegionUsed) + { + EDMA3_DRV_Result edma3Result = EDMA3_DRV_E_INVALID_PARAM; + Semaphore_Params semParams; + EDMA3_DRV_GblConfigParams *globalConfig = NULL; + EDMA3_DRV_InstanceInitConfig *instanceConfig = NULL; + EDMA3_DRV_InitConfig initCfg; + EDMA3_RM_MiscParam miscParam; + EDMA3_DRV_Handle hEdma = NULL; + + if ((edma3Id >= numEdma3Instances) || (errorCode == NULL)) + return hEdma; + + edmaTestInit();// see sample_cs.c file + + /* DSP instance number */ + dsp_num = dspCoreID; //determineProcId(); + //tpccRegionUsed = 3;//(3-dsp_num); + tpccRegionUsedLoc = tpccRegionUsed; + + globalConfig = &sampleEdma3GblCfgParams[edma3Id]; + + /* Configure it as master, if required */ + miscParam.isSlave = 0;//isGblConfigRequired(dsp_num); + edma3Result = EDMA3_DRV_create (edma3Id, globalConfig , + (void *)&miscParam); + + if (edma3Result == EDMA3_DRV_SOK) + { + /** + * Driver Object created successfully. + * Create a semaphore now for driver instance. + */ + Semaphore_Params_init(&semParams); + + initCfg.drvSemHandle = NULL; + edma3Result = edma3OsSemCreate(1, &semParams, &initCfg.drvSemHandle); + } + + if (edma3Result == EDMA3_DRV_SOK) + { + /* Save the semaphore handle for future use */ + semHandle[edma3Id] = initCfg.drvSemHandle; + + /* configuration structure for the Driver */ + instanceConfig = &sampleInstInitConfig[edma3Id][tpccRegionUsed]; + + initCfg.isMaster = TRUE; + /* Choose shadow region according to the DSP# */ + initCfg.regionId = (EDMA3_RM_RegionId)tpccRegionUsed; + /* Driver instance specific config NULL */ + initCfg.drvInstInitConfig = instanceConfig; + + initCfg.gblerrCb = NULL; + initCfg.gblerrData = NULL; + + /* Open the Driver Instance */ + hEdma = EDMA3_DRV_open (edma3Id, (void *) &initCfg, &edma3Result); + } + + if(hEdma && (edma3Result == EDMA3_DRV_SOK)) + { + /** + * Register Interrupt Handlers for various interrupts + * like transfer completion interrupt, CC error + * interrupt, TC error interrupts etc, if required. + */ + registerEdma3Interrupts(edma3Id, tpccRegionUsed, dsp_num); + } + + *errorCode = edma3Result; + return hEdma; + } + + +/** + * \brief EDMA3 De-initialization + * + * This function removes the EDMA3 Driver instance and unregisters the + * interrupt handlers. + * + * \return EDMA3_DRV_SOK if success, else error code + */ +EDMA3_DRV_Result edma3deinit (unsigned int edma3Id, EDMA3_DRV_Handle hEdma) + { + EDMA3_DRV_Result edma3Result = EDMA3_DRV_E_INVALID_PARAM; + + /* Unregister Interrupt Handlers first */ + unregisterEdma3Interrupts(edma3Id, dsp_num); + + /* Delete the semaphore */ + edma3Result = edma3OsSemDelete(semHandle[edma3Id]); + + if (EDMA3_DRV_SOK == edma3Result ) + { + /* Make the semaphore handle as NULL. */ + semHandle[edma3Id] = NULL; + + /* Now, close the EDMA3 Driver Instance */ + edma3Result = EDMA3_DRV_close (hEdma, NULL); + } + + if (EDMA3_DRV_SOK == edma3Result ) + { + /* Now, delete the EDMA3 Driver Object */ + edma3Result = EDMA3_DRV_delete (edma3Id, NULL); + } + + return edma3Result; + } + +/* End of File */ + diff --git a/test/src/sample_int_reg.c b/test/src/sample_int_reg.c new file mode 100644 index 0000000..627a097 --- /dev/null +++ b/test/src/sample_int_reg.c @@ -0,0 +1,482 @@ +/* + * sample_int_reg.c + * + * Platform specific interrupt registration and un-registration routines. + * + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#include +#include +#include +#include + +#include + +#include "sample.h" + +extern unsigned int ccXferCompInt[][EDMA3_MAX_REGIONS]; +extern unsigned int ccErrorInt[]; +extern unsigned int tcErrorInt[][EDMA3_MAX_TC]; +extern unsigned int numEdma3Tc[]; + +#define DEBUG_PRINTS 0 +#define MAP_ONCE_ONLY 1 +#define ISR_APPROACH_WHILE 1 // 0 would make the code to hang + +#if EDMA_LOCAL_COMP_ISR +#include +#include + +//extern CSL_TpccRegs *tpcc2Regs; +extern unsigned int tpccRegionUsedLoc; + +tccCallbackParams edma3IntrParamsLoc[64]; +unsigned int allocatedTCCsLoc[2u] = {0x0u, 0x0u}; + +static void edma3ComplHandlerLoc (unsigned int edma3Id); +#endif + +void (*ptrEdma3TcIsrHandler[EDMA3_MAX_TC])(unsigned int arg) = + { + &lisrEdma3TC0ErrHandler0, + &lisrEdma3TC1ErrHandler0, + &lisrEdma3TC2ErrHandler0, + &lisrEdma3TC3ErrHandler0, + &lisrEdma3TC4ErrHandler0, + &lisrEdma3TC5ErrHandler0, + &lisrEdma3TC6ErrHandler0, + &lisrEdma3TC7ErrHandler0, + }; + +unsigned int hwiInterrupt = 8; + +unsigned int gemEvents[2]; + +/* Host interrupts for transfer completion (per spec intc_1.3.4.12.xlsx) */ +/* First 4 cores are connected from CP_INTC0 and last 4 cores are connected from CP_INTC1 */ +//unsigned int ccXferHostInt[NUM_EDMA3_INSTANCES][NUM_DSPS] = { + /* CP_INTC0 | CP_INTC1 */ +unsigned int ccXferHostInt[5][8] = { + {68u, 78u, 88u, 98u, 68u, 78u, 88u, 98u}, + {69u, 79u, 89u, 99u, 69u, 79u, 89u, 99u}, + {70u, 80u, 90u, 100u, 70u, 80u, 90u, 100u}, + {71u, 81u, 91u, 101u, 71u, 81u, 91u, 101u}, + {72u, 82u, 92u, 102u, 72u, 82u, 92u, 102u}, + }; +unsigned int edma3ErrHostInt[5][8] = { + {73u, 83u, 93u, 103u, 73u, 83u, 93u, 103u}, + {64u, 74u, 84u, 94u, 64u, 74u, 84u, 94u}, + {65u, 75u, 85u, 95u, 65u, 75u, 85u, 95u}, + {66u, 76u, 86u, 96u, 66u, 76u, 86u, 96u}, + {67u, 77u, 87u, 97u, 67u, 77u, 87u, 97u}, + }; + +//extern unsigned int dsp_num; +//extern unsigned int tpccRegionUsed; +#if USE_LOCAL_CPINTC_DISPATCH +extern Void CpIntc_dispatchLoc(UInt hostInt); +#endif + +/** To Register the ISRs with the underlying OS, if required */ +void registerEdma3Interrupts ( unsigned int edma3Id, + unsigned int tpccRegionUsed, + unsigned int dsp_num) + { + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ + unsigned int numTc = 0; +#if MAP_ONCE_ONLY + static UInt32 mapDone = 0; +#endif + unsigned int cpIntcNum = WHICH_CPINTC_NUM(dsp_num);//(dsp_num > 3)? 1: 0; + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Transfer completion ISR */ + CpIntc_dispatchPlug(ccXferCompInt[edma3Id][tpccRegionUsed], +#if EDMA_LOCAL_COMP_ISR + edma3ComplHandlerLoc, +#else + lisrEdma3ComplHandler0, +#endif + edma3Id, + TRUE); +#if MAP_ONCE_ONLY + if (!mapDone) +#endif + CpIntc_mapSysIntToHostInt(cpIntcNum, ccXferCompInt[edma3Id][tpccRegionUsed], + ccXferHostInt[edma3Id][dsp_num]); + CpIntc_enableHostInt(cpIntcNum, ccXferHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(ccXferHostInt[edma3Id][dsp_num]); + EventCombiner_dispatchPlug (eventId, +#if USE_LOCAL_CPINTC_DISPATCH + CpIntc_dispatchLoc, +#else + CpIntc_dispatch, +#endif + ccXferHostInt[edma3Id][dsp_num], + TRUE); +#if DEBUG_PRINTS + System_printf("\t\t ccXferCompInt : %d \n", ccXferCompInt[edma3Id][tpccRegionUsed]); + System_printf("\t\t ccXferHostInt : %d \n", ccXferHostInt[edma3Id][dsp_num]); + System_printf("\t\t eventId : %d \n", eventId); +#endif + gemEvents[0] = eventId; + + /* CC Error ISR */ + CpIntc_dispatchPlug(ccErrorInt[edma3Id], lisrEdma3CCErrHandler0, + edma3Id, TRUE); +#if MAP_ONCE_ONLY + if (!mapDone) +#endif + CpIntc_mapSysIntToHostInt(cpIntcNum, ccErrorInt[edma3Id], + edma3ErrHostInt[edma3Id][dsp_num]); +#if DEBUG_PRINTS + System_printf("\t\t ccErrorInt : %d \n", ccErrorInt[edma3Id]); + System_printf("\t\t edma3ErrHostInt : %d \n", edma3ErrHostInt[edma3Id][dsp_num]); +#endif + + /* TC Error ISR */ + while (numTc < numEdma3Tc[edma3Id]) + { + CpIntc_dispatchPlug(tcErrorInt[edma3Id][numTc], + (CpIntc_FuncPtr )(ptrEdma3TcIsrHandler[numTc]), + edma3Id, TRUE); +#if MAP_ONCE_ONLY + if (!mapDone) +#endif + CpIntc_mapSysIntToHostInt(cpIntcNum, tcErrorInt[edma3Id][numTc], + edma3ErrHostInt[edma3Id][dsp_num]); +#if DEBUG_PRINTS + System_printf("\t\t tcErrorInt : %d \n", tcErrorInt[edma3Id][numTc]); + System_printf("\t\t edma3ErrHostInt : %d \n", edma3ErrHostInt[edma3Id][dsp_num]); +#endif + numTc++; + } + /* Enable the host interrupt which is common for both CC and TC error */ + CpIntc_enableHostInt(cpIntcNum, edma3ErrHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(edma3ErrHostInt[edma3Id][dsp_num]); + EventCombiner_dispatchPlug (eventId, +#if USE_LOCAL_CPINTC_DISPATCH + CpIntc_dispatchLoc, +#else + CpIntc_dispatch, +#endif + edma3ErrHostInt[edma3Id][dsp_num], + TRUE); +#if DEBUG_PRINTS + System_printf("\t\t eventId : %d \n", eventId); +#endif + gemEvents[1] = eventId; + + //Hwi_enableInterrupt(hwiInterrupt); + + /* enable the 'global' switch */ + CpIntc_enableAllHostInts(cpIntcNum); + +#if EDMA_LOCAL_COMP_ISR + tpccRegionUsedLoc = tpccRegionUsed; +#endif + +#if MAP_ONCE_ONLY + mapDone = 1; +#endif + + /* Restore interrupts */ + Hwi_restore(cookie); + } + +/** To Unregister the ISRs with the underlying OS, if previously registered. */ +void unregisterEdma3Interrupts (unsigned int edma3Id, unsigned int dsp_num) + { + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ +// unsigned int numTc = 0; + unsigned int cpIntcNum = WHICH_CPINTC_NUM(dsp_num);//(dsp_num > 3)? 1: 0; + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Transfer completion ISR */ + CpIntc_disableHostInt(cpIntcNum, ccXferHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(ccXferHostInt[edma3Id][dsp_num]); + EventCombiner_disableEvent(eventId); + + /* CC/TC Error ISR */ + CpIntc_disableHostInt(cpIntcNum, edma3ErrHostInt[edma3Id][dsp_num]); + eventId = CpIntc_getEventId(edma3ErrHostInt[edma3Id][dsp_num]); + EventCombiner_disableEvent(eventId); + + /** + * Clear all system interrupt to host interrupt mapping. + * - might not be needed + * - doing to get clean numbers from cpintc dispatcher for debugging + * - DID NOT HELP, so commenting for now + */ +// CpIntc_mapSysIntToHostInt(cpIntcNum, ccXferCompInt[edma3Id][tpccRegionUsedLoc], 0); +// CpIntc_mapSysIntToHostInt(cpIntcNum, ccErrorInt[edma3Id], 0); +// while (numTc < numEdma3Tc[edma3Id]) +// { +// CpIntc_mapSysIntToHostInt(cpIntcNum, tcErrorInt[edma3Id][numTc], 0); +// numTc++; +// } + + /* Restore interrupts */ + Hwi_restore(cookie); + } + +#if EDMA_LOCAL_COMP_ISR +/** + * edma3ComplHandler + * \brief Interrupt handler for successful transfer completion. + * + * \note This function first disables its own interrupt to make it non- + * entrant. Later, after calling all the callback functions, it + * re-enables its own interrupt. + * + * \return None. + */ +UInt32 tpccIsrCntr = 0; +UInt32 tpccCbCntr = 0; +static void edma3ComplHandlerLoc (unsigned int edma3Id) + { +#if !ISR_APPROACH_WHILE + unsigned int Cnt; +#endif + volatile CSL_TPCC_ShadowRegs *shadowRegs = NULL; + volatile unsigned int pendingIrqs; + unsigned int indexl; + unsigned int indexh; + CSL_TpccRegs *tpcc2Regs = (CSL_TpccRegs *) CSL_EDMACC_2_REGS; + + tpccIsrCntr++; + + if (tpcc2Regs != NULL) + { + shadowRegs = (volatile CSL_TPCC_ShadowRegs *) + (&tpcc2Regs->SHADOW[tpccRegionUsedLoc]); + } + +#if !ISR_APPROACH_WHILE + Cnt = 0u; +#endif + pendingIrqs = 0u; + indexl = 1u; + indexh = 1u; + +#if ISR_APPROACH_WHILE + while((shadowRegs->TPCC_IPR !=0 ) || (shadowRegs->TPCC_IPRH !=0 )) + { + /* Loop for EDMA3_RM_COMPL_HANDLER_RETRY_COUNT number of time, + breaks when no pending interrupt is found */ + indexl = 0u; + pendingIrqs = shadowRegs->TPCC_IPR; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[0u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u) == TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPR register will NOT be cleared. + */ + if(edma3IntrParamsLoc[indexl].tccCb != NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICR = (1u << indexl); + + tpccCbCntr++; + + edma3IntrParamsLoc[indexl].tccCb (indexl, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[indexl].cbData); + } + } + ++indexl; + pendingIrqs >>= 1u; + } + + indexh = 0u; + pendingIrqs = shadowRegs->TPCC_IPRH; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[1u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u)==TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPRH register will NOT be cleared. + */ + if(edma3IntrParamsLoc[32u+indexh].tccCb!=NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICRH = (1u << indexh); + + edma3IntrParamsLoc[32u+indexh].tccCb(32u+indexh, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[32u+indexh].cbData); + } + } + ++indexh; + pendingIrqs >>= 1u; + } + } +#else // ISR_APPROACH_WHILE + if((shadowRegs->TPCC_IPR !=0 ) || (shadowRegs->TPCC_IPRH !=0 )) + { + /** + * Since an interrupt has found, we have to make sure that this + * interrupt (TCC) belongs to the TCCs allocated by us only. + * It might happen that someone else, who is using EDMA3 also, + * is the owner of this interrupt channel i.e. the TCC. + * For this, use the allocatedTCCs[], to check which all interrupt + * channels are owned by the EDMA3 RM Instances. + */ + + edma3OsProtectEntry (edma3Id, + EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION, + NULL); + + /* Loop for EDMA3_RM_COMPL_HANDLER_RETRY_COUNT number of time, + breaks when no pending interrupt is found */ + while ((Cnt < 10u) + && ((indexl != 0u) || (indexh != 0u))) + { + indexl = 0u; + pendingIrqs = shadowRegs->TPCC_IPR; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[0u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u) == TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPR register will NOT be cleared. + */ + if(edma3IntrParamsLoc[indexl].tccCb != NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICR = (1u << indexl); + + tpccCbCntr++; + + edma3IntrParamsLoc[indexl].tccCb (indexl, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[indexl].cbData); + } + } + ++indexl; + pendingIrqs >>= 1u; + } + + indexh = 0u; + pendingIrqs = shadowRegs->TPCC_IPRH; + + /** + * Choose interrupts coming from our allocated TCCs + * and MASK remaining ones. + */ + pendingIrqs = (pendingIrqs & allocatedTCCsLoc[1u]); + + while (pendingIrqs) + { + /*Process all the pending interrupts*/ + if((pendingIrqs & 1u)==TRUE) + { + /** + * If the user has not given any callback function + * while requesting the TCC, its TCC specific bit + * in the IPRH register will NOT be cleared. + */ + if(edma3IntrParamsLoc[32u+indexh].tccCb!=NULL) + { + /* here write to ICR to clear the corresponding IPR bits*/ + shadowRegs->TPCC_ICRH = (1u << indexh); + + edma3IntrParamsLoc[32u+indexh].tccCb(32u+indexh, + EDMA3_RM_XFER_COMPLETE, + edma3IntrParamsLoc[32u+indexh].cbData); + } + } + ++indexh; + pendingIrqs >>= 1u; + } + + Cnt++; + } + + indexl = (shadowRegs->TPCC_IPR & allocatedTCCsLoc[0u]); + indexh = (shadowRegs->TPCC_IPRH & allocatedTCCsLoc[1u]); + + if((indexl !=0 ) || (indexh !=0 )) + { + shadowRegs->TPCC_IEVAL=0x1u; + } + + edma3OsProtectExit (edma3Id, + EDMA3_OS_PROTECT_INTERRUPT_XFER_COMPLETION, + NULL); + } + /* for testing only */ + else + { + while(1); + } +#endif // ISR_APPROACH_WHILE + } +#endif // EDMA_LOCAL_COMP_ISR diff --git a/test/src/tcp3d_codeBlkSeg.c b/test/src/tcp3d_codeBlkSeg.c new file mode 100644 index 0000000..b4cdb80 --- /dev/null +++ b/test/src/tcp3d_codeBlkSeg.c @@ -0,0 +1,208 @@ +/** + * \file tcp3d_codeBlkSeg.c + * + * \brief Calculates code block segmentation parameteres based on the block length and SW0 length. + * + * Copyright (c) Texas Instruments Incorporated 2008 + * + * Use of this software is controlled by the terms and conditions found in the + * license agreement under which this software has been supplied or provided. + * + */ +#include "tcp3d_codeBlkSeg.h" + +/** TCP3D SW0 nominal values */ +Int32 tcp3d_sw0_Tab[] = {16, 32, 48, 64, 96, 128}; + +/** Used for getting the sw0LenSel index values */ +Int32 TAB[] = {0, 1, 2, 3, 3, 4, 4, 5}; + +/** Table used for division optimization logic */ +Int32 shiftValTab [] = {4, 5, 4, 6, 5, 7}; + +/** Table used for division optimization logic */ +Uint32 mulValTab [] = {32768, 32768, 10923, 32768, 10923, 32768}; + +/** Table used for checking bounds */ +Uint32 frameLenTab[2][2] = {40,5114,40,6144}; + +/** + * \fn Int32 TCP3D_codeBlkSeg ( + * IN Uint32 blockLengthK, + * IN Uint8 numMAP, + * IN Uint8 * const RESTRICT sw0NomLen, + * OUT Uint8 * const RESTRICT sw0LenSel, + * OUT Uint8 * const RESTRICT sw1Len, + * OUT Uint8 * const RESTRICT sw2LenSel, + * OUT Uint8 * const RESTRICT numsw0) + * \brief Calculates code block segmentation parameteres based on the block length and SW0 length. + * + * + * \param[in] blockLengthK + * Code block length. (Number of information bits.) + * + * + * \param[in] numMAP + * Number of MAP decoders used. =1 for WCDMA, =2 for LTE and WiMAX + * + * \param[in] sw0NomLen + * Nominal length for the sliding window 0. Valid values are from the set: {16, 32, + * 48, 64, 96, 128}. Note that if [blockLengthK <= (numMAP * 128 * sw0NomLen)] does + * not hold, the function will pick the first greater length value from the set for which + * the above inequality holds, and will return it. + * + * This will be updated with the picked value. + * + * \param[out] sw0LenSel + * Input configuration register parameter. The value depends on the picked SW0 length + * used, (sw0NomLen), and the possible values are: + * 0 - 16 bits + * 1 - 32 bits + * 2 - 48 bits + * 3 - 64 bits + * 4 - 96 bits + * 5 - 128 bits + * + * + * \param[out] sw1Len + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 9 - 10 bits + * 10 - 11 bits + * 11 - 12 bits + * ... + * 127 - 128 bits + * + * + * \param[out] sw2LenSel + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 0 - SW2 is not present + * 1 - SW2 length is same as SW1 + * 2 - SW2 length is less by 2 bits from SW1 + * + * \param[out] numsw0 + * Input configuration register parameter. Number of SW0 used in the decoder. + * + * \return Return indicates PASS or FAIL with ZERO or non-ZERO values. + * + * + */ +Int32 TCP3D_codeBlkSeg ( + IN Uint32 blockLengthK, + IN Uint8 numMAP, + INOUT Uint8 * const RESTRICT sw0NomLen, + OUT Uint8 * const RESTRICT sw0LenSel, + OUT Uint8 * const RESTRICT sw1Len, + OUT Uint8 * const RESTRICT sw2LenSel, + OUT Uint8 * const RESTRICT numsw0) +{ + Int32 status = 0; + Int32 K, Kext; + Int32 numSWrem; + Int32 subFrameLen; + Int32 sw0LenSelTmp; + Int32 sw1LenTmp; + Int32 sw2LenSelTmp; + Int32 numsw0Tmp; + Int32 numSW; + Int32 shiftVal, mulVal; + Int32 sw0Len = *sw0NomLen; + + /** + * Check the bounds based on numMAP value. frameLenTab is for the bound values + * numMAP - mode - block length bounds + * 1 - 3GPP - [40,5114] + * 2 - LTE/WIMAX - [40,6144] + */ + if ( (blockLengthK < frameLenTab[numMAP-1][0]) || + (blockLengthK > frameLenTab[numMAP-1][1]) ) + { + status = 1; + return (status); + } + + K = blockLengthK; + Kext = ((K + 0x3)>>2)<<2; + + //Calculate sw0LenSelTmp, SW1Len, SW2LenSel, numsw0Tmp + subFrameLen = Kext >> numMAP; //Kext / (2*numMAP); + + sw0LenSelTmp = TAB[((sw0Len>>4)-1)&0x7]; + + //Check that this holds: (reg->NumInfoBits <= 128 * sparms->tcp3_SW0_length * numMap) + while((Kext > 128 * sw0Len * numMAP) && sw0LenSelTmp<6) + { + sw0LenSelTmp++; + sw0Len = tcp3d_sw0_Tab[sw0LenSelTmp]; + } + + //numSW = subFrameLen/sw0Len; Replaced by: + shiftVal = shiftValTab[sw0LenSelTmp]; + mulVal = mulValTab[sw0LenSelTmp]; + numSW = _mpysu((subFrameLen >> shiftVal), mulVal)>>15; + + numSWrem = subFrameLen - numSW*sw0Len; + if(numSWrem) + { + numSW++; + } + + if(numSW == 1) + { + numsw0Tmp = 0; + sw1LenTmp = subFrameLen-1; //stored value is (sw1_length -1) + sw2LenSelTmp = 0; //SW2 is Off. + } + else if(numSW == 2) + { + numsw0Tmp = 0; + if(subFrameLen & 0x3) + { + sw1LenTmp = 2*(subFrameLen>>2) + 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 2; //sw1LenTmp > SW2Len + } + else + { + sw1LenTmp = (subFrameLen>>1) - 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 1; //sw1LenTmp = SW2Len + } + } + else if( numSWrem <= (sw0Len>>1) ) + { + numsw0Tmp = numSW-2; + numSWrem = subFrameLen - (numSW-2)*sw0Len; + if((numSWrem) & 0x3) + { + sw1LenTmp = 2*(numSWrem>>2) + 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 2; //sw1LenTmp > SW2Len + } + else + { + sw1LenTmp = (numSWrem>>1) - 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 1; //sw1LenTmp = SW2Len + } + } + else + { + numsw0Tmp = numSW-1; + sw1LenTmp = numSWrem - 1; //stored value is (sw1_length -1) + sw2LenSelTmp = 0; //SW2 is Off. + } + + + *sw0LenSel = (Uint8) sw0LenSelTmp; + *sw1Len = (Uint8) sw1LenTmp; + *sw2LenSel = (Uint8) sw2LenSelTmp; + *numsw0 = (Uint8) numsw0Tmp; + *sw0NomLen = (Uint8) sw0Len; + + return ( status ); + +} + + + + + + diff --git a/test/src/tcp3d_codeBlkSeg.h b/test/src/tcp3d_codeBlkSeg.h new file mode 100644 index 0000000..a67cbf3 --- /dev/null +++ b/test/src/tcp3d_codeBlkSeg.h @@ -0,0 +1,81 @@ +#ifndef _TCP3D_CODE_BLK_SEG_H_ +#define _TCP3D_CODE_BLK_SEG_H_ + +#ifndef USE_TCP3D_DRIVER_TYPES +#include "swpform.h" +#else +#include +#include +#endif + +/** + * \fn Int32 TCP3D_codeBlkSeg ( + * IN Uint32 blockLengthK, + * IN Uint8 numMAP, + * IN Uint8 * const RESTRICT sw0NomLen, + * OUT Uint8 * const RESTRICT sw0LenSel, + * OUT Uint8 * const RESTRICT sw1Len, + * OUT Uint8 * const RESTRICT sw2LenSel, + * OUT Uint8 * const RESTRICT numsw0) + * \brief Calculates code block segmentation parameteres based on the block lenght and SW0 length. + * + * + * \param[in] blockLengthK + * Code block length. (Number of information bits.) + * + * + * \param[in] numMAP + * Number of MAP decoders used. =1 for WCDMA, =2 for LTE and WiMAX + * + * \param[in,out] sw0NomLen + * Nominal length for the sliding window 0. Valid values are from the set: {16, 32, + * 48, 64, 96, 128}. Note that if [blockLengthK <= (numMAP * 128 * sw0NomLen)] does + * not hold, the function will pick the first greater length value from the set for which + * the above inequality holds, and will return it. + * + * This will be updated with the picked value. + * + * \param[out] sw0LenSel + * Input configuration register parameter. The value depends on the picked SW0 length + * used, (sw0NomLen), and the possible values are: + * 0 - 16 bits + * 1 - 32 bits + * 2 - 48 bits + * 3 - 64 bits + * 4 - 96 bits + * 5 - 128 bits + * + * + * \param[out] sw1Len + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 9 - 10 bits + * 10 - 11 bits + * 11 - 12 bits + * ... + * 127 - 128 bits + * + * + * \param[out] sw2LenSel + * Input configuration register parameter. The value depends on the SW1 length used + * and the possible values are: + * 0 - SW2 is not present + * 1 - SW2 length is same as SW1 + * 2 - SW2 length is less by 2 bits from SW1 + * + * \param[out] numsw0 + * Input configuration register parameter. Number of SW0 used in the decoder. + * + * \return Return indicates PASS or FAIL with ZERO or non-ZERO values. + * + * + */ +Int32 TCP3D_codeBlkSeg ( + IN Uint32 blockLengthK, + IN Uint8 numMAP, + IN Uint8 * const RESTRICT sw0NomLen, + OUT Uint8 * const RESTRICT sw0LenSel, + OUT Uint8 * const RESTRICT sw1Len, + OUT Uint8 * const RESTRICT sw2LenSel, + OUT Uint8 * const RESTRICT numsw0); +#endif diff --git a/test/src/tcp3d_drv_sample.h b/test/src/tcp3d_drv_sample.h new file mode 100644 index 0000000..92bce8f --- /dev/null +++ b/test/src/tcp3d_drv_sample.h @@ -0,0 +1,155 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_SAMPLE_H_ +#define _TCP3D_SAMPLE_H_ + +#include +#include +#include +#include + +#include + +#include + +/* CSL includes */ +#include +#include +#include +#include + +#include "sample.h" + +#if (CSL_TCP3D_PER_CNT > 1) +#include "tcp3d_multi_inst.h" +#else +#include "tcp3d_single_inst.h" +#endif + +#if EDMA_LOCAL_COMP_ISR +extern tccCallbackParams edma3IntrParamsLoc[]; +extern unsigned int allocatedTCCsLoc[]; +#endif + +#define EDMA_RESULT_CHECK(res) ((res == EDMA3_DRV_SOK) ? "Passed": "Failed") + +/* + * EDMA Resource structure + */ +typedef struct EDMA_RES +{ + UInt32 chNo; + UInt32 tccNo; + EDMA3_RM_TccCallback cbFunc; + Void *cbData; +} EDMA_RES; + +/* + * EDMA configuration structure + */ +typedef struct EDMA_CONFIG +{ + EDMA_RES pingChRes[TCP3D_DRV_MAX_CH_PER_PATH]; + EDMA_RES pongChRes[TCP3D_DRV_MAX_CH_PER_PATH]; + EDMA_RES linkChRes[TCP3D_DRV_MAX_LINK_CH]; +} EDMA_CONFIG; + +/** + * \brief TCP3D Initialization + * + * This function initializes the TCP3D Driver for the given TCP3D instance ID. + * It internally calls Tcp3d_getNumBuf(), Tcp3d_getBufDesc() and Tcp3d_init(), + * in that order and memory is allocated from the heap pointer given. + */ +Tcp3d_Instance* tcp3dSampleInit( + IHeap_Handle dataHeap, + UInt8 instNum, + UInt32 testMaxBlocks, + UInt32 testMode, + UInt32 testDoubleBuffer, + UInt32 testLteCrcSel, + UInt32 dspCoreID, + EDMA3_DRV_Handle hEdma, + UInt32 tpccRegionUsed, + EDMA_CONFIG *edmaConfig, + Tcp3d_Result *errCode); + +/** + * \brief TCP3D De-initialization + * + * This function de-initializes the TCP3D Driver for the given TCP3D instance ID. + * Frees any memory allocated from the heap during the initialization. + * + * Currently, there are no driver function calls. + */ +Tcp3d_Result tcp3dSampleDeinit( + IHeap_Handle dataHeap, + UInt8 instNum, + Tcp3d_Instance *tcp3dInst); + +/** + * \brief Open EDMA channels for TCP3D driver + * + * Function for opening EDMA3 channels using the EDMA3 LLD APIs based on the + * TCP3D instance ID given and the details are updated in the edmaConfig structure. + */ +Void openEdmaChannels ( EDMA3_DRV_Handle hEdma, + UInt8 instNum, + EDMA_CONFIG *edmaConfig); + +/** + * \brief Close EDMA channels for TCP3D driver + * + * This function initializes the TCP3D Driver for the given TCP3D instance ID. + * It internally calls Tcp3d_getNumBuf(), Tcp3d_getBufDesc() and Tcp3d_init(), + * in that order and memory is allocated from the heap pointer given. + */ +Void closeEdmaChannels (EDMA3_DRV_Handle hEdma, + UInt8 instNum, + EDMA_CONFIG *edmaConfig); + +#if EDMA_LOCAL_COMP_ISR // flag defined in sample.h file +/** + * Fill the tables for allocated TCC & tccCB params, used with local + * EDMA3 call back ISR routine (see in sample_int_reg.c file). + */ +Void updateAllocatedTccsLoc( EDMA_CONFIG *edmaConfig); +#endif + +#endif /* _TCP3D_SAMPLE_H_ */ + diff --git a/test/src/tcp3d_drv_sample_init.c b/test/src/tcp3d_drv_sample_init.c new file mode 100644 index 0000000..ea19241 --- /dev/null +++ b/test/src/tcp3d_drv_sample_init.c @@ -0,0 +1,448 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include "tcp3d_drv_sample.h" + +Tcp3d_MemBuffer *bufs; +Int16 nbufs; + +/** + * NOTE: All the configuration values whether they are used in the current + * driver or not. Unused values are kept as place holders for future use. + */ +Void fillConfig(Tcp3d_InitParams *drvInitParams, UInt32 perId) +{ + UInt32 baseDataRegs; + + if ( perId < CSL_TCP3D_PER_CNT ) + { + /* Set the notification Event number */ + drvInitParams->notificationEventNum = getNotifyEventNum(perId); + + /* Set the Control Register base address */ + drvInitParams->tcp3dCfgRegs = (CSL_Tcp3d_cfgRegs *) getTcp3dCfgRegsBase(perId); + + /* Set REVT channel numbers */ + drvInitParams->pingConfig.revtCh = getRevt0ChannelNum(perId); + drvInitParams->pongConfig.revtCh = getRevt1ChannelNum(perId); + + /* Set the TCP3D PING addresses */ + baseDataRegs = getTcp3dDataRegsBase(perId); + drvInitParams->pingConfig.inCfgStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_IC_CFG0_P0_OFFSET; + drvInitParams->pingConfig.llrStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_SYS_P0_OFFSET; + drvInitParams->pingConfig.interStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_INTER_P0_OFFSET; + drvInitParams->pingConfig.hdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_HD0_OFFSET; + drvInitParams->pingConfig.stsStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_STS0_P0_OFFSET; + drvInitParams->pingConfig.sdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_SO0_OFFSET; + + /* Set the TCP3D PONG addresses */ + drvInitParams->pongConfig.inCfgStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_IC_CFG0_P1_OFFSET; + drvInitParams->pongConfig.llrStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_SYS_P1_OFFSET; + drvInitParams->pongConfig.interStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_INTER_P1_OFFSET; + if ( drvInitParams->ctrlParams.doubleBuf == CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE ) + { + drvInitParams->pongConfig.hdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_HD0_OFFSET; + drvInitParams->pongConfig.sdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_SO0_OFFSET; + drvInitParams->pongConfig.stsStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_STS0_P0_OFFSET; + } + else + { + drvInitParams->pongConfig.hdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_HD1_OFFSET; + drvInitParams->pongConfig.sdStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_SO1_OFFSET; + drvInitParams->pongConfig.stsStart = baseDataRegs + CSL_TCP3D_DMA_TCP3D_OUT_STS0_P1_OFFSET; + } + } + else + { + System_printf("Wrong Instance ID passed\n"); + System_exit(0); + } +} + +Tcp3d_Instance* tcp3dSampleInit( + IHeap_Handle dataHeap, + UInt8 instNum, + UInt32 testMaxBlocks, + UInt32 testMode, + UInt32 testDoubleBuffer, + UInt32 testLteCrcSel, + UInt32 dspCoreID, + EDMA3_DRV_Handle hEdma, + UInt32 tpccRegionUsed, + EDMA_CONFIG *edmaConfig, + Tcp3d_Result *errCode) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + Tcp3d_SizeCfg sizeCfg; + Tcp3d_InitParams drvInitParams; + Int32 cnt; + UInt32 numBytes; + UInt8 align; + + /* + * Setup TCP3D Driver Initialization Sequence + */ + /* Step 1: Set parameters in the sizeCfg structure for TCP3D driver + * memory allocation. This will be used with the driver functions + * Tcp3d_getNumBuf() & Tcp3d_getBufDesc() */ + sizeCfg.maxCodeBlocks = testMaxBlocks; + sizeCfg.mode = testMode; + + /* Step 2: Get Number of buffers required for TCP3D Driver */ + tcp3dResult = Tcp3d_getNumBuf(&sizeCfg, &nbufs); + if ( tcp3dResult != TCP3D_DRV_NO_ERR ) + { + System_printf("Get Num Bufs failed\n"); + } + else + { + System_printf("\t Tcp3d_getNumBuf() passed\n"); + } + + /* Step 3: Allocate memory for buffer descriptor structure */ + numBytes = nbufs * sizeof (Tcp3d_MemBuffer); + bufs = (Tcp3d_MemBuffer *) Memory_alloc(dataHeap, numBytes, 0, NULL); + if ( bufs == NULL ) + { + System_printf("Memory allocation failed !!! (DRV MEMBUFS)\n"); + System_exit(0); + } + + /* Step 4: Get TCP3D Driver buffer descriptor requirements */ + tcp3dResult = Tcp3d_getBufDesc(&sizeCfg, bufs); + if ( tcp3dResult != TCP3D_DRV_NO_ERR ) + { + System_printf("Get Buf Descriptor failed\n"); + } + else + { + System_printf("\t Tcp3d_getBufDesc() passed\n"); + } + + /* Step 5: Allocate memory for buffers based on the requirements given */ + /* + * NOTE: + * 1) The memory class type is NOT used for allocation. + * 2) The memory allocation is always done from the data Heap. See the + * BIOS config file more details (drvHeap). + */ + for (cnt = 0; cnt < nbufs; ++cnt) + { + numBytes = bufs[cnt].size; + align = 1<pingChRes[cnt].chNo; + drvInitParams.pongCh[cnt] = edmaConfig->pongChRes[cnt].chNo; + } + for (cnt = 0; cnt < TCP3D_DRV_MAX_LINK_CH; ++cnt) + { + drvInitParams.linkCh[cnt] = edmaConfig->linkChRes[cnt].chNo; + } + + /* Set the Control Register parameters */ + drvInitParams.ctrlParams.mode = testMode; + drvInitParams.ctrlParams.doubleBuf = testDoubleBuffer; + drvInitParams.ctrlParams.intTable = CSL_TCP3D_CFG_TCP3_MODE_ITG_EN_ENABLE; + drvInitParams.ctrlParams.autoTrig = CSL_TCP3D_CFG_TCP3_MODE_AUTO_TRIG_EN_ENABLE; + drvInitParams.ctrlParams.errIgnore = CSL_TCP3D_CFG_TCP3_MODE_ERROR_IGNORE_EN_DONT_STOP; + drvInitParams.ctrlParams.lteCrcSel = testLteCrcSel; +#ifdef _LITTLE_ENDIAN + drvInitParams.ctrlParams.endInt = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INTR_32_BIT_PACKED; + drvInitParams.ctrlParams.endInData = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INDATA_32_BIT_PACKED; +#else + drvInitParams.ctrlParams.endInt = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INTR_16_BIT_NATIVE; + drvInitParams.ctrlParams.endInData = CSL_TCP3D_CFG_TCP3_END_ENDIAN_INDATA_8_BIT_NATIVE; +#endif + drvInitParams.ctrlParams.exeP0cmd = CSL_TCP3D_CFG_TCP3_EXE_P0_EXE_CMD_ENABLE; + if ( testDoubleBuffer != CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE ) + drvInitParams.ctrlParams.exeP1cmd = CSL_TCP3D_CFG_TCP3_EXE_P1_EXE_CMD_ENABLE; + + fillConfig(&drvInitParams, instNum); + + /* Step 8: Call the TCP3D Driver init function */ + tcp3dResult = Tcp3d_init ( bufs, &drvInitParams); + + if ( tcp3dResult != TCP3D_DRV_NO_ERR) + { + System_printf("TCP3D Driver Init failed\n"); + System_exit(0); + } + else + { + System_printf("\t Tcp3d_init() passed\n"); + } + + *errCode = tcp3dResult; + + /* Initialize the TCP3D driver instance variable */ + return ((Tcp3d_Instance* )bufs[TCP3D_DRV_INST_BUFN].base); +} + +Tcp3d_Result tcp3dSampleDeinit( IHeap_Handle dataHeap, + UInt8 instNum, + Tcp3d_Instance *tcp3dInst) +{ + Int32 cnt; + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + + tcp3dResult = Tcp3d_deInit(tcp3dInst); + + if ( tcp3dResult != TCP3D_DRV_NO_ERR) + { + System_printf("TCP3D Driver De-Init failed\n"); + System_exit(0); + } + else + { + System_printf("\t Tcp3d_deInit() passed\n"); + } + + /* Free memory allocated for TCP3D Driver Initialization sequence */ + /* NOTE: + * It is assumed that the nbufs and bufs[] values are preserved from init. + */ + for (cnt = 0; cnt < nbufs; ++cnt) + { + Memory_free(dataHeap, bufs[cnt].base, bufs[cnt].size); + } + Memory_free(dataHeap, bufs, nbufs*sizeof(Tcp3d_MemBuffer)); + + return (tcp3dResult); +} + +#if EDMA_LOCAL_COMP_ISR // flag defined in sample.h file +/******************************************************************************* + ******************************************************************************/ +/** + * Fill the tables for allocated TCC & tccCB params, used with local + * EDMA3 call back ISR routine (see in sample_int_reg.c file). + */ +Void updateAllocatedTccsLoc( EDMA_CONFIG *edmaConfig) +{ + Int i; + UInt32 tcc; + + allocatedTCCsLoc[0] = 0u; + allocatedTCCsLoc[1] = 0u; + + for (i=0;ipingChRes[i].cbFunc != NULL) + { + tcc = edmaConfig->pingChRes[i].tccNo; + edma3IntrParamsLoc[tcc].tccCb = edmaConfig->pingChRes[i].cbFunc; + edma3IntrParamsLoc[tcc].cbData = edmaConfig->pingChRes[i].cbData; + if (tcc < 32u) + allocatedTCCsLoc[0u] |= (0x1u << tcc); + else + allocatedTCCsLoc[1u] |= (0x1u << (tcc - 32u)); + } + if( edmaConfig->pongChRes[i].cbFunc != NULL) + { + tcc = edmaConfig->pongChRes[i].tccNo; + edma3IntrParamsLoc[tcc].tccCb = edmaConfig->pongChRes[i].cbFunc; + edma3IntrParamsLoc[tcc].cbData = edmaConfig->pongChRes[i].cbData; + if (tcc < 32u) + allocatedTCCsLoc[0u] |= (0x1u << tcc); + else + allocatedTCCsLoc[1u] |= (0x1u << (tcc - 32u)); + } + } +} +#endif + +/******************************************************************************* + ******************************************************************************/ +Void openEdmaChannels ( EDMA3_DRV_Handle hEdma, + UInt8 perId, + EDMA_CONFIG *edmaConfig) +{ + EDMA3_DRV_Result result, status = EDMA3_DRV_SOK; + Int32 i; + + if ( perId < CSL_TCP3D_PER_CNT ) + { + edmaConfig->pingChRes[0].chNo = getRevt0ChannelNum(perId); + edmaConfig->pongChRes[0].chNo = getRevt1ChannelNum(perId); + edmaConfig->pingChRes[1].chNo = EDMA3_DRV_DMA_CHANNEL_ANY; + edmaConfig->pongChRes[1].chNo = EDMA3_DRV_DMA_CHANNEL_ANY; + } + else + { + System_printf("Wrong Instance ID passed\n"); + System_exit(0); + } + + /* Fille the edmaConfig structure with defaults */ + for (i=0;ipingChRes[i].tccNo = EDMA3_DRV_TCC_ANY; + edmaConfig->pingChRes[i].cbFunc = NULL; + edmaConfig->pingChRes[i].cbData = NULL; + + /* PONG channel defaults */ + edmaConfig->pongChRes[i].tccNo = EDMA3_DRV_TCC_ANY; + edmaConfig->pongChRes[i].cbFunc = NULL; + edmaConfig->pongChRes[i].cbData = NULL; + } + + /** + * Open all the Physical Channels and then register call backs + */ + for(i=0; ipingChRes[i].chNo, + &edmaConfig->pingChRes[i].tccNo, + (EDMA3_RM_EventQueue)0, + edmaConfig->pingChRes[i].cbFunc, + edmaConfig->pingChRes[i].cbData); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d open (result = %d)\n", edmaConfig->pingChRes[i].chNo, result); +#endif + status |= result; + + result = EDMA3_DRV_requestChannel (hEdma, + &edmaConfig->pongChRes[i].chNo, + &edmaConfig->pongChRes[i].tccNo, + (EDMA3_RM_EventQueue)0, + edmaConfig->pongChRes[i].cbFunc, + edmaConfig->pongChRes[i].cbData); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d open (result = %d)\n", edmaConfig->pongChRes[i].chNo, result); +#endif + status |= result; + } /* end of - for(i=0; ilinkChRes[i].chNo = EDMA3_DRV_LINK_CHANNEL; + + result = EDMA3_DRV_requestChannel (hEdma, + &edmaConfig->linkChRes[i].chNo, + &edmaConfig->linkChRes[i].tccNo, + (EDMA3_RM_EventQueue)0, + edmaConfig->linkChRes[i].cbFunc, + edmaConfig->linkChRes[i].cbData); +#if DEBUG_PRINT + System_printf("\tEDMA link channel %d open (result = %d)\n", edmaConfig->linkChRes[i].chNo, result); +#endif + status |= result; + } /* end of - for(i=0; ipingChRes[i].chNo); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d close (result = %d)\n", edmaConfig->pingChRes[i].chNo, result); +#endif + status |= result; + + result = EDMA3_DRV_freeChannel (hEdma, edmaConfig->pongChRes[i].chNo); +#if DEBUG_PRINT + System_printf("\tEDMA channel %d close (result = %d)\n", edmaConfig->pongChRes[i].chNo, result); +#endif + status |= result; + } /* end of - for(i=0; ilinkChRes[i].chNo); +#if DEBUG_PRINT + System_printf("\tEDMA link channel %d close (result = %d)\n", edmaConfig->linkChRes[i].chNo, result); +#endif + status |= result; + } + + if ( status != EDMA3_DRV_SOK ) + System_exit(0); + +} /* closeEdmaChannels() */ + +/* End of File */ diff --git a/test/src/tcp3d_drv_types.h b/test/src/tcp3d_drv_types.h new file mode 100644 index 0000000..d18b66b --- /dev/null +++ b/test/src/tcp3d_drv_types.h @@ -0,0 +1,78 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#ifndef _TCP3D_DRV_TYPES_H_ +#define _TCP3D_DRV_TYPES_H_ + +/* c99 types includes */ +#include +#include + +/** @addtogroup TCP3D_DRV_MACRO + @{ */ + +/** + * @brief Key work used with the function definitions to represent them as + * static and inline type functions. + */ +#define INLINE static inline + +/** + * @brief Key work for restrict abstracted to support various compilers. + */ +#define RESTRICT restrict + +/** + * @brief Key word used for indicating the argument as INPUT only. + */ +#define IN + +/** + * @brief Key word used for indicating the argument as OUTPUT only. + */ +#define OUT + +/** + * @brief Key word used for indicating the argument as both INPUT and OUTPUT. + */ +#define INOUT + +/** +@} +*/ + +#endif /* _TCP3D_DRV_TYPES_H_ */ diff --git a/test/src/tcp3d_inputConfigPrep.c b/test/src/tcp3d_inputConfigPrep.c new file mode 100644 index 0000000..7cbe95f --- /dev/null +++ b/test/src/tcp3d_inputConfigPrep.c @@ -0,0 +1,314 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#include +#include + +#include "tcp3d_main.h" + +/* XDC includes */ +#include +#include + +/* CSL includes */ +#include +#include +#include +#include + +#if TEST_PREPARE_ONLY_BETASTATE +/******************************************************************************* + ******************************************************************************/ +Void prepareBlockSizeDepICParams(cbDataDesc *cbPtr) +{ + Int32 frameLenInd; + UInt8 numMAP; + + if ( ( cbPtr->mode == TEST_MODE_SINGLE ) || + ( cbPtr->mode == TEST_MODE_SPLIT ) ) + numMAP = 1; /* for 3GPP numMAP=1 */ + else + numMAP = 2; /* LTE or WIMAX */ + + /* IC0 - IC1 */ + cbPtr->inCfgParams->blockLen = (cbPtr->blockSize-1); + TCP3D_codeBlkSeg ( cbPtr->blockSize, + numMAP, + &cbPtr->sw0LengthUsed, + &cbPtr->inCfgParams->sw0LenSel, + &cbPtr->inCfgParams->sw1Len, + &cbPtr->inCfgParams->sw2LenSel, + &cbPtr->inCfgParams->numsw0); + + /* IC12 - IC14 */ + if ( cbPtr->mode == TEST_MODE_LTE ) + { /* LTE */ + frameLenInd = LTE_interleaver_index(cbPtr->blockSize); + cbPtr->inCfgParams->itgParam[0] = (UInt16) ((2*TCP3_LteInterleaverTable[frameLenInd][2]) % TCP3_LteInterleaverTable[frameLenInd][0]); + cbPtr->inCfgParams->itgParam[1] = TCP3_LteInterleaverTable[frameLenInd][6]; + cbPtr->inCfgParams->itgParam[2] = TCP3_LteInterleaverTable[frameLenInd][3]; + cbPtr->inCfgParams->itgParam[3] = TCP3_LteInterleaverTable[frameLenInd][4]; + cbPtr->inCfgParams->itgParam[4] = TCP3_LteInterleaverTable[frameLenInd][5]; + } + else if ( cbPtr->mode == TEST_MODE_WIMAX ) + { /* WIMAX */ + /* NOTE: Finding Index function is not implemented */ + frameLenInd = WIMAX_interleaver_index(cbPtr->blockSize); + cbPtr->inCfgParams->itgParam[0] = 0; + cbPtr->inCfgParams->itgParam[1] = TCP3_WimaxInterleaverTable[frameLenInd][0]; + cbPtr->inCfgParams->itgParam[2] = TCP3_WimaxInterleaverTable[frameLenInd][1]; + cbPtr->inCfgParams->itgParam[3] = TCP3_WimaxInterleaverTable[frameLenInd][2]; + cbPtr->inCfgParams->itgParam[4] = TCP3_WimaxInterleaverTable[frameLenInd][3]; + } + + Tcp3d_prepBlockSizeDepConfigRegs ( cbPtr->mode, + &cbPtr->inCfg[0], + cbPtr->inCfgParams->numsw0, + cbPtr->inCfgParams->blockLen, + cbPtr->inCfgParams->sw0LenSel, + cbPtr->inCfgParams->sw2LenSel, + cbPtr->inCfgParams->sw1Len, + &cbPtr->inCfgParams->itgParam[0]); +} + +/******************************************************************************* + ******************************************************************************/ +Void prepareBetaStateICParams(cbDataDesc *cbPtr, UInt8 mode) +{ + if ( mode != TEST_MODE_WIMAX ) + { + Tcp3d_betaStates ( cbPtr->tailBits, + //cbPtr->tailMap1, + 1, /* change to -1 for sign change */ + COMPUTE_KT(cbPtr->blockSize), + cbPtr->inCfgParams->betaMap0, + cbPtr->inCfgParams->betaMap1); + + Tcp3d_prepBetaStateConfigRegs ( mode, + &cbPtr->inCfg[0], + &cbPtr->inCfgParams->betaMap0[0], + &cbPtr->inCfgParams->betaMap1[0]); + } +} + +#else +/******************************************************************************* + ******************************************************************************/ +/** + * This function is used for filling the changing values and calling the + * utility prepare functions for constructing all the 15 input config registers + */ +Void prepareIC(cbDataDesc *cbPtr, UInt32 *tempIC, UInt8 copyFlag) +{ + UInt8 numMAP; + Int32 frameLenInd; + Int i; + Tcp3d_InCfgParams *inCfgParams = cbPtr->inCfgParams; + + if ( ( cbPtr->mode == TEST_MODE_SINGLE ) || + ( cbPtr->mode == TEST_MODE_SPLIT ) ) + numMAP = 1; /* for 3GPP numMAP=1 */ + else + numMAP = 2; /* LTE or WIMAX */ + + /* IC0 - IC1 */ + inCfgParams->blockLen = (cbPtr->blockSize-1); + TCP3D_codeBlkSeg ( cbPtr->blockSize, + numMAP, + &cbPtr->sw0LengthUsed, + &inCfgParams->sw0LenSel, + &inCfgParams->sw1Len, + &inCfgParams->sw2LenSel, + &inCfgParams->numsw0); + + /* IC2 - IC3 */ + /* Fixed values filled once during init */ + /* IC4 - IC7 */ + if ( mode != TEST_MODE_WIMAX ) + { + /* compute the beta state values from tail bits */ + Tcp3d_betaStates ( cbPtr->tailBits, + 1, /* change to -1 for sign change */ + COMPUTE_KT(cbPtr->blockSize), + inCfgParams->betaMap0, + inCfgParams->betaMap1); + } + /* IC8 - IC11 */ + /* Fixed values filled once during init */ + /* IC12 - IC14 */ + if ( cbPtr->mode == TEST_MODE_LTE ) + { /* LTE */ + frameLenInd = LTE_interleaver_index(cbPtr->blockSize); + inCfgParams->itgParam[0] = (UInt16) ((2*TCP3_LteInterleaverTable[frameLenInd][2]) % TCP3_LteInterleaverTable[frameLenInd][0]); + inCfgParams->itgParam[1] = TCP3_LteInterleaverTable[frameLenInd][6]; + inCfgParams->itgParam[2] = TCP3_LteInterleaverTable[frameLenInd][3]; + inCfgParams->itgParam[3] = TCP3_LteInterleaverTable[frameLenInd][4]; + inCfgParams->itgParam[4] = TCP3_LteInterleaverTable[frameLenInd][5]; + } + else if ( cbPtr->mode == TEST_MODE_WIMAX ) + { /* WIMAX */ + /* NOTE: Finding Index function is not implemented */ + frameLenInd = WIMAX_interleaver_index(cbPtr->blockSize); + inCfgParams->itgParam[0] = 0; + inCfgParams->itgParam[1] = TCP3_WimaxInterleaverTable[frameLenInd][0]; + inCfgParams->itgParam[2] = TCP3_WimaxInterleaverTable[frameLenInd][1]; + inCfgParams->itgParam[3] = TCP3_WimaxInterleaverTable[frameLenInd][2]; + inCfgParams->itgParam[4] = TCP3_WimaxInterleaverTable[frameLenInd][3]; + } + + /* All Input Config Registers are populated */ + Tcp3d_prepConfigRegs ( cbPtr->mode, + inCfgParams, + cbPtr->inCfg, + tempIC, + copyFlag); +} +#endif + +/******************************************************************************* + ******************************************************************************/ +/** + * This function is used for filling the fixed values in the inCfgParams + * structure. + */ +Void fillICParams(Tcp3d_InCfgParams *inCfgParams, cbConfig *cbCfg) +{ + /* copy the config info into inCfgParams */ + /* IC0 - IC1 */ + /* Filled by the TCP3D_codeBlkSeg() function call */ + /* IC2 */ + inCfgParams->intLoadSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_INTER_LOAD_SEL_SET; + inCfgParams->maxStar = cbCfg->maxst_en; + inCfgParams->outStsRead = cbCfg->out_flag_en; +#ifdef _BIG_ENDIAN + inCfgParams->outOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_OUT_ORDER_SEL_SWAP; +#else + inCfgParams->outOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_OUT_ORDER_SEL_NO_SWAP; +#endif + inCfgParams->extScale = cbCfg->ext_scale_en; + inCfgParams->softOutRead = cbCfg->soft_out_flag_en; +#ifdef _BIG_ENDIAN + inCfgParams->softOutOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_ORDER_SEL_8_BIT; +#else + inCfgParams->softOutOrderSel = CSL_TCP3D_DMA_TCP3D_IC_CFG2_P0_SOFT_OUT_ORDER_SEL_32_BIT; +#endif + inCfgParams->softOutFrmtSel = cbCfg->soft_out_fmt; + inCfgParams->minIter = cbCfg->min_itr; + inCfgParams->maxIter = cbCfg->max_itr; + inCfgParams->snrVal = cbCfg->snr_val; + inCfgParams->snrReport = cbCfg->snr_rep; + inCfgParams->stopSel = cbCfg->stop_sel; + inCfgParams->crcIterSel = cbCfg->crc_iter_pass; + inCfgParams->crcPolySel = cbCfg->crc_sel; + /* IC3 */ + inCfgParams->maxStarThres = cbCfg->maxst_thold; + inCfgParams->maxStarValue = cbCfg->maxst_value; + /* IC4 - IC7 */ + /* Filling with defaults - updated based on tail bits */ + memset(inCfgParams->betaMap0,0,8); + memset(inCfgParams->betaMap0,0,8); + /* IC8 - IC11 */ + inCfgParams->extrScale[0] = cbCfg->ext_scale_0; + inCfgParams->extrScale[1] = cbCfg->ext_scale_1; + inCfgParams->extrScale[2] = cbCfg->ext_scale_2; + inCfgParams->extrScale[3] = cbCfg->ext_scale_3; + inCfgParams->extrScale[4] = cbCfg->ext_scale_4; + inCfgParams->extrScale[5] = cbCfg->ext_scale_5; + inCfgParams->extrScale[6] = cbCfg->ext_scale_6; + inCfgParams->extrScale[7] = cbCfg->ext_scale_7; + inCfgParams->extrScale[8] = cbCfg->ext_scale_8; + inCfgParams->extrScale[9] = cbCfg->ext_scale_9; + inCfgParams->extrScale[10] = cbCfg->ext_scale_10; + inCfgParams->extrScale[11] = cbCfg->ext_scale_11; + inCfgParams->extrScale[12] = cbCfg->ext_scale_12; + inCfgParams->extrScale[13] = cbCfg->ext_scale_13; + inCfgParams->extrScale[14] = cbCfg->ext_scale_14; + inCfgParams->extrScale[15] = cbCfg->ext_scale_15; + /* IC12 - IC14 */ + /* Filling with defaults - updated based on block size */ + inCfgParams->itgParam[0] = 0; + inCfgParams->itgParam[1] = 0; + inCfgParams->itgParam[2] = 0; + inCfgParams->itgParam[3] = 0; + inCfgParams->itgParam[4] = 0; +} + +/** + * @b Description + * @n + * This function compares the prepared beta state values with the + * reference test vector file. + * + * @param[in] inCfg + * Address of input configuration registers array. + * + * @retval + * Not Applicable. + */ +void checkBetaValues (uint32_t inCfg[]) +{ +#if TEST_BETA_VALUE_CHECK + Int idx, i; + Char fileName[300]; + FILE *fid; + UInt32 inCfgRef[15]; + UInt32 tmp; + + /* Check Beta state values with reference */ + sprintf(fileName, "%s\\reference\\block%d_inp_cfg.dat", testFolder[testCntr], sendBlockCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\t Reference Input configuration file open failed : %s\n", fileName); + System_exit(0); + } + for(i=0;i<15;i++) + { + fscanf(fid, "%x", &tmp); + inCfgRef[i] = tmp; + } + fclose(fid); + + for (idx = 4; idx < 8; ++idx) + { + if ( inCfgRef[idx] != inCfg[idx] ) + { + System_printf("\t Block Count %d, INCFG mismatch %d\n", sendBlockCnt, idx); + } + } +#else + return; +#endif +} + +/* end of file */ diff --git a/test/src/tcp3d_itg.c b/test/src/tcp3d_itg.c new file mode 100644 index 0000000..0eac0f6 --- /dev/null +++ b/test/src/tcp3d_itg.c @@ -0,0 +1,366 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#include +#include + +#include + +/***************************************************************************/ +/* LTE Interelaver table with the coefficients P0,P1,P2 and G0 needed for */ +/* internal LTE coefficient generation. */ +/* K f1 f2 P0 P1 P2 G0 */ +/***************************************************************************/ +Int16 TCP3_LteInterleaverTable [220][7] = { + 40, 3, 10, 30, 20, 10, 13, // 0 + 48, 7, 12, 36, 24, 12, 19, // 1 + 56, 19, 42, 42, 28, 14, 5, // 2 + 64, 7, 16, 48, 32, 16, 23, // 3 + 72, 7, 18, 54, 36, 18, 25, // 4 + 80, 11, 20, 60, 40, 20, 31, // 5 + 88, 5, 22, 22, 44, 66, 27, // 6 + 96, 11, 24, 72, 48, 24, 35, // 7 + 104, 7, 26, 78, 52, 26, 33, // 8 + 112, 41, 84, 28, 56, 84, 13, // 9 + 120, 103, 90, 90, 60, 30, 73, // 10 + 128, 15, 32, 96, 64, 32, 47, // 11 + 136, 9, 34, 34, 68, 102, 43, // 12 + 144, 17, 108, 36, 72, 108, 125, // 13 + 152, 9, 38, 38, 76, 114, 47, // 14 + 160, 21, 120, 40, 80, 120, 141, // 15 + 168, 101, 84, 42, 84, 126, 17, // 16 + 176, 21, 44, 44, 88, 132, 65, // 17 + 184, 57, 46, 46, 92, 138, 103, // 18 + 192, 23, 48, 144, 96, 48, 71, // 19 + 200, 13, 50, 50, 100, 150, 63, // 20 + 208, 27, 52, 156, 104, 52, 79, // 21 + 216, 11, 36, 162, 108, 54, 47, // 22 + 224, 27, 56, 168, 112, 56, 83, // 23 + 232, 85, 58, 58, 116, 174, 143, // 24 + 240, 29, 60, 60, 120, 180, 89, // 25 + 248, 33, 62, 62, 124, 186, 95, // 26 + 256, 15, 32, 192, 128, 64, 47, // 27 + 264, 17, 198, 66, 132, 198, 215, // 28 + 272, 33, 68, 68, 136, 204, 101, // 29 + 280, 103, 210, 210, 140, 70, 33, // 30 + 288, 19, 36, 216, 144, 72, 55, // 31 + 296, 19, 74, 222, 148, 74, 93, // 32 + 304, 37, 76, 76, 152, 228, 113, // 33 + 312, 19, 78, 234, 156, 78, 97, // 34 + 320, 21, 120, 80, 160, 240, 141, // 35 + 328, 21, 82, 82, 164, 246, 103, // 36 + 336, 115, 84, 252, 168, 84, 199, // 37 + 344, 193, 86, 86, 172, 258, 279, // 38 + 352, 21, 44, 88, 176, 264, 65, // 39 + 360, 133, 90, 90, 180, 270, 223, // 40 + 368, 81, 46, 92, 184, 276, 127, // 41 + 376, 45, 94, 94, 188, 282, 139, // 42 + 384, 23, 48, 288, 192, 96, 71, // 43 + 392, 243, 98, 294, 196, 98, 341, // 44 + 400, 151, 40, 300, 200, 100, 191, // 45 + 408, 155, 102, 306, 204, 102, 257, // 46 + 416, 25, 52, 104, 208, 312, 77, // 47 + 424, 51, 106, 318, 212, 106, 157, // 48 + 432, 47, 72, 324, 216, 108, 119, // 49 + 440, 91, 110, 330, 220, 110, 201, // 50 + 448, 29, 168, 112, 224, 336, 197, // 51 + 456, 29, 114, 114, 228, 342, 143, // 52 + 464, 247, 58, 348, 232, 116, 305, // 53 + 472, 29, 118, 118, 236, 354, 147, // 54 + 480, 89, 180, 120, 240, 360, 269, // 55 + 488, 91, 122, 366, 244, 122, 213, // 56 + 496, 157, 62, 124, 248, 372, 219, // 57 + 504, 55, 84, 378, 252, 126, 139, // 58 + 512, 31, 64, 384, 256, 128, 95, // 59 + 528, 17, 66, 132, 264, 396, 83, // 60 + 544, 35, 68, 408, 272, 136, 103, // 61 + 560, 227, 420, 420, 280, 140, 87, // 62 + 576, 65, 96, 144, 288, 432, 161, // 63 + 592, 19, 74, 444, 296, 148, 93, // 64 + 608, 37, 76, 152, 304, 456, 113, // 65 + 624, 41, 234, 156, 312, 468, 275, // 66 + 640, 39, 80, 480, 320, 160, 119, // 67 + 656, 185, 82, 164, 328, 492, 267, // 68 + 672, 43, 252, 504, 336, 168, 295, // 69 + 688, 21, 86, 172, 344, 516, 107, // 70 + 704, 155, 44, 528, 352, 176, 199, // 71 + 720, 79, 120, 540, 360, 180, 199, // 72 + 736, 139, 92, 552, 368, 184, 231, // 73 + 752, 23, 94, 564, 376, 188, 117, // 74 + 768, 217, 48, 192, 384, 576, 265, // 75 + 784, 25, 98, 196, 392, 588, 123, // 76 + 800, 17, 80, 200, 400, 600, 97, // 77 + 816, 127, 102, 612, 408, 204, 229, // 78 + 832, 25, 52, 208, 416, 624, 77, // 79 + 848, 239, 106, 636, 424, 212, 345, // 80 + 864, 17, 48, 216, 432, 648, 65, // 81 + 880, 137, 110, 220, 440, 660, 247, // 82 + 896, 215, 112, 672, 448, 224, 327, // 83 + 912, 29, 114, 228, 456, 684, 143, // 84 + 928, 15, 58, 696, 464, 232, 73, // 85 + 944, 147, 118, 708, 472, 236, 265, // 86 + 960, 29, 60, 240, 480, 720, 89, // 87 + 976, 59, 122, 732, 488, 244, 181, // 88 + 992, 65, 124, 248, 496, 744, 189, // 89 + 1008, 55, 84, 756, 504, 252, 139, // 90 + 1024, 31, 64, 768, 512, 256, 95, // 91 + 1056, 17, 66, 264, 528, 792, 83, // 92 + 1088, 171, 204, 816, 544, 272, 375, // 93 + 1120, 67, 140, 840, 560, 280, 207, // 94 + 1152, 35, 72, 864, 576, 288, 107, // 95 + 1184, 19, 74, 888, 592, 296, 93, // 96 + 1216, 39, 76, 912, 608, 304, 115, // 97 + 1248, 19, 78, 936, 624, 312, 97, // 98 + 1280, 199, 240, 960, 640, 320, 439, // 99 + 1312, 21, 82, 328, 656, 984, 103, // 100 + 1344, 211, 252, 1008, 672, 336, 463, // 101 + 1376, 21, 86, 344, 688, 1032, 107, // 102 + 1408, 43, 88, 1056, 704, 352, 131, // 103 + 1440, 149, 60, 360, 720, 1080, 209, // 104 + 1472, 45, 92, 368, 736, 1104, 137, // 105 + 1504, 49, 846, 376, 752, 1128, 895, // 106 + 1536, 71, 48, 1152, 768, 384, 119, // 107 + 1568, 13, 28, 392, 784, 1176, 41, // 108 + 1600, 17, 80, 400, 800, 1200, 97, // 109 + 1632, 25, 102, 408, 816, 1224, 127, // 110 + 1664, 183, 104, 1248, 832, 416, 287, // 111 + 1696, 55, 954, 1272, 848, 424, 1009, // 112 + 1728, 127, 96, 1296, 864, 432, 223, // 113 + 1760, 27, 110, 1320, 880, 440, 137, // 114 + 1792, 29, 112, 448, 896, 1344, 141, // 115 + 1824, 29, 114, 456, 912, 1368, 143, // 116 + 1856, 57, 116, 464, 928, 1392, 173, // 117 + 1888, 45, 354, 472, 944, 1416, 399, // 118 + 1920, 31, 120, 1440, 960, 480, 151, // 119 + 1952, 59, 610, 1464, 976, 488, 669, // 120 + 1984, 185, 124, 496, 992, 1488, 309, // 121 + 2016, 113, 420, 504, 1008, 1512, 533, // 122 + 2048, 31, 64, 1536, 1024, 512, 95, // 123 + 2112, 17, 66, 528, 1056, 1584, 83, // 124 + 2176, 171, 136, 1632, 1088, 544, 307, // 125 + 2240, 209, 420, 560, 1120, 1680, 629, // 126 + 2304, 253, 216, 576, 1152, 1728, 469, // 127 + 2368, 367, 444, 1776, 1184, 592, 811, // 128 + 2432, 265, 456, 608, 1216, 1824, 721, // 129 + 2496, 181, 468, 624, 1248, 1872, 649, // 130 + 2560, 39, 80, 1920, 1280, 640, 119, // 131 + 2624, 27, 164, 1968, 1312, 656, 191, // 132 + 2688, 127, 504, 2016, 1344, 672, 631, // 133 + 2752, 143, 172, 2064, 1376, 688, 315, // 134 + 2816, 43, 88, 2112, 1408, 704, 131, // 135 + 2880, 29, 300, 720, 1440, 2160, 329, // 136 + 2944, 45, 92, 736, 1472, 2208, 137, // 137 + 3008, 157, 188, 752, 1504, 2256, 345, // 138 + 3072, 47, 96, 2304, 1536, 768, 143, // 139 + 3136, 13, 28, 784, 1568, 2352, 41, // 140 + 3200, 111, 240, 2400, 1600, 800, 351, // 141 + 3264, 443, 204, 2448, 1632, 816, 647, // 142 + 3328, 51, 104, 2496, 1664, 832, 155, // 143 + 3392, 51, 212, 2544, 1696, 848, 263, // 144 + 3456, 451, 192, 2592, 1728, 864, 643, // 145 + 3520, 257, 220, 880, 1760, 2640, 477, // 146 + 3584, 57, 336, 896, 1792, 2688, 393, // 147 + 3648, 313, 228, 912, 1824, 2736, 541, // 148 + 3712, 271, 232, 2784, 1856, 928, 503, // 149 + 3776, 179, 236, 2832, 1888, 944, 415, // 150 + 3840, 331, 120, 2880, 1920, 960, 451, // 151 + 3904, 363, 244, 2928, 1952, 976, 607, // 152 + 3968, 375, 248, 2976, 1984, 992, 623, // 153 + 4032, 127, 168, 3024, 2016, 1008, 295, // 154 + 4096, 31, 64, 3072, 2048, 1024, 95, // 155 + 4160, 33, 130, 1040, 2080, 3120, 163, // 156 + 4224, 43, 264, 3168, 2112, 1056, 307, // 157 + 4288, 33, 134, 1072, 2144, 3216, 167, // 158 + 4352, 477, 408, 1088, 2176, 3264, 885, // 159 + 4416, 35, 138, 3312, 2208, 1104, 173, // 160 + 4480, 233, 280, 1120, 2240, 3360, 513, // 161 + 4544, 357, 142, 1136, 2272, 3408, 499, // 162 + 4608, 337, 480, 1152, 2304, 3456, 817, // 163 + 4672, 37, 146, 1168, 2336, 3504, 183, // 164 + 4736, 71, 444, 3552, 2368, 1184, 515, // 165 + 4800, 71, 120, 3600, 2400, 1200, 191, // 166 + 4864, 37, 152, 1216, 2432, 3648, 189, // 167 + 4928, 39, 462, 3696, 2464, 1232, 501, // 168 + 4992, 127, 234, 3744, 2496, 1248, 361, // 169 + 5056, 39, 158, 3792, 2528, 1264, 197, // 170 + 5120, 39, 80, 3840, 2560, 1280, 119, // 171 + 5184, 31, 96, 3888, 2592, 1296, 127, // 172 + 5248, 113, 902, 1312, 2624, 3936, 1015, // 173 + 5312, 41, 166, 1328, 2656, 3984, 207, // 174 + 5376, 251, 336, 4032, 2688, 1344, 587, // 175 + 5440, 43, 170, 4080, 2720, 1360, 213, // 176 + 5504, 21, 86, 1376, 2752, 4128, 107, // 177 + 5568, 43, 174, 4176, 2784, 1392, 217, // 178 + 5632, 45, 176, 1408, 2816, 4224, 221, // 179 + 5696, 45, 178, 1424, 2848, 4272, 223, // 180 + 5760, 161, 120, 1440, 2880, 4320, 281, // 181 + 5824, 89, 182, 1456, 2912, 4368, 271, // 182 + 5888, 323, 184, 4416, 2944, 1472, 507, // 183 + 5952, 47, 186, 4464, 2976, 1488, 233, // 184 + 6016, 23, 94, 4512, 3008, 1504, 117, // 185 + 6080, 47, 190, 4560, 3040, 1520, 237, // 186 + 6144, 263, 480, 4608, 3072, 1536, 743, // 187 + +/*********FOLLOWING PART IS EXTENTION TO 8192 with step 64 TO TEST TCP3 *************/ + 6208, 3, 194, 4656, 3104, 1552, 197, // 188 + 6272, 3, 14, 4704, 3136, 1568, 17, // 189 + 6336, 5, 66, 1584, 3168, 4752, 71, // 190 + 6400, 3, 10, 4800, 3200, 1600, 13, // 191 + 6464, 3, 202, 4848, 3232, 1616, 205, // 192 + 6528, 5, 102, 1632, 3264, 4896, 107, // 193 + 6592, 3, 206, 4944, 3296, 1648, 209, // 194 + 6656, 3, 26, 4992, 3328, 1664, 29, // 195 + 6720, 11, 210, 5040, 3360, 1680, 221, // 196 + 6784, 3, 106, 5088, 3392, 1696, 109, // 197 + 6848, 3, 214, 5136, 3424, 1712, 217, // 198 + 6912, 5, 6, 1728, 3456, 5184, 11, // 199 + 6976, 3, 218, 5232, 3488, 1744, 221, // 200 + 7040, 3, 110, 5280, 3520, 1760, 113, // 201 + 7104, 5, 222, 1776, 3552, 5328, 227, // 202 + 7168, 3, 14, 5376, 3584, 1792, 17, // 203 + 7232, 3, 226, 5424, 3616, 1808, 229, // 204 + 7296, 5, 114, 1824, 3648, 5472, 119, // 205 + 7360, 3, 230, 5520, 3680, 1840, 233, // 206 + 7424, 3, 58, 5568, 3712, 1856, 61, // 207 + 7488, 5, 78, 1872, 3744, 5616, 83, // 208 + 7552, 3, 118, 5664, 3776, 1888, 121, // 209 + 7616, 3, 238, 5712, 3808, 1904, 241, // 210 + 7680, 7, 30, 5760, 3840, 1920, 37, // 211 + 7744, 3, 22, 5808, 3872, 1936, 25, // 212 + 7808, 3, 122, 5856, 3904, 1952, 125, // 213 + 7872, 5, 246, 1968, 3936, 5904, 251, // 214 + 7936, 3, 62, 5952, 3968, 1984, 65, // 215 + 8000, 3, 10, 6000, 4000, 2000, 13, // 216 + 8064, 5, 42, 2016, 4032, 6048, 47, // 217 + 8128, 3, 254, 6096, 4064, 2032, 257, // 218 + 8192, 3, 2, 6144, 4096, 2048, 5, // 219 +}; + +Int16 TCP3_WimaxInterleaverTable[17][4] ={ + 20, 18, 11, 4, // 0 + 8, 12, 23, 34, // 1 + 4, 14, 27, 40, // 2 + 44, 54, 23, 4, // 3 + 28, 8, 39, 46, // 4 + 44, 12, 79, 90, // 5 + 52, 14, 27, 40, // 6 + 68, 20, 107, 126, // 7 + 44, 12, 23, 34, // 8 + 44, 12, 71, 82, // 9 + 52, 14, 27, 40, // 10 + 52, 14, 87, 100, // 11 + 212, 356, 119, 402, // 12 + 172, 588, 387, 474, // 13 + 172, 44, 447, 1390, // 14 + 124, 1000, 87, 1070, // 15 + 212, 1320, 131, 1362 // 16 +}; + +/*WiMAX frame lengths*/ +Int32 WIMAX_FRAME_LENGTHS[17] = { + 48, /* 0: 6 Bytes */ + 72, /* 1: 9 Bytes */ + 96, /* 2: 12 Bytes */ + 144, /* 3: 18 Bytes */ + 192, /* 4: 24 Bytes */ + 216, /* 5: 27 Bytes */ + 240, /* 6: 30 Bytes */ + 288, /* 7: 36 Bytes */ + 360, /* 8: 45 Bytes */ + 384, /* 9: 48 Bytes */ + 432, /* 10: 54 Bytes */ + 480, /* 11: 60 Bytes */ + 960, /* 12: 120 Bytes */ + 1920, /* 13: 240 Bytes */ + 2880, /* 14: 360 Bytes */ + 3840, /* 15: 480 Bytes */ + 4800 /* 16: 600 Bytes */ +}; + +/* + * Calculates the LTE interleaver table index for given block length K + */ +Int32 LTE_interleaver_index(Int32 K) +{ + Int32 ind = K; + + if ( K <= 512u ) + { + ind = ( K >> 3 ) - 5u; + } + else if ( K <= 1024u ) + { + ind = ( K >> 4 ) + 27u; + } + else if ( K <= 2048u ) + { + ind = ( K >> 5 ) + 59u; + } + else if ( K <= 8192u ) + { + ind = ( K >> 6 ) + 91u; + } + + if ( ind == K ) + { + printf("%s\n"," Error: Unsupported block length "); + exit(0); + } + + return (ind); +} + +/* + * Calculates the WIMAX interleaver table index for given block length K + */ +Int32 WIMAX_interleaver_index(Int32 K) +{ + Int32 ind = K, i; + + for (i = 0; i < 17; ++i) + { + if ( K == WIMAX_FRAME_LENGTHS[i] ) + { + ind = i; + } + } + + if ( ind == K ) + { + printf("%s\n"," Error: Unsupported block length "); + exit(0); + } + + return (ind); +} diff --git a/test/src/tcp3d_main.c b/test/src/tcp3d_main.c new file mode 100644 index 0000000..8b29341 --- /dev/null +++ b/test/src/tcp3d_main.c @@ -0,0 +1,1429 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + + + +#include +#include +#include + +/* XDC includes */ +#include + +/* BIOS includes */ +#include +#include +#include +#include +#include +#include + +/* IPC includes */ +#include +#include +#include +#include +#include + +/* CSL includes */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sample.h" +#include "tcp3d_drv_sample.h" +#include "tcp3d_main.h" + +/********************************************************************** + ************************** Test Compile Flags ************************ + **********************************************************************/ +#define DEBUG_VARS 0 // add debug variables at different places in the code + +#define DEBUG_PRINT 0 + +#define MY_LOG_PRINT0(x) {\ + if(DEBUG_PRINT)\ + {\ + System_printf(#x"\n");\ + }\ +} + +#define MY_LOG_PRINT1(x, val) {\ + if(DEBUG_PRINT)\ + {\ + System_printf(#x" %d\n", val);\ + }\ +} + +#define MY_LOG_PRINT2(x, val1, y, val2) {\ + if(DEBUG_PRINT)\ + {\ + System_printf(#x" %d, "#y" %d\n", val1, val2);\ + }\ +} + +/** + * This is used for plotting timing diagram using matlab by collecting the data + * points from running the code. + * + * Requirements: + * 1) it is required to enable the logging for TCP3D in the Simulator + * Configuration file. The decoding and reset times are collected from the + * log file (c:\\Tcp3dDebug.log) generated from running the simulator. + */ +#define TEST_PROFILE_LOG 1 + +/********************************************************************** + ************************** Test Definitions ************************** + **********************************************************************/ +#define START_CMD_PERIOD 1 + +#define SIMULATOR_SUPPORT 0 + +/********************************************************************** + ************************** Test Variables **************************** + **********************************************************************/ +/* Code Block Test Variables */ +#pragma DATA_SECTION(codeBlockSet, ".main_mem") +cbTestDesc codeBlockSet; + +Char *strMode[4] = {"3GPP(0)","LTE(1)","WIMAX(2)","WCDMA Split(3)"}; +Char *strDBuf[2] = {"Disable(0)","Enable(1)"}; +Char *strInst[2] = {"TCP3D_A(0)","TCP3D_B(1)"}; + +UInt32 keepTestVectMem = 0; +UInt32 firstTime = 1; +UInt32 testMaxCodeBlocks; +UInt32 dspCoreID; + +/* File Operation Variables */ +UInt32 testCntr = 0; +UInt32 testErrCntr = 0; +UInt32 totErrCnt; +#ifdef USE_PDK_INSTALL_BASE +Char testvectFolderBase[] = "C:\\ti\\csl_lld_keystone2_1_0_0_2\\packages\\ti\\drv\\tcp3d\\test\\gen_test_vectors\\"; +#else +Char testvectFolderBase[] = "..\\..\\gen_test_vectors\\"; +#endif +Char folderName[1000] = ""; +Char *testFolder[] = { + "test0_lte", + "test0_wimax", + "test0_wcdma", + "WIMAX", + "test1_lte", + "test2_lte", + "WCDMA", + "test4_lte", + "test3_lte", + //"test1_wimax", // giving error on simulator, TODO: debug later + "test3_wimax", + "test2_wimax", + "test2_wcdma", + "LTE", + "test3_wcdma", + "test1_wcdma", + "sim_config\\WIMAX", + "sim_config\\LTE", + "sim_config\\WCDMA", + // "LTE_200", + // "WCDMA_200", + // "WIMAX_200", +}; +/* Number of test folders computed. Alternately can be set manually as length of *testFolder[] array */ +UInt32 numTests = sizeof(testFolder)/sizeof(*testFolder); + +/* Throughput calculation variables */ +clock_t total_clock_end, total_clock_start; +UInt32 test_cycles; +UInt32 TotalBitsDecoded; +Float ThroughPut; + +/* BIOS variables */ +Semaphore_Handle semRcvDone, semSendBlock, semSendWait, semRcvStart; +IHeap_Handle dataHeap = NULL; +IHeap_Handle drvHeap = NULL; + +/* Driver configuration variables */ +Tcp3d_Result tcp3dResultSend = TCP3D_DRV_NO_ERR; +Tcp3d_Instance *tcp3dDrvInst[2] = {NULL, NULL}; +Tcp3d_Instance *inst; +Tcp3d_Ctrl drvCtrl; +Tcp3d_Sts drvStatus; + +Int32 sendBlockCnt; +Int32 rcvBlockCnt; +#if TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT +UInt32 tempICRegs[15]; /* to store 15 registers */ +#endif + +/** + * EDMA3 LLD & TCP3D Driver Init/Deinit related variables + */ +EDMA3_DRV_Handle hEdma; +UInt32 tpccNum; +UInt32 tpccRegionUsed; +EDMA_CONFIG edmaConfig[2]; +UInt8 instNum; +/* Flags used in ISR functions */ +UInt32 pingComplete, pongComplete; +UInt32 pauseIntr = 0, l2pIntr = 0; +UInt32 soldoutCntr = 0; +UInt32 tcp3dEventCntr = 0; +UInt32 tpccEvtCntr = 0; +UInt32 rcvStartFlag = 0; +UInt32 pauseIntFlag = 0; +UInt32 afterIntrSoldout = 0, afterIntrPause = 0; +UInt32 pendPauseCntr = 0; + +/** + * PROFILE LOG related variables + */ +#if TEST_PROFILE_LOG +#include "tcp3d_profile.h" +volatile PROFILE_TAG profileTag[PROF_TAG_LEN]; +volatile UInt32 profileTagInd = 0; +#else // TEST_PROFILE_LOG +/* Dummy macros */ +#define PROF_LOG_COMPLETE() {} +#define PROF_LOG_INIT() {} +#define LOG_TIME(TASK, TAG, TIME) {} +#define LOG_TIME_ISR(TASK, TAG, TIME) {} +#endif // TEST_PROFILE_LOG + +#if DEBUG_VARS +#include +#include + +/* To track the RCV task posting */ +volatile Int semCnt; + +/* Register pointers */ +CSL_TpccRegs *tpcc2Regs = (CSL_TpccRegs *) CSL_EDMA2CC_REGS; +CSL_CPINTC_RegsOvly cpintc0Regs = (CSL_CPINTC_RegsOvly) CSL_CP_INTC_0_REGS; +CSL_IntcRegsOvly gemIntcRegs = (CSL_IntcRegsOvly)CSL_CGEM0_5_REG_BASE_ADDRESS_REGS; +#endif + +/********************************************************************** + *********************** Test Local Functions ************************* + **********************************************************************/ +/** + * Task Functions + */ +Void testerTaskFunc(Void); +Void tskHeartBeat(Void); +Void sndBlockTaskFunc(Void); +Void rcvBlockTaskFunc(Void); + +/** + * (De)Init Functions + */ +Void allInit(Void); +Void allDeInit(Void); +Void getMemoryStats(Void); + +/** + * EDMA Channel ISR functions + */ +Void revt0ChCallback(Void); +Void revt1ChCallback(Void); + +/** + * Cache and other IP functions + */ +static Int32 enable_tcp3d (void); +void tcp3dBeginMemAccess (void *ptr, uint32_t size); +void tcp3dEndMemAccess (void *ptr, uint32_t size); + +#if USE_LOCAL_CPINTC_DISPATCH +extern Void CpIntc_dispatchLoc(UInt hostInt); +#endif + +Void soldOutAction(Void) +{ + /* clear flag */ + pauseIntFlag = 0; + +#if SOLDOUT_USE_L2P_INTERRUPT + /** + * 1) enable L2P channel interrupt to get notified to try enqueue again + * 2) also enable REVT channel interrupt for PAUSE detection + */ + /* Set interrupt flag on PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_SET_REVT_INT; + drvCtrl.intrFlag = TEST_INTR_ENABLE; // enable + Tcp3d_control(inst, &drvCtrl); + + /* Call TCP3D driver control to set interrupt on L2P channel */ + drvCtrl.cmd = TCP3D_DRV_SET_L2P_INT; + drvCtrl.intrFlag = TEST_INTR_ENABLE; // enable + Tcp3d_control(inst, &drvCtrl); +#else + /* keep trying until successful */ + Semaphore_post(semSendBlock); +#endif +} + +Void soldOutActionClear (Void) +{ +#if SOLDOUT_USE_L2P_INTERRUPT + if ( pauseIntFlag ) + { + afterIntrSoldout++; + + /** + * 1) diable L2P channel interrupt to get notified to try enqueue again + * 2) also disable REVT channel interrupt for PAUSE detection + */ + /* Call TCP3D driver control to set interrupt on L2P channel */ + drvCtrl.cmd = TCP3D_DRV_SET_L2P_INT; + drvCtrl.intrFlag = TEST_INTR_DISABLE; // disable + Tcp3d_control(inst, &drvCtrl); + + /* Set interrupt flag on PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_SET_REVT_INT; + drvCtrl.intrFlag = TEST_INTR_DISABLE; // disable + Tcp3d_control(inst, &drvCtrl); + } +#else + /* nothing to be done */ +#endif +} + +/******************************************************************************* + TESTING METHOD 1: Copy test vector folder to workspace +-------------------------------------------------------------------------------- +1. In this method, ensure that the entire “test\gen_test_vectors” folder is + placed two levels higher than the unit test project .out file location. + For example, if the unit test project out file is located under + “C:\MyPDKWorkspace\tcp3dTestProject\Debug” folder, then please copy + the folder “test\gen_test_vectors” from the PDK package to “C:\MyPDKWorkspace”. +2. Next, execute the batch script “gen_test_vectors\genTestVect.bat” from the + copied location to generate all the necessary test vector files. +3. Ensure that the compile flag USE_PDK_INSTALL_BASE is undefined in + the project “tcp3dTestProject” before building. +4. Build the project. +5. Launch the debug session to load and run the out file. + + TESTING METHOD 2: Use the test vector folder from the PDK installation +-------------------------------------------------------------------------------- +1. In this method, ensure that the compile flag USE_PDK_INSTALL_BASE is + defined in the project “tcp3dTestProject”. +2. Also, ensure the variable “testvectFolderBase” defined in the tcp3d_main.c + file is set to “\packages\ti\drv\tcp3d\test\gen_test_vectors” + when the USE_PDK_INSTALL_BASE flag is defined. +3. Next, execute the batch script “gen_test_vectors\genTestVect.bat” from the + PDK installation location to generate all the necessary test vector files. +4. Build the project. +5. Launch the debug session to load and run the out file. + +By default, test project is configured to test using "METHOD 2" +******************************************************************************/ +/* + * main() + */ +Void main(Void) +{ + Task_Params taskParams; + + /* Initialize the heap in shared memory. Using IPC module to do that */ + Ipc_start(); + + /* Power on TCP3D peripheral before using it */ + if (enable_tcp3d () < 0) + { + System_printf ("Error: TCP3D PSC Initialization Failed\n"); + return; + } + + /* Enable time stamp counter */ + CSL_tscEnable(); + + /* Enable L1D cache. Disable L2 caching for our tests. */ + CACHE_setL1DSize (CACHE_L1_MAXIM3); /* CACHE_L1_0KCACHE */ + CACHE_setL2Size (CACHE_0KCACHE); + + /* Initialize the default Task parameters */ + Task_Params_init(&taskParams); + + /* Crete the tester Task using default Task parameters */ + Task_create((Task_FuncPtr)testerTaskFunc, &taskParams, NULL); + + BIOS_start(); +} + +/******************************************************************************* + ******************************************************************************/ +Void testerTaskFunc(Void) +{ + Int i; + Task_Params taskParams; + Semaphore_Params semParams; + + /* Set the one-time global test variables */ + testMaxCodeBlocks = 8; /* max possible used in init */ + dspCoreID = CSL_chipReadDNUM(); + + /******** Select the TCP3D Instance Number **********/ +#if 0 + if ( dspCoreID == 0 ) // Core 0 + instNum = CSL_TCP3D_A; + else + instNum = CSL_TCP3D_B; +#else + instNum = getTcp3dInstNum(dspCoreID); +#endif + /******** Clear TCP3D log file **********/ + PROF_LOG_INIT(instNum); + + /* Initialize the default Task parameters */ + Task_Params_init(&taskParams); + + /* Initialize the default Semaphore parameters */ + Semaphore_Params_init(&semParams); + + /* Crete the Binary Semaphore */ + semParams.mode = Semaphore_Mode_BINARY; + semRcvDone = Semaphore_create(0, &semParams, NULL); + + /* Get the Heap handles - used when ever memory allocations are needed */ + //dataHeap = HeapMem_Handle_upCast(tcp3dDataHeap); + dataHeap = (IHeap_Handle) SharedRegion_getHeap(0); + drvHeap = HeapMem_Handle_upCast(tcp3dDrvHeap); + + while( testCntr < numTests ) + { + LOG_TIME(0, PROF_START, TSCL); + LOG_TIME(0, PROF_STOP, TSCL); + + /** + * Create the Binary semaphores each time using the parameters set + * outside the tester while loop. + * + * It was observed that at times the receive semaphore count was + * non-zero after the first run and receive task was getting triggered + * before posting from the ISR callback. So, the semaphores are created + * for each test to work-around with the problem. + */ + semSendBlock = Semaphore_create(0, &semParams, NULL); + semSendWait = Semaphore_create(0, &semParams, NULL); + semRcvStart = Semaphore_create(0, &semParams, NULL); +#if DEBUG_VARS + semCnt = Semaphore_getCount(semRcvStart); +#endif + + /** + * Create the send and receive tasks for each test using the default + * tak parameters. + * + * NOTE: No need to do the Task_delete() as these tasks have exits. + */ + Task_create((Task_FuncPtr)sndBlockTaskFunc, &taskParams, NULL); + Task_create((Task_FuncPtr)rcvBlockTaskFunc, &taskParams, NULL); + + System_printf("\n******************************************************************\n"); + System_printf("\n----- TEST #%d STARTED ------\n", testCntr); + + /** + * Prepare data for Code Blocks processing (reading test vector files). + * Allocates Memory as needed from the tcp3dDataHeap + */ + if ( firstTime ) + { + System_printf("\nReading test vector files started (including memory allocation)...\n"); + strcpy(folderName, testvectFolderBase); + strcat(folderName, testFolder[testCntr]); + getTestSetCB(dataHeap, &codeBlockSet, folderName); + System_printf("Reading test vector files complete\n"); +#if DEBUG_PRINT + System_printf("\tPrepared %d code blocks in %s mode\n", codeBlockSet.maxNumCB, strMode[codeBlockSet.mode]); +#endif + firstTime = 0; + } + else + { + System_printf("\nUsing the test vectors read before\n"); + } + + System_printf("\n----- TEST INITIALIZATION STARTED -----\n\n"); + allInit(); + getMemoryStats(); /* Heap Stats */ + System_printf("\n----- TEST INITIALIZATION COMPLETE -----\n\n"); + +#if TEST_PREPARE_ONLY_BETASTATE + for (i = 0; i < codeBlockSet.maxNumCB ;i++) + { + /* Prepare fixed IC registers using the inCfgParams of first block*/ + Tcp3d_prepFixedConfigRegs(codeBlockSet.cbData[i]->inCfgParams, codeBlockSet.cbData[i]->inCfg); + + /* Prepare block size dependent params */ + prepareBlockSizeDepICParams(codeBlockSet.cbData[i]); + } +#elif TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT + /* Prepare fixed IC registers using the inCfgParams of first block*/ + Tcp3d_prepFixedConfigRegs(codeBlockSet.cbData[0]->inCfgParams, tempICRegs); +#endif + + /* Start the Send task first */ + Semaphore_post(semSendBlock); + + /* Wait for the Receive task to complete */ + Semaphore_pend(semRcvDone, BIOS_WAIT_FOREVER); + + /** + * Test Profile Calculations + * + * (Total Bits) + * Throughput (Mbps) = ----------------------------- + * (Total Time)*(10^-9)*(10^6) + * + */ + TotalBitsDecoded = 0; + for (i = 0; i < codeBlockSet.maxNumCB; ++i) + { + TotalBitsDecoded += codeBlockSet.cbData[i]->blockSize; + } + + test_cycles = (total_clock_end - total_clock_start); + ThroughPut = TotalBitsDecoded*1.0; + ThroughPut = (ThroughPut/test_cycles)*1000; + + /******** Free code blocks ********/ + if ( keepTestVectMem ) + { + System_printf("\nNo freeing - Using the test vectors read before\n"); + } + else + { + System_printf("\nTest vectors memory freeing started...\n"); + freeTestSetCB(dataHeap, &codeBlockSet); + System_printf("Test vectors memory freeing complete\n"); +#if DEBUG_PRINT + System_printf("\tFreed memory allocated for %d code blocks in %s mode\n", codeBlockSet.maxNumCB, strMode[codeBlockSet.mode]); +#endif + firstTime = 1; + } + + System_printf("\n----- TEST DE-INITIALIZATION STARTED -----\n\n"); + allDeInit(); + getMemoryStats(); /* Heap Stats */ + System_printf("\n----- TEST DE-INITIALIZATION COMPLETE -----\n"); + + if ( totErrCnt > 0 ) + { + System_printf("\n----- TEST #%d FAILED -----\n", testCntr); + testErrCntr++; + } + else + { + System_printf("\n----- TEST #%d PASSED -----\n", testCntr); + } + System_printf("\n+++++++++++++++++++++++ TEST #%d SUMMARY +++++++++++++++++++++++++\n", testCntr); + System_printf("TCP3D Peripheral Configuration\n"); + System_printf(" Instance : %s\n", strInst[instNum]); + System_printf(" Mode Tested : %s\n", strMode[codeBlockSet.mode]); + System_printf(" Double Buffer Mode : %s\n", strDBuf[codeBlockSet.doubleBuffer]); + System_printf("Max code blocks (Input Capacity) : %d\n", testMaxCodeBlocks); + System_printf("Code blocks sent for decoding : %d\n", codeBlockSet.maxNumCB); + System_printf("Call back counters : %d - interrupts\n", pauseIntr); + System_printf(" (%d-SOLDOUT, %d-PAUSE, %d-PENDPAUSE)\n", afterIntrSoldout, afterIntrPause, pendPauseCntr); + System_printf("Total Notificaiton Interrupts : %d\n", tcp3dEventCntr); + System_printf("Throughput Calculations\n"); + System_printf(" Total Bits Decoded : %d\n", TotalBitsDecoded); + System_printf(" Time Taken (in cycles) : %d\n", test_cycles); + System_printf(" Effective Throughput : %f Mbps\n", ThroughPut); + System_printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); + + System_printf("\n******************************************************************\n"); + + /* Increment the test counter */ + testCntr++; + + /** + * Delete the semaphores each time, so that there is no left over count. + * See the explanation at the beginning of this loop where the create + * semaphore calls are present. + */ +#if DEBUG_VARS + semCnt = Semaphore_getCount(semRcvStart); +#endif + Semaphore_delete(&semSendWait); + Semaphore_delete(&semSendBlock); + Semaphore_delete(&semRcvStart); + } + + /* All test status print */ + if(testErrCntr) + { + System_printf("!!! SOME TESTS FAILED !!!\n"); + } + else + { + System_printf("!!! ALL TESTS PASSED !!!\n"); + } + + /* Save profile data to file */ + PROF_LOG_COMPLETE(instNum); + + /* Remove all creations - to make graceful system exit */ + Semaphore_delete(&semRcvDone); + + System_exit(0); +} + +/******************************************************************************* + ******************************************************************************/ +Void sndBlockTaskFunc(Void) +{ + UInt8 notifyFlag; + cbDataDesc *cbPtr; + static UInt32 cookie = 0; + + sendBlockCnt = 0; + +#if DEBUG_VARS + semCnt = Semaphore_getCount(semSendBlock); +#endif + + total_clock_start = TSCL; + LOG_TIME(PROF_SEND_TASK, PROF_START, TSCL); + + while(1) + { + /* Pending on Semaphore to run the loop */ + Semaphore_pend(semSendBlock, BIOS_WAIT_FOREVER); + + /* set TCP3D instance to use */ + inst = tcp3dDrvInst[instNum]; + + /* Get pointer to the code block data structure */ + cbPtr = codeBlockSet.cbData[sendBlockCnt]; + + /* Interrupt flag, used in Tcp3d_enqueueCodeBlock function */ + notifyFlag = 0; + if ( sendBlockCnt >= (codeBlockSet.maxNumCB-2) ) + { + notifyFlag = 1; /* Set for the last CB in each path (PING & PONG) */ + } + + /** + * Prepare input configuration (IC) registers. + */ + if ( TCP3D_DRV_INPUT_LIST_FULL == tcp3dResultSend ) + { + /* IC prepare not required. Just clear soldout actions. */ + soldOutActionClear(); + } + else + { + LOG_TIME(PROF_PREPROC, PROF_START, TSCL); + + /* Prepare Input Config Registers */ +#if TEST_PREPARE_ONLY_BETASTATE + /* Prepare only beta state registers */ + prepareBetaStateICParams(cbPtr, cbPtr->mode); +#elif TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT + /* Prepare only registers depend on code block configuration + * (tempICRegs has the fixed registers prepare outside send loop) */ + prepareIC(cbPtr, tempICRegs, 1); +#else + /* Prepare all registers */ + prepareIC(cbPtr, NULL, NULL); +#endif + + LOG_TIME(PROF_PREPROC, PROF_STOP, TSCL); + } + + checkBetaValues (cbPtr->inCfg); + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + tcp3dEndMemAccess(cbPtr->inCfg, cbPtr->sizeCFG); + tcp3dEndMemAccess(cbPtr->inLLR, cbPtr->sizeLLR); + + tcp3dBeginMemAccess(cbPtr->outHD, cbPtr->sizeHD); + if (cbPtr->sdFlag) + tcp3dBeginMemAccess(cbPtr->outSD, cbPtr->sizeSD); + if (cbPtr->stsFlag) + tcp3dBeginMemAccess(cbPtr->outSts, cbPtr->sizeSTS); + + /* Restore interrupts */ + Hwi_restore(cookie); + + /** + * WORKAROUND CODE: + * This code works in line with the code in the second while loop + * in the send task where check for completion is done. + * Here we are setting the last byte in the outHD with some value when + * the refHD has 0x00. This avoids any false completion of send task. + */ + if ( sendBlockCnt >= (codeBlockSet.maxNumCB-2) ) + { + /* Fill the last byte in outHD when refHD last byte is ZERO */ + uint8_t *bytePtr1, *bytePtr2; + uint32_t byteSize; + + bytePtr1 = (UInt8 *) cbPtr->refHD; + bytePtr2 = (UInt8 *) cbPtr->outHD; + byteSize = (cbPtr->blockSize>>3); + + if ( bytePtr1[byteSize-1] == 0 ) + { + bytePtr2[byteSize-1] = 0xde; + } + } + + LOG_TIME(PROF_ENQUE_FUNC, PROF_START, TSCL); + + /* Enqueue the Code block */ + tcp3dResultSend = Tcp3d_enqueueCodeBlock ( inst, + cbPtr->blockSize, + (UInt32 *)L2GLBMAP(dspCoreID, cbPtr->inCfg), + (Int8 *)L2GLBMAP(dspCoreID, cbPtr->inLLR), + cbPtr->llrOffset, + (UInt32 *)L2GLBMAP(dspCoreID, cbPtr->outHD), + (Int8 *)L2GLBMAP(dspCoreID, cbPtr->outSD), + cbPtr->sdOffset, + (UInt32 *)L2GLBMAP(dspCoreID, cbPtr->outSts), + notifyFlag); // 1 - GEN EVENT, 0 - NO EVENT + + LOG_TIME(PROF_ENQUE_FUNC, PROF_STOP, TSCL); + + /* Check for soldout case */ + if ( TCP3D_DRV_INPUT_LIST_FULL != tcp3dResultSend ) + { + /* increment the block count */ + sendBlockCnt++; + + /* goto next block */ + Semaphore_post(semSendBlock); + } + else + { + /* increment soldout count */ + soldoutCntr++; + + soldOutAction(); /* take action */ + } + + /* Start the driver after START_CMD_PERIOD blocks */ + if ( sendBlockCnt == START_CMD_PERIOD ) + { + LOG_TIME(PROF_START_FUNC, PROF_START, TSCL); + if ( TCP3D_DRV_NO_ERR != Tcp3d_start(inst, TCP3D_DRV_START_AUTO) ) + { + System_printf("Tcp3d_start function returned error (AUTO)\n"); + System_exit(0); + } + LOG_TIME(PROF_START_FUNC, PROF_STOP, TSCL); + } + + /* Check for end of task and exit */ + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + { + /* set flags first */ + pauseIntFlag = 0; + l2pIntr = pauseIntr; + pendPauseCntr = 0; + +#if SOLDOUT_USE_L2P_INTERRUPT + if ( soldoutCntr ) + { + /* Call TCP3D driver control to set interrupt on L2P channel */ + drvCtrl.cmd = TCP3D_DRV_SET_L2P_INT; + drvCtrl.intrFlag = TEST_INTR_DISABLE; // disable + Tcp3d_control(inst, &drvCtrl); + } +#endif + + /* Set interrupt flag PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_CLR_REVT_INT; + Tcp3d_control(inst, &drvCtrl); + + /* Check to see if restart needed before exit */ + LOG_TIME(PROF_START_FUNC, PROF_START, TSCL); + if ( TCP3D_DRV_NO_ERR != Tcp3d_start(inst, TCP3D_DRV_START_AUTO) ) + { + System_printf("Tcp3d_start function returned error (AUTO)\n"); + System_exit(0); + } + LOG_TIME(PROF_START_FUNC, PROF_STOP, TSCL); + + /* Set interrupt flag PAUSE channel */ + drvCtrl.cmd = TCP3D_DRV_SET_REVT_INT; + drvCtrl.intrFlag = TEST_INTR_ENABLE; // enable + Tcp3d_control(inst, &drvCtrl); + + /* out of enqueue loop */ + break; + } + } /* end of - while(1) */ + +#if DEBUG_VARS + semCnt = Semaphore_getCount(semSendWait); +#endif + + /** + * Check for pending Pauses and waiting for the last block to be decoded + */ + while ( 1 ) + { + /* Pending on Semaphore to run the loop */ + Semaphore_pend(semSendWait, BIOS_WAIT_FOREVER); + + /* Received both the completion events, so exit send task */ + if ( tcp3dEventCntr >= 2 ) + { + break; + } else if ( tcp3dEventCntr == 1 ) + { + /* one code block test case */ + if ( codeBlockSet.maxNumCB == 1 ) + { + break; + } + else if ( codeBlockSet.mode == TEST_MODE_SPLIT ) + { /* missing one notificatin event - possible in split mode */ + /** + * WORKAROUND CODE: + * This is possibility in case of SPLIT mode, that one event is + * lost when both ping and pong channels try to generate system + * events at close proximity. + * In this test bench we have enabled notification events for + * the last two blocks, so checking the outHD & refHD last bytes + * to confirm the decoding of these blocks are completed. + */ + + /* cbPtr for last two code blocks */ + cbDataDesc *cbPtr1 = codeBlockSet.cbData[codeBlockSet.maxNumCB-2]; + cbDataDesc *cbPtr2 = codeBlockSet.cbData[codeBlockSet.maxNumCB-1]; + uint8_t *bytePtr11, *bytePtr12, *bytePtr21, *bytePtr22; + uint32_t size1, size2; + + bytePtr11 = (UInt8 *) cbPtr1->refHD; + bytePtr12 = (UInt8 *) cbPtr1->outHD; + bytePtr21 = (UInt8 *) cbPtr2->refHD; + bytePtr22 = (UInt8 *) cbPtr2->outHD; + size1 = (cbPtr1->blockSize>>3); /* in bytes */ + size2 = (cbPtr2->blockSize>>3); /* in bytes */ + + /* check if last HD byte of last two blocks are completed */ + if ((bytePtr11[size1-1] == bytePtr12[size1-1]) && + (bytePtr21[size2-1] == bytePtr22[size2-1]) ) + { + System_printf("Notification event missed (Race Condition)\n"); + System_printf("Since the last two block decoding completed, completing send task\n"); + System_printf("Block : %d\n", codeBlockSet.maxNumCB-2); + System_printf("\trefHD[%d] = 0x%x\t outHD[%d] = 0x%x\n", size1-1, bytePtr11[size1-1], size1-1, bytePtr12[size1-1]); + System_printf("Block : %d\n", codeBlockSet.maxNumCB-1); + System_printf("\trefHD[%d] = 0x%x\t outHD[%d] = 0x%x\n", size2-1, bytePtr21[size2-1], size2-1, bytePtr22[size2-1]); + break; + } + } + } + + LOG_TIME(PROF_START_FUNC, PROF_START, TSCL); + if ( TCP3D_DRV_NO_ERR != Tcp3d_start(inst, TCP3D_DRV_START_AUTO) ) + { + System_printf("Tcp3d_start function returned error\n"); + System_exit(0); + } + LOG_TIME(PROF_START_FUNC, PROF_STOP, TSCL); + + /* keep trying until finding two end events */ + Semaphore_post(semSendWait); + + pendPauseCntr++; + } + LOG_TIME(PROF_SEND_TASK, PROF_STOP, TSCL); + + /* Last code block decoded - Start the receive task */ + total_clock_end = TSCL; + LOG_TIME_ISR(PROF_POST_RECV_PING, PROF_INST, TSCL); + Semaphore_post(semRcvStart); +} + +/******************************************************************************* + ******************************************************************************/ +Void rcvBlockTaskFunc(Void) +{ + Int32 errCnt; + + cbDataDesc *cbPtr; + Int idx, loopCnt; + Int fail = 0; + UInt8 *ptr1, *ptr2; + + rcvBlockCnt = 0; + totErrCnt = 0; + + while(1) + { + Semaphore_pend(semRcvStart, BIOS_WAIT_FOREVER); + + /* prints for send task are done here */ + if ( tcp3dResultSend == TCP3D_DRV_NO_ERR ) + { +#if DEBUG_PRINT + for ( loopCnt = 0; loopCnt < sendBlockCnt; loopCnt++ ) + { + cbPtr = codeBlockSet.cbData[loopCnt]; + System_printf("Send Task: Enqueued Block %d (Size: %d, SW0: %d)\n", + loopCnt, cbPtr->blockSize, + cbPtr->sw0LengthUsed); + } +#endif + System_printf("Send Task: Enqueued %d Blocks\n\n", sendBlockCnt); + } + else + { + System_printf("Send Task: Enqueued Blocks failed (tcp3dResultSend : %d)\n\n", tcp3dResultSend); + System_exit(0); + } + + MY_LOG_PRINT0(Rcv Task: SEM RECEIVED); + + LOG_TIME(PROF_RECV_TASK, PROF_START, TSCL); + + while( rcvBlockCnt < codeBlockSet.maxNumCB ) + { + /* Get the pointer to the Code Block Set */ + cbPtr = codeBlockSet.cbData[rcvBlockCnt]; + + /* Step 2: Verify All the outputs */ + fail = 0; + /* Step 2.1: Hard Decisions Verification */ + ptr1 = (UInt8 *) cbPtr->refHD; + ptr2 = (UInt8 *) cbPtr->outHD; + + /* Invalidate out HD */ + CACHE_invL1d (cbPtr->outHD, cbPtr->blockSize>>3, CACHE_WAIT); + + errCnt = 0; + for (idx = 0; idx < (cbPtr->blockSize>>3); ++idx) + { + if ( ptr1[idx] != ptr2[idx] ) + { + errCnt++; + System_printf("\tBlock Count %d, HD mismatch byte %d\n", rcvBlockCnt, idx); + } + } + + if (errCnt) + { + MY_LOG_PRINT2(Rcv task: HD FAILED, rcvBlockCnt, ERRORS:, errCnt); + fail++; + } + else + { + MY_LOG_PRINT1(Rcv task: HD PASSED, rcvBlockCnt); + } + + /* Step 2.2: Soft Decisions Verification */ + if (cbPtr->sdFlag) + { + if ( codeBlockSet.mode == TEST_MODE_SPLIT ) /* SPLIT MODE */ + loopCnt = cbPtr->blockSize; + else + loopCnt = (3*cbPtr->blockSize); + + /* Invalidate out SD */ + CACHE_invL1d (cbPtr->outSD, loopCnt, CACHE_WAIT); + + /* NOTE: Assumed that the Soft Decisions are in a single array */ + errCnt = 0; + for (idx = 0; idx < loopCnt; ++idx) + { + if ( cbPtr->refSD[idx] != cbPtr->outSD[idx] ) + { + errCnt += 1; + System_printf("\tBlock Count %d, SD mismatch byte %d\n", rcvBlockCnt, idx); + } + } + + if (errCnt) + { + MY_LOG_PRINT2(Rcv task: SD FAILED, rcvBlockCnt, ERRORS:, errCnt); + fail++; + } + else + { + MY_LOG_PRINT1(Rcv task: SD PASSED, rcvBlockCnt); + } + } /* if (cbPtr->sdFlag) */ + + /* Step 2.3: errCnt Registers Verification */ + if (cbPtr->stsFlag) + { + /* Invalidate out Sts */ + CACHE_invL1d (cbPtr->outSts, 12, CACHE_WAIT); + + errCnt = 0; + for (idx = 0; idx < 3; ++idx) + { + if ( cbPtr->refSts[idx] != cbPtr->outSts[idx] ) + { + errCnt += 1; + System_printf("\tBlock Count %d, STS mismatch word %d\n", rcvBlockCnt, idx); + } + } + if (errCnt) + { + MY_LOG_PRINT2(Rcv task: STS FAILED, rcvBlockCnt, ERRORS:, errCnt); + fail++; + } + else + { + MY_LOG_PRINT1(Rcv task: STS PASSED, rcvBlockCnt); + } + } /* if (cbPtr->stsFlag) */ + if (fail) + { + System_printf("Rcv task: Block %d FAILED\n", rcvBlockCnt); + totErrCnt++; + } +#if DEBUG_PRINT + else + { + System_printf("Rcv task: Block %d PASSED\n", rcvBlockCnt); + } +#endif + rcvBlockCnt++; + } + if(rcvBlockCnt >= codeBlockSet.maxNumCB) + { + break; + } + } + + LOG_TIME(PROF_RECV_TASK, PROF_STOP, TSCL); + + System_printf("Rcv Task: COMPLETE - verified %d blocks\n", rcvBlockCnt); + + /* Prepare for next test, set by "tester task" */ + Semaphore_post(semRcvDone); +} + +/******************************************************************************* + ******************************************************************************/ +Void revt0ChCallback(Void) +{ + /* Increment the ISR counter */ + pauseIntr++; + + pauseIntFlag = 1; + + LOG_TIME_ISR(PROF_RESTART_PING, PROF_INST, TSCL); + + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + Semaphore_post(semSendWait); + else + Semaphore_post(semSendBlock); +} + +/******************************************************************************* + ******************************************************************************/ +Void revt1ChCallback(Void) +{ + /* Increment the ISR counter */ + pauseIntr++; + + pauseIntFlag = 2; + + LOG_TIME_ISR(PROF_RESTART_PONG, PROF_INST, TSCL); + + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + Semaphore_post(semSendWait); + else + Semaphore_post(semSendBlock); +} + +/******************************************************************************* + ******************************************************************************/ +Void tskHeartBeat(Void) +{ + static unsigned int counter = 0u; + + while (counter < 0x1000000u) + { + Task_sleep (1000u); + System_printf("\n!!! EDMA3 LLD HrtBt %x\n", counter); + counter++; + } +} + +/******************************************************************************* + ******************************************************************************/ +Void getMemoryStats(Void) +{ + Memory_Stats memStats; + + Memory_getStats(drvHeap, &memStats); + System_printf("\nHeap Usage/Staus\n"); + System_printf(" tcp3dDrvHeap : %d of %d free\n", memStats.totalFreeSize, memStats.totalSize); + + Memory_getStats(dataHeap, &memStats); + System_printf(" tcp3dDataHeap : %d of %d free\n", memStats.totalFreeSize, memStats.totalSize); +} + +/******************************************************************************* + ******************************************************************************/ +Void tcp3dEventISR(UInt32 testEvtNum) +{ + tcp3dEventCntr++; + tpccEvtCntr++; + + LOG_TIME_ISR(PROF_RESTART_PING, PROF_INST, TSCL); + + if ( sendBlockCnt >= codeBlockSet.maxNumCB ) + Semaphore_post(semSendWait); + else + Semaphore_post(semSendBlock); +} + +/******************************************************************************* + ******************************************************************************/ +Void registerTcp3dEvent(Void) +{ + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ + static UInt32 mapDone = 0; + UInt32 testEvt = getNotifyEventNum(instNum); + UInt32 hostIntr = getHostIntrNum(dspCoreID); + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Completion ISR Registration */ + CpIntc_dispatchPlug(testEvt, tcp3dEventISR, hostIntr, TRUE); + if (!mapDone) + CpIntc_mapSysIntToHostInt(0, testEvt, hostIntr); + CpIntc_enableHostInt(0, hostIntr); + eventId = CpIntc_getEventId(hostIntr); + EventCombiner_dispatchPlug (eventId, +#if USE_LOCAL_CPINTC_DISPATCH + CpIntc_dispatchLoc, +#else + CpIntc_dispatch, +#endif + hostIntr, + TRUE); +#if DEBUG_PRINT + System_printf("\t\t testEvt : %d \n", testEvt); + System_printf("\t\t hostIntr : %d \n", hostIntr); + System_printf("\t\t eventId : %d \n", eventId); +#endif + + /* enable the 'global' switch */ + CpIntc_enableAllHostInts(0); + + mapDone = 1; + + /* Restore interrupts */ + Hwi_restore(cookie); +} + +/******************************************************************************* + ******************************************************************************/ +Void unregisterTcp3dEvent(Void) +{ + static UInt32 cookie = 0; + Int eventId = 0; /* GEM event id */ + UInt32 hostIntr = getHostIntrNum(dspCoreID); + + /* Disabling the global interrupts */ + cookie = Hwi_disable(); + + /* Driver Completion ISR */ + CpIntc_disableHostInt(0, hostIntr); + eventId = CpIntc_getEventId(hostIntr); + EventCombiner_disableEvent(eventId); + + /* Restore interrupts */ + Hwi_restore(cookie); +} + +/******************************************************************************* + ******************************************************************************/ +Void allInit(Void) +{ + Tcp3d_Result tcp3dResult = TCP3D_DRV_NO_ERR; + EDMA3_DRV_Result edmaResult = EDMA3_DRV_SOK; + +#if TEST_PROFILE_LOG +#if 0 + CSL_Tcp3d_cfgRegs *tcp3dCfgRegs = (CSL_Tcp3d_cfgRegs *) ((instNum == CSL_TCP3D_A)? CSL_TCP3D_A_CFG_REGS: CSL_TCP3D_B_CFG_REGS); +#else + CSL_Tcp3d_cfgRegs *tcp3dCfgRegs = (CSL_Tcp3d_cfgRegs *) getTcp3dCfgRegsBase(instNum); +#endif +#endif + + /* Initialize EDMA3 first */ + hEdma = NULL; + tpccNum = 2; + tpccRegionUsed = 3; + hEdma = edma3init ( tpccNum, + &edmaResult, + dspCoreID, + tpccRegionUsed); + if (edmaResult != EDMA3_DRV_SOK) + { + System_printf("edma3init() FAILED, error code: %d\n", edmaResult); + } + else + { + System_printf("EDMA3 LLD Initialization complete (TPCC #%d, Region #%d)\n", tpccNum, tpccRegionUsed); + } + + /* Allocate all EDMA channels required for TCP3D Driver */ + System_printf("EDMA3 Channels opening started...\n"); + + /* Open channels for one instance */ + openEdmaChannels (hEdma, instNum, &edmaConfig[instNum]); + + /* Register call backs */ + EDMA3_DRV_registerTccCb(hEdma, edmaConfig[instNum].pingChRes[0].chNo, (EDMA3_RM_TccCallback)&revt0ChCallback, NULL); + EDMA3_DRV_registerTccCb(hEdma, edmaConfig[instNum].pongChRes[0].chNo, (EDMA3_RM_TccCallback)&revt1ChCallback, NULL); + +#if EDMA_LOCAL_COMP_ISR // flag defined in sample.h file + /* Fill call back details */ + edmaConfig[instNum].pingChRes[0].cbFunc = (EDMA3_RM_TccCallback)&revt0ChCallback; + edmaConfig[instNum].pingChRes[0].cbData = NULL; + edmaConfig[instNum].pongChRes[0].cbFunc = (EDMA3_RM_TccCallback)&revt1ChCallback; + edmaConfig[instNum].pongChRes[0].cbData = NULL; + + /** + * Update the information to use with local EDMA ISR + * (NOTE: This function must be called after the channels are opened) + */ + updateAllocatedTccsLoc(&edmaConfig[instNum]); +#endif + + System_printf("EDMA3 Channels opening complete\n"); + + System_printf("TCP3 Decoder Driver Initialization sequence started...\n"); + +#if TEST_PROFILE_LOG + /***** Soft Reset the TCP3D for synchronization ******/ + LOG_TIME(PROF_SOFT_RESET, PROF_INST, TSCL); + tcp3dCfgRegs->TCP3_SOFT_RESET = 1; + tcp3dCfgRegs->TCP3_SOFT_RESET = 0; +#endif + + LOG_TIME(PROF_INIT_FUNC, PROF_START, TSCL); + + /* Initialize the TCP3D first */ + tcp3dDrvInst[instNum] = tcp3dSampleInit (drvHeap, + instNum, + testMaxCodeBlocks, + codeBlockSet.mode, + codeBlockSet.doubleBuffer, + codeBlockSet.lteCrcSel, + dspCoreID, + hEdma, + tpccRegionUsed, + &edmaConfig[instNum], + &tcp3dResult); + + LOG_TIME(PROF_INIT_FUNC, PROF_STOP, TSCL); + + System_printf("TCP3 Decoder Driver Initialization sequence complete\n"); + + /* Register the Notification Event for TCP3D */ + registerTcp3dEvent(); + + /* Set the global flags to default values */ + pingComplete = 0; + pongComplete = 0; + pauseIntr = 0; + l2pIntr = 0; + tcp3dEventCntr = 0; + pauseIntFlag = 0; + rcvStartFlag = 0; + soldoutCntr = 0; + afterIntrSoldout = 0; + afterIntrPause = 0; + pendPauseCntr = 0; +} + +/******************************************************************************* + ******************************************************************************/ +Void allDeInit(Void) +{ + EDMA3_DRV_Result edmaResult = EDMA3_DRV_SOK; + + /* Un-register the Notification Event for TCP3D */ + unregisterTcp3dEvent(); + + /* Close all EDMA channels allocated for the test */ + System_printf("EDMA3 Channels freeing started...\n"); + + /* Register call backs */ + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pingChRes[0].chNo); + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pingChRes[1].chNo); + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pongChRes[0].chNo); + EDMA3_DRV_unregisterTccCb(hEdma, edmaConfig[instNum].pongChRes[1].chNo); + + /* Close channels */ + closeEdmaChannels(hEdma, instNum, &edmaConfig[instNum]); + + System_printf("EDMA3 Channels freeing complete\n"); + + /* Deinit for TCP3D driver */ + System_printf("TCP3 Decoder Driver De-Initialization sequence started...\n"); + + tcp3dSampleDeinit(drvHeap, instNum, tcp3dDrvInst[instNum]); + + System_printf("TCP3 Decoder Driver De-Initialization sequence complete\n"); + + /* De-init EDMA3 */ + edmaResult = edma3deinit(tpccNum, hEdma); + if (edmaResult != EDMA3_DRV_SOK) + { + System_printf("edma3deinit() FAILED, error code: %d\n", edmaResult); + } + else + { + System_printf("EDMA3 LLD De-Initialization complete\n"); + } +} + +/** + * @b Description + * @n + * This function enables the power/clock domains for TCP3D. + * + * @retval + * Not Applicable. + */ +static Int32 enable_tcp3d (void) +{ +#ifndef SIMULATOR_SUPPORT + /* TCP3D power domain is turned OFF by default. + * It needs to be turned on before doing any TCP3D device register access. + * This is not required for the simulator. */ + + /* Set TCP3D Power domain to ON */ + CSL_PSC_enablePowerDomain (CSL_PSC_PD_TCP3D); + + /* Enable the clocks too for TCP3D */ + CSL_PSC_setModuleNextState (CSL_PSC_LPSC_TCP3D, PSC_MODSTATE_ENABLE); + + /* Start the state transition */ + CSL_PSC_startStateTransition (CSL_PSC_PD_TCP3D); + + /* Wait until the state transition process is completed. */ + while (!CSL_PSC_isStateTransitionDone (CSL_PSC_PD_TCP3D)); + + /* Return TCP3D PSC status */ + if ((CSL_PSC_getPowerDomainState(CSL_PSC_PD_TCP3D) == PSC_PDSTATE_ON) && + (CSL_PSC_getModuleState (CSL_PSC_LPSC_TCP3D) == PSC_MODSTATE_ENABLE)) + { + /* TCP3D ON. Ready for use */ + return 0; + } + else + { + /* SRIO Power on failed. Return error */ + return -1; + } +#else + /* PSC is not supported on simulator. Return success always */ + return 0; +#endif +} + +/** + * @b Description + * @n + * The function is used to indicate that a block of memory is + * about to be accessed. If the memory block is cached then this + * indicates that the application would need to ensure that the + * cache is updated with the data from the actual memory. + * + * @param[in] ptr + * Address of memory block + * + * @param[in] size + * Size of memory block + * + * @retval + * Not Applicable + */ +void tcp3dBeginMemAccess (void *ptr, uint32_t size) +{ + /* Invalidate L1D cache and wait until operation is complete. + * Use this approach if L2 cache is not enabled */ + CACHE_invL1d (ptr, size, CACHE_FENCE_WAIT); + + /* Cleanup the prefectch buffer also. */ + CSL_XMC_invalidatePrefetchBuffer(); + + return; +} + +/** + * @b Description + * @n + * The function is used to indicate that the block of memory has + * finished being accessed. If the memory block is cached then the + * application would need to ensure that the contents of the cache + * are updated immediately to the actual memory. + * + * @param[in] ptr + * Address of memory block + * @param[in] size + * Size of memory block + * + * @retval + * Not Applicable + */ +void tcp3dEndMemAccess (void *ptr, uint32_t size) +{ + /* Writeback L1D cache and wait until operation is complete. + * Use this approach if L2 cache is not enabled */ + CACHE_wbL1d (ptr, size, CACHE_FENCE_WAIT); + + return; +} + +/* end of file */ diff --git a/test/src/tcp3d_main.h b/test/src/tcp3d_main.h new file mode 100644 index 0000000..32d7b09 --- /dev/null +++ b/test/src/tcp3d_main.h @@ -0,0 +1,234 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ +#ifndef _TCP3D_MAIN_H_ +#define _TCP3D_MAIN_H_ + +/* XDC includes */ +//#include +#include +#include +#include +#include + +/* Driver includes */ +#include +#include + +/* Utility includes */ +#include "tcp3d_codeBlkSeg.h" + +/********************************************************************** + ************************** Test Macros ******************************* + **********************************************************************/ +/** + * Address mapping is done based on the mapping shown below. + * Check on the address done to ensure it be in L2SRAM space. + * + * L2SRAM : org = 0x00800000, len = 0x100000 (local) + * GEM0_L2_MEM : org = 0x10800000, len = 0x100000 (global) + * GEM1_L2_MEM : org = 0x11800000, len = 0x100000 (global) + * GEM2_L2_MEM : org = 0x12800000, len = 0x100000 (global) + * GEM3_L2_MEM : org = 0x13800000, len = 0x100000 (global) + * + * MSMCSRAM : org = 0x0c000000, len = 0x200000 (global) + */ +#define L2GLBMAP(coreID, addr) \ + ( ( ((UInt32)(addr) >= 0x00800000) && ((UInt32)(addr) < 0x00900000) ) ? \ + ( (UInt32)(addr) | (UInt32)((0x10 | (coreID & 0x3)) << 24) ) : \ + (UInt32)(addr) ) + +/********************************************************************** + ************************** Test Compile Flags ************************ + **********************************************************************/ +/** + * Prepare all input config registers outside the Send loop (block size based, etc) + * except for beta states since they are data dependent. + */ +#define TEST_PREPARE_ONLY_BETASTATE 1 + +/** + * Set this flag to use the fixed input configuration parameters preparation + * optimization. This flag is useful only if TEST_PREPARE_ONLY_BETASTATE is + * not used. + */ +#define TEST_PREPARE_ONLY_CODEBLOCK_PARAM_DEPENDENT 0 + +/** + * Check the beta state values with the reference from the file generated + * with the test vectors. + */ +#define TEST_BETA_VALUE_CHECK 0 + +/********************************************************************** + ************************** Test Definitions ************************** + **********************************************************************/ +/* TCP3D modes */ +#define TEST_MODE_SINGLE CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_3GPP //0 (NOT SUPPORTED) +#define TEST_MODE_LTE CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_LTE //1 +#define TEST_MODE_WIMAX CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_WIMAX //2 +#define TEST_MODE_SPLIT CSL_TCP3D_CFG_TCP3_MODE_MODE_SEL_HSUPA //3 + +/* Test True/False flags */ +#define TEST_FALSE 0 +#define TEST_TRUE 1 + +/* Test Interrupt flags */ +#define TEST_INTR_ENABLE 1 +#define TEST_INTR_DISABLE 0 + +/********************************************************************** + ************************** Test Structures *************************** + **********************************************************************/ +/* + * Structure that holds the configuration parameters. Used for storing the + * configuration values read from the file blockXX_cfgreg.dat for a given + * code block. + */ +typedef struct cbConfig +{ + /* Control */ + Int32 mode_sel; //TCP3_MODE + Int32 lte_crc_init_sel; + + /* Input */ + Int32 NumInfoBits; //CFG0 + Int32 SW0_length; //CFG1 + Int32 maxst_en; //CFG2 + Int32 out_flag_en; + Int32 out_order_sel; + Int32 ext_scale_en; + Int32 soft_out_flag_en; + Int32 soft_out_fmt; + Int32 min_itr; + Int32 max_itr; + Int32 snr_val; + Int32 snr_rep; + Int32 stop_sel; + Int32 crc_iter_pass; + Int32 crc_sel; + Int32 maxst_thold; //CFG3 + Int32 maxst_value; + Int32 ext_scale_0; //CFG8 + Int32 ext_scale_1; + Int32 ext_scale_2; + Int32 ext_scale_3; + Int32 ext_scale_4; //CFG9 + Int32 ext_scale_5; + Int32 ext_scale_6; + Int32 ext_scale_7; + Int32 ext_scale_8; //CFG10 + Int32 ext_scale_9; + Int32 ext_scale_10; + Int32 ext_scale_11; + Int32 ext_scale_12; //CFG11 + Int32 ext_scale_13; + Int32 ext_scale_14; + Int32 ext_scale_15; +} cbConfig; + +/* + * Structure for one code block description. + */ +typedef struct cbDataDesc +{ + UInt32 mode; + UInt32 crcInitVal; + Int8 tailBits[12]; + Tcp3d_InCfgParams *inCfgParams; + UInt8 sw0LengthUsed; + + UInt32 blockSize; + UInt32 interFlag; + UInt32 sdFlag; + UInt32 stsFlag; + UInt32 llrOffset; + UInt32 sdOffset; + + UInt32 sizeCFG; + UInt32 sizeINTER; + UInt32 sizeLLR; + UInt32 sizeHD; + UInt32 sizeSD; + UInt32 sizeSTS; + + UInt32 *inCfg; + UInt16 *inInter; + Int8 *inLLR; /* three arrays with offset in llrOffset */ + UInt32 *outHD; + UInt32 *refHD; + Int8 *outSD; /* three arrays with offset in sdOffset */ + Int8 *refSD; /* three arrays with offset in sdOffset */ + UInt32 *outSts; + UInt32 *refSts; +} cbDataDesc; + +/* + * Structure for one test description. + */ +typedef struct cbTestDesc +{ + cbDataDesc **cbData; + Int32 maxNumCB; + Int32 mode; + Int32 doubleBuffer; + Int32 lteCrcSel; +} cbTestDesc; + +/********************************************************************** + ************************** Test Global Tables ************************ + **********************************************************************/ +/* interleaver tables (used in tcp3d_inputCongigPrep.c file) */ +extern Int16 TCP3_LteInterleaverTable[220][7]; +extern Int16 TCP3_WimaxInterleaverTable[17][4]; + +/********************************************************************** + *********************** Test Global Functions ************************ + **********************************************************************/ +/* interleaver table index calculation function */ +Int32 LTE_interleaver_index(Int32 K); +Int32 WIMAX_interleaver_index(Int32 K); + +/* input config prepare function definitions (see tcp3d_inputCongigPrep.c) */ +Void prepareBlockSizeDepICParams(cbDataDesc *cbPtr); +Void prepareBetaStateICParams(cbDataDesc *cbPtr, UInt8 mode); +Void prepareIC(cbDataDesc *cbPtr, UInt32 *tempIC, UInt8 copyFlag); +Void fillICParams(Tcp3d_InCfgParams *inCfgParams, cbConfig *cbCfg); +Void checkBetaValues (UInt32 inCfg[]); + +/* Test vector functions (see tcp3d_testvector.c) */ +Int getTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet, Char *testFolder); +Void freeTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet); + +#endif /* _TCP3D_MAIN_H_ */ diff --git a/test/src/tcp3d_multi_inst.h b/test/src/tcp3d_multi_inst.h new file mode 100644 index 0000000..9935208 --- /dev/null +++ b/test/src/tcp3d_multi_inst.h @@ -0,0 +1,135 @@ +/* + * + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +#ifndef _TCP3D_MULTI_INST_H_ +#define _TCP3D_MULTI_INST_H_ + +/** + * Test TCP3D Notification Events + */ +#define TCP3D_A_TEST_EVENT 7 +#define TCP3D_B_TEST_EVENT 23 + +/** + * This gives the channel numbers to which the TCP3 decoder REVTs are mapped. + * ((per spec intc_1.3.4.12.xlsx, TPCC2) + */ +#define TCP3D_A_REVT0_CH_NUMBER 34 +#define TCP3D_A_REVT1_CH_NUMBER 35 +#define TCP3D_B_REVT0_CH_NUMBER 36 +#define TCP3D_B_REVT1_CH_NUMBER 37 + +INLINE UInt32 getHostIntrNum(UInt32 dspCoreID) +{ + /* Host Interrupts for CPINTC0 (per spec intc_1.3.4.12.xls) */ + UInt32 hostIntr[] = {13u, 29u, 45u, 61u}; + + return hostIntr[dspCoreID]; +} + +INLINE UInt32 getNotifyEventNum(UInt8 instNum) +{ + UInt32 testEvt; + + if ( instNum == CSL_TCP3D_0 ) + testEvt = TCP3D_A_TEST_EVENT; // First instance + else + testEvt = TCP3D_B_TEST_EVENT; // Second instance + + return testEvt; +} + +INLINE UInt32 getRevt0ChannelNum(UInt8 instNum) +{ + UInt32 chNum; + + if ( instNum == CSL_TCP3D_0 ) + chNum = TCP3D_A_REVT0_CH_NUMBER; // First instance + else + chNum = TCP3D_B_REVT0_CH_NUMBER; // Second instance + + return chNum; +} + +INLINE UInt32 getRevt1ChannelNum(UInt8 instNum) +{ + UInt32 chNum; + + if ( instNum == CSL_TCP3D_0 ) + chNum = TCP3D_A_REVT1_CH_NUMBER; // First instance + else + chNum = TCP3D_B_REVT1_CH_NUMBER; // Second instance + + return chNum; +} + +INLINE UInt8 getTcp3dInstNum(UInt32 dspCoreID) +{ + UInt8 instNum; + + if ( dspCoreID == 0 ) + instNum = CSL_TCP3D_0; // First instance + else + instNum = CSL_TCP3D_1; // Second instance + + return instNum; +} + +INLINE UInt32 getTcp3dCfgRegsBase(UInt8 instNum) +{ + UInt32 regBase; + + if ( instNum == CSL_TCP3D_0 ) + regBase = CSL_TCP3D_0_CFG_REGS; // First instance + else + regBase = CSL_TCP3D_1_CFG_REGS; // Second instance + + return regBase; +} + +INLINE UInt32 getTcp3dDataRegsBase(UInt8 instNum) +{ + UInt32 regBase; + + if ( instNum == CSL_TCP3D_0 ) + regBase = CSL_TCP3D_0_DATA_REGS; // First instance + else + regBase = CSL_TCP3D_1_DATA_REGS; // Second instance + + return regBase; +} + +#endif /* _TCP3D_MULTI_INST_H_ */ + diff --git a/test/src/tcp3d_profile.h b/test/src/tcp3d_profile.h new file mode 100644 index 0000000..39b8914 --- /dev/null +++ b/test/src/tcp3d_profile.h @@ -0,0 +1,135 @@ +#ifndef _TCP3D_PROFILE_H_ +#define _TCP3D_PROFILE_H_ + +/** + * \file tcp3d_profile.h + * + * \brief TCP3D test profile header. + * + * Copyright (C) Texas Instruments Incorporated 2009 + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +/** + * Include Files + */ +#include +#include +#include + +/* + * Profile taps for plotting with Matlab + */ +#define PROF_START 0x00000100 +#define PROF_STOP 0x00000200 +#define PROF_INST 0x00000300 + +#define PROF_SOFT_RESET 0x00010000 +#define PROF_RESTART_PING 0x00020000 +#define PROF_RESTART_PONG 0x00030000 +#define PROF_SEND_TASK 0x00040000 +#define PROF_PREPROC 0x00050000 +#define PROF_ENQUE_FUNC 0x00060000 +#define PROF_START_FUNC 0x00070000 +#define PROF_PING_DECODE 0x00080000 +#define PROF_PONG_DECODE 0x00090000 +#define PROF_POST_RECV_PING 0x000A0000 +#define PROF_POST_RECV_PONG 0x000B0000 +#define PROF_RECV_TASK 0x000C0000 +#define PROF_INIT_FUNC 0x000D0000 + +#define PROF_TAG_LEN 4000 + +typedef struct PROFILE_TAG +{ + UInt32 tag; + UInt32 time; +} PROFILE_TAG; + +/** + * extern variables (see tcp3d_main.c) + */ +extern volatile PROFILE_TAG profileTag[PROF_TAG_LEN]; +extern volatile UInt32 profileTagInd; + +/** + * Profile Macro Functions + */ +#define PROF_LOG_COMPLETE(instNum) { \ + FILE *fid; \ + Int i; \ + if (instNum == CSL_TCP3D_0) \ + fid = fopen("c:\\profile_A.dat","w"); \ + else \ + fid = fopen("c:\\profile_B.dat","w"); \ + fprintf(fid, "0 0 0 0 %x\n", 2*profileTagInd); \ + for(i=0; i +#include + +#include "tcp3d_main.h" + +#define READ_BINARY_TEST_VECTORS 1 /* Read .bin test vector files */ + +UInt32 morePrints = 0; +extern Char *strMode[4]; +extern Char testvectFolderBase[]; + +/******************************************************************************* + ******************************************************************************/ +/** + * @brief Bit reverse in 32-bit word + */ +UInt32 bitr(UInt32 src) +{ + UInt32 a,c; + UInt32 i; + UInt32 sa; + + a = src; + c = 0; + for (i = 0,sa=31; i < 16; i++,sa-=2) { + c |= (a & (0x1 << i)) << sa; + } + for (i = 16,sa=1; i < 32; i++,sa+=2) { + c |= (a & (0x1 << i)) >> (sa); + } + return c; +} + +/******************************************************************************* + ******************************************************************************/ +/** + * @brief Swap bytes in 32-bit word + */ +UInt32 swapBytes(UInt32 src) +{ + UInt32 a,c; + + a = src; + c = (a & 0x000000ff) << 24; + c |= (a & 0x0000ff00) << 8; + c |= (a & 0x00ff0000) >> 8; + c |= (a & 0xff000000) >> 24; + return c; +} + +/******************************************************************************* + ******************************************************************************/ +Int getTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet, Char *testFolder) +{ + cbDataDesc *cbPtr; + cbConfig tempCbConfig; + Int i, cbCnt; + Int32 numBytes; + + Char fileName[300]; + FILE *fid; + Int cbCfgStrSize=(sizeof(cbConfig)>>2); + Int32 *tmp32 = (Int32 *) &tempCbConfig; + /* Note: Temporary pointer used for writing + into the tempCbConfig Structure memory */ + Int32 stmp[3]; +#if !READ_BINARY_TEST_VECTORS + Int8 *syspar; + UInt32 inSize; +#endif + UInt32 tmp; + + /* Get number of blocks */ + strcpy(fileName, testFolder); + strcat(fileName, "\\number_of_blocks.dat"); + if(!(fid = fopen(fileName,"r"))) + { + System_printf("\t!!! Error in Number of blocks file : %s !!!\n", fileName); + System_printf("\n***********************************************************\n"); + System_printf(" It means the test vectors are not available in the folder: \n\t %s \n\n", testFolder); + System_printf(" Do the following: \n"); + System_printf(" 1) Check the variable named \"testvectFolderBase\" in the corresponding main.c file. \n"); + System_printf(" a) It is set to \"%s\" \n", testvectFolderBase); + System_printf(" b) Make sure the \"testvectFolderBase\" variable is set to correct folder for testvectors. \n"); + System_printf(" 2) For test project, make sure to run the batch file before running tests: \n"); + System_printf(" %s \n", "\\tcp3d\\test\\gen_test_vectors\\genTestVect.bat"); + System_printf("***********************************************************\n"); + System_exit(0); + } + cbCnt = 0; + fscanf(fid, "%d", &cbTestSet->maxNumCB); + fclose(fid); + + /* Allocate memory for code blocks */ + numBytes = cbTestSet->maxNumCB * sizeof(cbDataDesc *); + cbTestSet->cbData = (cbDataDesc **) Memory_alloc(dataHeap, numBytes, 64, NULL); + + /* Load code blocks */ + for(cbCnt=0; cbCnt < cbTestSet->maxNumCB; cbCnt++) + { + /* Allocate memory for code block set and update the local pointer */ + cbTestSet->cbData[cbCnt] = (cbDataDesc *) Memory_alloc ( dataHeap, + sizeof(cbDataDesc), + 64, + NULL); + cbPtr = cbTestSet->cbData[cbCnt]; + if ( cbPtr == NULL ) + { + System_printf("\tMemory allocation failed for Code Block Set %d!\n", cbCnt); + } + + /* Open the block parameters file */ + sprintf(fileName, "%s\\block%d_cfgreg.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tConfig file open failed : %s\n", fileName); + System_exit(0); + } + /* Load block parameters */ + for(i=0;iblockSize = tempCbConfig.NumInfoBits; + cbPtr->mode = tempCbConfig.mode_sel; + cbPtr->crcInitVal = tempCbConfig.lte_crc_init_sel; + cbPtr->sw0LengthUsed = tempCbConfig.SW0_length; + + /* Set the code block set value with the first one block config */ + if (cbCnt == 0) + { + cbTestSet->mode = cbPtr->mode; + cbTestSet->lteCrcSel = cbPtr->crcInitVal; + } + + /* Check if the mode is different from the first one in the group */ + /* Force the mode value to be same as first one */ + if ( cbPtr->mode != cbTestSet->mode ) + { + if ( !((cbPtr->mode+cbTestSet->mode) % 3) ) + { + System_printf("\tBlock = %d, Mode changed from %s to %s\n", cbCnt, + strMode[cbPtr->mode], + strMode[cbTestSet->mode]); + cbPtr->mode = cbTestSet->mode; + } + else + { + System_exit(0); + } + } + + /* Check for LTE CRC Init Value Change */ + if ( ( cbPtr->mode == TEST_MODE_LTE ) && + ( cbPtr->crcInitVal != cbTestSet->lteCrcSel ) ) + { + System_printf("\tLTE CRC Initial Value is different\n"); + System_printf("\tSet Value is %d\n", cbTestSet->lteCrcSel); + System_exit(0); + } + + /* Allocate Memory for Input LLR data */ + if ( cbPtr->mode == TEST_MODE_SPLIT ) + { /* 3GPP - Split Mode */ + cbPtr->llrOffset = COMPUTE_KOUT(cbPtr->blockSize); + } + else + { + cbPtr->llrOffset = cbPtr->blockSize; + } + cbPtr->sizeLLR = 3 * cbPtr->llrOffset; /* three streams (sys, par0, par1) */ + cbPtr->inLLR = (Int8 *) Memory_alloc(dataHeap, cbPtr->sizeLLR, 64, NULL); + if(cbPtr->inLLR == NULL) + { + System_printf("\tMemory allocation failed !!! (LLR)\n"); + System_exit(0); + } + + /* Prepare Input LLR streams */ + /* This mode value is set with the value read from cfgreg file */ + if ( cbPtr->mode == TEST_MODE_SPLIT ) /* 3GPP - split mode */ + { +#if READ_BINARY_TEST_VECTORS + /* Fill syspar with data bits */ + sprintf(fileName, "%s\\block%d_llrs.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->inLLR, 1, cbPtr->llrOffset, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset], 1, cbPtr->llrOffset, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset<<1], 1, cbPtr->llrOffset, fid); + fclose(fid); + + /* Fill syspar with tail bits */ + sprintf(fileName, "%s\\block%d_tail_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tTail Bits file read failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < 6; i++) + { + fscanf(fid, "%d\t%d", &stmp[0], &stmp[1]); + cbPtr->tailBits[i] = (Int8) stmp[0]; + cbPtr->tailBits[6+i] = (Int8) stmp[1]; + } + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + /* set loop count for LLR file read */ + inSize = cbPtr->blockSize*3; + + /* Allocate memory for syspar temp Buffer for WCDMA case + syspar = (Int8 *) Memory_alloc(dataHeap, inSize+12, 0, NULL); + if(syspar == NULL) + { + System_printf("\tMemory allocation failed !!! (SysPar)\n"); + System_exit(0); + }*/ + + /* Fill syspar with data bits */ + sprintf(fileName, "%s\\block%d_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + for(i=0;iinLLR[i] = (Int8) stmp[0]; + cbPtr->inLLR[i+cbPtr->llrOffset] = (Int8) stmp[1]; + cbPtr->inLLR[i+cbPtr->llrOffset<<1] = (Int8) stmp[2]; + } + fclose(fid); + + /* Fill syspar with tail bits */ + sprintf(fileName, "%s\\block%d_tail_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tTail Bits file read failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < 6; i++) + { + fscanf(fid, "%d\t%d", &stmp[0], &stmp[1]); + //syspar[inSize+i] = (Int8) stmp[0]; + //syspar[inSize+6+i] = (Int8) stmp[1]; + cbPtr->tailBits[i] = (Int8) stmp[0]; + cbPtr->tailBits[6+i] = (Int8) stmp[1]; + } + fclose(fid); + + /* Prepare the sys, par1, par2 streams + TCP3D_WCDMA_dataPrep ( syspar, + cbPtr->blockSize, + NULL, // No sign change + cbPtr->inLLR, + cbPtr->inLLR+cbPtr->llrOffset, + cbPtr->inLLR+2*cbPtr->llrOffset, + betaMap0, + betaMap1);*/ + + /* Free syspar Memory + Memory_free(dataHeap, syspar, inSize+12);*/ +#endif // READ_BINARY_TEST_VECTORS + } + else if ( cbPtr->mode == TEST_MODE_LTE ) /* LTE mode */ + { + /* Fill syspar with data bits */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->inLLR, 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset], 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset<<1], 1, cbPtr->blockSize, fid); + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + for(i=0;iblockSize;i++) + { + fscanf(fid, "%d\t%d\t%d", &stmp[0], &stmp[1],&stmp[2]); + cbPtr->inLLR[i] = (Int8) stmp[0]; + cbPtr->inLLR[i+cbPtr->llrOffset] = (Int8) stmp[1]; + cbPtr->inLLR[i+2*cbPtr->llrOffset]= (Int8) stmp[2]; + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + + /* Fill syspar with tail bits */ + sprintf(fileName, "%s\\block%d_tail_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tTail Bits file read failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < 6; i++) + { + fscanf(fid, "%d\t%d", &stmp[0], &stmp[1]); + cbPtr->tailBits[i] = (Int8) stmp[0]; + cbPtr->tailBits[6+i] = (Int8) stmp[1]; + } + fclose(fid); + } + else if ( cbPtr->mode == TEST_MODE_WIMAX ) /* WIMAX mode */ + { + /* Fill syspar with data bits */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->inLLR, 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset], 1, cbPtr->blockSize, fid); + fread(&cbPtr->inLLR[cbPtr->llrOffset<<1], 1, cbPtr->blockSize, fid); + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_llrs.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tLLR Data file read failed : %s\n", fileName); + System_exit(0); + } + for(i=0;iblockSize;i++) + { + fscanf(fid, "%d\t%d\t%d", &stmp[0], &stmp[1],&stmp[2]); + cbPtr->inLLR[i] = (Int8) stmp[0]; + cbPtr->inLLR[i+cbPtr->llrOffset] = (Int8) stmp[1]; + cbPtr->inLLR[i+2*cbPtr->llrOffset]= (Int8) stmp[2]; + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + } + + /* Allocate Memory for Ouput & Reference Hard Decisions */ + cbPtr->sizeHD = COMPUTE_HD_BYTE_SIZE(cbPtr->blockSize); + cbPtr->outHD = (UInt32 *) Memory_calloc(dataHeap, + cbPtr->sizeHD, + 64, + NULL); + if(cbPtr->outHD == NULL) + { + System_printf("\tMemory allocation failed !!! (Out HD)\n"); + System_exit(0); + } + cbPtr->refHD = (UInt32 *) Memory_calloc(dataHeap, + cbPtr->sizeHD, + 64, + NULL); + if(cbPtr->refHD == NULL) + { + System_printf("\tMemory allocation failed !!! (Ref HD)\n"); + System_exit(0); + } + + /* Prepare Reference Hard Decisions */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_hard_dec.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tHard Decision File open failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->refHD, 4, (cbPtr->sizeHD>>2), fid); + + for(i=0;i<(cbPtr->sizeHD>>2);i++) + { +#ifdef _BIG_ENDIAN + tmp = swapBytes(cbPtr->refHD[i]); + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = bitr(tmp); + } + else + { + cbPtr->refHD[i] = tmp; + } +#else + tmp = cbPtr->refHD[i]; + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = tmp; + } + else + { + cbPtr->refHD[i] = bitr(tmp); + } +#endif + } + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_hard_dec.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tHard Decision File open failed : %s\n", fileName); + System_exit(0); + } + for(i=0;i<(cbPtr->sizeHD>>2);i++) + { + fscanf(fid, "%x", &tmp); +#ifdef _BIG_ENDIAN + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = bitr(tmp); + } + else + { + cbPtr->refHD[i] = tmp; + } +#else + if (!tempCbConfig.out_order_sel) + { + cbPtr->refHD[i] = tmp; + } + else + { + cbPtr->refHD[i] = bitr(tmp); + } +#endif + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + + /* Allocate Memory for Interleaver Table */ + /* Interleaver flag is cleared - no external interleaver table */ + cbPtr->interFlag = 0; + cbPtr->sizeINTER = 0; + cbPtr->inInter = NULL; + + /* Allocate Memory for Ouput & Reference Soft Decisions */ + cbPtr->sdFlag = 0; + cbPtr->sizeSD = 0; + cbPtr->sdOffset = 0; + cbPtr->outSD = NULL; + cbPtr->refSD = NULL; +// tempCbConfig.soft_out_flag_en = 0; + if ( tempCbConfig.soft_out_flag_en ) + { + cbPtr->sdFlag = 1; + + if ( cbPtr->mode == TEST_MODE_SPLIT ) /* SPLIT MODE */ + { + cbPtr->sizeSD = cbPtr->blockSize; + cbPtr->sdOffset = NULL; + } + else + { + cbPtr->sizeSD = 3 * cbPtr->blockSize; + cbPtr->sdOffset = cbPtr->blockSize; + } + cbPtr->outSD = (Int8 *) Memory_calloc(dataHeap, cbPtr->sizeSD, 64, NULL); + if(cbPtr->outSD == NULL) + { + System_printf("\tMemory allocation failed !!! (Out SD)\n"); + System_exit(0); + } + cbPtr->refSD = (Int8 *) Memory_calloc(dataHeap, cbPtr->sizeSD, 64, NULL); + if(cbPtr->refSD == NULL) + { + System_printf("\tMemory allocation failed !!! (Ref SD)\n"); + System_exit(0); + } + + /* Prepare Reference Soft Decisions */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_soft_dec.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tSoft Decision File open failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->refSD, 1, cbPtr->blockSize, fid); + if ( cbPtr->sdOffset ) + { + fread(&cbPtr->refSD[cbPtr->sdOffset], 1, cbPtr->blockSize, fid); + fread(&cbPtr->refSD[cbPtr->sdOffset<<1], 1, cbPtr->blockSize, fid); + } + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_soft_dec.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tSoft Decision File open failed : %s\n", fileName); + System_exit(0); + } + for (i = 0; i < cbPtr->blockSize; i++) + { + fscanf(fid, "%d\t%d\t%d", &stmp[0], &stmp[1], &stmp[2]); + cbPtr->refSD[i] = (Int8) stmp[0]; + if (cbPtr->sdOffset) + { + cbPtr->refSD[i+cbPtr->sdOffset] = (Int8) stmp[1]; + cbPtr->refSD[i+2*cbPtr->sdOffset] = (Int8) stmp[2]; + } + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + } + + /* Allocate Memory for Ouput & Reference Status Registers */ + cbPtr->stsFlag = 0; + cbPtr->sizeSTS = 0; + cbPtr->outSts = NULL; + cbPtr->refSts = NULL; + if ( tempCbConfig.out_flag_en ) + { + cbPtr->stsFlag = 1; + /* allocate outSts memory */ + cbPtr->sizeSTS = 3 * sizeof(UInt32); + cbPtr->outSts = (UInt32 *) Memory_calloc(dataHeap, cbPtr->sizeSTS, 64, NULL); + if(cbPtr->outSts == NULL) + { + System_printf("\tMemory allocation failed !!! (Out STS)\n"); + System_exit(0); + } + cbPtr->refSts = (UInt32 *) Memory_calloc(dataHeap, cbPtr->sizeSTS, 64, NULL); + if(cbPtr->refSts == NULL) + { + System_printf("\tMemory allocation failed !!! (Ref STS)\n"); + System_exit(0); + } + + /* Prepare Reference Status Registers */ +#if READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_status.bin", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"rb")) ) + { + System_printf("\tStatus File open failed : %s\n", fileName); + System_exit(0); + } + fread(cbPtr->refSts, sizeof(UInt32), 3, fid); +#ifdef _BIG_ENDIAN + cbPtr->refSts[0] = swapBytes(cbPtr->refSts[0]); + cbPtr->refSts[1] = swapBytes(cbPtr->refSts[1]); + cbPtr->refSts[2] = swapBytes(cbPtr->refSts[2]); +#endif + fclose(fid); +#else // READ_BINARY_TEST_VECTORS + sprintf(fileName, "%s\\block%d_status.dat", testFolder, cbCnt); + if ( !(fid = fopen(fileName,"r")) ) + { + System_printf("\tStatus File open failed : %s\n", fileName); + System_exit(0); + } + for(i=0;i<3;i++) + { + fscanf(fid, "%x", &tmp); + cbPtr->refSts[i] = (UInt32) tmp; + } + fclose(fid); +#endif // READ_BINARY_TEST_VECTORS + } +// else +// tempCbConfig.out_flag_en = 1; + + /* Allocate Memory for Input Config Registers */ + cbPtr->sizeCFG = 15 * sizeof(UInt32); + cbPtr->inCfg = (UInt32 *) Memory_calloc(dataHeap, cbPtr->sizeCFG, 64, NULL); + if(cbPtr->inCfg == NULL) + { + System_printf("\tMemory allocation failed !!! (CFG)\n"); + System_exit(0); + } + + /* Allocate Memory for Tcp3d_InCfgParams structure */ + cbPtr->inCfgParams = (Tcp3d_InCfgParams *) Memory_alloc(dataHeap, + sizeof(Tcp3d_InCfgParams), + 64, + NULL); + if (cbPtr->inCfgParams == NULL) + { + System_printf("Memory allocation failed !!! (inCfgParams)\n"); + System_exit(0); + } + /* Update the input config params structure */ + fillICParams(cbPtr->inCfgParams, &tempCbConfig); + + if ( (morePrints) && ((cbCnt+1) % 5) == 0 ) + System_printf("\tCode block prepared : %d \n", cbCnt+1); + + } /* for(cbCnt=0; cbCnt < cbTestSet->maxNumCB; cbCnt++) */ + + /* Set the double buffer value based on mode value */ + if ( ( cbTestSet->mode == TEST_MODE_SINGLE ) || ( cbTestSet->mode == TEST_MODE_SPLIT ) ) + cbTestSet->doubleBuffer = 0; //CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_DISABLE + else + cbTestSet->doubleBuffer = 1; //CSL_TCP3D_CFG_TCP3_MODE_IN_MEM_DB_EN_ENABLE + + return (cbCnt); +} + +/******************************************************************************* + ******************************************************************************/ +Void freeTestSetCB(IHeap_Handle dataHeap, cbTestDesc *cbTestSet) +{ + Int32 i; + + /* Free memory allocated for Code Block sets */ + for(i=0; i< cbTestSet->maxNumCB; i++) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->inCfg, cbTestSet->cbData[i]->sizeCFG); + Memory_free(dataHeap, cbTestSet->cbData[i]->inLLR, cbTestSet->cbData[i]->sizeLLR); + Memory_free(dataHeap, cbTestSet->cbData[i]->outHD, cbTestSet->cbData[i]->sizeHD); + Memory_free(dataHeap, cbTestSet->cbData[i]->refHD, cbTestSet->cbData[i]->sizeHD); + if ( cbTestSet->cbData[i]->sdFlag ) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->outSD, cbTestSet->cbData[i]->sizeSD); + Memory_free(dataHeap, cbTestSet->cbData[i]->refSD, cbTestSet->cbData[i]->sizeSD); + } + if ( cbTestSet->cbData[i]->stsFlag ) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->outSts, cbTestSet->cbData[i]->sizeSTS); + Memory_free(dataHeap, cbTestSet->cbData[i]->refSts, cbTestSet->cbData[i]->sizeSTS); + } + if ( cbTestSet->cbData[i]->interFlag ) + { + Memory_free(dataHeap, cbTestSet->cbData[i]->inInter, cbTestSet->cbData[i]->sizeINTER); + } + Memory_free(dataHeap, cbTestSet->cbData[i]->inCfgParams, sizeof(Tcp3d_InCfgParams)); + Memory_free(dataHeap, cbTestSet->cbData[i], sizeof(cbDataDesc)); + } + Memory_free(dataHeap, cbTestSet->cbData, cbTestSet->maxNumCB * sizeof(cbDataDesc *)); +} + +/* end of file */ -- 2.39.2
  • Rr=(`4gGvvHH?I@ZccQT) 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 O-xtmUtdsor!v7anNcMaH literal 0 HcmV?d00001 diff --git a/docs/TCP3D_DRV_doxconfig.xdt b/docs/TCP3D_DRV_doxconfig.xdt new file mode 100644 index 0000000..951156d --- /dev/null +++ b/docs/TCP3D_DRV_doxconfig.xdt @@ -0,0 +1,255 @@ +%%{ +/*! + * This template implements the Doxyfile + */ + /* Versioning */ + var ver = this; + var packageVersion = ver[0]+"."+ver[1]+"."+ver[2]+"."+ver[3]; + +%%} + +# Doxyfile 1.5.1-p1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "TCP3D Driver" +PROJECT_NUMBER = `packageVersion` +OUTPUT_DIRECTORY = ./docs/doxy +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = ./src \ + . +# ./docs/doxy/template + +FILE_PATTERNS = *.h +RECURSIVE = NO +EXCLUDE = YES \ + ./example \ + ./test \ + ./package \ + ./packages +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = cslr_*.h \ + *profile*.* \ + *_priv.h \ + *_types.h +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = ./docs/tiheader.htm +HTML_FOOTER = ./docs/tifooter.htm +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +CHM_FILE = ..\..\TCP3D_DRV_APIIF.chm +HHC_LOCATION = hhc.exe +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = NO +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/docs/TCP3D_DriverSDS.pdf b/docs/TCP3D_DriverSDS.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8acb0058fa5065e4c10d05c78aeeb6525d697985 GIT binary patch literal 418268 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