From 07ec0ef344709c11096e809623d297810c13307a Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Sat, 4 Apr 2020 05:07:45 -0700 Subject: [PATCH] OPAE hw snooping fixes --- driver/hw/sources.txt | 1 + driver/hw/vortex_afu.json | 2 +- driver/hw/vortex_afu.sv | 81 +++++++++++++++++--------------- driver/hw/wave.do | 5 +- driver/sw/opae/vortex.cpp | 6 +-- driver/tests/basic/basic | Bin 39872 -> 44240 bytes driver/tests/basic/basic.cpp | 14 +++--- driver/tests/basic/snooping.bin | Bin 0 -> 7436 bytes rtl/VX_generic_queue_ll.v | 66 +++++++++++++++----------- 9 files changed, 96 insertions(+), 79 deletions(-) create mode 100644 driver/tests/basic/snooping.bin diff --git a/driver/hw/sources.txt b/driver/hw/sources.txt index be07bef5..26201f2d 100644 --- a/driver/hw/sources.txt +++ b/driver/hw/sources.txt @@ -68,6 +68,7 @@ vortex_afu.json ../../rtl/VX_cache/VX_cache_miss_resrv.v ../../rtl/VX_cache/VX_fill_invalidator.v ../../rtl/VX_cache/VX_tag_data_structure.v +../../rtl/VX_cache/VX_prefetcher.v ../../rtl/cache/VX_generic_pe.v ../../rtl/cache/cache_set.v ../../rtl/cache/VX_d_cache.v diff --git a/driver/hw/vortex_afu.json b/driver/hw/vortex_afu.json index c8adc2e0..d42414fd 100644 --- a/driver/hw/vortex_afu.json +++ b/driver/hw/vortex_afu.json @@ -14,7 +14,7 @@ "cmd-type-read": 1, "cmd-type-write": 2, "cmd-type-run": 3, - "cmd-type-snoop": 4, + "cmd-type-clflush": 4, "afu-top-interface": { diff --git a/driver/hw/vortex_afu.sv b/driver/hw/vortex_afu.sv index 0824125e..ec13c173 100644 --- a/driver/hw/vortex_afu.sv +++ b/driver/hw/vortex_afu.sv @@ -34,7 +34,9 @@ module vortex_afu #( ); localparam AVS_RD_QUEUE_SIZE = 16; -localparam VX_SNOOPING_DELAY = 300; + +localparam VX_SNOOP_DELAY = 300; +localparam VX_SNOOP_LEVELS = 2; localparam AFU_ID_L = 16'h0002; // AFU ID Lower localparam AFU_ID_H = 16'h0004; // AFU ID Higher @@ -42,7 +44,7 @@ localparam AFU_ID_H = 16'h0004; // AFU ID Higher localparam CMD_TYPE_READ = `AFU_IMAGE_CMD_TYPE_READ; localparam CMD_TYPE_WRITE = `AFU_IMAGE_CMD_TYPE_WRITE; localparam CMD_TYPE_RUN = `AFU_IMAGE_CMD_TYPE_RUN; -localparam CMD_TYPE_SNOOP = `AFU_IMAGE_CMD_TYPE_SNOOP; +localparam CMD_TYPE_CLFLUSH = `AFU_IMAGE_CMD_TYPE_CLFLUSH; localparam MMIO_CSR_CMD = `AFU_IMAGE_MMIO_CSR_CMD; localparam MMIO_CSR_STATUS = `AFU_IMAGE_MMIO_CSR_STATUS; @@ -52,13 +54,12 @@ localparam MMIO_CSR_DATA_SIZE = `AFU_IMAGE_MMIO_CSR_DATA_SIZE; logic [127:0] afu_id = `AFU_ACCEL_UUID; -typedef enum logic[2:0] { +typedef enum logic[3:0] { STATE_IDLE, STATE_READ, STATE_WRITE, STATE_RUN, - STATE_SNOOP1, - STATE_SNOOP2 + STATE_CLFLUSH } state_t; state_t state; @@ -192,7 +193,8 @@ logic [31:0] cci_write_ctr; logic [31:0] avs_read_ctr; logic [31:0] avs_write_ctr; logic [31:0] vx_snoop_ctr; -logic [31:0] vx_snoop_delay; +logic [9:0] vx_snoop_delay; +logic [1:0] vx_snoop_level; logic vx_reset; always_ff @(posedge clk) @@ -210,21 +212,21 @@ begin STATE_IDLE: begin case (csr_cmd) CMD_TYPE_READ: begin - $display("%t: CMD READ: ia=%h da=%h sz=%0d", $time, csr_io_addr, csr_mem_addr, csr_data_size); + $display("%t: STATE READ: ia=%h da=%h sz=%0d", $time, csr_io_addr, csr_mem_addr, csr_data_size); state <= STATE_READ; end CMD_TYPE_WRITE: begin - $display("%t: CMD WRITE: ia=%h da=%h sz=%0d", $time, csr_io_addr, csr_mem_addr, csr_data_size); + $display("%t: STATE WRITE: ia=%h da=%h sz=%0d", $time, csr_io_addr, csr_mem_addr, csr_data_size); state <= STATE_WRITE; end CMD_TYPE_RUN: begin - $display("%t: CMD START", $time); + $display("%t: STATE START", $time); vx_reset <= 1; state <= STATE_RUN; end - CMD_TYPE_SNOOP: begin - $display("%t: CMD SNOOP: da=%h sz=%0d", $time, csr_mem_addr, csr_data_size); - state <= STATE_SNOOP1; + CMD_TYPE_CLFLUSH: begin + $display("%t: STATE CFLUSH: da=%h sz=%0d", $time, csr_mem_addr, csr_data_size); + state <= STATE_CLFLUSH; end endcase end @@ -251,16 +253,8 @@ begin end end - STATE_SNOOP1: begin - if (vx_snoop_delay >= VX_SNOOPING_DELAY) - begin - // TODO: Allow both RUN and SNOOP states to use the AVS bus - state <= STATE_SNOOP2; - end - end - - STATE_SNOOP2: begin - if (vx_snoop_delay >= VX_SNOOPING_DELAY) + STATE_CLFLUSH: begin + if (vx_snoop_level >= VX_SNOOP_LEVELS) begin state <= STATE_IDLE; end @@ -322,7 +316,7 @@ begin end end - STATE_RUN: begin + STATE_RUN, STATE_CLFLUSH: begin if (vx_dram_req_read && !vx_dram_req_delay) begin @@ -350,15 +344,20 @@ begin end // Vortex DRAM requests stalling -assign vx_dram_req_delay = !((STATE_RUN == state) - && !avs_waitrequest - && !avs_raq_full - && !avs_rdq_full); -// Vortex DRAM fill response +logic vortex_enabled; + always_comb begin - vx_dram_fill_rsp = (STATE_RUN == state) && !avs_rdq_empty && vx_dram_fill_accept; + vortex_enabled = (STATE_RUN == state) || (STATE_CLFLUSH == state); + vx_dram_req_delay = !vortex_enabled || avs_waitrequest || avs_raq_full || avs_rdq_full; +end + +// Vortex DRAM fill response + +always_comb +begin + vx_dram_fill_rsp = vortex_enabled && !avs_rdq_empty && vx_dram_fill_accept; vx_dram_fill_rsp_addr = (avs_raq_dout << 6); {>>{vx_dram_fill_rsp_data}} = avs_rdq_dout; end @@ -522,35 +521,39 @@ begin vx_snp_req <= 0; vx_snoop_ctr <= 0; vx_snoop_delay <= 0; + vx_snoop_level <= 0; end else begin if (STATE_IDLE == state) begin - vx_snoop_ctr <= 0; + vx_snoop_ctr <= 0; vx_snoop_delay <= 0; + vx_snoop_level <= 0; end vx_snp_req <= 0; - if ((STATE_SNOOP1 == state - || STATE_SNOOP2 == state) + if ((STATE_CLFLUSH == state) && vx_snoop_ctr < csr_data_size - && vx_snp_req_delay) + && vx_snoop_level < VX_SNOOP_LEVELS + && !vx_snp_req_delay) begin - vx_snp_req <= 1; - vx_snoop_ctr <= vx_snoop_ctr + 1; + vx_snp_req_addr <= (csr_mem_addr + vx_snoop_ctr) << 6; + vx_snp_req <= 1; + vx_snoop_ctr <= vx_snoop_ctr + 1; end - if ((vx_snoop_ctr >= csr_data_size) - && (vx_snoop_delay < VX_SNOOPING_DELAY)) + if ((vx_snoop_ctr == csr_data_size) + && (vx_snoop_delay < VX_SNOOP_DELAY)) begin vx_snoop_delay <= vx_snoop_delay + 1; end - if (vx_snoop_delay >= VX_SNOOPING_DELAY) + if (vx_snoop_delay == VX_SNOOP_DELAY) begin - vx_snoop_ctr <= 0; + vx_snoop_ctr <= 0; vx_snoop_delay <= 0; + vx_snoop_level <= vx_snoop_level + 1; end end end diff --git a/driver/hw/wave.do b/driver/hw/wave.do index b8d71935..3c39919a 100644 --- a/driver/hw/wave.do +++ b/driver/hw/wave.do @@ -27,6 +27,7 @@ add wave -noupdate -label avs_raq_full /ase_top/ase_top_generic/platform_shim_cc add wave -noupdate -label avs_rdq_full /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/avs_rdq_full add wave -noupdate -label avs_raq_empty /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/avs_raq_empty add wave -noupdate -label avs_rdq_empty /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/avs_rdq_empty +add wave -noupdate -label vortex_enabled /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/vortex_enabled add wave -noupdate -label vx_reset /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/vx_soc/reset add wave -noupdate -label vx_dram_req_read /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/vx_dram_req_read add wave -noupdate -label vx_dram_req_write /ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/vx_dram_req_write @@ -49,7 +50,7 @@ add wave -noupdate -label warp_stalled {/ase_top/ase_top_generic/platform_shim_c add wave -noupdate -label warp_lock {/ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/vx_soc/genblk1/Vortex_Cluster/genblk1[0]/vortex_core/vx_front_end/vx_fetch/warp_scheduler/warp_lock} add wave -noupdate -label use_active {/ase_top/ase_top_generic/platform_shim_ccip_std_afu/ccip_std_afu/vortex_afu_inst/vx_soc/genblk1/Vortex_Cluster/genblk1[0]/vortex_core/vx_front_end/vx_fetch/warp_scheduler/use_active} TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 2} {620643200 ps} 0} +WaveRestoreCursors {{Cursor 2} {293228800 ps} 0} quietly wave cursor active 1 configure wave -namecolwidth 195 configure wave -valuecolwidth 100 @@ -65,4 +66,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ps update -WaveRestoreZoom {620460856 ps} {620825544 ps} +WaveRestoreZoom {293046456 ps} {293411144 ps} diff --git a/driver/sw/opae/vortex.cpp b/driver/sw/opae/vortex.cpp index 11d29ee3..62a80ccd 100755 --- a/driver/sw/opae/vortex.cpp +++ b/driver/sw/opae/vortex.cpp @@ -22,8 +22,8 @@ #define CMD_TYPE_READ AFU_IMAGE_CMD_TYPE_READ #define CMD_TYPE_WRITE AFU_IMAGE_CMD_TYPE_WRITE -#define CMD_TYPE_RUN AFU_IMAGE_CMD_TYPE_RUN -#define CMD_TYPE_SNOOP AFU_IMAGE_CMD_TYPE_SNOOP +#define CMD_TYPE_RUN AFU_IMAGE_CMD_TYPE_RUN +#define CMD_TYPE_CLFLUSH AFU_IMAGE_CMD_TYPE_CLFLUSH #define MMIO_CSR_CMD (AFU_IMAGE_MMIO_CSR_CMD * 4) #define MMIO_CSR_STATUS (AFU_IMAGE_MMIO_CSR_STATUS * 4) @@ -313,7 +313,7 @@ extern int vx_flush_caches(vx_device_h hdevice, size_t dev_maddr, size_t size) { CHECK_RES(fpgaWriteMMIO64(device->fpga, 0, MMIO_CSR_MEM_ADDR, dev_maddr)); CHECK_RES(fpgaWriteMMIO64(device->fpga, 0, MMIO_CSR_DATA_SIZE, size)); - CHECK_RES(fpgaWriteMMIO64(device->fpga, 0, MMIO_CSR_CMD, CMD_TYPE_SNOOP)); + CHECK_RES(fpgaWriteMMIO64(device->fpga, 0, MMIO_CSR_CMD, CMD_TYPE_CLFLUSH)); // Wait for the write operation to finish if (vx_ready_wait(hdevice, -1) != 0) diff --git a/driver/tests/basic/basic b/driver/tests/basic/basic index 1ec3ae80ee8fa7baf63f71077cbf478614e2a832..3a7a03091f3607848c7bcca4a205adf24e2ba944 100755 GIT binary patch delta 15585 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 e4L;&QnX;)MY{O)a delta 15205 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 diff --git a/driver/tests/basic/basic.cpp b/driver/tests/basic/basic.cpp index c5cf8fdc..c73535c8 100755 --- a/driver/tests/basic/basic.cpp +++ b/driver/tests/basic/basic.cpp @@ -27,7 +27,7 @@ uint64_t shuffle(int i, uint64_t value) { return (value << i) | (value & ((1 << i)-1));; } -int run_memcpy_test(vx_buffer_h sbuf, +int run_memcopy_test(vx_buffer_h sbuf, vx_buffer_h dbuf, uint32_t address, uint64_t value, @@ -105,7 +105,7 @@ int run_snoop_test(vx_device_h device) { // upload program std::cout << "upload program" << std::endl; - ret = vx_upload_kernel_file(device, "rv32ui-p-lw.bin"); + ret = vx_upload_kernel_file(device, "snooping.bin"); if (ret != 0) { return ret; } @@ -124,9 +124,9 @@ int run_snoop_test(vx_device_h device) { return ret; } - // send snooping request + // flush the caches std::cout << "flush the caches" << std::endl; - ret = vx_flush_caches(device, 0x80002000, 64); + ret = vx_flush_caches(device, 0x10000000, 64*8); if (ret != 0) { return ret; } @@ -181,15 +181,15 @@ int main(int argc, char *argv[]) { // run tests if (0 == test || -1 == test) { - std::cout << "run memcpy test" << std::endl; + std::cout << "run memcopy test" << std::endl; - ret = run_memcpy_test(sbuf, dbuf, 0x10000000, 0x0badf00d00ff00ff, 1); + ret = run_memcopy_test(sbuf, dbuf, 0x10000000, 0x0badf00d00ff00ff, 1); if (ret != 0) { cleanup(); return ret; } - ret = run_memcpy_test(sbuf, dbuf, 0x20000000, 0x0badf00d40ff40ff, 8); + ret = run_memcopy_test(sbuf, dbuf, 0x20000000, 0x0badf00d40ff40ff, 8); if (ret != 0) { cleanup(); return ret; diff --git a/driver/tests/basic/snooping.bin b/driver/tests/basic/snooping.bin new file mode 100644 index 0000000000000000000000000000000000000000..c4b15898d79235d8eb76a2b9d2d9dfe365e40f29 GIT binary patch literal 7436 zcmeI1U2GIp6oAj2zq@UXEZnxcMxrCL>{28|Gw2eZwxp#H6U8Q?#zfSy7{kvZAjQO( zDbwy0EQ(yxqAwU0T7!v+ZlpX?wsgyb4@7Hu(vS_UF(#Biw*|4|xzlYy6BB(SWSX3u z&dj;@ob#QZKD0*#;2n(>OtoQ4_&c}?sSs1cumx0L9RqomA%mvYo8oA972wqfYNj?m zdll@pXuAP5qyd`xDTEotyEOdXLBmXofbqpR7{^B;_tY40*9As3$Yn;Lc(`xoZ5wUT z-s+@~RKdnOpG!lkUc6^&%J<*%7}~Ve%h%(&#JhXRt~f}%rWaUk9Fo_(v`M~6ndBnM z09=oUB`c%hS@6$_dz=L3@Nx$DMvbtSGQ_Y8khLi>+D0MUHV(YA39RO`m8{bR^NdPz zr~5I+lE>CXfe+OJOZGr+^Ce(S5inav!BS|*96tlBH3`-uRAYOGJno_oHw0$r3^=_M z^K8O9n!s2&I#WDKJ>ELxZ8)u1?V$6HIttB<+h(YA)Y); zK^}^LGn4?ikOV^`B&!X8K`%mz4nN)Dpa~8t z@i~NPh?RytMnjl`3Z`}%ocLWFz7`w`Gkj{;%W24=Yg&@?8km{MSq`unYY>rT^i9Yt3wPZt3-s@-MYeM+J{c*qICfhw>rVjo zBKpMsnC-D}SA{@qri>+@`giaj6DiA9B<>bGv)#qrp#X2c z;W1^<6L%GlDl>Dnb7CUqa{rZk!O$Ng;_hS}*qjb_v5E^_X2s2vh)?)nuhgY1sF3i! zF0P2(B<`=q*c<#kzH94yz%) zNAuVo+%1_gF!X+m4<&{Y7yFNr;^xsAt6KB<=d^r^cgLYe!hX(d#CJouJNhB3p*>1g zMU9eGP@`mJ)F@dAHAF4`?_ zOE@>wGwD>y)Jjm?n=hg5b-7Q}+O4*_s3P|@0SiqK>$zVw7EOSqsgmj7o`~f`&X;bK zX<;yH#~}CXFc>Ey4;ir^!d%mFpN~jlUl_;7aURkB1m<7f51baNjo4ImdScTpr?(KD zvopsqe|-L@JyRz%MBA+68>^QK1qz_FA!td8^nme zi!rtl>?0`iFYmEm=AwPj{Qj#|i?)sZ{<8{I X_gIWUI01qCmB6K_zZ(u=emnjGYK@_H literal 0 HcmV?d00001 diff --git a/rtl/VX_generic_queue_ll.v b/rtl/VX_generic_queue_ll.v index 75215486..5349f649 100644 --- a/rtl/VX_generic_queue_ll.v +++ b/rtl/VX_generic_queue_ll.v @@ -6,45 +6,47 @@ module VX_generic_queue_ll parameter SIZE = 277 ) ( - input wire clk, - input wire reset, - input wire push, - input wire[DATAW-1:0] in_data, + input wire clk, + input wire reset, + input wire push, + input wire [DATAW-1:0] in_data, - input wire pop, - output wire[DATAW-1:0] out_data, - output wire empty, - output wire full -); + input wire pop, + output wire [DATAW-1:0] out_data, + output wire empty, + output wire full +); /* verilator lint_off WIDTH */ if (SIZE == 0) begin + assign empty = 1; assign out_data = 0; assign full = 0; - end else begin - `ifdef QUEUE_FORCE_MLAB + end else begin // (SIZE > 0) + + `ifdef QUEUE_FORCE_MLAB (* syn_ramstyle = "mlab" *) reg[DATAW-1:0] data[SIZE-1:0]; - `else - reg[DATAW-1:0] data[SIZE-1:0]; - `endif + `else + reg[ DATAW-1:0] data[SIZE-1:0]; + `endif - reg[DATAW-1:0] curr_r, head_r; - reg[$clog2(SIZE+1)-1:0] size_r; - reg[$clog2(SIZE)-1:0] wr_ctr_r; - reg[$clog2(SIZE)-1:0] rd_ptr_r, rd_next_ptr_r; - reg empty_r, full_r, bypass_r; - wire reading, writing; + reg [DATAW-1:0] head_r; + reg [$clog2(SIZE+1)-1:0] size_r; + wire reading; + wire writing; assign reading = pop && !empty; assign writing = push && !full; if (SIZE == 1) begin + always @(posedge clk) begin if (reset) begin - size_r <= 0; + size_r <= 0; + head_r <= 0; end else begin if (writing && !reading) begin size_r <= 1; @@ -59,9 +61,19 @@ module VX_generic_queue_ll end assign out_data = head_r; - assign empty = (size_r == 0); - assign full = (size_r != 0) && !pop; - end else begin + assign empty = (size_r == 0); + assign full = (size_r != 0) && !pop; + + end else begin // (SIZE > 1) + + reg [DATAW-1:0] curr_r; + reg [$clog2(SIZE)-1:0] wr_ctr_r; + reg [$clog2(SIZE)-1:0] rd_ptr_r; + reg [$clog2(SIZE)-1:0] rd_next_ptr_r; + reg empty_r; + reg full_r; + reg bypass_r; + always @(posedge clk) begin if (reset) begin wr_ctr_r <= 0; @@ -99,9 +111,10 @@ module VX_generic_queue_ll always @(posedge clk) begin if (reset) begin - rd_ptr_r <= 0; + curr_r <= 0; + rd_ptr_r <= 0; rd_next_ptr_r <= 1; - bypass_r <= 0; + bypass_r <= 0; end else begin if (reading) begin if (SIZE == 2) begin @@ -123,7 +136,6 @@ module VX_generic_queue_ll assign empty = empty_r; assign full = full_r; end - end /* verilator lint_on WIDTH */