diff --git a/.gitmodules b/.gitmodules index b21f95ef765d36c3782b63b8f169ddba78c5dc8d..21aa4e7d57437acffa8a84786621f5640a68077d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "nanosoc/sl_ams_tech"] path = nanosoc/sl_ams_tech url = https://git.soton.ac.uk/soclabs/sl_ams_tech.git +[submodule "nanosoc/synopsys_28nm_slm_integration"] + path = nanosoc/synopsys_28nm_slm_integration + url = https://git.soton.ac.uk/soclabs/synopsys_28nm_slm_integration.git diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl new file mode 100644 index 0000000000000000000000000000000000000000..98a8de3e444b4f4870b95409f0263956d3f8cec3 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/design_setup.tcl @@ -0,0 +1,12 @@ +set sc9mcpp240z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 +set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 + +create_lib nanosoc_chip_pads.dlib \ + -technology $cln28ht_tech_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.tf \ + -ref_libs {./cln28ht_sc9mcpp140z/} + +source $env(SOCLABS_PROJECT_DIR)/imp/ASIC/nanosoc/flist/dc_flist.tcl +analyze -format verilog $env(SOCLABS_PROJECT_DIR)/nanosoc_tech/nanosoc/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v + +elaborate nanosoc_chip_pads +set_top_module nanosoc_chip_pads \ No newline at end of file diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/fc_output.txt b/ASIC/TSMC28nm/no_pins/Synopsys_FC/fc_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..c39e50efd01f01cd080ee68ef10fd5b93667c5dc --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/fc_output.txt @@ -0,0 +1,32 @@ + + Fusion Compiler (TM) + + Version U-2022.12 for linux64 - Dec 11, 2022 + This release has significant feature enhancements. Please review the Release + Notes associated with this release. + + Copyright (c) 1988 - 2022 Synopsys, Inc. + This software and the associated documentation are proprietary to Synopsys, + Inc. This software may only be used in accordance with the terms and conditions + of a written license agreement with Synopsys, Inc. All other use, reproduction, + or distribution of this software is strictly prohibited. Licensed Products + communicate with Synopsys servers for the purpose of providing software + updates, detecting software piracy and verifying that customers are using + Licensed Products in conformity with the applicable License Key for such + Licensed Products. Synopsys will use information gathered in connection with + this process to deliver software updates and pursue software pirates and + infringers. + + Inclusivity & Diversity - Visit SolvNetPlus to read the "Synopsys Statement on + Inclusivity and Diversity" (Refer to article 000036315 at + https://solvnetplus.synopsys.com) + +Loading user preference file /home/dwn1c21/.synopsys_fc_gui/preferences.tcl +Error: Message for 'CLE-10' not found +fc_shell> exit +Maximum memory usage for this session: 315.86 MB +Maximum memory usage for this session including child processes: 315.86 MB +CPU usage for this session: 11 seconds ( 0.00 hours) +Elapsed time for this session: 39 seconds ( 0.01 hours) +Thank you for using Fusion Compiler. + diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/lm_output.txt b/ASIC/TSMC28nm/no_pins/Synopsys_FC/lm_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e293f8af8c1cd4a2ffe5da1d138ba5f1022734e --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/lm_output.txt @@ -0,0 +1,48 @@ + + Library Manager (TM) + + Version U-2022.12 for linux64 - Dec 11, 2022 + This release has significant feature enhancements. Please review the Release + Notes associated with this release. + + Copyright (c) 1988 - 2022 Synopsys, Inc. + This software and the associated documentation are proprietary to Synopsys, + Inc. This software may only be used in accordance with the terms and conditions + of a written license agreement with Synopsys, Inc. All other use, reproduction, + or distribution of this software is strictly prohibited. Licensed Products + communicate with Synopsys servers for the purpose of providing software + updates, detecting software piracy and verifying that customers are using + Licensed Products in conformity with the applicable License Key for such + Licensed Products. Synopsys will use information gathered in connection with + this process to deliver software updates and pursue software pirates and + infringers. + + Inclusivity & Diversity - Visit SolvNetPlus to read the "Synopsys Statement on + Inclusivity and Diversity" (Refer to article 000036315 at + https://solvnetplus.synopsys.com) + +Error: Message for 'CLE-10' not found +lm_shell> set sc9mcpp140z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 +lm_shell> set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 +lm_shell> +lm_shell> set cln28ht_tech_file $cln28ht_tech_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.tf +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.tf +lm_shell> set cln28ht_lef_file $cln28ht_tech_path/lef/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.lef +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0/lef/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.lef +lm_shell> +lm_shell> set sc9mcpp140z_lef_file $sc9mcpp140z_base_path/lef/sc9mcpp140z_cln28ht_base_svt_c35.lef +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0/lef/sc9mcpp140z_cln28ht_base_svt_c35.lef +lm_shell> set sc9mcpp140z_gds_file $sc9mcpp140z_base_path/gds2/sc9mcpp140z_cln28ht_base_svt_c35.gds2 +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0/gds2/sc9mcpp140z_cln28ht_base_svt_c35.gds2 +lm_shell> set sc9mcpp140z_db_file $sc9mcpp140z_base_path/db/sc9mcpp140z_cln28ht_base_svt_c35_ssg_cworstt_max_0p81v_125c.db +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0/db/sc9mcpp140z_cln28ht_base_svt_c35_ssg_cworstt_max_0p81v_125c.db +lm_shell> set sc9mcpp140z_antenna_file $sc9mcpp140z_base_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_cln28ht_base_svt_c35_antenna.clf +/home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_cln28ht_base_svt_c35_antenna.clf +lm_shell> exit +Maximum memory usage for this session: 82.41 MB +CPU usage for this session: 2 seconds ( 0.00 hours) +Elapsed time for this session: 14 seconds ( 0.00 hours) +Thank you for using Library Manager. + diff --git a/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl b/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl new file mode 100644 index 0000000000000000000000000000000000000000..464cd56d59fbcd9aee90fcb3943e5791b9a1bd38 --- /dev/null +++ b/ASIC/TSMC28nm/no_pins/Synopsys_FC/synopsys_lib_conversion.tcl @@ -0,0 +1,27 @@ +set sc9mcpp140z_base_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/sc9mcpp140z_base_svt_c35/r0p0 +set cln28ht_tech_path /home/dwn1c21/SoC-Labs/phys_ip/arm/tsmc/cln28ht/arm_tech/r1p0 + +set cln28ht_tech_file $cln28ht_tech_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.tf +set cln28ht_lef_file $cln28ht_tech_path/lef/1p9m_5x1y2z_utalrdl/sc9mcpp140z_tech.lef + +set sc9mcpp140z_lef_file $sc9mcpp140z_base_path/lef/sc9mcpp140z_cln28ht_base_svt_c35.lef +set sc9mcpp140z_gds_file $sc9mcpp140z_base_path/gds2/sc9mcpp140z_cln28ht_base_svt_c35.gds2 +set sc9mcpp140z_db_file $sc9mcpp140z_base_path/db/sc9mcpp140z_cln28ht_base_svt_c35_ssg_cworstt_max_0p81v_125c.db +set sc9mcpp140z_antenna_file $sc9mcpp140z_base_path/milkyway/1p9m_5x1y2z_utalrdl/sc9mcpp140z_cln28ht_base_svt_c35_antenna.clf + +create_physical_lib -technology $cln28ht_tech_file cln28ht +read_lef -library cln28ht $sc9mcpp140z_lef_file +read_gds -library cln28ht $sc9mcpp140z_gds_file +set_cell_site -site_def unit +update_physical_properties -library cln28ht -format clf -file $sc9mcpp140z_antenna_file + +update_physical_properties -library cln28ht -format db -file $sc9mcpp140z_db_file +create_frame + +set_app_options -name + +write_physical_lib -output cln28ht.ndm +report_lib -all cln28ht + +set_check_library_options -logic_vs_physical -physical +check_library -physical_library_name cln28ht -logic_library_name $sc9mcpp140z_db_file \ No newline at end of file diff --git a/ASIC/TSMC28nm/rom_via.spec b/ASIC/TSMC28nm/rom_via.spec new file mode 100644 index 0000000000000000000000000000000000000000..6f8313572adc79a0718352b4f72965aadf996c29 --- /dev/null +++ b/ASIC/TSMC28nm/rom_via.spec @@ -0,0 +1,31 @@ +# user spec file, compiler rom_via_hdd_2_svt_mvt, version r0p0 + +activity_factor = 5 +back_biasing = off +bits = 32 +bmux = on +bus_notation = on +check_instname = off +code_file = $SOCLABS_NANOSOC_TECH_DIR/testcodes/bootloader/bootloader.bin +corners = ffg_cbestt_0p77v_0p77v_0c,ffg_cbestt_0p77v_0p77v_125c,ffg_cbestt_0p77v_0p77v_m40c,ffg_cbestt_0p88v_0p88v_0c,ffg_cbestt_0p88v_0p88v_125c,ffg_cbestt_0p88v_0p88v_m40c,ffg_cbestt_0p99v_0p99v_0c,ffg_cbestt_0p99v_0p99v_125c,ffg_cbestt_0p99v_0p99v_m40c,ffg_cbestt_1p05v_1p05v_0c,ffg_cbestt_1p05v_1p05v_125c,ffg_cbestt_1p05v_1p05v_m40c,ffg_ctypical_0p70v_0p70v_85c,ffg_ctypical_0p90v_0p90v_85c,ffg_ctypical_0p99v_0p99v_125c,ffg_ctypical_1p00v_1p00v_85c,ffg_ctypical_1p05v_1p05v_125c,ssg_cworstt_0p63v_0p63v_0c,ssg_cworstt_0p63v_0p63v_125c,ssg_cworstt_0p63v_0p63v_m40c,ssg_cworstt_0p72v_0p72v_0c,ssg_cworstt_0p72v_0p72v_125c,ssg_cworstt_0p72v_0p72v_m40c,ssg_cworstt_0p81v_0p81v_0c,ssg_cworstt_0p81v_0p81v_125c,ssg_cworstt_0p81v_0p81v_m40c,ssg_cworstt_0p90v_0p90v_0c,ssg_cworstt_0p90v_0p90v_125c,ssg_cworstt_0p90v_0p90v_m40c,tt_ctypical_0p63v_0p63v_0c,tt_ctypical_0p70v_0p70v_85c,tt_ctypical_0p72v_0p72v_0c,tt_ctypical_0p80v_0p80v_85c,tt_ctypical_0p81v_0p81v_0c,tt_ctypical_0p90v_0p90v_0c,tt_ctypical_0p90v_0p90v_125c,tt_ctypical_0p90v_0p90v_25c,tt_ctypical_0p90v_0p90v_85c,tt_ctypical_1p00v_1p00v_125c,tt_ctypical_1p00v_1p00v_85c,tt_ctypical_1p05v_1p05v_85c +cust_comment = This\ is\ a\ memory\ instance +diodes = on +drive = 6 +ema = on +frequency = 400 +instname = rom_via +left_bus_delim = [ +libertyviewstyle = nldm +libname = rom_via +mode = ones +mux = 8 +mvt = LL +name_case = upper +pipeline = off +power_type = otc +pwr_gnd_rename = vdde:VDDE,vsse:VSSE +right_bus_delim = ] +ser = none +site_def = off +top_layer = m5-m10 +words = 256 diff --git a/ASIC/TSMC28nm/sram_16k.spec b/ASIC/TSMC28nm/sram_16k.spec new file mode 100644 index 0000000000000000000000000000000000000000..2480f23b63d90c0b1548a1f5da5bd66fb1945328 --- /dev/null +++ b/ASIC/TSMC28nm/sram_16k.spec @@ -0,0 +1,46 @@ +# user spec file, compiler sram_sp_hde_hvt_mvt, version r0p0 + +EOL_guardband = 0 +activity_factor = 10 +atf = off +back_biasing = off +bits = 32 +bmux = off +bus_notation = on +check_instname = on +compiler_type = sp +corners = ffg_cbestt_0p99v_0p99v_125c,ffg_cbestt_0p99v_0p99v_m40c,ssg_cworstt_0p81v_0p81v_125c,ssg_cworstt_0p81v_0p81v_m40c,tt_ctypical_0p90v_0p90v_85c +cust_comment = +diodes = on +drive = 6 +ema = on +fci_type = not_fci +flexible_banking = 4 +frequency = 400 +instname = sram_16k +left_bus_delim = [ +libertyviewstyle = nldm +libname = SRAM_16K +lren_bankmask = off +mux = 8 +mvt = LL +name_case = upper +pipeline = off +power_gating = off +power_type = otc +prefix = +pwr_gnd_rename = vddpe:VDD,vddce:VDD,vsse:VSS +rcols = 2 +redundancy = off +retention = on +right_bus_delim = ] +rows_p_bl = 256 +rrows = 0 +scan = off +ser = none +site_def = off +wa = on +words = 4096 +wp_size = 1 +write_mask = on +write_thru = off diff --git a/ASIC/28pin/Cadence/cpf/nanosoc.cpf b/ASIC/TSMC65nm/28pin/Cadence/cpf/nanosoc.cpf similarity index 100% rename from ASIC/28pin/Cadence/cpf/nanosoc.cpf rename to ASIC/TSMC65nm/28pin/Cadence/cpf/nanosoc.cpf diff --git a/ASIC/28pin/Cadence/cpf/nanosoc_imp.cpf b/ASIC/TSMC65nm/28pin/Cadence/cpf/nanosoc_imp.cpf similarity index 100% rename from ASIC/28pin/Cadence/cpf/nanosoc_imp.cpf rename to ASIC/TSMC65nm/28pin/Cadence/cpf/nanosoc_imp.cpf diff --git a/ASIC/28pin/Cadence/scripts/clock_tree_synthesis.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/clock_tree_synthesis.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/clock_tree_synthesis.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/clock_tree_synthesis.tcl diff --git a/ASIC/28pin/Cadence/scripts/design_import.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/design_import.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/design_import.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/design_import.tcl diff --git a/ASIC/28pin/Cadence/scripts/genus.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/genus.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/genus.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/genus.tcl diff --git a/ASIC/28pin/Cadence/scripts/io_plan.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/io_plan.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/io_plan.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/io_plan.tcl diff --git a/ASIC/28pin/Cadence/scripts/lec.dofile b/ASIC/TSMC65nm/28pin/Cadence/scripts/lec.dofile similarity index 100% rename from ASIC/28pin/Cadence/scripts/lec.dofile rename to ASIC/TSMC65nm/28pin/Cadence/scripts/lec.dofile diff --git a/ASIC/28pin/Cadence/scripts/nanosoc.mmmc b/ASIC/TSMC65nm/28pin/Cadence/scripts/nanosoc.mmmc similarity index 100% rename from ASIC/28pin/Cadence/scripts/nanosoc.mmmc rename to ASIC/TSMC65nm/28pin/Cadence/scripts/nanosoc.mmmc diff --git a/ASIC/28pin/Cadence/scripts/nanosoc_io_plan.io b/ASIC/TSMC65nm/28pin/Cadence/scripts/nanosoc_io_plan.io similarity index 100% rename from ASIC/28pin/Cadence/scripts/nanosoc_io_plan.io rename to ASIC/TSMC65nm/28pin/Cadence/scripts/nanosoc_io_plan.io diff --git a/ASIC/28pin/Cadence/scripts/place.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/place.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/place.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/place.tcl diff --git a/ASIC/28pin/Cadence/scripts/place_macros.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/place_macros.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/place_macros.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/place_macros.tcl diff --git a/ASIC/28pin/Cadence/scripts/pnr_flow.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/pnr_flow.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/pnr_flow.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/pnr_flow.tcl diff --git a/ASIC/28pin/Cadence/scripts/power_plan.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/power_plan.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/power_plan.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/power_plan.tcl diff --git a/ASIC/28pin/Cadence/scripts/power_route.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/power_route.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/power_route.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/power_route.tcl diff --git a/ASIC/28pin/Cadence/scripts/route.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/route.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/route.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/route.tcl diff --git a/ASIC/28pin/Cadence/scripts/voltus_pg.tcl b/ASIC/TSMC65nm/28pin/Cadence/scripts/voltus_pg.tcl similarity index 100% rename from ASIC/28pin/Cadence/scripts/voltus_pg.tcl rename to ASIC/TSMC65nm/28pin/Cadence/scripts/voltus_pg.tcl diff --git a/ASIC/28pin/Synopsys/scripts/fm_shell.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/fm_shell.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/fm_shell.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/fm_shell.tcl diff --git a/ASIC/28pin/Synopsys/scripts/place_memories.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/place_memories.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/place_memories.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/place_memories.tcl diff --git a/ASIC/28pin/Synopsys/scripts/place_pins.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/place_pins.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/place_pins.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/place_pins.tcl diff --git a/ASIC/28pin/Synopsys/scripts/pnr.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/pnr.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/pnr.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/pnr.tcl diff --git a/ASIC/28pin/Synopsys/scripts/power_plan.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/power_plan.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/power_plan.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/power_plan.tcl diff --git a/ASIC/28pin/Synopsys/scripts/synopsys_lib_conversion.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/synopsys_lib_conversion.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/synopsys_lib_conversion.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/synopsys_lib_conversion.tcl diff --git a/ASIC/28pin/Synopsys/scripts/synthesis.tcl b/ASIC/TSMC65nm/28pin/Synopsys/scripts/synthesis.tcl similarity index 100% rename from ASIC/28pin/Synopsys/scripts/synthesis.tcl rename to ASIC/TSMC65nm/28pin/Synopsys/scripts/synthesis.tcl diff --git a/ASIC/28pin/Synopsys/upf/nanosoc_chip_pads.upf b/ASIC/TSMC65nm/28pin/Synopsys/upf/nanosoc_chip_pads.upf similarity index 100% rename from ASIC/28pin/Synopsys/upf/nanosoc_chip_pads.upf rename to ASIC/TSMC65nm/28pin/Synopsys/upf/nanosoc_chip_pads.upf diff --git a/ASIC/44pin/Cadence/cpf/nanosoc.cpf b/ASIC/TSMC65nm/44pin/Cadence/cpf/nanosoc.cpf similarity index 100% rename from ASIC/44pin/Cadence/cpf/nanosoc.cpf rename to ASIC/TSMC65nm/44pin/Cadence/cpf/nanosoc.cpf diff --git a/ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf b/ASIC/TSMC65nm/44pin/Cadence/cpf/nanosoc_imp.cpf similarity index 100% rename from ASIC/44pin/Cadence/cpf/nanosoc_imp.cpf rename to ASIC/TSMC65nm/44pin/Cadence/cpf/nanosoc_imp.cpf diff --git a/ASIC/44pin/Cadence/scripts/clock_tree_synthesis.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/clock_tree_synthesis.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/clock_tree_synthesis.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/clock_tree_synthesis.tcl diff --git a/ASIC/44pin/Cadence/scripts/design_import.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/design_import.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/design_import.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/design_import.tcl diff --git a/ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/design_import_noDFT.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/design_import_noDFT.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/design_import_noDFT.tcl diff --git a/ASIC/44pin/Cadence/scripts/filler.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/filler.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/filler.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/filler.tcl diff --git a/ASIC/44pin/Cadence/scripts/genus.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/genus.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/genus.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/genus.tcl diff --git a/ASIC/44pin/Cadence/scripts/genus_nodft.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/genus_nodft.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/genus_nodft.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/genus_nodft.tcl diff --git a/ASIC/44pin/Cadence/scripts/io_plan.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/io_plan.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/io_plan.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/io_plan.tcl diff --git a/ASIC/44pin/Cadence/scripts/nanosoc.mmmc b/ASIC/TSMC65nm/44pin/Cadence/scripts/nanosoc.mmmc similarity index 100% rename from ASIC/44pin/Cadence/scripts/nanosoc.mmmc rename to ASIC/TSMC65nm/44pin/Cadence/scripts/nanosoc.mmmc diff --git a/ASIC/44pin/Cadence/scripts/nanosoc_io_plan.io b/ASIC/TSMC65nm/44pin/Cadence/scripts/nanosoc_io_plan.io similarity index 100% rename from ASIC/44pin/Cadence/scripts/nanosoc_io_plan.io rename to ASIC/TSMC65nm/44pin/Cadence/scripts/nanosoc_io_plan.io diff --git a/ASIC/44pin/Cadence/scripts/place.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/place.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/place.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/place.tcl diff --git a/ASIC/44pin/Cadence/scripts/place_bondpads.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/place_bondpads.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/place_bondpads.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/place_bondpads.tcl diff --git a/ASIC/44pin/Cadence/scripts/place_macros.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/place_macros.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/place_macros.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/place_macros.tcl diff --git a/ASIC/44pin/Cadence/scripts/pnr_flow.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/pnr_flow.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/pnr_flow.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/pnr_flow.tcl diff --git a/ASIC/44pin/Cadence/scripts/power_plan.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/power_plan.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/power_plan.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/power_plan.tcl diff --git a/ASIC/44pin/Cadence/scripts/power_route.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/power_route.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/power_route.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/power_route.tcl diff --git a/ASIC/44pin/Cadence/scripts/route.tcl b/ASIC/TSMC65nm/44pin/Cadence/scripts/route.tcl similarity index 100% rename from ASIC/44pin/Cadence/scripts/route.tcl rename to ASIC/TSMC65nm/44pin/Cadence/scripts/route.tcl diff --git a/ASIC/44pin/Cadence/scripts/tieoff_exclude b/ASIC/TSMC65nm/44pin/Cadence/scripts/tieoff_exclude similarity index 100% rename from ASIC/44pin/Cadence/scripts/tieoff_exclude rename to ASIC/TSMC65nm/44pin/Cadence/scripts/tieoff_exclude diff --git a/ASIC/44pin/Mentor/DRC b/ASIC/TSMC65nm/44pin/Mentor/DRC similarity index 100% rename from ASIC/44pin/Mentor/DRC rename to ASIC/TSMC65nm/44pin/Mentor/DRC diff --git a/ASIC/44pin/Mentor/ERC b/ASIC/TSMC65nm/44pin/Mentor/ERC similarity index 100% rename from ASIC/44pin/Mentor/ERC rename to ASIC/TSMC65nm/44pin/Mentor/ERC diff --git a/ASIC/44pin/Mentor/LVS b/ASIC/TSMC65nm/44pin/Mentor/LVS similarity index 100% rename from ASIC/44pin/Mentor/LVS rename to ASIC/TSMC65nm/44pin/Mentor/LVS diff --git a/ASIC/44pin/Synopsys/scripts/fm_shell.tcl b/ASIC/TSMC65nm/44pin/Synopsys/scripts/fm_shell.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/fm_shell.tcl rename to ASIC/TSMC65nm/44pin/Synopsys/scripts/fm_shell.tcl diff --git a/ASIC/44pin/Synopsys/scripts/place_memories.tcl b/ASIC/TSMC65nm/44pin/Synopsys/scripts/place_memories.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/place_memories.tcl rename to ASIC/TSMC65nm/44pin/Synopsys/scripts/place_memories.tcl diff --git a/ASIC/44pin/Synopsys/scripts/place_pins.tcl b/ASIC/TSMC65nm/44pin/Synopsys/scripts/place_pins.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/place_pins.tcl rename to ASIC/TSMC65nm/44pin/Synopsys/scripts/place_pins.tcl diff --git a/ASIC/44pin/Synopsys/scripts/pnr.tcl b/ASIC/TSMC65nm/44pin/Synopsys/scripts/pnr.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/pnr.tcl rename to ASIC/TSMC65nm/44pin/Synopsys/scripts/pnr.tcl diff --git a/ASIC/44pin/Synopsys/scripts/power_plan.tcl b/ASIC/TSMC65nm/44pin/Synopsys/scripts/power_plan.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/power_plan.tcl rename to ASIC/TSMC65nm/44pin/Synopsys/scripts/power_plan.tcl diff --git a/ASIC/44pin/Synopsys/scripts/synthesis.tcl b/ASIC/TSMC65nm/44pin/Synopsys/scripts/synthesis.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/synthesis.tcl rename to ASIC/TSMC65nm/44pin/Synopsys/scripts/synthesis.tcl diff --git a/ASIC/44pin/Synopsys/upf/nanosoc_chip_pads.upf b/ASIC/TSMC65nm/44pin/Synopsys/upf/nanosoc_chip_pads.upf similarity index 100% rename from ASIC/44pin/Synopsys/upf/nanosoc_chip_pads.upf rename to ASIC/TSMC65nm/44pin/Synopsys/upf/nanosoc_chip_pads.upf diff --git a/ASIC/60pin/Cadence/cpf/nanosoc.cpf b/ASIC/TSMC65nm/60pin/Cadence/cpf/nanosoc.cpf similarity index 100% rename from ASIC/60pin/Cadence/cpf/nanosoc.cpf rename to ASIC/TSMC65nm/60pin/Cadence/cpf/nanosoc.cpf diff --git a/ASIC/60pin/Cadence/cpf/nanosoc_imp.cpf b/ASIC/TSMC65nm/60pin/Cadence/cpf/nanosoc_imp.cpf similarity index 100% rename from ASIC/60pin/Cadence/cpf/nanosoc_imp.cpf rename to ASIC/TSMC65nm/60pin/Cadence/cpf/nanosoc_imp.cpf diff --git a/ASIC/60pin/Cadence/scripts/clock_tree_synthesis.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/clock_tree_synthesis.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/clock_tree_synthesis.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/clock_tree_synthesis.tcl diff --git a/ASIC/60pin/Cadence/scripts/design_import.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/design_import.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/design_import.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/design_import.tcl diff --git a/ASIC/60pin/Cadence/scripts/genus.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/genus.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/genus.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/genus.tcl diff --git a/ASIC/60pin/Cadence/scripts/io_plan.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/io_plan.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/io_plan.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/io_plan.tcl diff --git a/ASIC/60pin/Cadence/scripts/nanosoc.mmmc b/ASIC/TSMC65nm/60pin/Cadence/scripts/nanosoc.mmmc similarity index 100% rename from ASIC/60pin/Cadence/scripts/nanosoc.mmmc rename to ASIC/TSMC65nm/60pin/Cadence/scripts/nanosoc.mmmc diff --git a/ASIC/60pin/Cadence/scripts/nanosoc_io_plan.io b/ASIC/TSMC65nm/60pin/Cadence/scripts/nanosoc_io_plan.io similarity index 100% rename from ASIC/60pin/Cadence/scripts/nanosoc_io_plan.io rename to ASIC/TSMC65nm/60pin/Cadence/scripts/nanosoc_io_plan.io diff --git a/ASIC/60pin/Cadence/scripts/place.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/place.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/place.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/place.tcl diff --git a/ASIC/60pin/Cadence/scripts/place_macros.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/place_macros.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/place_macros.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/place_macros.tcl diff --git a/ASIC/60pin/Cadence/scripts/pnr_flow.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/pnr_flow.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/pnr_flow.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/pnr_flow.tcl diff --git a/ASIC/60pin/Cadence/scripts/power_plan.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/power_plan.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/power_plan.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/power_plan.tcl diff --git a/ASIC/60pin/Cadence/scripts/power_route.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/power_route.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/power_route.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/power_route.tcl diff --git a/ASIC/60pin/Cadence/scripts/route.tcl b/ASIC/TSMC65nm/60pin/Cadence/scripts/route.tcl similarity index 100% rename from ASIC/60pin/Cadence/scripts/route.tcl rename to ASIC/TSMC65nm/60pin/Cadence/scripts/route.tcl diff --git a/ASIC/60pin/Synopsys/scripts/fm_shell.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/fm_shell.tcl similarity index 100% rename from ASIC/60pin/Synopsys/scripts/fm_shell.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/fm_shell.tcl diff --git a/ASIC/60pin/Synopsys/scripts/place_memories.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/place_memories.tcl similarity index 100% rename from ASIC/60pin/Synopsys/scripts/place_memories.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/place_memories.tcl diff --git a/ASIC/60pin/Synopsys/scripts/place_pins.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/place_pins.tcl similarity index 100% rename from ASIC/60pin/Synopsys/scripts/place_pins.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/place_pins.tcl diff --git a/ASIC/60pin/Synopsys/scripts/pnr.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/pnr.tcl similarity index 100% rename from ASIC/60pin/Synopsys/scripts/pnr.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/pnr.tcl diff --git a/ASIC/60pin/Synopsys/scripts/power_plan.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/power_plan.tcl similarity index 100% rename from ASIC/60pin/Synopsys/scripts/power_plan.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/power_plan.tcl diff --git a/ASIC/44pin/Synopsys/scripts/synopsys_lib_conversion.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/synopsys_lib_conversion.tcl similarity index 100% rename from ASIC/44pin/Synopsys/scripts/synopsys_lib_conversion.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/synopsys_lib_conversion.tcl diff --git a/ASIC/60pin/Synopsys/scripts/synthesis.tcl b/ASIC/TSMC65nm/60pin/Synopsys/scripts/synthesis.tcl similarity index 100% rename from ASIC/60pin/Synopsys/scripts/synthesis.tcl rename to ASIC/TSMC65nm/60pin/Synopsys/scripts/synthesis.tcl diff --git a/ASIC/60pin/Synopsys/upf/nanosoc_chip_pads.upf b/ASIC/TSMC65nm/60pin/Synopsys/upf/nanosoc_chip_pads.upf similarity index 100% rename from ASIC/60pin/Synopsys/upf/nanosoc_chip_pads.upf rename to ASIC/TSMC65nm/60pin/Synopsys/upf/nanosoc_chip_pads.upf diff --git a/ASIC/accelerator_only/Cadence/scripts/genus.tcl b/ASIC/TSMC65nm/accelerator_only/Cadence/scripts/genus.tcl similarity index 100% rename from ASIC/accelerator_only/Cadence/scripts/genus.tcl rename to ASIC/TSMC65nm/accelerator_only/Cadence/scripts/genus.tcl diff --git a/ASIC/accelerator_only/accel_constraints.sdc b/ASIC/TSMC65nm/accelerator_only/accel_constraints.sdc similarity index 100% rename from ASIC/accelerator_only/accel_constraints.sdc rename to ASIC/TSMC65nm/accelerator_only/accel_constraints.sdc diff --git a/ASIC/constraints.sdc b/ASIC/TSMC65nm/constraints.sdc similarity index 100% rename from ASIC/constraints.sdc rename to ASIC/TSMC65nm/constraints.sdc diff --git a/ASIC/rf_08k.spec b/ASIC/TSMC65nm/rf_08k.spec similarity index 100% rename from ASIC/rf_08k.spec rename to ASIC/TSMC65nm/rf_08k.spec diff --git a/ASIC/rf_16k.spec b/ASIC/TSMC65nm/rf_16k.spec similarity index 100% rename from ASIC/rf_16k.spec rename to ASIC/TSMC65nm/rf_16k.spec diff --git a/ASIC/rom_via.spec b/ASIC/TSMC65nm/rom_via.spec similarity index 100% rename from ASIC/rom_via.spec rename to ASIC/TSMC65nm/rom_via.spec diff --git a/ASIC/60pin/Synopsys/scripts/synopsys_lib_conversion.tcl b/ASIC/TSMC65nm/synopsys_lib_conversion.tcl similarity index 96% rename from ASIC/60pin/Synopsys/scripts/synopsys_lib_conversion.tcl rename to ASIC/TSMC65nm/synopsys_lib_conversion.tcl index 6cc53b16baabb3dfbe14e567433cad2985c23c81..d70807562e641bcaee13fc690433b4a44da0416f 100644 --- a/ASIC/60pin/Synopsys/scripts/synopsys_lib_conversion.tcl +++ b/ASIC/TSMC65nm/synopsys_lib_conversion.tcl @@ -1,4 +1,4 @@ -set RF_PATH $env(SOCLABS_PROJECT_DIR)/memories/rf +set RF_PATH $env(SOCLABS_PROJECT_DIR)/memories/rf_16k read_lib $RF_PATH/rf_sp_hdf_ss_1p08v_1p08v_125c.lib write_lib RF_LIB_ss_1p08v_1p08v_125c -output $RF_PATH/rf_sp_hdf_ss_1p08v_1p08v_125c.db diff --git a/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v b/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v new file mode 100644 index 0000000000000000000000000000000000000000..08ae5f440d81397c18295589b473482e446885ac --- /dev/null +++ b/ASIC/nanosoc_chip_pads/tsmc28hpcp/nanosoc_chip_pads_38pin.v @@ -0,0 +1,533 @@ +//----------------------------------------------------------------------------- +// Top-Level Pad implementation for TSMC65nm +// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license. +// +// Contributors +// +// David Flynn (d.w.flynn@soton.ac.uk) +// +// Copyright � 2021-3, SoC Labs (www.soclabs.org) +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// The confidential and proprietary information contained in this file may +// only be used by a person authorised under and to the extent permitted +// by a subsisting licensing agreement from Arm Limited or its affiliates. +// +// (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. +// ALL RIGHTS RESERVED +// +// This entire notice must be reproduced on all copies of this file +// and copies of this file may only be made by a person if such person is +// permitted to do so under the terms of a subsisting license agreement +// from Arm Limited or its affiliates. +// +// SVN Information +// +// Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +// +// Revision : $Revision: 371321 $ +// +// Release Information : Cortex-M System Design Kit-r1p1-00rel0 +// +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +// Abstract : Top level for example Cortex-M0/Cortex-M0+ microcontroller +//----------------------------------------------------------------------------- +// +`include "gen_defines.v" + +module nanosoc_chip_pads ( + inout wire VDDIO, + inout wire VSSIO, + inout wire VDD, + inout wire VSS, + inout wire VDDACC, + + input wire SE, + input wire CLK, // input + input wire TEST, // input + input wire NRST, // active low reset + inout wire [7:0] P0, + inout wire [7:0] P1, + inout wire SWDIO, + input wire SWDCK); + + +//------------------------------------ +// internal wires + +localparam GPIO_TIO = 4; + + +wire pad_clk_i; +wire pad_nrst_i; +wire pad_test_i; +wire pad_swdclk_i; +wire pad_swdio_i; +wire pad_swdio_o; +wire pad_swdio_e; +wire pad_swdio_z; +wire [15:0] pad_gpio_port0_i ; +wire [15:0] pad_gpio_port0_o ; +wire [15:0] pad_gpio_port0_e ; +wire [15:0] pad_gpio_port0_z ; +wire [15:0] pad_gpio_port1_i ; +wire [15:0] pad_gpio_port1_o ; +wire [15:0] pad_gpio_port1_e ; +wire [15:0] pad_gpio_port1_z ; +wire soc_nreset; +wire soc_diag_mode; +wire soc_diag_ctrl; +wire soc_scan_mode; +wire soc_scan_enable; +wire [GPIO_TIO-1:0] soc_scan_in; //soc test status outputs +wire [GPIO_TIO-1:0] soc_scan_out; //soc test status outputs +wire soc_bist_mode; +wire soc_bist_enable; +wire [GPIO_TIO-1:0] soc_bist_in; //soc test status outputs +wire [GPIO_TIO-1:0] soc_bist_out; //soc test status outputs +wire soc_alt_mode; // ALT MODE = UART +wire soc_uart_rxd_i; // UART RXD +wire soc_uart_txd_o = 1'b1; // UART TXD +wire soc_swd_mode; // SWD mode +wire soc_swd_clk_i; // SWDCLK +wire soc_swd_dio_i; // SWDIO tristate input +wire soc_swd_dio_o; // SWDIO trstate output +wire soc_swd_dio_e; // SWDIO tristate output enable +wire soc_swd_dio_z; // SWDIO tristate output hiz +wire [15:0] soc_gpio_port0_i; // GPIO SOC tristate input +wire [15:0] soc_gpio_port0_o; // GPIO SOC trstate output +wire [15:0] soc_gpio_port0_e; // GPIO SOC tristate output enable +wire [15:0] soc_gpio_port0_z; // GPIO SOC tristate output hiz +wire [15:0] soc_gpio_port1_i; // GPIO SOC tristate input +wire [15:0] soc_gpio_port1_o; // GPIO SOC trstate output +wire [15:0] soc_gpio_port1_e; // GPIO SOC tristate output enable +wire [15:0] soc_gpio_port1_z; // GPIO SOC tristate output hiz + +wire pad_se_i; + +// connect up high order GPIOs +assign soc_gpio_port0_i[15:GPIO_TIO] = pad_gpio_port0_i[15:GPIO_TIO]; +assign pad_gpio_port0_o[15:GPIO_TIO] = soc_gpio_port0_o[15:GPIO_TIO]; +assign pad_gpio_port0_e[15:GPIO_TIO] = soc_gpio_port0_e[15:GPIO_TIO]; +assign pad_gpio_port0_z[15:GPIO_TIO] = soc_gpio_port0_z[15:GPIO_TIO]; +assign soc_gpio_port1_i[15:GPIO_TIO] = pad_gpio_port1_i[15:GPIO_TIO]; +assign pad_gpio_port1_o[15:GPIO_TIO] = soc_gpio_port1_o[15:GPIO_TIO]; +assign pad_gpio_port1_e[15:GPIO_TIO] = soc_gpio_port1_e[15:GPIO_TIO]; +assign pad_gpio_port1_z[15:GPIO_TIO] = soc_gpio_port1_z[15:GPIO_TIO]; + +wire tiehi = 1'b1; +wire tielo = 1'b0; + + +nanosoc_chip_cfg #( + .GPIO_TIO (GPIO_TIO) + ) + u_nanosoc_chip_cfg + ( + // Primary Inputs + .pad_clk_i (pad_clk_i ) + ,.pad_nrst_i (pad_nrst_i ) + ,.pad_test_i (pad_test_i ) + // Alternate/reconfigurable IP and associated bidirectional I/O + ,.pad_altin_i (pad_se_i ) // SWCLK/UARTRXD/SCAN-ENABLE + ,.pad_altio_i (pad_swdio_i ) // SWDIO/UARTTXD tristate input + ,.pad_altio_o (pad_swdio_o ) // SWDIO/UARTTXD trstate output + ,.pad_altio_e (pad_swdio_e ) // SWDIO/UARTTXD tristate output enable + ,.pad_altio_z (pad_swdio_z ) // SWDIO/UARTTXD tristate output hiz + // Reconfigurable General Purpose bidirectional I/Os Port-0 (user) + ,.pad_gpio_port0_i (pad_gpio_port0_i[GPIO_TIO-1:0]) // GPIO PAD tristate input + ,.pad_gpio_port0_o (pad_gpio_port0_o[GPIO_TIO-1:0]) // GPIO PAD trstate output + ,.pad_gpio_port0_e (pad_gpio_port0_e[GPIO_TIO-1:0]) // GPIO PAD tristate output enable + ,.pad_gpio_port0_z (pad_gpio_port0_z[GPIO_TIO-1:0]) // GPIO PAD tristate output hiz + // Reconfigurable General Purpose bidirectional I/Os Port-1 (system) + ,.pad_gpio_port1_i (pad_gpio_port1_i[GPIO_TIO-1:0]) // GPIO PAD tristate input + ,.pad_gpio_port1_o (pad_gpio_port1_o[GPIO_TIO-1:0]) // GPIO PAD trstate output + ,.pad_gpio_port1_e (pad_gpio_port1_e[GPIO_TIO-1:0]) // GPIO PAD tristate output enable + ,.pad_gpio_port1_z (pad_gpio_port1_z[GPIO_TIO-1:0]) // GPIO PAD tristate output hiz + //SOC + ,.soc_nreset (soc_nreset ) + ,.soc_diag_mode (soc_diag_mode ) + ,.soc_diag_ctrl (soc_diag_ctrl ) + ,.soc_scan_mode (soc_scan_mode ) + ,.soc_scan_enable (soc_scan_enable ) + ,.soc_scan_in (soc_scan_in ) // soc test scan chain inputs + ,.soc_scan_out (soc_scan_out ) // soc test scan chain outputs + ,.soc_bist_mode (soc_bist_mode ) + ,.soc_bist_enable (soc_bist_enable ) + ,.soc_bist_in (soc_bist_in ) // soc bist control inputs + ,.soc_bist_out (soc_bist_out ) // soc test status outputs + ,.soc_alt_mode (soc_alt_mode )// ALT MODE = UART + ,.soc_uart_rxd_i (soc_uart_rxd_i ) // UART RXD + ,.soc_uart_txd_o (soc_uart_txd_o ) // UART TXD + ,.soc_swd_mode (soc_swd_mode ) // SWD mode + ,.soc_swd_clk_i (soc_swd_clk_i ) // SWDCLK + ,.soc_swd_dio_i (soc_swd_dio_i ) // SWDIO tristate input + ,.soc_swd_dio_o (soc_swd_dio_o ) // SWDIO trstate output + ,.soc_swd_dio_e (soc_swd_dio_e ) // SWDIO tristate output enable + ,.soc_swd_dio_z (soc_swd_dio_z ) // SWDIO tristate output hiz + ,.soc_gpio_port0_i (soc_gpio_port0_i[GPIO_TIO-1:0]) // GPIO SOC tristate input + ,.soc_gpio_port0_o (soc_gpio_port0_o[GPIO_TIO-1:0]) // GPIO SOC trstate output + ,.soc_gpio_port0_e (soc_gpio_port0_e[GPIO_TIO-1:0]) // GPIO SOC tristate output enable + ,.soc_gpio_port0_z (soc_gpio_port0_z[GPIO_TIO-1:0]) // GPIO SOC tristate output hiz + ,.soc_gpio_port1_i (soc_gpio_port1_i[GPIO_TIO-1:0]) // GPIO SOC tristate input + ,.soc_gpio_port1_o (soc_gpio_port1_o[GPIO_TIO-1:0]) // GPIO SOC trstate output + ,.soc_gpio_port1_e (soc_gpio_port1_e[GPIO_TIO-1:0]) // GPIO SOC tristate output enable + ,.soc_gpio_port1_z (soc_gpio_port1_z[GPIO_TIO-1:0]) // GPIO SOC tristate output hiz +); + + nanosoc_chip u_nanosoc_chip ( +`ifdef POWER_PINS + .VDD (VDD), + .VSS (VSS), + .VDDACC (VDDACC), +`endif +//`ifdef ASIC_TEST_PORTS + .diag_mode (soc_diag_mode ), + .diag_ctrl (soc_diag_ctrl ), + .scan_mode (soc_scan_mode ), + .scan_enable (soc_scan_enable ), + .scan_in (soc_scan_in ), // soc test scan chain inputs + .scan_out (soc_scan_out ), // soc test scan chain outputs + .bist_mode (soc_bist_mode ), + .bist_enable (soc_bist_enable ), + .bist_in (soc_bist_in ), // soc bist control inputs + .bist_out (soc_bist_out ), // soc test status outputs + .alt_mode (soc_alt_mode ),// ALT MODE = UART + .uart_rxd_i (soc_uart_rxd_i ), // UART RXD + .uart_txd_o (soc_uart_txd_o ), // UART TXD + .swd_mode (soc_swd_mode ), // SWD mode +//`endif + .clk_i(pad_clk_i), + .test_i(soc_scan_mode), + .nrst_i(soc_nreset), + .p0_i(soc_gpio_port0_i), // level-shifted input from pad + .p0_o(soc_gpio_port0_o), // output port drive + .p0_e(soc_gpio_port0_e), // active high output drive enable (pad tech dependent) + .p0_z(soc_gpio_port0_z), // active low output drive enable (pad tech dependent) + .p1_i(soc_gpio_port1_i), // level-shifted input from pad + .p1_o(soc_gpio_port1_o), // output port drive + .p1_e(soc_gpio_port1_e), // active high output drive enable (pad tech dependent) + .p1_z(soc_gpio_port1_z), // active low output drive enable (pad tech dependent) + .swdio_i(soc_swd_dio_i), + .swdio_o(soc_swd_dio_o), + .swdio_e(soc_swd_dio_e), + .swdio_z(soc_swd_dio_z), + .swdclk_i(pad_swdclk_i) + ); + + + // -------------------------------------------------------------------------------- + // IO pad (TSMC 65nm specific Library napping) + // -------------------------------------------------------------------------------- + +// Pad IO power supplies + +PVDD2CDG uPAD_VDDIO_0( + .VDDPST(VDDIO) + ); +//PVDD2CDG uPAD_VDDIO_1( +// .VDDPST(VDDIO) +// ); +PVDD2CDG uPAD_VDDIO_2( + .VDDPST(VDDIO) + ); +PVDD2POC uPAD_VDDIO_3( + .VDDPST(VDDIO) + ); + +PVSS2CDG uPAD_VSSIO_0( + .VSSPST(VSSIO) + ); +PVSS2CDG uPAD_VSSIO_1( + .VSSPST(VSSIO) + ); + +// Core power supplies + +PVDD1CDG uPAD_VDD_0( + .VDD(VDD) + ); +PVDD1CDG uPAD_VDD_1( + .VDD(VDD) + ); +PVDD1CDG uPAD_VDD_2( + .VDD(VDD) + ); +PVDD1CDG uPAD_VDD_3( + .VDD(VDD) + ); + +PVSS1CDG uPAD_VSS_0( + .VSS(VSS) + ); +PVSS1CDG uPAD_VSS_1( + .VSS(VSS) + ); +PVSS1CDG uPAD_VSS_2( + .VSS(VSS) + ); +PVSS1CDG uPAD_VSS_3( + .VSS(VSS) + ); +// Accelerator Power supplies +PVDD1CDG uPAD_VDDACC_0( + .VDD(VDDACC) + ); +PVDD1CDG uPAD_VDDACC_1( + .VDD(VDDACC) + ); +PVDD1CDG uPAD_VDDACC_2( + .VDD(VDDACC) + ); + +// Clock, Reset and Serial Wire Debug ports + +PRDW0408SCDG uPAD_SE_I ( + .IE(tiehi), + .C(pad_se_i), + .PE(tielo), + .DS(tielo), + .I(tielo), + .OEN(tiehi), + .PAD(SE) + ); + + +PRDW0408SCDG uPAD_CLK_I ( + .IE(tiehi), + .C(pad_clk_i), + .PE(tielo), + .DS(tielo), + .I(tielo), + .OEN(tiehi), + .PAD(CLK) + ); + +PRDW0408SCDG uPAD_TEST_I ( + .IE(tiehi), + .C(pad_test_i), + .PE(tielo), + .DS(tielo), + .I(tielo), + .OEN(tiehi), + .PAD(TEST) + ); + +PRDW0408SCDG uPAD_NRST_I ( + .IE(tiehi), + .C(pad_nrst_i), + .PE(tielo), + .DS(tielo), + .I(tielo), + .OEN(tiehi), + .PAD(NRST) + ); + +PRDW0408SCDG uPAD_SWDIO_IO ( + .IE(pad_swdio_z), + .C(pad_swdio_i), + .PE(tielo), + .DS(tielo), + .I(pad_swdio_o), + .OEN(pad_swdio_z), + .PAD(SWDIO) + ); + +PRDW0408SCDG uPAD_SWDCK_I ( + .IE(tiehi), + .C(pad_swdclk_i), + .PE(tielo), + .DS(tielo), + .I(tielo), + .OEN(tiehi), + .PAD(SWDCK) + ); + +// GPI.I Port 0 x 16 + +PRDW0408SCDG uPAD_P0_00 ( + .IE(pad_gpio_port0_z[00]), + .C(pad_gpio_port0_i[00]), + .PE(pad_gpio_port0_z[00]&pad_gpio_port0_o[00]), + .DS(tielo), + .I(pad_gpio_port0_o[00]), + .OEN(pad_gpio_port0_z[00]), + .PAD(P0[00]) + ); + +PRDW0408SCDG uPAD_P0_01 ( + .IE(pad_gpio_port0_z[01]), + .C(pad_gpio_port0_i[01]), + .PE(pad_gpio_port0_z[01]&pad_gpio_port0_o[01]), + .DS(tielo), + .I(pad_gpio_port0_o[01]), + .OEN(pad_gpio_port0_z[01]), + .PAD(P0[01]) + ); + +PRDW0408SCDG uPAD_P0_02 ( + .IE(pad_gpio_port0_z[02]), + .C(pad_gpio_port0_i[02]), + .PE(pad_gpio_port0_z[02]&pad_gpio_port0_o[02]), + .DS(tielo), + .I(pad_gpio_port0_o[02]), + .OEN(pad_gpio_port0_z[02]), + .PAD(P0[02]) + ); + +PRDW0408SCDG uPAD_P0_03 ( + .IE(pad_gpio_port0_z[03]), + .C(pad_gpio_port0_i[03]), + .PE(pad_gpio_port0_z[03]&pad_gpio_port0_o[03]), + .DS(tielo), + .I(pad_gpio_port0_o[03]), + .OEN(pad_gpio_port0_z[03]), + .PAD(P0[03]) + ); + +PRDW0408SCDG uPAD_P0_04 ( + .IE(pad_gpio_port0_z[04]), + .C(pad_gpio_port0_i[04]), + .PE(pad_gpio_port0_z[04]&pad_gpio_port0_o[04]), + .DS(tielo), + .I(pad_gpio_port0_o[04]), + .OEN(pad_gpio_port0_z[04]), + .PAD(P0[04]) + ); + +PRDW0408SCDG uPAD_P0_05 ( + .IE(pad_gpio_port0_z[05]), + .C(pad_gpio_port0_i[05]), + .PE(pad_gpio_port0_z[05]&pad_gpio_port0_o[05]), + .DS(tielo), + .I(pad_gpio_port0_o[05]), + .OEN(pad_gpio_port0_z[05]), + .PAD(P0[05]) + ); + +PRDW0408SCDG uPAD_P0_06 ( + .IE(pad_gpio_port0_z[06]), + .C(pad_gpio_port0_i[06]), + .PE(pad_gpio_port0_z[06]&pad_gpio_port0_o[06]), + .DS(tielo), + .I(pad_gpio_port0_o[06]), + .OEN(pad_gpio_port0_z[06]), + .PAD(P0[06]) + ); + +PRDW0408SCDG uPAD_P0_07 ( + .IE(pad_gpio_port0_z[07]), + .C(pad_gpio_port0_i[07]), + .PE(pad_gpio_port0_z[07]&pad_gpio_port0_o[07]), + .DS(tielo), + .I(pad_gpio_port0_o[07]), + .OEN(pad_gpio_port0_z[07]), + .PAD(P0[07]) + ); +// GPI.I Port 1 x 16 + +PRDW0408SCDG uPAD_P1_00 ( + .IE(pad_gpio_port1_z[00]), + .C(pad_gpio_port1_i[00]), + .PE(pad_gpio_port1_z[00]&pad_gpio_port1_o[00]), + .DS(tielo), + .I(pad_gpio_port1_o[00]), + .OEN(pad_gpio_port1_z[00]), + .PAD(P1[00]) + ); + +PRDW0408SCDG uPAD_P1_01 ( + .IE(pad_gpio_port1_z[01]), + .C(pad_gpio_port1_i[01]), + .PE(pad_gpio_port1_z[01]&pad_gpio_port1_o[01]), + .DS(tielo), + .I(pad_gpio_port1_o[01]), + .OEN(pad_gpio_port1_z[01]), + .PAD(P1[01]) + ); + +PRDW0408SCDG uPAD_P1_02 ( + .IE(pad_gpio_port1_z[02]), + .C(pad_gpio_port1_i[02]), + .PE(pad_gpio_port1_z[02]&pad_gpio_port1_o[02]), + .DS(tielo), + .I(pad_gpio_port1_o[02]), + .OEN(pad_gpio_port1_z[02]), + .PAD(P1[02]) + ); + +PRDW0408SCDG uPAD_P1_03 ( + .IE(pad_gpio_port1_z[03]), + .C(pad_gpio_port1_i[03]), + .PE(pad_gpio_port1_z[03]&pad_gpio_port1_o[03]), + .DS(tielo), + .I(pad_gpio_port1_o[03]), + .OEN(pad_gpio_port1_z[03]), + .PAD(P1[03]) + ); + +PRDW0408SCDG uPAD_P1_04 ( + .IE(pad_gpio_port1_z[04]), + .C(pad_gpio_port1_i[04]), + .PE(pad_gpio_port1_z[04]&pad_gpio_port1_o[04]), + .DS(tielo), + .I(pad_gpio_port1_o[04]), + .OEN(pad_gpio_port1_z[04]), + .PAD(P1[04]) + ); + +PRDW0408SCDG uPAD_P1_05 ( + .IE(pad_gpio_port1_z[05]), + .C(pad_gpio_port1_i[05]), + .PE(pad_gpio_port1_z[05]&pad_gpio_port1_o[05]), + .DS(tielo), + .I(pad_gpio_port1_o[05]), + .OEN(pad_gpio_port1_z[05]), + .PAD(P1[05]) + ); + +PRDW0408SCDG uPAD_P1_06 ( + .IE(pad_gpio_port1_z[06]), + .C(pad_gpio_port1_i[06]), + .PE(pad_gpio_port1_z[06]&pad_gpio_port1_o[06]), + .DS(tielo), + .I(pad_gpio_port1_o[06]), + .OEN(pad_gpio_port1_z[06]), + .PAD(P1[06]) + ); + +PRDW0408SCDG uPAD_P1_07 ( + .IE(pad_gpio_port1_z[07]), + .C(pad_gpio_port1_i[07]), + .PE(pad_gpio_port1_z[07]&pad_gpio_port1_o[07]), + .DS(tielo), + .I(pad_gpio_port1_o[07]), + .OEN(pad_gpio_port1_z[07]), + .PAD(P1[07]) + ); + + +assign pad_gpio_port0_i[8] = pad_gpio_port0_o[8] & pad_gpio_port0_e[8]; +assign pad_gpio_port0_i[9] = pad_gpio_port0_o[9] & pad_gpio_port0_e[9]; +assign pad_gpio_port0_i[10] = pad_gpio_port0_o[10] & pad_gpio_port0_e[10]; +assign pad_gpio_port0_i[11] = pad_gpio_port0_o[11] & pad_gpio_port0_e[11]; +assign pad_gpio_port0_i[12] = pad_gpio_port0_o[12] & pad_gpio_port0_e[12]; +assign pad_gpio_port0_i[13] = pad_gpio_port0_o[13] & pad_gpio_port0_e[13]; +assign pad_gpio_port0_i[14] = pad_gpio_port0_o[14] & pad_gpio_port0_e[14]; +assign pad_gpio_port0_i[15] = pad_gpio_port0_o[15] & pad_gpio_port0_e[15]; + +assign pad_gpio_port1_i[8] = pad_gpio_port1_o[8] & pad_gpio_port1_e[8]; +assign pad_gpio_port1_i[9] = pad_gpio_port1_o[9] & pad_gpio_port1_e[9]; +assign pad_gpio_port1_i[10] = pad_gpio_port1_o[10] & pad_gpio_port1_e[10]; +assign pad_gpio_port1_i[11] = pad_gpio_port1_o[11] & pad_gpio_port1_e[11]; +assign pad_gpio_port1_i[12] = pad_gpio_port1_o[12] & pad_gpio_port1_e[12]; +assign pad_gpio_port1_i[13] = pad_gpio_port1_o[13] & pad_gpio_port1_e[13]; +assign pad_gpio_port1_i[14] = pad_gpio_port1_o[14] & pad_gpio_port1_e[14]; +assign pad_gpio_port1_i[15] = pad_gpio_port1_o[15] & pad_gpio_port1_e[15]; + +endmodule + + + diff --git a/flows/makefile.asic b/flows/makefile.asic index 34d8c16dbf583640ba95e52c8c09fa1a332063d9..021806438d15c85c2c7323bfdf72f907da18f565 100644 --- a/flows/makefile.asic +++ b/flows/makefile.asic @@ -34,19 +34,30 @@ FORMALITY_OUTPUT_FILELIST := $(TCL_ASIC_FLIST_DIR)/formality_flist.tcl DC_OUTPUT_FILELIST := $(TCL_ASIC_FLIST_DIR)/dc_flist.tcl # Location of outputs from synthesis -MEMORIES_DIR := $(SOCLABS_PROJECT_DIR)/memories -RF_16K_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/rf_16k.spec -RF_08K_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/rf_08k.spec -ROM_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/rom_via.spec -BOOTROM_BIN_FILE_IN := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.bintxt -BOOTROM_BIN_FILE := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.rcf -RF_16K_DIR := $(MEMORIES_DIR)/rf_16k -RF_08K_DIR := $(MEMORIES_DIR)/rf_08k -ROM_DIR := $(MEMORIES_DIR)/bootrom -REPORTS_FOLDER := $(IMP_NANOSOC_ASIC_DIR)/reports -SYN_LOGS := $(IMP_NANOSOC_ASIC_DIR)/logs -NETLIST_FOLDER := $(IMP_NANOSOC_ASIC_DIR)/netlist/ -NANOSOC_SYNTH_DIR := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/ +MEMORIES_DIR := $(SOCLABS_PROJECT_DIR)/memories +RF_16K_65nm_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC65nm/rf_16k.spec +RF_08K_65nm_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC65nm/rf_08k.spec +ROM_65nm_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC65nm/rom_via.spec +SRAM_16K_28nm_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC28nm/sram_16k.spec +ROM_28nm_SPEC_FILE := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC28nm/rom_via.spec +BOOTROM_BIN_FILE_IN := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.bintxt +BOOTROM_BIN_FILE := $(SOCLABS_PROJECT_DIR)/system/src/bootrom/bintxt/bootrom.rcf +RF_16K_DIR := $(MEMORIES_DIR)/rf_16k +RF_08K_DIR := $(MEMORIES_DIR)/rf_08k +ROM_DIR := $(MEMORIES_DIR)/bootrom +SRAM_16K_DIR := $(MEMORIES_DIR)/sram_16k + +REPORTS_FOLDER := $(IMP_NANOSOC_ASIC_DIR)/reports +SYN_LOGS := $(IMP_NANOSOC_ASIC_DIR)/logs +NETLIST_FOLDER := $(IMP_NANOSOC_ASIC_DIR)/netlist/ + +NODE ?= 65 + +ifeq ($(NODE),65) + NANOSOC_SYNTH_DIR := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC65nm +else + NANOSOC_SYNTH_DIR := $(SOCLABS_NANOSOC_TECH_DIR)/ASIC/TSMC28nm +endif # NanoSoC Tech Flow Dependencies NANOSOC_FPGA_FLOW_DIR := $(SOCLABS_NANOSOC_TECH_DIR)/fpga @@ -81,17 +92,48 @@ gen_memories: bootrom cp $(BOOTROM_BIN_FILE_IN) $(BOOTROM_BIN_FILE) echo "Generating register file memory libraries" echo "16K RF" - cd $(RF_16K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt all -spec $(RF_16K_SPEC_FILE); - cd $(RF_16K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt liberty -spec $(RF_16K_SPEC_FILE); + cd $(RF_16K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt all -spec $(RF_16K_65nm_SPEC_FILE); + cd $(RF_16K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt liberty -spec $(RF_16K_65nm_SPEC_FILE); echo "8K RF" - cd $(RF_08K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt all -spec $(RF_08K_SPEC_FILE); - cd $(RF_08K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt liberty -spec $(RF_08K_SPEC_FILE); + cd $(RF_08K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt all -spec $(RF_08K_65nm_SPEC_FILE); + cd $(RF_08K_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rf_sp_hdf_hvt_rvt/r0p0/bin/rf_sp_hdf_hvt_rvt liberty -spec $(RF_08K_65nm_SPEC_FILE); cd $(ROM_DIR) echo "Generating ROM Libraries" - cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rom_via_hdd_rvt_rvt/r0p0/bin/rom_via_hdd_rvt_rvt liberty -spec $(ROM_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); - cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rom_via_hdd_rvt_rvt/r0p0/bin/rom_via_hdd_rvt_rvt all -spec $(ROM_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rom_via_hdd_rvt_rvt/r0p0/bin/rom_via_hdd_rvt_rvt liberty -spec $(ROM_65nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln65lp/rom_via_hdd_rvt_rvt/r0p0/bin/rom_via_hdd_rvt_rvt all -spec $(ROM_65nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); echo "Finished generating memory libraries" +gen_memories_frontend_28nm: bootrom + @mkdir -p $(MEMORIES_DIR) + @mkdir -p $(SRAM_16K_DIR) + @mkdir -p $(ROM_DIR) + cp $(BOOTROM_BIN_FILE_IN) $(BOOTROM_BIN_FILE) + echo "Generating 16K SRAM Memory" + cd $(SRAM_16K_DIR); $(PHYS_IP)/arm/tsmc/cln28ht/sram_sp_hde_hvt_mvt/r0p0/bin/sram_sp_hde_hvt_mvt ascii -spec $(SRAM_16K_28nm_SPEC_FILE) + cd $(SRAM_16K_DIR); $(PHYS_IP)/arm/tsmc/cln28ht/sram_sp_hde_hvt_mvt/r0p0/bin/sram_sp_hde_hvt_mvt emulation -spec $(SRAM_16K_28nm_SPEC_FILE) + cd $(SRAM_16K_DIR); $(PHYS_IP)/arm/tsmc/cln28ht/sram_sp_hde_hvt_mvt/r0p0/bin/sram_sp_hde_hvt_mvt verilog -spec $(SRAM_16K_28nm_SPEC_FILE) + cd $(SRAM_16K_DIR); $(PHYS_IP)/arm/tsmc/cln28ht/sram_sp_hde_hvt_mvt/r0p0/bin/sram_sp_hde_hvt_mvt liberty -spec $(SRAM_16K_28nm_SPEC_FILE) + echo "Generating ROM Libraries" + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln28ht//rom_via_hdd_2_svt_mvt/r0p0/bin/rom_via_hdd_2_svt_mvt ascii -spec $(ROM_28nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln28ht//rom_via_hdd_2_svt_mvt/r0p0/bin/rom_via_hdd_2_svt_mvt emulation -spec $(ROM_28nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln28ht//rom_via_hdd_2_svt_mvt/r0p0/bin/rom_via_hdd_2_svt_mvt verilog -spec $(ROM_28nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln28ht//rom_via_hdd_2_svt_mvt/r0p0/bin/rom_via_hdd_2_svt_mvt liberty -spec $(ROM_28nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + +gen_memories_backend_28nm: bootrom + @mkdir -p $(MEMORIES_DIR) + @mkdir -p $(SRAM_16K_DIR) + @mkdir -p $(ROM_DIR) + cp $(BOOTROM_BIN_FILE_IN) $(BOOTROM_BIN_FILE) + echo "Generating 16K RF Memory" + cd $(SRAM_16K_DIR); $(PHYS_IP)/arm/tsmc/cln28ht/sram_sp_hde_2_svt_mvt/r0p0/bin/sram_sp_hde_2_svt_mvt lef-fp -spec $(SRAM_16K_28nm_SPEC_FILE) + cd $(SRAM_16K_DIR); $(PHYS_IP)/arm/tsmc/cln28ht/sram_sp_hde_2_svt_mvt/r0p0/bin/sram_sp_hde_2_svt_mvt gds2 -spec $(SRAM_16K_28nm_SPEC_FILE) + echo "Generating ROM Libraries" + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln28ht//rom_via_hdd_2_svt_mvt/r0p0/bin/rom_via_hdd_2_svt_mvt lef-fp -spec $(ROM_28nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + cd $(ROM_DIR); $(PHYS_IP)/arm/tsmc/cln28ht//rom_via_hdd_2_svt_mvt/r0p0/bin/rom_via_hdd_2_svt_mvt gds2 -spec $(ROM_28nm_SPEC_FILE) -code_file $(BOOTROM_BIN_FILE); + +gen_memories_28nm: gen_memories_frontend_28nm gen_memories_backend_28nm + + convert_mem_to_db: lc_shell -no_log -f $(NANOSOC_SYNTH_DIR)/synopsys_lib_conversion.tcl diff --git a/makefile b/makefile index 54c381488b048652c16890c42c2c96bb1d5e5e36..5d35c1248258fac15017f8d2e0fc2b134c989902 100644 --- a/makefile +++ b/makefile @@ -124,6 +124,45 @@ ifdef ADC_3_INCLUDE FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/sl_ams_tech/SL_ADC_8bits/flist/sl_adc_8bits_ip.flist endif +ifdef SNPS_PVT_TS_0_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_TS_0_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_TS_1_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_TS_1_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_TS_2_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_TS_2_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_TS_3_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_TS_3_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_TS_4_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_TS_4_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_TS_5_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_TS_5_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_PD_0_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_PD_0_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif + +ifdef SNPS_PVT_VM_0_INCLUDE + NANOSOC_DEFINES += SNPS_PVT_MONITORING SNPS_PVT_VM_0_INCLUDE + FLIST_INCLUDES += $(SOCLABS_NANOSOC_TECH_DIR)/nanosoc/synopsys_28nm_slm_integration/flist/synopsys_pvt_ip.flist +endif # System Design Filelist diff --git a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v index cf3ac0d42c8bca6d512b48d82d69c59c3314bb26..3d3526cf055449e2f023571e9cdddd2b490d6ebe 100644 --- a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v +++ b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v @@ -147,6 +147,10 @@ module nanosoc_region_sysio #( wire [SYS_DATA_W-1:0] adcsys_hrdata; wire adcsys_hresp; + wire pvtsys_hsel; // ADC subsystem AHB interface signals + wire pvtsys_hreadyout; + wire [SYS_DATA_W-1:0] pvtsys_hrdata; + wire pvtsys_hresp; // AHB address decode @@ -166,6 +170,9 @@ module nanosoc_region_sysio #( .sysctrl_hsel (sysctrl_hsel), `ifdef AMS_PERIPHERALS .adcsys_hsel (adcsys_hsel), + `endif + `ifdef SNPS_PVT_MONITORING + .pvtsys_hsel (pvtsys_hsel), `endif .defslv_hsel (defslv_hsel) ); @@ -174,6 +181,11 @@ module nanosoc_region_sysio #( `else parameter AMS_PERIPHERAL_PORT = 0; `endif +`ifdef SNPS_PVT_MONITORING + parameter SNPS_PERIPHERAL_PORT = 1; +`else + parameter SNPS_PERIPHERAL_PORT = 0; +`endif // AHB slave multiplexer cmsdk_ahb_slave_mux #( .PORT0_ENABLE (1), // APB subsystem bridge @@ -182,7 +194,7 @@ module nanosoc_region_sysio #( .PORT3_ENABLE (1), // SYS control .PORT4_ENABLE (1), // Default .PORT5_ENABLE (AMS_PERIPHERAL_PORT), // ADC Region - .PORT6_ENABLE (0), + .PORT6_ENABLE (SNPS_PERIPHERAL_PORT), // Synopsys PVT monitoring region .PORT7_ENABLE (0), .PORT8_ENABLE (0), .PORT9_ENABLE (0), @@ -215,10 +227,10 @@ module nanosoc_region_sysio #( .HREADYOUT5 (adcsys_hreadyout), .HRESP5 (adcsys_hresp), .HRDATA5 (adcsys_hrdata), - .HSEL6 (1'b0), // Input Port 6 - .HREADYOUT6 (defslv_hreadyout), - .HRESP6 (defslv_hresp), - .HRDATA6 (defslv_hrdata), + .HSEL6 (pvtsys_hsel), // Input Port 6 + .HREADYOUT6 (pvtsys_hreadyout), + .HRESP6 (pvtsys_hresp), + .HRDATA6 (pvtsys_hrdata), .HSEL7 (1'b0), // Input Port 7 .HREADYOUT7 (defslv_hreadyout), .HRESP7 (defslv_hresp), @@ -504,4 +516,57 @@ module nanosoc_region_sysio #( ); `endif +`ifdef SNPS_PVT_MONITORING + nanosoc_sysio_snps_pvt_ss #( + `ifdef SNPS_PVT_TS_0_INCLUDE + .SNPS_PVT_TS_0_ENABLE (1), + `endif + `ifdef SNPS_PVT_TS_1_INCLUDE + .SNPS_PVT_TS_1_ENABLE (1), + `endif + `ifdef SNPS_PVT_TS_2_INCLUDE + .SNPS_PVT_TS_2_ENABLE (1), + `endif + `ifdef SNPS_PVT_TS_3_INCLUDE + .SNPS_PVT_TS_3_ENABLE (1), + `endif + `ifdef SNPS_PVT_TS_4_INCLUDE + .SNPS_PVT_TS_4_ENABLE (1), + `endif + `ifdef SNPS_PVT_TS_5_INCLUDE + .SNPS_PVT_TS_5_ENABLE (1), + `endif + `ifdef SNPS_PVT_VM_0_INCLUDE + .SNPS_PVT_VM_0_ENABLE (1), + `endif + `ifdef SNPS_PVT_PD_0_INCLUDE + .SNPS_PVT_PD_0_ENABLE (1), + `endif + .INCLUDE_IRQ_SYNCHRONIZER(0), // require IRQs to be HCLK synchronous + .INCLUDE_APB_TEST_SLAVE (1), // Include example test slave + .BE (BE) + + ) u_nanosoc_sysio_snps_pvt_ss( + .HCLK(HCLK), + .HRESETn(HRESETn), + + .HSEL(pvtsys_hsel), + .HADDR(HADDR[15:0]), + .HTRANS(HTRANS[1:0]), + .HWRITE(HWRITE), + .HSIZE(HSIZE), + .HPROT(HPROT), + .HREADY(HREADY), + .HWDATA(HWDATA[31:0]), + + .HREADYOUT(pvtsys_hreadyout), + .HRDATA(pvtsys_hrdata), + .HRESP(pvtsys_hresp), + + .PCLK(PCLK), // Peripheral clock + .PCLKG(PCLKG), // Gate PCLK for bus interface only + .PCLKEN(PCLKEN), // Clock divider for AHB to APB bridge + .PRESETn(PRESETn) // APB reset + ); +`endif endmodule diff --git a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v index 5cb63f01ad43dda6766228a50265b89ffa72511a..d338ff81e4745e105303d9abf6d022aae1010386 100644 --- a/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v +++ b/nanosoc/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v @@ -49,7 +49,8 @@ module nanosoc_sysio_decode #( parameter BASEADDR_GPIO1 = 32'h4001_1000, // Sysctrl base address parameter BASEADDR_SYSCTRL = 32'h4001_f000, - parameter BASEADDR_ADC = 32'h4002_0000 + parameter BASEADDR_ADC = 32'h4002_0000, + parameter BASEADDR_PVT = 32'h4002_1000 )( // System Address input wire hsel, @@ -62,6 +63,9 @@ module nanosoc_sysio_decode #( output wire sysctrl_hsel, `ifdef AMS_PERIPHERALS output wire adcsys_hsel, + `endif + `ifdef SNPS_PVT_MONITORING + output wire pvtsys_hsel, `endif // Default slave output wire defslv_hsel @@ -88,21 +92,38 @@ module nanosoc_sysio_decode #( `ifdef AMS_PERIPHERALS assign adcsys_hsel = hsel & (haddr[31:12]== BASEADDR_ADC[31:12]); // 0x40020000 +`endif +`ifdef SNPS_PVT_MONITORING + assign pvtsys_hsel = hsel & (haddr[31:12]== + BASEADDR_PVT[31:12]); // 0x40021000 `endif // ---------------------------------------------------------- // Default slave decode logic // ---------------------------------------------------------- `ifdef AMS_PERIPHERALS - assign defslv_hsel = ~(apbsys_hsel | - gpio0_hsel | gpio1_hsel | - sysctrl_hsel | adcsys_hsel - ); + `ifdef SNPS_PVT_MONITORING + assign defslv_hsel = ~(apbsys_hsel | + gpio0_hsel | gpio1_hsel | + sysctrl_hsel | adcsys_hsel | pvtsys_hsel + ); + `else + assign defslv_hsel = ~(apbsys_hsel | + gpio0_hsel | gpio1_hsel | + sysctrl_hsel | adcsys_hsel + ); + `endif `else - assign defslv_hsel = ~(apbsys_hsel | - gpio0_hsel | gpio1_hsel | - sysctrl_hsel - ); - + `ifdef SNPS_PVT_MONITORING + assign defslv_hsel = ~(apbsys_hsel | + gpio0_hsel | gpio1_hsel | + sysctrl_hsel | pvtsys_hsel + ); + `else + assign defslv_hsel = ~(apbsys_hsel | + gpio0_hsel | gpio1_hsel | + sysctrl_hsel + ); + `endif `endif endmodule diff --git a/nanosoc/synopsys_28nm_slm_integration b/nanosoc/synopsys_28nm_slm_integration new file mode 160000 index 0000000000000000000000000000000000000000..5ece300bcb4e7dd8cd0c4cc141e7faa8f42e3e23 --- /dev/null +++ b/nanosoc/synopsys_28nm_slm_integration @@ -0,0 +1 @@ +Subproject commit 5ece300bcb4e7dd8cd0c4cc141e7faa8f42e3e23 diff --git a/projbranch b/projbranch index e48885b7170673032e64a2f52c2f0ab9013d39f7..b0d91a8156b3db1cbbb503e7f1fb38ceba1e66b2 100644 --- a/projbranch +++ b/projbranch @@ -13,4 +13,5 @@ nanosoc/slcorem0_tech: main nanosoc/sldma230_tech: main nanosoc/socdebug_tech: main -nanosoc/sldma350_tech: main \ No newline at end of file +nanosoc/sldma350_tech: main +nanosoc/sl_ams_tech: main \ No newline at end of file diff --git a/software/common/validation/snps_pvt_tests.c b/software/common/validation/snps_pvt_tests.c new file mode 100644 index 0000000000000000000000000000000000000000..c477da419e2e2726ca99c55c5709ba9f390f440c --- /dev/null +++ b/software/common/validation/snps_pvt_tests.c @@ -0,0 +1,380 @@ +/* + *----------------------------------------------------------------------------- + * The confidential and proprietary information contained in this file may + * only be used by a person authorised under and to the extent permitted + * by a subsisting licensing agreement from Arm Limited or its affiliates. + * + * (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. + * ALL RIGHTS RESERVED + * + * This entire notice must be reproduced on all copies of this file + * and copies of this file may only be made by a person if such person is + * permitted to do so under the terms of a subsisting license agreement + * from Arm Limited or its affiliates. + * + * SVN Information + * + * Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ + * + * Revision : $Revision: 371321 $ + * + * Release Information : Cortex-M System Design Kit-r1p1-00rel0 + *----------------------------------------------------------------------------- + */ + +/* + A simple test to check the operation of APB slave multiplexer +*/ + + +#ifdef CORTEX_M0 +#include "CMSDK_CM0.h" +#endif + +#ifdef CORTEX_M0PLUS +#include "CMSDK_CM0plus.h" +#endif + +#ifdef CORTEX_M3 +#include "CMSDK_CM3.h" +#endif + +#ifdef CORTEX_M4 +#include "CMSDK_CM4.h" +#endif + +#include <stdio.h> +#include "uart_stdout.h" + +#define HW32_REG(ADDRESS) (*((volatile unsigned long *)(ADDRESS))) +#define HW16_REG(ADDRESS) (*((volatile unsigned short *)(ADDRESS))) +#define HW8_REG(ADDRESS) (*((volatile unsigned char *)(ADDRESS))) + +int snps_pvt_ts_detect(void); +int snps_pvt_pd_detect(void); +int ts0_check_registers(void); +int pd0_check_registers(void); + +#if defined ( __CC_ARM ) +__asm void address_test_write(unsigned int addr, unsigned int wdata); +__asm unsigned int address_test_read(unsigned int addr); +#else + void address_test_write(unsigned int addr, unsigned int wdata); + unsigned int address_test_read(unsigned int addr); +#endif +void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value); +int APB_test_slave_Check(unsigned int offset); + +/* Global variables */ +volatile int hardfault_occurred; +volatile int hardfault_expected; +volatile int temp_data; + int hardfault_verbose=0; // 0:Not displaying anything in hardfault handler + +#define SNPS_PVT_BASE (0x40021000UL) +#define SNPS_TS_0_BASE (SNPS_PVT_BASE + 0x0000UL) +#define SNPS_TS_1_BASE (SNPS_PVT_BASE + 0x0010UL) +#define SNPS_TS_2_BASE (SNPS_PVT_BASE + 0x0020UL) +#define SNPS_TS_3_BASE (SNPS_PVT_BASE + 0x0030UL) +#define SNPS_TS_4_BASE (SNPS_PVT_BASE + 0x0040UL) +#define SNPS_TS_5_BASE (SNPS_PVT_BASE + 0x0050UL) +#define SNPS_PD_0_BASE (SNPS_PVT_BASE + 0x0060UL) +#define SNPS_VM_0_BASE (SNPS_PVT_BASE + 0x0060UL) + +int main (void) +{ + + int err_code = 0; + int data[64]; + int i; + // UART init + UartStdOutInit(); + + // Test banner message and revision number + puts("\nCortex Microcontroller System Design Kit"); + puts(" - Synopsys PVT test - revision $Revision: 371321 $\n"); + + if(snps_pvt_pd_detect()==0) { + err_code += pd0_check_registers(); + } + + printf("\n\n ************************************ \n\n"); + + if((snps_pvt_ts_detect()==0)) { + err_code += ts0_check_registers(); + } + + + if (err_code==0) { + printf ("\n** TEST PASSED **\n"); + } else { + printf ("\n** TEST FAILED **, Error code = (0x%x)\n", err_code); + } + UartEndSimulation(); + return 0; +} + +int ts0_check_registers(void) +{ + uint32_t ts0_reg; + float temperature; + float K=81.1; + float Y=237.5; + puts("Testing status read/write access \n"); + ts0_reg = address_test_read(SNPS_TS_0_BASE + 0x000); + printf("Status after reset: 0x%08X \n", ts0_reg); + ts0_reg = ts0_reg ^ 1; + address_test_write(SNPS_TS_0_BASE, ts0_reg); + ts0_reg = address_test_read(SNPS_TS_0_BASE); + printf("Status register after enable: 0x%08X \n", ts0_reg); + while(!(address_test_read(SNPS_TS_0_BASE)&0x10)){;} + printf("TS reset released \n"); + ts0_reg = address_test_read(SNPS_TS_0_BASE); + ts0_reg = ts0_reg ^ 2; + address_test_write(SNPS_TS_0_BASE, ts0_reg); + printf("TS Run enabled \n"); + while(!(address_test_read(SNPS_TS_0_BASE)&0x1000000)){;} + ts0_reg = address_test_read(SNPS_TS_0_BASE + 0x04); + temperature = (ts0_reg*Y/4094) - K; + + printf("Temperature read data: 0x%08X = %f\n", ts0_reg,temperature); + + // Clear ready reg + ts0_reg = address_test_read(SNPS_TS_0_BASE); + ts0_reg = ts0_reg ^ 0x8; + address_test_write(SNPS_TS_0_BASE, ts0_reg); + ts0_reg = address_test_read(SNPS_TS_0_BASE); + printf("Status register after clear ready: 0x%08X \n", ts0_reg); + + // Enable continuous running + ts0_reg = ts0_reg ^ 0x4; + address_test_write(SNPS_TS_0_BASE, ts0_reg); + printf("TS Run continuous enabled \n"); + + while(!(address_test_read(SNPS_TS_0_BASE)&0x1000000)){;} + ts0_reg = address_test_read(SNPS_TS_0_BASE + 0x04); + temperature = (ts0_reg*Y/4094) - K; + + printf("Temperature 1 read data: 0x%08X = %f\n", ts0_reg,temperature); + // Clear ready reg + ts0_reg = address_test_read(SNPS_TS_0_BASE); + ts0_reg = ts0_reg ^ 0x8; + address_test_write(SNPS_TS_0_BASE, ts0_reg); + + while(!(address_test_read(SNPS_TS_0_BASE)&0x1000000)){;} + ts0_reg = address_test_read(SNPS_TS_0_BASE + 0x04); + temperature = (ts0_reg*Y/4094) - K; + + printf("Temperature 2 read data: 0x%08X = %f\n", ts0_reg,temperature); + + // Clear ready and continuous read + ts0_reg = address_test_read(SNPS_TS_0_BASE); + ts0_reg = ts0_reg ^ 0xC; + address_test_write(SNPS_TS_0_BASE, ts0_reg); + ts0_reg = address_test_read(SNPS_TS_0_BASE); + + + return 0; +} + +int pd0_check_registers(void){ + uint32_t pd0_reg; + uint32_t pd2_reg; + float frequency; + int prescaler = 32; + int window_size = 63; + float f_clk = 6; + puts("Testing PD0 status read/write access \n"); + pd2_reg = address_test_read(SNPS_PD_0_BASE + 0x008); + printf("Config regs after reset: 0x%08X \n", pd2_reg); + + // Enable PD + pd0_reg = address_test_read(SNPS_PD_0_BASE); + pd0_reg = pd0_reg ^ 1; + address_test_write(SNPS_PD_0_BASE, pd0_reg); + pd0_reg = address_test_read(SNPS_PD_0_BASE); + printf("Status register after enable: 0x%08X \n", pd0_reg); + while(!(address_test_read(SNPS_PD_0_BASE)&0x10)){;} + printf("PD reset released \n"); + + pd2_reg = pd2_reg ^ 0x1000000; + address_test_write(SNPS_PD_0_BASE + 0x008, pd2_reg); + pd2_reg = address_test_read(SNPS_PD_0_BASE + 0x008); + printf("Config regs after config load: 0x%08X \n", pd2_reg); + pd2_reg = pd2_reg ^ 0x1000000; + address_test_write(SNPS_PD_0_BASE + 0x008, pd2_reg); + + pd0_reg = address_test_read(SNPS_PD_0_BASE); + pd0_reg = pd0_reg ^ 2; + address_test_write(SNPS_PD_0_BASE, pd0_reg); + printf("PD Run enabled \n"); + while(!(address_test_read(SNPS_PD_0_BASE)&0x1000000)){;} + pd0_reg = address_test_read(SNPS_PD_0_BASE + 0x04); // Read Data register + frequency = pd0_reg * prescaler * f_clk / window_size; + + printf("PD read data: 0x%08X = %f \n", pd0_reg, frequency); + // Clear ready reg + pd0_reg = address_test_read(SNPS_PD_0_BASE); + pd0_reg = pd0_reg ^ 0x8; + address_test_write(SNPS_PD_0_BASE, pd0_reg); + + + // Disable PD0 + pd0_reg = address_test_read(SNPS_PD_0_BASE); + pd0_reg = pd0_reg ^ 1; + address_test_write(SNPS_PD_0_BASE,pd0_reg); + printf("Disabled PD0 \n"); + return 0; +} + +int snps_pvt_ts_detect(void) +{ + int result; + int volatile rdata; + unsigned const int ts0_id = 0x736E7473; + puts("Detect if TS0 is present..."); + hardfault_occurred = 0; + hardfault_expected = 1; + rdata = address_test_read(SNPS_TS_0_BASE+ 0xC); + printf("TS0 ID: 0x%08X\n", rdata); + hardfault_expected = 0; + result = hardfault_occurred? 1 : 0; + hardfault_occurred = 0; + result = rdata == ts0_id? 0: 1; + if (result!=0) { + puts("** TEST SKIPPED ** TS0 is not present.\n"); + UartEndSimulation(); + } + return(result); +} + +int snps_pvt_pd_detect(void) +{ + int result; + int volatile rdata; + unsigned const int pd0_id = 0x736E7064; + puts("Detect if PD0 is present..."); + hardfault_occurred = 0; + hardfault_expected = 1; + rdata = address_test_read(SNPS_PD_0_BASE+ 0xC); + printf("PD0 ID: 0x%08X\n", rdata); + hardfault_expected = 0; + result = hardfault_occurred? 1 : 0; + hardfault_occurred = 0; + result = rdata == pd0_id? 0: 1; + if (result!=0) { + puts("** TEST SKIPPED ** PD0 is not present.\n"); + UartEndSimulation(); + } + return(result); +} + + + +#if defined ( __CC_ARM ) +/* Test function for write - for ARM / Keil */ +__asm void address_test_write(unsigned int addr, unsigned int wdata) +{ + STR R1,[R0] + DSB ; Ensure bus fault occurred before leaving this subroutine + BX LR +} + +#else +/* Test function for write - for gcc */ +void address_test_write(unsigned int addr, unsigned int wdata) __attribute__((naked)); +void address_test_write(unsigned int addr, unsigned int wdata) +{ + __asm(" str r1,[r0]\n" + " dsb \n" + " bx lr \n" + ); +} +#endif + +/* Test function for read */ +#if defined ( __CC_ARM ) +/* Test function for read - for ARM / Keil */ +__asm unsigned int address_test_read(unsigned int addr) +{ + LDR R1,[R0] + DSB ; Ensure bus fault occurred before leaving this subroutine + MOVS R0, R1 + BX LR +} +#else +/* Test function for read - for gcc */ +unsigned int address_test_read(unsigned int addr) __attribute__((naked)); +unsigned int address_test_read(unsigned int addr) +{ + __asm(" ldr r1,[r0]\n" + " dsb \n" + " movs r0, r1 \n" + " bx lr \n" + ); +} +#endif + + +#if defined ( __CC_ARM ) +/* ARM or Keil toolchain */ +__asm void HardFault_Handler(void) +{ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 + BEQ stacking_used_MSP + MRS R0, PSP ; // first parameter - stacking was using PSP + B get_LR_and_branch +stacking_used_MSP + MRS R0, MSP ; // first parameter - stacking was using MSP +get_LR_and_branch + MOV R1, LR ; // second parameter is LR current value + LDR R2,=__cpp(HardFault_Handler_c) + BX R2 + ALIGN +} +#else +/* gcc toolchain */ +void HardFault_Handler(void) __attribute__((naked)); +void HardFault_Handler(void) +{ + __asm(" movs r0,#4\n" + " mov r1,lr\n" + " tst r0,r1\n" + " beq stacking_used_MSP\n" + " mrs r0,psp\n" /* first parameter - stacking was using PSP */ + " ldr r1,=HardFault_Handler_c \n" + " bx r1\n" + "stacking_used_MSP:\n" + " mrs r0,msp\n" /* first parameter - stacking was using PSP */ + " ldr r1,=HardFault_Handler_c \n" + " bx r1\n" + ".pool\n" ); +} + +#endif +/* C part of the fault handler - common between ARM / Keil /gcc */ +void HardFault_Handler_c(unsigned int * hardfault_args, unsigned lr_value) +{ + unsigned int stacked_pc; + unsigned int stacked_r0; + hardfault_occurred++; + if (hardfault_verbose) puts ("[Hard Fault Handler]"); + if (hardfault_expected==0) { + puts ("ERROR : Unexpected HardFault interrupt occurred.\n"); + UartEndSimulation(); + while (1); + } + stacked_r0 = ((unsigned long) hardfault_args[0]); + stacked_pc = ((unsigned long) hardfault_args[6]); + if (hardfault_verbose) printf(" - Stacked R0 : 0x%x\n", stacked_r0); + if (hardfault_verbose) printf(" - Stacked PC : 0x%x\n", stacked_pc); + /* Modify R0 to a valid address */ + hardfault_args[0] = (unsigned long) &temp_data; + + return; +} + + + diff --git a/testcodes/snps_pvt_tests/makefile b/testcodes/snps_pvt_tests/makefile new file mode 100644 index 0000000000000000000000000000000000000000..54ba74fe2f7a04fea2b28c2b98863584df511100 --- /dev/null +++ b/testcodes/snps_pvt_tests/makefile @@ -0,0 +1,275 @@ +#----------------------------------------------------------------------------- +# The confidential and proprietary information contained in this file may +# only be used by a person authorised under and to the extent permitted +# by a subsisting licensing agreement from Arm Limited or its affiliates. +# +# (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates. +# ALL RIGHTS RESERVED +# +# This entire notice must be reproduced on all copies of this file +# and copies of this file may only be made by a person if such person is +# permitted to do so under the terms of a subsisting license agreement +# from Arm Limited or its affiliates. +# +# SVN Information +# +# Checked In : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $ +# +# Revision : $Revision: 371321 $ +# +# Release Information : Cortex-M System Design Kit-r1p1-00rel0 +#----------------------------------------------------------------------------- +# +# Cortex-M System Design Kit software compilation make file +# +#----------------------------------------------------------------------------- +# +# Configurations +# +# Choose the core instantiated, can be +# - CORTEX_M0 +# - CORTEX_M0PLUS +CPU_PRODUCT = CORTEX_M0PLUS + +TARGET = arm-none-eabi +# Shared software directory +SOFTWARE_DIR = $(SOCLABS_NANOSOC_TECH_DIR)/software +CMSIS_DIR = $(SOFTWARE_DIR)/cmsis +CORE_DIR = $(CMSIS_DIR)/CMSIS/Include + +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0plus +else + DEVICE_DIR = $(CMSIS_DIR)/Device/ARM/CMSDK_CM0 +endif + +# Program file +TESTNAME = snps_pvt_tests + +# Endian Option +COMPILE_BIGEND = 0 + + +# Configuration +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + USER_DEFINE = -DCORTEX_M0PLUS +else + USER_DEFINE = -DCORTEX_M0 +endif + +DEPS_LIST = makefile + +# Tool chain : ds5 / gcc / keil +TOOL_CHAIN = ds5 + +ifeq ($(TOOL_CHAIN),ds5) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = --cpu Cortex-M0plus + else + CPU_TYPE = --cpu Cortex-M0 + endif +endif + +ifeq ($(TOOL_CHAIN),ds6) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = -mcpu=Cortex-M0plus + else + CPU_TYPE = -mcpu=Cortex-M0 + endif +endif + +ifeq ($(TOOL_CHAIN),gcc) + ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + CPU_TYPE = -mcpu=cortex-m0plus + else + CPU_TYPE = -mcpu=cortex-m0 + endif +endif + +# Startup code directory for DS-5 +ifeq ($(TOOL_CHAIN),ds5) + STARTUP_DIR = $(DEVICE_DIR)/Source/ARM +endif + +ifeq ($(TOOL_CHAIN),ds6) + STARTUP_DIR = $(DEVICE_DIR)/Source/ARM +endif + +# Startup code directory for gcc +ifeq ($(TOOL_CHAIN),gcc) + STARTUP_DIR = $(DEVICE_DIR)/Source/GCC +endif + +ifeq ($(CPU_PRODUCT),CORTEX_M0PLUS) + STARTUP_FILE = startup_CMSDK_CM0plus + SYSTEM_FILE = system_CMSDK_CM0plus +else + STARTUP_FILE = startup_CMSDK_CM0 + SYSTEM_FILE = system_CMSDK_CM0 +endif + +# --------------------------------------------------------------------------------------- +# D5-5 options + +# MicroLIB option +COMPILE_MICROLIB = 0 + +# Small Multiply (Cortex-M0/M0+ has small multiplier option) +COMPILE_SMALLMUL = 0 + +ifeq ($(TOOL_CHAIN),ds6) + ARM_TARGET = --target=arm-$(TARGET) + CC_TOOL = armclang -O1 + ASM_TOOL = armclang -masm=armasm $(ARM_TARGET) -c +else + CC_TOOL = armcc -O3 + ASM_TOOL = armasm + ARM_TARGET = -Otime +endif + +ARM_CC_OPTIONS = $(ARM_TARGET) -c -g -I $(DEVICE_DIR)/Include -I $(CORE_DIR) \ + -I $(SOFTWARE_DIR)/common/retarget $(USER_DEFINE) +ARM_ASM_OPTIONS = -g +ARM_LINK_OPTIONS = "--keep=$(STARTUP_FILE).o(RESET)" "--first=$(STARTUP_FILE).o(RESET)" \ + --rw_base 0x30000000 --ro_base 0x00000000 --map + +ifeq ($(COMPILE_BIGEND),1) + # Big Endian + ARM_CC_OPTIONS += --bigend + ARM_ASM_OPTIONS += --bigend + ARM_LINK_OPTIONS += --be8 +endif + +ifeq ($(COMPILE_MICROLIB),1) + # MicroLIB + ARM_CC_OPTIONS += --library_type=microlib + ARM_ASM_OPTIONS += --library_type=microlib --pd "__MICROLIB SETA 1" + ARM_LINK_OPTIONS += --library_type=microlib +endif + +ifeq ($(COMPILE_SMALLMUL),1) + # In Cortex-M0, small multiply takes 32 cycles + ARM_CC_OPTIONS += --multiply_latency=32 +endif + +# --------------------------------------------------------------------------------------- +# gcc options + +GNG_CC = $(TARGET)-gcc +GNU_OBJDUMP = $(TARGET)-objdump +GNU_OBJCOPY = $(TARGET)-objcopy + +LINKER_SCRIPT_PATH = $(SOFTWARE_DIR)/common/scripts +LINKER_SCRIPT = $(LINKER_SCRIPT_PATH)/cmsdk_cm0.ld + +GNU_CC_FLAGS = -g -O3 -mthumb $(CPU_TYPE) + +ifeq ($(COMPILE_BIGEND),1) + # Big Endian + GNU_CC_FLAGS += -mbig-endian +endif + +# --------------------------------------------------------------------------------------- +all: all_$(TOOL_CHAIN) + +# --------------------------------------------------------------------------------------- +# DS-5 + +all_ds5 : $(TESTNAME).hex $(TESTNAME).lst +all_ds6 : $(TESTNAME).hex $(TESTNAME).lst + +$(TESTNAME).o : $(SOFTWARE_DIR)/common/validation/$(TESTNAME).c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(SYSTEM_FILE).o : $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +retarget.o : $(SOFTWARE_DIR)/common/retarget/retarget.c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +uart_stdout.o : $(SOFTWARE_DIR)/common/retarget/uart_stdout.c $(DEPS_LIST) + $(CC_TOOL) $(ARM_CC_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(STARTUP_FILE).o : $(STARTUP_DIR)/$(STARTUP_FILE).s $(DEPS_LIST) + $(ASM_TOOL) $(ARM_ASM_OPTIONS) $(CPU_TYPE) $< -o $@ + +$(TESTNAME).ELF : $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o + armlink $(ARM_LINK_OPTIONS) -o $@ $(TESTNAME).o $(SYSTEM_FILE).o $(STARTUP_FILE).o retarget.o uart_stdout.o + +$(TESTNAME).hex : $(TESTNAME).ELF + fromelf --vhx --8x1 $< --output $@ + +$(TESTNAME).lst : $(TESTNAME).ELF makefile + fromelf -c -d -e -s $< --output $@ + +# --------------------------------------------------------------------------------------- +# gcc +all_gcc: + $(GNG_CC) $(GNU_CC_FLAGS) $(STARTUP_DIR)/$(STARTUP_FILE).s \ + $(SOFTWARE_DIR)/common/validation/$(TESTNAME).c \ + $(SOFTWARE_DIR)/common/retarget/retarget.c \ + $(SOFTWARE_DIR)/common/retarget/uart_stdout.c \ + $(DEVICE_DIR)/Source/$(SYSTEM_FILE).c \ + -I $(DEVICE_DIR)/Include -I $(CORE_DIR) \ + -I $(SOFTWARE_DIR)/common/retarget \ + -L $(LINKER_SCRIPT_PATH) \ + -D__STACK_SIZE=0x200 \ + -D__HEAP_SIZE=0x1000 \ + $(USER_DEFINE) -T $(LINKER_SCRIPT) -o $(TESTNAME).o + # Generate disassembly code + $(GNU_OBJDUMP) -S $(TESTNAME).o > $(TESTNAME).lst + # Generate binary file + $(GNU_OBJCOPY) -S $(TESTNAME).o -O binary $(TESTNAME).bin + # Generate hex file + $(GNU_OBJCOPY) -S $(TESTNAME).o -O verilog $(TESTNAME).hex + +# Note: +# If the version of object copy you are using does not support verilog hex file output, +# you can generate the hex file from binary file using the following command +# od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex + +# --------------------------------------------------------------------------------------- +# Keil MDK + +all_keil: + @echo "Please compile your project code and press ENTER when ready" + @read dummy + +# --------------------------------------------------------------------------------------- +# Binary + +all_bin: $(TESTNAME).bin + # Generate hex file from binary + od -v -A n -t x1 --width=1 $(TESTNAME).bin > $(TESTNAME).hex + +# --------------------------------------------------------------------------------------- +# Clean + +clean : + @rm -rf *.o + @if [ -e $(TESTNAME).hex ] ; then \ + rm -rf $(TESTNAME).hex ; \ + fi + @if [ -e $(TESTNAME).lst ] ; then \ + rm -rf $(TESTNAME).lst ; \ + fi + @if [ -e $(TESTNAME).ELF ] ; then \ + rm -rf $(TESTNAME).ELF ; \ + fi + @if [ -e $(TESTNAME).bin ] ; then \ + rm -rf $(TESTNAME).bin ; \ + fi + @rm -rf *.crf + @rm -rf *.plg + @rm -rf *.tra + @rm -rf *.htm + @rm -rf *.map + @rm -rf *.dep + @rm -rf *.d + @rm -rf *.lnp + @rm -rf *.bak + @rm -rf *.lst + @rm -rf *.axf + @rm -rf *.sct + @rm -rf *.__i + @rm -rf *._ia diff --git a/testcodes/snps_pvt_tests/snps_pvt_tests.hex b/testcodes/snps_pvt_tests/snps_pvt_tests.hex new file mode 100644 index 0000000000000000000000000000000000000000..03129965c55107fc90647784f45138a134de2016 --- /dev/null +++ b/testcodes/snps_pvt_tests/snps_pvt_tests.hex @@ -0,0 +1,9080 @@ +78 +04 +00 +30 +39 +0A +00 +00 +41 +0A +00 +00 +BB +01 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +45 +0A +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +47 +0A +00 +00 +49 +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +4B +0A +00 +00 +00 +F0 +02 +F8 +00 +F0 +61 +F8 +12 +A0 +30 +C8 +08 +38 +24 +18 +2D +18 +AC +42 +01 +D1 +00 +F0 +58 +F8 +0F +CC +A2 +46 +AB +46 +0C +A7 +30 +CF +2D +1B +08 +3F +3F +19 +7C +42 +7F +1E +54 +44 +2D +09 +04 +26 +F4 +41 +64 +1E +AC +42 +01 +D3 +00 +F0 +45 +F8 +01 +26 +33 +42 +00 +D0 +FB +1A +33 +43 +98 +47 +54 +46 +5D +46 +DF +E7 +00 +00 +10 +22 +00 +00 +30 +22 +00 +00 +10 +3A +02 +D3 +78 +C8 +78 +C1 +FA +D8 +52 +07 +01 +D3 +30 +C8 +30 +C1 +01 +D5 +04 +68 +0C +60 +70 +47 +00 +00 +70 +47 +00 +00 +00 +23 +00 +24 +00 +25 +00 +26 +10 +3A +01 +D3 +78 +C1 +FB +D8 +52 +07 +00 +D3 +30 +C1 +00 +D5 +0B +60 +70 +47 +10 +B5 +66 +29 +02 +D1 +02 +F0 +51 +F8 +10 +BD +78 +29 +02 +D1 +00 +F0 +3A +FD +10 +BD +00 +20 +10 +BD +1F +B5 +01 +F0 +96 +F9 +04 +00 +00 +20 +00 +21 +01 +F0 +25 +FF +E0 +60 +1F +BD +10 +B5 +10 +BD +01 +F0 +6D +FD +11 +46 +FF +F7 +EF +FF +00 +F0 +9C +F9 +01 +F0 +85 +FD +03 +B4 +FF +F7 +F2 +FF +03 +BC +00 +F0 +77 +FC +01 +60 +BF +F3 +4F +8F +70 +47 +01 +68 +BF +F3 +4F +8F +08 +00 +70 +47 +04 +20 +71 +46 +08 +42 +02 +D0 +EF +F3 +09 +80 +01 +E0 +EF +F3 +08 +80 +71 +46 +01 +4A +10 +47 +00 +00 +0F +09 +00 +00 +F0 +B5 +85 +B0 +E4 +48 +02 +90 +E4 +48 +01 +90 +E4 +A0 +00 +F0 +C3 +FD +EC +4D +28 +46 +FF +F7 +DF +FF +04 +46 +01 +46 +EA +A0 +00 +F0 +BC +FC +01 +21 +61 +40 +28 +46 +FF +F7 +D1 +FF +28 +46 +FF +F7 +D2 +FF +01 +46 +EC +A0 +00 +F0 +B0 +FC +2C +46 +20 +46 +FF +F7 +CA +FF +C0 +06 +FA +D5 +F1 +A0 +00 +F0 +A7 +FC +20 +46 +FF +F7 +C2 +FF +02 +21 +41 +40 +20 +46 +FF +F7 +B9 +FF +F1 +A0 +00 +F0 +9C +FC +20 +46 +FF +F7 +B7 +FF +C0 +01 +FA +D5 +F2 +4E +30 +46 +FF +F7 +B1 +FF +05 +46 +00 +F0 +AE +FE +01 +99 +01 +F0 +15 +FF +EE +4F +39 +46 +00 +F0 +CB +FD +02 +99 +01 +F0 +66 +FF +00 +F0 +9C +FD +02 +46 +0B +46 +29 +46 +E9 +A0 +00 +F0 +7E +FC +20 +46 +FF +F7 +99 +FF +08 +25 +68 +40 +01 +46 +20 +46 +FF +F7 +8F +FF +20 +46 +FF +F7 +90 +FF +01 +46 +00 +90 +E9 +A0 +00 +F0 +6D +FC +00 +98 +04 +21 +41 +40 +20 +46 +FF +F7 +81 +FF +F0 +A0 +00 +F0 +64 +FC +20 +46 +FF +F7 +7F +FF +C0 +01 +FA +D5 +30 +46 +FF +F7 +7A +FF +00 +90 +00 +F0 +77 +FE +01 +99 +01 +F0 +DE +FE +39 +46 +00 +F0 +95 +FD +02 +99 +01 +F0 +30 +FF +00 +F0 +66 +FD +02 +46 +0B +46 +E9 +A0 +00 +99 +00 +F0 +48 +FC +20 +46 +FF +F7 +63 +FF +68 +40 +01 +46 +20 +46 +FF +F7 +5A +FF +20 +46 +FF +F7 +5B +FF +C0 +01 +FA +D5 +30 +46 +FF +F7 +56 +FF +05 +46 +00 +F0 +53 +FE +01 +99 +01 +F0 +BA +FE +39 +46 +00 +F0 +71 +FD +02 +99 +01 +F0 +0C +FF +00 +F0 +42 +FD +02 +46 +0B +46 +29 +46 +E1 +A0 +00 +F0 +24 +FC +20 +46 +FF +F7 +3F +FF +0C +21 +41 +40 +20 +46 +FF +F7 +36 +FF +20 +46 +FF +F7 +37 +FF +00 +20 +05 +B0 +F0 +BD +F8 +B5 +E2 +4E +E2 +A0 +00 +F0 +0F +FD +E8 +4C +00 +25 +65 +60 +01 +20 +A0 +60 +E6 +48 +FF +F7 +27 +FF +01 +46 +00 +90 +E5 +A0 +00 +F0 +04 +FC +A5 +60 +60 +68 +65 +60 +00 +98 +B0 +42 +06 +D0 +01 +24 +E4 +A0 +00 +F0 +F8 +FC +00 +F0 +D7 +FB +00 +E0 +00 +24 +20 +46 +F8 +BD +F0 +B5 +83 +B0 +3F +20 +02 +90 +E7 +48 +01 +90 +20 +26 +E7 +A0 +00 +F0 +E8 +FC +EF +48 +FF +F7 +05 +FF +05 +46 +01 +46 +EE +A0 +00 +F0 +E2 +FB +F5 +4C +20 +46 +FF +F7 +FC +FE +01 +27 +78 +40 +01 +46 +20 +46 +FF +F7 +F2 +FE +20 +46 +FF +F7 +F3 +FE +01 +46 +7C +A0 +00 +F0 +D1 +FB +20 +46 +FF +F7 +EC +FE +C0 +06 +FA +D5 +EB +A0 +00 +F0 +C9 +FB +29 +46 +01 +25 +2D +06 +69 +40 +DD +48 +FF +F7 +DC +FE +DB +48 +FF +F7 +DD +FE +01 +46 +00 +90 +E9 +A0 +00 +F0 +BA +FB +00 +98 +68 +40 +01 +46 +D6 +48 +FF +F7 +CE +FE +20 +46 +FF +F7 +CF +FE +02 +21 +41 +40 +20 +46 +FF +F7 +C6 +FE +EA +A0 +00 +F0 +A9 +FB +20 +46 +FF +F7 +C4 +FE +C0 +01 +FA +D5 +EB +48 +FF +F7 +BF +FE +05 +46 +02 +98 +00 +F0 +B3 +FD +00 +90 +28 +46 +70 +43 +00 +F0 +B6 +FD +01 +99 +01 +F0 +1D +FE +00 +99 +00 +F0 +D4 +FC +00 +F0 +A8 +FC +02 +46 +0B +46 +29 +46 +E1 +A0 +00 +F0 +8A +FB +20 +46 +FF +F7 +A5 +FE +08 +21 +41 +40 +20 +46 +FF +F7 +9C +FE +20 +46 +FF +F7 +9D +FE +78 +40 +01 +46 +20 +46 +FF +F7 +94 +FE +DE +A0 +00 +F0 +77 +FB +00 +20 +03 +B0 +F0 +BD +F8 +B5 +DF +4E +DF +A0 +00 +F0 +6D +FC +97 +4C +00 +25 +65 +60 +01 +20 +A0 +60 +E2 +48 +FF +F7 +85 +FE +01 +46 +00 +90 +E1 +A0 +00 +F0 +62 +FB +A5 +60 +60 +68 +65 +60 +00 +98 +B0 +42 +06 +D0 +01 +24 +E0 +A0 +00 +F0 +56 +FC +00 +F0 +35 +FB +00 +E0 +00 +24 +20 +46 +F8 +BD +F8 +B5 +00 +26 +00 +F0 +E0 +FA +E3 +A0 +00 +F0 +49 +FC +ED +A0 +00 +F0 +46 +FC +CA +A0 +00 +F0 +43 +FC +82 +4D +00 +24 +6C +60 +01 +27 +AF +60 +CD +48 +FF +F7 +5B +FE +01 +46 +00 +90 +CC +A0 +00 +F0 +38 +FB +AC +60 +68 +68 +6C +60 +C0 +48 +00 +99 +81 +42 +05 +D0 +CB +A0 +00 +F0 +2C +FC +00 +F0 +0B +FB +02 +E0 +FF +F7 +35 +FF +06 +46 +E9 +A0 +00 +F0 +25 +FB +6B +A0 +00 +F0 +20 +FC +6C +60 +AF +60 +70 +48 +FF +F7 +3B +FE +01 +46 +00 +90 +6F +A0 +00 +F0 +18 +FB +AC +60 +68 +68 +6C +60 +62 +48 +00 +99 +81 +42 +05 +D0 +6E +A0 +00 +F0 +0C +FC +00 +F0 +EB +FA +02 +E0 +FF +F7 +3B +FE +86 +19 +00 +2E +01 +D0 +31 +46 +C5 +E1 +CB +E1 +00 +00 +33 +33 +A2 +42 +00 +80 +6D +43 +54 +65 +73 +74 +69 +6E +67 +20 +73 +74 +61 +74 +75 +73 +20 +72 +65 +61 +64 +2F +77 +72 +69 +74 +65 +20 +61 +63 +63 +65 +73 +73 +20 +0A +00 +00 +00 +10 +02 +40 +53 +74 +61 +74 +75 +73 +20 +61 +66 +74 +65 +72 +20 +72 +65 +73 +65 +74 +3A +20 +30 +78 +25 +30 +38 +58 +20 +0A +00 +00 +00 +00 +53 +74 +61 +74 +75 +73 +20 +72 +65 +67 +69 +73 +74 +65 +72 +20 +61 +66 +74 +65 +72 +20 +65 +6E +61 +62 +6C +65 +3A +20 +30 +78 +25 +30 +38 +58 +20 +0A +00 +00 +54 +53 +20 +72 +65 +73 +65 +74 +20 +72 +65 +6C +65 +61 +73 +65 +64 +20 +0A +00 +54 +53 +20 +52 +75 +6E +20 +65 +6E +61 +62 +6C +65 +64 +20 +0A +00 +00 +00 +00 +04 +10 +02 +40 +00 +E0 +7F +45 +54 +65 +6D +70 +65 +72 +61 +74 +75 +72 +65 +20 +72 +65 +61 +64 +20 +64 +61 +74 +61 +3A +20 +30 +78 +25 +30 +38 +58 +20 +3D +20 +25 +66 +0A +00 +53 +74 +61 +74 +75 +73 +20 +72 +65 +67 +69 +73 +74 +65 +72 +20 +61 +66 +74 +65 +72 +20 +63 +6C +65 +61 +72 +20 +72 +65 +61 +64 +79 +3A +20 +30 +78 +25 +30 +38 +58 +20 +0A +00 +54 +53 +20 +52 +75 +6E +20 +63 +6F +6E +74 +69 +6E +75 +6F +75 +73 +20 +65 +6E +61 +62 +6C +65 +64 +20 +0A +00 +54 +65 +6D +70 +65 +72 +61 +74 +75 +72 +65 +20 +31 +20 +72 +65 +61 +64 +20 +64 +61 +74 +61 +3A +20 +30 +78 +25 +30 +38 +58 +20 +3D +20 +25 +66 +0A +00 +00 +00 +54 +65 +6D +70 +65 +72 +61 +74 +75 +72 +65 +20 +32 +20 +72 +65 +61 +64 +20 +64 +61 +74 +61 +3A +20 +30 +78 +25 +30 +38 +58 +20 +3D +20 +25 +66 +0A +00 +00 +00 +73 +74 +6E +73 +44 +65 +74 +65 +63 +74 +20 +69 +66 +20 +54 +53 +30 +20 +69 +73 +20 +70 +72 +65 +73 +65 +6E +74 +2E +2E +2E +00 +00 +00 +00 +30 +0C +10 +02 +40 +54 +53 +30 +20 +49 +44 +3A +20 +30 +78 +25 +30 +38 +58 +0A +00 +2A +2A +20 +54 +45 +53 +54 +20 +53 +4B +49 +50 +50 +45 +44 +20 +2A +2A +20 +54 +53 +30 +20 +69 +73 +20 +6E +6F +74 +20 +70 +72 +65 +73 +65 +6E +74 +2E +0A +00 +00 +00 +C0 +40 +54 +65 +73 +74 +69 +6E +67 +20 +50 +44 +30 +20 +73 +74 +61 +74 +75 +73 +20 +72 +65 +61 +64 +2F +77 +72 +69 +74 +65 +20 +61 +63 +63 +65 +73 +73 +20 +0A +00 +00 +68 +10 +02 +40 +43 +6F +6E +66 +69 +67 +20 +72 +65 +67 +73 +20 +61 +66 +74 +65 +72 +20 +72 +65 +73 +65 +74 +3A +20 +30 +78 +25 +30 +38 +58 +20 +0A +00 +00 +00 +60 +10 +02 +40 +50 +44 +20 +72 +65 +73 +65 +74 +20 +72 +65 +6C +65 +61 +73 +65 +64 +20 +0A +00 +43 +6F +6E +66 +69 +67 +20 +72 +65 +67 +73 +20 +61 +66 +74 +65 +72 +20 +63 +6F +6E +66 +69 +67 +20 +6C +6F +61 +64 +3A +20 +30 +78 +25 +30 +38 +58 +20 +0A +00 +50 +44 +20 +52 +75 +6E +20 +65 +6E +61 +62 +6C +65 +64 +20 +0A +00 +00 +00 +00 +64 +10 +02 +40 +50 +44 +20 +72 +65 +61 +64 +20 +64 +61 +74 +61 +3A +20 +30 +78 +25 +30 +38 +58 +20 +3D +20 +25 +66 +20 +0A +00 +44 +69 +73 +61 +62 +6C +65 +64 +20 +50 +44 +30 +20 +0A +00 +00 +64 +70 +6E +73 +44 +65 +74 +65 +63 +74 +20 +69 +66 +20 +50 +44 +30 +20 +69 +73 +20 +70 +72 +65 +73 +65 +6E +74 +2E +2E +2E +00 +6C +10 +02 +40 +50 +44 +30 +20 +49 +44 +3A +20 +30 +78 +25 +30 +38 +58 +0A +00 +2A +2A +20 +54 +45 +53 +54 +20 +53 +4B +49 +50 +50 +45 +44 +20 +2A +2A +20 +50 +44 +30 +20 +69 +73 +20 +6E +6F +74 +20 +70 +72 +65 +73 +65 +6E +74 +2E +0A +00 +0A +43 +6F +72 +74 +65 +78 +20 +4D +69 +63 +72 +6F +63 +6F +6E +74 +72 +6F +6C +6C +65 +72 +20 +53 +79 +73 +74 +65 +6D +20 +44 +65 +73 +69 +67 +6E +20 +4B +69 +74 +00 +00 +00 +20 +2D +20 +53 +79 +6E +6F +70 +73 +79 +73 +20 +50 +56 +54 +20 +74 +65 +73 +74 +20 +2D +20 +72 +65 +76 +69 +73 +69 +6F +6E +20 +24 +52 +65 +76 +69 +73 +69 +6F +6E +3A +20 +33 +37 +31 +33 +32 +31 +20 +24 +0A +00 +00 +00 +00 +0A +0A +20 +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +2A +20 +0A +0A +00 +00 +18 +A0 +00 +F0 +3B +F9 +00 +F0 +18 +F9 +00 +20 +F8 +BD +20 +A0 +00 +F0 +34 +F9 +F7 +E7 +70 +B5 +22 +4C +05 +46 +60 +68 +40 +1C +60 +60 +20 +68 +00 +28 +02 +D0 +1F +A0 +00 +F0 +25 +FA +A0 +68 +00 +28 +11 +D0 +20 +68 +AE +69 +29 +68 +00 +28 +09 +D0 +20 +A0 +00 +F0 +1C +F9 +20 +68 +00 +28 +03 +D0 +31 +46 +22 +A0 +00 +F0 +15 +F9 +27 +48 +28 +60 +70 +BD +26 +A0 +00 +F0 +0D +FA +00 +F0 +EC +F8 +FE +E7 +0A +2A +2A +20 +54 +45 +53 +54 +20 +46 +41 +49 +4C +45 +44 +20 +2A +2A +2C +20 +45 +72 +72 +6F +72 +20 +63 +6F +64 +65 +20 +3D +20 +28 +30 +78 +25 +78 +29 +0A +00 +00 +00 +00 +0A +2A +2A +20 +54 +45 +53 +54 +20 +50 +41 +53 +53 +45 +44 +20 +2A +2A +0A +00 +00 +00 +00 +30 +5B +48 +61 +72 +64 +20 +46 +61 +75 +6C +74 +20 +48 +61 +6E +64 +6C +65 +72 +5D +00 +00 +00 +00 +20 +2D +20 +53 +74 +61 +63 +6B +65 +64 +20 +52 +30 +20 +3A +20 +30 +78 +25 +78 +0A +00 +00 +00 +20 +2D +20 +53 +74 +61 +63 +6B +65 +64 +20 +50 +43 +20 +3A +20 +30 +78 +25 +78 +0A +00 +00 +00 +0C +00 +00 +30 +45 +52 +52 +4F +52 +20 +3A +20 +55 +6E +65 +78 +70 +65 +63 +74 +65 +64 +20 +48 +61 +72 +64 +46 +61 +75 +6C +74 +20 +69 +6E +74 +65 +72 +72 +75 +70 +74 +20 +6F +63 +63 +75 +72 +72 +65 +64 +2E +0A +00 +00 +00 +04 +49 +03 +48 +08 +60 +70 +47 +02 +49 +01 +48 +08 +60 +70 +47 +00 +1C +4E +0E +10 +00 +00 +30 +07 +48 +80 +47 +07 +48 +00 +47 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +FE +E7 +04 +48 +05 +49 +05 +4A +06 +4B +70 +47 +00 +00 +29 +0A +00 +00 +C1 +00 +00 +00 +78 +00 +00 +30 +78 +04 +00 +30 +78 +02 +00 +30 +78 +02 +00 +30 +10 +B5 +C0 +B2 +00 +F0 +36 +F8 +10 +BD +10 +B5 +00 +F0 +42 +F8 +00 +F0 +30 +F8 +10 +BD +00 +20 +C0 +43 +70 +47 +10 +B5 +C0 +B2 +00 +F0 +28 +F8 +10 +BD +FE +E7 +2E +48 +00 +21 +81 +60 +2E +49 +01 +61 +01 +21 +81 +60 +2D +48 +03 +21 +01 +61 +81 +60 +2C +49 +20 +20 +88 +61 +70 +47 +2C +48 +2A +49 +01 +60 +2B +49 +81 +61 +01 +21 +C1 +60 +C3 +21 +81 +60 +01 +69 +C9 +07 +FC +D0 +24 +49 +20 +20 +88 +61 +21 +48 +00 +21 +81 +60 +30 +21 +01 +61 +03 +21 +81 +60 +70 +47 +1D +49 +8A +68 +D2 +07 +04 +D0 +4A +68 +D2 +07 +FC +D1 +08 +60 +70 +47 +17 +4A +53 +68 +DB +07 +FC +D1 +10 +60 +08 +60 +70 +47 +13 +4B +15 +48 +59 +68 +42 +68 +89 +07 +C9 +17 +92 +07 +D2 +17 +49 +1C +52 +1C +11 +42 +F5 +D1 +59 +68 +89 +07 +01 +D5 +18 +68 +03 +E0 +41 +68 +89 +07 +01 +D5 +00 +68 +C0 +B2 +70 +47 +0A +48 +04 +21 +82 +68 +D2 +07 +04 +D0 +42 +68 +D2 +07 +FC +D1 +01 +60 +FE +E7 +03 +4A +53 +68 +DB +07 +FC +D1 +11 +60 +01 +60 +F7 +E7 +00 +60 +00 +40 +6A +18 +00 +00 +00 +E0 +00 +40 +00 +10 +01 +40 +8E +0C +01 +00 +00 +20 +00 +40 +24 +F4 +00 +00 +70 +47 +00 +00 +0F +B4 +05 +49 +10 +B5 +03 +AA +02 +98 +00 +F0 +7D +FC +10 +BC +08 +BC +04 +B0 +18 +47 +00 +00 +14 +00 +00 +30 +70 +B5 +04 +46 +85 +69 +00 +68 +C1 +06 +01 +D5 +30 +26 +00 +E0 +20 +26 +C0 +07 +07 +D0 +70 +BD +62 +68 +30 +46 +A1 +68 +90 +47 +20 +6A +40 +1C +20 +62 +6D +1E +F6 +D5 +70 +BD +70 +B5 +04 +46 +85 +69 +00 +78 +C0 +07 +07 +D1 +70 +BD +62 +68 +A1 +68 +20 +20 +90 +47 +20 +6A +40 +1C +20 +62 +6D +1E +F6 +D5 +70 +BD +00 +00 +70 +B5 +04 +46 +0D +46 +21 +46 +10 +68 +C0 +46 +C0 +46 +21 +88 +09 +05 +02 +D5 +0F +4A +7A +44 +02 +E0 +0E +4A +7A +44 +0E +32 +23 +46 +00 +21 +24 +33 +05 +E0 +06 +07 +00 +09 +36 +0F +96 +5D +5E +54 +49 +1C +00 +28 +F7 +D1 +20 +78 +00 +23 +00 +07 +05 +D5 +70 +2D +03 +D0 +00 +29 +01 +D0 +02 +23 +11 +32 +20 +46 +00 +F0 +C2 +F9 +70 +BD +1A +16 +00 +00 +F3 +B5 +04 +46 +00 +20 +81 +B0 +20 +62 +20 +46 +E1 +68 +88 +47 +00 +28 +7D +D0 +25 +28 +02 +D0 +62 +68 +A1 +68 +83 +E0 +45 +4F +00 +25 +7F +44 +20 +46 +E1 +68 +88 +47 +20 +28 +06 +46 +08 +DB +31 +2E +06 +D2 +B8 +19 +20 +38 +00 +78 +00 +28 +01 +D0 +05 +43 +F0 +E7 +A8 +07 +01 +D5 +04 +20 +85 +43 +00 +20 +E0 +61 +07 +46 +A0 +61 +2A +2E +0A +D0 +30 +46 +01 +F0 +94 +F9 +00 +28 +27 +D0 +B8 +00 +00 +19 +30 +3E +00 +90 +86 +61 +19 +E0 +02 +98 +BA +00 +12 +19 +02 +C8 +91 +61 +02 +90 +20 +46 +E1 +68 +88 +47 +01 +2F +06 +46 +17 +D1 +E0 +69 +00 +28 +1F +DA +20 +20 +85 +43 +1C +E0 +00 +98 +0A +21 +80 +69 +48 +43 +00 +99 +80 +19 +30 +38 +88 +61 +20 +46 +E1 +68 +88 +47 +06 +46 +01 +F0 +6C +F9 +00 +28 +EF +D1 +01 +2F +0A +D0 +2E +2E +08 +D1 +20 +46 +E1 +68 +88 +47 +06 +46 +20 +20 +05 +43 +7F +1C +02 +2F +C3 +DB +A0 +69 +00 +28 +03 +DA +40 +42 +A0 +61 +01 +20 +05 +43 +E8 +07 +01 +D0 +10 +20 +85 +43 +00 +2E +24 +D0 +30 +46 +41 +38 +19 +28 +03 +D8 +01 +20 +C0 +02 +05 +43 +20 +36 +20 +46 +25 +60 +31 +46 +02 +9A +15 +46 +FF +F7 +0F +FA +00 +28 +0C +D0 +01 +28 +07 +D0 +ED +1D +E8 +08 +00 +E0 +0D +E0 +C0 +00 +08 +30 +02 +90 +77 +E7 +2D +1D +02 +95 +74 +E7 +62 +68 +30 +46 +A1 +68 +90 +47 +20 +6A +40 +1C +6C +E7 +20 +6A +FE +BD +00 +00 +DE +15 +00 +00 +10 +B5 +04 +46 +03 +E0 +FF +F7 +7B +FE +40 +1C +08 +D0 +20 +78 +05 +49 +64 +1C +00 +28 +F6 +D1 +0A +20 +FF +F7 +71 +FE +10 +BD +00 +20 +C0 +43 +10 +BD +00 +00 +14 +00 +00 +30 +70 +47 +70 +47 +70 +47 +00 +00 +01 +21 +C9 +05 +01 +23 +41 +18 +42 +00 +1B +06 +D3 +18 +5B +0E +0A +D0 +C1 +10 +07 +22 +D2 +06 +89 +18 +40 +07 +52 +42 +D1 +42 +01 +D5 +52 +00 +89 +18 +70 +47 +09 +02 +08 +D5 +01 +46 +00 +2A +03 +D0 +C1 +0F +C9 +07 +00 +20 +70 +47 +10 +46 +70 +47 +42 +02 +02 +D0 +00 +20 +02 +49 +70 +47 +07 +21 +09 +05 +01 +43 +F4 +E7 +00 +00 +F8 +7F +F0 +B5 +FF +25 +2D +04 +C6 +09 +C2 +09 +FF +27 +04 +46 +2E +40 +01 +37 +CB +09 +3E +43 +48 +40 +2A +40 +2B +40 +07 +46 +00 +2A +6B +D0 +00 +2B +69 +D0 +AA +42 +67 +D0 +AB +42 +65 +D0 +00 +28 +00 +DA +32 +46 +01 +25 +ED +05 +29 +43 +2C +43 +09 +02 +20 +02 +09 +0A +D2 +1A +4B +0C +7F +24 +E3 +1A +43 +4C +00 +0A +7C +44 +E3 +5C +7D +24 +24 +04 +12 +19 +14 +14 +5B +00 +A2 +18 +88 +42 +01 +D3 +52 +1C +00 +E0 +40 +00 +49 +42 +0C +46 +5C +43 +24 +11 +5C +43 +DB +01 +64 +15 +E3 +18 +04 +0A +5C +43 +C5 +02 +20 +0D +0C +46 +44 +43 +64 +19 +25 +0A +5D +43 +23 +03 +EC +0C +0D +46 +65 +43 +00 +03 +00 +19 +EB +18 +4C +42 +A3 +42 +01 +D3 +5B +18 +40 +1C +D4 +05 +20 +18 +00 +2B +07 +D0 +5B +00 +C9 +18 +04 +D3 +40 +1C +00 +29 +01 +D1 +40 +08 +40 +00 +3F +21 +89 +04 +8A +42 +09 +D3 +00 +2A +08 +DC +11 +06 +09 +0F +04 +D0 +03 +21 +49 +07 +40 +18 +C0 +0F +C0 +07 +F0 +BD +01 +22 +41 +00 +12 +06 +89 +18 +7F +22 +52 +06 +91 +42 +F6 +D2 +05 +21 +49 +07 +C8 +42 +01 +D5 +90 +10 +F0 +BD +FF +20 +C0 +05 +F0 +BD +00 +2F +00 +DA +32 +46 +16 +48 +AA +42 +07 +D2 +AB +42 +05 +D2 +19 +02 +09 +0E +17 +D0 +F8 +0F +C0 +07 +F0 +BD +FF +25 +63 +00 +2D +06 +AB +42 +F9 +D8 +49 +00 +A9 +42 +F6 +D8 +AB +42 +01 +D1 +A9 +42 +F2 +D0 +A9 +42 +01 +D1 +00 +21 +01 +E0 +61 +00 +49 +08 +D0 +05 +08 +43 +F0 +BD +11 +02 +09 +0E +FB +D0 +FF +20 +02 +43 +D0 +05 +F0 +BD +0A +46 +01 +46 +10 +46 +54 +E7 +00 +00 +03 +14 +00 +00 +00 +00 +C0 +7F +1F +22 +03 +0C +02 +D1 +0F +22 +00 +04 +1C +D0 +03 +0E +01 +D1 +00 +02 +08 +3A +03 +0F +01 +D1 +00 +01 +12 +1F +83 +0F +01 +D1 +80 +00 +92 +1E +00 +28 +01 +DB +40 +00 +52 +1E +D2 +05 +51 +18 +02 +12 +51 +18 +19 +22 +90 +40 +04 +D3 +49 +1C +00 +28 +01 +D1 +49 +08 +49 +00 +08 +46 +70 +47 +C1 +0F +C9 +07 +00 +D0 +40 +42 +01 +22 +92 +07 +11 +43 +D3 +E7 +01 +21 +89 +07 +D0 +E7 +FF +B5 +04 +46 +0D +46 +81 +B0 +24 +30 +00 +90 +21 +68 +88 +06 +04 +D5 +10 +22 +E0 +69 +91 +43 +21 +60 +00 +E0 +01 +20 +A8 +42 +01 +DD +47 +1B +00 +E0 +00 +27 +04 +98 +A1 +69 +7A +19 +10 +18 +08 +1A +A0 +61 +20 +78 +C0 +06 +02 +D4 +20 +46 +FF +F7 +CD +FD +00 +26 +08 +E0 +03 +98 +62 +68 +A1 +68 +80 +5D +90 +47 +20 +6A +40 +1C +76 +1C +20 +62 +04 +98 +86 +42 +F3 +DB +20 +78 +C0 +06 +0A +D5 +20 +46 +FF +F7 +B9 +FD +06 +E0 +62 +68 +A1 +68 +30 +20 +90 +47 +20 +6A +40 +1C +20 +62 +38 +46 +7F +1E +00 +28 +F4 +DC +07 +E0 +00 +98 +62 +68 +A1 +68 +40 +5D +90 +47 +20 +6A +40 +1C +20 +62 +28 +46 +6D +1E +00 +28 +F3 +DC +20 +46 +FF +F7 +B3 +FD +20 +78 +00 +06 +02 +D5 +02 +20 +05 +B0 +F0 +BD +01 +20 +FB +E7 +00 +00 +FF +B5 +0C +46 +1E +46 +8F +B0 +03 +CA +08 +90 +09 +91 +4F +00 +7D +0D +00 +D1 +6D +1E +00 +21 +08 +46 +00 +20 +C0 +46 +03 +21 +09 +9A +89 +05 +08 +40 +00 +2A +03 +DA +82 +00 +80 +18 +40 +08 +08 +40 +80 +0D +01 +28 +0A +90 +02 +DD +00 +20 +C0 +43 +0A +90 +08 +98 +07 +43 +0D +D0 +F0 +48 +F0 +49 +28 +18 +48 +43 +07 +14 +18 +98 +00 +28 +1D +D0 +75 +42 +29 +1E +1D +DD +0A +98 +42 +42 +1B +E0 +18 +98 +01 +28 +02 +D0 +00 +20 +30 +21 +04 +E0 +00 +20 +F2 +43 +05 +E0 +21 +54 +40 +1C +B0 +42 +FB +DB +30 +46 +00 +22 +18 +9B +00 +21 +21 +54 +0F +99 +8B +60 +0A +60 +48 +60 +13 +B0 +F0 +BD +BD +1B +6D +1C +DF +E7 +0A +9A +00 +29 +00 +DA +69 +42 +0B +A8 +00 +F0 +69 +FA +0B +AB +07 +CB +03 +AB +07 +C3 +08 +99 +09 +98 +00 +F0 +CD +FA +6B +46 +07 +C3 +01 +46 +D4 +48 +09 +18 +00 +2D +00 +91 +0B +DD +D2 +49 +03 +98 +0A +9A +49 +42 +40 +18 +00 +23 +03 +A9 +03 +90 +68 +46 +00 +F0 +2A +FD +08 +E0 +03 +99 +0A +9A +00 +23 +08 +18 +03 +A9 +03 +90 +68 +46 +00 +F0 +CA +FC +6B +46 +07 +C3 +00 +04 +00 +0C +03 +D0 +00 +20 +C0 +43 +41 +08 +00 +E0 +10 +46 +18 +9A +00 +2A +03 +D0 +00 +22 +00 +92 +15 +46 +1E +E0 +75 +1E +05 +D4 +00 +F0 +95 +F9 +30 +32 +62 +55 +6D +1E +F9 +D5 +01 +22 +08 +43 +07 +96 +02 +D0 +00 +22 +7F +1C +04 +E0 +20 +78 +30 +28 +01 +D1 +00 +22 +7F +1E +00 +2A +06 +97 +87 +D0 +1E +E0 +11 +2D +07 +DA +00 +F0 +7D +F9 +30 +32 +62 +55 +6D +1C +02 +46 +0A +43 +F5 +D1 +08 +43 +03 +D0 +00 +98 +00 +28 +19 +D0 +0E +E0 +00 +21 +68 +1E +05 +E0 +23 +5C +62 +5C +63 +54 +22 +54 +40 +1E +49 +1C +81 +42 +F7 +DB +A8 +1B +40 +1E +07 +95 +06 +90 +07 +9A +18 +99 +00 +20 +A0 +54 +0F +98 +07 +9B +06 +9A +81 +60 +0C +C0 +7C +E7 +11 +26 +00 +20 +18 +90 +59 +E7 +D2 +1D +F0 +B5 +0D +46 +04 +46 +D1 +08 +93 +B0 +C9 +00 +03 +C9 +0C +90 +0D +91 +00 +F0 +BA +FE +02 +46 +0D +98 +C0 +0F +01 +D0 +2D +20 +07 +E0 +20 +68 +81 +07 +01 +D5 +2B +20 +02 +E0 +40 +07 +C0 +0F +40 +01 +03 +2A +0F +90 +01 +D0 +07 +2A +05 +DB +03 +46 +29 +46 +20 +46 +00 +F0 +86 +F9 +0E +E1 +20 +78 +80 +06 +01 +D5 +E7 +69 +00 +E0 +06 +27 +28 +46 +65 +2D +04 +D0 +66 +28 +14 +D0 +67 +2D +69 +D1 +2D +E0 +00 +20 +11 +2F +00 +90 +01 +DB +11 +23 +00 +E0 +7B +1C +0C +AA +03 +A9 +10 +A8 +FF +F7 +F3 +FE +11 +99 +00 +26 +10 +98 +7D +1C +0E +91 +42 +E0 +01 +20 +3B +46 +0C +AA +C0 +07 +0B +90 +01 +20 +00 +90 +03 +A9 +10 +A8 +FF +F7 +E2 +FE +11 +9D +12 +98 +10 +99 +00 +26 +00 +28 +0E +95 +01 +D1 +78 +1C +0D +18 +78 +1B +02 +D4 +46 +42 +7D +1C +76 +1E +E8 +1B +00 +90 +3A +E0 +01 +2F +00 +DA +01 +27 +00 +20 +11 +2F +00 +90 +01 +DD +11 +23 +00 +E0 +3B +46 +0C +AA +03 +A9 +10 +A8 +FF +F7 +C2 +FE +11 +99 +3D +46 +10 +98 +00 +26 +0E +91 +21 +78 +09 +07 +0B +D4 +0E +99 +A9 +42 +00 +DA +0D +46 +03 +A9 +01 +2D +04 +DD +4A +19 +20 +3A +D2 +7F +30 +2A +06 +D0 +B8 +42 +01 +DA +01 +1D +04 +DA +01 +21 +00 +91 +0F +E0 +6D +1E +EF +E7 +00 +28 +02 +DC +86 +19 +2D +1A +03 +E0 +41 +1C +A9 +42 +00 +DD +0D +46 +80 +1B +40 +1C +00 +90 +01 +20 +C0 +07 +0B +90 +20 +78 +00 +07 +05 +D4 +00 +98 +A8 +42 +02 +DB +00 +20 +C0 +43 +00 +90 +69 +46 +00 +20 +C8 +72 +0B +98 +01 +21 +02 +AF +03 +37 +C9 +07 +88 +42 +25 +D0 +02 +20 +10 +90 +2B +20 +11 +90 +0B +98 +00 +28 +0B +DA +40 +42 +0B +90 +2D +20 +11 +90 +06 +E0 +0B +98 +00 +F0 +5C +FC +30 +31 +7F +1E +0B +90 +39 +70 +10 +99 +48 +1E +00 +29 +10 +90 +F3 +DC +0B +98 +00 +28 +F0 +D1 +11 +98 +7F +1E +38 +70 +20 +88 +00 +05 +01 +D5 +45 +20 +00 +E0 +65 +20 +7F +1E +38 +70 +01 +A8 +C0 +1B +C0 +1D +0B +90 +0F +98 +00 +28 +00 +D0 +01 +20 +41 +19 +00 +98 +C0 +17 +09 +18 +0B +98 +08 +18 +A1 +69 +08 +1A +40 +1E +A0 +61 +20 +78 +C0 +06 +02 +D4 +20 +46 +FF +F7 +D9 +FB +0F +98 +00 +28 +05 +D0 +62 +68 +A1 +68 +90 +47 +20 +6A +40 +1C +20 +62 +20 +78 +C0 +06 +25 +D5 +20 +46 +FF +F7 +CA +FB +21 +E0 +00 +2E +07 +DB +0E +98 +B0 +42 +04 +DD +03 +A8 +62 +68 +80 +5D +A1 +68 +02 +E0 +62 +68 +A1 +68 +30 +20 +90 +47 +20 +6A +76 +1C +40 +1C +20 +62 +00 +98 +40 +1E +00 +28 +00 +90 +0A +D1 +00 +F0 +3A +F8 +C0 +68 +62 +68 +01 +68 +40 +5C +A1 +68 +90 +47 +20 +6A +40 +1C +20 +62 +28 +46 +6D +1E +00 +28 +D9 +DC +07 +E0 +62 +68 +38 +78 +A1 +68 +7F +1C +90 +47 +20 +6A +40 +1C +20 +62 +0B +99 +48 +1E +00 +29 +0B +90 +F2 +DC +20 +46 +FF +F7 +A8 +FB +03 +20 +42 +E6 +01 +FC +FF +FF +10 +4D +00 +00 +E1 +DF +FF +FF +08 +4B +70 +B5 +0D +46 +7B +44 +00 +F0 +55 +F8 +04 +46 +28 +46 +FF +F7 +FB +FA +00 +28 +02 +D0 +00 +20 +C0 +43 +70 +BD +20 +46 +70 +BD +00 +00 +EB +F5 +FF +FF +00 +48 +70 +47 +38 +00 +00 +30 +0B +46 +70 +B5 +02 +46 +89 +07 +80 +08 +08 +43 +19 +46 +9D +08 +14 +1A +A9 +41 +25 +09 +08 +07 +05 +43 +08 +09 +2C +19 +48 +41 +25 +0A +01 +06 +0D +43 +01 +0A +2C +19 +41 +41 +20 +0C +0D +04 +28 +43 +0D +0C +00 +19 +4D +41 +00 +21 +40 +19 +4D +41 +C0 +08 +69 +07 +08 +43 +E9 +08 +84 +0F +8D +00 +25 +43 +84 +00 +24 +18 +4D +41 +24 +19 +6D +41 +12 +1B +AB +41 +07 +E0 +09 +25 +ED +43 +2C +11 +52 +19 +63 +41 +00 +24 +40 +1C +61 +41 +1C +46 +0A +25 +00 +26 +55 +1B +B4 +41 +F1 +D2 +70 +BD +00 +00 +01 +69 +4A +1C +02 +61 +08 +78 +70 +47 +00 +B5 +8F +B0 +02 +91 +00 +21 +05 +91 +05 +49 +01 +93 +79 +44 +03 +91 +11 +46 +04 +90 +68 +46 +FF +F7 +75 +FB +0F +B0 +00 +BD +00 +00 +E5 +FF +FF +FF +F8 +B5 +1F +46 +04 +46 +01 +23 +00 +68 +DB +02 +03 +26 +01 +46 +18 +40 +07 +2A +05 +DB +00 +28 +01 +D0 +17 +A5 +06 +E0 +17 +A5 +04 +E0 +00 +28 +01 +D0 +16 +A5 +00 +E0 +16 +A5 +10 +20 +81 +43 +21 +60 +A0 +69 +C0 +1E +00 +2F +A0 +61 +01 +D0 +40 +1E +A0 +61 +20 +46 +FF +F7 +F9 +FA +00 +2F +09 +D0 +38 +46 +62 +68 +A1 +68 +90 +47 +20 +6A +40 +1C +20 +62 +C0 +1C +20 +62 +06 +E0 +20 +6A +FA +E7 +62 +68 +28 +78 +A1 +68 +6D +1C +90 +47 +76 +1E +F8 +D2 +20 +46 +FF +F7 +F7 +FA +F8 +BD +4E +41 +4E +00 +6E +61 +6E +00 +49 +4E +46 +00 +69 +6E +66 +00 +F7 +B5 +16 +46 +8A +B0 +33 +48 +78 +44 +6C +46 +03 +46 +7C +33 +C0 +6F +5A +68 +9B +68 +0D +C4 +2E +48 +78 +44 +76 +30 +03 +AC +0D +C8 +0D +C4 +37 +20 +C0 +01 +08 +18 +37 +21 +1B +30 +00 +F0 +B9 +FB +05 +46 +0C +46 +80 +3D +1B +3C +02 +D5 +64 +42 +01 +20 +00 +E0 +00 +20 +00 +27 +09 +90 +10 +E0 +E0 +07 +0C +D0 +0C +20 +20 +49 +78 +43 +79 +44 +32 +46 +4C +39 +41 +18 +68 +46 +01 +23 +00 +F0 +54 +FA +6B +46 +07 +C3 +64 +10 +7F +1C +00 +2C +EC +D1 +18 +4F +7F +44 +2E +3F +16 +E0 +E8 +07 +12 +D0 +20 +01 +C0 +19 +0E +C8 +06 +91 +08 +93 +07 +92 +00 +68 +F0 +42 +01 +D1 +98 +19 +08 +90 +32 +46 +01 +23 +06 +A9 +03 +A8 +00 +F0 +37 +FA +03 +AB +07 +C3 +6D +10 +64 +1C +00 +2D +E6 +D1 +09 +98 +00 +28 +06 +D0 +32 +46 +69 +46 +01 +23 +03 +A8 +00 +F0 +7E +FA +05 +E0 +01 +23 +32 +46 +69 +46 +03 +A8 +00 +F0 +21 +FA +0A +9B +07 +C3 +0D +B0 +F0 +BD +00 +00 +A4 +0C +00 +00 +03 +46 +40 +00 +0A +46 +10 +B5 +40 +0D +0B +D0 +01 +21 +C9 +07 +0F +24 +A4 +02 +00 +19 +1C +03 +64 +08 +21 +43 +54 +0D +21 +43 +D2 +02 +07 +E0 +00 +21 +01 +20 +F2 +E7 +D4 +0F +49 +00 +21 +43 +52 +00 +40 +1E +00 +29 +F8 +DA +DB +0F +DB +07 +18 +43 +10 +BD +FF +B5 +0D +46 +14 +46 +85 +B0 +48 +68 +51 +68 +00 +F0 +2C +FC +00 +91 +01 +90 +A8 +68 +A1 +68 +00 +F0 +26 +FC +02 +91 +03 +90 +A8 +68 +61 +68 +00 +F0 +20 +FC +02 +9A +12 +18 +82 +42 +02 +92 +01 +D2 +01 +20 +00 +E0 +00 +20 +01 +9A +0B +18 +D2 +18 +00 +28 +01 +92 +02 +D0 +8A +42 +02 +D9 +03 +E0 +8A +42 +01 +D2 +01 +20 +00 +E0 +00 +20 +00 +99 +08 +18 +00 +90 +68 +68 +A1 +68 +00 +F0 +03 +FC +02 +9A +12 +18 +82 +42 +02 +92 +01 +D2 +01 +20 +00 +E0 +00 +20 +01 +9A +0B +18 +D2 +18 +00 +28 +01 +92 +02 +D0 +8A +42 +02 +D9 +03 +E0 +8A +42 +01 +D2 +01 +20 +00 +E0 +00 +20 +00 +99 +08 +18 +00 +90 +28 +68 +21 +68 +40 +00 +49 +00 +40 +08 +49 +08 +40 +18 +FA +49 +47 +18 +14 +E0 +01 +99 +40 +00 +C9 +0F +08 +43 +00 +90 +01 +98 +02 +99 +40 +00 +C9 +0F +08 +43 +01 +90 +02 +98 +03 +99 +40 +00 +C9 +0F +08 +43 +02 +90 +03 +98 +40 +00 +7F +1E +03 +90 +00 +98 +00 +28 +E7 +DA +08 +98 +00 +28 +01 +D0 +EC +4E +00 +E0 +00 +26 +B7 +42 +01 +DA +01 +20 +00 +E0 +00 +20 +00 +28 +04 +90 +2A +D0 +F7 +1B +F8 +06 +C0 +0E +15 +D0 +02 +9B +20 +21 +09 +1A +03 +9A +8B +40 +1A +43 +03 +92 +02 +9A +01 +9B +C2 +40 +8B +40 +1A +43 +02 +92 +01 +9A +00 +9B +C2 +40 +8B +40 +00 +99 +1A +43 +01 +92 +C1 +40 +00 +91 +7B +11 +0D +D0 +6F +46 +03 +20 +C1 +1A +03 +D5 +00 +21 +82 +00 +B9 +50 +03 +E0 +8A +00 +81 +00 +BA +58 +7A +50 +40 +1E +F3 +D5 +37 +46 +03 +98 +02 +99 +00 +28 +00 +D0 +01 +20 +01 +43 +08 +98 +02 +91 +00 +28 +08 +46 +0C +D0 +00 +28 +00 +D0 +01 +20 +01 +99 +01 +9A +49 +05 +08 +43 +01 +21 +D2 +0A +C9 +02 +D2 +02 +01 +92 +00 +E0 +01 +21 +0E +9B +01 +22 +D2 +07 +01 +2B +02 +D0 +00 +2B +03 +D0 +13 +E0 +00 +28 +07 +D1 +20 +E0 +90 +42 +04 +D8 +90 +42 +0C +D1 +01 +9B +0B +42 +09 +D0 +01 +9B +59 +18 +01 +91 +05 +D1 +00 +99 +49 +1C +00 +91 +01 +D1 +7F +1C +00 +92 +00 +28 +0D +D0 +10 +21 +08 +46 +00 +20 +C0 +46 +04 +98 +00 +28 +06 +D0 +0F +98 +00 +28 +03 +D0 +08 +21 +08 +46 +00 +20 +C0 +46 +28 +68 +21 +68 +01 +9B +00 +9A +48 +40 +C1 +0F +05 +98 +C9 +07 +39 +43 +0E +C0 +09 +B0 +F0 +BD +FF +B5 +87 +B0 +09 +9A +08 +98 +08 +99 +53 +68 +92 +68 +40 +68 +89 +68 +96 +46 +00 +22 +03 +93 +17 +46 +94 +46 +08 +9A +12 +68 +53 +00 +09 +9A +5B +08 +12 +68 +52 +00 +52 +08 +9A +1A +9E +4B +D4 +18 +0A +9A +00 +2A +01 +D0 +35 +22 +00 +E0 +40 +22 +06 +92 +00 +22 +01 +23 +15 +46 +04 +92 +DB +07 +05 +93 +24 +E0 +00 +2D +05 +D1 +75 +46 +03 +46 +03 +9E +4D +1B +B3 +41 +09 +D3 +75 +46 +66 +46 +03 +9B +49 +1B +04 +9D +98 +41 +05 +9B +75 +19 +AC +46 +5F +41 +63 +46 +3B +43 +08 +D0 +05 +9B +04 +9E +DD +07 +76 +08 +2E +43 +5B +08 +04 +96 +05 +93 +01 +E0 +52 +1E +64 +1E +C5 +0F +ED +07 +49 +18 +40 +41 +52 +1C +06 +9B +9A +42 +D7 +DB +00 +2D +04 +D1 +75 +46 +03 +9A +6B +1A +82 +41 +01 +D2 +03 +20 +0C +E0 +03 +9A +0B +46 +6B +40 +42 +40 +13 +43 +03 +D0 +01 +43 +03 +D0 +01 +20 +02 +E0 +02 +20 +00 +E0 +00 +20 +61 +46 +01 +91 +00 +21 +00 +97 +02 +91 +0A +99 +00 +29 +05 +D0 +61 +46 +40 +02 +01 +43 +70 +4B +01 +91 +02 +E0 +80 +07 +00 +23 +02 +90 +9C +42 +01 +DA +01 +20 +00 +E0 +00 +20 +07 +00 +3A +D0 +1A +1B +D0 +06 +C0 +0E +15 +D0 +02 +9D +20 +21 +01 +9C +09 +1A +C5 +40 +8C +40 +25 +43 +02 +9C +8C +40 +00 +D0 +01 +24 +25 +43 +01 +9C +02 +95 +00 +9D +C4 +40 +8D +40 +00 +99 +2C +43 +01 +94 +C1 +40 +00 +91 +54 +11 +1D +D0 +6D +46 +02 +21 +00 +22 +02 +29 +0C +D1 +03 +20 +00 +1B +07 +E0 +00 +28 +04 +DB +86 +00 +AE +59 +00 +2E +00 +D0 +01 +22 +40 +1C +03 +28 +F5 +DB +08 +1B +02 +D5 +88 +00 +2A +50 +04 +E0 +80 +00 +28 +58 +10 +43 +8A +00 +A8 +50 +49 +1E +E3 +D5 +1C +46 +0A +98 +00 +28 +02 +98 +0C +D0 +00 +28 +00 +D0 +01 +20 +01 +99 +01 +9A +49 +05 +08 +43 +01 +21 +D2 +0A +C9 +02 +D2 +02 +01 +92 +00 +E0 +01 +21 +10 +9B +01 +22 +D2 +07 +01 +2B +02 +D0 +00 +2B +03 +D0 +13 +E0 +00 +28 +07 +D1 +1F +E0 +90 +42 +04 +D8 +90 +42 +0C +D1 +01 +9B +0B +42 +09 +D0 +01 +9B +59 +18 +01 +91 +05 +D1 +00 +99 +49 +1C +00 +91 +01 +D1 +64 +1C +00 +92 +00 +28 +0C +D0 +10 +21 +08 +46 +00 +20 +C0 +46 +00 +2F +06 +D0 +11 +98 +00 +28 +03 +D0 +08 +21 +08 +46 +00 +20 +C0 +46 +08 +98 +09 +99 +01 +9A +00 +9B +00 +68 +09 +68 +48 +40 +C1 +0F +07 +98 +C9 +07 +21 +43 +82 +60 +0A +C0 +0B +B0 +F0 +BD +00 +B5 +85 +B0 +01 +93 +00 +92 +0A +46 +01 +46 +00 +23 +02 +A8 +FF +F7 +FC +FD +02 +A8 +07 +C8 +05 +B0 +00 +BD +FF +B5 +0A +46 +1F +46 +85 +B0 +07 +99 +01 +93 +01 +23 +00 +91 +01 +46 +02 +A8 +FF +F7 +EC +FD +02 +99 +03 +98 +04 +9E +CA +0F +49 +00 +D2 +07 +00 +92 +0F +22 +49 +08 +92 +02 +8C +1A +00 +21 +00 +28 +00 +DB +0C +46 +45 +00 +13 +48 +6D +08 +84 +42 +14 +D3 +07 +9A +00 +2A +04 +DA +44 +1E +00 +26 +10 +4D +F6 +43 +02 +E0 +04 +46 +0D +46 +0E +46 +10 +21 +08 +46 +00 +20 +C0 +46 +00 +2F +03 +D0 +04 +21 +08 +46 +00 +20 +C0 +46 +20 +05 +E9 +0A +08 +43 +00 +99 +08 +43 +69 +05 +F2 +0A +11 +43 +AD +E6 +02 +C0 +FF +FF +01 +3C +00 +00 +FF +3F +00 +00 +FF +07 +00 +00 +FF +FF +FF +7F +00 +B5 +85 +B0 +01 +93 +00 +92 +0A +46 +01 +46 +00 +23 +02 +A8 +FF +F7 +9C +FE +02 +A8 +07 +C8 +A8 +E7 +FF +B5 +0A +46 +1F +46 +85 +B0 +07 +99 +01 +93 +01 +23 +00 +91 +01 +46 +02 +A8 +FF +F7 +8D +FE +02 +99 +03 +98 +04 +9E +CA +0F +49 +00 +D2 +07 +00 +92 +0F +22 +49 +08 +92 +02 +8C +1A +00 +21 +00 +28 +00 +DB +0C +46 +45 +00 +11 +48 +6D +08 +84 +42 +14 +D3 +07 +9A +00 +2A +04 +DA +44 +1E +00 +26 +0D +4D +F6 +43 +02 +E0 +04 +46 +0D +46 +0E +46 +10 +21 +08 +46 +00 +20 +C0 +46 +00 +2F +03 +D0 +04 +21 +08 +46 +00 +20 +C0 +46 +20 +05 +E9 +0A +08 +43 +00 +99 +08 +43 +69 +05 +F2 +0A +11 +43 +58 +E6 +00 +00 +FF +07 +00 +00 +FF +FF +FF +7F +01 +46 +80 +08 +08 +1A +02 +09 +10 +18 +02 +0A +10 +18 +02 +0C +10 +18 +C0 +08 +82 +00 +12 +18 +52 +00 +89 +1A +01 +E0 +40 +1C +0A +39 +0A +29 +FB +D2 +70 +47 +00 +48 +70 +47 +18 +00 +00 +30 +75 +46 +FF +F7 +F9 +FF +AE +46 +05 +00 +69 +46 +53 +46 +C0 +08 +C0 +00 +85 +46 +18 +B0 +20 +B5 +FE +F7 +E4 +FE +60 +BC +B6 +46 +00 +26 +00 +27 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +C0 +C5 +40 +3D +49 +08 +49 +00 +8D +46 +70 +47 +10 +B5 +04 +46 +C0 +46 +C0 +46 +20 +46 +FE +F7 +74 +FA +10 +BD +00 +00 +82 +07 +8B +07 +9A +42 +3F +D1 +70 +B5 +92 +0F +0A +D0 +03 +24 +02 +78 +0B +78 +40 +1C +49 +1C +00 +2A +33 +D0 +9A +42 +31 +D1 +20 +42 +F5 +D1 +21 +4E +F4 +01 +04 +C8 +08 +C9 +95 +1B +95 +43 +25 +40 +18 +D1 +9A +42 +0F +D1 +04 +C8 +08 +C9 +95 +1B +95 +43 +25 +40 +10 +D1 +9A +42 +07 +D1 +04 +C8 +08 +C9 +95 +1B +95 +43 +25 +40 +08 +D1 +9A +42 +E7 +D0 +12 +BA +1B +BA +01 +20 +9A +42 +00 +D2 +40 +42 +70 +BD +12 +BA +1B +BA +2D +BA +18 +24 +10 +00 +E0 +40 +19 +00 +E1 +40 +40 +1A +05 +D1 +2E +00 +E6 +40 +02 +D1 +08 +3C +F4 +D1 +D0 +1A +70 +BD +02 +78 +0B +78 +40 +1C +49 +1C +00 +2A +09 +D0 +9A +42 +07 +D1 +02 +78 +0B +78 +40 +1C +49 +1C +00 +2A +01 +D0 +9A +42 +EF +D0 +D0 +1A +70 +47 +01 +01 +01 +01 +00 +22 +03 +09 +8B +42 +73 +D3 +03 +0A +8B +42 +58 +D3 +03 +0B +8B +42 +3C +D3 +03 +0C +8B +42 +21 +D3 +12 +E0 +03 +46 +0B +43 +7F +D4 +00 +22 +43 +08 +8B +42 +74 +D3 +03 +09 +8B +42 +5F +D3 +03 +0A +8B +42 +44 +D3 +03 +0B +8B +42 +28 +D3 +03 +0C +8B +42 +0D +D3 +09 +02 +FF +22 +12 +BA +03 +0C +8B +42 +02 +D3 +12 +12 +09 +02 +65 +D0 +03 +0B +8B +42 +19 +D3 +00 +E0 +09 +0A +C3 +0B +8B +42 +01 +D3 +CB +03 +C0 +1A +52 +41 +83 +0B +8B +42 +01 +D3 +8B +03 +C0 +1A +52 +41 +43 +0B +8B +42 +01 +D3 +4B +03 +C0 +1A +52 +41 +03 +0B +8B +42 +01 +D3 +0B +03 +C0 +1A +52 +41 +C3 +0A +8B +42 +01 +D3 +CB +02 +C0 +1A +52 +41 +83 +0A +8B +42 +01 +D3 +8B +02 +C0 +1A +52 +41 +43 +0A +8B +42 +01 +D3 +4B +02 +C0 +1A +52 +41 +03 +0A +8B +42 +01 +D3 +0B +02 +C0 +1A +52 +41 +CD +D2 +C3 +09 +8B +42 +01 +D3 +CB +01 +C0 +1A +52 +41 +83 +09 +8B +42 +01 +D3 +8B +01 +C0 +1A +52 +41 +43 +09 +8B +42 +01 +D3 +4B +01 +C0 +1A +52 +41 +03 +09 +8B +42 +01 +D3 +0B +01 +C0 +1A +52 +41 +C3 +08 +8B +42 +01 +D3 +CB +00 +C0 +1A +52 +41 +83 +08 +8B +42 +01 +D3 +8B +00 +C0 +1A +52 +41 +43 +08 +8B +42 +01 +D3 +4B +00 +C0 +1A +52 +41 +41 +1A +00 +D2 +01 +46 +52 +41 +10 +46 +70 +47 +5D +E0 +CA +0F +00 +D0 +49 +42 +03 +10 +00 +D3 +40 +42 +53 +40 +9C +46 +00 +22 +03 +09 +8B +42 +2D +D3 +03 +0A +8B +42 +12 +D3 +89 +01 +FC +22 +12 +BA +03 +0A +8B +42 +0C +D3 +89 +01 +92 +11 +8B +42 +08 +D3 +89 +01 +92 +11 +8B +42 +04 +D3 +89 +01 +3A +D0 +92 +11 +00 +E0 +89 +09 +C3 +09 +8B +42 +01 +D3 +CB +01 +C0 +1A +52 +41 +83 +09 +8B +42 +01 +D3 +8B +01 +C0 +1A +52 +41 +43 +09 +8B +42 +01 +D3 +4B +01 +C0 +1A +52 +41 +03 +09 +8B +42 +01 +D3 +0B +01 +C0 +1A +52 +41 +C3 +08 +8B +42 +01 +D3 +CB +00 +C0 +1A +52 +41 +83 +08 +8B +42 +01 +D3 +8B +00 +C0 +1A +52 +41 +D9 +D2 +43 +08 +8B +42 +01 +D3 +4B +00 +C0 +1A +52 +41 +41 +1A +00 +D2 +01 +46 +52 +41 +10 +46 +63 +46 +5B +10 +01 +D3 +40 +42 +00 +2B +00 +D5 +49 +42 +70 +47 +63 +46 +5B +10 +00 +D3 +40 +42 +01 +B5 +04 +49 +00 +28 +02 +DC +49 +1C +08 +40 +00 +E0 +08 +46 +C0 +46 +C0 +46 +02 +BD +FF +FF +FF +7F +F8 +B5 +04 +0C +8B +B2 +26 +46 +82 +B2 +5E +43 +10 +46 +58 +43 +0D +0C +37 +0C +36 +04 +00 +21 +80 +19 +16 +46 +79 +41 +6E +43 +37 +0C +36 +04 +80 +19 +26 +46 +79 +41 +6E +43 +89 +19 +F8 +BD +49 +00 +CA +02 +02 +43 +10 +00 +00 +D0 +04 +20 +4A +0D +01 +D0 +01 +22 +10 +43 +04 +4A +49 +0D +91 +42 +01 +D1 +02 +21 +08 +43 +01 +28 +00 +D1 +05 +20 +70 +47 +FF +07 +00 +00 +30 +38 +0A +28 +01 +D2 +01 +20 +70 +47 +00 +20 +70 +47 +00 +00 +10 +B5 +00 +29 +0A +D0 +08 +78 +00 +28 +07 +D0 +05 +48 +78 +44 +FF +F7 +6C +FE +00 +28 +01 +D0 +00 +20 +10 +BD +02 +48 +78 +44 +10 +BD +00 +00 +6A +03 +00 +00 +62 +03 +00 +00 +70 +B5 +01 +25 +ED +07 +04 +00 +4C +40 +20 +D4 +44 +1A +01 +D2 +00 +1B +09 +19 +C6 +0D +4B +00 +F2 +B2 +FF +2A +29 +D0 +1B +0E +2C +D0 +00 +02 +0C +02 +28 +43 +2C +43 +D3 +1A +DC +40 +05 +19 +10 +D2 +28 +0A +02 +D3 +40 +1C +6D +06 +11 +D0 +76 +1E +F6 +05 +80 +19 +FF +2A +00 +DA +70 +BD +C0 +0D +C0 +05 +70 +BD +69 +40 +00 +F0 +7A +F8 +01 +20 +05 +43 +C5 +41 +52 +1C +76 +1C +E8 +E7 +64 +08 +9C +40 +C9 +01 +61 +40 +89 +00 +E7 +D1 +01 +24 +A0 +43 +E4 +E7 +1B +0E +44 +02 +00 +D0 +03 +48 +70 +BD +00 +2A +FC +D1 +C0 +0F +C0 +07 +70 +BD +00 +BF +00 +00 +C0 +7F +70 +B5 +42 +00 +64 +41 +4B +00 +5C +41 +12 +0E +39 +D0 +1B +0E +38 +D0 +FF +2A +3C +D0 +FF +2B +3A +D0 +D2 +18 +7F +3A +40 +02 +49 +02 +40 +0A +49 +0A +45 +18 +ED +01 +06 +00 +4E +43 +00 +0A +09 +0A +48 +43 +01 +04 +73 +1A +40 +19 +19 +0C +43 +18 +99 +0F +04 +D0 +5B +08 +01 +21 +49 +07 +5B +1A +52 +1C +D8 +09 +04 +D3 +40 +1C +F5 +03 +01 +D1 +9D +06 +07 +D0 +FF +2A +08 +D2 +D5 +05 +06 +D0 +E4 +07 +20 +43 +40 +19 +70 +BD +01 +25 +A8 +43 +F4 +E7 +00 +2A +01 +DC +E0 +07 +70 +BD +24 +02 +FF +20 +20 +43 +C0 +05 +70 +BD +1B +0E +FF +2A +03 +D0 +FF +2B +01 +D0 +E0 +07 +70 +BD +FF +26 +36 +06 +45 +00 +B5 +42 +06 +D8 +4D +00 +B5 +42 +03 +D8 +D2 +18 +FF +2A +00 +D0 +E7 +E7 +00 +48 +70 +BD +00 +00 +C0 +7F +70 +B5 +01 +25 +ED +07 +04 +00 +4C +40 +22 +D4 +44 +1A +02 +D2 +6C +40 +00 +1B +09 +19 +C6 +0D +4B +00 +F2 +B2 +FF +2A +4B +D0 +1B +0E +50 +D0 +00 +02 +0C +02 +A8 +43 +2C +43 +D3 +1A +DC +40 +05 +1B +05 +D5 +AD +00 +19 +D3 +6D +08 +76 +1E +52 +1E +37 +D0 +F6 +05 +28 +0A +01 +D2 +80 +19 +70 +BD +70 +41 +6D +06 +03 +D0 +70 +BD +69 +40 +FF +F7 +3C +FF +9C +40 +09 +02 +61 +40 +49 +00 +01 +D0 +40 +1E +70 +BD +01 +24 +A0 +43 +70 +BD +6D +08 +1D +D0 +01 +20 +2B +0C +01 +D1 +2D +04 +10 +30 +2B +0E +01 +D1 +2D +02 +08 +30 +2B +0F +01 +D1 +2D +01 +00 +1D +AB +0F +01 +D1 +AD +00 +80 +1C +EB +0F +01 +D1 +6D +00 +40 +1C +36 +1A +12 +1A +6D +00 +68 +0A +F5 +05 +40 +19 +01 +2A +02 +DB +70 +BD +00 +20 +70 +BD +C0 +36 +30 +0A +C0 +07 +70 +BD +1B +0E +44 +02 +01 +D1 +FF +2B +00 +D1 +02 +48 +70 +BD +00 +2A +F0 +D0 +70 +BD +00 +00 +C0 +7F +03 +B4 +02 +48 +78 +44 +84 +46 +03 +BC +60 +47 +F9 +EF +FF +FF +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +41 +42 +43 +44 +45 +46 +40 +30 +58 +00 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +61 +62 +63 +64 +65 +66 +40 +30 +78 +00 +04 +00 +00 +08 +00 +00 +00 +00 +00 +00 +00 +02 +00 +01 +00 +00 +10 +81 +82 +83 +84 +85 +86 +87 +88 +89 +8B +8C +8D +8E +8F +91 +92 +93 +95 +96 +97 +99 +9A +9C +9D +9F +A0 +A2 +A3 +A5 +A7 +A8 +AA +AC +AE +B0 +B2 +B3 +B5 +B7 +B9 +BC +BE +C0 +C2 +C5 +C7 +C9 +CC +CE +D1 +D4 +D7 +D9 +DC +DF +E2 +E6 +E9 +EC +F0 +F3 +F7 +FA +FE +00 +00 +00 +02 +40 +00 +00 +00 +00 +00 +A0 +00 +00 +00 +00 +05 +40 +00 +00 +00 +00 +00 +C8 +00 +00 +00 +00 +0C +40 +00 +00 +00 +00 +40 +9C +00 +00 +00 +00 +19 +40 +00 +00 +00 +20 +BC +BE +00 +00 +00 +00 +34 +40 +00 +00 +BF +C9 +1B +8E +00 +00 +00 +04 +B5 +40 +00 +00 +50 +4B +CF +D0 +66 +07 +E2 +CF +01 +00 +00 +00 +6C +41 +00 +00 +3E +82 +51 +AA +DF +EE +A7 +34 +01 +00 +00 +00 +D9 +42 +00 +00 +DC +B5 +A0 +E2 +3A +30 +1F +97 +FF +FF +FF +FF +B4 +45 +00 +00 +FD +25 +A0 +C8 +E9 +A3 +C1 +4F +FF +FF +FF +FF +FF +3F +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +FF +3F +00 +00 +00 +00 +00 +80 +00 +00 +00 +00 +60 +23 +00 +00 +00 +00 +00 +30 +18 +00 +00 +00 +1C +01 +00 +00 +78 +23 +00 +00 +18 +00 +00 +30 +60 +04 +00 +00 +3C +01 +00 +00 +1C +00 +00 +00 +43 +00 +00 +00 +F8 +FF +FF +FF +0C +00 +00 +00 +0E +00 +00 +00 +0F +00 +00 +00 +2E +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +1C +4E +0E +00 +00 +00 +00