From 3a71a2ebdb61b0c318d3ea6139b8352e066c5ba9 Mon Sep 17 00:00:00 2001 From: Savan Roshan Date: Wed, 6 Nov 2019 01:09:30 -0500 Subject: [PATCH 1/2] Fixed bugs in parameterization --- rtl/VX_define.v | 8 +- rtl/cache/VX_Cache_Bank.v | 3 +- rtl/cache/VX_cache_bank_valid.v | 4 +- rtl/interfaces/VX_dram_req_rsp_inter.v | 4 +- runtime/vortex_runtime.hex | 159 ++++++++++++------------- 5 files changed, 84 insertions(+), 94 deletions(-) diff --git a/rtl/VX_define.v b/rtl/VX_define.v index 04256674..db69c62e 100644 --- a/rtl/VX_define.v +++ b/rtl/VX_define.v @@ -12,12 +12,6 @@ // `define SYN 1 `define ASIC 1 -`define DCACHE_NUM_BANKS 8 - -`define DCACHE_NUMBER_BANKS 8 -`define DCACHE_NUM_WORDS_PER_BLOCK 4 - - `define NUM_BARRIERS 4 `define R_INST 7'd51 @@ -139,7 +133,7 @@ // Offset `define DCACHE_OFFSET_NB ($clog2(`DCACHE_NUM_WORDS_PER_BLOCK)) -`define DCACHE_OFFSET_ST (2+$clog2(`DCACHE_NUMBER_BANKS)) +`define DCACHE_OFFSET_ST (2+$clog2(`DCACHE_BANKS)) `define DCACHE_OFFSET_ED (`DCACHE_OFFSET_ST+(`DCACHE_OFFSET_NB)-1) diff --git a/rtl/cache/VX_Cache_Bank.v b/rtl/cache/VX_Cache_Bank.v index d22cf144..22d6c8b6 100644 --- a/rtl/cache/VX_Cache_Bank.v +++ b/rtl/cache/VX_Cache_Bank.v @@ -123,6 +123,7 @@ module VX_Cache_Bank + wire lw = (i_p_mem_read == `LW_MEM_READ); wire lb = (i_p_mem_read == `LB_MEM_READ); wire lh = (i_p_mem_read == `LH_MEM_READ); wire lhu = (i_p_mem_read == `LHU_MEM_READ); @@ -137,7 +138,7 @@ module VX_Cache_Bank wire b2 = (byte_select == 2); wire b3 = (byte_select == 3); - wire[31:0] data_unQual = b0 ? (data_use[block_offset] ) : + wire[31:0] data_unQual = (b0 || lw) ? (data_use[block_offset] ) : b1 ? (data_use[block_offset] >> 8) : b2 ? (data_use[block_offset] >> 16) : (data_use[block_offset] >> 24); diff --git a/rtl/cache/VX_cache_bank_valid.v b/rtl/cache/VX_cache_bank_valid.v index ff14b299..b7fc94be 100644 --- a/rtl/cache/VX_cache_bank_valid.v +++ b/rtl/cache/VX_cache_bank_valid.v @@ -16,9 +16,9 @@ module VX_cache_bank_valid thread_track_banks = 0; for (t_id = 0; t_id <= `NT_M1; t_id = t_id + 1) begin - thread_track_banks[i_p_addr[t_id][4:2]][t_id] = i_p_valid[t_id]; + thread_track_banks[i_p_addr[t_id][2+$clog2(NUMBER_BANKS)-1:2]][t_id] = i_p_valid[t_id]; end end endgenerate -endmodule \ No newline at end of file +endmodule diff --git a/rtl/interfaces/VX_dram_req_rsp_inter.v b/rtl/interfaces/VX_dram_req_rsp_inter.v index 5d6d7b5a..23391d82 100644 --- a/rtl/interfaces/VX_dram_req_rsp_inter.v +++ b/rtl/interfaces/VX_dram_req_rsp_inter.v @@ -11,11 +11,11 @@ interface VX_dram_req_rsp_inter (); wire [31:0] o_m_evict_addr; wire [31:0] o_m_read_addr; wire o_m_valid; - wire[`DCACHE_NUMBER_BANKS - 1:0][`DCACHE_NUM_WORDS_PER_BLOCK-1:0][31:0] o_m_writedata; + wire[`DCACHE_BANKS - 1:0][`DCACHE_NUM_WORDS_PER_BLOCK-1:0][31:0] o_m_writedata; wire o_m_read_or_write; // Rsp - wire[`DCACHE_NUMBER_BANKS - 1:0][`DCACHE_NUM_WORDS_PER_BLOCK-1:0][31:0] i_m_readdata; + wire[`DCACHE_BANKS - 1:0][`DCACHE_NUM_WORDS_PER_BLOCK-1:0][31:0] i_m_readdata; wire i_m_ready; diff --git a/runtime/vortex_runtime.hex b/runtime/vortex_runtime.hex index 654870a4..d6c905bd 100644 --- a/runtime/vortex_runtime.hex +++ b/runtime/vortex_runtime.hex @@ -1,6 +1,6 @@ :0200000480007A :100000009705000093850502130540006B10B500AD -:10001000EF000001EF004074130500006B000500C5 +:10001000EF000001EF000072130500006B00050007 :10002000130540006B000500F32610029396F600BE :10003000732600029315A6001316260037F1FF6FF2 :100040003301B1403301D1403301C100F326100226 @@ -18,7 +18,7 @@ :100100001301C10067800000B702010023A0B20004 :1001100067800000130101FE232E1100232C8100B3 :10012000130401022326A4FEB70700810327C4FE9F -:100130001317270093878711B307F70083A70700DA +:10013000131727009387470FB307F70083A707001C :1001400013850700EFF05FF9130000008320C10161 :10015000032481011301010267800000130101FEE5 :10016000232E1100232C8100130401022326A4FE58 @@ -26,31 +26,31 @@ :10018000EFF05FF9B707008113850704EFF0DFF4A4 :10019000130000008320C101032481011301010227 :1001A00067800000130101FE232E1100232C810023 -:1001B00013040102B707008183A7072613850700F0 -:1001C000EFF09FEAB707008103A7C725B7070081B3 -:1001D00083A7872513850700E7000700EFF0DFEA14 +:1001B00013040102B707008183A7C7231385070033 +:1001C000EFF09FEAB707008103A78723B7070081F5 +:1001D00083A7472313850700E7000700EFF0DFEA56 :1001E0002326A4FE8327C4FE6388070013050000AE :1001F000EFF09FE76F00C00013051000EFF0DFE69F :10020000130000008320C1010324810113010102B6 :1002100067800000130101FE232E1100232C8100B2 :10022000130401022326A4FE2324B4FE2322C4FEC9 -:100230002320D4FEB7070081032744FE23AEE72422 -:10024000B7070081032704FE23ACE724B70700812A -:10025000032784FE23A0E726832744FE9385070017 +:100230002320D4FEB7070081032744FE23ACE72226 +:10024000B7070081032704FE23AAE722B70700812E +:10025000032784FE23AEE722832744FE938507000D :100260000325C4FEEFF0DFDFEFF0DFF31300000043 :100270008320C10103248101130101026780000072 :10028000130101FE232E1100232C8100130401020F :10029000B707008113854708EFF01FE413054000FE :1002A000EFF09FDCEFF0DFDE2326A4FE0327C4FE81 -:1002B000B70700818326C4FE9396260093874726BE +:1002B000B70700818326C4FE939626009387072400 :1002C000B387F60023A0E70013051000EFF0DFD995 -:1002D000B707008183A7472613850700EFF09FE348 +:1002D000B707008183A7072413850700EFF09FE38A :1002E000B707008113850709EFF01FDFB70700810B -:1002F0009387472683A7470013850700EFF09FE108 +:1002F0009387072483A7470013850700EFF09FE14A :10030000B707008113850709EFF01FDDB7070081EC -:100310009387472683A7870013850700EFF09FDFA9 +:100310009387072483A7870013850700EFF09FDFEB :10032000B707008113850709EFF01FDBB7070081CE -:100330009387472683A7C70013850700EFF09FDD4B +:100330009387072483A7C70013850700EFF09FDD8D :10034000B707008113850709EFF01FD913000000DC :100350008320C10103248101130101026780000091 :10036000130101FE232E1100232C8100130401022E @@ -59,70 +59,67 @@ :100390008347B4FE638407068327C4FE93B7170020 :1003A0002305F4FE8347A4FE13850700EFF0DFCC9E :1003B0008347A4FE63820702B70700810327C4FEB8 -:1003C0001317270093874726B307F7001307A000EA +:1003C0001317270093870724B307F7001307A0002C :1003D00023A0E7006F000002B70700810327C4FED7 -:1003E0001317270093874726B307F7001307B000BA +:1003E0001317270093870724B307F7001307B000FC :1003F00023A0E700EFF0DFC86F0040068327C4FEAC :1004000093B73700A304F4FE834794FE13850700D7 :10041000EFF09FC6834794FE63820702B70700810F -:100420000327C4FE1317270093874726B307F70057 +:100420000327C4FE1317270093870724B307F70099 :100430001307C00023A0E7006F000002B707008188 -:100440000327C4FE1317270093874726B307F70037 +:100440000327C4FE1317270093870724B307F70079 :100450001307D00023A0E700EFF09FC2EFF05FC2C8 -:10046000B707008183A7472613850700EFF09FCACF +:10046000B707008183A7072413850700EFF09FCA11 :10047000B707008113850709EFF01FC6B707008192 -:100480009387472683A7470013850700EFF09FC88F +:100480009387072483A7470013850700EFF09FC8D1 :10049000B707008113850709EFF01FC4B707008174 -:1004A0009387472683A7870013850700EFF09FC631 +:1004A0009387072483A7870013850700EFF09FC673 :1004B000B707008113850709EFF01FC2B707008156 -:1004C0009387472683A7C70013850700EFF09FC4D3 +:1004C0009387072483A7C70013850700EFF09FC415 :1004D000B707008113850709EFF01FC01300000064 :1004E0008320C10103248101130101026780000000 :1004F000130101FE232E1100232C8100130401029D :10050000EFF09FB82326A4FEB70700810327C4FE9F -:100510001317270093874727B307F7000327C4FE65 +:100510001317270093870725B307F7000327C4FEA7 :1005200023A0E7008327C4FE6386070013050000AD :10053000EFF09FB3130000008320C1010324810169 :100540001301010267800000130101FE232E110038 :10055000232C810013040102B70700809387074F03 :100560002326F4FE8325C4FE13054000EFF05FAFA1 -:10057000EFF01FF8B707008183A74727138507000F +:10057000EFF01FF8B707008183A707251385070051 :10058000EFF05FB9B707008113850709EFF0DFB41B -:10059000B70700819387472783A747001385070084 +:10059000B70700819387072583A7470013850700C6 :1005A000EFF05FB7B707008113850709EFF0DFB2FF -:1005B000B70700819387472783A787001385070024 +:1005B000B70700819387072583A787001385070066 :1005C000EFF05FB5B707008113850709EFF0DFB0E3 -:1005D000B70700819387472783A7C70013850700C4 +:1005D000B70700819387072583A7C7001385070006 :1005E000EFF05FB3B707008113850709EFF0DFAEC7 :1005F000130000008320C1010324810113010102C3 :1006000067800000130101FF2326110023248100CD -:1006100013040101EFF0DFC6B70700811385470916 -:10062000EFF09FAB13054000EFF01FA4EFF05FD396 -:1006300013051000EFF05FA3B70700811385870A49 -:10064000EFF09FA9EFF05FF0130000008320C100DE -:10065000032481001301010167800000130101FCE4 -:10066000232E1102232C8102130401042326A4FC4F -:100670008327C4FC2326F4FEEFF01FA12324A4FE4D -:10068000EFF01FA12322A4FE8327C4FE83A7070146 -:10069000032784FE637EF7008327C4FE83A7C70079 -:1006A000032744FE6376F700930710006F00800075 -:1006B00093070000A301F4FE834734FE93F717006D -:1006C000A301F4FE834734FE13850700EFF0DF9AA1 -:1006D000834734FE638607068327C4FE03A7C7004B -:1006E000832784FEB307F702032744FEB307F7000E -:1006F000232EF4FC8327C4FE03A707008327C4FD31 -:1007000093972700B307F70083A607008327C4FE4B -:1007100003A747008327C4FD93972700B307F7007B -:1007200003A707008327C4FE03A687008327C4FD11 -:1007300093972700B307F6003387E60023A0E7006E -:10074000EFF01F94130000008320C10303248103F2 -:100750001301010467800000130101FF232611002B -:10076000232481001304010113051000EFF0DF8F33 -:10077000EFF01FB1B70700811385470FEFF0DF954A -:1007800013054000EFF05F8EEFF09FBD13051000E2 -:10079000EFF09F8DB707008113858710EFF0DF938F -:1007A000EFF09FDA93070000138507008320C10054 -:0C07B00003248100130101016780000098 +:1006100013040101B707008113854709EFF0DFAB31 +:10062000EFF09FF2130000008320C100032481003B +:100630001301010167800000130101FC232E110248 +:10064000232C8102130401042326A4FC8327C4FC69 +:100650002326F4FEEFF05FA32324A4FEEFF05FA3B4 +:100660002322A4FE8327C4FE83A70701032784FE59 +:10067000637EF7008327C4FE83A7C700032744FED9 +:100680006376F700930710006F0080009307000067 +:10069000A301F4FE834734FE93F71700A301F4FE91 +:1006A000834734FE13850700EFF01F9D834734FE18 +:1006B000638607068327C4FE03A7C700832784FE3B +:1006C000B307F702032744FEB307F700232EF4FC19 +:1006D0008327C4FE03A707008327C4FD9397270041 +:1006E000B307F70083A607008327C4FE03A74700CC +:1006F0008327C4FD93972700B307F70003A70700DC +:100700008327C4FE03A687008327C4FD9397270091 +:10071000B307F6003387E60023A0E700EFF05F960B +:10072000130000008320C10303248103130101048B +:1007300067800000130101FF23261100232481009C +:100740001304010113051000EFF01F92EFF05FB3E7 +:10075000B70700811385070EEFF01F9813054000BF +:10076000EFF09F90EFF0DFBF13051000EFF0DF8F89 +:1007700093070000138507008320C1000324810034 +:08078000130101016780000074 :02000004810079 :10000000300000003100000032000000330000002A :10001000340000003500000036000000370000000A @@ -133,34 +130,32 @@ :100060003700000038000000390000006100000087 :1000700062000000630000006400000065000000F2 :1000800066000000746573745F746D630A0000009D -:100090000A000000746573745F6469766572676551 -:1000A0006E63650A00000000746573745F737061AD -:1000B000776E0A00300000003100000032000000BE -:1000C000330000003400000035000000360000005E -:1000D0003700000038000000390000006100000017 -:1000E0006200000063000000640000006500000082 -:1000F00066000000746573745F6469766572676595 -:100100006E63650A00000000746573745F77737036 -:0501100061776E0A009A -:100118000000008104000081080000810C000081BB -:100128001000008114000081180000811C0000816B -:100138002000008124000081280000812C0000811B -:100148003000008134000081380000813C000081CB -:1001580044000081480000814C000081500000816B -:1001680054000081580000815C000081600000811B -:1001780064000081680000816C00008170000081CB -:1001880074000081780000817C000081800000817B -:10019800B4000081B8000081BC000081C00000816B -:1001A800C4000081C8000081CC000081D00000811B -:1001B800D4000081D8000081DC000081E0000081CB -:1001C800E4000081E8000081EC000081F00000817B -:1001D8000100000001000000010000000100000013 -:1001E8000100000001000000010000000100000003 -:1001F80001000000010000000100000001000000F3 -:1002080001000000010000000100000001000000E2 -:1002180006000000060000000600000006000000BE -:1002280006000000060000000600000006000000AE -:10023800060000000600000006000000060000009E -:10024800060000000600000006000000060000008E +:100090000A000000746573745F737061776E0A0004 +:1000A000300000003100000032000000330000008A +:1000B000340000003500000036000000370000006A +:1000C00038000000390000006100000062000000FC +:1000D000630000006400000065000000660000008E +:1000E000746573745F646976657267656E63650ACB +:0100F000000F +:1000F4000000008104000081080000810C000081E0 +:100104001000008114000081180000811C0000818F +:100114002000008124000081280000812C0000813F +:100124003000008134000081380000813C000081EF +:1001340044000081480000814C000081500000818F +:1001440054000081580000815C000081600000813F +:1001540064000081680000816C00008170000081EF +:1001640074000081780000817C000081800000819F +:10017400A0000081A4000081A8000081AC000081DF +:10018400B0000081B4000081B8000081BC0000818F +:10019400C0000081C4000081C8000081CC0000813F +:1001A400D0000081D4000081D8000081DC000081EF +:1001B4000100000001000000010000000100000037 +:1001C4000100000001000000010000000100000027 +:1001D4000100000001000000010000000100000017 +:1001E4000100000001000000010000000100000007 +:1001F40006000000060000000600000006000000E3 +:1002040006000000060000000600000006000000D2 +:1002140006000000060000000600000006000000C2 +:1002240006000000060000000600000006000000B2 :040000058000000077 :00000001FF From cb1bf650176ebcf99a47026dbb6ef1d0a585f79f Mon Sep 17 00:00:00 2001 From: Savan Roshan Date: Wed, 6 Nov 2019 11:12:27 -0500 Subject: [PATCH 2/2] Parameterization working --- rtl/cache/VX_d_cache.v | 23 ++++++++++++----------- rtl/modelsim/vortex_dpi.cpp | 25 +++++++++++++++++++++---- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/rtl/cache/VX_d_cache.v b/rtl/cache/VX_d_cache.v index bc88ad05..8bd3e109 100644 --- a/rtl/cache/VX_d_cache.v +++ b/rtl/cache/VX_d_cache.v @@ -169,17 +169,18 @@ module VX_d_cache wire[`DCACHE_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; - // always @(*) begin - // for (bbid = 0; bbid < NUMBER_BANKS; bbid=bbid+1) - // begin - // assign threads_serviced_Qual = threads_serviced_Qual | threads_serviced_per_bank[bbid]; - // end - // end + //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]; + integer bbid; + always @(*) begin + threads_serviced_Qual = 0; + for (bbid = 0; bbid < `DCACHE_BANKS; bbid=bbid+1) + begin + threads_serviced_Qual = threads_serviced_Qual | threads_serviced_per_bank[bbid]; + end + end diff --git a/rtl/modelsim/vortex_dpi.cpp b/rtl/modelsim/vortex_dpi.cpp index 5fe66cf6..7eba51b1 100644 --- a/rtl/modelsim/vortex_dpi.cpp +++ b/rtl/modelsim/vortex_dpi.cpp @@ -6,6 +6,7 @@ #include <../simulate/ram.h> #include +#include #include "svdpi.h" #include "../simulate/VX_define.h" @@ -27,11 +28,22 @@ unsigned refill_addr; unsigned num_cycles; unsigned getIndex(int, int, int); +unsigned calculate_bits_per_bank_num(int); + unsigned getIndex(int r, int c, int numCols) { return (r * numCols) + c; } +unsigned calculate_bits_per_bank_num(int num) +{ + int shifted_num = 0; + for(int i = 0; i < num; i++){ + shifted_num = (shifted_num << 1)| 1 ; + } + return shifted_num; +} + void load_file(char * filename) { @@ -69,6 +81,7 @@ void ibus_driver(bool clk, unsigned pc_addr, unsigned * instruction) } + void dbus_driver(bool clk, unsigned o_m_read_addr, unsigned o_m_evict_addr, bool o_m_valid, svLogicVecVal * o_m_writedata, bool o_m_read_or_write, svLogicVecVal * i_m_readdata, bool * i_m_ready) { @@ -116,8 +129,10 @@ void dbus_driver(bool clk, unsigned o_m_read_addr, unsigned o_m_evict_addr, bool unsigned addr_without_byte = new_addr >> 2; - unsigned bank_num = addr_without_byte & 0x7; - unsigned addr_wihtout_bank = addr_without_byte >> 3; + unsigned bits_per_bank = (int)log2(CACHE_NUM_BANKS); + unsigned maskbits_per_bank = calculate_bits_per_bank_num(bits_per_bank); + unsigned bank_num = addr_without_byte & maskbits_per_bank; + unsigned addr_wihtout_bank = addr_without_byte >> bits_per_bank; unsigned offset_num = addr_wihtout_bank & 0x3; unsigned value; @@ -149,8 +164,10 @@ void dbus_driver(bool clk, unsigned o_m_read_addr, unsigned o_m_evict_addr, bool unsigned addr_without_byte = new_addr >> 2; - unsigned bank_num = addr_without_byte & 0x7; - unsigned addr_wihtout_bank = addr_without_byte >> 3; + unsigned bits_per_bank = (int)log2(CACHE_NUM_BANKS); + unsigned maskbits_per_bank = calculate_bits_per_bank_num(bits_per_bank); + unsigned bank_num = addr_without_byte & maskbits_per_bank; + unsigned addr_wihtout_bank = addr_without_byte >> bits_per_bank; unsigned offset_num = addr_wihtout_bank & 0x3; unsigned index = getIndex(bank_num,offset_num, CACHE_WORDS_PER_BLOCK);