CACHE WORKING just needs lb/sb

This commit is contained in:
felsabbagh3
2019-10-25 03:03:09 -04:00
parent 1e648c5819
commit 01efe02e8b
19 changed files with 2302 additions and 2358 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,405 +1,396 @@
:0200000480007A :0200000480007A
:1000000037050200930570002322B500130000009D :1000000037F1FF7FEF101004130500006B000500AF
:100010001300000013000000032645001305000034 :10001000938B0600130D0700130F010093030500D7
:100020006B000500938B0600130D0700130F0100F2 :1000200013051000635C75001301018013030500C4
:100030009303050013051000635C75001301018034 :100030006B500300130515006FF0DFFE1300000086
:10004000130305006B500300130515006FF0DFFE6E :100040001300000013000000130000001300000064
:100050001300000013000000130000001300000054 :100050001300000013010F0013050000930F0600AA
:10006000130000001300000013010F00130500002F :10006000938D030013000000130000001300000034
:10007000930F0600938D030013000000130000008F :100070001300000013000000130000001300000034
:100080001300000013000000130000001300000024 :1000800013000000EBE0BF011300000013000000AC
:100090001300000013000000EBE0BF01130000009C :100090001300000013000000130000001300000014
:1000A0001300000013000000130000001300000004 :1000A000170500001305451B6B40050017030000F2
:1000B00013000000170500001305451B6B400500E9 :1000B000130343F66B000300678000001702000182
:1000C00017030000130343F66B0003006780000072 :1000C000130282252320020023221200232422006F
:1000D000170200011302022423200200232212002F :1000D0002326320023284200232A5200232C6200C8
:1000E000232422002326320023284200232A520000 :1000E000232E720023208202232292022324A202C2
:1000F000232C6200232E72002320820223229202EC :1000F0002326B2022328C202232AD202232CE202A0
:100100002324A2022326B2022328C202232AD202D7 :10010000232EF20223200205232212052324220596
:10011000232CE202232EF2022320020523221205C1 :100110002326320523284205232A5205232C620573
:10012000232422052326320523284205232A5205AB :10012000232E720523208207232292072324A2076D
:10013000232C6205232E7205232082072322920797 :100130002326B2072328C207232AD207232CE2074B
:100140002324A2072326B2072328C207232AD20783 :10014000232EF2071302100067800000170200013F
:10015000232CE207232EF207130210006780000011 :100150001302821C0320020083204200032182003C
:10016000170200011302021B032002008320420039 :100160008321C20003220201832242010323820170
:10017000032182008321C200032202018322420163 :100170008323C20103240202832442020325820254
:10018000032382018323C201032402028324420247 :100180008325C20203260203832642030327820338
:10019000032582028325C20203260203832642032B :100190008327C2030328020483284204032982041C
:1001A000032782038327C20303280204832842040F :1001A0008329C204032A0205832A4205032B820500
:1001B000032982048329C204032A0205832A4205F3 :1001B000832BC205032C0206832C4206032D8206E4
:1001C000032B8205832BC205032C0206832C4206D7 :1001C000832DC206032E0207832E4207032F8207C8
:1001D000032D8206832DC206032E0207832E4207BB :1001D000832FC2071302000067800000732500020E
:1001E000032F8207832FC2071302000067800000DD :1001E000678000007325100267800000130101FE84
:1001F00073250002678000007325100267800000ED :1001F000232E1100232C810013040102232604FE68
:10020000130101FE232E1100232C8100130401028F :100200006F0040030327C4FEB7170000938747978A
:10021000232604FE6F0040030327C4FEB717000027 :100210003307F702B707008193874741B307F70019
:10022000938747973307F702B70700819387074102 :1002200013850700EF0000448327C4FE938717005F
:10023000B307F70013850700EF0000448327C4FECF :100230002326F4FE0327C4FE9307F001E3D4E7FC72
:10024000938717002326F4FE0327C4FE9307F001CB :10024000130000008320C101032481011301010276
:10025000E3D4E7FC130000008320C10103248101E3 :1002500067800000130101FD23261102232481027F
:100260001301010267800000130101FD2326110222 :100260002322A103130401031300000013070D0050
:10027000232481022322A10313040103130000009D :10027000B7170000938747973307F702B707008146
:1002800013070D00B7170000938747973307F7024E :1002800093874741B307F70013850700EF004050FD
:10029000B707008193870741B307F700138507006D :1002900093070500638A070213070D00B707008163
:1002A000EF00405093070500638A070213070D0013 :1002A000131727009387C726B307F700130710001B
:1002B000B70700811317270093878726B307F70036 :1002B00023A0E70093070D0063960700EFF01FE906
:1002C0001307100023A0E70093070D0063960700B3 :1002C0006F00C0057300000013070D00B717000092
:1002D000EFF01FE96F00C0057300000013070D0069 :1002D000938747973307F702B70700819387474112
:1002E000B7170000938747973307F702B7070081D6 :1002E000B307F700130784FD930507001385070084
:1002F00093870741B307F700130784FD93050700B1 :1002F000EF000040832704FE138107008327C4FD1D
:1003000013850700EF000040832704FE13810700D8 :10030000832584FD032644FE832684FE0327C4FE42
:100310008327C4FD832584FD032644FE832684FEB3 :1003100013850700EFF0DFCF730000008320C102D8
:100320000327C4FE13850700EFF0DFCF7300000042 :1003200003248102032D41021301010367800000B1
:100330008320C10203248102032D41021301010322 :10033000130101FB23261104232481041304010566
:1003400067800000130101FB23261104232481048C :10034000EFF0DFE92324A4FE9309010093071000D6
:1003500013040105EFF0DFE92324A4FE9309010053 :100350002326F4FE6F00C0080327C4FEB717000071
:10036000930710002326F4FE6F00C0080327C4FE85 :10036000938747973307F702B70700819387474181
:10037000B7170000938747973307F702B707008145 :10037000B307F70013850700EF00804193070500DE
:1003800093870741B307F70013850700EF0080410B :10038000639A07040327C4FEB717000093874797B3
:1003900093070500639A07040327C4FEB7170000FC :100390003307F702B707008193874741B307F70098
:1003A000938747973307F702B70700819387074181 :1003A000130704FD9305070013850700EF00403491
:1003B000B307F700130704FD930507001385070033 :1003B000832784FD13810700832744FD832504FDE3
:1003C000EF004034832784FD13810700832744FD19 :1003C0000326C4FD832604FE032744FE138507008D
:1003D000832504FD0326C4FD832604FE032744FE73 :1003D000EFF0DFCD8327C4FE938717002326F4FEBA
:1003E00013850700EFF0DFCD8327C4FE9387170046 :1003E0008327C4FE032784FEE3E8E7F613810900B0
:1003F0002326F4FE8327C4FE032784FEE3E8E7F602 :1003F000EFF0DFCC9307020063880704B7070081A2
:1004000013810900EFF0DFCC930702006388070433 :1004000013854741EF00C03893070500639E07023C
:10041000B707008113850741EF00C0389307050037 :10041000930784FB93850700B70700811385474145
:10042000639E0702930784FB93850700B70700814B :10042000EF00002D832704FC138107008327C4FB02
:1004300013850741EF00002D832704FC138107007B :10043000832584FB032644FC832684FC0327C4FC19
:100440008327C4FB832584FB032644FC832684FC8A :1004400013850700EFF0DFBC130000008320C10418
:100450000327C4FC13850700EFF0DFBC1300000086 :10045000032481041301010567800000130101FBDF
:100460008320C10403248104130101056780000077 :10046000232611042324810413040105232EA4FA56
:10047000130101FB23261104232481041304010525 :10047000232CB4FA232AC4FA2328D4FAEFF01FD786
:10048000232EA4FA232CB4FA232AC4FA2328D4FA5C :10048000EFF0DFD52322A4FE13090100232604FE8A
:10049000EFF01FD7EFF0DFD52322A4FE13090100F0 :10049000232404FE6F000009B709FFFF3301310177
:1004A000232604FE232404FE6F000009B709FFFF82 :1004A000832784FE2326F4FC832784FB2328F4FC83
:1004B00033013101832784FE2326F4FC832784FB48 :1004B00093070100232AF4FC832744FB232CF4FC3C
:1004C0002328F4FC93070100232AF4FC832744FB30 :1004C000832704FB232EF4FC8327C4FE2320F4FEA1
:1004D000232CF4FC832704FB232EF4FC8327C4FE87 :1004D0000327C4FEB7170000938747973307F70237
:1004E0002320F4FE0327C4FEB71700009387479725 :1004E000B707008193874741B307F7001307C4FCA0
:1004F0003307F702B707008193870741B307F70077 :1004F0009305070013850700EF0000198327C4FE4A
:100500001307C4FC9305070013850700EF000019CB :10050000938717002326F4FE8327C4FE032744FEA7
:100510008327C4FE938717002326F4FE8327C4FE97 :1005100063E4E700232604FE832784FE9387170005
:10052000032744FE63E4E700232604FE832784FEBA :100520002324F4FE032784FE8327C4FBE366F7F647
:10053000938717002324F4FE032784FE8327C4FB3C :1005300013010900EFF0DFDF130000008320C10486
:10054000E366F7F613010900EFF0DFDF13000000A8 :10054000032481041301010567800000130101FDEC
:100550008320C10403248104130101056780000086 :10055000232611022324810213040103232EA4FC69
:10056000130101FD23261102232481021304010338 :100560008325C4FDB707008113850704EF00802DA4
:10057000232EA4FC8325C4FDB7070081138507043F :10057000EFF0DFC62320A4FE232604FE6F008006D2
:10058000EF004035EFF0DFC62320A4FE232604FE53 :10058000930710002326F4FE232404FE6F00C0030B
:100590006F008006930710002326F4FE232404FE38 :10059000B7070081032784FE131727009387C72618
:1005A0006F00C003B7070081032784FE13172700DD :1005A000B307F70003A70700930710006318F700CD
:1005B00093878726B307F70003A707009307100068 :1005B0008327C4FE938717002326F4FE832784FE37
:1005C0006318F7008327C4FE938717002326F4FEE1 :1005C000938717002324F4FE032784FE9307F0018A
:1005D000832784FE938717002324F4FE032784FED9 :1005D000E3D0E7FC8325C4FEB70700811385C70479
:1005E0009307F001E3D0E7FC8325C4FEB707008141 :1005E000EF0040260327C4FE8327C4FDE36AF7F823
:1005F0001385C704EF00002E0327C4FE8327C4FD24 :1005F000232204FE6F008002B7070081032744FE18
:10060000E36AF7F8232204FE6F008002B707008137 :10060000131727009387C726B307F70023A0070017
:10061000032744FE1317270093878726B307F700A5 :10061000832744FE938717002322F4FE832744FE9A
:1006200023A00700832744FE938717002322F4FEAC :10062000032704FEE3EAE7FC130000008320C10275
:10063000832744FE032704FEE3EAE7FC13000000DF :10063000032481021301010367800000130101FFFD
:100640008320C1020324810213010103678000009B :1006400023268100232471011304010193870B00E9
:10065000130101FF232681002324710113040101EA :10065000138507000324C100832B810013010101CE
:1006600093870B00138507000324C100832B8100AF :1006600067800000930205001303000093037000ED
:1006700013010101678000009302050013030000CD :1006700023A0620023A2620023A4620023A67200CA
:100680009303700023A0620023A2620023A46200EF :1006800023A86200678000009302050003A3820094
:1006900023A6720023A86200678000009302050071 :100690001303130023A462001383420183AE4200BC
:1006A00003A382001303130023A4620013834201F7 :1006A00093935E003303730003AE05002320C30160
:1006B00083AE420093935E003303730003AE0500E4 :1006B00003AE45002322C30103AE85002324C301FA
:1006C0002320C30103AE45002322C30103AE8500EE :1006C00003AEC5002326C30103AE05012328C301E1
:1006D0002324C30103AEC5002326C30103AE0501D5 :1006D00003AE4501232AC301938E1E00130F20038E
:1006E0002328C30103AE4501232AC301938E1E00B4 :1006E0006394EE01930E000023A2D2016780000004
:1006F000130F20036394EE01930E000023A2D20196 :1006F0009302050003A38200130000001300000012
:10070000678000009302050003A38200130000002D :10070000130000001300000013000000130000009D
:10071000130000001300000013000000130000008D :100710001303F3FF23A462001383420183AE02009C
:10072000130000001303F3FF23A4620013834201AC :10072000930F2003138F0E00130F1F006314FF019C
:1007300083AE0200930F2003138F0E00130F1F00D0 :10073000130F000023A0E20193935E0033037300C4
:100740006314FF01130F000023A0E20193935E00E6 :10074000032E030023A0C501032E430023A2C501ED
:1007500033037300032E030023A0C501032E4300BF :10075000032E830023A4C501032EC30023A6C501D5
:1007600023A2C501032E830023A4C501032EC300C9 :10076000032E030123A8C501032E430123AAC501BB
:1007700023A6C501032E030123A8C501032E4301AF :10077000678000009302050003A3820013050000B8
:1007800023AAC501678000009302050003A382002D :10078000130E200363146E0013051500678000002C
:1007900013050000130E200363146E0013051500EB :100790009302050003A3820013050000130E00005E
:1007A000678000009302050003A382001305000088 :1007A00063146E00130515006780000093020500B6
:1007B000130E000063146E0013051500678000001F :1007B00003A3C20083A3020133B563006780000076
:1007C0009302050003A3C20083A3020133B56300B3 :1007C000130141FF232011002322B10083450500BE
:1007D00067800000130141FF232011002322B10094 :1007D00063880500EF00C001130515006FF01FFFCF
:1007E0008345050063880500EF00C001130515006F :1007E00083200100832541001301C10067800000C0
:1007F0006FF01FFF83200100832541001301C1001A :1007F000B708010023A0B80067800000130101FEC4
:1008000067800000B708010023A0B80067800000DF :10080000232E1100232C8100130401022326A4FEB1
:10081000130101FD23261102232481021304010385 :10081000B70700810327C4FE131727009387871AA1
:10082000232EA4FC0327C4FD9307F00063E4E70232 :10082000B307F70083A7070013850700EFF05FF910
:10083000B70700810327C4FD131727009387871A82 :10083000130000008320C101032481011301010280
:10084000B307F70083A7070013850700EFF09FF8B1 :1008400067800000130101FE232E1100232C81007C
:100850006F004007930700022326F4FEA30504FE61 :10085000130401022326A4FE2324B4FE0325C4FEB0
:100860008327C4FE9387C7FF0327C4FDB357F70050 :10086000EFF01FF6032584FEEFF05FF9B707008174
:1008700093F7F7002322F4FE832744FE63860700E4 :1008700013854709EFF0DFF4130000008320C10166
:1008800093071000A305F4FE8347B4FE63820702BA :10088000032481011301010267800000130101FDAF
:10089000B7070081032744FE131727009387871AA1 :10089000232611022324810213040103232EA4FC26
:1008A000B307F70083A7070013850700EFF09FF257 :1008A000232CB4FC232AC4FC2328D4FCB767028180
:1008B0008327C4FE9387C7FF2326F4FE8327C4FE45 :1008B0000327C4FD23AEE71AB76702819387C71BDE
:1008C000E340F0FA8320C1020324810213010103F3 :1008C000032784FD23A2E700B76702819387C71B34
:1008D00067800000130101FE232E1100232C8100EC :1008D000032744FD23A4E700B76702819387C71B62
:1008E000130401022326A4FE2324B4FE0325C4FE20 :1008E000032704FD23A6E700EFF0DF8F2324A4FEF7
:1008F000EFF05FEE032584FEEFF09FF1B707008174 :1008F000032704FD832784FEB357F7022326F4FE63
:1009000013854709EFF01FED130000008320C1019C :10090000032704FD832784FEB377F702638807007B
:10091000032481011301010267800000130101FD1E :100910008327C4FE938717002326F4FEB76702815E
:10092000232611022324810213040103232EA4FC95 :100920009387C71B0327C4FE23A8E700032704FD02
:10093000232CB4FC232AC4FC2328D4FCB7670281EF :10093000832784FE6362F702B76702819386C71B31
:100940000327C4FD23ACE71AB76702819387871B8F :10094000B71700801386079B832584FE032504FDCB
:10095000032784FD23A2E700B76702819387871BE3 :10095000EFF0DFB06F000002B76702819386C71B1C
:10096000032744FD23A4E700B76702819387871B11 :10096000B71700801386079B832504FD032504FD2C
:10097000032704FD23A6E700EFF01F882324A4FE2D :10097000EFF0DFAEEFF09F862322A4FE032704FDF5
:10098000032704FD832784FEB357F7022326F4FED2 :10098000832744FE63F8E700032544FEEFF01FBC15
:10099000032704FD832784FEB377F70263880700EB :100990006F00C000032504FDEFF05FBB13000000F3
:1009A0008327C4FE938717002326F4FEB7670281CE :1009A0008320C10203248102130101036780000038
:1009B0009387871B0327C4FE23A8E700032704FDB2 :1009B000130101FA232E1104232C810413040106D0
:1009C000832784FE6362F702B76702819386871BE1 :1009C0002326A4FA2324B4FAEFF05FC7232CA4FC57
:1009D000B7170080138607A4832584FE032504FD32 :1009D000832784FD83A70700232AF4FC832784FD53
:1009E000EFF01FA96F000002B76702819386871B93 :1009E00083A747002328F4FC832784FD83A787007F
:1009F000B7170080138607A4832504FD032504FD93 :1009F0002326F4FC832784FD83A707012326F4FE26
:100A0000EFF01FA7EFF0CFFE2322A4FE032704FD83 :100A00000327C4FE8327C4FAB307F7022324F4FEA6
:100A1000832744FE63F8E700032544FEEFF05FB44C :100A10008327C4FE639A0700930710002326F4FE81
:100A20006F00C000032504FDEFF09FB3130000002A :100A20008327C4FA2324F4FE832784FD83A7C70009
:100A30008320C102032481021301010367800000A7 :100A30002324F4FC232204FE6F00800D232004FEF7
:100A4000130101FA232E1104232C8104130401063F :100A4000232E04FC6F008007032784FA832784FC8D
:100A50002326A4FA2324B4FAEFF09FBF232CA4FC8E :100A5000B307F7020327C4FDB307F7002322F4FC12
:100A6000832784FD83A70700232AF4FC832784FDC2 :100A6000032784FC8327C4FDB307F702032784FE12
:100A700083A747002328F4FC832784FD83A78700EE :100A7000B307F7002320F4FC832744FC9397270057
:100A80002326F4FC832784FD83A707012326F4FE95 :100A8000032744FDB307F70003A70700832704FCEF
:100A90000327C4FE8327C4FAB307F7022324F4FE16 :100A900093972700832604FDB387F60083A70700FA
:100AA0008327C4FE639A0700930710002326F4FEF1 :100AA000B307F702032704FEB307F7002320F4FE81
:100AB0008327C4FA2324F4FE832784FD83A7C70079 :100AB0008327C4FD93871700232EF4FC0327C4FD6E
:100AC0002324F4FC232204FE6F00800D232004FE67 :100AC000832784FCE362F7F8032784FA832784FCF6
:100AD000232E04FC6F008007032784FA832784FCFD :100AD0003307F702832784FEB307F700232EF4FAC7
:100AE000B307F7020327C4FDB307F7002322F4FC82 :100AE0008327C4FB939727000327C4FCB307F700B1
:100AF000032784FC8327C4FDB307F702032784FE82 :100AF000032704FE23A0E700832784FE93871700C3
:100B0000B307F7002320F4FC832744FC93972700C6 :100B00002324F4FE832744FE938717002322F4FE58
:100B1000032744FDB307F70003A70700832704FC5E :100B1000832744FE0327C4FEE3E2E7F2130000004C
:100B200093972700832604FDB387F60083A7070069 :100B20008320C105032481051301010667800000AD
:100B3000B307F702032704FEB307F7002320F4FEF0 :100B3000130101FC232E1102232C81021304010452
:100B40008327C4FD93871700232EF4FC0327C4FDDD :100B4000232EA4FC232CB4FC232AC4FC2328D4FC8D
:100B5000832784FCE362F7F8032784FA832784FC65 :100B50002326E4FCB76702810327C4FD23A8E71C12
:100B60003307F702832784FEB307F700232EF4FA36 :100B6000B76702819387071D032784FD23A2E7004F
:100B70008327C4FB939727000327C4FCB307F70020 :100B7000B76702819387071D032744FD23A4E7007D
:100B8000032704FE23A0E700832784FE9387170032 :100B8000B76702819387071D0327C4FC23A6E700EC
:100B90002324F4FE832744FE938717002322F4FEC8 :100B9000B76702819387071D032704FD23A8E70099
:100BA000832744FE0327C4FEE3E2E7F213000000BC :100BA000EFF04FE42324A4FE0327C4FC832784FE34
:100BB0008320C1050324810513010106678000001D :100BB000B357F7022326F4FE0327C4FC832784FEE1
:100BC000130101FC232E1102232C810213040104C2 :100BC000B377F702638807008327C4FE9387170073
:100BD000232EA4FC232CB4FC232AC4FC2328D4FCFD :100BD0002326F4FEB76702819387071D0327C4FE0F
:100BE0002326E4FCB76702810327C4FD23A6E71C84 :100BE00023AAE7000327C4FC832784FE6362F7027D
:100BF000B76702819387C71C032784FD23A2E70000 :100BF000B76702819386071DB7170080138687C6E3
:100C0000B76702819387C71C032744FD23A4E7002D :100C0000832584FE032504FDEFF05F856F0000025D
:100C1000B76702819387C71C0327C4FC23A6E7009C :100C1000B76702819386071DB7170080138687C6C2
:100C2000B76702819387C71C032704FD23A8E70049 :100C20008325C4FC032504FDEFF05F83EFF00FDBA9
:100C3000EFF08FDC2324A4FE0327C4FC832784FE6B :100C30002322A4FE032704FD832744FE63F8E70074
:100C4000B357F7022326F4FE0327C4FC832784FE50 :100C4000032544FEEFF09F906F00C000032504FDD4
:100C5000B377F702638807008327C4FE93871700E2 :100C5000EFF0DF8F130000008320C1030324810322
:100C60002326F4FEB76702819387C71C0327C4FEBF :100C60001301010467800000130101FB2326110416
:100C700023AAE7000327C4FC832784FE6362F702EC :100C70002324810413040105232EA4FA232CB4FA9F
:100C8000B76702819386C71CB7170080138687CF8A :100C8000EFF0DF9B2320A4FE832704FE83A7070049
:100C9000832584FE032504FDEFF08FFD6F00000225 :100C9000232EF4FC832704FE83A74700232CF4FCB7
:100CA000B76702819386C71CB7170080138687CF6A :100CA000832704FE83A78700232AF4FC832704FEFE
:100CB0008325C4FC032504FDEFF08FFBEFF04FD339 :100CB00083A747012326F4FE0327C4FE8327C4FB32
:100CC0002322A4FE032704FD832744FE63F8E700E4 :100CC000B307F7022324F4FE8327C4FE639A0700C8
:100CD000032544FEEFF0DF886F00C000032504FD0C :100CD000930710002326F4FE8327C4FB2324F4FE8D
:100CE000EFF01F88130000008320C1030324810359 :100CE000832704FE83A7C7002328F4FC232204FEE5
:100CF0001301010467800000130101FB2326110486 :100CF0006F00000C032784FB832704FD3307F702F2
:100D00002324810413040105232EA4FA232CB4FA0E :100D0000832784FEB307F7002326F4FC032784FE21
:100D1000EFF01F942320A4FE832704FE83A707007F :100D1000832704FDB337F70093F7F70F2324F4FC80
:100D2000232EF4FC832704FE83A74700232CF4FC26 :100D2000832784FC93B71700A303F4FC834774FC68
:100D3000832704FE83A78700232AF4FC832704FE6D :100D3000138F0700B7170080938FC7D96B200F0060
:100D400083A747012326F4FE0327C4FE8327C4FBA1 :100D40007B70FF018327C4FC939727000327C4FD12
:100D5000B307F7022324F4FE8327C4FE639A070037 :100D5000B307F70083A607008327C4FC93972700F7
:100D6000930710002326F4FE8327C4FB2324F4FEFC :100D6000032784FDB307F70003A707008327C4FC0C
:100D7000832704FE83A7C7002328F4FC232204FE54 :100D700093972700032644FDB307F6003387E60068
:100D80006F00000C032784FB832704FD3307F70261 :100D800023A0E700832784FE938717002324F4FE23
:100D9000832784FEB307F7002326F4FC032784FE91 :100D9000B7170080138E07DA67000E0013000000FB
:100DA000832704FDB337F70093F7F70F2324F4FCF0 :100DA0006B300000832744FE938717002322F4FE54
:100DB000832784FC93B71700A303F4FC834774FCD8 :100DB000832744FE0327C4FEE3EEE7F2130000009E
:100DC000138F0700B7170080938FC7E26B200F00C7 :100DC0008320C1040324810413010105678000000E
:100DD0007B70FF018327C4FC939727000327C4FD82 :100DD000130101FC232E1102232C810213040104B0
:100DE000B307F70083A607008327C4FC9397270067 :100DE000232EA4FC232CB4FC232AC4FC2328D4FCEB
:100DF000032784FDB307F70003A707008327C4FC7C :100DF0002326E4FCB76702810327C4FD23A8E71C70
:100E000093972700032644FDB307F6003387E600D7 :100E0000B76702819387071D032784FD23A2E700AC
:100E100023A0E700832784FE938717002324F4FE92 :100E1000B76702819387071D032744FD23A4E700DA
:100E2000B7170080138E07E367000E001300000061 :100E2000B76702819387071D0327C4FC23A6E70049
:100E30006B300000832744FE938717002322F4FEC3 :100E3000B76702819387071D032704FD23A8E700F6
:100E4000832744FE0327C4FEE3EEE7F2130000000D :100E4000EFF04FBA2324A4FE0327C4FC832784FEBB
:100E50008320C1040324810413010105678000007D :100E5000B357F7022326F4FE0327C4FC832784FE3E
:100E6000130101FC232E1102232C8102130401041F :100E6000B377F702638807008327C4FE93871700D0
:100E7000232EA4FC232CB4FC232AC4FC2328D4FC5A :100E70002326F4FEB76702819387071D0327C4FE6C
:100E80002326E4FCB76702810327C4FD23A6E71CE1 :100E800023AAE7000327C4FC832784FE6362F702DA
:100E9000B76702819387C71C032784FD23A2E7005D :100E9000B76702819386071DB7170080138687F016
:100EA000B76702819387C71C032744FD23A4E7008B :100EA000832584FE032504FDEFF04FDB6F00000275
:100EB000B76702819387C71C0327C4FC23A6E700FA :100EB000B76702819386071DB7170080138687F0F6
:100EC000B76702819387C71C032704FD23A8E700A7 :100EC0008325C4FC032504FDEFF04FD9EFF00FB1EB
:100ED000EFF08FB22324A4FE0327C4FC832784FEF3 :100ED0002322A4FE032704FD832744FE63F8E700D2
:100EE000B357F7022326F4FE0327C4FC832784FEAE :100EE000032544FEEFF08FE66F00C000032504FDEC
:100EF000B377F702638807008327C4FE9387170040 :100EF000EFF0CFE5130000008320C103032481033A
:100F00002326F4FEB76702819387C71C0327C4FE1C :100F00001301010467800000130101FB2326110473
:100F100023AAE7000327C4FC832784FE6362F70249 :100F10002324810413040105232EA4FA232CB4FAFC
:100F2000B76702819386C71CB7170080138687F9BD :100F2000EFF0CFF12320A4FE832704FE83A7070060
:100F3000832584FE032504FDEFF08FD36F000002AC :100F3000232EF4FC832704FE83A74700232CF4FC14
:100F4000B76702819386C71CB7170080138687F99D :100F4000832704FE83A78700232AF4FC832704FE5B
:100F50008325C4FC032504FDEFF08FD1EFF04FA9EA :100F500083A747012326F4FE0327C4FE8327C4FB8F
:100F60002322A4FE032704FD832744FE63F8E70041 :100F6000B307F7022324F4FE8327C4FE639A070025
:100F7000032544FEEFF0CFDE6F00C000032504FD23 :100F7000930710002326F4FE8327C4FB2324F4FEEA
:100F8000EFF00FDE130000008320C1030324810370 :100F8000832704FE83A7C7002328F4FC232204FE42
:100F90001301010467800000130101FB23261104E3 :100F90006F00000C032784FB832704FD3307F7024F
:100FA0002324810413040105232EA4FA232CB4FA6C :100FA000832784FEB307F7002326F4FC032784FE7F
:100FB000EFF00FEA2320A4FE832704FE83A7070097 :100FB000832704FDB337F70093F7F70F2324F4FCDE
:100FC000232EF4FC832704FE83A74700232CF4FC84 :100FC000832784FC93B71700A303F4FC834774FCC6
:100FD000832704FE83A78700232AF4FC832704FECB :100FD000138F0700B7170080938FC7036B200F0094
:100FE00083A747012326F4FE0327C4FE8327C4FBFF :100FE0007B70FF018327C4FC939727000327C4FD70
:100FF000B307F7022324F4FE8327C4FE639A070095 :100FF000B307F70083A607008327C4FC9397270055
:10100000930710002326F4FE8327C4FB2324F4FE59 :10100000032784FDB307F70003A707008327C4FC69
:10101000832704FE83A7C7002328F4FC232204FEB1 :1010100093972700032644FDB307F6003387E64085
:101020006F00000C032784FB832704FD3307F702BE :1010200023A0E700832784FE938717002324F4FE80
:10103000832784FEB307F7002326F4FC032784FEEE :10103000B7170080138E070467000E00130000002E
:10104000832704FDB337F70093F7F70F2324F4FC4D :101040006B300000832744FE938717002322F4FEB1
:10105000832784FC93B71700A303F4FC834774FC35 :10105000832744FE0327C4FEE3EEE7F213000000FB
:10106000138F0700B7170080938FC70C6B200F00FA :101060008320C1040324810413010105678000006B
:101070007B70FF018327C4FC939727000327C4FDDF :10107000130101FC232E1102232C8102130401040D
:10108000B307F70083A607008327C4FC93972700C4 :10108000232EA4FC232CB4FC232AC4FC2328D4FC48
:10109000032784FDB307F70003A707008327C4FCD9 :101090002326E4FCB76702810327C4FD23A4E71ECF
:1010A00093972700032644FDB307F6003387E640F5 :1010A000B76702819387871E032784FD23A2E70089
:1010B00023A0E700832784FE938717002324F4FEF0 :1010B000B76702819387871E032744FD23A4E700B7
:1010C000B7170080138E070D67000E001300000095 :1010C000B76702819387871E0327C4FC23A6E70026
:1010D0006B300000832744FE938717002322F4FE21 :1010D000B76702819387871E032704FD23A8E700D3
:1010E000832744FE0327C4FEE3EEE7F2130000006B :1010E000EFF04F902324A4FE0327C4FC832784FE43
:1010F0008320C104032481041301010567800000DB :1010F000B357F7022326F4FE0327C4FC832784FE9C
:10110000130101FC232E1102232C8102130401047C :10110000B377F702638807008327C4FE938717002D
:10111000232EA4FC232CB4FC232AC4FC2328D4FCB7 :101110002326F4FEB76702819387871E0327C4FE48
:101120002326E4FCB76702810327C4FD23A2E71E40 :1011200023AAE7000327C4FC832784FE6362F70237
:10113000B76702819387471E032784FD23A2E70038 :10113000B76702819386871EB71700801386871AC8
:10114000B76702819387471E032744FD23A4E70066 :10114000832584FE032504FDEFF04FB16F000002FC
:10115000B76702819387471E0327C4FC23A6E700D5 :10115000B76702819386871EB71700801386871AA8
:10116000B76702819387471E032704FD23A8E70082 :101160008325C4FC032504FDEFF04FAFEFF00F879C
:10117000EFF08F882324A4FE0327C4FC832784FE7A :101170002322A4FE032704FD832744FE63F8E7002F
:10118000B357F7022326F4FE0327C4FC832784FE0B :10118000032544FEEFF08FBC6F00C000032504FD73
:10119000B377F702638807008327C4FE938717009D :10119000EFF0CFBB130000008320C10303248103C1
:1011A0002326F4FEB76702819387471E0327C4FEF8 :1011A0001301010467800000130101FB23261104D1
:1011B00023AAE7000327C4FC832784FE6362F702A7 :1011B0002324810413040105232EA4FA232CB4FA5A
:1011C000B76702819386471EB7170080138687236F :1011C000EFF0CFC72320A4FE832704FE83A70700E8
:1011D000832584FE032504FDEFF08FA96F00000234 :1011D000232EF4FC832704FE83A7470083A7070080
:1011E000B76702819386471EB7170080138687234F :1011E000232CF4FC832704FE83A78700232AF4FC26
:1011F0008325C4FC032504FDEFF08FA7EFE05FFF1C :1011F000832704FE83A747012326F4FE0327C4FEAA
:101200002322A4FE032704FD832744FE63F8E7009E :101200008327C4FBB307F7022324F4FE8327C4FE1D
:10121000032544FEEFF0CFB46F00C000032504FDAA :10121000639A0700930710002326F4FE8327C4FB7C
:10122000EFF00FB4130000008320C10303248103F7 :101220002324F4FE832704FE83A7C7002328F4FCAD
:101230001301010467800000130101FB2326110440 :10123000232204FE6F00000B032784FB832704FD99
:101240002324810413040105232EA4FA232CB4FAC9 :101240003307F702832784FEB307F7002326F4FC55
:10125000EFF00FC02320A4FE832704FE83A707001E :10125000032784FE832704FDB337F70093F7F70FC6
:10126000232EF4FC832704FE83A7470083A70700EF :101260002324F4FC832784FC93B71700A303F4FC26
:10127000232CF4FC832704FE83A78700232AF4FC95 :10127000834774FC138F0700B7170080938F072DE7
:10128000832704FE83A747012326F4FE0327C4FE19 :101280006B200F007B70FF018327C4FC939727001E
:101290008327C4FBB307F7022324F4FE8327C4FE8D :101290000327C4FDB307F70083A607008327C4FC18
:1012A000639A0700930710002326F4FE8327C4FBEC :1012A00093972700032744FDB307F700032784FD26
:1012B0002324F4FE832704FE83A7C7002328F4FC1D :1012B0003387E60023A0E700832784FE9387170087
:1012C000232204FE6F00000B032784FB832704FD09 :1012C0002324F4FEB7170080138E472D67000E000D
:1012D0003307F702832784FEB307F7002326F4FCC5 :1012D000130000006B300000832744FE9387170043
:1012E000032784FE832704FDB337F70093F7F70F36 :1012E0002322F4FE832744FE0327C4FEE3E6E7F44B
:1012F0002324F4FC832784FC93B71700A303F4FC96 :1012F000130000008320C1040324810413010105AD
:10130000834774FC138F0700B7170080938F07364D :1013000067800000130101FC232E1102232C8102AF
:101310006B200F007B70FF018327C4FC939727008D :1013100013040104232EA4FC232CB4FC232AC4FCB4
:101320000327C4FDB307F70083A607008327C4FC87 :101320002328D4FC2326E4FCB76702810327C4FDED
:1013300093972700032744FDB307F700032784FD95 :1013300023A4E71EB76702819387871E032784FDD6
:101340003387E60023A0E700832784FE93871700F6 :1013400023A2E700B76702819387871E032744FD26
:101350002324F4FEB7170080138E473667000E0073 :1013500023A4E700B76702819387871E0327C4FC95
:10136000130000006B300000832744FE93871700B2 :1013600023A6E700B76702819387871E032704FD42
:101370002322F4FE832744FE0327C4FEE3E6E7F4BA :1013700023A8E700EFE01FE72324A4FE0327C4FC13
:10138000130000008320C10403248104130101051C :10138000832784FEB357F7022326F4FE0327C4FC09
:1013900067800000130101FC232E1102232C81021F :10139000832784FEB377F702638807008327C4FEA0
:1013A00013040104232EA4FC232CB4FC232AC4FC24 :1013A000938717002326F4FEB76702819387871E71
:1013B0002328D4FC2326E4FCB76702810327C4FD5D :1013B0000327C4FE23AAE7000327C4FC832784FE77
:1013C00023A2E71EB76702819387471E032784FD88 :1013C0006362F702B76702819386871EB7170080B2
:1013D00023A2E700B76702819387471E032744FDD6 :1013D0001386C743832584FE032504FDEFF00F88A1
:1013E00023A4E700B76702819387471E0327C4FC45 :1013E0006F000002B76702819386871EB7170080DF
:1013F00023A6E700B76702819387471E032704FDF2 :1013F0001386C7438325C4FC032504FDEFF00F8645
:1014000023A8E700EFE05FDF2324A4FE0327C4FC4A :10140000EFE0DFDD2322A4FE032704FD832744FE53
:10141000832784FEB357F7022326F4FE0327C4FC78 :1014100063F8E700032544FEEFF04F936F00C00030
:10142000832784FEB377F702638807008327C4FE0F :10142000032504FDEFF08F92130000008320C10319
:10143000938717002326F4FEB76702819387471E20 :10143000032481031301010467800000130101FBF1
:101440000327C4FE23AAE7000327C4FC832784FEE6 :10144000232611042324810413040105232EA4FA66
:101450006362F702B76702819386471EB717008061 :10145000232CB4FAEFF08F9E2320A4FE832704FEF2
:101460001386C74C832584FE032504FDEFF04F80CF :1014600083A70700232EF4FC832704FE83A74700ED
:101470006F000002B76702819386471EB71700808E :1014700083A70700232CF4FC832704FE83A787009F
:101480001386C74C8325C4FC032504FDEFE05FFEF3 :10148000232AF4FC832704FE83A747012326F4FEC6
:10149000EFE01FD62322A4FE032704FD832744FE8A :101490000327C4FE8327C4FBB307F7022324F4FE0B
:1014A00063F8E700032544FEEFF08F8B6F00C00068 :1014A0008327C4FE639A0700930710002326F4FEE7
:1014B000032504FDEFF0CF8A130000008320C10351 :1014B0008327C4FB2324F4FE832704FE83A7C700ED
:1014C000032481031301010467800000130101FB61 :1014C0002328F4FC232204FE6F00000B032784FB77
:1014D000232611042324810413040105232EA4FAD6 :1014D000832704FD3307F702832784FEB307F70051
:1014E000232CB4FAEFF0CF962320A4FE832704FE2A :1014E0002326F4FC032784FE832704FDB337F7008B
:1014F00083A70700232EF4FC832704FE83A747005D :1014F00093F7F70F2324F4FC832784FC93B717009A
:1015000083A70700232CF4FC832704FE83A787000E :10150000A303F4FC834774FC138F0700B717008014
:10151000232AF4FC832704FE83A747012326F4FE35 :10151000938F47566B200F007B70FF018327C4FC1D
:101520000327C4FE8327C4FBB307F7022324F4FE7A :10152000939727000327C4FDB307F70083A607009E
:101530008327C4FE639A0700930710002326F4FE56 :101530008327C4FC93972700032744FDB307F700D4
:101540008327C4FB2324F4FE832704FE83A7C7005C :10154000032784FD3387E60223A0E700832784FE78
:101550002328F4FC232204FE6F00000B032784FBE6 :10155000938717002324F4FEB7170080138E875655
:10156000832704FD3307F702832784FEB307F700C0 :1015600067000E00130000006B300000832744FE6C
:101570002326F4FC032784FE832704FDB337F700FA :10157000938717002322F4FE832744FE0327C4FE2B
:1015800093F7F70F2324F4FC832784FC93B7170009 :10158000E3E6E7F4130000008320C1040324810490
:10159000A303F4FC834774FC138F0700B717008084 :101590001301010567800000130101FD232681026C
:1015A000938F475F6B200F007B70FF018327C4FC84 :1015A00013040103232EA4FC232604FE6F00000174
:1015B000939727000327C4FDB307F70083A607000E :1015B0008327C4FE938717002326F4FE0327C4FE67
:1015C0008327C4FC93972700032744FDB307F70044 :1015C0008327C4FDE346F7FE130000000324C10295
:1015D000032784FD3387E60223A0E700832784FEE8 :1015D0001301010367800000130101FD232611029E
:1015E000938717002324F4FEB7170080138E875FBC :1015E0002324810213040103232EA4FC232CB4FC26
:1015F00067000E00130000006B300000832744FEDC :1015F000B7670281138707208327C4FDB307F7006D
:10160000938717002322F4FE832744FE0327C4FE9A :10160000130710002380E7008327C4FD6390070CB5
:10161000E3E6E7F4130000008320C10403248104FF :10161000A30104FE232604FE6F00800A232604FE95
:101620001301010567800000130101FD23268102DB :10162000232404FE6F004003B7670281138707205D
:1016300013040103232EA4FC232604FE6F000001E3 :10163000832784FEB307F70083C70700638807008A
:101640008327C4FE938717002326F4FE0327C4FED6 :101640008327C4FE938717002326F4FE832784FE96
:101650008327C4FDE346F7FE130000000324C10204 :10165000938717002324F4FE032784FE832784FD49
:101660001301010367800000130101FD232611020D :10166000E344F7FC0327C4FE832784FD631AF704D1
:101670002324810213040103232EA4FC232CB4FC95 :10167000232204FE6F000004B7670281138707204E
:10168000B76702811387C71F8327C4FDB307F7001D :10168000832744FEB307F70023800700B797028142
:10169000130710002380E7008327C4FD6390070C25 :10169000130710002384E72C13056004EFF0DFEF3D
:1016A000A30104FE232604FE6F00800A232604FE05 :1016A000B79702812384072C832744FE9387170072
:1016B000232404FE6F004003B76702811387C71F0E :1016B0002322F4FE032744FE832784FDE34EF7FA3A
:1016C000832784FEB307F70083C7070063880700FA :1016C000834734FEE39C07F46F00400213000000E0
:1016D0008327C4FE938717002326F4FE832784FE06 :1016D000B797028183C7872C93C7170093F7F70F3B
:1016E000938717002324F4FE032784FE832784FDB9 :1016E000E39807FE13054006EFF01FEB1300000020
:1016F000E344F7FC0327C4FE832784FD631AF70441 :1016F0008320C102032481021301010367800000DB
:10170000232204FE6F000004B76702811387C71FFE :10170000130101FF23268100130401019307000048
:10171000832744FEB307F70023800700B7970281B1 :101710001308000013850700930508000324C10087
:10172000130710002382E72C13056004EFF0DFEFAE :101720001301010167800000130101FE232E8100D7
:10173000B79702812382072C832744FE93871700E3 :1017300013040102232604FE6F008004B7670281B0
:101740002322F4FE032744FE832784FDE34EF7FAA9 :101740000327C4FE1317270093870722B307F70068
:10175000834734FEE39C07F46F004002130000004F :101750001307300023A0E700B77702810327C4FEF8
:10176000B797028183C7472C93C7170093F7F70FEA :101760001317270093870722B307F70013072000FA
:10177000E39807FE13054006EFF01FEB130000008F :1017700023A0E7008327C4FE938717002326F4FEE7
:101780008320C1020324810213010103678000004A :101780000327C4FE93073000E3DAE7FA13000000F2
:10179000130101FF232681001304010193070000B8 :101790000324C1011301010267800000130101FD50
:1017A0001308000013850700930508000324C100F7 :1017A000232611022324810213040103232EA4FC07
:1017B0001301010167800000130101FE232E810047 :1017B000B707008113858711EFF08F80232604FE81
:1017C00013040102232604FE6F008004B767028120 :1017C0006F0080058327C4FE638E07008327C4FE55
:1017D0000327C4FE131727009387C721B307F70019 :1017D00093F7170063980700B70700811385C713B5
:1017E0001307300023A0E700B77702810327C4FE68 :1017E000EFE01FFE8327C4FE939727000327C4FD65
:1017F000131727009387C721B307F70013072000AB :1017F000B307F70083A7070013850700EFF00F80FA
:1018000023A0E7008327C4FE938717002326F4FE56 :10180000B707008113850714EFE09FFB8327C4FE11
:101810000327C4FE9307F00FE3DAE7FA1300000092 :10181000938717002326F4FE0327C4FE93073000A6
:101820000324C1011301010267800000130101FDBF :10182000E3D2E7FAB707008113854714EFE05FF9C9
:10183000232611022324810213040103232EA4FC76 :10183000130000008320C10203248102130101036D
:10184000B707008113858711EFE0DFF8232604FE38 :1018400067800000130101FF23261100232481007B
:101850006F0080058327C4FE638E07008327C4FEC4 :10185000130401011305B000EFE05FFA93070000E5
:1018600093F7F70063980700B70700811385C71344 :10186000138507008320C1000324810013010101B7
:10187000EFE05FF68327C4FE939727000327C4FD9C :04187000678000008D
:10188000B307F70083A7070013850700EFE05FF8B1
:10189000B707008113850714EFE0DFF38327C4FE49
:1018A000938717002326F4FE0327C4FE9307F00F47
:1018B000E3D2E7FAB707008113854714EFE09FF101
:1018C000130000008320C1020324810213010103DD
:1018D00067800000130101FF2326110023248100EB
:1018E00013040101EFF05FEDB76702811385C72193
:1018F000EFF0DFF393070000138507008320C1009A
:0C19000003248100130101016780000036
:02000004810079 :02000004810079
:10000000300000003100000032000000330000002A :10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A :10001000340000003500000036000000370000000A
@@ -440,5 +431,6 @@
:10023800E8000081EC000081F0000081F4000081FA :10023800E8000081EC000081F0000081F4000081FA
:10024800F8000081FC0000810001008104010081A8 :10024800F8000081FC0000810001008104010081A8
:10025800080100810C010081100100811401008156 :10025800080100810C010081100100811401008156
:04026800060000008C
:040000058000000077 :040000058000000077
:00000001FF :00000001FF

View File

@@ -5,10 +5,12 @@ unsigned x[1024] = {0};
unsigned y[1024] = {0}; unsigned y[1024] = {0};
unsigned z[1024] = {0}; unsigned z[1024] = {0};
#define MAT_DIM 16 unsigned temp = 6;
#define NUM_COLS 16 #define MAT_DIM 2
#define NUM_ROWS 16
#define NUM_COLS 2
#define NUM_ROWS 2
double sc_time_stamp() double sc_time_stamp()
{ {
@@ -39,16 +41,19 @@ void print_matrix(unsigned * z)
int main() int main()
{ {
// vx_print_hex(11); // unsigned f = temp;
initialize_mats(); vx_print_hex(11);
// vx_printc(0, 'a');
// initialize_mats();
// matrix multiplication // matrix multiplication
// vx_sq_mat_mult(x, y, z, MAT_DIM); // vx_sq_mat_mult(x, y, z, MAT_DIM);
// vx_print_str("\n\nMatrix multiplication\n"); // vx_print_str("\n\nMatrix multiplication\n");
// print_matrix(z); // print_matrix(z);
print_matrix(x); // print_matrix(x);
// // matrix addition // // matrix addition
// vx_mat_add(x, y, z, NUM_ROWS, NUM_COLS); // vx_mat_add(x, y, z, NUM_ROWS, NUM_COLS);

View File

@@ -6,15 +6,33 @@
.type _start, @function .type _start, @function
.global _start .global _start
_start: _start:
la a0, 0x020000 # la a0, 0x10000000
li a1, 7 # li a1, 7
sw a1, 4(a0) # sw a1, 0(a0)
nop
nop # la a0, 0x10000048
nop # li a1, 3
lw a2, 4(a0) # sw a1, 0(a0)
li a0, 0
.word 0x0005006b # tmc a0 # la a0, 0x80000000
# li a1, 9
# sw a1, 0(a0)
# la a0, 0x80000008
# li a1, 8
# sw a1, 0(a0)
# la a0, 0x10000000
# lw a2, 0(a0)
# la a0, 0x10000048
# lw a3, 0(a0)
# # la a0, 0x00000000 # I=0,OF=0, B=0
# # li a1, 1
# # sw a1, 0(a0)
# # lw a2, 0(a0)
# li a0, 0
# .word 0x0005006b # tmc a0
########################################
# li a0, 4 # li a0, 4
# la a1, SPAWN # la a1, SPAWN
# .word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN) # .word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN)
@@ -36,7 +54,7 @@ _start:
########################## ##########################
# li a0, 4 # li a0, 4
# .word 0x0005006b # tmc a0 # .word 0x0005006b # tmc a0
# csrr a1, 0x20 # read thread IDs #
# # csrr a2, 0x21 # read warp IDs # # csrr a2, 0x21 # read warp IDs
# slti a0, a1, 2 # slti a0, a1, 2
# .word 0x0005206b # split a0 # .word 0x0005206b # split a0
@@ -49,17 +67,11 @@ _start:
# .word 0x0000306b #join # .word 0x0000306b #join
# ecall # ecall
############################ ############################
# li a0, 8 # Num Warps lui sp, 0x7ffff
# csrw 0x20, a0 # Setting the number of available warps # jal vx_before_main
# li a0, 4 # Num Threads jal main
# csrw 0x21, a0 # Setting the number of available threads li a0, 0
# csrw mhartid,zero .word 0x0005006b # tmc a0
# csrw misa,zero
# lui sp, 0x7ffff
# # jal vx_before_main
# jal main
# li a0, 0
# .word 0x0005006b # tmc a0
# Hi: # Hi:
# li a2, 7 # li a2, 7

View File

@@ -3,21 +3,22 @@
void vx_print_hex(unsigned f) void vx_print_hex(unsigned f)
{ {
if (f < 16) vx_print_str(hextoa[f]);
{ // if (f < 16)
vx_print_str(hextoa[f]); // {
return; // vx_print_str(hextoa[f]);
} // return;
int temp; // }
int sf = 32; // int temp;
bool start = false; // int sf = 32;
do // bool start = false;
{ // do
temp = (f >> (sf - 4)) & 0xf; // {
if (temp != 0) start = true; // temp = (f >> (sf - 4)) & 0xf;
if (start) vx_print_str(hextoa[temp]); // if (temp != 0) start = true;
sf -= 4; // if (start) vx_print_str(hextoa[temp]);
} while(sf > 0); // sf -= 4;
// } while(sf > 0);
} }

View File

@@ -11,11 +11,11 @@ EXE=--exe ./simulate/test_bench.cpp
COMP=--compiler gcc COMP=--compiler gcc
# WNO=-Wno-UNDRIVEN --Wno-PINMISSING -Wno-STMTDLY -Wno-WIDTH -Wno-UNSIGNED WNO=-Wno-UNDRIVEN --Wno-PINMISSING -Wno-STMTDLY -Wno-WIDTH -Wno-UNSIGNED -Wno-UNOPTFLAT
WNO= # WNO=
LIGHTW= # LIGHTW=
# LIGHTW=-Wno-UNOPTFLAT LIGHTW=-Wno-UNOPTFLAT
# LIB=-LDFLAGS '-L/usr/local/systemc/' # LIB=-LDFLAGS '-L/usr/local/systemc/'
LIB= LIB=

View File

@@ -31,6 +31,7 @@ assign VX_writeback_inter.wb_warp_num = VX_writeback_temp.wb_warp_num;
VX_mw_wb_inter VX_mw_wb(); VX_mw_wb_inter VX_mw_wb();
wire no_slot_mem;
VX_mem_req_inter VX_exe_mem_req(); VX_mem_req_inter VX_exe_mem_req();
@@ -78,7 +79,8 @@ VX_lsu load_store_unit(
.VX_mem_wb (VX_mem_wb), .VX_mem_wb (VX_mem_wb),
.VX_dcache_rsp(VX_dcache_rsp), .VX_dcache_rsp(VX_dcache_rsp),
.VX_dcache_req(VX_dcache_req), .VX_dcache_req(VX_dcache_req),
.out_delay (out_mem_delay) .out_delay (out_mem_delay),
.no_slot_mem (no_slot_mem)
); );
@@ -106,7 +108,8 @@ VX_writeback VX_wb(
.VX_inst_exec_wb (VX_inst_exec_wb), .VX_inst_exec_wb (VX_inst_exec_wb),
.VX_csr_wb (VX_csr_wb), .VX_csr_wb (VX_csr_wb),
.VX_writeback_inter(VX_writeback_temp) .VX_writeback_inter(VX_writeback_temp),
.no_slot_mem (no_slot_mem)
); );
endmodule endmodule

View File

@@ -22,8 +22,8 @@ module VX_dmem_controller (
wire[`NT_M1:0][31:0] cache_driver_in_address = VX_dcache_req.out_cache_driver_in_address; wire[`NT_M1:0][31:0] cache_driver_in_address = VX_dcache_req.out_cache_driver_in_address;
wire[2:0] cache_driver_in_mem_read = VX_dcache_req.out_cache_driver_in_mem_read; wire[2:0] cache_driver_in_mem_read = !(|cache_driver_in_valid) ? `NO_MEM_READ : VX_dcache_req.out_cache_driver_in_mem_read;
wire[2:0] cache_driver_in_mem_write = VX_dcache_req.out_cache_driver_in_mem_write; wire[2:0] cache_driver_in_mem_write = !(|cache_driver_in_valid) ? `NO_MEM_WRITE : VX_dcache_req.out_cache_driver_in_mem_write;
wire[`NT_M1:0][31:0] cache_driver_in_data = VX_dcache_req.out_cache_driver_in_data; wire[`NT_M1:0][31:0] cache_driver_in_data = VX_dcache_req.out_cache_driver_in_data;
@@ -34,6 +34,9 @@ module VX_dmem_controller (
wire cache_delay; wire cache_delay;
wire valid_read_cache = !cache_delay && cache_driver_in_valid[0];
VX_shared_memory #(.NB(7), .BITS_PER_BANK(3)) shared_memory ( VX_shared_memory #(.NB(7), .BITS_PER_BANK(3)) shared_memory (
.clk (clk), .clk (clk),
.in_valid (sm_driver_in_valid), .in_valid (sm_driver_in_valid),

View File

@@ -5,6 +5,7 @@
module VX_lsu ( module VX_lsu (
input wire clk, input wire clk,
input wire reset, input wire reset,
input wire no_slot_mem,
VX_lsu_req_inter VX_lsu_req, VX_lsu_req_inter VX_lsu_req,
// Write back to GPR // Write back to GPR
@@ -15,9 +16,9 @@ module VX_lsu (
output wire out_delay output wire out_delay
); );
VX_inst_mem_wb_inter VX_mem_wb_temp(); // VX_inst_mem_wb_inter VX_mem_wb_temp();
assign out_delay = VX_dcache_rsp.delay; assign out_delay = VX_dcache_rsp.delay || no_slot_mem;
// Generate Addresses // Generate Addresses
@@ -36,30 +37,30 @@ module VX_lsu (
assign VX_dcache_req.out_cache_driver_in_data[index] = VX_lsu_req.store_data[index]; assign VX_dcache_req.out_cache_driver_in_data[index] = VX_lsu_req.store_data[index];
assign VX_dcache_req.out_cache_driver_in_valid[index] = (VX_lsu_req.valid[index]); assign VX_dcache_req.out_cache_driver_in_valid[index] = (VX_lsu_req.valid[index]);
assign VX_mem_wb_temp.loaded_data[index] = VX_dcache_rsp.in_cache_driver_out_data[index]; assign VX_mem_wb.loaded_data[index] = VX_dcache_rsp.in_cache_driver_out_data[index];
end end
assign VX_dcache_req.out_cache_driver_in_mem_read = VX_lsu_req.mem_read; assign VX_dcache_req.out_cache_driver_in_mem_read = VX_lsu_req.mem_read;
assign VX_dcache_req.out_cache_driver_in_mem_write = VX_lsu_req.mem_write; assign VX_dcache_req.out_cache_driver_in_mem_write = VX_lsu_req.mem_write;
assign VX_mem_wb_temp.rd = VX_lsu_req.rd; assign VX_mem_wb.rd = VX_lsu_req.rd;
assign VX_mem_wb_temp.wb = VX_lsu_req.wb; assign VX_mem_wb.wb = VX_lsu_req.wb & {!VX_dcache_rsp.delay, !VX_dcache_rsp.delay};
assign VX_mem_wb_temp.wb_valid = VX_lsu_req.valid; assign VX_mem_wb.wb_valid = VX_lsu_req.valid;
assign VX_mem_wb_temp.wb_warp_num = VX_lsu_req.warp_num; assign VX_mem_wb.wb_warp_num = VX_lsu_req.warp_num;
wire zero_temp = 0; // wire zero_temp = 0;
VX_generic_register #(.N(142)) register_wb_data // VX_generic_register #(.N(142)) register_wb_data
( // (
.clk (clk), // .clk (clk),
.reset(reset), // .reset(reset),
.stall(zero_temp), // .stall(zero_temp),
.flush(out_delay), // .flush(out_delay),
.in ({VX_mem_wb_temp.loaded_data, VX_mem_wb_temp.rd, VX_mem_wb_temp.wb, VX_mem_wb_temp.wb_valid, VX_mem_wb_temp.wb_warp_num}), // .in ({VX_mem_wb_temp.loaded_data, VX_mem_wb_temp.rd, VX_mem_wb_temp.wb, VX_mem_wb_temp.wb_valid, VX_mem_wb_temp.wb_warp_num}),
.out ({VX_mem_wb.loaded_data , VX_mem_wb.rd , VX_mem_wb.wb , VX_mem_wb.wb_valid , VX_mem_wb.wb_warp_num }) // .out ({VX_mem_wb.loaded_data , VX_mem_wb.rd , VX_mem_wb.wb , VX_mem_wb.wb_valid , VX_mem_wb.wb_warp_num })
); // );
endmodule // Memory endmodule // Memory

View File

@@ -13,13 +13,16 @@ module VX_priority_encoder_w_mask
always @(valids) begin always @(valids) begin
index = 0; index = 0;
found = 0; found = 0;
mask = 0; // mask = 0;
for (i = 0; i < N; i=i+1) begin for (i = 0; i < N; i=i+1) begin
if (valids[i]) begin if (valids[i]) begin
index = i[$clog2(N)-1:0]; index = i[$clog2(N)-1:0];
found = 1; found = 1;
mask[i[$clog2(N)-1:0]] = 1 << i; // mask[index] = (1 << i);
// $display("%h",(1 << i));
end end
end end
end end
assign mask = found ? (1 << index) : 0;
endmodule endmodule

View File

@@ -11,10 +11,12 @@ module VX_writeback (
VX_csr_wb_inter VX_csr_wb, VX_csr_wb_inter VX_csr_wb,
// Actual WB to GPR // Actual WB to GPR
VX_wb_inter VX_writeback_inter VX_wb_inter VX_writeback_inter,
output wire no_slot_mem
); );
assign no_slot_mem = mem_wb && (exec_wb || csr_wb);
wire exec_wb = (VX_inst_exec_wb.wb != 0) && (|VX_inst_exec_wb.wb_valid); wire exec_wb = (VX_inst_exec_wb.wb != 0) && (|VX_inst_exec_wb.wb_valid);
wire mem_wb = (VX_mem_wb.wb != 0) && (|VX_mem_wb.wb_valid); wire mem_wb = (VX_mem_wb.wb != 0) && (|VX_mem_wb.wb_valid);
@@ -22,29 +24,29 @@ module VX_writeback (
assign VX_writeback_inter.write_data = exec_wb ? VX_inst_exec_wb.alu_result : assign VX_writeback_inter.write_data = exec_wb ? VX_inst_exec_wb.alu_result :
mem_wb ? VX_mem_wb.loaded_data :
csr_wb ? VX_csr_wb.csr_result : csr_wb ? VX_csr_wb.csr_result :
mem_wb ? VX_mem_wb.loaded_data :
0; 0;
assign VX_writeback_inter.wb_valid = exec_wb ? VX_inst_exec_wb.wb_valid : assign VX_writeback_inter.wb_valid = exec_wb ? VX_inst_exec_wb.wb_valid :
mem_wb ? VX_mem_wb.wb_valid :
csr_wb ? VX_csr_wb.valid : csr_wb ? VX_csr_wb.valid :
0; mem_wb ? VX_mem_wb.wb_valid :
0;
assign VX_writeback_inter.rd = exec_wb ? VX_inst_exec_wb.rd : assign VX_writeback_inter.rd = exec_wb ? VX_inst_exec_wb.rd :
mem_wb ? VX_mem_wb.rd :
csr_wb ? VX_csr_wb.rd : csr_wb ? VX_csr_wb.rd :
mem_wb ? VX_mem_wb.rd :
0; 0;
assign VX_writeback_inter.wb = exec_wb ? VX_inst_exec_wb.wb : assign VX_writeback_inter.wb = exec_wb ? VX_inst_exec_wb.wb :
mem_wb ? VX_mem_wb.wb :
csr_wb ? VX_csr_wb.wb : csr_wb ? VX_csr_wb.wb :
mem_wb ? VX_mem_wb.wb :
0; 0;
assign VX_writeback_inter.wb_warp_num = exec_wb ? VX_inst_exec_wb.wb_warp_num : assign VX_writeback_inter.wb_warp_num = exec_wb ? VX_inst_exec_wb.wb_warp_num :
mem_wb ? VX_mem_wb.wb_warp_num :
csr_wb ? VX_csr_wb.warp_num : csr_wb ? VX_csr_wb.warp_num :
mem_wb ? VX_mem_wb.wb_warp_num :
0; 0;

View File

@@ -7,6 +7,9 @@ module Vortex(
input wire reset, input wire reset,
input wire[31:0] icache_response_instruction, input wire[31:0] icache_response_instruction,
output wire[31:0] icache_request_pc_address, output wire[31:0] icache_request_pc_address,
// IO
output wire io_valid,
output wire[31:0] io_data,
// Req // Req
output reg [31:0] o_m_read_addr, output reg [31:0] o_m_read_addr,
output reg [31:0] o_m_evict_addr, output reg [31:0] o_m_evict_addr,
@@ -20,11 +23,20 @@ module Vortex(
output wire out_ebreak output wire out_ebreak
); );
// Dcache Interface wire memory_delay;
wire gpr_stage_delay;
wire schedule_delay;
// Dcache Interface
VX_dcache_response_inter VX_dcache_rsp(); VX_dcache_response_inter VX_dcache_rsp();
VX_dcache_request_inter VX_dcache_req(); VX_dcache_request_inter VX_dcache_req();
wire temp_io_valid = (!memory_delay) && (|VX_dcache_req.out_cache_driver_in_valid) && (VX_dcache_req.out_cache_driver_in_mem_write != `NO_MEM_WRITE) && (VX_dcache_req.out_cache_driver_in_address[0] == 32'h00010000);
wire[31:0] temp_io_data = VX_dcache_req.out_cache_driver_in_data[0];
assign io_valid = temp_io_valid;
assign io_data = temp_io_data;
VX_dram_req_rsp_inter VX_dram_req_rsp(); VX_dram_req_rsp_inter VX_dram_req_rsp();
@@ -74,11 +86,6 @@ VX_jal_response_inter VX_jal_rsp(); // Jump resolution to Fetch
VX_warp_ctl_inter VX_warp_ctl(); VX_warp_ctl_inter VX_warp_ctl();
wire memory_delay;
wire gpr_stage_delay;
wire schedule_delay;
VX_front_end vx_front_end( VX_front_end vx_front_end(
.clk (clk), .clk (clk),
.reset (reset), .reset (reset),

View File

@@ -90,10 +90,10 @@ module VX_Cache_Bank
assign data_evicted = data_use; assign data_evicted = data_use;
assign eviction_wb = miss && (dirty_use != 1'b0); assign eviction_wb = (dirty_use != 1'b0) && valid_use;
assign eviction_tag = tag_use; assign eviction_tag = tag_use;
assign access = (state == CACHE_IDLE) && valid_in; assign access = (state == CACHE_IDLE) && valid_in;
assign write_from_mem = (state == RECIV_MEM_RSP) && valid_in; assign write_from_mem = (state == RECIV_MEM_RSP);
assign readdata = (access) ? data_use[block_offset] : 32'b0; // Fix with actual data assign readdata = (access) ? data_use[block_offset] : 32'b0; // Fix with actual data
assign hit = (access && (tag_use == o_tag) && valid_use); assign hit = (access && (tag_use == o_tag) && valid_use);
//assign eviction_addr = {eviction_tag, actual_index, block_offset, 5'b0}; // Fix with actual data //assign eviction_addr = {eviction_tag, actual_index, block_offset, 5'b0}; // Fix with actual data
@@ -104,9 +104,8 @@ module VX_Cache_Bank
wire[`NUM_WORDS_PER_BLOCK-1:0][31:0] data_write; wire[`NUM_WORDS_PER_BLOCK-1:0][31:0] data_write;
genvar g; genvar g;
for (g = 0; g < `NUM_WORDS_PER_BLOCK; g = g + 1) begin for (g = 0; g < `NUM_WORDS_PER_BLOCK; g = g + 1) begin
wire correct_block = (block_offset == g); wire normal_write = (read_or_write && ((access && (block_offset == g))) && !miss);
assign we[g] = (read_or_write && ((access && correct_block) || (write_from_mem && !correct_block)) ) ? 1'b1 : 1'b0; assign we[g] = (normal_write || (write_from_mem)) ? 1'b1 : 1'b0;
//assign we[g] = (!(write_from_mem && correct_block) && ((write_from_mem || correct_block) && read_or_write == 1'b1)) ? 1 : 0; // added the "not"
assign data_write[g] = write_from_mem ? fetched_writedata[g] : writedata; assign data_write[g] = write_from_mem ? fetched_writedata[g] : writedata;
end end

View File

@@ -7,17 +7,16 @@ module VX_cache_bank_valid
( (
input wire [`NT_M1:0] i_p_valid, input wire [`NT_M1:0] i_p_valid,
input wire [`NT_M1:0][31:0] i_p_addr, input wire [`NT_M1:0][31:0] i_p_addr,
output wire [NUMBER_BANKS - 1 : 0][`NT_M1:0] thread_track_banks output reg [NUMBER_BANKS - 1 : 0][`NT_M1:0] thread_track_banks
); );
genvar t_id; genvar t_id;
for (t_id = 0; t_id <= `NT_M1; t_id = t_id + 1) always @(*) begin
begin thread_track_banks = 0;
wire[2:0] threads_bank = i_p_addr[t_id][4:2]; for (t_id = 0; t_id <= `NT_M1; t_id = t_id + 1)
assign thread_track_banks[threads_bank][t_id] = i_p_valid[t_id]; begin
end thread_track_banks[i_p_addr[t_id][4:2]][t_id] = i_p_valid[t_id];
end
end
endmodule endmodule

View File

@@ -64,9 +64,10 @@ module VX_d_cache(clk,
// Buffer for final data // Buffer for final data
reg [`NT_M1:0][31:0] final_data_read; reg [`NT_M1:0][31:0] final_data_read;
wire[`NT_M1:0][31:0] new_final_data_read; reg [`NT_M1:0][31:0] new_final_data_read;
wire[`NT_M1:0][31:0] new_final_data_read_Qual;
assign o_p_readdata = final_data_read; assign o_p_readdata = new_final_data_read_Qual;
@@ -95,6 +96,8 @@ module VX_d_cache(clk,
reg[31:0] miss_addr; reg[31:0] miss_addr;
reg[31:0] evict_addr; reg[31:0] evict_addr;
wire curr_processor_request_valid = (|i_p_valid);
assign use_valid = (stored_valid == 0) ? i_p_valid : stored_valid; assign use_valid = (stored_valid == 0) ? i_p_valid : stored_valid;
@@ -121,10 +124,15 @@ module VX_d_cache(clk,
// end // end
// end // end
reg[`NT_M1:0] debug_hit_per_bank_mask[NUMBER_BANKS-1:0];
genvar bid; genvar bid;
for (bid = 0; bid < NUMBER_BANKS; bid=bid+1) for (bid = 0; bid < NUMBER_BANKS; bid=bid+1)
begin begin
wire[`NT_M1:0] use_threads_track_banks = thread_track_banks[bid]; wire[`NT_M1:0] use_threads_track_banks = thread_track_banks[bid];
wire[$clog2(`NT)-1:0] use_thread_index = index_per_bank[bid];
wire use_write_final_data = hit_per_bank[bid];
wire[31:0] use_data_final_data = readdata_per_bank[bid];
VX_priority_encoder_w_mask #(.N(`NT)) choose_thread( VX_priority_encoder_w_mask #(.N(`NT)) choose_thread(
.valids(use_threads_track_banks), .valids(use_threads_track_banks),
.mask (use_mask_per_bank[bid]), .mask (use_mask_per_bank[bid]),
@@ -132,17 +140,20 @@ module VX_d_cache(clk,
.found (valid_per_bank[bid]) .found (valid_per_bank[bid])
); );
assign new_final_data_read[index_per_bank[bid]] = hit_per_bank[bid] ? readdata_per_bank[bid] : 0; always @(*) begin
if (use_write_final_data) new_final_data_read[use_thread_index] = use_data_final_data;
assign threads_serviced_per_bank[bid] = use_mask_per_bank[bid] & {`NT{hit_per_bank[bid]}}; end
// assign new_final_data_read[use_thread_index] = use_write_final_data ? use_data_final_data : 0;
assign debug_hit_per_bank_mask[bid] = {`NT{hit_per_bank[bid]}};
assign threads_serviced_per_bank[bid] = use_mask_per_bank[bid] & debug_hit_per_bank_mask[bid];
end end
// genvar tid;
assign threads_serviced_Qual = threads_serviced_per_bank[0] | threads_serviced_per_bank[1] | threads_serviced_per_bank[2] | threads_serviced_per_bank[3] | threads_serviced_per_bank[4] | threads_serviced_per_bank[5] | threads_serviced_per_bank[6] | threads_serviced_per_bank[7];
// for(tid = 0; tid )
wire[NUMBER_BANKS - 1 : 0] detect_bank_miss; wire[NUMBER_BANKS - 1 : 0] detect_bank_miss;
assign threads_serviced_Qual = threads_serviced_per_bank[0] | threads_serviced_per_bank[1] |
threads_serviced_per_bank[2] | threads_serviced_per_bank[3] |
threads_serviced_per_bank[4] | threads_serviced_per_bank[5] |
threads_serviced_per_bank[6] | threads_serviced_per_bank[7];
// genvar bbid; // genvar bbid;
// always @(*) begin // always @(*) begin
// for (bbid = 0; bbid < NUMBER_BANKS; bbid=bbid+1) // for (bbid = 0; bbid < NUMBER_BANKS; bbid=bbid+1)
@@ -152,6 +163,14 @@ module VX_d_cache(clk,
// end // end
genvar tid;
for (tid = 0; tid < `NT; tid =tid+1)
begin
assign new_final_data_read_Qual[tid] = threads_serviced_Qual[tid] ? new_final_data_read[tid] : final_data_read[tid];
end
assign detect_bank_miss = (valid_per_bank & ~hit_per_bank); assign detect_bank_miss = (valid_per_bank & ~hit_per_bank);
wire delay; wire delay;
@@ -193,10 +212,7 @@ module VX_d_cache(clk,
evict_addr <= eviction_addr_per_bank[miss_bank_index]; evict_addr <= eviction_addr_per_bank[miss_bank_index];
end end
for (cur_t = 0; cur_t < `NT; cur_t=cur_t+1) final_data_read <= new_final_data_read_Qual;
begin
if (threads_serviced_Qual[cur_t]) final_data_read[cur_t] <= new_final_data_read[cur_t];
end
end end
@@ -245,8 +261,8 @@ module VX_d_cache(clk,
// Mem Rsp // Mem Rsp
// Req to mem: // Req to mem:
assign o_m_evict_addr = evict_addr; assign o_m_evict_addr = evict_addr & 32'hffffffc0;
assign o_m_read_addr = miss_addr; assign o_m_read_addr = miss_addr & 32'hffffffc0;
assign o_m_valid = (state == SEND_MEM_REQ); assign o_m_valid = (state == SEND_MEM_REQ);
assign o_m_read_or_write = (state == SEND_MEM_REQ) && (|eviction_wb); assign o_m_read_or_write = (state == SEND_MEM_REQ) && (|eviction_wb);
//end //end

View File

@@ -0,0 +1,7 @@
# Dynamic Instructions: 4139
# of total cycles: 4156
# of forwarding stalls: 0
# of branch stalls: 0
# CPI: 1.00411
# time to simulate: 6.95312e-310 milliseconds
# GRADE: Failed on test: 4294967295

View File

@@ -5,7 +5,7 @@
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
Verilated::debug(1); // Verilated::debug(1);
Verilated::commandArgs(argc, argv); Verilated::commandArgs(argc, argv);

View File

@@ -39,6 +39,7 @@ class Vortex
void print_stats(bool = true); void print_stats(bool = true);
bool ibus_driver(); bool ibus_driver();
bool dbus_driver(); bool dbus_driver();
void io_handler();
RAM ram; RAM ram;
@@ -188,77 +189,115 @@ bool Vortex::ibus_driver()
} }
void Vortex::io_handler()
{
if (vortex->io_valid)
{
uint32_t data_write = (uint32_t) vortex->io_data;
char c = (char) data_write;
std::cerr << c;
}
}
bool Vortex::dbus_driver() bool Vortex::dbus_driver()
{ {
// printf("****************************\n");
vortex->i_m_ready = 0;
for (int i = 0; i < CACHE_NUM_BANKS; i++)
{
for (int j = 0; j < CACHE_WORDS_PER_BLOCK; j++)
{
vortex->i_m_readdata[i][j] = 0;
}
}
if (this->refill) if (this->refill)
{ {
this->refill = false; this->refill = false;
unsigned unordered_mem[32];
int num_iter = 0;
for (int i = 0; i < CACHE_WORDS_PER_BLOCK; i++)
{
for (int j = 0; j < (CACHE_NUM_BANKS*8); j+=8)
{
unsigned addr = this->refill_addr + (4*num_iter);
unsigned data_read;
ram.getWord(addr, &data_read);
unordered_mem[i+j] = data_read;
num_iter++;
}
}
vortex->i_m_ready = 1; vortex->i_m_ready = 1;
for (int i = 0; i < CACHE_NUM_BANKS; i++) for (int curr_e = 0; curr_e < (CACHE_NUM_BANKS*CACHE_WORDS_PER_BLOCK); curr_e++)
{ {
for (int j = 0; j < CACHE_WORDS_PER_BLOCK; j++) unsigned new_addr = this->refill_addr + (4*curr_e);
{
vortex->i_m_readdata[i][j] = unordered_mem[(i*CACHE_WORDS_PER_BLOCK)+j];
unsigned addr_without_byte = new_addr >> 2;
unsigned bank_num = addr_without_byte & 0x7;
unsigned addr_wihtout_bank = addr_without_byte >> 3;
unsigned offset_num = addr_wihtout_bank & 0x3;
unsigned value;
ram.getWord(new_addr, &value);
// printf("-------- (%x) i_m_readdata[%d][%d] (%d) = %d\n", new_addr, bank_num, offset_num, curr_e, value);
vortex->i_m_readdata[bank_num][offset_num] = value;
}
} }
} }
else else
{ {
if (vortex->o_m_valid) if (vortex->o_m_valid)
{ {
// printf("Valid o_m_valid\n");
if (vortex->o_m_read_or_write) if (vortex->o_m_read_or_write)
{ {
unsigned ordered_mem[32]; // printf("Valid write\n");
// Create unordered mem for (int curr_e = 0; curr_e < (CACHE_NUM_BANKS*CACHE_WORDS_PER_BLOCK); curr_e++)
unsigned unordered_mem[32];
for (int i = 0; i < CACHE_NUM_BANKS; i++)
{ {
for (int j = 0; j < CACHE_WORDS_PER_BLOCK; j++) unsigned new_addr = vortex->o_m_evict_addr + (4*curr_e);
{
unordered_mem[(i*CACHE_WORDS_PER_BLOCK)+j] = vortex->o_m_writedata[i][j];
} unsigned addr_without_byte = new_addr >> 2;
unsigned bank_num = addr_without_byte & 0x7;
unsigned addr_wihtout_bank = addr_without_byte >> 3;
unsigned offset_num = addr_wihtout_bank & 0x3;
unsigned new_value = vortex->o_m_writedata[bank_num][offset_num];
ram.writeWord( new_addr, &new_value);
// printf("+++++++ (%x) writeback[%d][%d] (%d) = %d\n", new_addr, bank_num, offset_num, curr_e, new_value);
// printf("+++++++ (%x) i_m_readdata[%d][%d] (%d) = %d\n", new_addr, bank_num, offset_num, curr_e, value);
} }
// Order the memory // unsigned ordered_mem[32];
int num_iter = 0;
for (int i = 0; i < CACHE_NUM_BANKS; i++)
{
for (int j = 0; j < (CACHE_NUM_BANKS*CACHE_WORDS_PER_BLOCK); j+=CACHE_WORDS_PER_BLOCK)
{
printf("i: %d, j: %d, num_iter: %d\n", i, j, num_iter);
ordered_mem[i+j] = unordered_mem[num_iter];
num_iter++;
}
}
// Save the memory // // Create unordered mem
for (int i = 0; i < (CACHE_WORDS_PER_BLOCK * CACHE_NUM_BANKS); i++) // unsigned unordered_mem[32];
{ // for (int i = 0; i < CACHE_NUM_BANKS; i++)
unsigned addr = (vortex->o_m_evict_addr) + (4*i); // {
unsigned * data_addr = ordered_mem + i; // for (int j = 0; j < CACHE_WORDS_PER_BLOCK; j++)
ram.writeWord( addr, data_addr); // {
} // unordered_mem[(i*CACHE_WORDS_PER_BLOCK)+j] = vortex->o_m_writedata[i][j];
// }
// }
// // Order the memory
// int num_iter = 0;
// for (int i = 0; i < CACHE_NUM_BANKS; i++)
// {
// for (int j = 0; j < (CACHE_NUM_BANKS*CACHE_WORDS_PER_BLOCK); j+=CACHE_WORDS_PER_BLOCK)
// {
// printf("i: %d, j: %d, num_iter: %d\n", i, j, num_iter);
// ordered_mem[i+j] = unordered_mem[num_iter];
// num_iter++;
// }
// }
// // Save the memory
// for (int i = 0; i < (CACHE_WORDS_PER_BLOCK * CACHE_NUM_BANKS); i++)
// {
// unsigned addr = (vortex->o_m_evict_addr) + (4*i);
// unsigned * data_addr = ordered_mem + i;
// ram.writeWord( addr, data_addr);
// }
} }
@@ -268,122 +307,6 @@ bool Vortex::dbus_driver()
} }
} }
// uint32_t data_read;
// uint32_t data_write;
// uint32_t addr;
// // std::cout << "DBUS DRIVER\n" << std::endl;
// ////////////////////// DBUS //////////////////////
// bool did = false;
// for (unsigned curr_th = 0; curr_th < NT; curr_th++)
// {
// if ((vortex->out_cache_driver_in_mem_write != NO_MEM_WRITE) && vortex->out_cache_driver_in_valid[curr_th])
// {
// did = true;
// data_write = (uint32_t) vortex->out_cache_driver_in_data[curr_th];
// addr = (uint32_t) vortex->out_cache_driver_in_address[curr_th];
// if (addr == 0x00010000)
// {
// std::cerr << (char) data_write;
// }
// // if ((addr >= 0x810002cc) && (addr < 0x810002d0))
// // {
// // int index = (addr - 0x810002cc) / 4;
// // // std::cerr << GREEN << "1done[" << index << "] = " << data_write << DEFAULT << "\n";
// // }
// // if ((addr >= 0x810059f4) && (addr < 0x810059f4))
// // {
// // int index = (addr - 0x810059f4) / 4;
// // // std::cerr << RED << "2done[" << index << "] = " << data_write << DEFAULT << "\n";
// // }
// if (vortex->out_cache_driver_in_mem_write == SB_MEM_WRITE)
// {
// data_write = ( data_write) & 0xFF;
// ram.writeByte( addr, &data_write);
// } else if (vortex->out_cache_driver_in_mem_write == SH_MEM_WRITE)
// {
// data_write = ( data_write) & 0xFFFF;
// ram.writeHalf( addr, &data_write);
// } else if (vortex->out_cache_driver_in_mem_write == SW_MEM_WRITE)
// {
// // printf("STORING %x in %x \n", data_write, addr);
// data_write = data_write;
// ram.writeWord( addr, &data_write);
// }
// }
// }
// // printf("----\n");
// for (unsigned curr_th = 0; curr_th < NT; curr_th++)
// {
// if ((vortex->out_cache_driver_in_mem_read != NO_MEM_READ) && vortex->out_cache_driver_in_valid[curr_th])
// {
// did = true;
// addr = (uint32_t) vortex->out_cache_driver_in_address[curr_th];
// ram.getWord(addr, &data_read);
// if (vortex->out_cache_driver_in_mem_read == LB_MEM_READ)
// {
// vortex->in_cache_driver_out_data[curr_th] = (data_read & 0x80) ? (data_read | 0xFFFFFF00) : (data_read & 0xFF);
// } else if (vortex->out_cache_driver_in_mem_read == LH_MEM_READ)
// {
// vortex->in_cache_driver_out_data[curr_th] = (data_read & 0x8000) ? (data_read | 0xFFFF0000) : (data_read & 0xFFFF);
// } else if (vortex->out_cache_driver_in_mem_read == LW_MEM_READ)
// {
// // printf("Reading mem - Addr: %x = %x\n", addr, data_read);
// // std::cout << "READING - Addr: " << std::hex << addr << " = " << data_read << "\n";
// // std::cout << std::dec;
// vortex->in_cache_driver_out_data[curr_th] = data_read;
// } else if (vortex->out_cache_driver_in_mem_read == LBU_MEM_READ)
// {
// vortex->in_cache_driver_out_data[curr_th] = (data_read & 0xFF);
// } else if (vortex->out_cache_driver_in_mem_read == LHU_MEM_READ)
// {
// vortex->in_cache_driver_out_data[curr_th] = (data_read & 0xFFFF);
// }
// else
// {
// vortex->in_cache_driver_out_data[curr_th] = 0xbabebabe;
// }
// }
// else
// {
// vortex->in_cache_driver_out_data[curr_th] = 0xbabebabe;
// }
// }
// if (did && (NW > 1))
// {
// if (NW < NT)
// {
// this->stats_total_cycles += NT % (NW -1);
// }
// }
// printf("******\n");
return false; return false;
} }
@@ -465,9 +388,11 @@ bool Vortex::simulate(std::string file_to_simulate)
// unsigned cycles; // unsigned cycles;
counter = 0; counter = 0;
this->stats_total_cycles = 12; this->stats_total_cycles = 12;
while (this->stop && ((counter < 2))) while (this->stop && ((counter < 5)))
// while (this->stats_total_cycles < 10) // while (this->stats_total_cycles < 10)
{ {
// printf("-------------------------\n");
// std::cout << "Counter: " << counter << "\n"; // std::cout << "Counter: " << counter << "\n";
// if ((this->stats_total_cycles) % 5000 == 0) std::cout << "************* Cycle: " << (this->stats_total_cycles) << "\n"; // if ((this->stats_total_cycles) % 5000 == 0) std::cout << "************* Cycle: " << (this->stats_total_cycles) << "\n";
// dstop = !dbus_driver(); // dstop = !dbus_driver();
@@ -478,6 +403,7 @@ bool Vortex::simulate(std::string file_to_simulate)
vortex->eval(); vortex->eval();
istop = ibus_driver(); istop = ibus_driver();
dstop = !dbus_driver(); dstop = !dbus_driver();
io_handler();
#ifdef VCD_OUTPUT #ifdef VCD_OUTPUT
m_trace->dump((2*this->stats_total_cycles)+1); m_trace->dump((2*this->stats_total_cycles)+1);