diff --git a/dev/sim/verilator/cmod7_kintex_main_ram.init b/dev/sim/verilator/cmod7_kintex_main_ram.init new file mode 100644 index 0000000..e69de29 diff --git a/dev/sim/verilator/cmod7_kintex_mem.init b/dev/sim/verilator/cmod7_kintex_mem.init new file mode 100644 index 0000000..e69de29 diff --git a/dev/sim/verilator/cmod7_kintex_rom.init b/dev/sim/verilator/cmod7_kintex_rom.init new file mode 100644 index 0000000..deb17e7 --- /dev/null +++ b/dev/sim/verilator/cmod7_kintex_rom.init @@ -0,0 +1,3795 @@ +48000400 +44000002 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48001010 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48012134 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +7CBE6AA6 +2C250000 +408200E0 +3C608C00 +3800001F +38400015 +38800000 +3900023F +7C7CFBA6 +7C4011A6 +7C8009A6 +7D0001A6 +4C00012C +39400000 +654A0000 +614A003F +3800001E +38800000 +64840001 +60840000 +39000000 +65080001 +61080000 +6108023F +7D4011A6 +7C8009A6 +7D0001A6 +4C00012C +3C608800 +3800000F +3840003F +38800000 +3900023F +7C7CFBA6 +7C4011A6 +7C8009A6 +7D0001A6 +4C00012C +3800000D +38800000 +64840001 +60840000 +39000000 +65080001 +61080000 +6108023F +7D4011A6 +7C8009A6 +7D0001A6 +4C00012C +48000004 +39400000 +654A8002 +614AB000 +7D400124 +4C00012C +802008FA +48000020 +39400000 +654A8002 +614AB000 +7D400124 +4C00012C +802008FE +48000004 +3C600000 +60630C34 +7C6903A6 +7C7E6AA6 +4E800421 +480002E4 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +48000000 +00000000 +48000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +48000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +6D61696E +28256929 +0A000001 +FFF80000 +FFF80000 +08080808 +08080808 +08282828 +28280808 +08080808 +08080808 +08080808 +08080808 +A0101010 +10101010 +10101010 +10101010 +04040404 +04040404 +04041010 +10101010 +10414141 +41414101 +01010101 +01010101 +01010101 +01010101 +01010110 +10101010 +10424242 +42424202 +02020202 +02020202 +02020202 +02020202 +02020210 +10101008 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +A0101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010110 +01010101 +01010102 +02020202 +02020202 +02020202 +02020202 +02020202 +02020210 +02020202 +02020202 +41626F72 +7465642E +00000000 +30313233 +34353637 +38394142 +43444546 +4748494A +4B4C4D4E +4F505152 +53545556 +5758595A +00000000 +30313233 +34353637 +38396162 +63646566 +6768696A +6B6C6D6E +6F707172 +73747576 +7778797A +00000000 +3C4E554C +4C3E0000 +00001D18 +00001D48 +00001D48 +00001D28 +00001D48 +00001D48 +00001D48 +00001D48 +00001D48 +00001D48 +00001D48 +00001D08 +00001D48 +00001CF8 +00001D48 +00001D48 +00001D38 +00002480 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024B8 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +000024E0 +00001FBC +000024D0 +000024E0 +000024E0 +000024E0 +000024E0 +000024D0 +000024E0 +000024E0 +000024E0 +000024E0 +00002304 +000024AC +0000225C +000024E0 +000024E0 +000020D8 +000024E0 +00002558 +000024E0 +000024E0 +000024C4 +00000000 +9421FFF0 +7C691B78 +99210008 +3D200001 +81292000 +39090001 +3D400001 +910A2000 +89410008 +99490000 +60000000 +38210010 +4E800020 +9421FFC0 +7C0802A6 +90010044 +90610038 +3D200001 +39292000 +9121000C +3D200001 +39292040 +91210010 +81210038 +2C090000 +4182000C +3920FFFF +48000190 +3D200000 +392936D0 +91210008 +48000028 +8121000C +39490004 +9141000C +81410008 +814A0000 +91490000 +81210008 +39290004 +91210008 +81410008 +3D200000 +39293B4C +7C0A4840 +4180FFCC +3D200001 +3929247C +91210008 +48000024 +81210008 +39490004 +91410008 +39400000 +91490000 +81210008 +39290004 +91210008 +81410008 +3D200001 +39292498 +7C0A4840 +4180FFD0 +3D200000 +38690C00 +4CC63182 +480026D1 +38600077 +48002719 +38600074 +48002711 +38600066 +48002709 +3860000A +48002701 +80810038 +3D200000 +386908F0 +4CC63182 +480028F5 +3D200300 +91210034 +81210034 +7D334BA6 +60000000 +39200000 +91210030 +81210030 +7D3603A6 +60000000 +39200000 +9121002C +8121002C +7D3D43A6 +60000000 +39200000 +91210028 +81210028 +7D3C43A6 +60000000 +3D20FE00 +91210024 +81210024 +7D3053A6 +60000000 +7D36FAA6 +91210020 +81210020 +552905EA +9121001C +8121001C +7D36FBA6 +60000000 +39200000 +91210018 +81210018 +7D3053A6 +60000000 +39200000 +91210014 +81210014 +7D3453A6 +60000000 +81210010 +7D234B78 +4801136C +48000000 +7D234B78 +80010044 +7C0803A6 +38210040 +4E800020 +9421FFE0 +7C0802A6 +90010024 +90610018 +39200001 +9121000C +81410018 +3D200867 +61295309 +7C0A4800 +4182000C +3C608000 +4BFFF9B5 +39200000 +91210008 +4800008C +81210008 +552A103A +3D200001 +39292340 +7D2A4A14 +81290000 +91210010 +81210008 +552A103A +3D200001 +392923E0 +7D2A4A14 +81290000 +91210014 +8121000C +2C090000 +4182001C +81410010 +81210014 +7C0A4800 +4082000C +39200001 +48000008 +39200000 +9121000C +8121000C +2C090000 +40820010 +81210008 +7D234B78 +4BFFF92D +81210008 +39290001 +91210008 +81210008 +2809001F +4081FF70 +39200021 +91210008 +81210008 +552A103A +3D200001 +39292340 +7D2A4A14 +81290000 +91210010 +81210008 +552A103A +3D200001 +392923E0 +7D2A4A14 +81290000 +55290644 +91210014 +8121000C +2C090000 +4182001C +81410010 +81210014 +7C0A4800 +4082000C +39200001 +48000008 +39200000 +9121000C +8121000C +2C090000 +40820010 +81210008 +7D234B78 +4BFFF88D +39200022 +91210008 +4800008C +81210008 +552A103A +3D200001 +39292340 +7D2A4A14 +81290000 +91210010 +81210008 +552A103A +3D200001 +392923E0 +7D2A4A14 +81290000 +91210014 +8121000C +2C090000 +4182001C +81410010 +81210014 +7C0A4800 +4082000C +39200001 +48000008 +39200000 +9121000C +8121000C +2C090000 +40820010 +81210008 +7D234B78 +4BFFF805 +81210008 +39290001 +91210008 +81210008 +28090023 +4081FF70 +4BFFF7E5 +48000000 +9421FFF0 +90610008 +9081000C +48011234 +60000000 +38210010 +4E800020 +48000000 +9421FFF0 +7C691B78 +99210008 +89210008 +3D400000 +394A0904 +7D2A48AE +552907BC +2C090000 +41820010 +89210008 +3929FFE0 +99210008 +89210008 +7D234B78 +38210010 +4E800020 +9421FFF0 +7C691B78 +B1210008 +A1210008 +5529402E +7D2A0734 +A1210008 +5529C23E +5529043E +7D290734 +7D494B78 +7D290734 +5529043E +7D234B78 +38210010 +4E800020 +9421FFF0 +90610008 +81210008 +552A463E +81210008 +5529C23E +5529042E +7D4A4B78 +81210008 +5529402E +5529021E +7D4A4B78 +81210008 +5529C00E +7D494B78 +7D234B78 +38210010 +4E800020 +9421FFF0 +90610008 +9081000C +48000028 +81210008 +89290000 +2C090000 +4082000C +39200000 +4800002C +81210008 +39290001 +91210008 +81210008 +89490000 +8121000C +5529063E +7C0A4840 +4082FFC8 +81210008 +7D234B78 +38210010 +4E800020 +9421FFE0 +90610018 +9081001C +81210018 +91210008 +48000058 +8121001C +9121000C +48000030 +81210008 +89490000 +8121000C +89290000 +7C0A4840 +4082000C +81210008 +48000040 +8121000C +39290001 +9121000C +8121000C +89290000 +2C090000 +4082FFC8 +81210008 +39290001 +91210008 +81210008 +89290000 +2C090000 +4082FFA0 +39200000 +7D234B78 +38210020 +4E800020 +9421FFE0 +7C0802A6 +90010024 +90610018 +9081001C +80610018 +480003DD +7C6A1B78 +81210018 +7D295214 +91210008 +81210008 +89490000 +8121001C +5529063E +7C0A4840 +4082000C +81210008 +48000024 +81210008 +3929FFFF +91210008 +81410008 +81210018 +7C0A4840 +4080FFC8 +39200000 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFE0 +90610008 +9081000C +90A10010 +48000030 +81210008 +89490000 +81210010 +5529063E +7C0A4840 +4082000C +81210008 +48000038 +81210008 +39290001 +91210008 +8121000C +3949FFFF +9141000C +2C090000 +41820014 +81210008 +89290000 +2C090000 +4082FFB4 +39200000 +7D234B78 +38210020 +4E800020 +9421FFE0 +90610018 +9081001C +81210018 +91210008 +60000000 +8141001C +392A0001 +9121001C +81210018 +39090001 +91010018 +894A0000 +99490000 +89290000 +2C090000 +4082FFD8 +81210008 +7D234B78 +38210020 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +81210018 +91210008 +48000048 +8121001C +89490000 +81210008 +99490000 +81210008 +89290000 +2C090000 +41820010 +8121001C +39290001 +9121001C +81210008 +39290001 +91210008 +81210020 +3929FFFF +91210020 +81210020 +2C090000 +4082FFB4 +81210018 +7D234B78 +38210030 +4E800020 +9421FFE0 +90610018 +9081001C +81210018 +89490000 +8121001C +39090001 +9101001C +89290000 +7D295050 +5529063E +99210008 +89210008 +7D290774 +2C090000 +40820020 +81210018 +39490001 +91410018 +89290000 +2C090000 +41820008 +4BFFFFB4 +89210008 +7D290774 +7D234B78 +38210020 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +39200000 +9121000C +39200000 +99210008 +4800005C +81210018 +89490000 +8121001C +39090001 +9101001C +89290000 +7D295050 +5529063E +99210008 +89210008 +7D290774 +2C090000 +40820038 +81210018 +39490001 +91410018 +89290000 +2C090000 +41820020 +8121000C +39290001 +9121000C +8141000C +81210020 +7C0A4840 +4180FF9C +89210008 +7D290774 +7D234B78 +38210030 +4E800020 +9421FFE0 +90610018 +9081001C +81210018 +91210008 +48000010 +81210018 +39290001 +91210018 +81210018 +89290000 +2C090000 +4082FFE8 +60000000 +8141001C +392A0001 +9121001C +81210018 +39090001 +91010018 +894A0000 +99490000 +89290000 +2C090000 +4082FFD8 +81210008 +7D234B78 +38210020 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +81210018 +91210008 +81210020 +2C090000 +4182007C +48000010 +81210018 +39290001 +91210018 +81210018 +89290000 +2C090000 +4082FFE8 +4800002C +81210020 +3929FFFF +91210020 +81210020 +2C090000 +40820014 +81210018 +39400000 +99490000 +48000030 +8141001C +392A0001 +9121001C +81210018 +39090001 +91010018 +894A0000 +99490000 +89290000 +2C090000 +4082FFB0 +81210008 +7D234B78 +38210030 +4E800020 +9421FFE0 +90610018 +81210018 +91210008 +48000010 +81210008 +39290001 +91210008 +81210008 +89290000 +2C090000 +4082FFE8 +81410008 +81210018 +7D295050 +7D234B78 +38210020 +4E800020 +9421FFE0 +90610018 +9081001C +81210018 +91210008 +48000010 +81210008 +39290001 +91210008 +8121001C +3949FFFF +9141001C +2C090000 +41820014 +81210008 +89290000 +2C090000 +4082FFD4 +81410008 +81210018 +7D295050 +7D234B78 +38210020 +4E800020 +9421FFE0 +90610018 +9081001C +39200000 +91210010 +81210018 +91210008 +4800007C +8121001C +9121000C +48000028 +81210008 +89490000 +8121000C +89290000 +7C0A4840 +41820024 +8121000C +39290001 +9121000C +8121000C +89290000 +2C090000 +4082FFD0 +48000008 +60000000 +8121000C +89290000 +2C090000 +4082000C +81210010 +48000030 +81210010 +39290001 +91210010 +81210008 +39290001 +91210008 +81210008 +89290000 +2C090000 +4082FF7C +81210010 +7D234B78 +38210020 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +39200000 +91210010 +81210018 +91210008 +8121001C +9121000C +48000050 +81210008 +89290000 +7D2A4B78 +8121000C +89290000 +7D295050 +91210010 +81210010 +2C090000 +40820038 +81210008 +39290001 +91210008 +8121000C +39290001 +9121000C +81210020 +3929FFFF +91210020 +81210020 +2C090000 +4082FFAC +48000008 +60000000 +81210010 +7D234B78 +38210030 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +81210018 +91210008 +4800001C +81210008 +39490001 +91410008 +8141001C +554A063E +99490000 +81210020 +3949FFFF +91410020 +2C090000 +4082FFD8 +81210018 +7D234B78 +38210030 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +81210018 +91210008 +8121001C +9121000C +48000024 +8141000C +392A0001 +9121000C +81210008 +39090001 +91010008 +894A0000 +99490000 +81210020 +3949FFFF +91410020 +2C090000 +4082FFD0 +81210018 +7D234B78 +38210030 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +81410018 +8121001C +7C0A4840 +41810050 +81210018 +91210008 +8121001C +9121000C +48000024 +8141000C +392A0001 +9121000C +81210008 +39090001 +91010008 +894A0000 +99490000 +81210020 +3949FFFF +91410020 +2C090000 +4082FFD0 +48000064 +81410018 +81210020 +7D2A4A14 +91210008 +8141001C +81210020 +7D2A4A14 +9121000C +4800002C +8121000C +3929FFFF +9121000C +81210008 +3929FFFF +91210008 +8121000C +89490000 +81210008 +99490000 +81210020 +3949FFFF +91410020 +2C090000 +4082FFC8 +81210018 +7D234B78 +38210030 +4E800020 +9421FFE0 +7C0802A6 +90010024 +90610018 +9081001C +8061001C +4BFFFC51 +7C691B78 +9121000C +8121000C +2C090000 +4082000C +81210018 +48000068 +80610018 +4BFFFC2D +7C691B78 +91210008 +48000040 +81210008 +3929FFFF +91210008 +80A1000C +8081001C +80610018 +4BFFFD65 +7C691B78 +2C090000 +4082000C +81210018 +48000024 +81210018 +39290001 +91210018 +81410008 +8121000C +7C0A4840 +4080FFB8 +39200000 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFD0 +90610018 +9081001C +90A10020 +81210018 +91210008 +48000030 +8121001C +552A063E +81210008 +39090001 +91010008 +89290000 +7C0A4840 +40820010 +81210008 +3929FFFF +4800001C +81210020 +3949FFFF +91410020 +2C090000 +4082FFC4 +39200000 +7D234B78 +38210030 +4E800020 +9421FFD0 +7C0802A6 +90010034 +90610018 +9081001C +90A10020 +39200000 +91210008 +81210020 +2C090000 +4082008C +3920000A +91210020 +81210018 +89290000 +28090030 +408200E4 +39200008 +91210020 +81210018 +39290001 +91210018 +81210018 +89290000 +7D234B78 +4BFFF541 +7C691B78 +28090058 +408200B4 +81210018 +39290001 +89290000 +7D2A4B78 +3D200000 +39290904 +7D2950AE +71290044 +2C090000 +4182008C +81210018 +39290001 +91210018 +39200010 +91210020 +48000074 +81210020 +2C090010 +40820068 +81210018 +89290000 +28090030 +40820058 +81210018 +39290001 +89290000 +7D234B78 +4BFFF4C5 +7C691B78 +28090058 +40820038 +81210018 +39290002 +91210018 +48000028 +81410008 +81210020 +7D2A49D6 +8141000C +7D2A4A14 +91210008 +81210018 +39290001 +91210018 +81210018 +89290000 +7D2A4B78 +3D200000 +39290904 +7D2950AE +71290044 +2C090000 +41820064 +81210018 +89290000 +7D2A4B78 +3D200000 +39290904 +7D2950AE +5529077A +2C090000 +41820014 +81210018 +89290000 +3929FFD0 +4800001C +81210018 +89290000 +7D234B78 +4BFFF41D +7C691B78 +3929FFC9 +9121000C +8141000C +81210020 +7C0A4840 +4180FF5C +8121001C +2C090000 +41820010 +8121001C +81410018 +91490000 +81210008 +7D234B78 +80010034 +7C0803A6 +38210030 +4E800020 +9421FFE0 +7C0802A6 +90010024 +90610008 +9081000C +90A10010 +81210008 +89290000 +2809002D +4082002C +81210008 +39290001 +81410010 +7D455378 +8081000C +7D234B78 +4BFFFDE9 +7C691B78 +7D2900D0 +4800001C +81210010 +7D254B78 +8081000C +80610008 +4BFFFDC9 +7C691B78 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFE0 +90610018 +39200000 +91210008 +48000030 +81210008 +1D49000A +81210018 +81290000 +38E90001 +81010018 +90E80000 +89290000 +7D2A4A14 +3929FFD0 +91210008 +81210018 +81290000 +89290000 +7D2A4B78 +3D200000 +39290904 +7D2950AE +5529077A +2C090000 +4082FFB0 +81210008 +7D234B78 +38210020 +4E800020 +9421FF70 +90610068 +9081006C +90A10070 +90C10074 +90E10078 +9101007C +91210080 +81210080 +55290672 +2C090000 +41820010 +3D200000 +39290A10 +4800000C +3D200000 +39290A38 +91210010 +81210080 +552906F6 +2C090000 +41820010 +81210080 +5529003C +91210080 +81210074 +2C090001 +40810010 +81210074 +2C090024 +4081000C +39200000 +480003FC +81210080 +552907FE +2C090000 +4182000C +39200030 +48000008 +39200020 +99210014 +39200000 +99210008 +81210080 +552907BC +2C090000 +41820080 +81210070 +2C090000 +40800028 +3920002D +99210008 +81210070 +7D2900D0 +91210070 +81210078 +3929FFFF +91210078 +48000050 +81210080 +5529077A +2C090000 +4182001C +3920002B +99210008 +81210078 +3929FFFF +91210078 +48000028 +81210080 +55290738 +2C090000 +41820018 +39200020 +99210008 +81210078 +3929FFFF +91210078 +81210080 +552906B4 +2C090000 +41820038 +81210074 +2C090010 +40820014 +81210078 +3929FFFE +91210078 +4800001C +81210074 +2C090008 +40820010 +81210078 +3929FFFF +91210078 +39200000 +9121000C +81210070 +2C090000 +4082006C +8121000C +39490001 +9141000C +39410008 +7D2A4A14 +39400030 +99490010 +48000058 +81410074 +81210070 +7D095396 +7D4851D6 +7D2A4850 +81410010 +7D4A4A14 +8121000C +39090001 +9101000C +894A0000 +39010008 +7D284A14 +99490010 +81210074 +81410070 +7D2A4B96 +91210070 +81210070 +2C090000 +4082FFB0 +8141000C +8121007C +7C0A4800 +4081000C +8121000C +9121007C +81410078 +8121007C +7D295050 +91210078 +81210080 +71290011 +2C090000 +40820044 +4800002C +81410068 +8121006C +7C0A4840 +40800010 +81210068 +39400020 +99490000 +81210068 +39290001 +91210068 +81210078 +3949FFFF +91410078 +2C090000 +4181FFC8 +89210008 +2C090000 +4182002C +81410068 +8121006C +7C0A4840 +40800010 +81210068 +89410008 +99490000 +81210068 +39290001 +91210068 +81210080 +552906B4 +2C090000 +4182009C +81210074 +2C090008 +40820030 +81410068 +8121006C +7C0A4840 +40800010 +81210068 +39400030 +99490000 +81210068 +39290001 +91210068 +48000064 +81210074 +2C090010 +40820058 +81410068 +8121006C +7C0A4840 +40800010 +81210068 +39400030 +99490000 +81210068 +39290001 +91210068 +81410068 +8121006C +7C0A4840 +40800014 +81210010 +89490021 +81210068 +99490000 +81210068 +39290001 +91210068 +81210080 +552906F6 +2C090000 +40820070 +4800002C +81410068 +8121006C +7C0A4840 +40800010 +81210068 +89410014 +99490000 +81210068 +39290001 +91210068 +81210078 +3949FFFF +91410078 +2C090000 +4181FFC8 +4800002C +81410068 +8121006C +7C0A4840 +40800010 +81210068 +39400030 +99490000 +81210068 +39290001 +91210068 +8121007C +3949FFFF +9141007C +8141000C +7C0A4800 +4180FFC4 +48000038 +81410068 +8121006C +7C0A4840 +4080001C +39410018 +8121000C +7D2A4A14 +89490000 +81210068 +99490000 +81210068 +39290001 +91210068 +8121000C +3949FFFF +9141000C +2C090000 +4181FFBC +4800002C +81410068 +8121006C +7C0A4840 +40800010 +81210068 +39400020 +99490000 +81210068 +39290001 +91210068 +81210078 +3949FFFF +91410078 +2C090000 +4181FFC8 +81210068 +7D234B78 +38210090 +4E800020 +9421FFD0 +7C0802A6 +90010034 +90610018 +9081001C +90A10020 +90C10024 +80C10024 +80A10020 +8081001C +80610018 +4800044D +7C691B78 +91210008 +81410008 +8121001C +7C0A4840 +41800010 +8121001C +3929FFFF +48000008 +81210008 +7D234B78 +80010034 +7C0803A6 +38210030 +4E800020 +9421FF80 +7C0802A6 +90010084 +90610018 +9081001C +90A10020 +90C1002C +90E10030 +91010034 +91210038 +9141003C +40860024 +D8210040 +D8410048 +D8610050 +D8810058 +D8A10060 +D8C10068 +D8E10070 +D9010078 +39200003 +9921000C +39200000 +9921000D +39210088 +91210010 +39210020 +91210014 +3921000C +7D264B78 +80A10020 +8081001C +80610018 +48000389 +7C691B78 +91210008 +81210008 +7D234B78 +80010084 +7C0803A6 +38210080 +4E800020 +9421FF80 +7C0802A6 +90010084 +90610018 +9081001C +90A10020 +90C1002C +90E10030 +91010034 +91210038 +9141003C +40860024 +D8210040 +D8410048 +D8610050 +D8810058 +D8A10060 +D8C10068 +D8E10070 +D9010078 +39200003 +9921000C +39200000 +9921000D +39210088 +91210010 +39210020 +91210014 +3921000C +7D264B78 +80A10020 +8081001C +80610018 +480002E1 +7C691B78 +91210008 +81410008 +8121001C +7C0A4840 +41800010 +8121001C +3929FFFF +48000008 +81210008 +7D234B78 +80010084 +7C0803A6 +38210080 +4E800020 +9421FFE0 +7C0802A6 +90010024 +90610008 +9081000C +90A10010 +80C10010 +80A1000C +3D207FFF +6124FFFF +80610008 +48000275 +7C691B78 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FF80 +7C0802A6 +90010084 +90610018 +9081001C +90A10020 +90C10024 +90E10028 +9101002C +91210030 +91410034 +40860024 +D8210038 +D8410040 +D8610048 +D8810050 +D8A10058 +D8C10060 +D8E10068 +D9010070 +39200002 +9921000C +39200000 +9921000D +39210088 +91210010 +39210018 +91210014 +3921000C +7D264B78 +80A1001C +3D207FFF +6124FFFF +80610018 +480001D1 +7C691B78 +91210008 +81210008 +7D234B78 +80010084 +7C0803A6 +38210080 +4E800020 +3D200001 +81292488 +1D290081 +3D293619 +394962E9 +3D200001 +91492488 +3D200001 +81292488 +7D234B78 +4E800020 +9421FFF0 +90610008 +3D200001 +81410008 +91492488 +60000000 +38210010 +4E800020 +9421FFF0 +7C0802A6 +90010014 +3D200000 +38690A04 +4CC63182 +4800111D +48000000 +9421FFE0 +7C0802A6 +90010024 +90610018 +39200001 +91210008 +89210008 +2C090000 +41820014 +80610018 +4BFFEB75 +7C691B78 +48000008 +81210018 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFE0 +7C0802A6 +90010024 +7C691B78 +B1210018 +39200001 +91210008 +89210008 +2C090000 +41820018 +A1210018 +7D234B78 +4BFFEAE1 +7C691B78 +48000008 +A1210018 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFE0 +7C0802A6 +90010024 +90610018 +39200001 +91210008 +89210008 +2C090000 +41820014 +80610018 +4BFFEAD5 +7C691B78 +48000008 +81210018 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFE0 +7C0802A6 +90010024 +7C691B78 +B1210018 +39200001 +91210008 +89210008 +2C090000 +41820018 +A1210018 +7D234B78 +4BFFEA41 +7C691B78 +48000008 +A1210018 +7D234B78 +80010024 +7C0803A6 +38210020 +4E800020 +9421FFA0 +7C0802A6 +90010064 +90610048 +9081004C +90A10050 +90C10054 +8121004C +2C090000 +4080000C +39200000 +48000D3C +81210048 +91210018 +81410048 +8121004C +7D2A4A14 +9121001C +8141001C +81210048 +7C0A4840 +40800CBC +3920FFFF +9121001C +8141001C +81210048 +7D295050 +9121004C +48000CA0 +81210050 +89290000 +28090025 +41820034 +81410018 +8121001C +7C0A4840 +40800014 +81210050 +89490000 +81210018 +99490000 +81210018 +39290001 +91210018 +48000C54 +39200000 +91210024 +81210050 +39290001 +91210050 +81210050 +89290000 +3929FFE0 +28090010 +4181007C +552A103A +3D200000 +39290A68 +7D2A4A14 +81490000 +3D200000 +39290A68 +7D2A4A14 +7D2903A6 +4E800420 +81210024 +61290010 +91210024 +4BFFFFAC +81210024 +61290004 +91210024 +4BFFFF9C +81210024 +61290008 +91210024 +4BFFFF8C +81210024 +61290020 +91210024 +4BFFFF7C +81210024 +61290001 +91210024 +4BFFFF6C +3920FFFF +91210028 +81210050 +89290000 +7D2A4B78 +3D200000 +39290904 +7D2950AE +5529077A +2C090000 +4182001C +39210050 +7D234B78 +4BFFF501 +7C691B78 +91210028 +4800009C +81210050 +89290000 +2809002A +4082008C +81210050 +39290001 +91210050 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +91210028 +81210028 +2C090000 +4080001C +81210028 +7D2900D0 +91210028 +81210024 +61290010 +91210024 +3920FFFF +9121002C +81210050 +89290000 +2809002E +408200D4 +81210050 +39290001 +91210050 +81210050 +89290000 +7D2A4B78 +3D200000 +39290904 +7D2950AE +5529077A +2C090000 +4182001C +39210050 +7D234B78 +4BFFF409 +7C691B78 +9121002C +48000078 +81210050 +89290000 +2809002A +40820068 +81210050 +39290001 +91210050 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +9121002C +8121002C +2C090000 +4080000C +39200000 +9121002C +3920FFFF +91210030 +81210050 +89290000 +28090068 +41820054 +81210050 +89290000 +2809006C +41820044 +81210050 +89290000 +2809004C +41820034 +81210050 +89290000 +2809005A +41820024 +81210050 +89290000 +2809007A +41820014 +81210050 +89290000 +28090074 +4082004C +81210050 +89290000 +91210030 +81210050 +39290001 +91210050 +81210030 +2C09006C +40820028 +81210050 +89290000 +2809006C +40820018 +3920004C +91210030 +81210050 +39290001 +91210050 +3920000A +91210014 +81210050 +89290000 +3929FFDB +28090053 +41810550 +552A103A +3D200000 +39290AAC +7D2A4A14 +81490000 +3D200000 +39290AAC +7D2A4A14 +7D2903A6 +4E800420 +81210024 +552906F6 +2C090000 +40820048 +4800002C +81410018 +8121001C +7C0A4840 +40800010 +81210018 +39400020 +99490000 +81210018 +39290001 +91210018 +81210028 +3929FFFF +91210028 +81210028 +2C090000 +4181FFC4 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +99210044 +81410018 +8121001C +7C0A4840 +40800010 +81210018 +89410044 +99490000 +81210018 +39290001 +91210018 +4800002C +81410018 +8121001C +7C0A4840 +40800010 +81210018 +39400020 +99490000 +81210018 +39290001 +91210018 +81210028 +3929FFFF +91210028 +81210028 +2C090000 +4181FFC4 +480007E0 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +91210020 +81210020 +2C090000 +40820010 +3D200000 +39290A60 +91210020 +8121002C +7D244B78 +80610020 +4BFFEA25 +7C691B78 +91210034 +81210024 +552906F6 +2C090000 +40820048 +4800002C +81410018 +8121001C +7C0A4840 +40800010 +81210018 +39400020 +99490000 +81210018 +39290001 +91210018 +81210028 +3949FFFF +91410028 +81410034 +7C0A4800 +4180FFC4 +39200000 +91210010 +48000048 +81410018 +8121001C +7C0A4840 +40800014 +81210020 +89490000 +81210018 +99490000 +81210018 +39290001 +91210018 +81210020 +39290001 +91210020 +81210010 +39290001 +91210010 +81410010 +81210034 +7C0A4800 +4180FFB0 +4800002C +81410018 +8121001C +7C0A4840 +40800010 +81210018 +39400020 +99490000 +81210018 +39290001 +91210018 +81210028 +3949FFFF +91410028 +81410034 +7C0A4800 +4180FFC4 +4800065C +81410028 +3920FFFF +7C0A4800 +40820018 +39200008 +91210028 +81210024 +61290021 +91210024 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +7D2A4B78 +81210024 +8101002C +80E10028 +38C00010 +7D455378 +8081001C +80610018 +4BFFEFBD +7C691B78 +91210018 +480005B4 +81210030 +2C09006C +40820074 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +91210040 +81410018 +81210048 +7D495050 +81210040 +91490000 +48000538 +81210030 +2C09005A +41820010 +81210030 +2C09007A +4082007C +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +9121003C +81410018 +81210048 +7D295050 +7D2A4B78 +8121003C +91490000 +60000000 +480004A8 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +91210038 +81410018 +81210048 +7D495050 +81210038 +91490000 +48000438 +81410018 +8121001C +7C0A4840 +40800010 +81210018 +39400025 +99490000 +81210018 +39290001 +91210018 +4800040C +39200008 +91210014 +480000A8 +81210024 +61290040 +91210024 +39200010 +91210014 +48000090 +81210024 +61290002 +91210024 +4800007C +81410018 +8121001C +7C0A4840 +40800010 +81210018 +39400025 +99490000 +81210018 +39290001 +91210018 +81210050 +89290000 +2C090000 +41820034 +81410018 +8121001C +7C0A4840 +40800014 +81210050 +89490000 +81210018 +99490000 +81210018 +39290001 +91210018 +48000370 +81210050 +3929FFFF +91210050 +48000360 +60000000 +81210030 +2C09004C +40820090 +81210054 +89290000 +81410054 +894A0000 +554A07FE +554A063E +7D4A4A14 +5548063E +81410054 +990A0000 +28090006 +41810030 +81210054 +81490008 +81210054 +89290000 +39090002 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000020 +81210054 +81290004 +39290007 +55290038 +39090008 +81410054 +910A0004 +81490000 +81690004 +91410008 +9161000C +48000298 +81210030 +2C09006C +40820088 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +9121000C +39200000 +91210008 +81210024 +552907BC +2C090000 +4182021C +8121000C +9121000C +7D29FE70 +91210008 +48000208 +81210030 +2C09005A +41820010 +81210030 +2C09007A +40820068 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +9121000C +39200000 +91210008 +4800018C +81210030 +2C090074 +40820068 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +9121000C +7D29FE70 +91210008 +4800011C +81210030 +2C090068 +40820090 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +5529043E +9121000C +39200000 +91210008 +81210024 +552907BC +2C090000 +4182009C +A121000E +7D290734 +9121000C +7D29FE70 +91210008 +48000084 +81210054 +89290000 +28090007 +41810030 +81210054 +81490008 +81210054 +89290000 +39090001 +5507063E +81010054 +98E80000 +5529103A +7D2A4A14 +48000018 +81210054 +81290004 +39090004 +81410054 +910A0004 +81290000 +9121000C +39200000 +91210008 +81210024 +552907BC +2C090000 +41820014 +8121000C +9121000C +7D29FE70 +91210008 +8141000C +81210024 +8101002C +80E10028 +80C10014 +7D455378 +8081001C +80610018 +4BFFEA09 +7C691B78 +91210018 +81210050 +39290001 +91210050 +81210050 +89290000 +2C090000 +4082F358 +8121004C +2C090000 +41820034 +81410018 +8121001C +7C0A4840 +40800014 +81210018 +39400000 +99490000 +48000014 +8121001C +3929FFFF +39400000 +99490000 +81410018 +81210048 +7D295050 +7D234B78 +80010064 +7C0803A6 +38210060 +4E800020 +9421FFF0 +90610008 +3D200001 +81410008 +9149248C +60000000 +38210010 +4E800020 +9421FFF0 +90610008 +9081000C +3D200001 +81410008 +91492490 +3D200001 +8141000C +91492494 +60000000 +38210010 +4E800020 +9421FFF0 +7C0802A6 +90010014 +90610008 +3D200001 +8129248C +2C090000 +41820020 +3D200001 +8129248C +81410008 +554A063E +7D435378 +7D2903A6 +4E800421 +81210008 +7D234B78 +80010014 +7C0803A6 +38210010 +4E800020 +9421FFF0 +7C0802A6 +90010014 +3D200001 +81292494 +2C090000 +4182FFF4 +3D200001 +81292494 +7D2903A6 +4E800421 +7C691B78 +2C090000 +4182FFD8 +3D200001 +81292490 +7D2903A6 +4E800421 +7C691B78 +7D234B78 +80010014 +7C0803A6 +38210010 +4E800020 +9421FFF0 +7C0802A6 +90010014 +3D200001 +81292494 +2C090000 +41820028 +3D200001 +81292494 +7D2903A6 +4E800421 +7C691B78 +2C090000 +4182000C +39200001 +48000008 +39200000 +7D234B78 +80010014 +7C0803A6 +38210010 +4E800020 +9421FFF0 +7C0802A6 +90010014 +90610008 +80610008 +48000025 +3860000A +4BFFFED9 +39200001 +7D234B78 +80010014 +7C0803A6 +38210010 +4E800020 +9421FFF0 +7C0802A6 +90010014 +90610008 +48000020 +81210008 +89290000 +7D234B78 +4BFFFE9D +81210008 +39290001 +91210008 +81210008 +89290000 +2C090000 +4082FFD8 +60000000 +60000000 +80010014 +7C0803A6 +38210010 +4E800020 +9421FEE0 +7C0802A6 +90010124 +90610118 +9081011C +3921000C +80C1011C +80A10118 +38800100 +7D234B78 +4BFFEBF9 +7C691B78 +91210008 +3941000C +81210008 +7D2A4A14 +39400000 +99490000 +3921000C +7D234B78 +4BFFFF59 +81210008 +7D234B78 +80010124 +7C0803A6 +38210120 +4E800020 +9421FF80 +7C0802A6 +90010084 +90610018 +90810024 +90A10028 +90C1002C +90E10030 +91010034 +91210038 +9141003C +40860024 +D8210040 +D8410048 +D8610050 +D8810058 +D8A10060 +D8C10068 +D8E10070 +D9010078 +39200001 +9921000C +39200000 +9921000D +39210088 +91210010 +39210020 +91210014 +3921000C +7D244B78 +80610018 +4BFFFF19 +7C691B78 +91210008 +81210008 +7D234B78 +80010084 +7C0803A6 +38210080 +4E800020 +0001C000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +696E666F +20746578 +74006865 +61646572 +20746578 +74000000 +00000000 +00000000 +00000000 +5822C905 +FFFFFFFF +91B6D1A3 +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +7E11EE88 +FFFFFFFF +7FFFFFFF +FFFFFFFF +FFFFFFFF +8C20BDE6 +FFFFFFFF +76D0DADF +15111F42 +FFFFFFFF +36108E50 +FFFFFFFF +FFFFFFFF +328A0CED +FFFFFFFF +FFFFFFFF +AF224C19 +FFFFFFFF +FFFFFFFF +D624B27A +FFFFFFFF +FFFFFFFF +FFFFFFFF +DBFD3628 +89F0006E +FFFFFFFF +FFFFFFFF +FFFFFFFF +00001104 +00010000 +00000000 +0000000D +7C61CC14 +7D230595 +7AC37392 +7E094C11 +7E1CB115 +7A338886 +7C6004D1 +7E09B038 +7C360591 +7E2B00D1 +60000000 +60000000 +60000000 +00010000 +00010004 +00010008 +0001000C +00010010 +00010014 +00010018 +0001001C +00010020 +00010024 +00010028 +0001002C +00010030 +48000014 +60000000 +60000000 +60000000 +60000000 +9023009C +802300A0 +7C2903A6 +382300A4 +384300D8 +80810000 +80A20000 +90850000 +38210004 +38420004 +4200FFEC +3C804800 +60840006 +90850000 +80230094 +7C3B03A6 +80230098 +7C3A03A6 +80230080 +7C2FF120 +80230084 +7C2103A6 +80230088 +7C2903A6 +8023008C +7C2803A6 +80230090 +7C2FCBA6 +80030000 +80230004 +80430008 +80830010 +80A30014 +80C30018 +80E3001C +81030020 +81230024 +81430028 +8163002C +81830030 +81A30034 +81C30038 +81E3003C +82030040 +82230044 +82430048 +8263004C +82830050 +82A30054 +82C30058 +82E3005C +83030060 +83230064 +83430068 +8363006C +83830070 +83A30074 +83C30078 +83E3007C +8063000C +4C000064 +4800000C +60000000 +60000000 +7C2FCBA6 +3C200001 +60212340 +90010000 +90410008 +9061000C +90810010 +90A10014 +90C10018 +90E1001C +91010020 +91210024 +91410028 +9161002C +91810030 +91A10034 +91C10038 +91E1003C +92010040 +92210044 +92410048 +9261004C +92810050 +92A10054 +92C10058 +92E1005C +93010060 +93210064 +93410068 +9361006C +93810070 +93A10074 +93C10078 +93E1007C +7C4FCAA6 +90410004 +7C400026 +90410080 +7C4102A6 +90410084 +7C4902A6 +90410088 +7C4802A6 +9041008C +7C4FCAA6 +90410090 +3C600001 +60632040 +8023009C +3C600867 +60635309 +48000E13 +60000000 +60000000 +60000000 +60000000 +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +60000000 +60000000 +60000000 +00000000 +CD75F313 +FFFFFFFF +00000000 +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +FFFFFFFF +008A0C68 +FFFFFFFF +7FFFFFFF +FFFFFFFF +FFFFFFFF +8C20BDE6 +FFFFFFFF +08AEBF68 +80000001 +FFFFFFFF +00000000 +FFFFFFFF +FFFFFFFF +328A0CED +FFFFFFFF +FFFFFFFF +AF224C19 +FFFFFFFF +FFFFFFFF +D624B27A +FFFFFFFF +FFFFFFFF +FFFFFFFF +9BFD3628 +98F0006E +FFFFFFFF +FFFFFFFF +FFFFFFFF +00001104 +00010038 diff --git a/dev/sim/verilator/cmod7_kintex_sram.init b/dev/sim/verilator/cmod7_kintex_sram.init new file mode 100644 index 0000000..e69de29 diff --git a/dev/sim/verilator/readme.md b/dev/sim/verilator/readme.md index e75c602..55b46c1 100644 --- a/dev/sim/verilator/readme.md +++ b/dev/sim/verilator/readme.md @@ -1,15 +1,99 @@ # Verilator -## * verilator now successfully runs, once the nclk[] changes were completed to separate clk and rst, and remove lcb's driving lclk's +## a2o w/WB wrapper + ``` -verilator -cc --exe --trace --Mdir obj_dir --language 1364-2001 -Wno-fatal -Wno-LITENDIAN --error-limit 1 -Iverilog/a2o_litex -Iverilog/work -Iverilog/trilib -Iverilog/unisims a2owb.v tb_litex.cpp |& tee verilator.txt +verilator -cc --exe --trace --Mdir obj_dir --language 1364-2001 -Wno-fatal -Wno-LITENDIAN --error-limit 1 -Iverilog/a2o_litex -Iverilog/work -Iverilog/trilib -Iverilog/unisims a2owb.v tb_litex.cpp |& tee verilator.txt +make -C obj_dir -f Va2owb.mk Va2owb +obj_dir/Va2owb + ``` * about 5 non-scan UNOPTFLATs +## Litex SOC + +* full SOC also runs; now need to add uart to tb and more code to get to litex terminal + +``` +top=cmod7_kintex +build=../../build/litex/build/$top/gateware +# keep consistent naming +mod=soc +cp $build/$top.v $mod.v +sed -i "s/module $top/module $mod/" $mod.v + +# don't absolutely need this? soc will reset itself; also, csr can reset +# make public - would be nice to do these with a --publics +sed -i 's#reg soc_rst =.*;#reg soc_rst /*verilator public*/ = 0;#' $mod.v + +# verilog loads a rom init file; gen'd during soc build or externally +# test3 copies tst to @10000; ALSO! the tst wrapper has to be loaded into ram space since it has save/restore areas. +#cp $build/${top}_rom.init . #LE +cp ../mem/test3/rom_soc.init ${top}_rom.init #BE +touch ${top}_mem.init # csr +touch ${top}_sram.init # on-board +touch ${top}_main_ram.init # ext + +verilator -cc --exe --trace --Mdir obj_dir_$mod --language 1364-2001 -Wno-fatal -Wno-LITENDIAN --error-limit 1 -I$. -Iverilog/a2o_litex -Iverilog/work -Iverilog/trilib -Iverilog/unisims -Iverilog/unisims_soc $mod tb_litex_$mod.cpp |& tee verilator_$mod.txt + +make -C obj_dir_$mod -f V$mod.mk V$mod +obj_dir_$mod/V$mod | tee sim_soc.txt +vcd2fst a2olitex.vcd soc.fst +rm a2olitex.vcd +gtkwave soc.fst soc.gtkw +``` + +##### first try + +* runs until last completion of 134C??? + +``` +00001338 : + 1338: 3c 60 00 00 lis r3,0 + 133c: 60 63 10 60 ori r3,r3,4192 + 1340: 80 23 00 9c lwz r1,156(r3) + 1344: 3c 60 08 67 lis r3,2151 + 1348: 60 63 53 09 ori r3,r3,21257 + 134c: 48 00 0e 0f bla e0c + +00000e0c : + e0c: 94 21 ff e0 stwu r1,-32(r1) + +``` + +* bumped stopOnHang to 500 cycles and it does complete 1C0 after 134C. dsi on stwu. dear=FFFFFFE0. that is suspiciously identical to 0-32. what is trying to be read from @1060 to set r1??? that is in rom space. the tst wrapper is being linked into rom and not relocated! it should probably use a linker-gen'd pointer to use for its r/w data space. but wouldn't generally be building a tst into rom. + +##### second try + +* changed linker.ld to put tst in .data so it's copied by bios to ram... + +``` +00024966 C0: CP 0:000FD8 0000000000000FD8 +00024983 C0: CP 0:000FDC 1:000FE0 0000000000000FDC +00024985 C0: CP 0:000FE4 1:000FF4 0000000000000FE4 +00024986 C0: CP 0:000FF8 1:000FFC 0000000000000FF8 +00025000 ...tick... +00025005 C0: CP 0:001000 0000000000001000 +00025006 C0: CP 0:001004 0000000000001004 +00025008 C0: CP 0:001008 0000000000001008 +00025022 C0: CP 0:00100C 000000000000100C +00025071 C0: CP 0:0007F0 00000000000007F0 +*** Passing IAR detected *** + + +tb_litex_soc + +Cycles run=25074 + +You has opulence. +``` + + + ## Experiments ### core-only initial experiment diff --git a/dev/sim/verilator/soc.v b/dev/sim/verilator/soc.v new file mode 100644 index 0000000..5f85286 --- /dev/null +++ b/dev/sim/verilator/soc.v @@ -0,0 +1,1890 @@ +// ----------------------------------------------------------------------------- +// Auto-Generated by: __ _ __ _ __ +// / / (_) /____ | |/_/ +// / /__/ / __/ -_)> < +// /____/_/\__/\__/_/|_| +// Build your hardware, easily! +// https://github.com/enjoy-digital/litex +// +// Filename : cmod7_kintex.v +// Device : xc7k410t-ffv676-1 +// LiteX sha1 : 33ae301d +// Date : 2022-08-15 13:16:22 +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +// Module +//------------------------------------------------------------------------------ + +module soc ( + output reg serial_tx, + input wire serial_rx, + (* dont_touch = "true" *) input wire clk12, + output wire user_led0, + output wire user_led1, + input wire user_btn0, + input wire user_btn1 +); + + +//------------------------------------------------------------------------------ +// Signals +//------------------------------------------------------------------------------ + +reg soc_rst /*verilator public*/ = 0; +wire cpu_rst; +reg [1:0] reset_storage = 2'd0; +reg reset_re = 1'd0; +reg [31:0] scratch_storage = 32'd305419896; +reg scratch_re = 1'd0; +wire [31:0] bus_errors_status; +wire bus_errors_we; +reg bus_errors_re = 1'd0; +wire bus_error; +reg [31:0] bus_errors = 32'd0; +wire a2o_reset; +reg [2:0] a2o_interrupt = 3'd0; +reg a2o_interruptS = 1'd0; +wire [29:0] a2o_dbus_adr; +wire [31:0] a2o_dbus_dat_w; +wire [31:0] a2o_dbus_dat_r; +wire [3:0] a2o_dbus_sel; +wire a2o_dbus_cyc; +wire a2o_dbus_stb; +wire a2o_dbus_ack; +wire a2o_dbus_we; +reg [2:0] a2o_dbus_cti = 3'd0; +reg [1:0] a2o_dbus_bte = 2'd0; +wire a2o_dbus_err; +wire [1:0] a2o; +wire tx_sink_valid; +reg tx_sink_ready = 1'd0; +wire tx_sink_first; +wire tx_sink_last; +wire [7:0] tx_sink_payload_data; +reg [7:0] tx_data = 8'd0; +reg [3:0] tx_count = 4'd0; +reg tx_enable = 1'd0; +reg tx_tick = 1'd0; +reg [31:0] tx_phase = 32'd0; +reg rx_source_valid = 1'd0; +wire rx_source_ready; +reg rx_source_first = 1'd0; +reg rx_source_last = 1'd0; +reg [7:0] rx_source_payload_data = 8'd0; +reg [7:0] rx_data = 8'd0; +reg [3:0] rx_count = 4'd0; +reg rx_enable = 1'd0; +reg rx_tick = 1'd0; +reg [31:0] rx_phase = 32'd0; +wire rx_rx; +reg rx_rx_d = 1'd0; +reg uart_rxtx_re = 1'd0; +wire [7:0] uart_rxtx_r; +reg uart_rxtx_we = 1'd0; +wire [7:0] uart_rxtx_w; +wire uart_txfull_status; +wire uart_txfull_we; +reg uart_txfull_re = 1'd0; +wire uart_rxempty_status; +wire uart_rxempty_we; +reg uart_rxempty_re = 1'd0; +wire uart_irq; +wire uart_tx_status; +reg uart_tx_pending = 1'd0; +wire uart_tx_trigger; +reg uart_tx_clear = 1'd0; +reg uart_tx_trigger_d = 1'd0; +wire uart_rx_status; +reg uart_rx_pending = 1'd0; +wire uart_rx_trigger; +reg uart_rx_clear = 1'd0; +reg uart_rx_trigger_d = 1'd0; +wire uart_tx0; +wire uart_rx0; +reg [1:0] uart_status_status = 2'd0; +wire uart_status_we; +reg uart_status_re = 1'd0; +wire uart_tx1; +wire uart_rx1; +reg [1:0] uart_pending_status = 2'd0; +wire uart_pending_we; +reg uart_pending_re = 1'd0; +reg [1:0] uart_pending_r = 2'd0; +wire uart_tx2; +wire uart_rx2; +reg [1:0] uart_enable_storage = 2'd0; +reg uart_enable_re = 1'd0; +wire uart_txempty_status; +wire uart_txempty_we; +reg uart_txempty_re = 1'd0; +wire uart_rxfull_status; +wire uart_rxfull_we; +reg uart_rxfull_re = 1'd0; +wire uart_uart_sink_valid; +wire uart_uart_sink_ready; +wire uart_uart_sink_first; +wire uart_uart_sink_last; +wire [7:0] uart_uart_sink_payload_data; +wire uart_uart_source_valid; +wire uart_uart_source_ready; +wire uart_uart_source_first; +wire uart_uart_source_last; +wire [7:0] uart_uart_source_payload_data; +wire uart_tx_fifo_sink_valid; +wire uart_tx_fifo_sink_ready; +reg uart_tx_fifo_sink_first = 1'd0; +reg uart_tx_fifo_sink_last = 1'd0; +wire [7:0] uart_tx_fifo_sink_payload_data; +wire uart_tx_fifo_source_valid; +wire uart_tx_fifo_source_ready; +wire uart_tx_fifo_source_first; +wire uart_tx_fifo_source_last; +wire [7:0] uart_tx_fifo_source_payload_data; +wire uart_tx_fifo_re; +reg uart_tx_fifo_readable = 1'd0; +wire uart_tx_fifo_syncfifo_we; +wire uart_tx_fifo_syncfifo_writable; +wire uart_tx_fifo_syncfifo_re; +wire uart_tx_fifo_syncfifo_readable; +wire [9:0] uart_tx_fifo_syncfifo_din; +wire [9:0] uart_tx_fifo_syncfifo_dout; +reg [4:0] uart_tx_fifo_level0 = 5'd0; +reg uart_tx_fifo_replace = 1'd0; +reg [3:0] uart_tx_fifo_produce = 4'd0; +reg [3:0] uart_tx_fifo_consume = 4'd0; +reg [3:0] uart_tx_fifo_wrport_adr = 4'd0; +wire [9:0] uart_tx_fifo_wrport_dat_r; +wire uart_tx_fifo_wrport_we; +wire [9:0] uart_tx_fifo_wrport_dat_w; +wire uart_tx_fifo_do_read; +wire [3:0] uart_tx_fifo_rdport_adr; +wire [9:0] uart_tx_fifo_rdport_dat_r; +wire uart_tx_fifo_rdport_re; +wire [4:0] uart_tx_fifo_level1; +wire [7:0] uart_tx_fifo_fifo_in_payload_data; +wire uart_tx_fifo_fifo_in_first; +wire uart_tx_fifo_fifo_in_last; +wire [7:0] uart_tx_fifo_fifo_out_payload_data; +wire uart_tx_fifo_fifo_out_first; +wire uart_tx_fifo_fifo_out_last; +wire uart_rx_fifo_sink_valid; +wire uart_rx_fifo_sink_ready; +wire uart_rx_fifo_sink_first; +wire uart_rx_fifo_sink_last; +wire [7:0] uart_rx_fifo_sink_payload_data; +wire uart_rx_fifo_source_valid; +wire uart_rx_fifo_source_ready; +wire uart_rx_fifo_source_first; +wire uart_rx_fifo_source_last; +wire [7:0] uart_rx_fifo_source_payload_data; +wire uart_rx_fifo_re; +reg uart_rx_fifo_readable = 1'd0; +wire uart_rx_fifo_syncfifo_we; +wire uart_rx_fifo_syncfifo_writable; +wire uart_rx_fifo_syncfifo_re; +wire uart_rx_fifo_syncfifo_readable; +wire [9:0] uart_rx_fifo_syncfifo_din; +wire [9:0] uart_rx_fifo_syncfifo_dout; +reg [4:0] uart_rx_fifo_level0 = 5'd0; +reg uart_rx_fifo_replace = 1'd0; +reg [3:0] uart_rx_fifo_produce = 4'd0; +reg [3:0] uart_rx_fifo_consume = 4'd0; +reg [3:0] uart_rx_fifo_wrport_adr = 4'd0; +wire [9:0] uart_rx_fifo_wrport_dat_r; +wire uart_rx_fifo_wrport_we; +wire [9:0] uart_rx_fifo_wrport_dat_w; +wire uart_rx_fifo_do_read; +wire [3:0] uart_rx_fifo_rdport_adr; +wire [9:0] uart_rx_fifo_rdport_dat_r; +wire uart_rx_fifo_rdport_re; +wire [4:0] uart_rx_fifo_level1; +wire [7:0] uart_rx_fifo_fifo_in_payload_data; +wire uart_rx_fifo_fifo_in_first; +wire uart_rx_fifo_fifo_in_last; +wire [7:0] uart_rx_fifo_fifo_out_payload_data; +wire uart_rx_fifo_fifo_out_first; +wire uart_rx_fifo_fifo_out_last; +reg [31:0] timer_load_storage = 32'd0; +reg timer_load_re = 1'd0; +reg [31:0] timer_reload_storage = 32'd0; +reg timer_reload_re = 1'd0; +reg timer_en_storage = 1'd0; +reg timer_en_re = 1'd0; +reg timer_update_value_storage = 1'd0; +reg timer_update_value_re = 1'd0; +reg [31:0] timer_value_status = 32'd0; +wire timer_value_we; +reg timer_value_re = 1'd0; +wire timer_irq; +wire timer_zero_status; +reg timer_zero_pending = 1'd0; +wire timer_zero_trigger; +reg timer_zero_clear = 1'd0; +reg timer_zero_trigger_d = 1'd0; +wire timer_zero0; +wire timer_status_status; +wire timer_status_we; +reg timer_status_re = 1'd0; +wire timer_zero1; +wire timer_pending_status; +wire timer_pending_we; +reg timer_pending_re = 1'd0; +reg timer_pending_r = 1'd0; +wire timer_zero2; +reg timer_enable_storage = 1'd0; +reg timer_enable_re = 1'd0; +reg [31:0] timer_value = 32'd0; +reg crg_rst = 1'd0; +(* dont_touch = "true" *) wire sys_clk; +wire sys_rst; +wire sys2x_clk; +wire idelay_clk; +wire idelay_rst; +wire crg_reset; +reg crg_power_down = 1'd0; +wire crg_locked; +(* dont_touch = "true" *) wire crg_clkin; +wire crg_clkout0; +wire crg_clkout_buf0; +wire crg_clkout1; +wire crg_clkout_buf1; +wire crg_clkout2; +wire crg_clkout_buf2; +reg [3:0] crg_reset_counter = 4'd15; +reg crg_ic_reset = 1'd1; +wire [29:0] ram_bus_adr; +wire [31:0] ram_bus_dat_w; +wire [31:0] ram_bus_dat_r; +wire [3:0] ram_bus_sel; +wire ram_bus_cyc; +wire ram_bus_stb; +reg ram_bus_ack = 1'd0; +wire ram_bus_we; +wire [2:0] ram_bus_cti; +wire [1:0] ram_bus_bte; +reg ram_bus_err = 1'd0; +reg adr_burst = 1'd0; +wire [13:0] adr; +wire [31:0] dat_r; +wire [29:0] interface0_ram_bus_adr; +wire [31:0] interface0_ram_bus_dat_w; +wire [31:0] interface0_ram_bus_dat_r; +wire [3:0] interface0_ram_bus_sel; +wire interface0_ram_bus_cyc; +wire interface0_ram_bus_stb; +reg interface0_ram_bus_ack = 1'd0; +wire interface0_ram_bus_we; +wire [2:0] interface0_ram_bus_cti; +wire [1:0] interface0_ram_bus_bte; +reg interface0_ram_bus_err = 1'd0; +reg sram0_adr_burst = 1'd0; +wire [13:0] sram0_adr; +wire [31:0] sram0_dat_r; +reg [3:0] sram0_we = 4'd0; +wire [31:0] sram0_dat_w; +wire [29:0] interface1_ram_bus_adr; +wire [31:0] interface1_ram_bus_dat_w; +wire [31:0] interface1_ram_bus_dat_r; +wire [3:0] interface1_ram_bus_sel; +wire interface1_ram_bus_cyc; +wire interface1_ram_bus_stb; +reg interface1_ram_bus_ack = 1'd0; +wire interface1_ram_bus_we; +wire [2:0] interface1_ram_bus_cti; +wire [1:0] interface1_ram_bus_bte; +reg interface1_ram_bus_err = 1'd0; +reg sram1_adr_burst = 1'd0; +wire [21:0] sram1_adr; +wire [31:0] sram1_dat_r; +reg [3:0] sram1_we = 4'd0; +wire [31:0] sram1_dat_w; +reg [1:0] leds_storage = 2'd0; +reg leds_re = 1'd0; +reg [1:0] leds_chaser = 2'd0; +reg leds_mode = 1'd0; +wire leds_wait; +wire leds_done; +reg [24:0] leds_count = 25'd25000000; +reg [1:0] leds_leds = 2'd0; +wire [1:0] buttons_status; +wire buttons_we; +reg buttons_re = 1'd0; +reg [13:0] basesoc_adr = 14'd0; +reg basesoc_we = 1'd0; +reg [31:0] basesoc_dat_w = 32'd0; +wire [31:0] basesoc_dat_r; +wire [29:0] basesoc_wishbone_adr; +wire [31:0] basesoc_wishbone_dat_w; +reg [31:0] basesoc_wishbone_dat_r = 32'd0; +wire [3:0] basesoc_wishbone_sel; +wire basesoc_wishbone_cyc; +wire basesoc_wishbone_stb; +reg basesoc_wishbone_ack = 1'd0; +wire basesoc_wishbone_we; +wire [2:0] basesoc_wishbone_cti; +wire [1:0] basesoc_wishbone_bte; +reg basesoc_wishbone_err = 1'd0; +wire [29:0] shared_adr; +wire [31:0] shared_dat_w; +reg [31:0] shared_dat_r = 32'd0; +wire [3:0] shared_sel; +wire shared_cyc; +wire shared_stb; +reg shared_ack = 1'd0; +wire shared_we; +wire [2:0] shared_cti; +wire [1:0] shared_bte; +wire shared_err; +wire request; +wire grant; +reg [3:0] slave_sel = 4'd0; +reg [3:0] slave_sel_r = 4'd0; +reg error = 1'd0; +wire wait_1; +wire done; +reg [19:0] count = 20'd1000000; +wire [13:0] csr_bankarray_interface0_bank_bus_adr; +wire csr_bankarray_interface0_bank_bus_we; +wire [31:0] csr_bankarray_interface0_bank_bus_dat_w; +reg [31:0] csr_bankarray_interface0_bank_bus_dat_r = 32'd0; +reg csr_bankarray_csrbank0_in_re = 1'd0; +wire [1:0] csr_bankarray_csrbank0_in_r; +reg csr_bankarray_csrbank0_in_we = 1'd0; +wire [1:0] csr_bankarray_csrbank0_in_w; +wire csr_bankarray_csrbank0_sel; +wire [13:0] csr_bankarray_interface1_bank_bus_adr; +wire csr_bankarray_interface1_bank_bus_we; +wire [31:0] csr_bankarray_interface1_bank_bus_dat_w; +reg [31:0] csr_bankarray_interface1_bank_bus_dat_r = 32'd0; +reg csr_bankarray_csrbank1_reset0_re = 1'd0; +wire [1:0] csr_bankarray_csrbank1_reset0_r; +reg csr_bankarray_csrbank1_reset0_we = 1'd0; +wire [1:0] csr_bankarray_csrbank1_reset0_w; +reg csr_bankarray_csrbank1_scratch0_re = 1'd0; +wire [31:0] csr_bankarray_csrbank1_scratch0_r; +reg csr_bankarray_csrbank1_scratch0_we = 1'd0; +wire [31:0] csr_bankarray_csrbank1_scratch0_w; +reg csr_bankarray_csrbank1_bus_errors_re = 1'd0; +wire [31:0] csr_bankarray_csrbank1_bus_errors_r; +reg csr_bankarray_csrbank1_bus_errors_we = 1'd0; +wire [31:0] csr_bankarray_csrbank1_bus_errors_w; +wire csr_bankarray_csrbank1_sel; +wire [13:0] csr_bankarray_sram_bus_adr; +wire csr_bankarray_sram_bus_we; +wire [31:0] csr_bankarray_sram_bus_dat_w; +reg [31:0] csr_bankarray_sram_bus_dat_r = 32'd0; +wire [4:0] csr_bankarray_adr; +wire [7:0] csr_bankarray_dat_r; +wire csr_bankarray_sel; +reg csr_bankarray_sel_r = 1'd0; +wire [13:0] csr_bankarray_interface2_bank_bus_adr; +wire csr_bankarray_interface2_bank_bus_we; +wire [31:0] csr_bankarray_interface2_bank_bus_dat_w; +reg [31:0] csr_bankarray_interface2_bank_bus_dat_r = 32'd0; +reg csr_bankarray_csrbank2_out0_re = 1'd0; +wire [1:0] csr_bankarray_csrbank2_out0_r; +reg csr_bankarray_csrbank2_out0_we = 1'd0; +wire [1:0] csr_bankarray_csrbank2_out0_w; +wire csr_bankarray_csrbank2_sel; +wire [13:0] csr_bankarray_interface3_bank_bus_adr; +wire csr_bankarray_interface3_bank_bus_we; +wire [31:0] csr_bankarray_interface3_bank_bus_dat_w; +reg [31:0] csr_bankarray_interface3_bank_bus_dat_r = 32'd0; +reg csr_bankarray_csrbank3_load0_re = 1'd0; +wire [31:0] csr_bankarray_csrbank3_load0_r; +reg csr_bankarray_csrbank3_load0_we = 1'd0; +wire [31:0] csr_bankarray_csrbank3_load0_w; +reg csr_bankarray_csrbank3_reload0_re = 1'd0; +wire [31:0] csr_bankarray_csrbank3_reload0_r; +reg csr_bankarray_csrbank3_reload0_we = 1'd0; +wire [31:0] csr_bankarray_csrbank3_reload0_w; +reg csr_bankarray_csrbank3_en0_re = 1'd0; +wire csr_bankarray_csrbank3_en0_r; +reg csr_bankarray_csrbank3_en0_we = 1'd0; +wire csr_bankarray_csrbank3_en0_w; +reg csr_bankarray_csrbank3_update_value0_re = 1'd0; +wire csr_bankarray_csrbank3_update_value0_r; +reg csr_bankarray_csrbank3_update_value0_we = 1'd0; +wire csr_bankarray_csrbank3_update_value0_w; +reg csr_bankarray_csrbank3_value_re = 1'd0; +wire [31:0] csr_bankarray_csrbank3_value_r; +reg csr_bankarray_csrbank3_value_we = 1'd0; +wire [31:0] csr_bankarray_csrbank3_value_w; +reg csr_bankarray_csrbank3_ev_status_re = 1'd0; +wire csr_bankarray_csrbank3_ev_status_r; +reg csr_bankarray_csrbank3_ev_status_we = 1'd0; +wire csr_bankarray_csrbank3_ev_status_w; +reg csr_bankarray_csrbank3_ev_pending_re = 1'd0; +wire csr_bankarray_csrbank3_ev_pending_r; +reg csr_bankarray_csrbank3_ev_pending_we = 1'd0; +wire csr_bankarray_csrbank3_ev_pending_w; +reg csr_bankarray_csrbank3_ev_enable0_re = 1'd0; +wire csr_bankarray_csrbank3_ev_enable0_r; +reg csr_bankarray_csrbank3_ev_enable0_we = 1'd0; +wire csr_bankarray_csrbank3_ev_enable0_w; +wire csr_bankarray_csrbank3_sel; +wire [13:0] csr_bankarray_interface4_bank_bus_adr; +wire csr_bankarray_interface4_bank_bus_we; +wire [31:0] csr_bankarray_interface4_bank_bus_dat_w; +reg [31:0] csr_bankarray_interface4_bank_bus_dat_r = 32'd0; +reg csr_bankarray_csrbank4_txfull_re = 1'd0; +wire csr_bankarray_csrbank4_txfull_r; +reg csr_bankarray_csrbank4_txfull_we = 1'd0; +wire csr_bankarray_csrbank4_txfull_w; +reg csr_bankarray_csrbank4_rxempty_re = 1'd0; +wire csr_bankarray_csrbank4_rxempty_r; +reg csr_bankarray_csrbank4_rxempty_we = 1'd0; +wire csr_bankarray_csrbank4_rxempty_w; +reg csr_bankarray_csrbank4_ev_status_re = 1'd0; +wire [1:0] csr_bankarray_csrbank4_ev_status_r; +reg csr_bankarray_csrbank4_ev_status_we = 1'd0; +wire [1:0] csr_bankarray_csrbank4_ev_status_w; +reg csr_bankarray_csrbank4_ev_pending_re = 1'd0; +wire [1:0] csr_bankarray_csrbank4_ev_pending_r; +reg csr_bankarray_csrbank4_ev_pending_we = 1'd0; +wire [1:0] csr_bankarray_csrbank4_ev_pending_w; +reg csr_bankarray_csrbank4_ev_enable0_re = 1'd0; +wire [1:0] csr_bankarray_csrbank4_ev_enable0_r; +reg csr_bankarray_csrbank4_ev_enable0_we = 1'd0; +wire [1:0] csr_bankarray_csrbank4_ev_enable0_w; +reg csr_bankarray_csrbank4_txempty_re = 1'd0; +wire csr_bankarray_csrbank4_txempty_r; +reg csr_bankarray_csrbank4_txempty_we = 1'd0; +wire csr_bankarray_csrbank4_txempty_w; +reg csr_bankarray_csrbank4_rxfull_re = 1'd0; +wire csr_bankarray_csrbank4_rxfull_r; +reg csr_bankarray_csrbank4_rxfull_we = 1'd0; +wire csr_bankarray_csrbank4_rxfull_w; +wire csr_bankarray_csrbank4_sel; +wire [13:0] csr_interconnect_adr; +wire csr_interconnect_we; +wire [31:0] csr_interconnect_dat_w; +wire [31:0] csr_interconnect_dat_r; +reg basesoc_rs232phytx_state = 1'd0; +reg basesoc_rs232phytx_next_state = 1'd0; +reg [3:0] tx_count_rs232phytx_next_value0 = 4'd0; +reg tx_count_rs232phytx_next_value_ce0 = 1'd0; +reg serial_tx_rs232phytx_next_value1 = 1'd0; +reg serial_tx_rs232phytx_next_value_ce1 = 1'd0; +reg [7:0] tx_data_rs232phytx_next_value2 = 8'd0; +reg tx_data_rs232phytx_next_value_ce2 = 1'd0; +reg basesoc_rs232phyrx_state = 1'd0; +reg basesoc_rs232phyrx_next_state = 1'd0; +reg [3:0] rx_count_rs232phyrx_next_value0 = 4'd0; +reg rx_count_rs232phyrx_next_value_ce0 = 1'd0; +reg [7:0] rx_data_rs232phyrx_next_value1 = 8'd0; +reg rx_data_rs232phyrx_next_value_ce1 = 1'd0; +wire basesoc_reset0; +wire basesoc_reset1; +wire basesoc_reset2; +wire basesoc_reset3; +wire basesoc_reset4; +wire basesoc_reset5; +wire basesoc_reset6; +wire basesoc_reset7; +wire basesoc_mmcm_fb; +reg basesoc_state = 1'd0; +reg basesoc_next_state = 1'd0; +reg [29:0] array_muxed0 = 30'd0; +reg [31:0] array_muxed1 = 32'd0; +reg [3:0] array_muxed2 = 4'd0; +reg array_muxed3 = 1'd0; +reg array_muxed4 = 1'd0; +reg array_muxed5 = 1'd0; +reg [2:0] array_muxed6 = 3'd0; +reg [1:0] array_muxed7 = 2'd0; +(* async_reg = "true", mr_ff = "true", dont_touch = "true" *) reg xilinxmultiregimpl0_regs0 = 1'd0; +(* async_reg = "true", dont_touch = "true" *) reg xilinxmultiregimpl0_regs1 = 1'd0; +wire xilinxasyncresetsynchronizerimpl0; +wire xilinxasyncresetsynchronizerimpl0_rst_meta; +wire xilinxasyncresetsynchronizerimpl1; +wire xilinxasyncresetsynchronizerimpl1_rst_meta; +wire xilinxasyncresetsynchronizerimpl1_expr; +wire xilinxasyncresetsynchronizerimpl2; +wire xilinxasyncresetsynchronizerimpl2_rst_meta; +(* async_reg = "true", mr_ff = "true", dont_touch = "true" *) reg [1:0] xilinxmultiregimpl1_regs0 = 2'd0; +(* async_reg = "true", dont_touch = "true" *) reg [1:0] xilinxmultiregimpl1_regs1 = 2'd0; +wire xilinxmultiregimpl1; + +//------------------------------------------------------------------------------ +// Combinatorial Logic +//------------------------------------------------------------------------------ + +assign a2o_reset = (soc_rst | cpu_rst); +always @(*) begin + crg_rst <= 1'd0; + if (soc_rst) begin + crg_rst <= 1'd1; + end +end +assign bus_error = error; +always @(*) begin + a2o_interrupt <= 3'd0; + a2o_interrupt[1] <= timer_irq; + a2o_interrupt[0] <= uart_irq; +end +assign bus_errors_status = bus_errors; +always @(*) begin + serial_tx_rs232phytx_next_value_ce1 <= 1'd0; + tx_enable <= 1'd0; + tx_data_rs232phytx_next_value2 <= 8'd0; + tx_data_rs232phytx_next_value_ce2 <= 1'd0; + tx_sink_ready <= 1'd0; + basesoc_rs232phytx_next_state <= 1'd0; + tx_count_rs232phytx_next_value0 <= 4'd0; + tx_count_rs232phytx_next_value_ce0 <= 1'd0; + serial_tx_rs232phytx_next_value1 <= 1'd0; + basesoc_rs232phytx_next_state <= basesoc_rs232phytx_state; + case (basesoc_rs232phytx_state) + 1'd1: begin + tx_enable <= 1'd1; + if (tx_tick) begin + serial_tx_rs232phytx_next_value1 <= tx_data; + serial_tx_rs232phytx_next_value_ce1 <= 1'd1; + tx_count_rs232phytx_next_value0 <= (tx_count + 1'd1); + tx_count_rs232phytx_next_value_ce0 <= 1'd1; + tx_data_rs232phytx_next_value2 <= {1'd1, tx_data[7:1]}; + tx_data_rs232phytx_next_value_ce2 <= 1'd1; + if ((tx_count == 4'd9)) begin + tx_sink_ready <= 1'd1; + basesoc_rs232phytx_next_state <= 1'd0; + end + end + end + default: begin + tx_count_rs232phytx_next_value0 <= 1'd0; + tx_count_rs232phytx_next_value_ce0 <= 1'd1; + serial_tx_rs232phytx_next_value1 <= 1'd1; + serial_tx_rs232phytx_next_value_ce1 <= 1'd1; + if (tx_sink_valid) begin + serial_tx_rs232phytx_next_value1 <= 1'd0; + serial_tx_rs232phytx_next_value_ce1 <= 1'd1; + tx_data_rs232phytx_next_value2 <= tx_sink_payload_data; + tx_data_rs232phytx_next_value_ce2 <= 1'd1; + basesoc_rs232phytx_next_state <= 1'd1; + end + end + endcase +end +always @(*) begin + rx_enable <= 1'd0; + rx_data_rs232phyrx_next_value1 <= 8'd0; + rx_data_rs232phyrx_next_value_ce1 <= 1'd0; + rx_source_valid <= 1'd0; + basesoc_rs232phyrx_next_state <= 1'd0; + rx_count_rs232phyrx_next_value0 <= 4'd0; + rx_count_rs232phyrx_next_value_ce0 <= 1'd0; + rx_source_payload_data <= 8'd0; + basesoc_rs232phyrx_next_state <= basesoc_rs232phyrx_state; + case (basesoc_rs232phyrx_state) + 1'd1: begin + rx_enable <= 1'd1; + if (rx_tick) begin + rx_count_rs232phyrx_next_value0 <= (rx_count + 1'd1); + rx_count_rs232phyrx_next_value_ce0 <= 1'd1; + rx_data_rs232phyrx_next_value1 <= {rx_rx, rx_data[7:1]}; + rx_data_rs232phyrx_next_value_ce1 <= 1'd1; + if ((rx_count == 4'd9)) begin + rx_source_valid <= (rx_rx == 1'd1); + rx_source_payload_data <= rx_data; + basesoc_rs232phyrx_next_state <= 1'd0; + end + end + end + default: begin + rx_count_rs232phyrx_next_value0 <= 1'd0; + rx_count_rs232phyrx_next_value_ce0 <= 1'd1; + if (((rx_rx == 1'd0) & (rx_rx_d == 1'd1))) begin + basesoc_rs232phyrx_next_state <= 1'd1; + end + end + endcase +end +assign uart_uart_sink_valid = rx_source_valid; +assign rx_source_ready = uart_uart_sink_ready; +assign uart_uart_sink_first = rx_source_first; +assign uart_uart_sink_last = rx_source_last; +assign uart_uart_sink_payload_data = rx_source_payload_data; +assign tx_sink_valid = uart_uart_source_valid; +assign uart_uart_source_ready = tx_sink_ready; +assign tx_sink_first = uart_uart_source_first; +assign tx_sink_last = uart_uart_source_last; +assign tx_sink_payload_data = uart_uart_source_payload_data; +assign uart_tx_fifo_sink_valid = uart_rxtx_re; +assign uart_tx_fifo_sink_payload_data = uart_rxtx_r; +assign uart_uart_source_valid = uart_tx_fifo_source_valid; +assign uart_tx_fifo_source_ready = uart_uart_source_ready; +assign uart_uart_source_first = uart_tx_fifo_source_first; +assign uart_uart_source_last = uart_tx_fifo_source_last; +assign uart_uart_source_payload_data = uart_tx_fifo_source_payload_data; +assign uart_txfull_status = (~uart_tx_fifo_sink_ready); +assign uart_txempty_status = (~uart_tx_fifo_source_valid); +assign uart_tx_trigger = uart_tx_fifo_sink_ready; +assign uart_rx_fifo_sink_valid = uart_uart_sink_valid; +assign uart_uart_sink_ready = uart_rx_fifo_sink_ready; +assign uart_rx_fifo_sink_first = uart_uart_sink_first; +assign uart_rx_fifo_sink_last = uart_uart_sink_last; +assign uart_rx_fifo_sink_payload_data = uart_uart_sink_payload_data; +assign uart_rxtx_w = uart_rx_fifo_source_payload_data; +assign uart_rx_fifo_source_ready = (uart_rx_clear | (1'd0 & uart_rxtx_we)); +assign uart_rxempty_status = (~uart_rx_fifo_source_valid); +assign uart_rxfull_status = (~uart_rx_fifo_sink_ready); +assign uart_rx_trigger = uart_rx_fifo_source_valid; +assign uart_tx0 = uart_tx_status; +assign uart_tx1 = uart_tx_pending; +always @(*) begin + uart_tx_clear <= 1'd0; + if ((uart_pending_re & uart_pending_r[0])) begin + uart_tx_clear <= 1'd1; + end +end +assign uart_rx0 = uart_rx_status; +assign uart_rx1 = uart_rx_pending; +always @(*) begin + uart_rx_clear <= 1'd0; + if ((uart_pending_re & uart_pending_r[1])) begin + uart_rx_clear <= 1'd1; + end +end +assign uart_irq = ((uart_pending_status[0] & uart_enable_storage[0]) | (uart_pending_status[1] & uart_enable_storage[1])); +assign uart_tx_status = uart_tx_trigger; +assign uart_rx_status = uart_rx_trigger; +assign uart_tx_fifo_syncfifo_din = {uart_tx_fifo_fifo_in_last, uart_tx_fifo_fifo_in_first, uart_tx_fifo_fifo_in_payload_data}; +assign {uart_tx_fifo_fifo_out_last, uart_tx_fifo_fifo_out_first, uart_tx_fifo_fifo_out_payload_data} = uart_tx_fifo_syncfifo_dout; +assign uart_tx_fifo_sink_ready = uart_tx_fifo_syncfifo_writable; +assign uart_tx_fifo_syncfifo_we = uart_tx_fifo_sink_valid; +assign uart_tx_fifo_fifo_in_first = uart_tx_fifo_sink_first; +assign uart_tx_fifo_fifo_in_last = uart_tx_fifo_sink_last; +assign uart_tx_fifo_fifo_in_payload_data = uart_tx_fifo_sink_payload_data; +assign uart_tx_fifo_source_valid = uart_tx_fifo_readable; +assign uart_tx_fifo_source_first = uart_tx_fifo_fifo_out_first; +assign uart_tx_fifo_source_last = uart_tx_fifo_fifo_out_last; +assign uart_tx_fifo_source_payload_data = uart_tx_fifo_fifo_out_payload_data; +assign uart_tx_fifo_re = uart_tx_fifo_source_ready; +assign uart_tx_fifo_syncfifo_re = (uart_tx_fifo_syncfifo_readable & ((~uart_tx_fifo_readable) | uart_tx_fifo_re)); +assign uart_tx_fifo_level1 = (uart_tx_fifo_level0 + uart_tx_fifo_readable); +always @(*) begin + uart_tx_fifo_wrport_adr <= 4'd0; + if (uart_tx_fifo_replace) begin + uart_tx_fifo_wrport_adr <= (uart_tx_fifo_produce - 1'd1); + end else begin + uart_tx_fifo_wrport_adr <= uart_tx_fifo_produce; + end +end +assign uart_tx_fifo_wrport_dat_w = uart_tx_fifo_syncfifo_din; +assign uart_tx_fifo_wrport_we = (uart_tx_fifo_syncfifo_we & (uart_tx_fifo_syncfifo_writable | uart_tx_fifo_replace)); +assign uart_tx_fifo_do_read = (uart_tx_fifo_syncfifo_readable & uart_tx_fifo_syncfifo_re); +assign uart_tx_fifo_rdport_adr = uart_tx_fifo_consume; +assign uart_tx_fifo_syncfifo_dout = uart_tx_fifo_rdport_dat_r; +assign uart_tx_fifo_rdport_re = uart_tx_fifo_do_read; +assign uart_tx_fifo_syncfifo_writable = (uart_tx_fifo_level0 != 5'd16); +assign uart_tx_fifo_syncfifo_readable = (uart_tx_fifo_level0 != 1'd0); +assign uart_rx_fifo_syncfifo_din = {uart_rx_fifo_fifo_in_last, uart_rx_fifo_fifo_in_first, uart_rx_fifo_fifo_in_payload_data}; +assign {uart_rx_fifo_fifo_out_last, uart_rx_fifo_fifo_out_first, uart_rx_fifo_fifo_out_payload_data} = uart_rx_fifo_syncfifo_dout; +assign uart_rx_fifo_sink_ready = uart_rx_fifo_syncfifo_writable; +assign uart_rx_fifo_syncfifo_we = uart_rx_fifo_sink_valid; +assign uart_rx_fifo_fifo_in_first = uart_rx_fifo_sink_first; +assign uart_rx_fifo_fifo_in_last = uart_rx_fifo_sink_last; +assign uart_rx_fifo_fifo_in_payload_data = uart_rx_fifo_sink_payload_data; +assign uart_rx_fifo_source_valid = uart_rx_fifo_readable; +assign uart_rx_fifo_source_first = uart_rx_fifo_fifo_out_first; +assign uart_rx_fifo_source_last = uart_rx_fifo_fifo_out_last; +assign uart_rx_fifo_source_payload_data = uart_rx_fifo_fifo_out_payload_data; +assign uart_rx_fifo_re = uart_rx_fifo_source_ready; +assign uart_rx_fifo_syncfifo_re = (uart_rx_fifo_syncfifo_readable & ((~uart_rx_fifo_readable) | uart_rx_fifo_re)); +assign uart_rx_fifo_level1 = (uart_rx_fifo_level0 + uart_rx_fifo_readable); +always @(*) begin + uart_rx_fifo_wrport_adr <= 4'd0; + if (uart_rx_fifo_replace) begin + uart_rx_fifo_wrport_adr <= (uart_rx_fifo_produce - 1'd1); + end else begin + uart_rx_fifo_wrport_adr <= uart_rx_fifo_produce; + end +end +assign uart_rx_fifo_wrport_dat_w = uart_rx_fifo_syncfifo_din; +assign uart_rx_fifo_wrport_we = (uart_rx_fifo_syncfifo_we & (uart_rx_fifo_syncfifo_writable | uart_rx_fifo_replace)); +assign uart_rx_fifo_do_read = (uart_rx_fifo_syncfifo_readable & uart_rx_fifo_syncfifo_re); +assign uart_rx_fifo_rdport_adr = uart_rx_fifo_consume; +assign uart_rx_fifo_syncfifo_dout = uart_rx_fifo_rdport_dat_r; +assign uart_rx_fifo_rdport_re = uart_rx_fifo_do_read; +assign uart_rx_fifo_syncfifo_writable = (uart_rx_fifo_level0 != 5'd16); +assign uart_rx_fifo_syncfifo_readable = (uart_rx_fifo_level0 != 1'd0); +assign timer_zero_trigger = (timer_value == 1'd0); +assign timer_zero0 = timer_zero_status; +assign timer_zero1 = timer_zero_pending; +always @(*) begin + timer_zero_clear <= 1'd0; + if ((timer_pending_re & timer_pending_r)) begin + timer_zero_clear <= 1'd1; + end +end +assign timer_irq = (timer_pending_status & timer_enable_storage); +assign timer_zero_status = timer_zero_trigger; +assign crg_reset = crg_rst; +assign crg_clkin = clk12; +assign sys_clk = crg_clkout_buf0; +assign sys2x_clk = crg_clkout_buf1; +assign idelay_clk = crg_clkout_buf2; +assign adr = ram_bus_adr[13:0]; +assign ram_bus_dat_r = dat_r; +always @(*) begin + sram0_we <= 4'd0; + sram0_we[0] <= (((interface0_ram_bus_cyc & interface0_ram_bus_stb) & interface0_ram_bus_we) & interface0_ram_bus_sel[0]); + sram0_we[1] <= (((interface0_ram_bus_cyc & interface0_ram_bus_stb) & interface0_ram_bus_we) & interface0_ram_bus_sel[1]); + sram0_we[2] <= (((interface0_ram_bus_cyc & interface0_ram_bus_stb) & interface0_ram_bus_we) & interface0_ram_bus_sel[2]); + sram0_we[3] <= (((interface0_ram_bus_cyc & interface0_ram_bus_stb) & interface0_ram_bus_we) & interface0_ram_bus_sel[3]); +end +assign sram0_adr = interface0_ram_bus_adr[13:0]; +assign interface0_ram_bus_dat_r = sram0_dat_r; +assign sram0_dat_w = interface0_ram_bus_dat_w; +always @(*) begin + sram1_we <= 4'd0; + sram1_we[0] <= (((interface1_ram_bus_cyc & interface1_ram_bus_stb) & interface1_ram_bus_we) & interface1_ram_bus_sel[0]); + sram1_we[1] <= (((interface1_ram_bus_cyc & interface1_ram_bus_stb) & interface1_ram_bus_we) & interface1_ram_bus_sel[1]); + sram1_we[2] <= (((interface1_ram_bus_cyc & interface1_ram_bus_stb) & interface1_ram_bus_we) & interface1_ram_bus_sel[2]); + sram1_we[3] <= (((interface1_ram_bus_cyc & interface1_ram_bus_stb) & interface1_ram_bus_we) & interface1_ram_bus_sel[3]); +end +assign sram1_adr = interface1_ram_bus_adr[21:0]; +assign interface1_ram_bus_dat_r = sram1_dat_r; +assign sram1_dat_w = interface1_ram_bus_dat_w; +assign leds_wait = (~leds_done); +always @(*) begin + leds_leds <= 2'd0; + if ((leds_mode == 1'd1)) begin + leds_leds <= leds_storage; + end else begin + leds_leds <= leds_chaser; + end +end +assign {user_led1, user_led0} = (leds_leds ^ 1'd0); +assign leds_done = (leds_count == 1'd0); +always @(*) begin + basesoc_wishbone_ack <= 1'd0; + basesoc_dat_w <= 32'd0; + basesoc_wishbone_dat_r <= 32'd0; + basesoc_next_state <= 1'd0; + basesoc_adr <= 14'd0; + basesoc_we <= 1'd0; + basesoc_next_state <= basesoc_state; + case (basesoc_state) + 1'd1: begin + basesoc_wishbone_ack <= 1'd1; + basesoc_wishbone_dat_r <= basesoc_dat_r; + basesoc_next_state <= 1'd0; + end + default: begin + basesoc_dat_w <= basesoc_wishbone_dat_w; + if ((basesoc_wishbone_cyc & basesoc_wishbone_stb)) begin + basesoc_adr <= basesoc_wishbone_adr; + basesoc_we <= (basesoc_wishbone_we & (basesoc_wishbone_sel != 1'd0)); + basesoc_next_state <= 1'd1; + end + end + endcase +end +assign shared_adr = array_muxed0; +assign shared_dat_w = array_muxed1; +assign shared_sel = array_muxed2; +assign shared_cyc = array_muxed3; +assign shared_stb = array_muxed4; +assign shared_we = array_muxed5; +assign shared_cti = array_muxed6; +assign shared_bte = array_muxed7; +assign a2o_dbus_dat_r = shared_dat_r; +assign a2o_dbus_ack = (shared_ack & (grant == 1'd0)); +assign a2o_dbus_err = (shared_err & (grant == 1'd0)); +assign request = {a2o_dbus_cyc}; +assign grant = 1'd0; +always @(*) begin + slave_sel <= 4'd0; + slave_sel[0] <= (shared_adr[29:14] == 1'd0); + slave_sel[1] <= (shared_adr[29:14] == 1'd1); + slave_sel[2] <= (shared_adr[29:22] == 1'd1); + slave_sel[3] <= (shared_adr[29:14] == 16'd65520); +end +assign ram_bus_adr = shared_adr; +assign ram_bus_dat_w = shared_dat_w; +assign ram_bus_sel = shared_sel; +assign ram_bus_stb = shared_stb; +assign ram_bus_we = shared_we; +assign ram_bus_cti = shared_cti; +assign ram_bus_bte = shared_bte; +assign interface0_ram_bus_adr = shared_adr; +assign interface0_ram_bus_dat_w = shared_dat_w; +assign interface0_ram_bus_sel = shared_sel; +assign interface0_ram_bus_stb = shared_stb; +assign interface0_ram_bus_we = shared_we; +assign interface0_ram_bus_cti = shared_cti; +assign interface0_ram_bus_bte = shared_bte; +assign interface1_ram_bus_adr = shared_adr; +assign interface1_ram_bus_dat_w = shared_dat_w; +assign interface1_ram_bus_sel = shared_sel; +assign interface1_ram_bus_stb = shared_stb; +assign interface1_ram_bus_we = shared_we; +assign interface1_ram_bus_cti = shared_cti; +assign interface1_ram_bus_bte = shared_bte; +assign basesoc_wishbone_adr = shared_adr; +assign basesoc_wishbone_dat_w = shared_dat_w; +assign basesoc_wishbone_sel = shared_sel; +assign basesoc_wishbone_stb = shared_stb; +assign basesoc_wishbone_we = shared_we; +assign basesoc_wishbone_cti = shared_cti; +assign basesoc_wishbone_bte = shared_bte; +assign ram_bus_cyc = (shared_cyc & slave_sel[0]); +assign interface0_ram_bus_cyc = (shared_cyc & slave_sel[1]); +assign interface1_ram_bus_cyc = (shared_cyc & slave_sel[2]); +assign basesoc_wishbone_cyc = (shared_cyc & slave_sel[3]); +assign shared_err = (((ram_bus_err | interface0_ram_bus_err) | interface1_ram_bus_err) | basesoc_wishbone_err); +assign wait_1 = ((shared_stb & shared_cyc) & (~shared_ack)); +always @(*) begin + error <= 1'd0; + shared_dat_r <= 32'd0; + shared_ack <= 1'd0; + shared_ack <= (((ram_bus_ack | interface0_ram_bus_ack) | interface1_ram_bus_ack) | basesoc_wishbone_ack); + shared_dat_r <= (((({32{slave_sel_r[0]}} & ram_bus_dat_r) | ({32{slave_sel_r[1]}} & interface0_ram_bus_dat_r)) | ({32{slave_sel_r[2]}} & interface1_ram_bus_dat_r)) | ({32{slave_sel_r[3]}} & basesoc_wishbone_dat_r)); + if (done) begin + shared_dat_r <= 32'd4294967295; + shared_ack <= 1'd1; + error <= 1'd1; + end +end +assign done = (count == 1'd0); +assign csr_bankarray_csrbank0_sel = (csr_bankarray_interface0_bank_bus_adr[13:9] == 3'd4); +assign csr_bankarray_csrbank0_in_r = csr_bankarray_interface0_bank_bus_dat_w[1:0]; +always @(*) begin + csr_bankarray_csrbank0_in_we <= 1'd0; + csr_bankarray_csrbank0_in_re <= 1'd0; + if ((csr_bankarray_csrbank0_sel & (csr_bankarray_interface0_bank_bus_adr[8:0] == 1'd0))) begin + csr_bankarray_csrbank0_in_re <= csr_bankarray_interface0_bank_bus_we; + csr_bankarray_csrbank0_in_we <= (~csr_bankarray_interface0_bank_bus_we); + end +end +assign csr_bankarray_csrbank0_in_w = buttons_status[1:0]; +assign buttons_we = csr_bankarray_csrbank0_in_we; +assign csr_bankarray_csrbank1_sel = (csr_bankarray_interface1_bank_bus_adr[13:9] == 3'd5); +assign csr_bankarray_csrbank1_reset0_r = csr_bankarray_interface1_bank_bus_dat_w[1:0]; +always @(*) begin + csr_bankarray_csrbank1_reset0_we <= 1'd0; + csr_bankarray_csrbank1_reset0_re <= 1'd0; + if ((csr_bankarray_csrbank1_sel & (csr_bankarray_interface1_bank_bus_adr[8:0] == 1'd0))) begin + csr_bankarray_csrbank1_reset0_re <= csr_bankarray_interface1_bank_bus_we; + csr_bankarray_csrbank1_reset0_we <= (~csr_bankarray_interface1_bank_bus_we); + end +end +assign csr_bankarray_csrbank1_scratch0_r = csr_bankarray_interface1_bank_bus_dat_w[31:0]; +always @(*) begin + csr_bankarray_csrbank1_scratch0_re <= 1'd0; + csr_bankarray_csrbank1_scratch0_we <= 1'd0; + if ((csr_bankarray_csrbank1_sel & (csr_bankarray_interface1_bank_bus_adr[8:0] == 1'd1))) begin + csr_bankarray_csrbank1_scratch0_re <= csr_bankarray_interface1_bank_bus_we; + csr_bankarray_csrbank1_scratch0_we <= (~csr_bankarray_interface1_bank_bus_we); + end +end +assign csr_bankarray_csrbank1_bus_errors_r = csr_bankarray_interface1_bank_bus_dat_w[31:0]; +always @(*) begin + csr_bankarray_csrbank1_bus_errors_we <= 1'd0; + csr_bankarray_csrbank1_bus_errors_re <= 1'd0; + if ((csr_bankarray_csrbank1_sel & (csr_bankarray_interface1_bank_bus_adr[8:0] == 2'd2))) begin + csr_bankarray_csrbank1_bus_errors_re <= csr_bankarray_interface1_bank_bus_we; + csr_bankarray_csrbank1_bus_errors_we <= (~csr_bankarray_interface1_bank_bus_we); + end +end +always @(*) begin + soc_rst <= 1'd0; + if (reset_re) begin + soc_rst <= reset_storage[0]; + end +end +assign cpu_rst = reset_storage[1]; +assign csr_bankarray_csrbank1_reset0_w = reset_storage[1:0]; +assign csr_bankarray_csrbank1_scratch0_w = scratch_storage[31:0]; +assign csr_bankarray_csrbank1_bus_errors_w = bus_errors_status[31:0]; +assign bus_errors_we = csr_bankarray_csrbank1_bus_errors_we; +assign csr_bankarray_sel = (csr_bankarray_sram_bus_adr[13:9] == 3'd6); +always @(*) begin + csr_bankarray_sram_bus_dat_r <= 32'd0; + if (csr_bankarray_sel_r) begin + csr_bankarray_sram_bus_dat_r <= csr_bankarray_dat_r; + end +end +assign csr_bankarray_adr = csr_bankarray_sram_bus_adr[4:0]; +assign csr_bankarray_csrbank2_sel = (csr_bankarray_interface2_bank_bus_adr[13:9] == 2'd3); +assign csr_bankarray_csrbank2_out0_r = csr_bankarray_interface2_bank_bus_dat_w[1:0]; +always @(*) begin + csr_bankarray_csrbank2_out0_re <= 1'd0; + csr_bankarray_csrbank2_out0_we <= 1'd0; + if ((csr_bankarray_csrbank2_sel & (csr_bankarray_interface2_bank_bus_adr[8:0] == 1'd0))) begin + csr_bankarray_csrbank2_out0_re <= csr_bankarray_interface2_bank_bus_we; + csr_bankarray_csrbank2_out0_we <= (~csr_bankarray_interface2_bank_bus_we); + end +end +assign csr_bankarray_csrbank2_out0_w = leds_storage[1:0]; +assign csr_bankarray_csrbank3_sel = (csr_bankarray_interface3_bank_bus_adr[13:9] == 3'd7); +assign csr_bankarray_csrbank3_load0_r = csr_bankarray_interface3_bank_bus_dat_w[31:0]; +always @(*) begin + csr_bankarray_csrbank3_load0_re <= 1'd0; + csr_bankarray_csrbank3_load0_we <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 1'd0))) begin + csr_bankarray_csrbank3_load0_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_load0_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_reload0_r = csr_bankarray_interface3_bank_bus_dat_w[31:0]; +always @(*) begin + csr_bankarray_csrbank3_reload0_we <= 1'd0; + csr_bankarray_csrbank3_reload0_re <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 1'd1))) begin + csr_bankarray_csrbank3_reload0_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_reload0_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_en0_r = csr_bankarray_interface3_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank3_en0_we <= 1'd0; + csr_bankarray_csrbank3_en0_re <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 2'd2))) begin + csr_bankarray_csrbank3_en0_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_en0_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_update_value0_r = csr_bankarray_interface3_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank3_update_value0_re <= 1'd0; + csr_bankarray_csrbank3_update_value0_we <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 2'd3))) begin + csr_bankarray_csrbank3_update_value0_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_update_value0_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_value_r = csr_bankarray_interface3_bank_bus_dat_w[31:0]; +always @(*) begin + csr_bankarray_csrbank3_value_we <= 1'd0; + csr_bankarray_csrbank3_value_re <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 3'd4))) begin + csr_bankarray_csrbank3_value_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_value_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_ev_status_r = csr_bankarray_interface3_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank3_ev_status_we <= 1'd0; + csr_bankarray_csrbank3_ev_status_re <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 3'd5))) begin + csr_bankarray_csrbank3_ev_status_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_ev_status_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_ev_pending_r = csr_bankarray_interface3_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank3_ev_pending_re <= 1'd0; + csr_bankarray_csrbank3_ev_pending_we <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 3'd6))) begin + csr_bankarray_csrbank3_ev_pending_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_ev_pending_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_ev_enable0_r = csr_bankarray_interface3_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank3_ev_enable0_we <= 1'd0; + csr_bankarray_csrbank3_ev_enable0_re <= 1'd0; + if ((csr_bankarray_csrbank3_sel & (csr_bankarray_interface3_bank_bus_adr[8:0] == 3'd7))) begin + csr_bankarray_csrbank3_ev_enable0_re <= csr_bankarray_interface3_bank_bus_we; + csr_bankarray_csrbank3_ev_enable0_we <= (~csr_bankarray_interface3_bank_bus_we); + end +end +assign csr_bankarray_csrbank3_load0_w = timer_load_storage[31:0]; +assign csr_bankarray_csrbank3_reload0_w = timer_reload_storage[31:0]; +assign csr_bankarray_csrbank3_en0_w = timer_en_storage; +assign csr_bankarray_csrbank3_update_value0_w = timer_update_value_storage; +assign csr_bankarray_csrbank3_value_w = timer_value_status[31:0]; +assign timer_value_we = csr_bankarray_csrbank3_value_we; +assign timer_status_status = timer_zero0; +assign csr_bankarray_csrbank3_ev_status_w = timer_status_status; +assign timer_status_we = csr_bankarray_csrbank3_ev_status_we; +assign timer_pending_status = timer_zero1; +assign csr_bankarray_csrbank3_ev_pending_w = timer_pending_status; +assign timer_pending_we = csr_bankarray_csrbank3_ev_pending_we; +assign timer_zero2 = timer_enable_storage; +assign csr_bankarray_csrbank3_ev_enable0_w = timer_enable_storage; +assign csr_bankarray_csrbank4_sel = (csr_bankarray_interface4_bank_bus_adr[13:9] == 4'd8); +assign uart_rxtx_r = csr_bankarray_interface4_bank_bus_dat_w[7:0]; +always @(*) begin + uart_rxtx_re <= 1'd0; + uart_rxtx_we <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 1'd0))) begin + uart_rxtx_re <= csr_bankarray_interface4_bank_bus_we; + uart_rxtx_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_txfull_r = csr_bankarray_interface4_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank4_txfull_we <= 1'd0; + csr_bankarray_csrbank4_txfull_re <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 1'd1))) begin + csr_bankarray_csrbank4_txfull_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_txfull_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_rxempty_r = csr_bankarray_interface4_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank4_rxempty_re <= 1'd0; + csr_bankarray_csrbank4_rxempty_we <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 2'd2))) begin + csr_bankarray_csrbank4_rxempty_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_rxempty_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_ev_status_r = csr_bankarray_interface4_bank_bus_dat_w[1:0]; +always @(*) begin + csr_bankarray_csrbank4_ev_status_re <= 1'd0; + csr_bankarray_csrbank4_ev_status_we <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 2'd3))) begin + csr_bankarray_csrbank4_ev_status_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_ev_status_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_ev_pending_r = csr_bankarray_interface4_bank_bus_dat_w[1:0]; +always @(*) begin + csr_bankarray_csrbank4_ev_pending_we <= 1'd0; + csr_bankarray_csrbank4_ev_pending_re <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 3'd4))) begin + csr_bankarray_csrbank4_ev_pending_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_ev_pending_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_ev_enable0_r = csr_bankarray_interface4_bank_bus_dat_w[1:0]; +always @(*) begin + csr_bankarray_csrbank4_ev_enable0_we <= 1'd0; + csr_bankarray_csrbank4_ev_enable0_re <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 3'd5))) begin + csr_bankarray_csrbank4_ev_enable0_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_ev_enable0_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_txempty_r = csr_bankarray_interface4_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank4_txempty_re <= 1'd0; + csr_bankarray_csrbank4_txempty_we <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 3'd6))) begin + csr_bankarray_csrbank4_txempty_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_txempty_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_rxfull_r = csr_bankarray_interface4_bank_bus_dat_w[0]; +always @(*) begin + csr_bankarray_csrbank4_rxfull_we <= 1'd0; + csr_bankarray_csrbank4_rxfull_re <= 1'd0; + if ((csr_bankarray_csrbank4_sel & (csr_bankarray_interface4_bank_bus_adr[8:0] == 3'd7))) begin + csr_bankarray_csrbank4_rxfull_re <= csr_bankarray_interface4_bank_bus_we; + csr_bankarray_csrbank4_rxfull_we <= (~csr_bankarray_interface4_bank_bus_we); + end +end +assign csr_bankarray_csrbank4_txfull_w = uart_txfull_status; +assign uart_txfull_we = csr_bankarray_csrbank4_txfull_we; +assign csr_bankarray_csrbank4_rxempty_w = uart_rxempty_status; +assign uart_rxempty_we = csr_bankarray_csrbank4_rxempty_we; +always @(*) begin + uart_status_status <= 2'd0; + uart_status_status[0] <= uart_tx0; + uart_status_status[1] <= uart_rx0; +end +assign csr_bankarray_csrbank4_ev_status_w = uart_status_status[1:0]; +assign uart_status_we = csr_bankarray_csrbank4_ev_status_we; +always @(*) begin + uart_pending_status <= 2'd0; + uart_pending_status[0] <= uart_tx1; + uart_pending_status[1] <= uart_rx1; +end +assign csr_bankarray_csrbank4_ev_pending_w = uart_pending_status[1:0]; +assign uart_pending_we = csr_bankarray_csrbank4_ev_pending_we; +assign uart_tx2 = uart_enable_storage[0]; +assign uart_rx2 = uart_enable_storage[1]; +assign csr_bankarray_csrbank4_ev_enable0_w = uart_enable_storage[1:0]; +assign csr_bankarray_csrbank4_txempty_w = uart_txempty_status; +assign uart_txempty_we = csr_bankarray_csrbank4_txempty_we; +assign csr_bankarray_csrbank4_rxfull_w = uart_rxfull_status; +assign uart_rxfull_we = csr_bankarray_csrbank4_rxfull_we; +assign csr_interconnect_adr = basesoc_adr; +assign csr_interconnect_we = basesoc_we; +assign csr_interconnect_dat_w = basesoc_dat_w; +assign basesoc_dat_r = csr_interconnect_dat_r; +assign csr_bankarray_interface0_bank_bus_adr = csr_interconnect_adr; +assign csr_bankarray_interface1_bank_bus_adr = csr_interconnect_adr; +assign csr_bankarray_interface2_bank_bus_adr = csr_interconnect_adr; +assign csr_bankarray_interface3_bank_bus_adr = csr_interconnect_adr; +assign csr_bankarray_interface4_bank_bus_adr = csr_interconnect_adr; +assign csr_bankarray_sram_bus_adr = csr_interconnect_adr; +assign csr_bankarray_interface0_bank_bus_we = csr_interconnect_we; +assign csr_bankarray_interface1_bank_bus_we = csr_interconnect_we; +assign csr_bankarray_interface2_bank_bus_we = csr_interconnect_we; +assign csr_bankarray_interface3_bank_bus_we = csr_interconnect_we; +assign csr_bankarray_interface4_bank_bus_we = csr_interconnect_we; +assign csr_bankarray_sram_bus_we = csr_interconnect_we; +assign csr_bankarray_interface0_bank_bus_dat_w = csr_interconnect_dat_w; +assign csr_bankarray_interface1_bank_bus_dat_w = csr_interconnect_dat_w; +assign csr_bankarray_interface2_bank_bus_dat_w = csr_interconnect_dat_w; +assign csr_bankarray_interface3_bank_bus_dat_w = csr_interconnect_dat_w; +assign csr_bankarray_interface4_bank_bus_dat_w = csr_interconnect_dat_w; +assign csr_bankarray_sram_bus_dat_w = csr_interconnect_dat_w; +assign csr_interconnect_dat_r = (((((csr_bankarray_interface0_bank_bus_dat_r | csr_bankarray_interface1_bank_bus_dat_r) | csr_bankarray_interface2_bank_bus_dat_r) | csr_bankarray_interface3_bank_bus_dat_r) | csr_bankarray_interface4_bank_bus_dat_r) | csr_bankarray_sram_bus_dat_r); +always @(*) begin + array_muxed0 <= 30'd0; + case (grant) + default: begin + array_muxed0 <= a2o_dbus_adr; + end + endcase +end +always @(*) begin + array_muxed1 <= 32'd0; + case (grant) + default: begin + array_muxed1 <= a2o_dbus_dat_w; + end + endcase +end +always @(*) begin + array_muxed2 <= 4'd0; + case (grant) + default: begin + array_muxed2 <= a2o_dbus_sel; + end + endcase +end +always @(*) begin + array_muxed3 <= 1'd0; + case (grant) + default: begin + array_muxed3 <= a2o_dbus_cyc; + end + endcase +end +always @(*) begin + array_muxed4 <= 1'd0; + case (grant) + default: begin + array_muxed4 <= a2o_dbus_stb; + end + endcase +end +always @(*) begin + array_muxed5 <= 1'd0; + case (grant) + default: begin + array_muxed5 <= a2o_dbus_we; + end + endcase +end +always @(*) begin + array_muxed6 <= 3'd0; + case (grant) + default: begin + array_muxed6 <= a2o_dbus_cti; + end + endcase +end +always @(*) begin + array_muxed7 <= 2'd0; + case (grant) + default: begin + array_muxed7 <= a2o_dbus_bte; + end + endcase +end +assign rx_rx = xilinxmultiregimpl0_regs1; +assign xilinxasyncresetsynchronizerimpl0 = (~crg_locked); +assign xilinxasyncresetsynchronizerimpl1 = (~crg_locked); +assign xilinxasyncresetsynchronizerimpl2 = (~crg_locked); +assign buttons_status = xilinxmultiregimpl1_regs1; +assign xilinxmultiregimpl1 = {user_btn1, user_btn0}; + + +//------------------------------------------------------------------------------ +// Synchronous Logic +//------------------------------------------------------------------------------ + +always @(posedge idelay_clk) begin + if ((crg_reset_counter != 1'd0)) begin + crg_reset_counter <= (crg_reset_counter - 1'd1); + end else begin + crg_ic_reset <= 1'd0; + end + if (idelay_rst) begin + crg_reset_counter <= 4'd15; + crg_ic_reset <= 1'd1; + end +end + +always @(posedge sys_clk) begin + if ((bus_errors != 32'd4294967295)) begin + if (bus_error) begin + bus_errors <= (bus_errors + 1'd1); + end + end + {tx_tick, tx_phase} <= 23'd4947802; + if (tx_enable) begin + {tx_tick, tx_phase} <= (tx_phase + 23'd4947802); + end + basesoc_rs232phytx_state <= basesoc_rs232phytx_next_state; + if (tx_count_rs232phytx_next_value_ce0) begin + tx_count <= tx_count_rs232phytx_next_value0; + end + if (serial_tx_rs232phytx_next_value_ce1) begin + serial_tx <= serial_tx_rs232phytx_next_value1; + end + if (tx_data_rs232phytx_next_value_ce2) begin + tx_data <= tx_data_rs232phytx_next_value2; + end + rx_rx_d <= rx_rx; + {rx_tick, rx_phase} <= 32'd2147483648; + if (rx_enable) begin + {rx_tick, rx_phase} <= (rx_phase + 23'd4947802); + end + basesoc_rs232phyrx_state <= basesoc_rs232phyrx_next_state; + if (rx_count_rs232phyrx_next_value_ce0) begin + rx_count <= rx_count_rs232phyrx_next_value0; + end + if (rx_data_rs232phyrx_next_value_ce1) begin + rx_data <= rx_data_rs232phyrx_next_value1; + end + if (uart_tx_clear) begin + uart_tx_pending <= 1'd0; + end + uart_tx_trigger_d <= uart_tx_trigger; + if ((uart_tx_trigger & (~uart_tx_trigger_d))) begin + uart_tx_pending <= 1'd1; + end + if (uart_rx_clear) begin + uart_rx_pending <= 1'd0; + end + uart_rx_trigger_d <= uart_rx_trigger; + if ((uart_rx_trigger & (~uart_rx_trigger_d))) begin + uart_rx_pending <= 1'd1; + end + if (uart_tx_fifo_syncfifo_re) begin + uart_tx_fifo_readable <= 1'd1; + end else begin + if (uart_tx_fifo_re) begin + uart_tx_fifo_readable <= 1'd0; + end + end + if (((uart_tx_fifo_syncfifo_we & uart_tx_fifo_syncfifo_writable) & (~uart_tx_fifo_replace))) begin + uart_tx_fifo_produce <= (uart_tx_fifo_produce + 1'd1); + end + if (uart_tx_fifo_do_read) begin + uart_tx_fifo_consume <= (uart_tx_fifo_consume + 1'd1); + end + if (((uart_tx_fifo_syncfifo_we & uart_tx_fifo_syncfifo_writable) & (~uart_tx_fifo_replace))) begin + if ((~uart_tx_fifo_do_read)) begin + uart_tx_fifo_level0 <= (uart_tx_fifo_level0 + 1'd1); + end + end else begin + if (uart_tx_fifo_do_read) begin + uart_tx_fifo_level0 <= (uart_tx_fifo_level0 - 1'd1); + end + end + if (uart_rx_fifo_syncfifo_re) begin + uart_rx_fifo_readable <= 1'd1; + end else begin + if (uart_rx_fifo_re) begin + uart_rx_fifo_readable <= 1'd0; + end + end + if (((uart_rx_fifo_syncfifo_we & uart_rx_fifo_syncfifo_writable) & (~uart_rx_fifo_replace))) begin + uart_rx_fifo_produce <= (uart_rx_fifo_produce + 1'd1); + end + if (uart_rx_fifo_do_read) begin + uart_rx_fifo_consume <= (uart_rx_fifo_consume + 1'd1); + end + if (((uart_rx_fifo_syncfifo_we & uart_rx_fifo_syncfifo_writable) & (~uart_rx_fifo_replace))) begin + if ((~uart_rx_fifo_do_read)) begin + uart_rx_fifo_level0 <= (uart_rx_fifo_level0 + 1'd1); + end + end else begin + if (uart_rx_fifo_do_read) begin + uart_rx_fifo_level0 <= (uart_rx_fifo_level0 - 1'd1); + end + end + if (timer_en_storage) begin + if ((timer_value == 1'd0)) begin + timer_value <= timer_reload_storage; + end else begin + timer_value <= (timer_value - 1'd1); + end + end else begin + timer_value <= timer_load_storage; + end + if (timer_update_value_re) begin + timer_value_status <= timer_value; + end + if (timer_zero_clear) begin + timer_zero_pending <= 1'd0; + end + timer_zero_trigger_d <= timer_zero_trigger; + if ((timer_zero_trigger & (~timer_zero_trigger_d))) begin + timer_zero_pending <= 1'd1; + end + ram_bus_ack <= 1'd0; + if (((ram_bus_cyc & ram_bus_stb) & ((~ram_bus_ack) | adr_burst))) begin + ram_bus_ack <= 1'd1; + end + interface0_ram_bus_ack <= 1'd0; + if (((interface0_ram_bus_cyc & interface0_ram_bus_stb) & ((~interface0_ram_bus_ack) | sram0_adr_burst))) begin + interface0_ram_bus_ack <= 1'd1; + end + interface1_ram_bus_ack <= 1'd0; + if (((interface1_ram_bus_cyc & interface1_ram_bus_stb) & ((~interface1_ram_bus_ack) | sram1_adr_burst))) begin + interface1_ram_bus_ack <= 1'd1; + end + if (leds_done) begin + leds_chaser <= {leds_chaser, (~leds_chaser[1])}; + end + if (leds_re) begin + leds_mode <= 1'd1; + end + if (leds_wait) begin + if ((~leds_done)) begin + leds_count <= (leds_count - 1'd1); + end + end else begin + leds_count <= 25'd25000000; + end + basesoc_state <= basesoc_next_state; + slave_sel_r <= slave_sel; + if (wait_1) begin + if ((~done)) begin + count <= (count - 1'd1); + end + end else begin + count <= 20'd1000000; + end + csr_bankarray_interface0_bank_bus_dat_r <= 1'd0; + if (csr_bankarray_csrbank0_sel) begin + case (csr_bankarray_interface0_bank_bus_adr[8:0]) + 1'd0: begin + csr_bankarray_interface0_bank_bus_dat_r <= csr_bankarray_csrbank0_in_w; + end + endcase + end + buttons_re <= csr_bankarray_csrbank0_in_re; + csr_bankarray_interface1_bank_bus_dat_r <= 1'd0; + if (csr_bankarray_csrbank1_sel) begin + case (csr_bankarray_interface1_bank_bus_adr[8:0]) + 1'd0: begin + csr_bankarray_interface1_bank_bus_dat_r <= csr_bankarray_csrbank1_reset0_w; + end + 1'd1: begin + csr_bankarray_interface1_bank_bus_dat_r <= csr_bankarray_csrbank1_scratch0_w; + end + 2'd2: begin + csr_bankarray_interface1_bank_bus_dat_r <= csr_bankarray_csrbank1_bus_errors_w; + end + endcase + end + if (csr_bankarray_csrbank1_reset0_re) begin + reset_storage[1:0] <= csr_bankarray_csrbank1_reset0_r; + end + reset_re <= csr_bankarray_csrbank1_reset0_re; + if (csr_bankarray_csrbank1_scratch0_re) begin + scratch_storage[31:0] <= csr_bankarray_csrbank1_scratch0_r; + end + scratch_re <= csr_bankarray_csrbank1_scratch0_re; + bus_errors_re <= csr_bankarray_csrbank1_bus_errors_re; + csr_bankarray_sel_r <= csr_bankarray_sel; + csr_bankarray_interface2_bank_bus_dat_r <= 1'd0; + if (csr_bankarray_csrbank2_sel) begin + case (csr_bankarray_interface2_bank_bus_adr[8:0]) + 1'd0: begin + csr_bankarray_interface2_bank_bus_dat_r <= csr_bankarray_csrbank2_out0_w; + end + endcase + end + if (csr_bankarray_csrbank2_out0_re) begin + leds_storage[1:0] <= csr_bankarray_csrbank2_out0_r; + end + leds_re <= csr_bankarray_csrbank2_out0_re; + csr_bankarray_interface3_bank_bus_dat_r <= 1'd0; + if (csr_bankarray_csrbank3_sel) begin + case (csr_bankarray_interface3_bank_bus_adr[8:0]) + 1'd0: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_load0_w; + end + 1'd1: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_reload0_w; + end + 2'd2: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_en0_w; + end + 2'd3: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_update_value0_w; + end + 3'd4: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_value_w; + end + 3'd5: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_ev_status_w; + end + 3'd6: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_ev_pending_w; + end + 3'd7: begin + csr_bankarray_interface3_bank_bus_dat_r <= csr_bankarray_csrbank3_ev_enable0_w; + end + endcase + end + if (csr_bankarray_csrbank3_load0_re) begin + timer_load_storage[31:0] <= csr_bankarray_csrbank3_load0_r; + end + timer_load_re <= csr_bankarray_csrbank3_load0_re; + if (csr_bankarray_csrbank3_reload0_re) begin + timer_reload_storage[31:0] <= csr_bankarray_csrbank3_reload0_r; + end + timer_reload_re <= csr_bankarray_csrbank3_reload0_re; + if (csr_bankarray_csrbank3_en0_re) begin + timer_en_storage <= csr_bankarray_csrbank3_en0_r; + end + timer_en_re <= csr_bankarray_csrbank3_en0_re; + if (csr_bankarray_csrbank3_update_value0_re) begin + timer_update_value_storage <= csr_bankarray_csrbank3_update_value0_r; + end + timer_update_value_re <= csr_bankarray_csrbank3_update_value0_re; + timer_value_re <= csr_bankarray_csrbank3_value_re; + timer_status_re <= csr_bankarray_csrbank3_ev_status_re; + if (csr_bankarray_csrbank3_ev_pending_re) begin + timer_pending_r <= csr_bankarray_csrbank3_ev_pending_r; + end + timer_pending_re <= csr_bankarray_csrbank3_ev_pending_re; + if (csr_bankarray_csrbank3_ev_enable0_re) begin + timer_enable_storage <= csr_bankarray_csrbank3_ev_enable0_r; + end + timer_enable_re <= csr_bankarray_csrbank3_ev_enable0_re; + csr_bankarray_interface4_bank_bus_dat_r <= 1'd0; + if (csr_bankarray_csrbank4_sel) begin + case (csr_bankarray_interface4_bank_bus_adr[8:0]) + 1'd0: begin + csr_bankarray_interface4_bank_bus_dat_r <= uart_rxtx_w; + end + 1'd1: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_txfull_w; + end + 2'd2: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_rxempty_w; + end + 2'd3: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_ev_status_w; + end + 3'd4: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_ev_pending_w; + end + 3'd5: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_ev_enable0_w; + end + 3'd6: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_txempty_w; + end + 3'd7: begin + csr_bankarray_interface4_bank_bus_dat_r <= csr_bankarray_csrbank4_rxfull_w; + end + endcase + end + uart_txfull_re <= csr_bankarray_csrbank4_txfull_re; + uart_rxempty_re <= csr_bankarray_csrbank4_rxempty_re; + uart_status_re <= csr_bankarray_csrbank4_ev_status_re; + if (csr_bankarray_csrbank4_ev_pending_re) begin + uart_pending_r[1:0] <= csr_bankarray_csrbank4_ev_pending_r; + end + uart_pending_re <= csr_bankarray_csrbank4_ev_pending_re; + if (csr_bankarray_csrbank4_ev_enable0_re) begin + uart_enable_storage[1:0] <= csr_bankarray_csrbank4_ev_enable0_r; + end + uart_enable_re <= csr_bankarray_csrbank4_ev_enable0_re; + uart_txempty_re <= csr_bankarray_csrbank4_txempty_re; + uart_rxfull_re <= csr_bankarray_csrbank4_rxfull_re; + if (sys_rst) begin + reset_storage <= 2'd0; + reset_re <= 1'd0; + scratch_storage <= 32'd305419896; + scratch_re <= 1'd0; + bus_errors_re <= 1'd0; + bus_errors <= 32'd0; + serial_tx <= 1'd1; + tx_tick <= 1'd0; + rx_tick <= 1'd0; + rx_rx_d <= 1'd0; + uart_txfull_re <= 1'd0; + uart_rxempty_re <= 1'd0; + uart_tx_pending <= 1'd0; + uart_tx_trigger_d <= 1'd0; + uart_rx_pending <= 1'd0; + uart_rx_trigger_d <= 1'd0; + uart_status_re <= 1'd0; + uart_pending_re <= 1'd0; + uart_pending_r <= 2'd0; + uart_enable_storage <= 2'd0; + uart_enable_re <= 1'd0; + uart_txempty_re <= 1'd0; + uart_rxfull_re <= 1'd0; + uart_tx_fifo_readable <= 1'd0; + uart_tx_fifo_level0 <= 5'd0; + uart_tx_fifo_produce <= 4'd0; + uart_tx_fifo_consume <= 4'd0; + uart_rx_fifo_readable <= 1'd0; + uart_rx_fifo_level0 <= 5'd0; + uart_rx_fifo_produce <= 4'd0; + uart_rx_fifo_consume <= 4'd0; + timer_load_storage <= 32'd0; + timer_load_re <= 1'd0; + timer_reload_storage <= 32'd0; + timer_reload_re <= 1'd0; + timer_en_storage <= 1'd0; + timer_en_re <= 1'd0; + timer_update_value_storage <= 1'd0; + timer_update_value_re <= 1'd0; + timer_value_status <= 32'd0; + timer_value_re <= 1'd0; + timer_zero_pending <= 1'd0; + timer_zero_trigger_d <= 1'd0; + timer_status_re <= 1'd0; + timer_pending_re <= 1'd0; + timer_pending_r <= 1'd0; + timer_enable_storage <= 1'd0; + timer_enable_re <= 1'd0; + timer_value <= 32'd0; + ram_bus_ack <= 1'd0; + interface0_ram_bus_ack <= 1'd0; + interface1_ram_bus_ack <= 1'd0; + leds_storage <= 2'd0; + leds_re <= 1'd0; + leds_chaser <= 2'd0; + leds_mode <= 1'd0; + leds_count <= 25'd25000000; + buttons_re <= 1'd0; + slave_sel_r <= 4'd0; + count <= 20'd1000000; + csr_bankarray_sel_r <= 1'd0; + basesoc_rs232phytx_state <= 1'd0; + basesoc_rs232phyrx_state <= 1'd0; + basesoc_state <= 1'd0; + end + xilinxmultiregimpl0_regs0 <= serial_rx; + xilinxmultiregimpl0_regs1 <= xilinxmultiregimpl0_regs0; + xilinxmultiregimpl1_regs0 <= {user_btn1, user_btn0}; + xilinxmultiregimpl1_regs1 <= xilinxmultiregimpl1_regs0; +end + + +//------------------------------------------------------------------------------ +// Specialized Logic +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Memory mem: 24-words x 8-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: ---- | +reg [7:0] mem[0:23]; +initial begin + $readmemh("cmod7_kintex_mem.init", mem); +end +reg [4:0] mem_adr0; +always @(posedge sys_clk) begin + mem_adr0 <= csr_bankarray_adr; +end +assign csr_bankarray_dat_r = mem[mem_adr0]; + + +//------------------------------------------------------------------------------ +// Memory storage: 16-words x 10-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 10 +// Port 1 | Read: Sync | Write: ---- | +reg [9:0] storage[0:15]; +reg [9:0] storage_dat0; +reg [9:0] storage_dat1; +always @(posedge sys_clk) begin + if (uart_tx_fifo_wrport_we) + storage[uart_tx_fifo_wrport_adr] <= uart_tx_fifo_wrport_dat_w; + storage_dat0 <= storage[uart_tx_fifo_wrport_adr]; +end +always @(posedge sys_clk) begin + if (uart_tx_fifo_rdport_re) + storage_dat1 <= storage[uart_tx_fifo_rdport_adr]; +end +assign uart_tx_fifo_wrport_dat_r = storage_dat0; +assign uart_tx_fifo_rdport_dat_r = storage_dat1; + + +//------------------------------------------------------------------------------ +// Memory storage_1: 16-words x 10-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Read-First | Write-Granularity: 10 +// Port 1 | Read: Sync | Write: ---- | +reg [9:0] storage_1[0:15]; +reg [9:0] storage_1_dat0; +reg [9:0] storage_1_dat1; +always @(posedge sys_clk) begin + if (uart_rx_fifo_wrport_we) + storage_1[uart_rx_fifo_wrport_adr] <= uart_rx_fifo_wrport_dat_w; + storage_1_dat0 <= storage_1[uart_rx_fifo_wrport_adr]; +end +always @(posedge sys_clk) begin + if (uart_rx_fifo_rdport_re) + storage_1_dat1 <= storage_1[uart_rx_fifo_rdport_adr]; +end +assign uart_rx_fifo_wrport_dat_r = storage_1_dat0; +assign uart_rx_fifo_rdport_dat_r = storage_1_dat1; + + +BUFG BUFG( + .I(crg_clkout0), + .O(crg_clkout_buf0) +); + +BUFG BUFG_1( + .I(crg_clkout1), + .O(crg_clkout_buf1) +); + +BUFG BUFG_2( + .I(crg_clkout2), + .O(crg_clkout_buf2) +); + +IDELAYCTRL IDELAYCTRL( + .REFCLK(idelay_clk), + .RST(crg_ic_reset) +); + +//------------------------------------------------------------------------------ +// Memory rom: 16384-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: ---- | +reg [31:0] rom[0:16383]; +initial begin + $readmemh("cmod7_kintex_rom.init", rom); +end +reg [31:0] rom_dat0; +always @(posedge sys_clk) begin + rom_dat0 <= rom[adr]; +end +assign dat_r = rom_dat0; + + +//------------------------------------------------------------------------------ +// Memory sram: 16384-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Write-First | Write-Granularity: 8 +reg [31:0] sram[0:16383]; +initial begin + $readmemh("cmod7_kintex_sram.init", sram); +end +reg [13:0] sram_adr0; +always @(posedge sys_clk) begin + if (sram0_we[0]) + sram[sram0_adr][7:0] <= sram0_dat_w[7:0]; + if (sram0_we[1]) + sram[sram0_adr][15:8] <= sram0_dat_w[15:8]; + if (sram0_we[2]) + sram[sram0_adr][23:16] <= sram0_dat_w[23:16]; + if (sram0_we[3]) + sram[sram0_adr][31:24] <= sram0_dat_w[31:24]; + sram_adr0 <= sram0_adr; +end +assign sram0_dat_r = sram[sram_adr0]; + + +//------------------------------------------------------------------------------ +// Memory main_ram: 4194304-words x 32-bit +//------------------------------------------------------------------------------ +// Port 0 | Read: Sync | Write: Sync | Mode: Write-First | Write-Granularity: 8 +reg [31:0] main_ram[0:4194303]; +initial begin + $readmemh("cmod7_kintex_main_ram.init", main_ram); +end +reg [21:0] main_ram_adr0; +always @(posedge sys_clk) begin + if (sram1_we[0]) + main_ram[sram1_adr][7:0] <= sram1_dat_w[7:0]; + if (sram1_we[1]) + main_ram[sram1_adr][15:8] <= sram1_dat_w[15:8]; + if (sram1_we[2]) + main_ram[sram1_adr][23:16] <= sram1_dat_w[23:16]; + if (sram1_we[3]) + main_ram[sram1_adr][31:24] <= sram1_dat_w[31:24]; + main_ram_adr0 <= sram1_adr; +end +assign sram1_dat_r = main_ram[main_ram_adr0]; + + +a2owb a2owb( + .cfg_wr(1'd0), + .clk(sys_clk), + .externalInterrupt(a2o_interrupt[0]), + .externalInterruptS(a2o_interruptS), + .rst((sys_rst | a2o_reset)), + .softwareInterrupt(a2o_interrupt[2]), + .timerInterrupt(a2o_interrupt[1]), + .wb_ack(a2o_dbus_ack), + .wb_datr(a2o_dbus_dat_r), + .wb_adr({a2o_dbus_adr, a2o}), + .wb_cyc(a2o_dbus_cyc), + .wb_datw(a2o_dbus_dat_w), + .wb_sel(a2o_dbus_sel), + .wb_stb(a2o_dbus_stb), + .wb_we(a2o_dbus_we) +); + +FDCE FDCE( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(crg_reset), + .Q(basesoc_reset0) +); + +FDCE FDCE_1( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset0), + .Q(basesoc_reset1) +); + +FDCE FDCE_2( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset1), + .Q(basesoc_reset2) +); + +FDCE FDCE_3( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset2), + .Q(basesoc_reset3) +); + +FDCE FDCE_4( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset3), + .Q(basesoc_reset4) +); + +FDCE FDCE_5( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset4), + .Q(basesoc_reset5) +); + +FDCE FDCE_6( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset5), + .Q(basesoc_reset6) +); + +FDCE FDCE_7( + .C(crg_clkin), + .CE(1'd1), + .CLR(1'd0), + .D(basesoc_reset6), + .Q(basesoc_reset7) +); + +MMCME2_ADV #( + .BANDWIDTH("OPTIMIZED"), + .CLKFBOUT_MULT_F(6'd50), + .CLKIN1_PERIOD(83.33333333333333), + .CLKOUT0_DIVIDE_F(3'd6), + .CLKOUT0_PHASE(1'd0), + .CLKOUT1_DIVIDE(2'd3), + .CLKOUT1_PHASE(1'd0), + .CLKOUT2_DIVIDE(2'd3), + .CLKOUT2_PHASE(1'd0), + .DIVCLK_DIVIDE(1'd1), + .REF_JITTER1(0.01) +) MMCME2_ADV ( + .CLKFBIN(basesoc_mmcm_fb), + .CLKIN1(crg_clkin), + .PWRDWN(crg_power_down), + .RST(basesoc_reset7), + .CLKFBOUT(basesoc_mmcm_fb), + .CLKOUT0(crg_clkout0), + .CLKOUT1(crg_clkout1), + .CLKOUT2(crg_clkout2), + .LOCKED(crg_locked) +); + +(* ars_ff1 = "true", async_reg = "true" *) FDPE #( + .INIT(1'd1) +) FDPE ( + .C(sys_clk), + .CE(1'd1), + .D(1'd0), + .PRE(xilinxasyncresetsynchronizerimpl0), + .Q(xilinxasyncresetsynchronizerimpl0_rst_meta) +); + +(* ars_ff2 = "true", async_reg = "true" *) FDPE #( + .INIT(1'd1) +) FDPE_1 ( + .C(sys_clk), + .CE(1'd1), + .D(xilinxasyncresetsynchronizerimpl0_rst_meta), + .PRE(xilinxasyncresetsynchronizerimpl0), + .Q(sys_rst) +); + +(* ars_ff1 = "true", async_reg = "true" *) FDPE #( + .INIT(1'd1) +) FDPE_2 ( + .C(sys2x_clk), + .CE(1'd1), + .D(1'd0), + .PRE(xilinxasyncresetsynchronizerimpl1), + .Q(xilinxasyncresetsynchronizerimpl1_rst_meta) +); + +(* ars_ff2 = "true", async_reg = "true" *) FDPE #( + .INIT(1'd1) +) FDPE_3 ( + .C(sys2x_clk), + .CE(1'd1), + .D(xilinxasyncresetsynchronizerimpl1_rst_meta), + .PRE(xilinxasyncresetsynchronizerimpl1), + .Q(xilinxasyncresetsynchronizerimpl1_expr) +); + +(* ars_ff1 = "true", async_reg = "true" *) FDPE #( + .INIT(1'd1) +) FDPE_4 ( + .C(idelay_clk), + .CE(1'd1), + .D(1'd0), + .PRE(xilinxasyncresetsynchronizerimpl2), + .Q(xilinxasyncresetsynchronizerimpl2_rst_meta) +); + +(* ars_ff2 = "true", async_reg = "true" *) FDPE #( + .INIT(1'd1) +) FDPE_5 ( + .C(idelay_clk), + .CE(1'd1), + .D(xilinxasyncresetsynchronizerimpl2_rst_meta), + .PRE(xilinxasyncresetsynchronizerimpl2), + .Q(idelay_rst) +); + +endmodule + +// ----------------------------------------------------------------------------- +// Auto-Generated by LiteX on 2022-08-15 13:16:22. +//------------------------------------------------------------------------------ diff --git a/dev/sim/verilator/tb_litex.cpp b/dev/sim/verilator/tb_litex.cpp index 60f93eb..570d343 100644 --- a/dev/sim/verilator/tb_litex.cpp +++ b/dev/sim/verilator/tb_litex.cpp @@ -1,5 +1,5 @@ // simple verilator top -// uses a2owb with sim mem interface +// uses a2owb with WB interface #define TRACING @@ -61,6 +61,7 @@ const int quiesceCycles = 50; const int threads = 1; const std::string testFile = "../mem/test3/rom.init"; const unsigned int bootAdr = 0x00000000; +const bool failMaxCycles = true; const unsigned int stopOnHang = 200; const unsigned int stopOnLoop = 10; const unsigned long iarPass = 0x7F0; @@ -392,6 +393,10 @@ int main(int argc, char **argv) { if ((cycle % hbCycles) == 0) { cout << dec << setw(8) << setfill('0') << cycle << " ...tick..." << endl; } + if (failMaxCycles && (cycle == runCycles)) { + cout << "*** Max cycles reached ***" << endl; + ok = false; + } } tick++; diff --git a/dev/sim/verilator/tb_litex_soc.cpp b/dev/sim/verilator/tb_litex_soc.cpp new file mode 100644 index 0000000..8cc0265 --- /dev/null +++ b/dev/sim/verilator/tb_litex_soc.cpp @@ -0,0 +1,428 @@ +// simple verilator top +// litex soc w/a2o + +#define TRACING + +// old public access method +//#define OLD_PUBLIC + +#include +#include +#include +#include +#include + +#include "verilated.h" +#include "Vsoc.h" + +#ifndef OLD_PUBLIC +// internal nets +#include "Vsoc___024root.h" +#endif + +#include "Vsoc_soc.h" +#include "Vsoc_a2owb.h" +#include "Vsoc_a2l2wb.h" +#include "Vsoc_c.h" +#include "Vsoc_iuq.h" +#include "Vsoc_iuq_cpl_top.h" +#include "Vsoc_iuq_cpl.h" + +#ifdef TRACING +#include "verilated_vcd_c.h" +VerilatedVcdC *t; +#else +unsigned int t = 0; +#endif + +/* +#include "uart/uartsim.h" +*/ + +Vsoc* m; +#ifdef OLD_PUBLIC +Vsoc* root; +#else +Vsoc___024root* root; +#endif + +vluint64_t main_time = 0; // in units of timeprecision used in verilog or --timescale-override + +double sc_time_stamp() { // $time in verilog + return main_time; +} + +const char* tbName = "tb_litex_soc"; +const int resetCycle = 10; +const int threadRunCycle = resetCycle + 5; +const int runCycles = 100000; +const int hbCycles = 500; +const int quiesceCycles = 50; +const int threads = 1; +const std::string testFile = ""; +const unsigned int bootAdr = 0x00000000; +const bool failMaxCycles = true; +const unsigned int stopOnHang = 500; +const unsigned int stopOnLoop = 10; +const unsigned long iarPass = 0x7F0; +const unsigned long iarFail = 0x7F4; +const bool debugWB = false; + +// Cythonize this and use it for cocotb too... + +class Memory { + std::unordered_map mem; + public: + bool le; + bool logStores; + int defaultVal; + Memory(); + void loadFile(std::string filename, unsigned int adr=0, bool le=false, std::string format="ascii"); + int read(unsigned int adr); + void write(unsigned int adr, unsigned int dat); + void write(unsigned int adr, unsigned int be, unsigned int dat); +}; + +Memory::Memory() { + + this->defaultVal = 0; + this->le = false; + this->logStores = true; + +} + +void Memory::loadFile(std::string filename, unsigned int adr, bool le, std::string format) { + + unsigned int dat; + std::ifstream f; + f.open(filename, std::fstream::in); + // "ascii" + //while (f.peek()!=EOF) { + //f >> std::hex >> dat; + // f >> dat; + while (f >> std::hex >> dat) { + this->write(adr, dat); + adr += 4; + } + +} + +// adr is word-aligned byte address +int Memory::read(unsigned int adr) { + if (this->mem.find(adr) != this->mem.end()) { + return this->mem[adr]; + } else { + return this->defaultVal; + } +} + +// adr is word-aligned byte address +void Memory::write(unsigned int adr, unsigned int dat) { + unsigned int startDat = this->read(adr); + this->write(adr, 0xF, dat); +} + +void Memory::write(unsigned int adr, unsigned int be, unsigned int dat) { + if (be == 0) return; + + int mask = 0, startDat; + if (be >= 8) { + be = be - 8; + mask = 0xFF000000; + } else { + mask = 0; + } + if (be >= 4) { + be = be - 4; + mask |= 0x00FF0000; + } + if (be >= 2) { + be = be - 2; + mask |= 0x0000FF00; + } + if (be = 1) { + mask |= 0x000000FF; + } + + startDat = this->read(adr); + this->mem[adr] = (startDat & ~mask) | (dat & mask); + if (this->logStores) { + std::cout << " * Mem Update @" << std::setw(8) << std::setfill('0') << std::uppercase << std::hex << adr << + " " <" <read(adr) << std::endl; + } + +} + +Memory mem; + +int main(int argc, char **argv) { + using namespace std; + + cout << setfill('0'); + + Verilated::commandArgs(argc, argv); + m = new Vsoc; +#ifdef OLD_PUBLIC + root = m; +#else + root = m->rootp; +#endif + +#ifdef TRACING + Verilated::traceEverOn(true); + t = new VerilatedVcdC; + m->trace(t, 99); + t->open("a2olitex.vcd"); + cout << "Tracing enabled." << endl; +#endif + + bool ok = true; + bool done = false; + bool resetDone = false; + bool booted = false; + unsigned int quiesceCount = 0; + unsigned int threadStop = 0x3; + + unsigned int tick = 0; + unsigned int cycle = 1; + unsigned int readPending = 0; + unsigned int readAddr = 0; + unsigned int readTag = 0; + unsigned int readTID = 0; + unsigned int countReads = 0; + unsigned int lastCompCycle = 0; + unsigned int lastCompSame = 0; + bool wbRdPending = false, wbWrPending = false; + + //unsigned int wbSel, wbDatW; + unsigned int iu0Comp, iu1Comp, iu0CompLast, iu1CompLast; + unsigned long iu0CompIFAR, iu1CompIFAR, iu0CompIFARLast, iu1CompIFARLast, iuCompFlushIFAR; + + +/* + # GPR pool and arch map + gprCompMap = [] + lastGprCompMap = [] + #wtf check what 33:36 are! + for i in range(36): + gprCompMap.append(sim.a2o.root.iuq0.iuq_slice_top0.slice0.rn_top0.fx_rn0.gpr_rn_map.xhdl3.comp_map0[i].comp_map_latch.dout) + lastGprCompMap.append(i) + + gpr = [] + for i in range(144): + gpr.append(sim.a2o.root.xu0.gpr.gpr0.loc[i].dat) + + # CR fields pool and arch map + crCompMap = [] + lastCrCompMap = [] + for i in range(8): + crCompMap.append(sim.a2o.root.iuq0.iuq_slice_top0.slice0.rn_top0.fx_rn0.cr_rn_map.xhdl3.comp_map0[i].comp_map_latch.dout) + lastCrCompMap.append(i) + + cr = [] + for i in range(24): + cr.append(sim.a2o.root.xu0.cr.entry[i].reg_latch.dout) + + # XER pool and arch map + xerCompMap = [] + lastXerCompMap = [] + for i in range(1): + xerCompMap.append(sim.a2o.root.iuq0.iuq_slice_top0.slice0.rn_top0.fx_rn0.xer_rn_map.xhdl3.comp_map0[i].comp_map_latch.dout) + lastXerCompMap.append(i) + + xer = [] + for i in range(12): + xer.append(sim.a2o.root.xu0.xer.entry[i].reg_latch.dout) + + # CTR pool and arch map + ctrCompMap = [] + lastCtrCompMap = [] + for i in range(1): + ctrCompMap.append(sim.a2o.root.iuq0.iuq_slice_top0.slice0.rn_top0.fx_rn0.ctr_rn_map.xhdl3.comp_map0[i].comp_map_latch.dout) + lastCtrCompMap.append(i) + + ctr = [] + for i in range(8): + ctr.append(sim.a2o.root.xu0.ctr.entry[i].reg_latch.dout) + + # LR pool and arch map + lrCompMap = [] + lastLrCompMap = [] + for i in range(1): + lrCompMap.append(sim.a2o.root.iuq0.iuq_slice_top0.slice0.rn_top0.fx_rn0.lr_rn_map.xhdl3.comp_map0[i].comp_map_latch.dout) + lastLrCompMap.append(i) + + lr = [] + for i in range(8): + lr.append(sim.a2o.root.xu0.lr.entry[i].reg_latch.dout) + +*/ + + //mem.write(0xFFFFFFFC, 0x48000002); + //mem.loadFile(testFile); + + root->soc->soc_rst = 1; + + cout << dec << setw(8) << cycle << " Resetting..." << endl; + + //m->an_ac_pm_thread_stop = threadStop; === a2l2.cfg_q[0] (do write to cfg_dat) + //cout << dec << setw(8) << cycle << " Thread stop=" << threadStop << endl; + + //const int clocks[4] = {0x3, 0x2, 0x1, 0x0}; // 1x, 2x + //const int ticks1x = 4; + // all clk2x and clk4x fpga arrays overridden + const int clocks[2] = {0x1, 0x0}; // 1x + const int ticks1x = 2; + + while (!Verilated::gotFinish() && (ok | quiesceCount > 0) && cycle <= runCycles && !done) { + + if (!resetDone && (cycle > resetCycle)) { + root->soc->soc_rst = 0; + cout << dec << setw(8) << cycle << " Releasing reset." << endl; + resetDone = true; + } + + if (threadStop && (cycle > threadRunCycle)) { + //threadStop = 0x0; + //m->an_ac_pm_thread_stop = threadStop; + //cout << dec << setw(8) << cycle << " Thread stop=" << threadStop << endl; + } + + m->clk12 = clocks[tick % ticks1x]; + m->eval(); + + // 1x clock + if ((tick % ticks1x) == 0) { + + // core + iu0Comp = root->soc->a2owb->c0->iuq0->iuq_cpl_top0->iuq_cpl0->cp2_i0_completed; + iu1Comp = root->soc->a2owb->c0->iuq0->iuq_cpl_top0->iuq_cpl0->cp2_i1_completed; + iu0CompIFAR = root->soc->a2owb->c0->iuq0->iuq_cpl_top0->iuq_cpl0->cp2_i0_ifar << 2; + iu1CompIFAR = root->soc->a2owb->c0->iuq0->iuq_cpl_top0->iuq_cpl0->cp2_i1_ifar << 2; + iuCompFlushIFAR = root->soc->a2owb->c0->cp_t0_flush_ifar << 2; + + if (iu0Comp || iu1Comp) { + cout << dec << setw(8) << setfill('0') << uppercase << cycle << " C0: CP"; + if (iu0Comp) + cout << " 0:" << setw(6) << setfill('0') << hex << (iu0CompIFAR); + if (iu1Comp) + cout << " 1:" << setw(6) << setfill('0') << hex << (iu1CompIFAR); + cout << " " << setw(16) << setfill('0') << hex << (iuCompFlushIFAR); + cout << endl; + lastCompCycle = cycle; + if (quiesceCount > 0) { + // skip remaining checks + } else if ((iu0Comp && (iu0CompIFAR == iarPass)) || (iu1Comp && (iu1CompIFAR == iarPass))) { + cout << "*** Passing IAR detected ***" << endl; + quiesceCount = 5; + } else if ((iu0Comp && (iu0CompIFAR == iarFail)) || (iu1Comp && (iu1CompIFAR == iarFail))) { + cout << "*** Failing IAR detected ***" << endl; + ok = false; + quiesceCount = 5; + } else if ((iu0Comp == iu0CompLast) && (!iu0Comp || (iu0CompIFAR == iu0CompIFARLast)) && + (iu1Comp == iu1CompLast) && (!iu1Comp || (iu1CompIFAR == iu1CompIFARLast))) { + lastCompSame++; + if (stopOnLoop && (lastCompSame == stopOnLoop)) { + ok = false; + cout << "*** Loop detected for " << dec << stopOnLoop << " iterations ***" << endl; + } + } else { + iu0CompLast = iu0Comp; + iu0CompIFARLast = iu0CompIFAR; + iu1CompLast = iu1Comp; + iu1CompIFARLast = iu1CompIFAR; + lastCompSame = 0; + } + } else if (!quiesceCount && (stopOnHang != 0) && (cycle - lastCompCycle > stopOnHang)) { + ok = false; + cout << "*** No completion detected in " << dec << stopOnHang << " cycles ***" << endl; + } + + // wb - soc can monitor-only + if (wbRdPending) { + if (root->soc->a2owb->wb_ack) + if (debugWB) + cout << dec << setw(8) << setfill('0') << uppercase << cycle << " WB RD ACK RA=" << setw(8) << hex << setfill('0') << (root->soc->a2owb->wb_adr & 0xFFFFFFFC) << + " DATA=" << setw(8) << hex << setfill('0') << root->soc->a2owb->wb_datr << endl; + + wbRdPending = false; + + } else if (wbWrPending) { + if (root->soc->a2owb->wb_ack) + if (debugWB) + cout << dec << setw(8) << setfill('0') << uppercase << cycle << " WB WR ACK RA=" << setw(8) << hex << setfill('0') << (root->soc->a2owb->wb_adr & 0xFFFFFFFC) << + " SEL=" << setw(1) << setfill('0') << uppercase << hex << (unsigned int)root->soc->a2owb->wb_sel << + " DATA=" << setw(8) << hex << setfill('0') << root->soc->a2owb->wb_datw << endl; + wbWrPending = false; + + } else if (root->soc->a2owb->wb_cyc && root->soc->a2owb->wb_stb) { + if (!root->soc->a2owb->wb_we) { + if (debugWB) + cout << dec << setw(8) << setfill('0') << uppercase << cycle << " WB RD RA=" << setw(8) << hex << setfill('0') << root->soc->a2owb->wb_adr << endl; + wbRdPending = true; + } else { + if (debugWB) + cout << dec << setw(8) << setfill('0') << uppercase << cycle << " WB WR RA=" << setw(8) << hex << setfill('0') << root->soc->a2owb->wb_adr << + " SEL=" << root->soc->a2owb->wb_sel << " DATA=" << setw(8) << hex << setfill('0') << root->soc->a2owb->wb_datw << endl; + wbWrPending = true; + } + } + + // leds, btns, mem, etc. + + // uart + + } + + m->eval(); // NEED THIS!!!! + + // finish clock stuff + if ((tick % ticks1x) == 0) { + cycle++; + if ((cycle % hbCycles) == 0) { + cout << dec << setw(8) << setfill('0') << cycle << " ...tick..." << endl; + } + if (failMaxCycles && (cycle == runCycles)) { + cout << "*** Max cycles reached ***" << endl; + ok = false; + } + } + + tick++; + + #ifdef TRACING + t->dump(tick); + t->flush(); + #endif + + // check for fails + + if (!ok && quiesceCount == 0) { + quiesceCount = quiesceCycles; + cout << "Quiescing..." << endl; + } else if (quiesceCount > 0) { + quiesceCount--; + if (ok && quiesceCount == 0) { + done = true; + } + } + + } + +#ifdef TRACING + t->close(); +#endif + m->final(); + + cout << endl << endl << tbName << endl; + cout << endl << "Cycles run=" << dec << cycle << endl << endl; + if (!ok) { + cout << "You are worthless and weak." << endl; + exit(EXIT_FAILURE); + } else { + cout << "You has opulence." << endl; + exit(EXIT_SUCCESS); + } + +} \ No newline at end of file