From 57143f5889e24e07f27c5da95050b9c1ae24f2ca Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Thu, 17 Jun 2021 16:43:43 -0700 Subject: [PATCH 01/13] synthesis optimizations --- hw/rtl/VX_ibuffer.v | 37 ++++--- hw/rtl/VX_instr_demux.v | 15 +-- hw/rtl/VX_scoreboard.v | 16 ++- hw/rtl/VX_smem_arb.v | 4 +- hw/rtl/afu/vortex_afu.sv | 129 ++++++++++++++----------- hw/rtl/cache/VX_bank.v | 3 +- hw/rtl/cache/VX_cache_core_rsp_merge.v | 6 +- hw/rtl/libs/VX_priority_encoder.v | 2 +- hw/rtl/libs/VX_rr_arbiter.v | 55 ++++++++++- hw/rtl/libs/VX_skid_buffer.v | 2 +- hw/syn/opae/Makefile | 8 +- hw/syn/opae/setup16.cfg | 7 -- hw/syn/opae/setup8.cfg | 7 -- hw/syn/opae/vortex_afu.json | 4 +- hw/syn/opae/vortex_afu16.json | 53 ---------- hw/syn/opae/vortex_afu8.json | 54 ----------- 16 files changed, 173 insertions(+), 229 deletions(-) delete mode 100644 hw/syn/opae/setup16.cfg delete mode 100644 hw/syn/opae/setup8.cfg delete mode 100644 hw/syn/opae/vortex_afu16.json delete mode 100644 hw/syn/opae/vortex_afu8.json diff --git a/hw/rtl/VX_ibuffer.v b/hw/rtl/VX_ibuffer.v index 8a7bb4aa..8c6a4d08 100644 --- a/hw/rtl/VX_ibuffer.v +++ b/hw/rtl/VX_ibuffer.v @@ -36,19 +36,16 @@ module VX_ibuffer #( wire writing = enq_fire && (i == ibuf_enq_if.wid); wire reading = deq_fire && (i == ibuf_deq_if.wid); - wire is_slot0 = empty_r[i] || (alm_empty_r[i] && reading); - - wire push = writing && !is_slot0; - wire pop = reading && !alm_empty_r[i]; + wire is_head_ptr = empty_r[i] || (alm_empty_r[i] && reading); VX_skid_buffer #( .DATAW (DATAW) ) queue ( .clk (clk), .reset (reset), - .valid_in (push), + .valid_in (writing && !is_head_ptr), .data_in (q_data_in), - .ready_out(pop), + .ready_out(reading), .data_out (q_data_prev[i]), `UNUSED_PIN (ready_in), `UNUSED_PIN (valid_out) @@ -79,9 +76,9 @@ module VX_ibuffer #( used_r[i] <= used_r[i] + ADDRW'($signed(2'(writing) - 2'(reading))); end - if (writing && is_slot0) begin + if (writing && is_head_ptr) begin q_data_out[i] <= q_data_in; - end else if (pop) begin + end else if (reading) begin q_data_out[i] <= q_data_prev[i]; end end @@ -111,26 +108,17 @@ module VX_ibuffer #( end // schedule the next instruction to issue - // do round-robin when multiple warps are active - always @(*) begin - deq_valid_n = 0; - deq_wid_n = 'x; - deq_instr_n = 'x; - schedule_table_n = 'x; - + always @(*) begin + deq_valid_n = 1; if (num_warps > 1) begin - deq_valid_n = (| schedule_table); - schedule_table_n = schedule_table; for (integer i = 0; i < `NUM_WARPS; i++) begin if (schedule_table[i]) begin deq_wid_n = `NW_BITS'(i); deq_instr_n = q_data_out[i]; - schedule_table_n[i] = 0; break; end end end else if (1 == num_warps && !(deq_fire && q_alm_empty[deq_wid])) begin - deq_valid_n = 1; deq_wid_n = deq_wid; deq_instr_n = deq_fire ? q_data_prev[deq_wid] : q_data_out[deq_wid]; end else begin @@ -139,6 +127,17 @@ module VX_ibuffer #( deq_instr_n = q_data_in; end end + + // do round-robin with multiple active warps + always @(*) begin + schedule_table_n = schedule_table; + for (integer i = 0; i < `NUM_WARPS; i++) begin + if (schedule_table[i]) begin + schedule_table_n[i] = 0; + break; + end + end + end wire warp_added = enq_fire && q_empty[ibuf_enq_if.wid]; wire warp_removed = deq_fire && ~(enq_fire && ibuf_enq_if.wid == deq_wid) && q_alm_empty[deq_wid]; diff --git a/hw/rtl/VX_instr_demux.v b/hw/rtl/VX_instr_demux.v index 1bf8711b..36164b94 100644 --- a/hw/rtl/VX_instr_demux.v +++ b/hw/rtl/VX_instr_demux.v @@ -38,8 +38,7 @@ module VX_instr_demux ( wire alu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_ALU); VX_skid_buffer #( - .DATAW (`NW_BITS + `NUM_THREADS + 32 + 32 + `ALU_BITS + `MOD_BITS + 32 + 1 + 1 + `NR_BITS + 1 + `NT_BITS + (2 * `NUM_THREADS * 32)), - .USE_FASTREG (1) + .DATAW (`NW_BITS + `NUM_THREADS + 32 + 32 + `ALU_BITS + `MOD_BITS + 32 + 1 + 1 + `NR_BITS + 1 + `NT_BITS + (2 * `NUM_THREADS * 32)) ) alu_buffer ( .clk (clk), .reset (reset), @@ -56,8 +55,7 @@ module VX_instr_demux ( wire lsu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_LSU); VX_skid_buffer #( - .DATAW (`NW_BITS + `NUM_THREADS + 32 + `LSU_BITS + 32 + `NR_BITS + 1 + (2 * `NUM_THREADS * 32)), - .USE_FASTREG (1) + .DATAW (`NW_BITS + `NUM_THREADS + 32 + `LSU_BITS + 32 + `NR_BITS + 1 + (2 * `NUM_THREADS * 32)) ) lsu_buffer ( .clk (clk), .reset (reset), @@ -74,8 +72,7 @@ module VX_instr_demux ( wire csr_req_valid = execute_if.valid && (execute_if.ex_type == `EX_CSR); VX_skid_buffer #( - .DATAW (`NW_BITS + `NUM_THREADS + 32 + `CSR_BITS + `CSR_ADDR_BITS + `NR_BITS + 1 + 1 + `NR_BITS + 32), - .USE_FASTREG (1) + .DATAW (`NW_BITS + `NUM_THREADS + 32 + `CSR_BITS + `CSR_ADDR_BITS + `NR_BITS + 1 + 1 + `NR_BITS + 32) ) csr_buffer ( .clk (clk), .reset (reset), @@ -93,8 +90,7 @@ module VX_instr_demux ( wire fpu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_FPU); VX_skid_buffer #( - .DATAW (`NW_BITS + `NUM_THREADS + 32 + `FPU_BITS + `MOD_BITS + `NR_BITS + 1 + (3 * `NUM_THREADS * 32)), - .USE_FASTREG (1) + .DATAW (`NW_BITS + `NUM_THREADS + 32 + `FPU_BITS + `MOD_BITS + `NR_BITS + 1 + (3 * `NUM_THREADS * 32)) ) fpu_buffer ( .clk (clk), .reset (reset), @@ -115,8 +111,7 @@ module VX_instr_demux ( wire gpu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_GPU); VX_skid_buffer #( - .DATAW (`NW_BITS + `NUM_THREADS + 32 + 32 + `GPU_BITS + `NR_BITS + 1 + (`NUM_THREADS * 32 + 32)), - .USE_FASTREG (1) + .DATAW (`NW_BITS + `NUM_THREADS + 32 + 32 + `GPU_BITS + `NR_BITS + 1 + (`NUM_THREADS * 32 + 32)) ) gpu_buffer ( .clk (clk), .reset (reset), diff --git a/hw/rtl/VX_scoreboard.v b/hw/rtl/VX_scoreboard.v index 139f0aa1..6b161a1f 100644 --- a/hw/rtl/VX_scoreboard.v +++ b/hw/rtl/VX_scoreboard.v @@ -11,11 +11,17 @@ module VX_scoreboard #( output wire delay ); reg [`NUM_WARPS-1:0][`NUM_REGS-1:0] inuse_regs; - wire [`NUM_REGS-1:0] deq_inuse_regs; - - assign deq_inuse_regs = inuse_regs[ibuf_deq_if.wid] & ibuf_deq_if.used_regs; - assign delay = (| deq_inuse_regs); + reg is_reg_busy; + always @(*) begin + is_reg_busy = 0; + for (integer i = 0; i < `NUM_WARPS; ++i) begin + if (ibuf_deq_if.wid == `NW_BITS'(i)) begin + is_reg_busy = | (inuse_regs[i] & ibuf_deq_if.used_regs); + end + end + end + assign delay = is_reg_busy; wire reserve_reg = ibuf_deq_if.valid && ibuf_deq_if.ready && (ibuf_deq_if.wb != 0); @@ -37,6 +43,8 @@ module VX_scoreboard #( end end + wire [`NUM_REGS-1:0] deq_inuse_regs = inuse_regs[ibuf_deq_if.wid]; + `ifdef DBG_PRINT_PIPELINE always @(posedge clk) begin if (ibuf_deq_if.valid && ~ibuf_deq_if.ready) begin diff --git a/hw/rtl/VX_smem_arb.v b/hw/rtl/VX_smem_arb.v index 4e6cdee2..48eb1680 100644 --- a/hw/rtl/VX_smem_arb.v +++ b/hw/rtl/VX_smem_arb.v @@ -32,8 +32,8 @@ module VX_smem_arb ( VX_stream_demux #( .NUM_REQS (2), .DATAW (REQ_DATAW), - .BUFFERED (0) - ) rsp_demux ( + .BUFFERED (1) + ) req_demux ( .clk (clk), .reset (reset), .sel (core_req_if.tag[i][0]), diff --git a/hw/rtl/afu/vortex_afu.sv b/hw/rtl/afu/vortex_afu.sv index fb49bbe4..1d42af92 100644 --- a/hw/rtl/afu/vortex_afu.sv +++ b/hw/rtl/afu/vortex_afu.sv @@ -53,7 +53,6 @@ localparam AVS_REQ_TAGW_CCI = `MAX(CCI_ADDR_WIDTH, CCI_ADDR_WIDTH + $clog2(LME localparam AVS_REQ_TAGW = `MAX(AVS_REQ_TAGW_VX, AVS_REQ_TAGW_CCI); localparam CCI_RD_WINDOW_SIZE = 8; -localparam CCI_RD_QUEUE_SIZE = 2 * CCI_RD_WINDOW_SIZE; localparam CCI_RW_PENDING_SIZE= 256; localparam AFU_ID_L = 16'h0002; // AFU ID Lower @@ -78,15 +77,15 @@ localparam MMIO_SCOPE_WRITE = `AFU_IMAGE_MMIO_SCOPE_WRITE; localparam MMIO_DEV_CAPS = `AFU_IMAGE_MMIO_DEV_CAPS; -localparam CCI_RD_RQ_TAGW = $clog2(CCI_RD_WINDOW_SIZE); -localparam CCI_RD_RQ_DATAW = CCI_LINE_WIDTH + CCI_RD_RQ_TAGW; +localparam CCI_RD_QUEUE_SIZE = 2 * CCI_RD_WINDOW_SIZE; +localparam CCI_RD_QUEUE_TAGW = $clog2(CCI_RD_WINDOW_SIZE); +localparam CCI_RD_QUEUE_DATAW = CCI_LINE_WIDTH + CCI_ADDR_WIDTH; localparam STATE_IDLE = 0; -localparam STATE_READ = 1; -localparam STATE_WRITE = 2; +localparam STATE_WRITE = 1; +localparam STATE_READ = 2; localparam STATE_START = 3; -localparam STATE_RUN = 4; -localparam STATE_MAX_VALUE = 5; +localparam STATE_MAX_VALUE = 4; localparam STATE_WIDTH = $clog2(STATE_MAX_VALUE); `ifdef SCOPE @@ -114,11 +113,9 @@ wire [`VX_MEM_LINE_WIDTH-1:0] vx_mem_rsp_data; wire [`VX_MEM_TAG_WIDTH-1:0] vx_mem_rsp_tag; wire vx_mem_rsp_ready; +reg vx_reset; wire vx_busy; -reg vx_reset; -reg vx_mem_en; - // CMD variables ////////////////////////////////////////////////////////////// t_ccip_clAddr cmd_io_addr; @@ -292,8 +289,9 @@ end // COMMAND FSM //////////////////////////////////////////////////////////////// wire cmd_read_done; -wire cmd_write_done; +reg cmd_write_done; wire cmd_run_done; +reg vx_started; reg [$clog2(RESET_DELAY+1)-1:0] vx_reset_ctr; always @(posedge clk) begin @@ -306,9 +304,9 @@ end always @(posedge clk) begin if (reset) begin - state <= STATE_IDLE; + state <= STATE_IDLE; + vx_started <= 0; vx_reset <= 0; - vx_mem_en <= 0; end else begin case (state) STATE_IDLE: begin @@ -358,21 +356,20 @@ always @(posedge clk) begin STATE_START: begin // vortex reset cycles - if (vx_reset_ctr == $bits(vx_reset_ctr)'(RESET_DELAY)) begin - vx_reset <= 0; - vx_mem_en <= 1; - state <= STATE_RUN; - end - end - - STATE_RUN: begin - if (cmd_run_done) begin - vx_mem_en <= 0; - state <= STATE_IDLE; - `ifdef DBG_PRINT_OPAE - $display("%t: STATE IDLE", $time); - `endif - end + if (vx_started) begin + if (cmd_run_done) begin + vx_started <= 0; + state <= STATE_IDLE; + `ifdef DBG_PRINT_OPAE + $display("%t: STATE IDLE", $time); + `endif + end + end else begin + if (vx_reset_ctr == $bits(vx_reset_ctr)'(RESET_DELAY)) begin + vx_started <= 1; + vx_reset <= 0; + end + end end default: begin @@ -387,11 +384,12 @@ end wire cci_mem_rd_req_valid; wire cci_mem_wr_req_valid; -wire [CCI_RD_RQ_DATAW-1:0] cci_rdq_dout; +wire [CCI_RD_QUEUE_DATAW-1:0] cci_rdq_dout; wire cci_mem_req_valid; wire cci_mem_req_rw; wire [CCI_ADDR_WIDTH-1:0] cci_mem_req_addr; +wire [CCI_LINE_WIDTH-1:0] cci_mem_req_data; wire [CCI_ADDR_WIDTH-1:0] cci_mem_req_tag; wire cci_mem_req_ready; @@ -430,7 +428,7 @@ VX_to_mem #( .mem_req_addr_in (cci_mem_req_addr), .mem_req_rw_in (cci_mem_req_rw), .mem_req_byteen_in ({CCI_LINE_SIZE{1'b1}}), - .mem_req_data_in (cci_rdq_dout[CCI_RD_RQ_DATAW-1:CCI_RD_RQ_TAGW]), + .mem_req_data_in (cci_mem_req_data), .mem_req_tag_in (cci_mem_req_tag), .mem_req_ready_in (cci_mem_req_ready), @@ -473,7 +471,7 @@ wire vx_mem_req_valid_qual; wire vx_mem_req_ready_qual; assign vx_mem_req_valid_qual = vx_mem_req_valid - && vx_mem_en + && vx_started && ~vx_mem_is_cout; assign vx_mem_req_ready = vx_mem_is_cout ? ~cout_q_full : vx_mem_req_ready_qual; @@ -617,19 +615,20 @@ VX_avs_wrapper #( reg [CCI_ADDR_WIDTH-1:0] cci_mem_wr_req_ctr; wire [CCI_ADDR_WIDTH-1:0] cci_mem_wr_req_addr; -reg [CCI_ADDR_WIDTH-1:0] cci_mem_wr_req_addr_unqual; -reg [CCI_ADDR_WIDTH-1:0] cci_rd_req_ctr; -wire [CCI_ADDR_WIDTH-1:0] cci_rd_req_ctr_next; -wire [CCI_RD_RQ_TAGW-1:0] cci_rd_req_tag; -wire [CCI_RD_RQ_TAGW-1:0] cci_rd_rsp_tag; -reg [CCI_RD_RQ_TAGW-1:0] cci_rd_rsp_ctr; +reg [CCI_ADDR_WIDTH-1:0] cci_mem_wr_req_addr_base; wire cci_rd_req_fire; t_ccip_clAddr cci_rd_req_addr; reg cci_rd_req_valid, cci_rd_req_wait; +reg [CCI_ADDR_WIDTH-1:0] cci_rd_req_ctr; +wire [CCI_ADDR_WIDTH-1:0] cci_rd_req_ctr_next; +wire [CCI_RD_QUEUE_TAGW-1:0] cci_rd_req_tag; + +wire [CCI_RD_QUEUE_TAGW-1:0] cci_rd_rsp_tag; +reg [CCI_RD_QUEUE_TAGW-1:0] cci_rd_rsp_ctr; wire cci_rdq_push, cci_rdq_pop; -wire [CCI_RD_RQ_DATAW-1:0] cci_rdq_din; +wire [CCI_RD_QUEUE_DATAW-1:0] cci_rdq_din; wire cci_rdq_empty; always @(*) begin @@ -641,16 +640,15 @@ end wire cci_mem_wr_req_fire = cci_mem_wr_req_valid && cci_mem_req_ready; -wire cci_rd_rsp_fire = (STATE_WRITE == state) - && cp2af_sRxPort.c0.rspValid +wire cci_rd_rsp_fire = cp2af_sRxPort.c0.rspValid && (cp2af_sRxPort.c0.hdr.resp_type == eRSP_RDLINE); -assign cci_rd_req_tag = CCI_RD_RQ_TAGW'(cci_rd_req_ctr); -assign cci_rd_rsp_tag = CCI_RD_RQ_TAGW'(cp2af_sRxPort.c0.hdr.mdata); +assign cci_rd_req_tag = CCI_RD_QUEUE_TAGW'(cci_rd_req_ctr); +assign cci_rd_rsp_tag = CCI_RD_QUEUE_TAGW'(cp2af_sRxPort.c0.hdr.mdata); assign cci_rdq_push = cci_rd_rsp_fire; assign cci_rdq_pop = cci_mem_wr_req_fire; -assign cci_rdq_din = {cp2af_sRxPort.c0.data, cci_rd_rsp_tag}; +assign cci_rdq_din = {cp2af_sRxPort.c0.data, cci_mem_wr_req_addr_base + CCI_ADDR_WIDTH'(cci_rd_rsp_tag)}; wire [$clog2(CCI_RD_QUEUE_SIZE+1)-1:0] cci_pending_reads; wire cci_pending_reads_full; @@ -673,9 +671,7 @@ assign cci_rd_req_fire = cci_rd_req_valid && !(cci_rd_req_wait || cci_pending_re assign cci_mem_wr_req_valid = !cci_rdq_empty; -assign cci_mem_wr_req_addr = cci_mem_wr_req_addr_unqual + (CCI_ADDR_WIDTH'(CCI_RD_RQ_TAGW'(cci_rdq_dout))); - -assign cmd_write_done = (cci_mem_wr_req_ctr == cmd_data_size); +assign cci_mem_wr_req_addr = cci_rdq_dout[CCI_ADDR_WIDTH-1:0]; // Send read requests to CCI always @(posedge clk) begin @@ -693,11 +689,11 @@ always @(posedge clk) begin && (cci_rd_req_ctr_next != cmd_data_size) && !cp2af_sRxPort.c0TxAlmFull; - if (cci_rd_req_fire && (cci_rd_req_tag == CCI_RD_RQ_TAGW'(CCI_RD_WINDOW_SIZE-1))) begin + if (cci_rd_req_fire && (cci_rd_req_tag == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1))) begin cci_rd_req_wait <= 1; // end current request batch end - if (cci_rd_rsp_fire && (cci_rd_rsp_ctr == CCI_RD_RQ_TAGW'(CCI_RD_WINDOW_SIZE-1))) begin + if (cci_rd_rsp_fire && (cci_rd_rsp_ctr == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1))) begin cci_rd_req_wait <= 0; // begin new request batch end end @@ -708,7 +704,8 @@ always @(posedge clk) begin cci_rd_req_ctr <= 0; cci_rd_rsp_ctr <= 0; cci_mem_wr_req_ctr <= 0; - cci_mem_wr_req_addr_unqual <= cmd_mem_addr; + cci_mem_wr_req_addr_base <= cmd_mem_addr; + cmd_write_done <= 0; end if (cci_rd_req_fire) begin @@ -720,7 +717,7 @@ always @(posedge clk) begin end if (cci_rd_rsp_fire) begin - cci_rd_rsp_ctr <= cci_rd_rsp_ctr + CCI_RD_RQ_TAGW'(1); + cci_rd_rsp_ctr <= cci_rd_rsp_ctr + CCI_RD_QUEUE_TAGW'(1); `ifdef DBG_PRINT_OPAE $display("%t: CCI Rd Rsp: idx=%0d, ctr=%0d, data=%0h", $time, cci_rd_rsp_tag, cci_rd_rsp_ctr, cp2af_sRxPort.c0.data); `endif @@ -733,13 +730,18 @@ always @(posedge clk) begin end if (cci_mem_wr_req_fire) begin - cci_mem_wr_req_addr_unqual <= cci_mem_wr_req_addr_unqual + ((CCI_RD_RQ_TAGW'(cci_mem_wr_req_ctr) == CCI_RD_RQ_TAGW'(CCI_RD_WINDOW_SIZE-1)) ? CCI_ADDR_WIDTH'(CCI_RD_WINDOW_SIZE) : CCI_ADDR_WIDTH'(0)); - cci_mem_wr_req_ctr <= cci_mem_wr_req_ctr + CCI_ADDR_WIDTH'(1); + if (CCI_RD_QUEUE_TAGW'(cci_mem_wr_req_ctr) == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1)) begin + cci_mem_wr_req_addr_base <= cci_mem_wr_req_addr_base + CCI_ADDR_WIDTH'(CCI_RD_WINDOW_SIZE); + end + cci_mem_wr_req_ctr <= cci_mem_wr_req_ctr + CCI_ADDR_WIDTH'(1); + if (cci_mem_wr_req_ctr == (cmd_data_size-1)) begin + cmd_write_done <= 1; + end end end VX_fifo_queue #( - .DATAW (CCI_RD_RQ_DATAW), + .DATAW (CCI_RD_QUEUE_DATAW), .SIZE (CCI_RD_QUEUE_SIZE) ) cci_rd_req_queue ( .clk (clk), @@ -779,11 +781,13 @@ VX_fifo_queue #( reg [CCI_ADDR_WIDTH-1:0] cci_mem_rd_req_ctr; reg [CCI_ADDR_WIDTH-1:0] cci_mem_rd_req_addr; -reg [CCI_ADDR_WIDTH-1:0] cci_wr_req_ctr; +reg cci_mem_rd_req_done; +reg [CCI_ADDR_WIDTH-1:0] cci_wr_req_ctr; reg cci_wr_req_fire; t_ccip_clAddr cci_wr_req_addr; t_ccip_clData cci_wr_req_data; +reg cci_wr_req_done; always @(*) begin af2cp_sTxPort.c1.valid = cci_wr_req_fire; @@ -818,12 +822,12 @@ VX_pending_size #( `UNUSED_VAR (cci_pending_writes) assign cci_mem_rd_req_valid = (STATE_READ == state) - && (cci_mem_rd_req_ctr != cmd_data_size); + && !cci_mem_rd_req_done; assign cci_mem_rsp_ready = !cp2af_sRxPort.c1TxAlmFull && !cci_pending_writes_full; -assign cmd_read_done = (0 == cci_wr_req_ctr) +assign cmd_read_done = cci_wr_req_done && cci_pending_writes_empty; // Send write requests to CCI @@ -839,12 +843,17 @@ begin && (CMD_MEM_READ == cmd_type)) begin cci_mem_rd_req_ctr <= 0; cci_mem_rd_req_addr <= cmd_mem_addr; + cci_mem_rd_req_done <= 0; cci_wr_req_ctr <= cmd_data_size; + cci_wr_req_done <= 0; end if (cci_mem_rd_req_fire) begin cci_mem_rd_req_addr <= cci_mem_rd_req_addr + CCI_ADDR_WIDTH'(1); cci_mem_rd_req_ctr <= cci_mem_rd_req_ctr + CCI_ADDR_WIDTH'(1); + if (cci_mem_rd_req_ctr == (cmd_data_size-1)) begin + cci_mem_rd_req_done <= 1; + end end cci_wr_req_addr <= cmd_io_addr + t_ccip_clAddr'(cci_mem_rsp_tag); @@ -853,6 +862,9 @@ begin if (cci_wr_req_fire) begin assert(cci_wr_req_ctr != 0); cci_wr_req_ctr <= cci_wr_req_ctr - CCI_ADDR_WIDTH'(1); + if (cci_wr_req_ctr == CCI_ADDR_WIDTH'(1)) begin + cci_wr_req_done <= 1; + end `ifdef DBG_PRINT_OPAE $display("%t: CCI Wr Req: addr=%0h, rem=%0d, pending=%0d, data=%0h", $time, cci_wr_req_addr, (cci_wr_req_ctr - 1), cci_pending_writes, af2cp_sTxPort.c1.data); `endif @@ -867,9 +879,10 @@ end //-- -assign cci_mem_req_rw = (CMD_MEM_WRITE == state); +assign cci_mem_req_rw = state[0]; // STATE_WRITE=00, STATE_WRITE=01 assign cci_mem_req_valid = cci_mem_req_rw ? cci_mem_wr_req_valid : cci_mem_rd_req_valid; assign cci_mem_req_addr = cci_mem_req_rw ? cci_mem_wr_req_addr : cci_mem_rd_req_addr; +assign cci_mem_req_data = cci_rdq_dout[CCI_RD_QUEUE_DATAW-1:CCI_ADDR_WIDTH]; assign cci_mem_req_tag = cci_mem_req_rw ? cci_mem_wr_req_ctr : cci_mem_rd_req_ctr; // Vortex ///////////////////////////////////////////////////////////////////// @@ -920,7 +933,7 @@ assign cout_char = vx_mem_req_data_ar[cout_tid]; assign vx_mem_is_cout = (vx_mem_req_addr == `VX_MEM_ADDR_WIDTH'(`IO_COUT_ADDR >> (32 - `VX_MEM_ADDR_WIDTH))); wire cout_q_push = vx_mem_req_valid - && vx_mem_en + && vx_started && vx_mem_is_cout && ~cout_q_full; diff --git a/hw/rtl/cache/VX_bank.v b/hw/rtl/cache/VX_bank.v index 5f1b80d3..cc953f8c 100644 --- a/hw/rtl/cache/VX_bank.v +++ b/hw/rtl/cache/VX_bank.v @@ -475,8 +475,7 @@ module VX_bank #( end VX_skid_buffer #( - .DATAW (CORE_TAG_WIDTH + (1 + `WORD_WIDTH + `REQS_BITS) * NUM_PORTS), - .USE_FASTREG (NUM_BANKS == 1) + .DATAW (CORE_TAG_WIDTH + (1 + `WORD_WIDTH + `REQS_BITS) * NUM_PORTS) ) core_rsp_req ( .clk (clk), .reset (reset), diff --git a/hw/rtl/cache/VX_cache_core_rsp_merge.v b/hw/rtl/cache/VX_cache_core_rsp_merge.v index 1ffbaa23..71a8b85e 100644 --- a/hw/rtl/cache/VX_cache_core_rsp_merge.v +++ b/hw/rtl/cache/VX_cache_core_rsp_merge.v @@ -106,8 +106,7 @@ module VX_cache_core_rsp_merge #( wire core_rsp_valid_any = (| per_bank_core_rsp_valid); VX_skid_buffer #( - .DATAW (NUM_REQS + CORE_TAG_WIDTH + (NUM_REQS *`WORD_WIDTH)), - .USE_FASTREG (1) + .DATAW (NUM_REQS + CORE_TAG_WIDTH + (NUM_REQS *`WORD_WIDTH)) ) pipe_reg ( .clk (clk), .reset (reset), @@ -155,8 +154,7 @@ module VX_cache_core_rsp_merge #( for (genvar i = 0; i < NUM_REQS; i++) begin VX_skid_buffer #( - .DATAW (CORE_TAG_WIDTH + `WORD_WIDTH), - .USE_FASTREG (1) + .DATAW (CORE_TAG_WIDTH + `WORD_WIDTH) ) pipe_reg ( .clk (clk), .reset (reset), diff --git a/hw/rtl/libs/VX_priority_encoder.v b/hw/rtl/libs/VX_priority_encoder.v index 4810fe0e..57e6ff69 100644 --- a/hw/rtl/libs/VX_priority_encoder.v +++ b/hw/rtl/libs/VX_priority_encoder.v @@ -48,7 +48,7 @@ module VX_priority_encoder #( VX_onehot_encoder #( .N (N), .REVERSE (REVERSE) - ) b ( + ) onehot_encoder ( .data_in (onehot), .data_out (index), `UNUSED_PIN (valid) diff --git a/hw/rtl/libs/VX_rr_arbiter.v b/hw/rtl/libs/VX_rr_arbiter.v index 69406011..c7398ba2 100644 --- a/hw/rtl/libs/VX_rr_arbiter.v +++ b/hw/rtl/libs/VX_rr_arbiter.v @@ -3,7 +3,8 @@ module VX_rr_arbiter #( parameter NUM_REQS = 1, parameter LOCK_ENABLE = 0, - parameter LOG_NUM_REQS = $clog2(NUM_REQS) + parameter LOG_NUM_REQS = $clog2(NUM_REQS), + parameter FAST = 1 ) ( input wire clk, input wire reset, @@ -23,6 +24,58 @@ module VX_rr_arbiter #( assign grant_onehot = requests; assign grant_valid = requests[0]; + end else if (FAST == 1) begin + + wire [NUM_REQS-1:0] req_masked; + wire [NUM_REQS-1:0] grant, grant_masked, grant_unmasked; + /* verilator lint_off UNOPTFLAT */ + wire [NUM_REQS-1:0] mask_higher_pri_reqs; + /* verilator lint_off UNOPTFLAT */ + wire [NUM_REQS-1:0] unmask_higher_pri_reqs; + wire no_req_masked; + reg [NUM_REQS-1:0] pointer_reg; + + // Simple priority arbitration for masked portion + assign req_masked = requests & pointer_reg; + assign mask_higher_pri_reqs[NUM_REQS-1:1] = mask_higher_pri_reqs[NUM_REQS-2:0] | req_masked[NUM_REQS-2:0]; + assign mask_higher_pri_reqs[0] = 1'b0; + assign grant_masked[NUM_REQS-1:0] = req_masked[NUM_REQS-1:0] & ~mask_higher_pri_reqs[NUM_REQS-1:0]; + + // Simple priority arbitration for unmasked portion + assign unmask_higher_pri_reqs[NUM_REQS-1:1] = unmask_higher_pri_reqs[NUM_REQS-2:0] | requests[NUM_REQS-2:0]; + assign unmask_higher_pri_reqs[0] = 1'b0; + assign grant_unmasked[NUM_REQS-1:0] = requests[NUM_REQS-1:0] & ~unmask_higher_pri_reqs[NUM_REQS-1:0]; + + // Use grant_masked if there is any there, otherwise use grant_unmasked. + assign no_req_masked = ~(| req_masked); + assign grant = ({NUM_REQS{no_req_masked}} & grant_unmasked) | grant_masked; + + // Generate arbiter pointer update + wire mask_ptr_sel = (| req_masked) & (!LOCK_ENABLE || enable); + wire unmask_ptr_sel = (| requests) & (!LOCK_ENABLE || enable); + + // Pointer update + always @(posedge clk) begin + if (reset) begin + pointer_reg <= {NUM_REQS{1'b1}}; + end else if (mask_ptr_sel) begin // select if masked arbiter used + pointer_reg <= mask_higher_pri_reqs; + end else if (unmask_ptr_sel) begin // select if unmasked arbiter used + pointer_reg <= unmask_higher_pri_reqs; + end + end + + VX_onehot_encoder #( + .N (NUM_REQS) + ) onehot_encoder ( + .data_in (grant), + .data_out (grant_index), + `UNUSED_PIN (valid) + ); + + assign grant_onehot = grant; + assign grant_valid = (| requests); + end else begin reg [LOG_NUM_REQS-1:0] grant_table [NUM_REQS-1:0]; diff --git a/hw/rtl/libs/VX_skid_buffer.v b/hw/rtl/libs/VX_skid_buffer.v index e770a852..c31a4ea8 100644 --- a/hw/rtl/libs/VX_skid_buffer.v +++ b/hw/rtl/libs/VX_skid_buffer.v @@ -83,7 +83,7 @@ module VX_skid_buffer #( end if (pop && !use_buffer) begin data_out_r <= data_in; - end else if (pop) begin + end else if (ready_out) begin data_out_r <= buffer; end end diff --git a/hw/syn/opae/Makefile b/hw/syn/opae/Makefile index 10034c00..4a35b54d 100644 --- a/hw/syn/opae/Makefile +++ b/hw/syn/opae/Makefile @@ -76,16 +76,16 @@ $(FPGA_BUILD_DIR)_4c/build/dcp.qpf: afu_synth_setup -s setup.cfg $(FPGA_BUILD_DIR)_4c $(FPGA_BUILD_DIR)_8c/build/dcp.qpf: - afu_synth_setup -s setup8.cfg $(FPGA_BUILD_DIR)_8c + afu_synth_setup -s setup.cfg $(FPGA_BUILD_DIR)_8c $(FPGA_BUILD_DIR)_16c/build/dcp.qpf: - afu_synth_setup -s setup16.cfg $(FPGA_BUILD_DIR)_16c + afu_synth_setup -s setup.cfg $(FPGA_BUILD_DIR)_16c $(FPGA_BUILD_DIR)_32c/build/dcp.qpf: - afu_synth_setup -s setup16.cfg $(FPGA_BUILD_DIR)_32c + afu_synth_setup -s setup.cfg $(FPGA_BUILD_DIR)_32c $(FPGA_BUILD_DIR)_64c/build/dcp.qpf: - afu_synth_setup -s setup16.cfg $(FPGA_BUILD_DIR)_64c + afu_synth_setup -s setup.cfg $(FPGA_BUILD_DIR)_64c gen-sources-1c: ./gen_sources.sh $(CFLAGS) $(CONFIG1) > sources.txt diff --git a/hw/syn/opae/setup16.cfg b/hw/syn/opae/setup16.cfg deleted file mode 100644 index e29575ee..00000000 --- a/hw/syn/opae/setup16.cfg +++ /dev/null @@ -1,7 +0,0 @@ -+define+SYNTHESIS -+define+QUARTUS - -vortex_afu16.json -QI:vortex_afu.qsf - -C:sources.txt \ No newline at end of file diff --git a/hw/syn/opae/setup8.cfg b/hw/syn/opae/setup8.cfg deleted file mode 100644 index 36c42484..00000000 --- a/hw/syn/opae/setup8.cfg +++ /dev/null @@ -1,7 +0,0 @@ -+define+SYNTHESIS -+define+QUARTUS - -vortex_afu8.json -QI:vortex_afu.qsf - -C:sources.txt \ No newline at end of file diff --git a/hw/syn/opae/vortex_afu.json b/hw/syn/opae/vortex_afu.json index 1d49bf51..29bc25a9 100644 --- a/hw/syn/opae/vortex_afu.json +++ b/hw/syn/opae/vortex_afu.json @@ -2,8 +2,8 @@ "version": 1, "afu-image": { "power": 0, - "clock-frequency-high": "auto-220", - "clock-frequency-low": "auto-220", + "clock-frequency-high": "auto-210", + "clock-frequency-low": "auto-210", "cmd-mem-read": 1, "cmd-mem-write": 2, diff --git a/hw/syn/opae/vortex_afu16.json b/hw/syn/opae/vortex_afu16.json deleted file mode 100644 index 0e6dd4c9..00000000 --- a/hw/syn/opae/vortex_afu16.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "version": 1, - "afu-image": { - "power": 0, - "clock-frequency-high": "auto-200", - "clock-frequency-low": "auto-200", - - "cmd-mem-read": 1, - "cmd-mem-write": 2, - "cmd-run": 3, - "cmd-csr-read": 4, - "cmd-csr-write": 5, - - "mmio-cmd-type": 10, - "mmio-io-addr": 12, - "mmio-mem-addr": 14, - "mmio-data-size": 16, - "mmio-status": 18, - "mmio-scope-read": 20, - "mmio-scope-write": 22, - "mmio-dev-caps": 24, - - "afu-top-interface": - { - "class": "ccip_std_afu_avalon_mm", - "module-ports" : - [ - { - "class": "cci-p", - "params": - { - "clock": "uClk_usr" - } - }, - { - "class": "local-memory", - "params": - { - "clock": "uClk_usr" - } - } - ] - }, - "accelerator-clusters": - [ - { - "name": "vortex_afu", - "total-contexts": 1, - "accelerator-type-uuid": "35f9452b-25c2-434c-93d5-6f8c60db361c" - } - ] - } -} diff --git a/hw/syn/opae/vortex_afu8.json b/hw/syn/opae/vortex_afu8.json deleted file mode 100644 index e4583a37..00000000 --- a/hw/syn/opae/vortex_afu8.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": 1, - "afu-image": { - "power": 0, - "clock-frequency-high": "auto-210", - "clock-frequency-low": "auto-210", - - "cmd-mem-read": 1, - "cmd-mem-write": 2, - "cmd-run": 3, - "cmd-csr-read": 4, - "cmd-csr-write": 5, - - "mmio-cmd-type": 10, - "mmio-io-addr": 12, - "mmio-mem-addr": 14, - "mmio-data-size": 16, - "mmio-status": 18, - "mmio-scope-read": 20, - "mmio-scope-write": 22, - "mmio-dev-caps": 24, - - "afu-top-interface": - { - "class": "ccip_std_afu_avalon_mm", - "module-ports" : - [ - { - "class": "cci-p", - "params": - { - "clock": "uClk_usr" - } - }, - { - "class": "local-memory", - "params": - { - "clock": "uClk_usr" - } - } - ] - }, - "accelerator-clusters": - [ - { - "name": "vortex_afu", - "total-contexts": 1, - "accelerator-type-uuid": "35f9452b-25c2-434c-93d5-6f8c60db361c" - } - ] - } - } - \ No newline at end of file From f8dd44d1806fb19418551eb6a97e28d7c0690d1a Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Thu, 17 Jun 2021 21:37:41 -0700 Subject: [PATCH 02/13] minor update --- tests/regression/io_addr/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/regression/io_addr/main.cpp b/tests/regression/io_addr/main.cpp index 4c43838c..7899aa2a 100644 --- a/tests/regression/io_addr/main.cpp +++ b/tests/regression/io_addr/main.cpp @@ -183,9 +183,10 @@ int main(int argc, char *argv[]) { // allocate shared memory std::cout << "allocate shared memory" << std::endl; - uint32_t staging_buf_size = std::max(src_buf_size, + uint32_t staging_buf_size = std::max(NUM_ADDRS * sizeof(uint32_t), + std::max(src_buf_size, std::max(dst_buf_size, - sizeof(kernel_arg_t))); + sizeof(kernel_arg_t)))); RT_CHECK(vx_alloc_shared_mem(device, staging_buf_size, &staging_buf)); // upload kernel argument From 65a37044796aec3772a5923cb39a447469834c81 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Fri, 18 Jun 2021 01:18:31 -0700 Subject: [PATCH 03/13] minor update --- hw/rtl/VX_ibuffer.v | 5 ++++- hw/rtl/VX_scoreboard.v | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hw/rtl/VX_ibuffer.v b/hw/rtl/VX_ibuffer.v index 8c6a4d08..b94eead8 100644 --- a/hw/rtl/VX_ibuffer.v +++ b/hw/rtl/VX_ibuffer.v @@ -109,8 +109,10 @@ module VX_ibuffer #( // schedule the next instruction to issue always @(*) begin - deq_valid_n = 1; if (num_warps > 1) begin + deq_valid_n = 1; + deq_wid_n = 'x; + deq_instr_n = 'x; for (integer i = 0; i < `NUM_WARPS; i++) begin if (schedule_table[i]) begin deq_wid_n = `NW_BITS'(i); @@ -119,6 +121,7 @@ module VX_ibuffer #( end end end else if (1 == num_warps && !(deq_fire && q_alm_empty[deq_wid])) begin + deq_valid_n = 1; deq_wid_n = deq_wid; deq_instr_n = deq_fire ? q_data_prev[deq_wid] : q_data_out[deq_wid]; end else begin diff --git a/hw/rtl/VX_scoreboard.v b/hw/rtl/VX_scoreboard.v index 6b161a1f..cca7c007 100644 --- a/hw/rtl/VX_scoreboard.v +++ b/hw/rtl/VX_scoreboard.v @@ -14,7 +14,7 @@ module VX_scoreboard #( reg is_reg_busy; always @(*) begin - is_reg_busy = 0; + is_reg_busy = 'x; for (integer i = 0; i < `NUM_WARPS; ++i) begin if (ibuf_deq_if.wid == `NW_BITS'(i)) begin is_reg_busy = | (inuse_regs[i] & ibuf_deq_if.used_regs); From c331da5ff75e4ab800c8cedb8954f686360b568f Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Tue, 22 Jun 2021 09:02:41 -0700 Subject: [PATCH 04/13] adding fast DPI implemntation of imul and idiv --- driver/opae/vlsim/Makefile | 4 ++ driver/rtlsim/Makefile | 4 ++ hw/dpi/util_dpi.cpp | 52 +++++++++++++++++++++++++ hw/dpi/util_dpi.vh | 3 ++ hw/rtl/VX_muldiv.v | 79 +++++++++++++++++++++++++++++++++++--- 5 files changed, 136 insertions(+), 6 deletions(-) diff --git a/driver/opae/vlsim/Makefile b/driver/opae/vlsim/Makefile index 58d2fcd4..fe3ca8bb 100644 --- a/driver/opae/vlsim/Makefile +++ b/driver/opae/vlsim/Makefile @@ -75,6 +75,10 @@ endif VL_FLAGS += -DNOPAE CFLAGS += -DNOPAE +# ALU backend +VL_FLAGS += -DIMUL_DPI +VL_FLAGS += -DIDIV_DPI + # FPU backend FPU_CORE ?= FPU_DPI VL_FLAGS += -D$(FPU_CORE) diff --git a/driver/rtlsim/Makefile b/driver/rtlsim/Makefile index 76e7185d..65eb1ac0 100644 --- a/driver/rtlsim/Makefile +++ b/driver/rtlsim/Makefile @@ -64,6 +64,10 @@ ifdef PERF CFLAGS += -DPERF_ENABLE endif +# ALU backend +VL_FLAGS += -DIMUL_DPI +VL_FLAGS += -DIDIV_DPI + # FPU backend FPU_CORE ?= FPU_DPI VL_FLAGS += -D$(FPU_CORE) diff --git a/hw/dpi/util_dpi.cpp b/hw/dpi/util_dpi.cpp index e9baa90c..9469bc6e 100644 --- a/hw/dpi/util_dpi.cpp +++ b/hw/dpi/util_dpi.cpp @@ -9,6 +9,9 @@ #include "VX_config.h" extern "C" { + void dpi_imul(int a, int b, bool is_signed_a, bool is_signed_b, int* resultl, int* resulth); + void dpi_idiv(int a, int b, bool is_signed, int* quotient, int* remainder); + int dpi_register(); void dpi_assert(int inst, bool cond, int delay); } @@ -81,4 +84,53 @@ void dpi_assert(int inst, bool cond, int delay) { printf("delayed assertion at %s!\n", svGetNameFromScope(svGetScope())); std::abort(); } +} + +void dpi_imul(int a, int b, bool is_signed_a, bool is_signed_b, int* resultl, int* resulth) { + uint64_t first = a; + uint64_t second = b; + + if (is_signed_a && (a & 0x80000000)) { + first |= 0xFFFFFFFF00000000; + } + + if (is_signed_b && (b & 0x80000000)) { + second |= 0xFFFFFFFF00000000; + } + + uint64_t result; + if (is_signed_a || is_signed_b) { + result = (int64_t)first * (int64_t)second; + } else { + result = first * second; + } + + *resultl = result & 0xFFFFFFFF; + *resulth = (result >> 32) & 0xFFFFFFFF; +} + +void dpi_idiv(int a, int b, bool is_signed, int* quotient, int* remainder) { + uint32_t dividen = a; + uint32_t divisor = b; + + if (is_signed) { + if (b == 0) { + *quotient = -1; + *remainder = dividen; + } else if (dividen == 0x80000000 && divisor == 0xffffffff) { + *remainder = 0; + *quotient = dividen; + } else { + *quotient = (int32_t)dividen / (int32_t)divisor; + *remainder = (int32_t)dividen % (int32_t)divisor; + } + } else { + if (b == 0) { + *quotient = -1; + *remainder = dividen; + } else { + *quotient = dividen / divisor; + *remainder = dividen % divisor; + } + } } \ No newline at end of file diff --git a/hw/dpi/util_dpi.vh b/hw/dpi/util_dpi.vh index 77294974..553641a7 100644 --- a/hw/dpi/util_dpi.vh +++ b/hw/dpi/util_dpi.vh @@ -1,6 +1,9 @@ `ifndef UTIL_DPI `define UTIL_DPI +import "DPI-C" context function void dpi_imul(input int a, input int b, input logic is_signed_a, input logic is_signed_b, output int resultl, output int resulth); +import "DPI-C" context function void dpi_idiv(input int a, input int b, input logic is_signed, output int quotient, output int remainder); + import "DPI-C" context function int dpi_register(); import "DPI-C" context function void dpi_assert(int inst, input logic cond, input int delay); diff --git a/hw/rtl/VX_muldiv.v b/hw/rtl/VX_muldiv.v index 48792ff8..36ba9d28 100644 --- a/hw/rtl/VX_muldiv.v +++ b/hw/rtl/VX_muldiv.v @@ -1,5 +1,9 @@ `include "VX_define.vh" +`ifndef SYNTHESIS +`include "util_dpi.vh" +`endif + module VX_muldiv ( input wire clk, input wire reset, @@ -43,13 +47,42 @@ module VX_muldiv ( wire mul_valid_out; wire mul_valid_in = valid_in && !is_div_op; wire mul_ready_in = ~stall_out || ~mul_valid_out; - - wire is_mulh_in = (alu_op != `MUL_MUL); + + wire is_mulh_in = (alu_op != `MUL_MUL); + wire is_signed_mul_a = (alu_op != `MUL_MULHU); + wire is_signed_mul_b = (alu_op != `MUL_MULHU && alu_op != `MUL_MULHSU); + +`ifdef IMUL_DPI + + wire [`NUM_THREADS-1:0][31:0] mul_result_tmp; + + for (genvar i = 0; i < `NUM_THREADS; i++) begin + wire [31:0] mul_resultl, mul_resulth; + always @(*) begin + dpi_imul (alu_in1[i], alu_in2[i], is_signed_mul_a, is_signed_mul_b, mul_resultl, mul_resulth); + end + assign mul_result_tmp[i] = is_mulh_in ? mul_resulth : mul_resultl; + end + + VX_shift_register #( + .DATAW (1 + `NW_BITS + `NUM_THREADS + 32 + `NR_BITS + 1 + (`NUM_THREADS * 32)), + .DEPTH (`LATENCY_IMUL), + .RESETW (1) + ) mul_shift_reg ( + .clk(clk), + .reset (reset), + .enable (mul_ready_in), + .data_in ({mul_valid_in, wid_in, tmask_in, PC_in, rd_in, wb_in, mul_result_tmp}), + .data_out ({mul_valid_out, mul_wid_out, mul_tmask_out, mul_PC_out, mul_rd_out, mul_wb_out, mul_result}) + ); + +`else + wire is_mulh_out; for (genvar i = 0; i < `NUM_THREADS; i++) begin - wire [32:0] mul_in1 = {(alu_op != `MUL_MULHU) & alu_in1[i][31], alu_in1[i]}; - wire [32:0] mul_in2 = {(alu_op != `MUL_MULHU && alu_op != `MUL_MULHSU) & alu_in2[i][31], alu_in2[i]}; + wire [32:0] mul_in1 = {is_signed_mul_a & alu_in1[i][31], alu_in1[i]}; + wire [32:0] mul_in2 = {is_signed_mul_b & alu_in2[i][31], alu_in2[i]}; `IGNORE_WARNINGS_BEGIN wire [65:0] mul_result_tmp; `IGNORE_WARNINGS_END @@ -83,9 +116,11 @@ module VX_muldiv ( .data_out ({mul_valid_out, mul_wid_out, mul_tmask_out, mul_PC_out, mul_rd_out, mul_wb_out, is_mulh_out}) ); +`endif + /////////////////////////////////////////////////////////////////////////// - wire [`NUM_THREADS-1:0][31:0] div_result_tmp, rem_result_tmp; + wire [`NUM_THREADS-1:0][31:0] div_result; wire [`NW_BITS-1:0] div_wid_out; wire [`NUM_THREADS-1:0] div_tmask_out; wire [31:0] div_PC_out; @@ -98,6 +133,36 @@ module VX_muldiv ( wire div_ready_out = ~stall_out && ~mul_valid_out; // arbitration prioritizes MUL wire div_ready_in; wire div_valid_out; + +`ifdef IDIV_DPI + + wire [`NUM_THREADS-1:0][31:0] div_result_tmp; + + for (genvar i = 0; i < `NUM_THREADS; i++) begin + wire [31:0] div_quotient, div_remainder; + always @(*) begin + dpi_idiv (alu_in1[i], alu_in2[i], is_signed_div, div_quotient, div_remainder); + end + assign div_result_tmp[i] = is_rem_op_in ? div_remainder : div_quotient; + end + + VX_shift_register #( + .DATAW (1 + `NW_BITS + `NUM_THREADS + 32 + `NR_BITS + 1 + (`NUM_THREADS * 32)), + .DEPTH (`LATENCY_IMUL), + .RESETW (1) + ) div_shift_reg ( + .clk(clk), + .reset (reset), + .enable (div_ready_in), + .data_in ({div_valid_in, wid_in, tmask_in, PC_in, rd_in, wb_in, div_result_tmp}), + .data_out ({div_valid_out, div_wid_out, div_tmask_out, div_PC_out, div_rd_out, div_wb_out, div_result}) + ); + + assign div_ready_in = div_ready_out || ~div_valid_out; + +`else + + wire [`NUM_THREADS-1:0][31:0] div_result_tmp, rem_result_tmp; wire is_rem_op_out; VX_serial_div #( @@ -123,7 +188,9 @@ module VX_muldiv ( .tag_out ({div_wid_out, div_tmask_out, div_PC_out, div_rd_out, div_wb_out, is_rem_op_out}) ); - wire [`NUM_THREADS-1:0][31:0] div_result = is_rem_op_out ? rem_result_tmp : div_result_tmp; + assign div_result = is_rem_op_out ? rem_result_tmp : div_result_tmp; + +`endif /////////////////////////////////////////////////////////////////////////// From 237206781714f3e569b43f09bf206e66c649ff1d Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Tue, 22 Jun 2021 09:30:36 -0700 Subject: [PATCH 05/13] minor update --- ci/regression.sh | 8 +- driver/opae/vlsim/opae_sim.cpp | 4 +- driver/opae/vlsim/opae_sim.h | 10 +- hw/rtl/VX_config.vh | 10 +- hw/simulate/simulator.cpp | 50 +- hw/simulate/simulator.h | 12 +- hw/unit_tests/cache/trace.vcd | 13998 ---------------- tests/opencl/nearn/Makefile | 14 +- tests/opencl/nearn/inputgen/Makefile | 5 + tests/opencl/nearn/inputgen/gen_dataset.sh | 12 + .../nearn/inputgen/gen_dataset_multifile.sh | 13 + tests/opencl/nearn/inputgen/hurricanegen.c | 105 + tests/opencl/nearn/main.cc | 12 +- 13 files changed, 217 insertions(+), 14036 deletions(-) delete mode 100644 hw/unit_tests/cache/trace.vcd create mode 100644 tests/opencl/nearn/inputgen/Makefile create mode 100644 tests/opencl/nearn/inputgen/gen_dataset.sh create mode 100644 tests/opencl/nearn/inputgen/gen_dataset_multifile.sh create mode 100644 tests/opencl/nearn/inputgen/hurricanegen.c diff --git a/ci/regression.sh b/ci/regression.sh index 16030ccf..243d3597 100755 --- a/ci/regression.sh +++ b/ci/regression.sh @@ -11,6 +11,9 @@ make -C tests/riscv/isa run make -C tests/opencl run make -C simX run-tests +# basic pipeline stress +./ci/travis_run.py ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=sgemm --args="-n128" + # warp/threads configurations ./ci/travis_run.py ./ci/blackbox.sh --driver=rtlsim --cores=1 --warps=2 --threads=2 --app=demo ./ci/travis_run.py ./ci/blackbox.sh --driver=rtlsim --cores=1 --warps=2 --threads=8 --app=demo @@ -41,7 +44,10 @@ CONFIGS=-DEXT_F_DISABLE make -C hw/simulate # disable shared memory CONFIGS=-DSM_ENABLE=0 make -C hw/simulate -# using FPNEW core +# using Default FPU core +FPU_CORE=FPU_DEFAULT ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=dogfood + +# using FPNEW FPU core FPU_CORE=FPU_FPNEW ./ci/blackbox.sh --driver=rtlsim --cores=1 --app=dogfood # test 128-bit MEM block diff --git a/driver/opae/vlsim/opae_sim.cpp b/driver/opae/vlsim/opae_sim.cpp index 5d171013..d96023bf 100644 --- a/driver/opae/vlsim/opae_sim.cpp +++ b/driver/opae/vlsim/opae_sim.cpp @@ -159,7 +159,7 @@ void opae_sim::reset() { vortex_afu_->vcp2af_sRxPort_c0_TxAlmFull = 0; vortex_afu_->vcp2af_sRxPort_c1_TxAlmFull = 0; - for (int b = 0; b < PLATFORM_PARAM_LOCAL_MEMORY_BANKS; ++b) { + for (int b = 0; b < MEMORY_BANKS; ++b) { mem_reads_[b].clear(); vortex_afu_->avs_readdatavalid[b] = 0; vortex_afu_->avs_waitrequest[b] = 0; @@ -284,7 +284,7 @@ void opae_sim::sTxPort_bus() { } void opae_sim::avs_bus() { - for (int b = 0; b < PLATFORM_PARAM_LOCAL_MEMORY_BANKS; ++b) { + for (int b = 0; b < MEMORY_BANKS; ++b) { // update memory responses schedule for (auto& rsp : mem_reads_[b]) { if (rsp.cycles_left > 0) diff --git a/driver/opae/vlsim/opae_sim.h b/driver/opae/vlsim/opae_sim.h index bf63d7c3..46b165dd 100644 --- a/driver/opae/vlsim/opae_sim.h +++ b/driver/opae/vlsim/opae_sim.h @@ -18,6 +18,14 @@ #include #include +#ifndef MEMORY_BANKS + #ifdef PLATFORM_PARAM_LOCAL_MEMORY_BANKS + #define MEMORY_BANKS PLATFORM_PARAM_LOCAL_MEMORY_BANKS + #else + #define MEMORY_BANKS 2 + #endif +#endif + #undef MEM_BLOCK_SIZE #define MEM_BLOCK_SIZE (PLATFORM_PARAM_LOCAL_MEMORY_DATA_WIDTH / 8) @@ -81,7 +89,7 @@ private: std::unordered_map host_buffers_; int64_t host_buffer_ids_; - std::list mem_reads_ [PLATFORM_PARAM_LOCAL_MEMORY_BANKS]; + std::list mem_reads_ [MEMORY_BANKS]; std::list cci_reads_; diff --git a/hw/rtl/VX_config.vh b/hw/rtl/VX_config.vh index 25ef3f1b..79ed1743 100644 --- a/hw/rtl/VX_config.vh +++ b/hw/rtl/VX_config.vh @@ -117,7 +117,7 @@ `endif `ifndef LATENCY_FCVT -`define LATENCY_FCVT 4 +`define LATENCY_FCVT 5 `endif // CSR Addresses ////////////////////////////////////////////////////////////// @@ -231,7 +231,7 @@ // Size of LSU Request Queue `ifndef LSUQ_SIZE -`define LSUQ_SIZE 8 +`define LSUQ_SIZE (`NUM_WARPS * 2) `endif // Size of FPU Request Queue @@ -300,7 +300,7 @@ // Memory Response Queue Size `ifndef DMRSQ_SIZE -`define DMRSQ_SIZE `MAX(4, (`DNUM_BANKS * 2)) +`define DMRSQ_SIZE `MAX(4, `DNUM_BANKS) `endif // SM Configurable Knobs ////////////////////////////////////////////////////// @@ -329,7 +329,7 @@ // Size of cache in bytes `ifndef L2CACHE_SIZE -`define L2CACHE_SIZE 65536 +`define L2CACHE_SIZE 131072 `endif // Number of banks @@ -361,7 +361,7 @@ // Size of cache in bytes `ifndef L3CACHE_SIZE -`define L3CACHE_SIZE 131072 +`define L3CACHE_SIZE 1048576 `endif // Number of banks diff --git a/hw/simulate/simulator.cpp b/hw/simulate/simulator.cpp index 86f7107d..6099f182 100644 --- a/hw/simulate/simulator.cpp +++ b/hw/simulate/simulator.cpp @@ -69,12 +69,18 @@ Simulator::~Simulator() { void Simulator::attach_ram(RAM* ram) { ram_ = ram; - mem_rsp_vec_.clear(); + for (int b = 0; b < MEMORY_BANKS; ++b) { + mem_rsp_vec_[b].clear(); + } + last_mem_rsp_bank_ = 0; } void Simulator::reset() { print_bufs_.clear(); - mem_rsp_vec_.clear(); + for (int b = 0; b < MEMORY_BANKS; ++b) { + mem_rsp_vec_[b].clear(); + } + last_mem_rsp_bank_ = 0; mem_rsp_active_ = false; @@ -128,42 +134,54 @@ void Simulator::eval_mem_bus() { } // update memory responses schedule - for (auto& rsp : mem_rsp_vec_) { - if (rsp.cycles_left > 0) - rsp.cycles_left -= 1; + for (int b = 0; b < MEMORY_BANKS; ++b) { + for (auto& rsp : mem_rsp_vec_[b]) { + if (rsp.cycles_left > 0) + rsp.cycles_left -= 1; + } } + bool has_response = false; + // schedule memory responses in FIFO order - std::list::iterator mem_rsp_it(mem_rsp_vec_.end()); - if (!mem_rsp_vec_.empty() - && (0 == mem_rsp_vec_.begin()->cycles_left)) { - mem_rsp_it = mem_rsp_vec_.begin(); + for (int i = 0; i < MEMORY_BANKS; ++i) { + uint32_t b = (i + last_mem_rsp_bank_ + 1) % MEMORY_BANKS; + if (!mem_rsp_vec_[b].empty() + && (0 == mem_rsp_vec_[b].begin()->cycles_left)) { + has_response = true; + last_mem_rsp_bank_ = b; + break; + } } // send memory response if (mem_rsp_active_ - && vortex_->mem_rsp_valid && mem_rsp_ready_) { + && vortex_->mem_rsp_valid && mem_rsp_ready_) { mem_rsp_active_ = false; } if (!mem_rsp_active_) { - if (mem_rsp_it != mem_rsp_vec_.end()) { - vortex_->mem_rsp_valid = 1; + if (has_response) { + vortex_->mem_rsp_valid = 1; + std::list::iterator mem_rsp_it = mem_rsp_vec_[last_mem_rsp_bank_].begin(); memcpy((uint8_t*)vortex_->mem_rsp_data, mem_rsp_it->block.data(), MEM_BLOCK_SIZE); vortex_->mem_rsp_tag = mem_rsp_it->tag; - mem_rsp_vec_.erase(mem_rsp_it); + mem_rsp_vec_[last_mem_rsp_bank_].erase(mem_rsp_it); mem_rsp_active_ = true; } else { vortex_->mem_rsp_valid = 0; } } + // select the memory bank + uint32_t req_bank = vortex_->mem_req_addr % MEMORY_BANKS; + // handle memory stalls bool mem_stalled = false; #ifdef ENABLE_MEM_STALLS if (0 == ((timestamp/2) % MEM_STALLS_MODULO)) { mem_stalled = true; } else - if (mem_rsp_vec_.size() >= MEM_RQ_SIZE) { + if (mem_rsp_vec_[req_bank].size() >= MEM_RQ_SIZE) { mem_stalled = true; } #endif @@ -201,13 +219,13 @@ void Simulator::eval_mem_bus() { mem_req.addr = vortex_->mem_req_addr; ram_->read(vortex_->mem_req_addr * MEM_BLOCK_SIZE, MEM_BLOCK_SIZE, mem_req.block.data()); mem_req.cycles_left = MEM_LATENCY; - for (auto& rsp : mem_rsp_vec_) { + for (auto& rsp : mem_rsp_vec_[req_bank]) { if (mem_req.addr == rsp.addr) { mem_req.cycles_left = rsp.cycles_left; break; } } - mem_rsp_vec_.emplace_back(mem_req); + mem_rsp_vec_[req_bank].emplace_back(mem_req); } } } diff --git a/hw/simulate/simulator.h b/hw/simulate/simulator.h index 5163270b..8aa00482 100644 --- a/hw/simulate/simulator.h +++ b/hw/simulate/simulator.h @@ -17,6 +17,14 @@ #include #include +#ifndef MEMORY_BANKS + #ifdef PLATFORM_PARAM_LOCAL_MEMORY_BANKS + #define MEMORY_BANKS PLATFORM_PARAM_LOCAL_MEMORY_BANKS + #else + #define MEMORY_BANKS 2 + #endif +#endif + class Simulator { public: @@ -57,7 +65,9 @@ private: void eval_mem_bus(); - std::list mem_rsp_vec_; + std::list mem_rsp_vec_ [MEMORY_BANKS]; + uint32_t last_mem_rsp_bank_; + bool mem_rsp_active_; bool mem_rsp_ready_; diff --git a/hw/unit_tests/cache/trace.vcd b/hw/unit_tests/cache/trace.vcd deleted file mode 100644 index 18791b3a..00000000 --- a/hw/unit_tests/cache/trace.vcd +++ /dev/null @@ -1,13998 +0,0 @@ -$version Generated by VerilatedVcd $end -$date Sat Jul 18 23:54:40 2020 - $end -$timescale 1ns $end - - $scope module TOP $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 ]U& core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 ST& core_req_valid [3:0] $end - $var wire 128 mU& core_rsp_data [127:0] $end - $var wire 1 ?V& core_rsp_ready $end - $var wire 42 /V& core_rsp_tag [41:0] $end - $var wire 4 eU& core_rsp_valid [3:0] $end - $var wire 28 _V& dram_req_addr [27:0] $end - $var wire 16 WV& dram_req_byteen [15:0] $end - $var wire 128 gV& dram_req_data [127:0] $end - $var wire 1 1W& dram_req_ready $end - $var wire 1 OV& dram_req_rw $end - $var wire 28 )W& dram_req_tag [27:0] $end - $var wire 1 GV& dram_req_valid $end - $var wire 128 AW& dram_rsp_data [127:0] $end - $var wire 1 iW& dram_rsp_ready $end - $var wire 28 aW& dram_rsp_tag [27:0] $end - $var wire 1 9W& dram_rsp_valid $end - $var wire 1 KT& reset $end - $var wire 2 5Y& snp_fwdin_ready [1:0] $end - $var wire 2 -Y& snp_fwdin_tag [1:0] $end - $var wire 2 %Y& snp_fwdin_valid [1:0] $end - $var wire 56 [X& snp_fwdout_addr [55:0] $end - $var wire 2 kX& snp_fwdout_invalidate [1:0] $end - $var wire 2 {X& snp_fwdout_ready [1:0] $end - $var wire 2 sX& snp_fwdout_tag [1:0] $end - $var wire 2 SX& snp_fwdout_valid [1:0] $end - $var wire 28 yW& snp_req_addr [27:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 3X& snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 qW& snp_req_valid $end - $var wire 1 KX& snp_rsp_ready $end - $var wire 28 CX& snp_rsp_tag [27:0] $end - $var wire 1 ;X& snp_rsp_valid $end - $scope module VX_cache $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 a[& DRAM_TAG_WIDTH [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 i[& NUM_SNP_REQUESTS [31:0] $end - $var wire 32 Q[& PRFQ_SIZE [31:0] $end - $var wire 32 )[& PRFQ_STRIDE [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 Q[& SNP_FWD_TAG_WIDTH [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 ]U& core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 ST& core_req_valid [3:0] $end - $var wire 128 mU& core_rsp_data [127:0] $end - $var wire 1 ?V& core_rsp_ready $end - $var wire 42 /V& core_rsp_tag [41:0] $end - $var wire 4 eU& core_rsp_valid [3:0] $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 28 _V& dram_req_addr [27:0] $end - $var wire 16 WV& dram_req_byteen [15:0] $end - $var wire 128 gV& dram_req_data [127:0] $end - $var wire 1 1W& dram_req_ready $end - $var wire 1 OV& dram_req_rw $end - $var wire 28 )W& dram_req_tag [27:0] $end - $var wire 1 GV& dram_req_valid $end - $var wire 128 AW& dram_rsp_data [127:0] $end - $var wire 1 iW& dram_rsp_ready $end - $var wire 28 aW& dram_rsp_tag [27:0] $end - $var wire 1 9W& dram_rsp_valid $end - $var wire 8 O6 per_bank_core_req_ready [7:0] $end - $var wire 256 g6 per_bank_core_rsp_data [255:0] $end - $var wire 8 + per_bank_core_rsp_ready [7:0] $end - $var wire 336 I7 per_bank_core_rsp_tag [335:0] $end - $var wire 16 _6 per_bank_core_rsp_tid [15:0] $end - $var wire 8 W6 per_bank_core_rsp_valid [7:0] $end - $var wire 224 K8 per_bank_dram_fill_req_addr [223:0] $end - $var wire 8 C8 per_bank_dram_fill_req_valid [7:0] $end - $var wire 8 %9 per_bank_dram_fill_rsp_ready [7:0] $end - $var wire 224 U9 per_bank_dram_wb_req_addr [223:0] $end - $var wire 128 59 per_bank_dram_wb_req_byteen [127:0] $end - $var wire 1024 /: per_bank_dram_wb_req_data [1023:0] $end - $var wire 8 3 per_bank_dram_wb_req_ready [7:0] $end - $var wire 8 -9 per_bank_dram_wb_req_valid [7:0] $end - $var wire 8 s< per_bank_snp_req_ready [7:0] $end - $var wire 8 ; per_bank_snp_rsp_ready [7:0] $end - $var wire 224 %= per_bank_snp_rsp_tag [223:0] $end - $var wire 8 {< per_bank_snp_rsp_valid [7:0] $end - $var wire 32 # per_bank_valid [31:0] $end - $var wire 1 KT& reset $end - $var wire 2 5Y& snp_fwdin_ready [1:0] $end - $var wire 2 -Y& snp_fwdin_tag [1:0] $end - $var wire 2 %Y& snp_fwdin_valid [1:0] $end - $var wire 56 [X& snp_fwdout_addr [55:0] $end - $var wire 2 kX& snp_fwdout_invalidate [1:0] $end - $var wire 2 {X& snp_fwdout_ready [1:0] $end - $var wire 2 sX& snp_fwdout_tag [1:0] $end - $var wire 2 SX& snp_fwdout_valid [1:0] $end - $var wire 28 yW& snp_req_addr [27:0] $end - $var wire 28 yW& snp_req_addr_qual [27:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 #X& snp_req_invalidate_qual $end - $var wire 1 3X& snp_req_ready $end - $var wire 1 =Y& snp_req_ready_qual $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 28 +X& snp_req_tag_qual [27:0] $end - $var wire 1 qW& snp_req_valid $end - $var wire 1 qW& snp_req_valid_qual $end - $var wire 1 KX& snp_rsp_ready $end - $var wire 28 CX& snp_rsp_tag [27:0] $end - $var wire 1 ;X& snp_rsp_valid $end - $scope module cache_core_req_bank_sel $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 1 ]U& core_req_ready $end - $var wire 4 ST& core_req_valid [3:0] $end - $var wire 32 q[& i [31:0] $end - $var wire 8 O6 per_bank_ready [7:0] $end - $var wire 32 # per_bank_valid [31:0] $end - $scope module genblk2 $end - $var wire 8 )# per_bank_ready_sel [7:0] $end - $upscope $end - $upscope $end - $scope module cache_core_rsp_merge $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 QK core_rsp_data [127:0] $end - $var wire 1 ?V& core_rsp_ready $end - $var wire 42 qK core_rsp_tag [41:0] $end - $var wire 4 eU& core_rsp_valid [3:0] $end - $var wire 32 +\& i [31:0] $end - $var wire 3 #L main_bank_index [2:0] $end - $var wire 256 g6 per_bank_core_rsp_data [255:0] $end - $var wire 8 +L per_bank_core_rsp_pop_unqual [7:0] $end - $var wire 8 + per_bank_core_rsp_ready [7:0] $end - $var wire 336 I7 per_bank_core_rsp_tag [335:0] $end - $var wire 16 _6 per_bank_core_rsp_tid [15:0] $end - $var wire 8 W6 per_bank_core_rsp_valid [7:0] $end - $var wire 1 KT& reset $end - $scope module sel_bank $end - $var wire 32 A[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 3 #L grant_index [2:0] $end - $var wire 8 3L grant_onehot [7:0] $end - $var wire 1 ;L grant_valid $end - $var wire 8 W6 requests [7:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 8 3L grant_onehot_r [7:0] $end - $var wire 8 KL late_value [7:0] $end - $var wire 1 =A" refill $end - $var wire 8 EA" refill_original [7:0] $end - $var wire 8 W6 refill_value [7:0] $end - $var wire 8 5A" requests_use [7:0] $end - $var wire 8 CL update_value [7:0] $end - $scope module priority_encoder $end - $var wire 32 A[& N [31:0] $end - $var wire 8 5A" data_in [7:0] $end - $var wire 3 #L data_out [2:0] $end - $var wire 32 SL i [31:0] $end - $var wire 1 ;L valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module cache_dram_req_arb $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 Q[& PRFQ_SIZE [31:0] $end - $var wire 32 )[& PRFQ_STRIDE [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 IG dfqq_empty $end - $var wire 1 [8" dfqq_full $end - $var wire 1 1# dfqq_pop $end - $var wire 1 QG dfqq_push $end - $var wire 1 9G dfqq_req $end - $var wire 28 AG dfqq_req_addr [27:0] $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 28 _V& dram_req_addr [27:0] $end - $var wire 16 WV& dram_req_byteen [15:0] $end - $var wire 128 gV& dram_req_data [127:0] $end - $var wire 1 1W& dram_req_ready $end - $var wire 1 OV& dram_req_rw $end - $var wire 1 GV& dram_req_valid $end - $var wire 3 YG dwb_bank [2:0] $end - $var wire 1 1G dwb_valid $end - $var wire 224 K8 per_bank_dram_fill_req_addr [223:0] $end - $var wire 8 C8 per_bank_dram_fill_req_valid [7:0] $end - $var wire 224 U9 per_bank_dram_wb_req_addr [223:0] $end - $var wire 128 59 per_bank_dram_wb_req_byteen [127:0] $end - $var wire 1024 /: per_bank_dram_wb_req_data [1023:0] $end - $var wire 8 3 per_bank_dram_wb_req_ready [7:0] $end - $var wire 8 -9 per_bank_dram_wb_req_valid [7:0] $end - $var wire 28 S8" pref_addr [27:0] $end - $var wire 1 y[& pref_pop $end - $var wire 1 y[& pref_valid $end - $var wire 1 KT& reset $end - $scope module dram_fill_arb $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 IG dfqq_empty $end - $var wire 1 [8" dfqq_full $end - $var wire 1 1# dfqq_pop $end - $var wire 1 QG dfqq_push $end - $var wire 1 9G dfqq_req $end - $var wire 28 AG dfqq_req_addr [27:0] $end - $var wire 1 m9" o_empty $end - $var wire 1 EI out_empty $end - $var wire 224 #H out_per_bank_dram_fill_req_addr [223:0] $end - $var wire 8 yG out_per_bank_dram_fill_req_valid [7:0] $end - $var wire 224 K8 per_bank_dram_fill_req_addr [223:0] $end - $var wire 8 C8 per_bank_dram_fill_req_valid [7:0] $end - $var wire 1 a3 pop_qual $end - $var wire 1 MI push_qual $end - $var wire 224 cH qual_bank_dram_fill_req_addr [223:0] $end - $var wire 1 ]I qual_has_request $end - $var wire 3 UI qual_request_index [2:0] $end - $var wire 1 KT& reset $end - $var wire 8 =I updated_bank_dram_fill_req_valid [7:0] $end - $var wire 1 u9" use_empty $end - $var wire 224 59" use_per_bank_dram_fill_req_addr [223:0] $end - $var wire 8 -9" use_per_bank_dram_fill_req_valid [7:0] $end - $var wire 8 [H use_per_bqual_bank_dram_fill_req_valid [7:0] $end - $scope module dfqq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 #\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 232 eI data_in [231:0] $end - $var wire 232 GJ data_out [231:0] $end - $var wire 1 m9" empty $end - $var wire 1 [8" full $end - $var wire 1 a3 pop $end - $var wire 1 MI push $end - $var wire 1 9# reading $end - $var wire 1 KT& reset $end - $var wire 4 }9" size [3:0] $end - $var wire 4 }9" size_r [3:0] $end - $var wire 1 )K writing $end - $scope module genblk3 $end - $var wire 232 ':" data(0) [231:0] $end - $var wire 232 /:" data(1) [231:0] $end - $var wire 232 7:" data(2) [231:0] $end - $var wire 232 ?:" data(3) [231:0] $end - $var wire 232 G:" data(4) [231:0] $end - $var wire 232 O:" data(5) [231:0] $end - $var wire 232 W:" data(6) [231:0] $end - $var wire 232 _:" data(7) [231:0] $end - $scope module genblk2 $end - $var wire 1 -A" bypass_r $end - $var wire 232 3@" curr_r [231:0] $end - $var wire 1 m9" empty_r $end - $var wire 1 [8" full_r $end - $var wire 232 Q?" head_r [231:0] $end - $var wire 3 %A" rd_ptr_next_r [2:0] $end - $var wire 3 {@" rd_ptr_r [2:0] $end - $var wire 3 s@" wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_bank $end - $var wire 32 A[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 3 UI grant_index [2:0] $end - $var wire 8 1K grant_onehot [7:0] $end - $var wire 1 ]I grant_valid $end - $var wire 8 [H requests [7:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 8 1K grant_onehot_r [7:0] $end - $scope module priority_encoder $end - $var wire 32 A[& N [31:0] $end - $var wire 8 [H data_in [7:0] $end - $var wire 3 UI data_out [2:0] $end - $var wire 32 9K i [31:0] $end - $var wire 1 ]I valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module prfqq $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 Q[& PRFQ_SIZE [31:0] $end - $var wire 32 )[& PRFQ_STRIDE [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 28 s8" current_addr [27:0] $end - $var wire 1 {8" current_empty $end - $var wire 1 k8" current_full $end - $var wire 1 k8" current_valid $end - $var wire 1 wZ& dram_req $end - $var wire 28 _V& dram_req_addr [27:0] $end - $var wire 28 S8" pref_addr [27:0] $end - $var wire 1 y[& pref_pop $end - $var wire 1 y[& pref_valid $end - $var wire 1 KT& reset $end - $var wire 1 aG update_use $end - $var wire 28 S8" use_addr [27:0] $end - $var wire 2 c8" use_valid [1:0] $end - $scope module pfq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 a[& DATAW [31:0] $end - $var wire 32 Q[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 28 _V& data_in [27:0] $end - $var wire 28 s8" data_out [27:0] $end - $var wire 1 {8" empty $end - $var wire 1 k8" full $end - $var wire 1 aG pop $end - $var wire 1 ![& push $end - $var wire 1 iG reading $end - $var wire 1 KT& reset $end - $var wire 1 %9" size [0:0] $end - $var wire 1 %9" size_r [0:0] $end - $var wire 1 qG writing $end - $scope module genblk2 $end - $var wire 28 s8" head_r [27:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_dwb $end - $var wire 32 A[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 3 YG grant_index [2:0] $end - $var wire 8 AK grant_onehot [7:0] $end - $var wire 1 1G grant_valid $end - $var wire 8 -9 requests [7:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 8 AK grant_onehot_r [7:0] $end - $scope module priority_encoder $end - $var wire 32 A[& N [31:0] $end - $var wire 8 -9 data_in [7:0] $end - $var wire 3 YG data_out [2:0] $end - $var wire 32 IK i [31:0] $end - $var wire 1 1G valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module genblk5(0) $end - $var wire 120 kT& curr_bank_core_req_addr [119:0] $end - $var wire 16 cT& curr_bank_core_req_byteen [15:0] $end - $var wire 128 -U& curr_bank_core_req_data [127:0] $end - $var wire 1 M5" curr_bank_core_req_ready $end - $var wire 4 [T& curr_bank_core_req_rw [3:0] $end - $var wire 42 MU& curr_bank_core_req_tag [41:0] $end - $var wire 4 C curr_bank_core_req_valid [3:0] $end - $var wire 32 e= curr_bank_core_rsp_data [31:0] $end - $var wire 1 K curr_bank_core_rsp_ready $end - $var wire 42 m= curr_bank_core_rsp_tag [41:0] $end - $var wire 2 ]= curr_bank_core_rsp_tid [1:0] $end - $var wire 1 -5" curr_bank_core_rsp_valid $end - $var wire 25 =5" curr_bank_dram_fill_req_addr [24:0] $end - $var wire 1 %5" curr_bank_dram_fill_req_ready $end - $var wire 1 }= curr_bank_dram_fill_req_valid $end - $var wire 25 MY& curr_bank_dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& curr_bank_dram_fill_rsp_data [127:0] $end - $var wire 1 55" curr_bank_dram_fill_rsp_ready $end - $var wire 1 EY& curr_bank_dram_fill_rsp_valid $end - $var wire 25 7> curr_bank_dram_wb_req_addr [24:0] $end - $var wire 16 /> curr_bank_dram_wb_req_byteen [15:0] $end - $var wire 128 ?> curr_bank_dram_wb_req_data [127:0] $end - $var wire 1 S curr_bank_dram_wb_req_ready $end - $var wire 1 '> curr_bank_dram_wb_req_valid $end - $var wire 25 ]Y& curr_bank_snp_req_addr [24:0] $end - $var wire 1 #X& curr_bank_snp_req_invalidate $end - $var wire 1 E5" curr_bank_snp_req_ready $end - $var wire 28 +X& curr_bank_snp_req_tag [27:0] $end - $var wire 1 UY& curr_bank_snp_req_valid $end - $var wire 1 [ curr_bank_snp_rsp_ready $end - $var wire 28 g> curr_bank_snp_rsp_tag [27:0] $end - $var wire 1 _> curr_bank_snp_rsp_valid $end - $scope module bank $end - $var wire 32 3\& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 25 5Q addr_st1(0) [24:0] $end - $var wire 25 3T addr_st1e [24:0] $end - $var wire 25 =5" addr_st2 [24:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 M5" core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 C core_req_valid [3:0] $end - $var wire 32 e= core_rsp_data [31:0] $end - $var wire 1 K core_rsp_ready $end - $var wire 42 m= core_rsp_tag [41:0] $end - $var wire 2 ]= core_rsp_tid [1:0] $end - $var wire 1 -5" core_rsp_valid $end - $var wire 32 iC" cwbq_data [31:0] $end - $var wire 1 =E" cwbq_empty $end - $var wire 1 EE" cwbq_full $end - $var wire 1 q3 cwbq_pop $end - $var wire 1 sT cwbq_push $end - $var wire 1 1O cwbq_push_stall $end - $var wire 1 {T cwbq_push_unqual $end - $var wire 42 )C" cwbq_tag [41:0] $end - $var wire 2 !C" cwbq_tid [1:0] $end - $var wire 25 EM dfpq_addr_st0 [24:0] $end - $var wire 1 ]A" dfpq_empty $end - $var wire 128 MM dfpq_filldata_st0 [127:0] $end - $var wire 1 eA" dfpq_full $end - $var wire 1 =M dfpq_pop $end - $var wire 1 iO dfpq_pop_unqual $end - $var wire 1 oR dirty_st1e $end - $var wire 1 ;D" dirty_st2 $end - $var wire 16 wR dirtyb_st1e [15:0] $end - $var wire 16 CD" dirtyb_st2 [15:0] $end - $var wire 25 =5" dram_fill_req_addr [24:0] $end - $var wire 1 [T dram_fill_req_fast $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 1 AO dram_fill_req_stall $end - $var wire 1 %U dram_fill_req_unqual $end - $var wire 1 }= dram_fill_req_valid $end - $var wire 25 MY& dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& dram_fill_rsp_data [127:0] $end - $var wire 1 55" dram_fill_rsp_ready $end - $var wire 1 EY& dram_fill_rsp_valid $end - $var wire 25 7> dram_wb_req_addr [24:0] $end - $var wire 16 /> dram_wb_req_byteen [15:0] $end - $var wire 128 ?> dram_wb_req_data [127:0] $end - $var wire 1 A# dram_wb_req_fire $end - $var wire 1 S dram_wb_req_ready $end - $var wire 1 '> dram_wb_req_valid $end - $var wire 1 mE" dwbq_dual_valid_sel $end - $var wire 1 ME" dwbq_empty $end - $var wire 1 UE" dwbq_full $end - $var wire 1 5U dwbq_is_dwb_in $end - $var wire 1 EU dwbq_is_dwb_out $end - $var wire 1 =U dwbq_is_snp_in $end - $var wire 1 MU dwbq_is_snp_out $end - $var wire 1 y3 dwbq_pop $end - $var wire 1 -U dwbq_push $end - $var wire 1 9O dwbq_push_stall $end - $var wire 1 UU dwbq_push_unqual $end - $var wire 25 ]E" dwbq_req_addr [24:0] $end - $var wire 1 IS fill_saw_dirty_st1e $end - $var wire 1 cD" fill_saw_dirty_st2 $end - $var wire 1 wN force_request_miss_st1e $end - $var wire 1 aO going_to_write_st1(0) $end - $var wire 49 MQ inst_meta_st1(0) [48:0] $end - $var wire 49 KD" inst_meta_st2 [48:0] $end - $var wire 1 QO is_fill_in_pipe $end - $var wire 1 YO is_fill_st1(0) $end - $var wire 1 IC" is_fill_st2 $end - $var wire 1 /R is_mrvq_st1(0) $end - $var wire 1 #T is_mrvq_st1e $end - $var wire 1 #T is_mrvq_st1e_st2 $end - $var wire 1 %E" is_mrvq_st2 $end - $var wire 1 }Q is_snp_st1(0) $end - $var wire 1 QS is_snp_st1e $end - $var wire 1 kD" is_snp_st2 $end - $var wire 32 ;\& j [31:0] $end - $var wire 4 AS mem_byteen_st1e [3:0] $end - $var wire 1 9S mem_rw_st1e $end - $var wire 1 cT miss_add $end - $var wire 25 =5" miss_add_addr [24:0] $end - $var wire 1 qS miss_add_because_miss $end - $var wire 1 {D" miss_add_because_pending $end - $var wire 4 AC" miss_add_byteen [3:0] $end - $var wire 32 aC" miss_add_data [31:0] $end - $var wire 1 kT miss_add_is_mrvq $end - $var wire 1 kD" miss_add_is_snp $end - $var wire 1 9C" miss_add_rw $end - $var wire 1 sD" miss_add_snp_invalidate $end - $var wire 42 )C" miss_add_tag [41:0] $end - $var wire 2 !C" miss_add_tid [1:0] $end - $var wire 1 [T miss_add_unqual $end - $var wire 2 YC" miss_add_wsel [1:0] $end - $var wire 1 gR miss_st1e $end - $var wire 1 3D" miss_st2 $end - $var wire 25 ?B" mrvq_addr_st0 [24:0] $end - $var wire 4 gB" mrvq_byteen_st0 [3:0] $end - $var wire 1 'B" mrvq_full $end - $var wire 1 KT mrvq_init_ready_state_hazard_st0_st1 $end - $var wire 1 ST mrvq_init_ready_state_hazard_st1e_st1 $end - $var wire 1 iS mrvq_init_ready_state_st1e $end - $var wire 1 CT mrvq_init_ready_state_st2 $end - $var wire 1 5E" mrvq_init_ready_state_unqual_st2 $end - $var wire 1 oB" mrvq_is_snp_st0 $end - $var wire 1 gN mrvq_pending_hazard_st1e $end - $var wire 1 ON mrvq_pop $end - $var wire 1 WN mrvq_pop_unqual $end - $var wire 1 )O mrvq_push_stall $end - $var wire 1 +T mrvq_recover_ready_state_st1e $end - $var wire 1 -E" mrvq_recover_ready_state_st2 $end - $var wire 1 _N mrvq_rw_st0 $end - $var wire 1 wB" mrvq_snp_invalidate_st0 $end - $var wire 1 /B" mrvq_stop $end - $var wire 42 WB" mrvq_tag_st0 [41:0] $end - $var wire 2 7B" mrvq_tid_st0 [1:0] $end - $var wire 1 WN mrvq_valid_st0 $end - $var wire 32 OB" mrvq_writeword_st0 [31:0] $end - $var wire 2 GB" mrvq_wsel_st0 [1:0] $end - $var wire 25 +P qual_addr_st0 [24:0] $end - $var wire 1 sP qual_going_to_write_st0 $end - $var wire 49 cP qual_inst_meta_st0 [48:0] $end - $var wire 1 iO qual_is_fill_st0 $end - $var wire 1 WN qual_is_mrvq_st0 $end - $var wire 1 {P qual_is_snp_st0 $end - $var wire 1 %Q qual_snp_invalidate_st0 $end - $var wire 1 #P qual_valid_st0 $end - $var wire 1 ;T qual_valid_st1e_2 $end - $var wire 128 CP qual_writedata_st0 [127:0] $end - $var wire 32 ;P qual_writeword_st0 [31:0] $end - $var wire 2 3P qual_wsel_st0 [1:0] $end - $var wire 128 ?R readdata_st1e [127:0] $end - $var wire 128 qC" readdata_st2 [127:0] $end - $var wire 21 _R readtag_st1e [20:0] $end - $var wire 21 [D" readtag_st2 [20:0] $end - $var wire 32 7R readword_st1e [31:0] $end - $var wire 32 iC" readword_st2 [31:0] $end - $var wire 1 !O recover_mrvq_state_st2 $end - $var wire 1 uM reqq_empty $end - $var wire 1 mA" reqq_full $end - $var wire 1 mM reqq_pop $end - $var wire 1 qO reqq_pop_unqual $end - $var wire 1 i3 reqq_push $end - $var wire 30 ?N reqq_req_addr_st0 [29:0] $end - $var wire 4 7N reqq_req_byteen_st0 [3:0] $end - $var wire 1 /N reqq_req_rw_st0 $end - $var wire 1 }M reqq_req_st0 $end - $var wire 42 uA" reqq_req_tag_st0 [41:0] $end - $var wire 2 'N reqq_req_tid_st0 [1:0] $end - $var wire 32 GN reqq_req_writeword_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 'R snp_invalidate_st1(0) $end - $var wire 1 YS snp_invalidate_st1e $end - $var wire 1 sD" snp_invalidate_st2 $end - $var wire 25 ]Y& snp_req_addr [24:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 E5" snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 UY& snp_req_valid $end - $var wire 1 I# snp_rsp_fire $end - $var wire 1 [ snp_rsp_ready $end - $var wire 28 g> snp_rsp_tag [27:0] $end - $var wire 1 _> snp_rsp_valid $end - $var wire 1 aS snp_to_mrvq_st1e $end - $var wire 1 {D" snp_to_mrvq_st2 $end - $var wire 25 %M snrq_addr_st0 [24:0] $end - $var wire 1 MA" snrq_empty $end - $var wire 1 UA" snrq_full $end - $var wire 1 -M snrq_invalidate_st0 $end - $var wire 1 {L snrq_pop $end - $var wire 1 yO snrq_pop_unqual $end - $var wire 28 5M snrq_tag_st0 [27:0] $end - $var wire 28 eE" snrq_tag_st2 [27:0] $end - $var wire 1 oN st2_pending_hazard_st1e $end - $var wire 1 IO stall_bank_pipe $end - $var wire 42 !S tag_st1e [41:0] $end - $var wire 2 1S tid_st1e [1:0] $end - $var wire 1 -Q valid_st1(0) $end - $var wire 1 yS valid_st1e $end - $var wire 1 QC" valid_st2 $end - $var wire 128 ]Q writedata_st1(0) [127:0] $end - $var wire 32 EQ writeword_st1(0) [31:0] $end - $var wire 32 aC" writeword_st2 [31:0] $end - $var wire 2 =Q wsel_st1(0) [1:0] $end - $var wire 2 YC" wsel_st2 [1:0] $end - $scope module cache_miss_resrv $end - $var wire 32 3\& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 400 /j" addr_table [399:0] $end - $var wire 1 CT& clk $end - $var wire 4 Ik" dequeue_index [3:0] $end - $var wire 1 WN dequeue_possible $end - $var wire 4 Yk" enqueue_index [3:0] $end - $var wire 1 ik" enqueue_possible $end - $var wire 25 3T fill_addr_st1 [24:0] $end - $var wire 4 Qk" head_ptr [3:0] $end - $var wire 1 A_ increment_head $end - $var wire 1 ]Y is_fill_st1 $end - $var wire 1 kT is_mrvq $end - $var wire 16 o^ make_ready [15:0] $end - $var wire 16 w^ make_ready_push [15:0] $end - $var wire 85 'f" metadata_table(0) [84:0] $end - $var wire 85 *f" metadata_table(1) [84:0] $end - $var wire 85 Ef" metadata_table(10) [84:0] $end - $var wire 85 Hf" metadata_table(11) [84:0] $end - $var wire 85 Kf" metadata_table(12) [84:0] $end - $var wire 85 Nf" metadata_table(13) [84:0] $end - $var wire 85 Qf" metadata_table(14) [84:0] $end - $var wire 85 Tf" metadata_table(15) [84:0] $end - $var wire 85 -f" metadata_table(2) [84:0] $end - $var wire 85 0f" metadata_table(3) [84:0] $end - $var wire 85 3f" metadata_table(4) [84:0] $end - $var wire 85 6f" metadata_table(5) [84:0] $end - $var wire 85 9f" metadata_table(6) [84:0] $end - $var wire 85 curr_bank_core_rsp_data [31:0] $end - $var wire 1 k curr_bank_core_rsp_ready $end - $var wire 42 !? curr_bank_core_rsp_tag [41:0] $end - $var wire 2 o> curr_bank_core_rsp_tid [1:0] $end - $var wire 1 U5" curr_bank_core_rsp_valid $end - $var wire 25 e5" curr_bank_dram_fill_req_addr [24:0] $end - $var wire 1 %5" curr_bank_dram_fill_req_ready $end - $var wire 1 1? curr_bank_dram_fill_req_valid $end - $var wire 25 MY& curr_bank_dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& curr_bank_dram_fill_rsp_data [127:0] $end - $var wire 1 ]5" curr_bank_dram_fill_rsp_ready $end - $var wire 1 eY& curr_bank_dram_fill_rsp_valid $end - $var wire 25 I? curr_bank_dram_wb_req_addr [24:0] $end - $var wire 16 A? curr_bank_dram_wb_req_byteen [15:0] $end - $var wire 128 Q? curr_bank_dram_wb_req_data [127:0] $end - $var wire 1 s curr_bank_dram_wb_req_ready $end - $var wire 1 9? curr_bank_dram_wb_req_valid $end - $var wire 25 ]Y& curr_bank_snp_req_addr [24:0] $end - $var wire 1 #X& curr_bank_snp_req_invalidate $end - $var wire 1 m5" curr_bank_snp_req_ready $end - $var wire 28 +X& curr_bank_snp_req_tag [27:0] $end - $var wire 1 mY& curr_bank_snp_req_valid $end - $var wire 1 { curr_bank_snp_rsp_ready $end - $var wire 28 y? curr_bank_snp_rsp_tag [27:0] $end - $var wire 1 q? curr_bank_snp_rsp_valid $end - $scope module bank $end - $var wire 32 ;\& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 25 ee addr_st1(0) [24:0] $end - $var wire 25 ch addr_st1e [24:0] $end - $var wire 25 e5" addr_st2 [24:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 u5" core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 c core_req_valid [3:0] $end - $var wire 32 w> core_rsp_data [31:0] $end - $var wire 1 k core_rsp_ready $end - $var wire 42 !? core_rsp_tag [41:0] $end - $var wire 2 o> core_rsp_tid [1:0] $end - $var wire 1 U5" core_rsp_valid $end - $var wire 32 -u" cwbq_data [31:0] $end - $var wire 1 _v" cwbq_empty $end - $var wire 1 gv" cwbq_full $end - $var wire 1 34 cwbq_pop $end - $var wire 1 Ei cwbq_push $end - $var wire 1 ac cwbq_push_stall $end - $var wire 1 Mi cwbq_push_unqual $end - $var wire 42 Kt" cwbq_tag [41:0] $end - $var wire 2 Ct" cwbq_tid [1:0] $end - $var wire 25 ua dfpq_addr_st0 [24:0] $end - $var wire 1 !s" dfpq_empty $end - $var wire 128 }a dfpq_filldata_st0 [127:0] $end - $var wire 1 )s" dfpq_full $end - $var wire 1 ma dfpq_pop $end - $var wire 1 ;d dfpq_pop_unqual $end - $var wire 1 Ag dirty_st1e $end - $var wire 1 ]u" dirty_st2 $end - $var wire 16 Ig dirtyb_st1e [15:0] $end - $var wire 16 eu" dirtyb_st2 [15:0] $end - $var wire 25 e5" dram_fill_req_addr [24:0] $end - $var wire 1 -i dram_fill_req_fast $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 1 qc dram_fill_req_stall $end - $var wire 1 Ui dram_fill_req_unqual $end - $var wire 1 1? dram_fill_req_valid $end - $var wire 25 MY& dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& dram_fill_rsp_data [127:0] $end - $var wire 1 ]5" dram_fill_rsp_ready $end - $var wire 1 eY& dram_fill_rsp_valid $end - $var wire 25 I? dram_wb_req_addr [24:0] $end - $var wire 16 A? dram_wb_req_byteen [15:0] $end - $var wire 128 Q? dram_wb_req_data [127:0] $end - $var wire 1 E% dram_wb_req_fire $end - $var wire 1 s dram_wb_req_ready $end - $var wire 1 9? dram_wb_req_valid $end - $var wire 1 1w" dwbq_dual_valid_sel $end - $var wire 1 ov" dwbq_empty $end - $var wire 1 wv" dwbq_full $end - $var wire 1 ei dwbq_is_dwb_in $end - $var wire 1 ui dwbq_is_dwb_out $end - $var wire 1 mi dwbq_is_snp_in $end - $var wire 1 }i dwbq_is_snp_out $end - $var wire 1 ;4 dwbq_pop $end - $var wire 1 ]i dwbq_push $end - $var wire 1 ic dwbq_push_stall $end - $var wire 1 'j dwbq_push_unqual $end - $var wire 25 !w" dwbq_req_addr [24:0] $end - $var wire 1 yg fill_saw_dirty_st1e $end - $var wire 1 'v" fill_saw_dirty_st2 $end - $var wire 1 Ic force_request_miss_st1e $end - $var wire 1 3d going_to_write_st1(0) $end - $var wire 49 }e inst_meta_st1(0) [48:0] $end - $var wire 49 mu" inst_meta_st2 [48:0] $end - $var wire 1 #d is_fill_in_pipe $end - $var wire 1 +d is_fill_st1(0) $end - $var wire 1 kt" is_fill_st2 $end - $var wire 1 _f is_mrvq_st1(0) $end - $var wire 1 Sh is_mrvq_st1e $end - $var wire 1 Sh is_mrvq_st1e_st2 $end - $var wire 1 Gv" is_mrvq_st2 $end - $var wire 1 Of is_snp_st1(0) $end - $var wire 1 #h is_snp_st1e $end - $var wire 1 /v" is_snp_st2 $end - $var wire 32 ;\& j [31:0] $end - $var wire 4 qg mem_byteen_st1e [3:0] $end - $var wire 1 ig mem_rw_st1e $end - $var wire 1 5i miss_add $end - $var wire 25 e5" miss_add_addr [24:0] $end - $var wire 1 Ch miss_add_because_miss $end - $var wire 1 ?v" miss_add_because_pending $end - $var wire 4 ct" miss_add_byteen [3:0] $end - $var wire 32 %u" miss_add_data [31:0] $end - $var wire 1 =i miss_add_is_mrvq $end - $var wire 1 /v" miss_add_is_snp $end - $var wire 1 [t" miss_add_rw $end - $var wire 1 7v" miss_add_snp_invalidate $end - $var wire 42 Kt" miss_add_tag [41:0] $end - $var wire 2 Ct" miss_add_tid [1:0] $end - $var wire 1 -i miss_add_unqual $end - $var wire 2 {t" miss_add_wsel [1:0] $end - $var wire 1 9g miss_st1e $end - $var wire 1 Uu" miss_st2 $end - $var wire 25 as" mrvq_addr_st0 [24:0] $end - $var wire 4 +t" mrvq_byteen_st0 [3:0] $end - $var wire 1 Is" mrvq_full $end - $var wire 1 {h mrvq_init_ready_state_hazard_st0_st1 $end - $var wire 1 %i mrvq_init_ready_state_hazard_st1e_st1 $end - $var wire 1 ;h mrvq_init_ready_state_st1e $end - $var wire 1 sh mrvq_init_ready_state_st2 $end - $var wire 1 Wv" mrvq_init_ready_state_unqual_st2 $end - $var wire 1 3t" mrvq_is_snp_st0 $end - $var wire 1 9c mrvq_pending_hazard_st1e $end - $var wire 1 !c mrvq_pop $end - $var wire 1 )c mrvq_pop_unqual $end - $var wire 1 Yc mrvq_push_stall $end - $var wire 1 [h mrvq_recover_ready_state_st1e $end - $var wire 1 Ov" mrvq_recover_ready_state_st2 $end - $var wire 1 1c mrvq_rw_st0 $end - $var wire 1 ;t" mrvq_snp_invalidate_st0 $end - $var wire 1 Qs" mrvq_stop $end - $var wire 42 ys" mrvq_tag_st0 [41:0] $end - $var wire 2 Ys" mrvq_tid_st0 [1:0] $end - $var wire 1 )c mrvq_valid_st0 $end - $var wire 32 qs" mrvq_writeword_st0 [31:0] $end - $var wire 2 is" mrvq_wsel_st0 [1:0] $end - $var wire 25 [d qual_addr_st0 [24:0] $end - $var wire 1 Ee qual_going_to_write_st0 $end - $var wire 49 5e qual_inst_meta_st0 [48:0] $end - $var wire 1 ;d qual_is_fill_st0 $end - $var wire 1 )c qual_is_mrvq_st0 $end - $var wire 1 Me qual_is_snp_st0 $end - $var wire 1 Ue qual_snp_invalidate_st0 $end - $var wire 1 Sd qual_valid_st0 $end - $var wire 1 kh qual_valid_st1e_2 $end - $var wire 128 sd qual_writedata_st0 [127:0] $end - $var wire 32 kd qual_writeword_st0 [31:0] $end - $var wire 2 cd qual_wsel_st0 [1:0] $end - $var wire 128 of readdata_st1e [127:0] $end - $var wire 128 5u" readdata_st2 [127:0] $end - $var wire 21 1g readtag_st1e [20:0] $end - $var wire 21 }u" readtag_st2 [20:0] $end - $var wire 32 gf readword_st1e [31:0] $end - $var wire 32 -u" readword_st2 [31:0] $end - $var wire 1 Qc recover_mrvq_state_st2 $end - $var wire 1 Gb reqq_empty $end - $var wire 1 1s" reqq_full $end - $var wire 1 ?b reqq_pop $end - $var wire 1 Cd reqq_pop_unqual $end - $var wire 1 +4 reqq_push $end - $var wire 30 ob reqq_req_addr_st0 [29:0] $end - $var wire 4 gb reqq_req_byteen_st0 [3:0] $end - $var wire 1 _b reqq_req_rw_st0 $end - $var wire 1 Ob reqq_req_st0 $end - $var wire 42 9s" reqq_req_tag_st0 [41:0] $end - $var wire 2 Wb reqq_req_tid_st0 [1:0] $end - $var wire 32 wb reqq_req_writeword_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 Wf snp_invalidate_st1(0) $end - $var wire 1 +h snp_invalidate_st1e $end - $var wire 1 7v" snp_invalidate_st2 $end - $var wire 25 ]Y& snp_req_addr [24:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 m5" snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 mY& snp_req_valid $end - $var wire 1 M% snp_rsp_fire $end - $var wire 1 { snp_rsp_ready $end - $var wire 28 y? snp_rsp_tag [27:0] $end - $var wire 1 q? snp_rsp_valid $end - $var wire 1 3h snp_to_mrvq_st1e $end - $var wire 1 ?v" snp_to_mrvq_st2 $end - $var wire 25 Ua snrq_addr_st0 [24:0] $end - $var wire 1 or" snrq_empty $end - $var wire 1 wr" snrq_full $end - $var wire 1 ]a snrq_invalidate_st0 $end - $var wire 1 Ma snrq_pop $end - $var wire 1 Kd snrq_pop_unqual $end - $var wire 28 ea snrq_tag_st0 [27:0] $end - $var wire 28 )w" snrq_tag_st2 [27:0] $end - $var wire 1 Ac st2_pending_hazard_st1e $end - $var wire 1 yc stall_bank_pipe $end - $var wire 42 Qg tag_st1e [41:0] $end - $var wire 2 ag tid_st1e [1:0] $end - $var wire 1 ]e valid_st1(0) $end - $var wire 1 Kh valid_st1e $end - $var wire 1 st" valid_st2 $end - $var wire 128 /f writedata_st1(0) [127:0] $end - $var wire 32 ue writeword_st1(0) [31:0] $end - $var wire 32 %u" writeword_st2 [31:0] $end - $var wire 2 me wsel_st1(0) [1:0] $end - $var wire 2 {t" wsel_st2 [1:0] $end - $scope module cache_miss_resrv $end - $var wire 32 ;\& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 400 Q=# addr_table [399:0] $end - $var wire 1 CT& clk $end - $var wire 4 k># dequeue_index [3:0] $end - $var wire 1 )c dequeue_possible $end - $var wire 4 {># enqueue_index [3:0] $end - $var wire 1 -?# enqueue_possible $end - $var wire 25 ch fill_addr_st1 [24:0] $end - $var wire 4 s># head_ptr [3:0] $end - $var wire 1 qs increment_head $end - $var wire 1 /n is_fill_st1 $end - $var wire 1 =i is_mrvq $end - $var wire 16 As make_ready [15:0] $end - $var wire 16 Is make_ready_push [15:0] $end - $var wire 85 I9# metadata_table(0) [84:0] $end - $var wire 85 L9# metadata_table(1) [84:0] $end - $var wire 85 g9# metadata_table(10) [84:0] $end - $var wire 85 j9# metadata_table(11) [84:0] $end - $var wire 85 m9# metadata_table(12) [84:0] $end - $var wire 85 p9# metadata_table(13) [84:0] $end - $var wire 85 s9# metadata_table(14) [84:0] $end - $var wire 85 v9# metadata_table(15) [84:0] $end - $var wire 85 O9# metadata_table(2) [84:0] $end - $var wire 85 R9# metadata_table(3) [84:0] $end - $var wire 85 U9# metadata_table(4) [84:0] $end - $var wire 85 X9# metadata_table(5) [84:0] $end - $var wire 85 [9# metadata_table(6) [84:0] $end - $var wire 85 ^9# metadata_table(7) [84:0] $end - $var wire 85 a9# metadata_table(8) [84:0] $end - $var wire 85 d9# metadata_table(9) [84:0] $end - $var wire 1 5i miss_add $end - $var wire 25 e5" miss_add_addr [24:0] $end - $var wire 4 ct" miss_add_byteen [3:0] $end - $var wire 32 %u" miss_add_data [31:0] $end - $var wire 1 /v" miss_add_is_snp $end - $var wire 1 [t" miss_add_rw $end - $var wire 1 7v" miss_add_snp_invalidate $end - $var wire 42 Kt" miss_add_tag [41:0] $end - $var wire 2 Ct" miss_add_tid [1:0] $end - $var wire 2 {t" miss_add_wsel [1:0] $end - $var wire 25 as" miss_resrv_addr_st0 [24:0] $end - $var wire 4 +t" miss_resrv_byteen_st0 [3:0] $end - $var wire 32 qs" miss_resrv_data_st0 [31:0] $end - $var wire 1 Is" miss_resrv_full $end - $var wire 1 3t" miss_resrv_is_snp_st0 $end - $var wire 1 !c miss_resrv_pop $end - $var wire 1 1c miss_resrv_rw_st0 $end - $var wire 1 ;t" miss_resrv_snp_invalidate_st0 $end - $var wire 1 Qs" miss_resrv_stop $end - $var wire 42 ys" miss_resrv_tag_st0 [41:0] $end - $var wire 2 Ys" miss_resrv_tid_st0 [1:0] $end - $var wire 1 )c miss_resrv_valid_st0 $end - $var wire 2 is" miss_resrv_wsel_st0 [1:0] $end - $var wire 1 sh mrvq_init_ready_state $end - $var wire 1 as mrvq_pop $end - $var wire 1 Ys mrvq_push $end - $var wire 1 9c pending_hazard $end - $var wire 1 #t qual_mrvq_init $end - $var wire 16 c># ready_table [15:0] $end - $var wire 1 is recover_state $end - $var wire 1 KT& reset $end - $var wire 4 k># schedule_ptr [3:0] $end - $var wire 5 %?# size [4:0] $end - $var wire 4 {># tail_ptr [3:0] $end - $var wire 1 ys update_ready $end - $var wire 16 Qs valid_address_match [15:0] $end - $var wire 16 [># valid_table [15:0] $end - $upscope $end - $scope module core_req_arb $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 120 kT& bank_addr [119:0] $end - $var wire 16 cT& bank_byteen [15:0] $end - $var wire 4 [T& bank_rw [3:0] $end - $var wire 42 MU& bank_tag [41:0] $end - $var wire 4 c bank_valids [3:0] $end - $var wire 128 -U& bank_writedata [127:0] $end - $var wire 1 CT& clk $end - $var wire 1 i%# o_empty $end - $var wire 1 #l out_empty $end - $var wire 120 1k out_per_addr [119:0] $end - $var wire 16 )k out_per_byteen [15:0] $end - $var wire 4 !k out_per_rw [3:0] $end - $var wire 42 qk out_per_tag [41:0] $end - $var wire 4 wj out_per_valids [3:0] $end - $var wire 128 Qk out_per_writedata [127:0] $end - $var wire 1 +l pop_qual $end - $var wire 1 C4 push_qual $end - $var wire 120 )%# qual_addr [119:0] $end - $var wire 16 !%# qual_byteen [15:0] $end - $var wire 1 Ob qual_has_request $end - $var wire 2 Wb qual_request_index [1:0] $end - $var wire 4 w$# qual_rw [3:0] $end - $var wire 42 9s" qual_tag [41:0] $end - $var wire 4 o$# qual_valids [3:0] $end - $var wire 128 I%# qual_writedata [127:0] $end - $var wire 4 3l real_out_per_valids [3:0] $end - $var wire 1 Gb reqq_empty $end - $var wire 1 1s" reqq_full $end - $var wire 1 ?b reqq_pop $end - $var wire 1 +4 reqq_push $end - $var wire 30 ob reqq_req_addr_st0 [29:0] $end - $var wire 4 gb reqq_req_byteen_st0 [3:0] $end - $var wire 1 _b reqq_req_rw_st0 $end - $var wire 1 Ob reqq_req_st0 $end - $var wire 42 9s" reqq_req_tag_st0 [41:0] $end - $var wire 2 Wb reqq_req_tid_st0 [1:0] $end - $var wire 32 wb reqq_req_writedata_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 q%# use_empty $end - $var wire 120 )%# use_per_addr [119:0] $end - $var wire 16 !%# use_per_byteen [15:0] $end - $var wire 4 w$# use_per_rw [3:0] $end - $var wire 42 9s" use_per_tag [41:0] $end - $var wire 4 o$# use_per_valids [3:0] $end - $var wire 128 I%# use_per_writedata [127:0] $end - $scope module reqq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 S\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 314 ?& data_in [313:0] $end - $var wire 314 ;l data_out [313:0] $end - $var wire 1 i%# empty $end - $var wire 1 1s" full $end - $var wire 1 +l pop $end - $var wire 1 C4 push $end - $var wire 1 -m reading $end - $var wire 1 KT& reset $end - $var wire 4 y%# size [3:0] $end - $var wire 4 y%# size_r [3:0] $end - $var wire 1 1' writing $end - $scope module genblk3 $end - $var wire 314 #&# data(0) [313:0] $end - $var wire 314 -&# data(1) [313:0] $end - $var wire 314 7&# data(2) [313:0] $end - $var wire 314 A&# data(3) [313:0] $end - $var wire 314 K&# data(4) [313:0] $end - $var wire 314 U&# data(5) [313:0] $end - $var wire 314 _&# data(6) [313:0] $end - $var wire 314 i&# data(7) [313:0] $end - $scope module genblk2 $end - $var wire 1 k.# bypass_r $end - $var wire 314 a-# curr_r [313:0] $end - $var wire 1 i%# empty_r $end - $var wire 1 1s" full_r $end - $var wire 314 o,# head_r [313:0] $end - $var wire 3 c.# rd_ptr_next_r [2:0] $end - $var wire 3 [.# rd_ptr_r [2:0] $end - $var wire 3 S.# wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_bank $end - $var wire 32 I[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 2 Wb grant_index [1:0] $end - $var wire 4 5m grant_onehot [3:0] $end - $var wire 1 Ob grant_valid $end - $var wire 4 o$# requests [3:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 4 5m grant_onehot_r [3:0] $end - $scope module priority_encoder $end - $var wire 32 I[& N [31:0] $end - $var wire 4 o$# data_in [3:0] $end - $var wire 2 Wb data_out [1:0] $end - $var wire 32 =m i [31:0] $end - $var wire 1 Ob valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module cwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 s\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 76 +t data_in [75:0] $end - $var wire 76 Ct data_out [75:0] $end - $var wire 1 _v" empty $end - $var wire 1 gv" full $end - $var wire 1 34 pop $end - $var wire 1 Ei push $end - $var wire 1 9' reading $end - $var wire 1 KT& reset $end - $var wire 4 5?# size [3:0] $end - $var wire 4 5?# size_r [3:0] $end - $var wire 1 [t writing $end - $scope module genblk3 $end - $var wire 76 =?# data(0) [75:0] $end - $var wire 76 @?# data(1) [75:0] $end - $var wire 76 C?# data(2) [75:0] $end - $var wire 76 F?# data(3) [75:0] $end - $var wire 76 I?# data(4) [75:0] $end - $var wire 76 L?# data(5) [75:0] $end - $var wire 76 O?# data(6) [75:0] $end - $var wire 76 R?# data(7) [75:0] $end - $scope module genblk2 $end - $var wire 1 +B# bypass_r $end - $var wire 76 YA# curr_r [75:0] $end - $var wire 1 _v" empty_r $end - $var wire 1 gv" full_r $end - $var wire 76 AA# head_r [75:0] $end - $var wire 3 #B# rd_ptr_next_r [2:0] $end - $var wire 3 yA# rd_ptr_r [2:0] $end - $var wire 3 qA# wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dfp_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 K\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 153 m% data_in [152:0] $end - $var wire 153 Gj data_out [152:0] $end - $var wire 1 !s" empty $end - $var wire 1 )s" full $end - $var wire 1 ma pop $end - $var wire 1 eY& push $end - $var wire 1 oj reading $end - $var wire 1 KT& reset $end - $var wire 5 gz" size [4:0] $end - $var wire 5 gz" size_r [4:0] $end - $var wire 1 7& writing $end - $scope module genblk3 $end - $var wire 153 oz" data(0) [152:0] $end - $var wire 153 tz" data(1) [152:0] $end - $var wire 153 C{" data(10) [152:0] $end - $var wire 153 H{" data(11) [152:0] $end - $var wire 153 M{" data(12) [152:0] $end - $var wire 153 R{" data(13) [152:0] $end - $var wire 153 W{" data(14) [152:0] $end - $var wire 153 \{" data(15) [152:0] $end - $var wire 153 yz" data(2) [152:0] $end - $var wire 153 ~z" data(3) [152:0] $end - $var wire 153 %{" data(4) [152:0] $end - $var wire 153 *{" data(5) [152:0] $end - $var wire 153 /{" data(6) [152:0] $end - $var wire 153 4{" data(7) [152:0] $end - $var wire 153 9{" data(8) [152:0] $end - $var wire 153 >{" data(9) [152:0] $end - $scope module genblk2 $end - $var wire 1 g$# bypass_r $end - $var wire 153 '$# curr_r [152:0] $end - $var wire 1 !s" empty_r $end - $var wire 1 )s" full_r $end - $var wire 153 ]## head_r [152:0] $end - $var wire 4 _$# rd_ptr_next_r [3:0] $end - $var wire 4 W$# rd_ptr_r [3:0] $end - $var wire 4 O$# wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 {\& DATAW [31:0] $end - $var wire 32 I[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 199 ct data_in [198:0] $end - $var wire 199 =u data_out [198:0] $end - $var wire 1 ov" empty $end - $var wire 1 wv" full $end - $var wire 1 ;4 pop $end - $var wire 1 ]i push $end - $var wire 1 A' reading $end - $var wire 1 KT& reset $end - $var wire 3 3B# size [2:0] $end - $var wire 3 3B# size_r [2:0] $end - $var wire 1 uu writing $end - $scope module genblk3 $end - $var wire 199 ;B# data(0) [198:0] $end - $var wire 199 BB# data(1) [198:0] $end - $var wire 199 IB# data(2) [198:0] $end - $var wire 199 PB# data(3) [198:0] $end - $scope module genblk2 $end - $var wire 1 +F# bypass_r $end - $var wire 199 9E# curr_r [198:0] $end - $var wire 1 ov" empty_r $end - $var wire 1 wv" full_r $end - $var wire 199 _D# head_r [198:0] $end - $var wire 2 #F# rd_ptr_next_r [1:0] $end - $var wire 2 yE# rd_ptr_r [1:0] $end - $var wire 2 qE# wr_ptr_r [1:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 [\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 242 Em in [241:0] $end - $var wire 242 s.# out [241:0] $end - $var wire 1 KT& reset $end - $var wire 1 yc stall $end - $var wire 242 s.# value [241:0] $end - $upscope $end - $scope module snp_req_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 C\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 54 U% data_in [53:0] $end - $var wire 54 /j data_out [53:0] $end - $var wire 1 or" empty $end - $var wire 1 wr" full $end - $var wire 1 Ma pop $end - $var wire 1 mY& push $end - $var wire 1 ?j reading $end - $var wire 1 KT& reset $end - $var wire 5 9w" size [4:0] $end - $var wire 5 9w" size_r [4:0] $end - $var wire 1 e% writing $end - $scope module genblk3 $end - $var wire 54 Aw" data(0) [53:0] $end - $var wire 54 Cw" data(1) [53:0] $end - $var wire 54 Uw" data(10) [53:0] $end - $var wire 54 Ww" data(11) [53:0] $end - $var wire 54 Yw" data(12) [53:0] $end - $var wire 54 [w" data(13) [53:0] $end - $var wire 54 ]w" data(14) [53:0] $end - $var wire 54 _w" data(15) [53:0] $end - $var wire 54 Ew" data(2) [53:0] $end - $var wire 54 Gw" data(3) [53:0] $end - $var wire 54 Iw" data(4) [53:0] $end - $var wire 54 Kw" data(5) [53:0] $end - $var wire 54 Mw" data(6) [53:0] $end - $var wire 54 Ow" data(7) [53:0] $end - $var wire 54 Qw" data(8) [53:0] $end - $var wire 54 Sw" data(9) [53:0] $end - $scope module genblk2 $end - $var wire 1 _z" bypass_r $end - $var wire 54 7z" curr_r [53:0] $end - $var wire 1 or" empty_r $end - $var wire 1 wr" full_r $end - $var wire 54 'z" head_r [53:0] $end - $var wire 4 Wz" rd_ptr_next_r [3:0] $end - $var wire 4 Oz" rd_ptr_r [3:0] $end - $var wire 4 Gz" wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module st_1e_2 $end - $var wire 32 k\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 316 Or in [315:0] $end - $var wire 316 W8# out [315:0] $end - $var wire 1 KT& reset $end - $var wire 1 yc stall $end - $var wire 316 W8# value [315:0] $end - $upscope $end - $scope module tag_data_access $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 Cp data_write [127:0] $end - $var wire 1 Ag dirty_st1e $end - $var wire 16 Ig dirtyb_st1e [15:0] $end - $var wire 1 yg fill_saw_dirty_st1e $end - $var wire 1 9g fill_sent $end - $var wire 1 Mq force_core_miss $end - $var wire 1 Ic force_request_miss_st1e $end - $var wire 1 cp invalidate_line $end - $var wire 1 #h is_snp_st1e $end - $var wire 4 qg mem_byteen_st1e [3:0] $end - $var wire 1 ig mem_rw_st1e $end - $var wire 1 9g miss_st1e $end - $var wire 1 ;h mrvq_init_ready_state_st1e $end - $var wire 128 io qual_read_data_st1 [127:0] $end - $var wire 1 Qo qual_read_dirty_st1 $end - $var wire 16 Yo qual_read_dirtyb_st1 [15:0] $end - $var wire 21 ao qual_read_tag_st1 [20:0] $end - $var wire 1 Io qual_read_valid_st1 $end - $var wire 128 )o read_data_st1c(0) [127:0] $end - $var wire 1 on read_dirty_st1c(0) $end - $var wire 16 wn read_dirtyb_st1c(0) [15:0] $end - $var wire 21 !o read_tag_st1c(0) [20:0] $end - $var wire 1 gn read_valid_st1c(0) $end - $var wire 4 'n readaddr_st10 [3:0] $end - $var wire 128 of readdata_st1e [127:0] $end - $var wire 21 1g readtag_st1e [20:0] $end - $var wire 32 gf readword_st1e [31:0] $end - $var wire 1 Eq real_miss $end - $var wire 1 sp real_writefill $end - $var wire 1 5q req_invalid $end - $var wire 1 =q req_miss $end - $var wire 1 KT& reset $end - $var wire 1 -q should_write $end - $var wire 1 cp snoop_hit_no_pending $end - $var wire 1 +h snp_invalidate_st1e $end - $var wire 1 3h snp_to_mrvq_st1e $end - $var wire 1 yc stall $end - $var wire 1 yc stall_bank_pipe $end - $var wire 1 kp tags_match $end - $var wire 128 of use_read_data_st1e [127:0] $end - $var wire 1 3p use_read_dirty_st1e $end - $var wire 16 Ig use_read_dirtyb_st1e [15:0] $end - $var wire 21 1g use_read_tag_st1e [20:0] $end - $var wire 1 +p use_read_valid_st1e $end - $var wire 128 Cp use_write_data [127:0] $end - $var wire 16 ;p use_write_enable [15:0] $end - $var wire 1 Kh valid_req_st1e $end - $var wire 16 %q we [15:0] $end - $var wire 2 _n wordsel_st1e [1:0] $end - $var wire 25 ch writeaddr_st1e [24:0] $end - $var wire 128 ?n writedata_st1e [127:0] $end - $var wire 1 /n writefill_st1e $end - $var wire 4 'n writeladdr_st1e [3:0] $end - $var wire 21 {p writetag_st1e [20:0] $end - $var wire 32 7n writeword_st1e [31:0] $end - $scope module genblk4(0) $end - $var wire 1 Uq normal_write $end - $upscope $end - $scope module genblk4(1) $end - $var wire 1 ]q normal_write $end - $upscope $end - $scope module genblk4(2) $end - $var wire 1 eq normal_write $end - $upscope $end - $scope module genblk4(3) $end - $var wire 1 mq normal_write $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 c\& N [31:0] $end - $var wire 32 Q[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 167 }q in [166:0] $end - $var wire 167 }q out [166:0] $end - $var wire 1 KT& reset $end - $var wire 1 yc stall $end - $var wire 167 '8# value [166:0] $end - $upscope $end - $scope module tag_data_structure $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 U/# data(0) [127:0] $end - $var wire 128 u/# data(1) [127:0] $end - $var wire 128 {2# data(10) [127:0] $end - $var wire 128 =3# data(11) [127:0] $end - $var wire 128 ]3# data(12) [127:0] $end - $var wire 128 }3# data(13) [127:0] $end - $var wire 128 ?4# data(14) [127:0] $end - $var wire 128 _4# data(15) [127:0] $end - $var wire 128 70# data(2) [127:0] $end - $var wire 128 W0# data(3) [127:0] $end - $var wire 128 w0# data(4) [127:0] $end - $var wire 128 91# data(5) [127:0] $end - $var wire 128 Y1# data(6) [127:0] $end - $var wire 128 y1# data(7) [127:0] $end - $var wire 128 ;2# data(8) [127:0] $end - $var wire 128 [2# data(9) [127:0] $end - $var wire 16 e7# dirty [15:0] $end - $var wire 16 C6# dirtyb(0) [15:0] $end - $var wire 16 K6# dirtyb(1) [15:0] $end - $var wire 16 57# dirtyb(10) [15:0] $end - $var wire 16 =7# dirtyb(11) [15:0] $end - $var wire 16 E7# dirtyb(12) [15:0] $end - $var wire 16 M7# dirtyb(13) [15:0] $end - $var wire 16 U7# dirtyb(14) [15:0] $end - $var wire 16 ]7# dirtyb(15) [15:0] $end - $var wire 16 S6# dirtyb(2) [15:0] $end - $var wire 16 [6# dirtyb(3) [15:0] $end - $var wire 16 c6# dirtyb(4) [15:0] $end - $var wire 16 k6# dirtyb(5) [15:0] $end - $var wire 16 s6# dirtyb(6) [15:0] $end - $var wire 16 {6# dirtyb(7) [15:0] $end - $var wire 16 %7# dirtyb(8) [15:0] $end - $var wire 16 -7# dirtyb(9) [15:0] $end - $var wire 1 uq do_write $end - $var wire 1 9g fill_sent $end - $var wire 32 u7# i [31:0] $end - $var wire 1 cp invalidate $end - $var wire 32 }7# j [31:0] $end - $var wire 4 'n read_addr [3:0] $end - $var wire 128 io read_data [127:0] $end - $var wire 1 Qo read_dirty $end - $var wire 16 Yo read_dirtyb [15:0] $end - $var wire 21 ao read_tag [20:0] $end - $var wire 1 Io read_valid $end - $var wire 1 KT& reset $end - $var wire 1 yc stall_bank_pipe $end - $var wire 21 !5# tag(0) [20:0] $end - $var wire 21 "5# tag(1) [20:0] $end - $var wire 21 +5# tag(10) [20:0] $end - $var wire 21 ,5# tag(11) [20:0] $end - $var wire 21 -5# tag(12) [20:0] $end - $var wire 21 .5# tag(13) [20:0] $end - $var wire 21 /5# tag(14) [20:0] $end - $var wire 21 05# tag(15) [20:0] $end - $var wire 21 #5# tag(2) [20:0] $end - $var wire 21 $5# tag(3) [20:0] $end - $var wire 21 %5# tag(4) [20:0] $end - $var wire 21 &5# tag(5) [20:0] $end - $var wire 21 '5# tag(6) [20:0] $end - $var wire 21 (5# tag(7) [20:0] $end - $var wire 21 )5# tag(8) [20:0] $end - $var wire 21 *5# tag(9) [20:0] $end - $var wire 21 {p tag_index [20:0] $end - $var wire 16 m7# valid [15:0] $end - $var wire 4 'n write_addr [3:0] $end - $var wire 128 Cp write_data [127:0] $end - $var wire 16 ;p write_enable [15:0] $end - $var wire 1 sp write_fill $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module genblk5(2) $end - $var wire 120 kT& curr_bank_core_req_addr [119:0] $end - $var wire 16 cT& curr_bank_core_req_byteen [15:0] $end - $var wire 128 -U& curr_bank_core_req_data [127:0] $end - $var wire 1 ?6" curr_bank_core_req_ready $end - $var wire 4 [T& curr_bank_core_req_rw [3:0] $end - $var wire 42 MU& curr_bank_core_req_tag [41:0] $end - $var wire 4 %! curr_bank_core_req_valid [3:0] $end - $var wire 32 +@ curr_bank_core_rsp_data [31:0] $end - $var wire 1 -! curr_bank_core_rsp_ready $end - $var wire 42 3@ curr_bank_core_rsp_tag [41:0] $end - $var wire 2 #@ curr_bank_core_rsp_tid [1:0] $end - $var wire 1 }5" curr_bank_core_rsp_valid $end - $var wire 25 /6" curr_bank_dram_fill_req_addr [24:0] $end - $var wire 1 %5" curr_bank_dram_fill_req_ready $end - $var wire 1 C@ curr_bank_dram_fill_req_valid $end - $var wire 25 MY& curr_bank_dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& curr_bank_dram_fill_rsp_data [127:0] $end - $var wire 1 '6" curr_bank_dram_fill_rsp_ready $end - $var wire 1 uY& curr_bank_dram_fill_rsp_valid $end - $var wire 25 [@ curr_bank_dram_wb_req_addr [24:0] $end - $var wire 16 S@ curr_bank_dram_wb_req_byteen [15:0] $end - $var wire 128 c@ curr_bank_dram_wb_req_data [127:0] $end - $var wire 1 5! curr_bank_dram_wb_req_ready $end - $var wire 1 K@ curr_bank_dram_wb_req_valid $end - $var wire 25 ]Y& curr_bank_snp_req_addr [24:0] $end - $var wire 1 #X& curr_bank_snp_req_invalidate $end - $var wire 1 76" curr_bank_snp_req_ready $end - $var wire 28 +X& curr_bank_snp_req_tag [27:0] $end - $var wire 1 }Y& curr_bank_snp_req_valid $end - $var wire 1 =! curr_bank_snp_rsp_ready $end - $var wire 28 -A curr_bank_snp_rsp_tag [27:0] $end - $var wire 1 %A curr_bank_snp_rsp_valid $end - $scope module bank $end - $var wire 32 %]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 25 7z addr_st1(0) [24:0] $end - $var wire 25 5} addr_st1e [24:0] $end - $var wire 25 /6" addr_st2 [24:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 ?6" core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 %! core_req_valid [3:0] $end - $var wire 32 +@ core_rsp_data [31:0] $end - $var wire 1 -! core_rsp_ready $end - $var wire 42 3@ core_rsp_tag [41:0] $end - $var wire 2 #@ core_rsp_tid [1:0] $end - $var wire 1 }5" core_rsp_valid $end - $var wire 32 OH# cwbq_data [31:0] $end - $var wire 1 #J# cwbq_empty $end - $var wire 1 +J# cwbq_full $end - $var wire 1 S4 cwbq_pop $end - $var wire 1 u} cwbq_push $end - $var wire 1 3x cwbq_push_stall $end - $var wire 1 }} cwbq_push_unqual $end - $var wire 42 mG# cwbq_tag [41:0] $end - $var wire 2 eG# cwbq_tid [1:0] $end - $var wire 25 Gv dfpq_addr_st0 [24:0] $end - $var wire 1 CF# dfpq_empty $end - $var wire 128 Ov dfpq_filldata_st0 [127:0] $end - $var wire 1 KF# dfpq_full $end - $var wire 1 ?v dfpq_pop $end - $var wire 1 kx dfpq_pop_unqual $end - $var wire 1 q{ dirty_st1e $end - $var wire 1 !I# dirty_st2 $end - $var wire 16 y{ dirtyb_st1e [15:0] $end - $var wire 16 )I# dirtyb_st2 [15:0] $end - $var wire 25 /6" dram_fill_req_addr [24:0] $end - $var wire 1 ]} dram_fill_req_fast $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 1 Cx dram_fill_req_stall $end - $var wire 1 '~ dram_fill_req_unqual $end - $var wire 1 C@ dram_fill_req_valid $end - $var wire 25 MY& dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& dram_fill_rsp_data [127:0] $end - $var wire 1 '6" dram_fill_rsp_ready $end - $var wire 1 uY& dram_fill_rsp_valid $end - $var wire 25 [@ dram_wb_req_addr [24:0] $end - $var wire 16 S@ dram_wb_req_byteen [15:0] $end - $var wire 128 c@ dram_wb_req_data [127:0] $end - $var wire 1 I' dram_wb_req_fire $end - $var wire 1 5! dram_wb_req_ready $end - $var wire 1 K@ dram_wb_req_valid $end - $var wire 1 SJ# dwbq_dual_valid_sel $end - $var wire 1 3J# dwbq_empty $end - $var wire 1 ;J# dwbq_full $end - $var wire 1 7~ dwbq_is_dwb_in $end - $var wire 1 G~ dwbq_is_dwb_out $end - $var wire 1 ?~ dwbq_is_snp_in $end - $var wire 1 O~ dwbq_is_snp_out $end - $var wire 1 [4 dwbq_pop $end - $var wire 1 /~ dwbq_push $end - $var wire 1 ;x dwbq_push_stall $end - $var wire 1 W~ dwbq_push_unqual $end - $var wire 25 CJ# dwbq_req_addr [24:0] $end - $var wire 1 K| fill_saw_dirty_st1e $end - $var wire 1 II# fill_saw_dirty_st2 $end - $var wire 1 yw force_request_miss_st1e $end - $var wire 1 cx going_to_write_st1(0) $end - $var wire 49 Oz inst_meta_st1(0) [48:0] $end - $var wire 49 1I# inst_meta_st2 [48:0] $end - $var wire 1 Sx is_fill_in_pipe $end - $var wire 1 [x is_fill_st1(0) $end - $var wire 1 /H# is_fill_st2 $end - $var wire 1 1{ is_mrvq_st1(0) $end - $var wire 1 %} is_mrvq_st1e $end - $var wire 1 %} is_mrvq_st1e_st2 $end - $var wire 1 iI# is_mrvq_st2 $end - $var wire 1 !{ is_snp_st1(0) $end - $var wire 1 S| is_snp_st1e $end - $var wire 1 QI# is_snp_st2 $end - $var wire 32 ;\& j [31:0] $end - $var wire 4 C| mem_byteen_st1e [3:0] $end - $var wire 1 ;| mem_rw_st1e $end - $var wire 1 e} miss_add $end - $var wire 25 /6" miss_add_addr [24:0] $end - $var wire 1 s| miss_add_because_miss $end - $var wire 1 aI# miss_add_because_pending $end - $var wire 4 'H# miss_add_byteen [3:0] $end - $var wire 32 GH# miss_add_data [31:0] $end - $var wire 1 m} miss_add_is_mrvq $end - $var wire 1 QI# miss_add_is_snp $end - $var wire 1 }G# miss_add_rw $end - $var wire 1 YI# miss_add_snp_invalidate $end - $var wire 42 mG# miss_add_tag [41:0] $end - $var wire 2 eG# miss_add_tid [1:0] $end - $var wire 1 ]} miss_add_unqual $end - $var wire 2 ?H# miss_add_wsel [1:0] $end - $var wire 1 i{ miss_st1e $end - $var wire 1 wH# miss_st2 $end - $var wire 25 %G# mrvq_addr_st0 [24:0] $end - $var wire 4 MG# mrvq_byteen_st0 [3:0] $end - $var wire 1 kF# mrvq_full $end - $var wire 1 M} mrvq_init_ready_state_hazard_st0_st1 $end - $var wire 1 U} mrvq_init_ready_state_hazard_st1e_st1 $end - $var wire 1 k| mrvq_init_ready_state_st1e $end - $var wire 1 E} mrvq_init_ready_state_st2 $end - $var wire 1 yI# mrvq_init_ready_state_unqual_st2 $end - $var wire 1 UG# mrvq_is_snp_st0 $end - $var wire 1 iw mrvq_pending_hazard_st1e $end - $var wire 1 Qw mrvq_pop $end - $var wire 1 Yw mrvq_pop_unqual $end - $var wire 1 +x mrvq_push_stall $end - $var wire 1 -} mrvq_recover_ready_state_st1e $end - $var wire 1 qI# mrvq_recover_ready_state_st2 $end - $var wire 1 aw mrvq_rw_st0 $end - $var wire 1 ]G# mrvq_snp_invalidate_st0 $end - $var wire 1 sF# mrvq_stop $end - $var wire 42 =G# mrvq_tag_st0 [41:0] $end - $var wire 2 {F# mrvq_tid_st0 [1:0] $end - $var wire 1 Yw mrvq_valid_st0 $end - $var wire 32 5G# mrvq_writeword_st0 [31:0] $end - $var wire 2 -G# mrvq_wsel_st0 [1:0] $end - $var wire 25 -y qual_addr_st0 [24:0] $end - $var wire 1 uy qual_going_to_write_st0 $end - $var wire 49 ey qual_inst_meta_st0 [48:0] $end - $var wire 1 kx qual_is_fill_st0 $end - $var wire 1 Yw qual_is_mrvq_st0 $end - $var wire 1 }y qual_is_snp_st0 $end - $var wire 1 'z qual_snp_invalidate_st0 $end - $var wire 1 %y qual_valid_st0 $end - $var wire 1 =} qual_valid_st1e_2 $end - $var wire 128 Ey qual_writedata_st0 [127:0] $end - $var wire 32 =y qual_writeword_st0 [31:0] $end - $var wire 2 5y qual_wsel_st0 [1:0] $end - $var wire 128 A{ readdata_st1e [127:0] $end - $var wire 128 WH# readdata_st2 [127:0] $end - $var wire 21 a{ readtag_st1e [20:0] $end - $var wire 21 AI# readtag_st2 [20:0] $end - $var wire 32 9{ readword_st1e [31:0] $end - $var wire 32 OH# readword_st2 [31:0] $end - $var wire 1 #x recover_mrvq_state_st2 $end - $var wire 1 wv reqq_empty $end - $var wire 1 SF# reqq_full $end - $var wire 1 ov reqq_pop $end - $var wire 1 sx reqq_pop_unqual $end - $var wire 1 K4 reqq_push $end - $var wire 30 Aw reqq_req_addr_st0 [29:0] $end - $var wire 4 9w reqq_req_byteen_st0 [3:0] $end - $var wire 1 1w reqq_req_rw_st0 $end - $var wire 1 !w reqq_req_st0 $end - $var wire 42 [F# reqq_req_tag_st0 [41:0] $end - $var wire 2 )w reqq_req_tid_st0 [1:0] $end - $var wire 32 Iw reqq_req_writeword_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 ){ snp_invalidate_st1(0) $end - $var wire 1 [| snp_invalidate_st1e $end - $var wire 1 YI# snp_invalidate_st2 $end - $var wire 25 ]Y& snp_req_addr [24:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 76" snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 }Y& snp_req_valid $end - $var wire 1 Q' snp_rsp_fire $end - $var wire 1 =! snp_rsp_ready $end - $var wire 28 -A snp_rsp_tag [27:0] $end - $var wire 1 %A snp_rsp_valid $end - $var wire 1 c| snp_to_mrvq_st1e $end - $var wire 1 aI# snp_to_mrvq_st2 $end - $var wire 25 'v snrq_addr_st0 [24:0] $end - $var wire 1 3F# snrq_empty $end - $var wire 1 ;F# snrq_full $end - $var wire 1 /v snrq_invalidate_st0 $end - $var wire 1 }u snrq_pop $end - $var wire 1 {x snrq_pop_unqual $end - $var wire 28 7v snrq_tag_st0 [27:0] $end - $var wire 28 KJ# snrq_tag_st2 [27:0] $end - $var wire 1 qw st2_pending_hazard_st1e $end - $var wire 1 Kx stall_bank_pipe $end - $var wire 42 #| tag_st1e [41:0] $end - $var wire 2 3| tid_st1e [1:0] $end - $var wire 1 /z valid_st1(0) $end - $var wire 1 {| valid_st1e $end - $var wire 1 7H# valid_st2 $end - $var wire 128 _z writedata_st1(0) [127:0] $end - $var wire 32 Gz writeword_st1(0) [31:0] $end - $var wire 32 GH# writeword_st2 [31:0] $end - $var wire 2 ?z wsel_st1(0) [1:0] $end - $var wire 2 ?H# wsel_st2 [1:0] $end - $scope module cache_miss_resrv $end - $var wire 32 %]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 400 sn# addr_table [399:0] $end - $var wire 1 CT& clk $end - $var wire 4 /p# dequeue_index [3:0] $end - $var wire 1 Yw dequeue_possible $end - $var wire 4 ?p# enqueue_index [3:0] $end - $var wire 1 Op# enqueue_possible $end - $var wire 25 5} fill_addr_st1 [24:0] $end - $var wire 4 7p# head_ptr [3:0] $end - $var wire 1 C*! increment_head $end - $var wire 1 _$! is_fill_st1 $end - $var wire 1 m} is_mrvq $end - $var wire 16 q)! make_ready [15:0] $end - $var wire 16 y)! make_ready_push [15:0] $end - $var wire 85 kj# metadata_table(0) [84:0] $end - $var wire 85 nj# metadata_table(1) [84:0] $end - $var wire 85 +k# metadata_table(10) [84:0] $end - $var wire 85 .k# metadata_table(11) [84:0] $end - $var wire 85 1k# metadata_table(12) [84:0] $end - $var wire 85 4k# metadata_table(13) [84:0] $end - $var wire 85 7k# metadata_table(14) [84:0] $end - $var wire 85 :k# metadata_table(15) [84:0] $end - $var wire 85 qj# metadata_table(2) [84:0] $end - $var wire 85 tj# metadata_table(3) [84:0] $end - $var wire 85 wj# metadata_table(4) [84:0] $end - $var wire 85 zj# metadata_table(5) [84:0] $end - $var wire 85 }j# metadata_table(6) [84:0] $end - $var wire 85 "k# metadata_table(7) [84:0] $end - $var wire 85 %k# metadata_table(8) [84:0] $end - $var wire 85 (k# metadata_table(9) [84:0] $end - $var wire 1 e} miss_add $end - $var wire 25 /6" miss_add_addr [24:0] $end - $var wire 4 'H# miss_add_byteen [3:0] $end - $var wire 32 GH# miss_add_data [31:0] $end - $var wire 1 QI# miss_add_is_snp $end - $var wire 1 }G# miss_add_rw $end - $var wire 1 YI# miss_add_snp_invalidate $end - $var wire 42 mG# miss_add_tag [41:0] $end - $var wire 2 eG# miss_add_tid [1:0] $end - $var wire 2 ?H# miss_add_wsel [1:0] $end - $var wire 25 %G# miss_resrv_addr_st0 [24:0] $end - $var wire 4 MG# miss_resrv_byteen_st0 [3:0] $end - $var wire 32 5G# miss_resrv_data_st0 [31:0] $end - $var wire 1 kF# miss_resrv_full $end - $var wire 1 UG# miss_resrv_is_snp_st0 $end - $var wire 1 Qw miss_resrv_pop $end - $var wire 1 aw miss_resrv_rw_st0 $end - $var wire 1 ]G# miss_resrv_snp_invalidate_st0 $end - $var wire 1 sF# miss_resrv_stop $end - $var wire 42 =G# miss_resrv_tag_st0 [41:0] $end - $var wire 2 {F# miss_resrv_tid_st0 [1:0] $end - $var wire 1 Yw miss_resrv_valid_st0 $end - $var wire 2 -G# miss_resrv_wsel_st0 [1:0] $end - $var wire 1 E} mrvq_init_ready_state $end - $var wire 1 3*! mrvq_pop $end - $var wire 1 +*! mrvq_push $end - $var wire 1 iw pending_hazard $end - $var wire 1 S*! qual_mrvq_init $end - $var wire 16 'p# ready_table [15:0] $end - $var wire 1 ;*! recover_state $end - $var wire 1 KT& reset $end - $var wire 4 /p# schedule_ptr [3:0] $end - $var wire 5 Gp# size [4:0] $end - $var wire 4 ?p# tail_ptr [3:0] $end - $var wire 1 K*! update_ready $end - $var wire 16 #*! valid_address_match [15:0] $end - $var wire 16 }o# valid_table [15:0] $end - $upscope $end - $scope module core_req_arb $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 120 kT& bank_addr [119:0] $end - $var wire 16 cT& bank_byteen [15:0] $end - $var wire 4 [T& bank_rw [3:0] $end - $var wire 42 MU& bank_tag [41:0] $end - $var wire 4 %! bank_valids [3:0] $end - $var wire 128 -U& bank_writedata [127:0] $end - $var wire 1 CT& clk $end - $var wire 1 -W# o_empty $end - $var wire 1 S"! out_empty $end - $var wire 120 a!! out_per_addr [119:0] $end - $var wire 16 Y!! out_per_byteen [15:0] $end - $var wire 4 Q!! out_per_rw [3:0] $end - $var wire 42 C"! out_per_tag [41:0] $end - $var wire 4 I!! out_per_valids [3:0] $end - $var wire 128 #"! out_per_writedata [127:0] $end - $var wire 1 ["! pop_qual $end - $var wire 1 c4 push_qual $end - $var wire 120 KV# qual_addr [119:0] $end - $var wire 16 CV# qual_byteen [15:0] $end - $var wire 1 !w qual_has_request $end - $var wire 2 )w qual_request_index [1:0] $end - $var wire 4 ;V# qual_rw [3:0] $end - $var wire 42 [F# qual_tag [41:0] $end - $var wire 4 3V# qual_valids [3:0] $end - $var wire 128 kV# qual_writedata [127:0] $end - $var wire 4 c"! real_out_per_valids [3:0] $end - $var wire 1 wv reqq_empty $end - $var wire 1 SF# reqq_full $end - $var wire 1 ov reqq_pop $end - $var wire 1 K4 reqq_push $end - $var wire 30 Aw reqq_req_addr_st0 [29:0] $end - $var wire 4 9w reqq_req_byteen_st0 [3:0] $end - $var wire 1 1w reqq_req_rw_st0 $end - $var wire 1 !w reqq_req_st0 $end - $var wire 42 [F# reqq_req_tag_st0 [41:0] $end - $var wire 2 )w reqq_req_tid_st0 [1:0] $end - $var wire 32 Iw reqq_req_writedata_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 5W# use_empty $end - $var wire 120 KV# use_per_addr [119:0] $end - $var wire 16 CV# use_per_byteen [15:0] $end - $var wire 4 ;V# use_per_rw [3:0] $end - $var wire 42 [F# use_per_tag [41:0] $end - $var wire 4 3V# use_per_valids [3:0] $end - $var wire 128 kV# use_per_writedata [127:0] $end - $scope module reqq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 S\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 314 C( data_in [313:0] $end - $var wire 314 k"! data_out [313:0] $end - $var wire 1 -W# empty $end - $var wire 1 SF# full $end - $var wire 1 ["! pop $end - $var wire 1 c4 push $end - $var wire 1 ]#! reading $end - $var wire 1 KT& reset $end - $var wire 4 =W# size [3:0] $end - $var wire 4 =W# size_r [3:0] $end - $var wire 1 5) writing $end - $scope module genblk3 $end - $var wire 314 EW# data(0) [313:0] $end - $var wire 314 OW# data(1) [313:0] $end - $var wire 314 YW# data(2) [313:0] $end - $var wire 314 cW# data(3) [313:0] $end - $var wire 314 mW# data(4) [313:0] $end - $var wire 314 wW# data(5) [313:0] $end - $var wire 314 #X# data(6) [313:0] $end - $var wire 314 -X# data(7) [313:0] $end - $scope module genblk2 $end - $var wire 1 /`# bypass_r $end - $var wire 314 %_# curr_r [313:0] $end - $var wire 1 -W# empty_r $end - $var wire 1 SF# full_r $end - $var wire 314 3^# head_r [313:0] $end - $var wire 3 '`# rd_ptr_next_r [2:0] $end - $var wire 3 }_# rd_ptr_r [2:0] $end - $var wire 3 u_# wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_bank $end - $var wire 32 I[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 2 )w grant_index [1:0] $end - $var wire 4 e#! grant_onehot [3:0] $end - $var wire 1 !w grant_valid $end - $var wire 4 3V# requests [3:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 4 e#! grant_onehot_r [3:0] $end - $scope module priority_encoder $end - $var wire 32 I[& N [31:0] $end - $var wire 4 3V# data_in [3:0] $end - $var wire 2 )w data_out [1:0] $end - $var wire 32 m#! i [31:0] $end - $var wire 1 !w valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module cwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 s\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 76 [*! data_in [75:0] $end - $var wire 76 s*! data_out [75:0] $end - $var wire 1 #J# empty $end - $var wire 1 +J# full $end - $var wire 1 S4 pop $end - $var wire 1 u} push $end - $var wire 1 =) reading $end - $var wire 1 KT& reset $end - $var wire 4 Wp# size [3:0] $end - $var wire 4 Wp# size_r [3:0] $end - $var wire 1 -+! writing $end - $scope module genblk3 $end - $var wire 76 _p# data(0) [75:0] $end - $var wire 76 bp# data(1) [75:0] $end - $var wire 76 ep# data(2) [75:0] $end - $var wire 76 hp# data(3) [75:0] $end - $var wire 76 kp# data(4) [75:0] $end - $var wire 76 np# data(5) [75:0] $end - $var wire 76 qp# data(6) [75:0] $end - $var wire 76 tp# data(7) [75:0] $end - $scope module genblk2 $end - $var wire 1 Ms# bypass_r $end - $var wire 76 {r# curr_r [75:0] $end - $var wire 1 #J# empty_r $end - $var wire 1 +J# full_r $end - $var wire 76 cr# head_r [75:0] $end - $var wire 3 Es# rd_ptr_next_r [2:0] $end - $var wire 3 =s# rd_ptr_r [2:0] $end - $var wire 3 5s# wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dfp_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 K\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 153 q' data_in [152:0] $end - $var wire 153 w~ data_out [152:0] $end - $var wire 1 CF# empty $end - $var wire 1 KF# full $end - $var wire 1 ?v pop $end - $var wire 1 uY& push $end - $var wire 1 A!! reading $end - $var wire 1 KT& reset $end - $var wire 5 +N# size [4:0] $end - $var wire 5 +N# size_r [4:0] $end - $var wire 1 ;( writing $end - $scope module genblk3 $end - $var wire 153 3N# data(0) [152:0] $end - $var wire 153 8N# data(1) [152:0] $end - $var wire 153 eN# data(10) [152:0] $end - $var wire 153 jN# data(11) [152:0] $end - $var wire 153 oN# data(12) [152:0] $end - $var wire 153 tN# data(13) [152:0] $end - $var wire 153 yN# data(14) [152:0] $end - $var wire 153 ~N# data(15) [152:0] $end - $var wire 153 =N# data(2) [152:0] $end - $var wire 153 BN# data(3) [152:0] $end - $var wire 153 GN# data(4) [152:0] $end - $var wire 153 LN# data(5) [152:0] $end - $var wire 153 QN# data(6) [152:0] $end - $var wire 153 VN# data(7) [152:0] $end - $var wire 153 [N# data(8) [152:0] $end - $var wire 153 `N# data(9) [152:0] $end - $scope module genblk2 $end - $var wire 1 +V# bypass_r $end - $var wire 153 IU# curr_r [152:0] $end - $var wire 1 CF# empty_r $end - $var wire 1 KF# full_r $end - $var wire 153 !U# head_r [152:0] $end - $var wire 4 #V# rd_ptr_next_r [3:0] $end - $var wire 4 yU# rd_ptr_r [3:0] $end - $var wire 4 qU# wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 {\& DATAW [31:0] $end - $var wire 32 I[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 199 5+! data_in [198:0] $end - $var wire 199 m+! data_out [198:0] $end - $var wire 1 3J# empty $end - $var wire 1 ;J# full $end - $var wire 1 [4 pop $end - $var wire 1 /~ push $end - $var wire 1 E) reading $end - $var wire 1 KT& reset $end - $var wire 3 Us# size [2:0] $end - $var wire 3 Us# size_r [2:0] $end - $var wire 1 G,! writing $end - $scope module genblk3 $end - $var wire 199 ]s# data(0) [198:0] $end - $var wire 199 ds# data(1) [198:0] $end - $var wire 199 ks# data(2) [198:0] $end - $var wire 199 rs# data(3) [198:0] $end - $scope module genblk2 $end - $var wire 1 Mw# bypass_r $end - $var wire 199 [v# curr_r [198:0] $end - $var wire 1 3J# empty_r $end - $var wire 1 ;J# full_r $end - $var wire 199 #v# head_r [198:0] $end - $var wire 2 Ew# rd_ptr_next_r [1:0] $end - $var wire 2 =w# rd_ptr_r [1:0] $end - $var wire 2 5w# wr_ptr_r [1:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 [\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 242 u#! in [241:0] $end - $var wire 242 7`# out [241:0] $end - $var wire 1 KT& reset $end - $var wire 1 Kx stall $end - $var wire 242 7`# value [241:0] $end - $upscope $end - $scope module snp_req_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 C\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 54 Y' data_in [53:0] $end - $var wire 54 _~ data_out [53:0] $end - $var wire 1 3F# empty $end - $var wire 1 ;F# full $end - $var wire 1 }u pop $end - $var wire 1 }Y& push $end - $var wire 1 o~ reading $end - $var wire 1 KT& reset $end - $var wire 5 [J# size [4:0] $end - $var wire 5 [J# size_r [4:0] $end - $var wire 1 i' writing $end - $scope module genblk3 $end - $var wire 54 cJ# data(0) [53:0] $end - $var wire 54 eJ# data(1) [53:0] $end - $var wire 54 wJ# data(10) [53:0] $end - $var wire 54 yJ# data(11) [53:0] $end - $var wire 54 {J# data(12) [53:0] $end - $var wire 54 }J# data(13) [53:0] $end - $var wire 54 !K# data(14) [53:0] $end - $var wire 54 #K# data(15) [53:0] $end - $var wire 54 gJ# data(2) [53:0] $end - $var wire 54 iJ# data(3) [53:0] $end - $var wire 54 kJ# data(4) [53:0] $end - $var wire 54 mJ# data(5) [53:0] $end - $var wire 54 oJ# data(6) [53:0] $end - $var wire 54 qJ# data(7) [53:0] $end - $var wire 54 sJ# data(8) [53:0] $end - $var wire 54 uJ# data(9) [53:0] $end - $scope module genblk2 $end - $var wire 1 #N# bypass_r $end - $var wire 54 YM# curr_r [53:0] $end - $var wire 1 3F# empty_r $end - $var wire 1 ;F# full_r $end - $var wire 54 IM# head_r [53:0] $end - $var wire 4 yM# rd_ptr_next_r [3:0] $end - $var wire 4 qM# rd_ptr_r [3:0] $end - $var wire 4 iM# wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module st_1e_2 $end - $var wire 32 k\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 316 !)! in [315:0] $end - $var wire 316 yi# out [315:0] $end - $var wire 1 KT& reset $end - $var wire 1 Kx stall $end - $var wire 316 yi# value [315:0] $end - $upscope $end - $scope module tag_data_access $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 s&! data_write [127:0] $end - $var wire 1 q{ dirty_st1e $end - $var wire 16 y{ dirtyb_st1e [15:0] $end - $var wire 1 K| fill_saw_dirty_st1e $end - $var wire 1 i{ fill_sent $end - $var wire 1 }'! force_core_miss $end - $var wire 1 yw force_request_miss_st1e $end - $var wire 1 5'! invalidate_line $end - $var wire 1 S| is_snp_st1e $end - $var wire 4 C| mem_byteen_st1e [3:0] $end - $var wire 1 ;| mem_rw_st1e $end - $var wire 1 i{ miss_st1e $end - $var wire 1 k| mrvq_init_ready_state_st1e $end - $var wire 128 ;&! qual_read_data_st1 [127:0] $end - $var wire 1 #&! qual_read_dirty_st1 $end - $var wire 16 +&! qual_read_dirtyb_st1 [15:0] $end - $var wire 21 3&! qual_read_tag_st1 [20:0] $end - $var wire 1 y%! qual_read_valid_st1 $end - $var wire 128 Y%! read_data_st1c(0) [127:0] $end - $var wire 1 A%! read_dirty_st1c(0) $end - $var wire 16 I%! read_dirtyb_st1c(0) [15:0] $end - $var wire 21 Q%! read_tag_st1c(0) [20:0] $end - $var wire 1 9%! read_valid_st1c(0) $end - $var wire 4 W$! readaddr_st10 [3:0] $end - $var wire 128 A{ readdata_st1e [127:0] $end - $var wire 21 a{ readtag_st1e [20:0] $end - $var wire 32 9{ readword_st1e [31:0] $end - $var wire 1 u'! real_miss $end - $var wire 1 E'! real_writefill $end - $var wire 1 e'! req_invalid $end - $var wire 1 m'! req_miss $end - $var wire 1 KT& reset $end - $var wire 1 ]'! should_write $end - $var wire 1 5'! snoop_hit_no_pending $end - $var wire 1 [| snp_invalidate_st1e $end - $var wire 1 c| snp_to_mrvq_st1e $end - $var wire 1 Kx stall $end - $var wire 1 Kx stall_bank_pipe $end - $var wire 1 ='! tags_match $end - $var wire 128 A{ use_read_data_st1e [127:0] $end - $var wire 1 c&! use_read_dirty_st1e $end - $var wire 16 y{ use_read_dirtyb_st1e [15:0] $end - $var wire 21 a{ use_read_tag_st1e [20:0] $end - $var wire 1 [&! use_read_valid_st1e $end - $var wire 128 s&! use_write_data [127:0] $end - $var wire 16 k&! use_write_enable [15:0] $end - $var wire 1 {| valid_req_st1e $end - $var wire 16 U'! we [15:0] $end - $var wire 2 1%! wordsel_st1e [1:0] $end - $var wire 25 5} writeaddr_st1e [24:0] $end - $var wire 128 o$! writedata_st1e [127:0] $end - $var wire 1 _$! writefill_st1e $end - $var wire 4 W$! writeladdr_st1e [3:0] $end - $var wire 21 M'! writetag_st1e [20:0] $end - $var wire 32 g$! writeword_st1e [31:0] $end - $scope module genblk4(0) $end - $var wire 1 '(! normal_write $end - $upscope $end - $scope module genblk4(1) $end - $var wire 1 /(! normal_write $end - $upscope $end - $scope module genblk4(2) $end - $var wire 1 7(! normal_write $end - $upscope $end - $scope module genblk4(3) $end - $var wire 1 ?(! normal_write $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 c\& N [31:0] $end - $var wire 32 Q[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 167 O(! in [166:0] $end - $var wire 167 O(! out [166:0] $end - $var wire 1 KT& reset $end - $var wire 1 Kx stall $end - $var wire 167 Ii# value [166:0] $end - $upscope $end - $scope module tag_data_structure $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 w`# data(0) [127:0] $end - $var wire 128 9a# data(1) [127:0] $end - $var wire 128 ?d# data(10) [127:0] $end - $var wire 128 _d# data(11) [127:0] $end - $var wire 128 !e# data(12) [127:0] $end - $var wire 128 Ae# data(13) [127:0] $end - $var wire 128 ae# data(14) [127:0] $end - $var wire 128 #f# data(15) [127:0] $end - $var wire 128 Ya# data(2) [127:0] $end - $var wire 128 ya# data(3) [127:0] $end - $var wire 128 ;b# data(4) [127:0] $end - $var wire 128 [b# data(5) [127:0] $end - $var wire 128 {b# data(6) [127:0] $end - $var wire 128 =c# data(7) [127:0] $end - $var wire 128 ]c# data(8) [127:0] $end - $var wire 128 }c# data(9) [127:0] $end - $var wire 16 )i# dirty [15:0] $end - $var wire 16 eg# dirtyb(0) [15:0] $end - $var wire 16 mg# dirtyb(1) [15:0] $end - $var wire 16 Wh# dirtyb(10) [15:0] $end - $var wire 16 _h# dirtyb(11) [15:0] $end - $var wire 16 gh# dirtyb(12) [15:0] $end - $var wire 16 oh# dirtyb(13) [15:0] $end - $var wire 16 wh# dirtyb(14) [15:0] $end - $var wire 16 !i# dirtyb(15) [15:0] $end - $var wire 16 ug# dirtyb(2) [15:0] $end - $var wire 16 }g# dirtyb(3) [15:0] $end - $var wire 16 'h# dirtyb(4) [15:0] $end - $var wire 16 /h# dirtyb(5) [15:0] $end - $var wire 16 7h# dirtyb(6) [15:0] $end - $var wire 16 ?h# dirtyb(7) [15:0] $end - $var wire 16 Gh# dirtyb(8) [15:0] $end - $var wire 16 Oh# dirtyb(9) [15:0] $end - $var wire 1 G(! do_write $end - $var wire 1 i{ fill_sent $end - $var wire 32 9i# i [31:0] $end - $var wire 1 5'! invalidate $end - $var wire 32 Ai# j [31:0] $end - $var wire 4 W$! read_addr [3:0] $end - $var wire 128 ;&! read_data [127:0] $end - $var wire 1 #&! read_dirty $end - $var wire 16 +&! read_dirtyb [15:0] $end - $var wire 21 3&! read_tag [20:0] $end - $var wire 1 y%! read_valid $end - $var wire 1 KT& reset $end - $var wire 1 Kx stall_bank_pipe $end - $var wire 21 Cf# tag(0) [20:0] $end - $var wire 21 Df# tag(1) [20:0] $end - $var wire 21 Mf# tag(10) [20:0] $end - $var wire 21 Nf# tag(11) [20:0] $end - $var wire 21 Of# tag(12) [20:0] $end - $var wire 21 Pf# tag(13) [20:0] $end - $var wire 21 Qf# tag(14) [20:0] $end - $var wire 21 Rf# tag(15) [20:0] $end - $var wire 21 Ef# tag(2) [20:0] $end - $var wire 21 Ff# tag(3) [20:0] $end - $var wire 21 Gf# tag(4) [20:0] $end - $var wire 21 Hf# tag(5) [20:0] $end - $var wire 21 If# tag(6) [20:0] $end - $var wire 21 Jf# tag(7) [20:0] $end - $var wire 21 Kf# tag(8) [20:0] $end - $var wire 21 Lf# tag(9) [20:0] $end - $var wire 21 M'! tag_index [20:0] $end - $var wire 16 1i# valid [15:0] $end - $var wire 4 W$! write_addr [3:0] $end - $var wire 128 s&! write_data [127:0] $end - $var wire 16 k&! write_enable [15:0] $end - $var wire 1 E'! write_fill $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module genblk5(3) $end - $var wire 120 kT& curr_bank_core_req_addr [119:0] $end - $var wire 16 cT& curr_bank_core_req_byteen [15:0] $end - $var wire 128 -U& curr_bank_core_req_data [127:0] $end - $var wire 1 g6" curr_bank_core_req_ready $end - $var wire 4 [T& curr_bank_core_req_rw [3:0] $end - $var wire 42 MU& curr_bank_core_req_tag [41:0] $end - $var wire 4 E! curr_bank_core_req_valid [3:0] $end - $var wire 32 =A curr_bank_core_rsp_data [31:0] $end - $var wire 1 M! curr_bank_core_rsp_ready $end - $var wire 42 EA curr_bank_core_rsp_tag [41:0] $end - $var wire 2 5A curr_bank_core_rsp_tid [1:0] $end - $var wire 1 G6" curr_bank_core_rsp_valid $end - $var wire 25 W6" curr_bank_dram_fill_req_addr [24:0] $end - $var wire 1 %5" curr_bank_dram_fill_req_ready $end - $var wire 1 UA curr_bank_dram_fill_req_valid $end - $var wire 25 MY& curr_bank_dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& curr_bank_dram_fill_rsp_data [127:0] $end - $var wire 1 O6" curr_bank_dram_fill_rsp_ready $end - $var wire 1 'Z& curr_bank_dram_fill_rsp_valid $end - $var wire 25 mA curr_bank_dram_wb_req_addr [24:0] $end - $var wire 16 eA curr_bank_dram_wb_req_byteen [15:0] $end - $var wire 128 uA curr_bank_dram_wb_req_data [127:0] $end - $var wire 1 U! curr_bank_dram_wb_req_ready $end - $var wire 1 ]A curr_bank_dram_wb_req_valid $end - $var wire 25 ]Y& curr_bank_snp_req_addr [24:0] $end - $var wire 1 #X& curr_bank_snp_req_invalidate $end - $var wire 1 _6" curr_bank_snp_req_ready $end - $var wire 28 +X& curr_bank_snp_req_tag [27:0] $end - $var wire 1 /Z& curr_bank_snp_req_valid $end - $var wire 1 ]! curr_bank_snp_rsp_ready $end - $var wire 28 ?B curr_bank_snp_rsp_tag [27:0] $end - $var wire 1 7B curr_bank_snp_rsp_valid $end - $scope module bank $end - $var wire 32 -]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 25 g0! addr_st1(0) [24:0] $end - $var wire 25 e3! addr_st1e [24:0] $end - $var wire 25 W6" addr_st2 [24:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 g6" core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 E! core_req_valid [3:0] $end - $var wire 32 =A core_rsp_data [31:0] $end - $var wire 1 M! core_rsp_ready $end - $var wire 42 EA core_rsp_tag [41:0] $end - $var wire 2 5A core_rsp_tid [1:0] $end - $var wire 1 G6" core_rsp_valid $end - $var wire 32 qy# cwbq_data [31:0] $end - $var wire 1 E{# cwbq_empty $end - $var wire 1 M{# cwbq_full $end - $var wire 1 s4 cwbq_pop $end - $var wire 1 G4! cwbq_push $end - $var wire 1 c.! cwbq_push_stall $end - $var wire 1 O4! cwbq_push_unqual $end - $var wire 42 1y# cwbq_tag [41:0] $end - $var wire 2 )y# cwbq_tid [1:0] $end - $var wire 25 w,! dfpq_addr_st0 [24:0] $end - $var wire 1 ew# dfpq_empty $end - $var wire 128 !-! dfpq_filldata_st0 [127:0] $end - $var wire 1 mw# dfpq_full $end - $var wire 1 o,! dfpq_pop $end - $var wire 1 =/! dfpq_pop_unqual $end - $var wire 1 C2! dirty_st1e $end - $var wire 1 Cz# dirty_st2 $end - $var wire 16 K2! dirtyb_st1e [15:0] $end - $var wire 16 Kz# dirtyb_st2 [15:0] $end - $var wire 25 W6" dram_fill_req_addr [24:0] $end - $var wire 1 /4! dram_fill_req_fast $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 1 s.! dram_fill_req_stall $end - $var wire 1 W4! dram_fill_req_unqual $end - $var wire 1 UA dram_fill_req_valid $end - $var wire 25 MY& dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& dram_fill_rsp_data [127:0] $end - $var wire 1 O6" dram_fill_rsp_ready $end - $var wire 1 'Z& dram_fill_rsp_valid $end - $var wire 25 mA dram_wb_req_addr [24:0] $end - $var wire 16 eA dram_wb_req_byteen [15:0] $end - $var wire 128 uA dram_wb_req_data [127:0] $end - $var wire 1 M) dram_wb_req_fire $end - $var wire 1 U! dram_wb_req_ready $end - $var wire 1 ]A dram_wb_req_valid $end - $var wire 1 u{# dwbq_dual_valid_sel $end - $var wire 1 U{# dwbq_empty $end - $var wire 1 ]{# dwbq_full $end - $var wire 1 g4! dwbq_is_dwb_in $end - $var wire 1 w4! dwbq_is_dwb_out $end - $var wire 1 o4! dwbq_is_snp_in $end - $var wire 1 !5! dwbq_is_snp_out $end - $var wire 1 {4 dwbq_pop $end - $var wire 1 _4! dwbq_push $end - $var wire 1 k.! dwbq_push_stall $end - $var wire 1 )5! dwbq_push_unqual $end - $var wire 25 e{# dwbq_req_addr [24:0] $end - $var wire 1 {2! fill_saw_dirty_st1e $end - $var wire 1 kz# fill_saw_dirty_st2 $end - $var wire 1 K.! force_request_miss_st1e $end - $var wire 1 5/! going_to_write_st1(0) $end - $var wire 49 !1! inst_meta_st1(0) [48:0] $end - $var wire 49 Sz# inst_meta_st2 [48:0] $end - $var wire 1 %/! is_fill_in_pipe $end - $var wire 1 -/! is_fill_st1(0) $end - $var wire 1 Qy# is_fill_st2 $end - $var wire 1 a1! is_mrvq_st1(0) $end - $var wire 1 U3! is_mrvq_st1e $end - $var wire 1 U3! is_mrvq_st1e_st2 $end - $var wire 1 -{# is_mrvq_st2 $end - $var wire 1 Q1! is_snp_st1(0) $end - $var wire 1 %3! is_snp_st1e $end - $var wire 1 sz# is_snp_st2 $end - $var wire 32 ;\& j [31:0] $end - $var wire 4 s2! mem_byteen_st1e [3:0] $end - $var wire 1 k2! mem_rw_st1e $end - $var wire 1 74! miss_add $end - $var wire 25 W6" miss_add_addr [24:0] $end - $var wire 1 E3! miss_add_because_miss $end - $var wire 1 %{# miss_add_because_pending $end - $var wire 4 Iy# miss_add_byteen [3:0] $end - $var wire 32 iy# miss_add_data [31:0] $end - $var wire 1 ?4! miss_add_is_mrvq $end - $var wire 1 sz# miss_add_is_snp $end - $var wire 1 Ay# miss_add_rw $end - $var wire 1 {z# miss_add_snp_invalidate $end - $var wire 42 1y# miss_add_tag [41:0] $end - $var wire 2 )y# miss_add_tid [1:0] $end - $var wire 1 /4! miss_add_unqual $end - $var wire 2 ay# miss_add_wsel [1:0] $end - $var wire 1 ;2! miss_st1e $end - $var wire 1 ;z# miss_st2 $end - $var wire 25 Gx# mrvq_addr_st0 [24:0] $end - $var wire 4 ox# mrvq_byteen_st0 [3:0] $end - $var wire 1 /x# mrvq_full $end - $var wire 1 }3! mrvq_init_ready_state_hazard_st0_st1 $end - $var wire 1 '4! mrvq_init_ready_state_hazard_st1e_st1 $end - $var wire 1 =3! mrvq_init_ready_state_st1e $end - $var wire 1 u3! mrvq_init_ready_state_st2 $end - $var wire 1 ={# mrvq_init_ready_state_unqual_st2 $end - $var wire 1 wx# mrvq_is_snp_st0 $end - $var wire 1 ;.! mrvq_pending_hazard_st1e $end - $var wire 1 #.! mrvq_pop $end - $var wire 1 +.! mrvq_pop_unqual $end - $var wire 1 [.! mrvq_push_stall $end - $var wire 1 ]3! mrvq_recover_ready_state_st1e $end - $var wire 1 5{# mrvq_recover_ready_state_st2 $end - $var wire 1 3.! mrvq_rw_st0 $end - $var wire 1 !y# mrvq_snp_invalidate_st0 $end - $var wire 1 7x# mrvq_stop $end - $var wire 42 _x# mrvq_tag_st0 [41:0] $end - $var wire 2 ?x# mrvq_tid_st0 [1:0] $end - $var wire 1 +.! mrvq_valid_st0 $end - $var wire 32 Wx# mrvq_writeword_st0 [31:0] $end - $var wire 2 Ox# mrvq_wsel_st0 [1:0] $end - $var wire 25 ]/! qual_addr_st0 [24:0] $end - $var wire 1 G0! qual_going_to_write_st0 $end - $var wire 49 70! qual_inst_meta_st0 [48:0] $end - $var wire 1 =/! qual_is_fill_st0 $end - $var wire 1 +.! qual_is_mrvq_st0 $end - $var wire 1 O0! qual_is_snp_st0 $end - $var wire 1 W0! qual_snp_invalidate_st0 $end - $var wire 1 U/! qual_valid_st0 $end - $var wire 1 m3! qual_valid_st1e_2 $end - $var wire 128 u/! qual_writedata_st0 [127:0] $end - $var wire 32 m/! qual_writeword_st0 [31:0] $end - $var wire 2 e/! qual_wsel_st0 [1:0] $end - $var wire 128 q1! readdata_st1e [127:0] $end - $var wire 128 yy# readdata_st2 [127:0] $end - $var wire 21 32! readtag_st1e [20:0] $end - $var wire 21 cz# readtag_st2 [20:0] $end - $var wire 32 i1! readword_st1e [31:0] $end - $var wire 32 qy# readword_st2 [31:0] $end - $var wire 1 S.! recover_mrvq_state_st2 $end - $var wire 1 I-! reqq_empty $end - $var wire 1 uw# reqq_full $end - $var wire 1 A-! reqq_pop $end - $var wire 1 E/! reqq_pop_unqual $end - $var wire 1 k4 reqq_push $end - $var wire 30 q-! reqq_req_addr_st0 [29:0] $end - $var wire 4 i-! reqq_req_byteen_st0 [3:0] $end - $var wire 1 a-! reqq_req_rw_st0 $end - $var wire 1 Q-! reqq_req_st0 $end - $var wire 42 }w# reqq_req_tag_st0 [41:0] $end - $var wire 2 Y-! reqq_req_tid_st0 [1:0] $end - $var wire 32 y-! reqq_req_writeword_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 Y1! snp_invalidate_st1(0) $end - $var wire 1 -3! snp_invalidate_st1e $end - $var wire 1 {z# snp_invalidate_st2 $end - $var wire 25 ]Y& snp_req_addr [24:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 _6" snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 /Z& snp_req_valid $end - $var wire 1 U) snp_rsp_fire $end - $var wire 1 ]! snp_rsp_ready $end - $var wire 28 ?B snp_rsp_tag [27:0] $end - $var wire 1 7B snp_rsp_valid $end - $var wire 1 53! snp_to_mrvq_st1e $end - $var wire 1 %{# snp_to_mrvq_st2 $end - $var wire 25 W,! snrq_addr_st0 [24:0] $end - $var wire 1 Uw# snrq_empty $end - $var wire 1 ]w# snrq_full $end - $var wire 1 _,! snrq_invalidate_st0 $end - $var wire 1 O,! snrq_pop $end - $var wire 1 M/! snrq_pop_unqual $end - $var wire 28 g,! snrq_tag_st0 [27:0] $end - $var wire 28 m{# snrq_tag_st2 [27:0] $end - $var wire 1 C.! st2_pending_hazard_st1e $end - $var wire 1 {.! stall_bank_pipe $end - $var wire 42 S2! tag_st1e [41:0] $end - $var wire 2 c2! tid_st1e [1:0] $end - $var wire 1 _0! valid_st1(0) $end - $var wire 1 M3! valid_st1e $end - $var wire 1 Yy# valid_st2 $end - $var wire 128 11! writedata_st1(0) [127:0] $end - $var wire 32 w0! writeword_st1(0) [31:0] $end - $var wire 32 iy# writeword_st2 [31:0] $end - $var wire 2 o0! wsel_st1(0) [1:0] $end - $var wire 2 ay# wsel_st2 [1:0] $end - $scope module cache_miss_resrv $end - $var wire 32 -]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 400 7B$ addr_table [399:0] $end - $var wire 1 CT& clk $end - $var wire 4 QC$ dequeue_index [3:0] $end - $var wire 1 +.! dequeue_possible $end - $var wire 4 aC$ enqueue_index [3:0] $end - $var wire 1 qC$ enqueue_possible $end - $var wire 25 e3! fill_addr_st1 [24:0] $end - $var wire 4 YC$ head_ptr [3:0] $end - $var wire 1 s>! increment_head $end - $var wire 1 19! is_fill_st1 $end - $var wire 1 ?4! is_mrvq $end - $var wire 16 C>! make_ready [15:0] $end - $var wire 16 K>! make_ready_push [15:0] $end - $var wire 85 />$ metadata_table(0) [84:0] $end - $var wire 85 2>$ metadata_table(1) [84:0] $end - $var wire 85 M>$ metadata_table(10) [84:0] $end - $var wire 85 P>$ metadata_table(11) [84:0] $end - $var wire 85 S>$ metadata_table(12) [84:0] $end - $var wire 85 V>$ metadata_table(13) [84:0] $end - $var wire 85 Y>$ metadata_table(14) [84:0] $end - $var wire 85 \>$ metadata_table(15) [84:0] $end - $var wire 85 5>$ metadata_table(2) [84:0] $end - $var wire 85 8>$ metadata_table(3) [84:0] $end - $var wire 85 ;>$ metadata_table(4) [84:0] $end - $var wire 85 >>$ metadata_table(5) [84:0] $end - $var wire 85 A>$ metadata_table(6) [84:0] $end - $var wire 85 D>$ metadata_table(7) [84:0] $end - $var wire 85 G>$ metadata_table(8) [84:0] $end - $var wire 85 J>$ metadata_table(9) [84:0] $end - $var wire 1 74! miss_add $end - $var wire 25 W6" miss_add_addr [24:0] $end - $var wire 4 Iy# miss_add_byteen [3:0] $end - $var wire 32 iy# miss_add_data [31:0] $end - $var wire 1 sz# miss_add_is_snp $end - $var wire 1 Ay# miss_add_rw $end - $var wire 1 {z# miss_add_snp_invalidate $end - $var wire 42 1y# miss_add_tag [41:0] $end - $var wire 2 )y# miss_add_tid [1:0] $end - $var wire 2 ay# miss_add_wsel [1:0] $end - $var wire 25 Gx# miss_resrv_addr_st0 [24:0] $end - $var wire 4 ox# miss_resrv_byteen_st0 [3:0] $end - $var wire 32 Wx# miss_resrv_data_st0 [31:0] $end - $var wire 1 /x# miss_resrv_full $end - $var wire 1 wx# miss_resrv_is_snp_st0 $end - $var wire 1 #.! miss_resrv_pop $end - $var wire 1 3.! miss_resrv_rw_st0 $end - $var wire 1 !y# miss_resrv_snp_invalidate_st0 $end - $var wire 1 7x# miss_resrv_stop $end - $var wire 42 _x# miss_resrv_tag_st0 [41:0] $end - $var wire 2 ?x# miss_resrv_tid_st0 [1:0] $end - $var wire 1 +.! miss_resrv_valid_st0 $end - $var wire 2 Ox# miss_resrv_wsel_st0 [1:0] $end - $var wire 1 u3! mrvq_init_ready_state $end - $var wire 1 c>! mrvq_pop $end - $var wire 1 [>! mrvq_push $end - $var wire 1 ;.! pending_hazard $end - $var wire 1 %?! qual_mrvq_init $end - $var wire 16 IC$ ready_table [15:0] $end - $var wire 1 k>! recover_state $end - $var wire 1 KT& reset $end - $var wire 4 QC$ schedule_ptr [3:0] $end - $var wire 5 iC$ size [4:0] $end - $var wire 4 aC$ tail_ptr [3:0] $end - $var wire 1 {>! update_ready $end - $var wire 16 S>! valid_address_match [15:0] $end - $var wire 16 AC$ valid_table [15:0] $end - $upscope $end - $scope module core_req_arb $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 120 kT& bank_addr [119:0] $end - $var wire 16 cT& bank_byteen [15:0] $end - $var wire 4 [T& bank_rw [3:0] $end - $var wire 42 MU& bank_tag [41:0] $end - $var wire 4 E! bank_valids [3:0] $end - $var wire 128 -U& bank_writedata [127:0] $end - $var wire 1 CT& clk $end - $var wire 1 O*$ o_empty $end - $var wire 1 %7! out_empty $end - $var wire 120 36! out_per_addr [119:0] $end - $var wire 16 +6! out_per_byteen [15:0] $end - $var wire 4 #6! out_per_rw [3:0] $end - $var wire 42 s6! out_per_tag [41:0] $end - $var wire 4 y5! out_per_valids [3:0] $end - $var wire 128 S6! out_per_writedata [127:0] $end - $var wire 1 -7! pop_qual $end - $var wire 1 %5 push_qual $end - $var wire 120 m)$ qual_addr [119:0] $end - $var wire 16 e)$ qual_byteen [15:0] $end - $var wire 1 Q-! qual_has_request $end - $var wire 2 Y-! qual_request_index [1:0] $end - $var wire 4 ])$ qual_rw [3:0] $end - $var wire 42 }w# qual_tag [41:0] $end - $var wire 4 U)$ qual_valids [3:0] $end - $var wire 128 /*$ qual_writedata [127:0] $end - $var wire 4 57! real_out_per_valids [3:0] $end - $var wire 1 I-! reqq_empty $end - $var wire 1 uw# reqq_full $end - $var wire 1 A-! reqq_pop $end - $var wire 1 k4 reqq_push $end - $var wire 30 q-! reqq_req_addr_st0 [29:0] $end - $var wire 4 i-! reqq_req_byteen_st0 [3:0] $end - $var wire 1 a-! reqq_req_rw_st0 $end - $var wire 1 Q-! reqq_req_st0 $end - $var wire 42 }w# reqq_req_tag_st0 [41:0] $end - $var wire 2 Y-! reqq_req_tid_st0 [1:0] $end - $var wire 32 y-! reqq_req_writedata_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 W*$ use_empty $end - $var wire 120 m)$ use_per_addr [119:0] $end - $var wire 16 e)$ use_per_byteen [15:0] $end - $var wire 4 ])$ use_per_rw [3:0] $end - $var wire 42 }w# use_per_tag [41:0] $end - $var wire 4 U)$ use_per_valids [3:0] $end - $var wire 128 /*$ use_per_writedata [127:0] $end - $scope module reqq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 S\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 314 G* data_in [313:0] $end - $var wire 314 =7! data_out [313:0] $end - $var wire 1 O*$ empty $end - $var wire 1 uw# full $end - $var wire 1 -7! pop $end - $var wire 1 %5 push $end - $var wire 1 /8! reading $end - $var wire 1 KT& reset $end - $var wire 4 _*$ size [3:0] $end - $var wire 4 _*$ size_r [3:0] $end - $var wire 1 9+ writing $end - $scope module genblk3 $end - $var wire 314 g*$ data(0) [313:0] $end - $var wire 314 q*$ data(1) [313:0] $end - $var wire 314 {*$ data(2) [313:0] $end - $var wire 314 '+$ data(3) [313:0] $end - $var wire 314 1+$ data(4) [313:0] $end - $var wire 314 ;+$ data(5) [313:0] $end - $var wire 314 E+$ data(6) [313:0] $end - $var wire 314 O+$ data(7) [313:0] $end - $scope module genblk2 $end - $var wire 1 Q3$ bypass_r $end - $var wire 314 G2$ curr_r [313:0] $end - $var wire 1 O*$ empty_r $end - $var wire 1 uw# full_r $end - $var wire 314 U1$ head_r [313:0] $end - $var wire 3 I3$ rd_ptr_next_r [2:0] $end - $var wire 3 A3$ rd_ptr_r [2:0] $end - $var wire 3 93$ wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_bank $end - $var wire 32 I[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 2 Y-! grant_index [1:0] $end - $var wire 4 78! grant_onehot [3:0] $end - $var wire 1 Q-! grant_valid $end - $var wire 4 U)$ requests [3:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 4 78! grant_onehot_r [3:0] $end - $scope module priority_encoder $end - $var wire 32 I[& N [31:0] $end - $var wire 4 U)$ data_in [3:0] $end - $var wire 2 Y-! data_out [1:0] $end - $var wire 32 ?8! i [31:0] $end - $var wire 1 Q-! valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module cwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 s\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 76 -?! data_in [75:0] $end - $var wire 76 E?! data_out [75:0] $end - $var wire 1 E{# empty $end - $var wire 1 M{# full $end - $var wire 1 s4 pop $end - $var wire 1 G4! push $end - $var wire 1 A+ reading $end - $var wire 1 KT& reset $end - $var wire 4 yC$ size [3:0] $end - $var wire 4 yC$ size_r [3:0] $end - $var wire 1 ]?! writing $end - $scope module genblk3 $end - $var wire 76 #D$ data(0) [75:0] $end - $var wire 76 &D$ data(1) [75:0] $end - $var wire 76 )D$ data(2) [75:0] $end - $var wire 76 ,D$ data(3) [75:0] $end - $var wire 76 /D$ data(4) [75:0] $end - $var wire 76 2D$ data(5) [75:0] $end - $var wire 76 5D$ data(6) [75:0] $end - $var wire 76 8D$ data(7) [75:0] $end - $scope module genblk2 $end - $var wire 1 oF$ bypass_r $end - $var wire 76 ?F$ curr_r [75:0] $end - $var wire 1 E{# empty_r $end - $var wire 1 M{# full_r $end - $var wire 76 'F$ head_r [75:0] $end - $var wire 3 gF$ rd_ptr_next_r [2:0] $end - $var wire 3 _F$ rd_ptr_r [2:0] $end - $var wire 3 WF$ wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dfp_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 K\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 153 u) data_in [152:0] $end - $var wire 153 I5! data_out [152:0] $end - $var wire 1 ew# empty $end - $var wire 1 mw# full $end - $var wire 1 o,! pop $end - $var wire 1 'Z& push $end - $var wire 1 q5! reading $end - $var wire 1 KT& reset $end - $var wire 5 M!$ size [4:0] $end - $var wire 5 M!$ size_r [4:0] $end - $var wire 1 ?* writing $end - $scope module genblk3 $end - $var wire 153 U!$ data(0) [152:0] $end - $var wire 153 Z!$ data(1) [152:0] $end - $var wire 153 )"$ data(10) [152:0] $end - $var wire 153 ."$ data(11) [152:0] $end - $var wire 153 3"$ data(12) [152:0] $end - $var wire 153 8"$ data(13) [152:0] $end - $var wire 153 ="$ data(14) [152:0] $end - $var wire 153 B"$ data(15) [152:0] $end - $var wire 153 _!$ data(2) [152:0] $end - $var wire 153 d!$ data(3) [152:0] $end - $var wire 153 i!$ data(4) [152:0] $end - $var wire 153 n!$ data(5) [152:0] $end - $var wire 153 s!$ data(6) [152:0] $end - $var wire 153 x!$ data(7) [152:0] $end - $var wire 153 }!$ data(8) [152:0] $end - $var wire 153 $"$ data(9) [152:0] $end - $scope module genblk2 $end - $var wire 1 M)$ bypass_r $end - $var wire 153 k($ curr_r [152:0] $end - $var wire 1 ew# empty_r $end - $var wire 1 mw# full_r $end - $var wire 153 C($ head_r [152:0] $end - $var wire 4 E)$ rd_ptr_next_r [3:0] $end - $var wire 4 =)$ rd_ptr_r [3:0] $end - $var wire 4 5)$ wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 {\& DATAW [31:0] $end - $var wire 32 I[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 199 e?! data_in [198:0] $end - $var wire 199 ?@! data_out [198:0] $end - $var wire 1 U{# empty $end - $var wire 1 ]{# full $end - $var wire 1 {4 pop $end - $var wire 1 _4! push $end - $var wire 1 I+ reading $end - $var wire 1 KT& reset $end - $var wire 3 wF$ size [2:0] $end - $var wire 3 wF$ size_r [2:0] $end - $var wire 1 w@! writing $end - $scope module genblk3 $end - $var wire 199 !G$ data(0) [198:0] $end - $var wire 199 (G$ data(1) [198:0] $end - $var wire 199 /G$ data(2) [198:0] $end - $var wire 199 6G$ data(3) [198:0] $end - $scope module genblk2 $end - $var wire 1 oJ$ bypass_r $end - $var wire 199 }I$ curr_r [198:0] $end - $var wire 1 U{# empty_r $end - $var wire 1 ]{# full_r $end - $var wire 199 EI$ head_r [198:0] $end - $var wire 2 gJ$ rd_ptr_next_r [1:0] $end - $var wire 2 _J$ rd_ptr_r [1:0] $end - $var wire 2 WJ$ wr_ptr_r [1:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 [\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 242 G8! in [241:0] $end - $var wire 242 Y3$ out [241:0] $end - $var wire 1 KT& reset $end - $var wire 1 {.! stall $end - $var wire 242 Y3$ value [241:0] $end - $upscope $end - $scope module snp_req_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 C\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 54 ]) data_in [53:0] $end - $var wire 54 15! data_out [53:0] $end - $var wire 1 Uw# empty $end - $var wire 1 ]w# full $end - $var wire 1 O,! pop $end - $var wire 1 /Z& push $end - $var wire 1 A5! reading $end - $var wire 1 KT& reset $end - $var wire 5 }{# size [4:0] $end - $var wire 5 }{# size_r [4:0] $end - $var wire 1 m) writing $end - $scope module genblk3 $end - $var wire 54 '|# data(0) [53:0] $end - $var wire 54 )|# data(1) [53:0] $end - $var wire 54 ;|# data(10) [53:0] $end - $var wire 54 =|# data(11) [53:0] $end - $var wire 54 ?|# data(12) [53:0] $end - $var wire 54 A|# data(13) [53:0] $end - $var wire 54 C|# data(14) [53:0] $end - $var wire 54 E|# data(15) [53:0] $end - $var wire 54 +|# data(2) [53:0] $end - $var wire 54 -|# data(3) [53:0] $end - $var wire 54 /|# data(4) [53:0] $end - $var wire 54 1|# data(5) [53:0] $end - $var wire 54 3|# data(6) [53:0] $end - $var wire 54 5|# data(7) [53:0] $end - $var wire 54 7|# data(8) [53:0] $end - $var wire 54 9|# data(9) [53:0] $end - $scope module genblk2 $end - $var wire 1 E!$ bypass_r $end - $var wire 54 {~# curr_r [53:0] $end - $var wire 1 Uw# empty_r $end - $var wire 1 ]w# full_r $end - $var wire 54 k~# head_r [53:0] $end - $var wire 4 =!$ rd_ptr_next_r [3:0] $end - $var wire 4 5!$ rd_ptr_r [3:0] $end - $var wire 4 -!$ wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module st_1e_2 $end - $var wire 32 k\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 316 Q=! in [315:0] $end - $var wire 316 ==$ out [315:0] $end - $var wire 1 KT& reset $end - $var wire 1 {.! stall $end - $var wire 316 ==$ value [315:0] $end - $upscope $end - $scope module tag_data_access $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 E;! data_write [127:0] $end - $var wire 1 C2! dirty_st1e $end - $var wire 16 K2! dirtyb_st1e [15:0] $end - $var wire 1 {2! fill_saw_dirty_st1e $end - $var wire 1 ;2! fill_sent $end - $var wire 1 O% data(15) [127:0] $end - $var wire 128 a9% data(2) [127:0] $end - $var wire 128 #:% data(3) [127:0] $end - $var wire 128 C:% data(4) [127:0] $end - $var wire 128 c:% data(5) [127:0] $end - $var wire 128 %;% data(6) [127:0] $end - $var wire 128 E;% data(7) [127:0] $end - $var wire 128 e;% data(8) [127:0] $end - $var wire 128 '<% data(9) [127:0] $end - $var wire 16 1A% dirty [15:0] $end - $var wire 16 m?% dirtyb(0) [15:0] $end - $var wire 16 u?% dirtyb(1) [15:0] $end - $var wire 16 _@% dirtyb(10) [15:0] $end - $var wire 16 g@% dirtyb(11) [15:0] $end - $var wire 16 o@% dirtyb(12) [15:0] $end - $var wire 16 w@% dirtyb(13) [15:0] $end - $var wire 16 !A% dirtyb(14) [15:0] $end - $var wire 16 )A% dirtyb(15) [15:0] $end - $var wire 16 }?% dirtyb(2) [15:0] $end - $var wire 16 '@% dirtyb(3) [15:0] $end - $var wire 16 /@% dirtyb(4) [15:0] $end - $var wire 16 7@% dirtyb(5) [15:0] $end - $var wire 16 ?@% dirtyb(6) [15:0] $end - $var wire 16 G@% dirtyb(7) [15:0] $end - $var wire 16 O@% dirtyb(8) [15:0] $end - $var wire 16 W@% dirtyb(9) [15:0] $end - $var wire 1 ye! do_write $end - $var wire 1 =[! fill_sent $end - $var wire 32 AA% i [31:0] $end - $var wire 1 gd! invalidate $end - $var wire 32 IA% j [31:0] $end - $var wire 4 +b! read_addr [3:0] $end - $var wire 128 mc! read_data [127:0] $end - $var wire 1 Uc! read_dirty $end - $var wire 16 ]c! read_dirtyb [15:0] $end - $var wire 21 ec! read_tag [20:0] $end - $var wire 1 Mc! read_valid $end - $var wire 1 KT& reset $end - $var wire 1 }W! stall_bank_pipe $end - $var wire 21 K>% tag(0) [20:0] $end - $var wire 21 L>% tag(1) [20:0] $end - $var wire 21 U>% tag(10) [20:0] $end - $var wire 21 V>% tag(11) [20:0] $end - $var wire 21 W>% tag(12) [20:0] $end - $var wire 21 X>% tag(13) [20:0] $end - $var wire 21 Y>% tag(14) [20:0] $end - $var wire 21 Z>% tag(15) [20:0] $end - $var wire 21 M>% tag(2) [20:0] $end - $var wire 21 N>% tag(3) [20:0] $end - $var wire 21 O>% tag(4) [20:0] $end - $var wire 21 P>% tag(5) [20:0] $end - $var wire 21 Q>% tag(6) [20:0] $end - $var wire 21 R>% tag(7) [20:0] $end - $var wire 21 S>% tag(8) [20:0] $end - $var wire 21 T>% tag(9) [20:0] $end - $var wire 21 !e! tag_index [20:0] $end - $var wire 16 9A% valid [15:0] $end - $var wire 4 +b! write_addr [3:0] $end - $var wire 128 Gd! write_data [127:0] $end - $var wire 16 ?d! write_enable [15:0] $end - $var wire 1 wd! write_fill $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module genblk5(6) $end - $var wire 120 kT& curr_bank_core_req_addr [119:0] $end - $var wire 16 cT& curr_bank_core_req_byteen [15:0] $end - $var wire 128 -U& curr_bank_core_req_data [127:0] $end - $var wire 1 #8" curr_bank_core_req_ready $end - $var wire 4 [T& curr_bank_core_req_rw [3:0] $end - $var wire 42 MU& curr_bank_core_req_tag [41:0] $end - $var wire 4 G" curr_bank_core_req_valid [3:0] $end - $var wire 32 sD curr_bank_core_rsp_data [31:0] $end - $var wire 1 O" curr_bank_core_rsp_ready $end - $var wire 42 {D curr_bank_core_rsp_tag [41:0] $end - $var wire 2 kD curr_bank_core_rsp_tid [1:0] $end - $var wire 1 a7" curr_bank_core_rsp_valid $end - $var wire 25 q7" curr_bank_dram_fill_req_addr [24:0] $end - $var wire 1 %5" curr_bank_dram_fill_req_ready $end - $var wire 1 -E curr_bank_dram_fill_req_valid $end - $var wire 25 MY& curr_bank_dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& curr_bank_dram_fill_rsp_data [127:0] $end - $var wire 1 i7" curr_bank_dram_fill_rsp_ready $end - $var wire 1 WZ& curr_bank_dram_fill_rsp_valid $end - $var wire 25 EE curr_bank_dram_wb_req_addr [24:0] $end - $var wire 16 =E curr_bank_dram_wb_req_byteen [15:0] $end - $var wire 128 ME curr_bank_dram_wb_req_data [127:0] $end - $var wire 1 W" curr_bank_dram_wb_req_ready $end - $var wire 1 5E curr_bank_dram_wb_req_valid $end - $var wire 25 ]Y& curr_bank_snp_req_addr [24:0] $end - $var wire 1 #X& curr_bank_snp_req_invalidate $end - $var wire 1 y7" curr_bank_snp_req_ready $end - $var wire 28 +X& curr_bank_snp_req_tag [27:0] $end - $var wire 1 _Z& curr_bank_snp_req_valid $end - $var wire 1 _" curr_bank_snp_rsp_ready $end - $var wire 28 uE curr_bank_snp_rsp_tag [27:0] $end - $var wire 1 mE curr_bank_snp_rsp_valid $end - $scope module bank $end - $var wire 32 =]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 25 ;n! addr_st1(0) [24:0] $end - $var wire 25 9q! addr_st1e [24:0] $end - $var wire 25 q7" addr_st2 [24:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 #8" core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 G" core_req_valid [3:0] $end - $var wire 32 sD core_rsp_data [31:0] $end - $var wire 1 O" core_rsp_ready $end - $var wire 42 {D core_rsp_tag [41:0] $end - $var wire 2 kD core_rsp_tid [1:0] $end - $var wire 1 a7" core_rsp_valid $end - $var wire 32 yQ% cwbq_data [31:0] $end - $var wire 1 MS% cwbq_empty $end - $var wire 1 US% cwbq_full $end - $var wire 1 u5 cwbq_pop $end - $var wire 1 yq! cwbq_push $end - $var wire 1 7l! cwbq_push_stall $end - $var wire 1 #r! cwbq_push_unqual $end - $var wire 42 9Q% cwbq_tag [41:0] $end - $var wire 2 1Q% cwbq_tid [1:0] $end - $var wire 25 Kj! dfpq_addr_st0 [24:0] $end - $var wire 1 mO% dfpq_empty $end - $var wire 128 Sj! dfpq_filldata_st0 [127:0] $end - $var wire 1 uO% dfpq_full $end - $var wire 1 Cj! dfpq_pop $end - $var wire 1 ol! dfpq_pop_unqual $end - $var wire 1 uo! dirty_st1e $end - $var wire 1 KR% dirty_st2 $end - $var wire 16 }o! dirtyb_st1e [15:0] $end - $var wire 16 SR% dirtyb_st2 [15:0] $end - $var wire 25 q7" dram_fill_req_addr [24:0] $end - $var wire 1 aq! dram_fill_req_fast $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 1 Gl! dram_fill_req_stall $end - $var wire 1 +r! dram_fill_req_unqual $end - $var wire 1 -E dram_fill_req_valid $end - $var wire 25 MY& dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& dram_fill_rsp_data [127:0] $end - $var wire 1 i7" dram_fill_rsp_ready $end - $var wire 1 WZ& dram_fill_rsp_valid $end - $var wire 25 EE dram_wb_req_addr [24:0] $end - $var wire 16 =E dram_wb_req_byteen [15:0] $end - $var wire 128 ME dram_wb_req_data [127:0] $end - $var wire 1 Y/ dram_wb_req_fire $end - $var wire 1 W" dram_wb_req_ready $end - $var wire 1 5E dram_wb_req_valid $end - $var wire 1 }S% dwbq_dual_valid_sel $end - $var wire 1 ]S% dwbq_empty $end - $var wire 1 eS% dwbq_full $end - $var wire 1 ;r! dwbq_is_dwb_in $end - $var wire 1 Kr! dwbq_is_dwb_out $end - $var wire 1 Cr! dwbq_is_snp_in $end - $var wire 1 Sr! dwbq_is_snp_out $end - $var wire 1 }5 dwbq_pop $end - $var wire 1 3r! dwbq_push $end - $var wire 1 ?l! dwbq_push_stall $end - $var wire 1 [r! dwbq_push_unqual $end - $var wire 25 mS% dwbq_req_addr [24:0] $end - $var wire 1 Op! fill_saw_dirty_st1e $end - $var wire 1 sR% fill_saw_dirty_st2 $end - $var wire 1 }k! force_request_miss_st1e $end - $var wire 1 gl! going_to_write_st1(0) $end - $var wire 49 Sn! inst_meta_st1(0) [48:0] $end - $var wire 49 [R% inst_meta_st2 [48:0] $end - $var wire 1 Wl! is_fill_in_pipe $end - $var wire 1 _l! is_fill_st1(0) $end - $var wire 1 YQ% is_fill_st2 $end - $var wire 1 5o! is_mrvq_st1(0) $end - $var wire 1 )q! is_mrvq_st1e $end - $var wire 1 )q! is_mrvq_st1e_st2 $end - $var wire 1 5S% is_mrvq_st2 $end - $var wire 1 %o! is_snp_st1(0) $end - $var wire 1 Wp! is_snp_st1e $end - $var wire 1 {R% is_snp_st2 $end - $var wire 32 ;\& j [31:0] $end - $var wire 4 Gp! mem_byteen_st1e [3:0] $end - $var wire 1 ?p! mem_rw_st1e $end - $var wire 1 iq! miss_add $end - $var wire 25 q7" miss_add_addr [24:0] $end - $var wire 1 wp! miss_add_because_miss $end - $var wire 1 -S% miss_add_because_pending $end - $var wire 4 QQ% miss_add_byteen [3:0] $end - $var wire 32 qQ% miss_add_data [31:0] $end - $var wire 1 qq! miss_add_is_mrvq $end - $var wire 1 {R% miss_add_is_snp $end - $var wire 1 IQ% miss_add_rw $end - $var wire 1 %S% miss_add_snp_invalidate $end - $var wire 42 9Q% miss_add_tag [41:0] $end - $var wire 2 1Q% miss_add_tid [1:0] $end - $var wire 1 aq! miss_add_unqual $end - $var wire 2 iQ% miss_add_wsel [1:0] $end - $var wire 1 mo! miss_st1e $end - $var wire 1 CR% miss_st2 $end - $var wire 25 OP% mrvq_addr_st0 [24:0] $end - $var wire 4 wP% mrvq_byteen_st0 [3:0] $end - $var wire 1 7P% mrvq_full $end - $var wire 1 Qq! mrvq_init_ready_state_hazard_st0_st1 $end - $var wire 1 Yq! mrvq_init_ready_state_hazard_st1e_st1 $end - $var wire 1 op! mrvq_init_ready_state_st1e $end - $var wire 1 Iq! mrvq_init_ready_state_st2 $end - $var wire 1 ES% mrvq_init_ready_state_unqual_st2 $end - $var wire 1 !Q% mrvq_is_snp_st0 $end - $var wire 1 mk! mrvq_pending_hazard_st1e $end - $var wire 1 Uk! mrvq_pop $end - $var wire 1 ]k! mrvq_pop_unqual $end - $var wire 1 /l! mrvq_push_stall $end - $var wire 1 1q! mrvq_recover_ready_state_st1e $end - $var wire 1 =S% mrvq_recover_ready_state_st2 $end - $var wire 1 ek! mrvq_rw_st0 $end - $var wire 1 )Q% mrvq_snp_invalidate_st0 $end - $var wire 1 ?P% mrvq_stop $end - $var wire 42 gP% mrvq_tag_st0 [41:0] $end - $var wire 2 GP% mrvq_tid_st0 [1:0] $end - $var wire 1 ]k! mrvq_valid_st0 $end - $var wire 32 _P% mrvq_writeword_st0 [31:0] $end - $var wire 2 WP% mrvq_wsel_st0 [1:0] $end - $var wire 25 1m! qual_addr_st0 [24:0] $end - $var wire 1 ym! qual_going_to_write_st0 $end - $var wire 49 im! qual_inst_meta_st0 [48:0] $end - $var wire 1 ol! qual_is_fill_st0 $end - $var wire 1 ]k! qual_is_mrvq_st0 $end - $var wire 1 #n! qual_is_snp_st0 $end - $var wire 1 +n! qual_snp_invalidate_st0 $end - $var wire 1 )m! qual_valid_st0 $end - $var wire 1 Aq! qual_valid_st1e_2 $end - $var wire 128 Im! qual_writedata_st0 [127:0] $end - $var wire 32 Am! qual_writeword_st0 [31:0] $end - $var wire 2 9m! qual_wsel_st0 [1:0] $end - $var wire 128 Eo! readdata_st1e [127:0] $end - $var wire 128 #R% readdata_st2 [127:0] $end - $var wire 21 eo! readtag_st1e [20:0] $end - $var wire 21 kR% readtag_st2 [20:0] $end - $var wire 32 =o! readword_st1e [31:0] $end - $var wire 32 yQ% readword_st2 [31:0] $end - $var wire 1 'l! recover_mrvq_state_st2 $end - $var wire 1 {j! reqq_empty $end - $var wire 1 }O% reqq_full $end - $var wire 1 sj! reqq_pop $end - $var wire 1 wl! reqq_pop_unqual $end - $var wire 1 m5 reqq_push $end - $var wire 30 Ek! reqq_req_addr_st0 [29:0] $end - $var wire 4 =k! reqq_req_byteen_st0 [3:0] $end - $var wire 1 5k! reqq_req_rw_st0 $end - $var wire 1 %k! reqq_req_st0 $end - $var wire 42 'P% reqq_req_tag_st0 [41:0] $end - $var wire 2 -k! reqq_req_tid_st0 [1:0] $end - $var wire 32 Mk! reqq_req_writeword_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 -o! snp_invalidate_st1(0) $end - $var wire 1 _p! snp_invalidate_st1e $end - $var wire 1 %S% snp_invalidate_st2 $end - $var wire 25 ]Y& snp_req_addr [24:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 y7" snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 _Z& snp_req_valid $end - $var wire 1 a/ snp_rsp_fire $end - $var wire 1 _" snp_rsp_ready $end - $var wire 28 uE snp_rsp_tag [27:0] $end - $var wire 1 mE snp_rsp_valid $end - $var wire 1 gp! snp_to_mrvq_st1e $end - $var wire 1 -S% snp_to_mrvq_st2 $end - $var wire 25 +j! snrq_addr_st0 [24:0] $end - $var wire 1 ]O% snrq_empty $end - $var wire 1 eO% snrq_full $end - $var wire 1 3j! snrq_invalidate_st0 $end - $var wire 1 #j! snrq_pop $end - $var wire 1 !m! snrq_pop_unqual $end - $var wire 28 ;j! snrq_tag_st0 [27:0] $end - $var wire 28 uS% snrq_tag_st2 [27:0] $end - $var wire 1 uk! st2_pending_hazard_st1e $end - $var wire 1 Ol! stall_bank_pipe $end - $var wire 42 'p! tag_st1e [41:0] $end - $var wire 2 7p! tid_st1e [1:0] $end - $var wire 1 3n! valid_st1(0) $end - $var wire 1 !q! valid_st1e $end - $var wire 1 aQ% valid_st2 $end - $var wire 128 cn! writedata_st1(0) [127:0] $end - $var wire 32 Kn! writeword_st1(0) [31:0] $end - $var wire 32 qQ% writeword_st2 [31:0] $end - $var wire 2 Cn! wsel_st1(0) [1:0] $end - $var wire 2 iQ% wsel_st2 [1:0] $end - $scope module cache_miss_resrv $end - $var wire 32 =]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 400 ?x% addr_table [399:0] $end - $var wire 1 CT& clk $end - $var wire 4 Yy% dequeue_index [3:0] $end - $var wire 1 ]k! dequeue_possible $end - $var wire 4 iy% enqueue_index [3:0] $end - $var wire 1 yy% enqueue_possible $end - $var wire 25 9q! fill_addr_st1 [24:0] $end - $var wire 4 ay% head_ptr [3:0] $end - $var wire 1 G|! increment_head $end - $var wire 1 cv! is_fill_st1 $end - $var wire 1 qq! is_mrvq $end - $var wire 16 u{! make_ready [15:0] $end - $var wire 16 }{! make_ready_push [15:0] $end - $var wire 85 7t% metadata_table(0) [84:0] $end - $var wire 85 :t% metadata_table(1) [84:0] $end - $var wire 85 Ut% metadata_table(10) [84:0] $end - $var wire 85 Xt% metadata_table(11) [84:0] $end - $var wire 85 [t% metadata_table(12) [84:0] $end - $var wire 85 ^t% metadata_table(13) [84:0] $end - $var wire 85 at% metadata_table(14) [84:0] $end - $var wire 85 dt% metadata_table(15) [84:0] $end - $var wire 85 =t% metadata_table(2) [84:0] $end - $var wire 85 @t% metadata_table(3) [84:0] $end - $var wire 85 Ct% metadata_table(4) [84:0] $end - $var wire 85 Ft% metadata_table(5) [84:0] $end - $var wire 85 It% metadata_table(6) [84:0] $end - $var wire 85 Lt% metadata_table(7) [84:0] $end - $var wire 85 Ot% metadata_table(8) [84:0] $end - $var wire 85 Rt% metadata_table(9) [84:0] $end - $var wire 1 iq! miss_add $end - $var wire 25 q7" miss_add_addr [24:0] $end - $var wire 4 QQ% miss_add_byteen [3:0] $end - $var wire 32 qQ% miss_add_data [31:0] $end - $var wire 1 {R% miss_add_is_snp $end - $var wire 1 IQ% miss_add_rw $end - $var wire 1 %S% miss_add_snp_invalidate $end - $var wire 42 9Q% miss_add_tag [41:0] $end - $var wire 2 1Q% miss_add_tid [1:0] $end - $var wire 2 iQ% miss_add_wsel [1:0] $end - $var wire 25 OP% miss_resrv_addr_st0 [24:0] $end - $var wire 4 wP% miss_resrv_byteen_st0 [3:0] $end - $var wire 32 _P% miss_resrv_data_st0 [31:0] $end - $var wire 1 7P% miss_resrv_full $end - $var wire 1 !Q% miss_resrv_is_snp_st0 $end - $var wire 1 Uk! miss_resrv_pop $end - $var wire 1 ek! miss_resrv_rw_st0 $end - $var wire 1 )Q% miss_resrv_snp_invalidate_st0 $end - $var wire 1 ?P% miss_resrv_stop $end - $var wire 42 gP% miss_resrv_tag_st0 [41:0] $end - $var wire 2 GP% miss_resrv_tid_st0 [1:0] $end - $var wire 1 ]k! miss_resrv_valid_st0 $end - $var wire 2 WP% miss_resrv_wsel_st0 [1:0] $end - $var wire 1 Iq! mrvq_init_ready_state $end - $var wire 1 7|! mrvq_pop $end - $var wire 1 /|! mrvq_push $end - $var wire 1 mk! pending_hazard $end - $var wire 1 W|! qual_mrvq_init $end - $var wire 16 Qy% ready_table [15:0] $end - $var wire 1 ?|! recover_state $end - $var wire 1 KT& reset $end - $var wire 4 Yy% schedule_ptr [3:0] $end - $var wire 5 qy% size [4:0] $end - $var wire 4 iy% tail_ptr [3:0] $end - $var wire 1 O|! update_ready $end - $var wire 16 '|! valid_address_match [15:0] $end - $var wire 16 Iy% valid_table [15:0] $end - $upscope $end - $scope module core_req_arb $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 120 kT& bank_addr [119:0] $end - $var wire 16 cT& bank_byteen [15:0] $end - $var wire 4 [T& bank_rw [3:0] $end - $var wire 42 MU& bank_tag [41:0] $end - $var wire 4 G" bank_valids [3:0] $end - $var wire 128 -U& bank_writedata [127:0] $end - $var wire 1 CT& clk $end - $var wire 1 W`% o_empty $end - $var wire 1 Wt! out_empty $end - $var wire 120 es! out_per_addr [119:0] $end - $var wire 16 ]s! out_per_byteen [15:0] $end - $var wire 4 Us! out_per_rw [3:0] $end - $var wire 42 Gt! out_per_tag [41:0] $end - $var wire 4 Ms! out_per_valids [3:0] $end - $var wire 128 't! out_per_writedata [127:0] $end - $var wire 1 _t! pop_qual $end - $var wire 1 '6 push_qual $end - $var wire 120 u_% qual_addr [119:0] $end - $var wire 16 m_% qual_byteen [15:0] $end - $var wire 1 %k! qual_has_request $end - $var wire 2 -k! qual_request_index [1:0] $end - $var wire 4 e_% qual_rw [3:0] $end - $var wire 42 'P% qual_tag [41:0] $end - $var wire 4 ]_% qual_valids [3:0] $end - $var wire 128 7`% qual_writedata [127:0] $end - $var wire 4 gt! real_out_per_valids [3:0] $end - $var wire 1 {j! reqq_empty $end - $var wire 1 }O% reqq_full $end - $var wire 1 sj! reqq_pop $end - $var wire 1 m5 reqq_push $end - $var wire 30 Ek! reqq_req_addr_st0 [29:0] $end - $var wire 4 =k! reqq_req_byteen_st0 [3:0] $end - $var wire 1 5k! reqq_req_rw_st0 $end - $var wire 1 %k! reqq_req_st0 $end - $var wire 42 'P% reqq_req_tag_st0 [41:0] $end - $var wire 2 -k! reqq_req_tid_st0 [1:0] $end - $var wire 32 Mk! reqq_req_writedata_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 _`% use_empty $end - $var wire 120 u_% use_per_addr [119:0] $end - $var wire 16 m_% use_per_byteen [15:0] $end - $var wire 4 e_% use_per_rw [3:0] $end - $var wire 42 'P% use_per_tag [41:0] $end - $var wire 4 ]_% use_per_valids [3:0] $end - $var wire 128 7`% use_per_writedata [127:0] $end - $scope module reqq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 S\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 314 S0 data_in [313:0] $end - $var wire 314 ot! data_out [313:0] $end - $var wire 1 W`% empty $end - $var wire 1 }O% full $end - $var wire 1 _t! pop $end - $var wire 1 '6 push $end - $var wire 1 au! reading $end - $var wire 1 KT& reset $end - $var wire 4 g`% size [3:0] $end - $var wire 4 g`% size_r [3:0] $end - $var wire 1 E1 writing $end - $scope module genblk3 $end - $var wire 314 o`% data(0) [313:0] $end - $var wire 314 y`% data(1) [313:0] $end - $var wire 314 %a% data(2) [313:0] $end - $var wire 314 /a% data(3) [313:0] $end - $var wire 314 9a% data(4) [313:0] $end - $var wire 314 Ca% data(5) [313:0] $end - $var wire 314 Ma% data(6) [313:0] $end - $var wire 314 Wa% data(7) [313:0] $end - $scope module genblk2 $end - $var wire 1 Yi% bypass_r $end - $var wire 314 Oh% curr_r [313:0] $end - $var wire 1 W`% empty_r $end - $var wire 1 }O% full_r $end - $var wire 314 ]g% head_r [313:0] $end - $var wire 3 Qi% rd_ptr_next_r [2:0] $end - $var wire 3 Ii% rd_ptr_r [2:0] $end - $var wire 3 Ai% wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_bank $end - $var wire 32 I[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 2 -k! grant_index [1:0] $end - $var wire 4 iu! grant_onehot [3:0] $end - $var wire 1 %k! grant_valid $end - $var wire 4 ]_% requests [3:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 4 iu! grant_onehot_r [3:0] $end - $scope module priority_encoder $end - $var wire 32 I[& N [31:0] $end - $var wire 4 ]_% data_in [3:0] $end - $var wire 2 -k! data_out [1:0] $end - $var wire 32 qu! i [31:0] $end - $var wire 1 %k! valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module cwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 s\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 76 _|! data_in [75:0] $end - $var wire 76 w|! data_out [75:0] $end - $var wire 1 MS% empty $end - $var wire 1 US% full $end - $var wire 1 u5 pop $end - $var wire 1 yq! push $end - $var wire 1 M1 reading $end - $var wire 1 KT& reset $end - $var wire 4 #z% size [3:0] $end - $var wire 4 #z% size_r [3:0] $end - $var wire 1 1}! writing $end - $scope module genblk3 $end - $var wire 76 +z% data(0) [75:0] $end - $var wire 76 .z% data(1) [75:0] $end - $var wire 76 1z% data(2) [75:0] $end - $var wire 76 4z% data(3) [75:0] $end - $var wire 76 7z% data(4) [75:0] $end - $var wire 76 :z% data(5) [75:0] $end - $var wire 76 =z% data(6) [75:0] $end - $var wire 76 @z% data(7) [75:0] $end - $scope module genblk2 $end - $var wire 1 w|% bypass_r $end - $var wire 76 G|% curr_r [75:0] $end - $var wire 1 MS% empty_r $end - $var wire 1 US% full_r $end - $var wire 76 /|% head_r [75:0] $end - $var wire 3 o|% rd_ptr_next_r [2:0] $end - $var wire 3 g|% rd_ptr_r [2:0] $end - $var wire 3 _|% wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dfp_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 K\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 153 #0 data_in [152:0] $end - $var wire 153 {r! data_out [152:0] $end - $var wire 1 mO% empty $end - $var wire 1 uO% full $end - $var wire 1 Cj! pop $end - $var wire 1 WZ& push $end - $var wire 1 Es! reading $end - $var wire 1 KT& reset $end - $var wire 5 UW% size [4:0] $end - $var wire 5 UW% size_r [4:0] $end - $var wire 1 K0 writing $end - $scope module genblk3 $end - $var wire 153 ]W% data(0) [152:0] $end - $var wire 153 bW% data(1) [152:0] $end - $var wire 153 1X% data(10) [152:0] $end - $var wire 153 6X% data(11) [152:0] $end - $var wire 153 ;X% data(12) [152:0] $end - $var wire 153 @X% data(13) [152:0] $end - $var wire 153 EX% data(14) [152:0] $end - $var wire 153 JX% data(15) [152:0] $end - $var wire 153 gW% data(2) [152:0] $end - $var wire 153 lW% data(3) [152:0] $end - $var wire 153 qW% data(4) [152:0] $end - $var wire 153 vW% data(5) [152:0] $end - $var wire 153 {W% data(6) [152:0] $end - $var wire 153 "X% data(7) [152:0] $end - $var wire 153 'X% data(8) [152:0] $end - $var wire 153 ,X% data(9) [152:0] $end - $scope module genblk2 $end - $var wire 1 U_% bypass_r $end - $var wire 153 s^% curr_r [152:0] $end - $var wire 1 mO% empty_r $end - $var wire 1 uO% full_r $end - $var wire 153 K^% head_r [152:0] $end - $var wire 4 M_% rd_ptr_next_r [3:0] $end - $var wire 4 E_% rd_ptr_r [3:0] $end - $var wire 4 =_% wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 {\& DATAW [31:0] $end - $var wire 32 I[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 199 9}! data_in [198:0] $end - $var wire 199 q}! data_out [198:0] $end - $var wire 1 ]S% empty $end - $var wire 1 eS% full $end - $var wire 1 }5 pop $end - $var wire 1 3r! push $end - $var wire 1 U1 reading $end - $var wire 1 KT& reset $end - $var wire 3 !}% size [2:0] $end - $var wire 3 !}% size_r [2:0] $end - $var wire 1 K~! writing $end - $scope module genblk3 $end - $var wire 199 )}% data(0) [198:0] $end - $var wire 199 0}% data(1) [198:0] $end - $var wire 199 7}% data(2) [198:0] $end - $var wire 199 >}% data(3) [198:0] $end - $scope module genblk2 $end - $var wire 1 w"& bypass_r $end - $var wire 199 '"& curr_r [198:0] $end - $var wire 1 ]S% empty_r $end - $var wire 1 eS% full_r $end - $var wire 199 M!& head_r [198:0] $end - $var wire 2 o"& rd_ptr_next_r [1:0] $end - $var wire 2 g"& rd_ptr_r [1:0] $end - $var wire 2 _"& wr_ptr_r [1:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 [\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 242 yu! in [241:0] $end - $var wire 242 ai% out [241:0] $end - $var wire 1 KT& reset $end - $var wire 1 Ol! stall $end - $var wire 242 ai% value [241:0] $end - $upscope $end - $scope module snp_req_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 C\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 54 i/ data_in [53:0] $end - $var wire 54 cr! data_out [53:0] $end - $var wire 1 ]O% empty $end - $var wire 1 eO% full $end - $var wire 1 #j! pop $end - $var wire 1 _Z& push $end - $var wire 1 sr! reading $end - $var wire 1 KT& reset $end - $var wire 5 'T% size [4:0] $end - $var wire 5 'T% size_r [4:0] $end - $var wire 1 y/ writing $end - $scope module genblk3 $end - $var wire 54 /T% data(0) [53:0] $end - $var wire 54 1T% data(1) [53:0] $end - $var wire 54 CT% data(10) [53:0] $end - $var wire 54 ET% data(11) [53:0] $end - $var wire 54 GT% data(12) [53:0] $end - $var wire 54 IT% data(13) [53:0] $end - $var wire 54 KT% data(14) [53:0] $end - $var wire 54 MT% data(15) [53:0] $end - $var wire 54 3T% data(2) [53:0] $end - $var wire 54 5T% data(3) [53:0] $end - $var wire 54 7T% data(4) [53:0] $end - $var wire 54 9T% data(5) [53:0] $end - $var wire 54 ;T% data(6) [53:0] $end - $var wire 54 =T% data(7) [53:0] $end - $var wire 54 ?T% data(8) [53:0] $end - $var wire 54 AT% data(9) [53:0] $end - $scope module genblk2 $end - $var wire 1 MW% bypass_r $end - $var wire 54 %W% curr_r [53:0] $end - $var wire 1 ]O% empty_r $end - $var wire 1 eO% full_r $end - $var wire 54 sV% head_r [53:0] $end - $var wire 4 EW% rd_ptr_next_r [3:0] $end - $var wire 4 =W% rd_ptr_r [3:0] $end - $var wire 4 5W% wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module st_1e_2 $end - $var wire 32 k\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 316 %{! in [315:0] $end - $var wire 316 Es% out [315:0] $end - $var wire 1 KT& reset $end - $var wire 1 Ol! stall $end - $var wire 316 Es% value [315:0] $end - $upscope $end - $scope module tag_data_access $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 wx! data_write [127:0] $end - $var wire 1 uo! dirty_st1e $end - $var wire 16 }o! dirtyb_st1e [15:0] $end - $var wire 1 Op! fill_saw_dirty_st1e $end - $var wire 1 mo! fill_sent $end - $var wire 1 #z! force_core_miss $end - $var wire 1 }k! force_request_miss_st1e $end - $var wire 1 9y! invalidate_line $end - $var wire 1 Wp! is_snp_st1e $end - $var wire 4 Gp! mem_byteen_st1e [3:0] $end - $var wire 1 ?p! mem_rw_st1e $end - $var wire 1 mo! miss_st1e $end - $var wire 1 op! mrvq_init_ready_state_st1e $end - $var wire 128 ?x! qual_read_data_st1 [127:0] $end - $var wire 1 'x! qual_read_dirty_st1 $end - $var wire 16 /x! qual_read_dirtyb_st1 [15:0] $end - $var wire 21 7x! qual_read_tag_st1 [20:0] $end - $var wire 1 }w! qual_read_valid_st1 $end - $var wire 128 ]w! read_data_st1c(0) [127:0] $end - $var wire 1 Ew! read_dirty_st1c(0) $end - $var wire 16 Mw! read_dirtyb_st1c(0) [15:0] $end - $var wire 21 Uw! read_tag_st1c(0) [20:0] $end - $var wire 1 =w! read_valid_st1c(0) $end - $var wire 4 [v! readaddr_st10 [3:0] $end - $var wire 128 Eo! readdata_st1e [127:0] $end - $var wire 21 eo! readtag_st1e [20:0] $end - $var wire 32 =o! readword_st1e [31:0] $end - $var wire 1 yy! real_miss $end - $var wire 1 Iy! real_writefill $end - $var wire 1 iy! req_invalid $end - $var wire 1 qy! req_miss $end - $var wire 1 KT& reset $end - $var wire 1 ay! should_write $end - $var wire 1 9y! snoop_hit_no_pending $end - $var wire 1 _p! snp_invalidate_st1e $end - $var wire 1 gp! snp_to_mrvq_st1e $end - $var wire 1 Ol! stall $end - $var wire 1 Ol! stall_bank_pipe $end - $var wire 1 Ay! tags_match $end - $var wire 128 Eo! use_read_data_st1e [127:0] $end - $var wire 1 gx! use_read_dirty_st1e $end - $var wire 16 }o! use_read_dirtyb_st1e [15:0] $end - $var wire 21 eo! use_read_tag_st1e [20:0] $end - $var wire 1 _x! use_read_valid_st1e $end - $var wire 128 wx! use_write_data [127:0] $end - $var wire 16 ox! use_write_enable [15:0] $end - $var wire 1 !q! valid_req_st1e $end - $var wire 16 Yy! we [15:0] $end - $var wire 2 5w! wordsel_st1e [1:0] $end - $var wire 25 9q! writeaddr_st1e [24:0] $end - $var wire 128 sv! writedata_st1e [127:0] $end - $var wire 1 cv! writefill_st1e $end - $var wire 4 [v! writeladdr_st1e [3:0] $end - $var wire 21 Qy! writetag_st1e [20:0] $end - $var wire 32 kv! writeword_st1e [31:0] $end - $scope module genblk4(0) $end - $var wire 1 +z! normal_write $end - $upscope $end - $scope module genblk4(1) $end - $var wire 1 3z! normal_write $end - $upscope $end - $scope module genblk4(2) $end - $var wire 1 ;z! normal_write $end - $upscope $end - $scope module genblk4(3) $end - $var wire 1 Cz! normal_write $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 c\& N [31:0] $end - $var wire 32 Q[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 167 Sz! in [166:0] $end - $var wire 167 Sz! out [166:0] $end - $var wire 1 KT& reset $end - $var wire 1 Ol! stall $end - $var wire 167 sr% value [166:0] $end - $upscope $end - $scope module tag_data_structure $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 Cj% data(0) [127:0] $end - $var wire 128 cj% data(1) [127:0] $end - $var wire 128 im% data(10) [127:0] $end - $var wire 128 +n% data(11) [127:0] $end - $var wire 128 Kn% data(12) [127:0] $end - $var wire 128 kn% data(13) [127:0] $end - $var wire 128 -o% data(14) [127:0] $end - $var wire 128 Mo% data(15) [127:0] $end - $var wire 128 %k% data(2) [127:0] $end - $var wire 128 Ek% data(3) [127:0] $end - $var wire 128 ek% data(4) [127:0] $end - $var wire 128 'l% data(5) [127:0] $end - $var wire 128 Gl% data(6) [127:0] $end - $var wire 128 gl% data(7) [127:0] $end - $var wire 128 )m% data(8) [127:0] $end - $var wire 128 Im% data(9) [127:0] $end - $var wire 16 Sr% dirty [15:0] $end - $var wire 16 1q% dirtyb(0) [15:0] $end - $var wire 16 9q% dirtyb(1) [15:0] $end - $var wire 16 #r% dirtyb(10) [15:0] $end - $var wire 16 +r% dirtyb(11) [15:0] $end - $var wire 16 3r% dirtyb(12) [15:0] $end - $var wire 16 ;r% dirtyb(13) [15:0] $end - $var wire 16 Cr% dirtyb(14) [15:0] $end - $var wire 16 Kr% dirtyb(15) [15:0] $end - $var wire 16 Aq% dirtyb(2) [15:0] $end - $var wire 16 Iq% dirtyb(3) [15:0] $end - $var wire 16 Qq% dirtyb(4) [15:0] $end - $var wire 16 Yq% dirtyb(5) [15:0] $end - $var wire 16 aq% dirtyb(6) [15:0] $end - $var wire 16 iq% dirtyb(7) [15:0] $end - $var wire 16 qq% dirtyb(8) [15:0] $end - $var wire 16 yq% dirtyb(9) [15:0] $end - $var wire 1 Kz! do_write $end - $var wire 1 mo! fill_sent $end - $var wire 32 cr% i [31:0] $end - $var wire 1 9y! invalidate $end - $var wire 32 kr% j [31:0] $end - $var wire 4 [v! read_addr [3:0] $end - $var wire 128 ?x! read_data [127:0] $end - $var wire 1 'x! read_dirty $end - $var wire 16 /x! read_dirtyb [15:0] $end - $var wire 21 7x! read_tag [20:0] $end - $var wire 1 }w! read_valid $end - $var wire 1 KT& reset $end - $var wire 1 Ol! stall_bank_pipe $end - $var wire 21 mo% tag(0) [20:0] $end - $var wire 21 no% tag(1) [20:0] $end - $var wire 21 wo% tag(10) [20:0] $end - $var wire 21 xo% tag(11) [20:0] $end - $var wire 21 yo% tag(12) [20:0] $end - $var wire 21 zo% tag(13) [20:0] $end - $var wire 21 {o% tag(14) [20:0] $end - $var wire 21 |o% tag(15) [20:0] $end - $var wire 21 oo% tag(2) [20:0] $end - $var wire 21 po% tag(3) [20:0] $end - $var wire 21 qo% tag(4) [20:0] $end - $var wire 21 ro% tag(5) [20:0] $end - $var wire 21 so% tag(6) [20:0] $end - $var wire 21 to% tag(7) [20:0] $end - $var wire 21 uo% tag(8) [20:0] $end - $var wire 21 vo% tag(9) [20:0] $end - $var wire 21 Qy! tag_index [20:0] $end - $var wire 16 [r% valid [15:0] $end - $var wire 4 [v! write_addr [3:0] $end - $var wire 128 wx! write_data [127:0] $end - $var wire 16 ox! write_enable [15:0] $end - $var wire 1 Iy! write_fill $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module genblk5(7) $end - $var wire 120 kT& curr_bank_core_req_addr [119:0] $end - $var wire 16 cT& curr_bank_core_req_byteen [15:0] $end - $var wire 128 -U& curr_bank_core_req_data [127:0] $end - $var wire 1 K8" curr_bank_core_req_ready $end - $var wire 4 [T& curr_bank_core_req_rw [3:0] $end - $var wire 42 MU& curr_bank_core_req_tag [41:0] $end - $var wire 4 g" curr_bank_core_req_valid [3:0] $end - $var wire 32 'F curr_bank_core_rsp_data [31:0] $end - $var wire 1 o" curr_bank_core_rsp_ready $end - $var wire 42 /F curr_bank_core_rsp_tag [41:0] $end - $var wire 2 }E curr_bank_core_rsp_tid [1:0] $end - $var wire 1 +8" curr_bank_core_rsp_valid $end - $var wire 25 ;8" curr_bank_dram_fill_req_addr [24:0] $end - $var wire 1 %5" curr_bank_dram_fill_req_ready $end - $var wire 1 ?F curr_bank_dram_fill_req_valid $end - $var wire 25 MY& curr_bank_dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& curr_bank_dram_fill_rsp_data [127:0] $end - $var wire 1 38" curr_bank_dram_fill_rsp_ready $end - $var wire 1 gZ& curr_bank_dram_fill_rsp_valid $end - $var wire 25 WF curr_bank_dram_wb_req_addr [24:0] $end - $var wire 16 OF curr_bank_dram_wb_req_byteen [15:0] $end - $var wire 128 _F curr_bank_dram_wb_req_data [127:0] $end - $var wire 1 w" curr_bank_dram_wb_req_ready $end - $var wire 1 GF curr_bank_dram_wb_req_valid $end - $var wire 25 ]Y& curr_bank_snp_req_addr [24:0] $end - $var wire 1 #X& curr_bank_snp_req_invalidate $end - $var wire 1 C8" curr_bank_snp_req_ready $end - $var wire 28 +X& curr_bank_snp_req_tag [27:0] $end - $var wire 1 oZ& curr_bank_snp_req_valid $end - $var wire 1 !# curr_bank_snp_rsp_ready $end - $var wire 28 )G curr_bank_snp_rsp_tag [27:0] $end - $var wire 1 !G curr_bank_snp_rsp_valid $end - $scope module bank $end - $var wire 32 E]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 A[& CWBQ_SIZE [31:0] $end - $var wire 32 9[& DFPQ_SIZE [31:0] $end - $var wire 32 A[& DFQQ_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 I[& DWBQ_SIZE [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 )[& SNOOP_FORWARDING [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 9[& SNRQ_SIZE [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 25 k$" addr_st1(0) [24:0] $end - $var wire 25 i'" addr_st1e [24:0] $end - $var wire 25 ;8" addr_st2 [24:0] $end - $var wire 1 CT& clk $end - $var wire 120 kT& core_req_addr [119:0] $end - $var wire 16 cT& core_req_byteen [15:0] $end - $var wire 128 -U& core_req_data [127:0] $end - $var wire 1 K8" core_req_ready $end - $var wire 4 [T& core_req_rw [3:0] $end - $var wire 42 MU& core_req_tag [41:0] $end - $var wire 4 g" core_req_valid [3:0] $end - $var wire 32 'F core_rsp_data [31:0] $end - $var wire 1 o" core_rsp_ready $end - $var wire 42 /F core_rsp_tag [41:0] $end - $var wire 2 }E core_rsp_tid [1:0] $end - $var wire 1 +8" core_rsp_valid $end - $var wire 32 =%& cwbq_data [31:0] $end - $var wire 1 o&& cwbq_empty $end - $var wire 1 w&& cwbq_full $end - $var wire 1 76 cwbq_pop $end - $var wire 1 K(" cwbq_push $end - $var wire 1 g"" cwbq_push_stall $end - $var wire 1 S(" cwbq_push_unqual $end - $var wire 42 [$& cwbq_tag [41:0] $end - $var wire 2 S$& cwbq_tid [1:0] $end - $var wire 25 {~! dfpq_addr_st0 [24:0] $end - $var wire 1 1#& dfpq_empty $end - $var wire 128 %!" dfpq_filldata_st0 [127:0] $end - $var wire 1 9#& dfpq_full $end - $var wire 1 s~! dfpq_pop $end - $var wire 1 A#" dfpq_pop_unqual $end - $var wire 1 G&" dirty_st1e $end - $var wire 1 m%& dirty_st2 $end - $var wire 16 O&" dirtyb_st1e [15:0] $end - $var wire 16 u%& dirtyb_st2 [15:0] $end - $var wire 25 ;8" dram_fill_req_addr [24:0] $end - $var wire 1 3(" dram_fill_req_fast $end - $var wire 1 %5" dram_fill_req_ready $end - $var wire 1 w"" dram_fill_req_stall $end - $var wire 1 [(" dram_fill_req_unqual $end - $var wire 1 ?F dram_fill_req_valid $end - $var wire 25 MY& dram_fill_rsp_addr [24:0] $end - $var wire 128 AW& dram_fill_rsp_data [127:0] $end - $var wire 1 38" dram_fill_rsp_ready $end - $var wire 1 gZ& dram_fill_rsp_valid $end - $var wire 25 WF dram_wb_req_addr [24:0] $end - $var wire 16 OF dram_wb_req_byteen [15:0] $end - $var wire 128 _F dram_wb_req_data [127:0] $end - $var wire 1 ]1 dram_wb_req_fire $end - $var wire 1 w" dram_wb_req_ready $end - $var wire 1 GF dram_wb_req_valid $end - $var wire 1 A'& dwbq_dual_valid_sel $end - $var wire 1 !'& dwbq_empty $end - $var wire 1 )'& dwbq_full $end - $var wire 1 k(" dwbq_is_dwb_in $end - $var wire 1 {(" dwbq_is_dwb_out $end - $var wire 1 s(" dwbq_is_snp_in $end - $var wire 1 %)" dwbq_is_snp_out $end - $var wire 1 ?6 dwbq_pop $end - $var wire 1 c(" dwbq_push $end - $var wire 1 o"" dwbq_push_stall $end - $var wire 1 -)" dwbq_push_unqual $end - $var wire 25 1'& dwbq_req_addr [24:0] $end - $var wire 1 !'" fill_saw_dirty_st1e $end - $var wire 1 7&& fill_saw_dirty_st2 $end - $var wire 1 O"" force_request_miss_st1e $end - $var wire 1 9#" going_to_write_st1(0) $end - $var wire 49 %%" inst_meta_st1(0) [48:0] $end - $var wire 49 }%& inst_meta_st2 [48:0] $end - $var wire 1 )#" is_fill_in_pipe $end - $var wire 1 1#" is_fill_st1(0) $end - $var wire 1 {$& is_fill_st2 $end - $var wire 1 e%" is_mrvq_st1(0) $end - $var wire 1 Y'" is_mrvq_st1e $end - $var wire 1 Y'" is_mrvq_st1e_st2 $end - $var wire 1 W&& is_mrvq_st2 $end - $var wire 1 U%" is_snp_st1(0) $end - $var wire 1 )'" is_snp_st1e $end - $var wire 1 ?&& is_snp_st2 $end - $var wire 32 ;\& j [31:0] $end - $var wire 4 w&" mem_byteen_st1e [3:0] $end - $var wire 1 o&" mem_rw_st1e $end - $var wire 1 ;(" miss_add $end - $var wire 25 ;8" miss_add_addr [24:0] $end - $var wire 1 I'" miss_add_because_miss $end - $var wire 1 O&& miss_add_because_pending $end - $var wire 4 s$& miss_add_byteen [3:0] $end - $var wire 32 5%& miss_add_data [31:0] $end - $var wire 1 C(" miss_add_is_mrvq $end - $var wire 1 ?&& miss_add_is_snp $end - $var wire 1 k$& miss_add_rw $end - $var wire 1 G&& miss_add_snp_invalidate $end - $var wire 42 [$& miss_add_tag [41:0] $end - $var wire 2 S$& miss_add_tid [1:0] $end - $var wire 1 3(" miss_add_unqual $end - $var wire 2 -%& miss_add_wsel [1:0] $end - $var wire 1 ?&" miss_st1e $end - $var wire 1 e%& miss_st2 $end - $var wire 25 q#& mrvq_addr_st0 [24:0] $end - $var wire 4 ;$& mrvq_byteen_st0 [3:0] $end - $var wire 1 Y#& mrvq_full $end - $var wire 1 #(" mrvq_init_ready_state_hazard_st0_st1 $end - $var wire 1 +(" mrvq_init_ready_state_hazard_st1e_st1 $end - $var wire 1 A'" mrvq_init_ready_state_st1e $end - $var wire 1 y'" mrvq_init_ready_state_st2 $end - $var wire 1 g&& mrvq_init_ready_state_unqual_st2 $end - $var wire 1 C$& mrvq_is_snp_st0 $end - $var wire 1 ?"" mrvq_pending_hazard_st1e $end - $var wire 1 '"" mrvq_pop $end - $var wire 1 /"" mrvq_pop_unqual $end - $var wire 1 _"" mrvq_push_stall $end - $var wire 1 a'" mrvq_recover_ready_state_st1e $end - $var wire 1 _&& mrvq_recover_ready_state_st2 $end - $var wire 1 7"" mrvq_rw_st0 $end - $var wire 1 K$& mrvq_snp_invalidate_st0 $end - $var wire 1 a#& mrvq_stop $end - $var wire 42 +$& mrvq_tag_st0 [41:0] $end - $var wire 2 i#& mrvq_tid_st0 [1:0] $end - $var wire 1 /"" mrvq_valid_st0 $end - $var wire 32 #$& mrvq_writeword_st0 [31:0] $end - $var wire 2 y#& mrvq_wsel_st0 [1:0] $end - $var wire 25 a#" qual_addr_st0 [24:0] $end - $var wire 1 K$" qual_going_to_write_st0 $end - $var wire 49 ;$" qual_inst_meta_st0 [48:0] $end - $var wire 1 A#" qual_is_fill_st0 $end - $var wire 1 /"" qual_is_mrvq_st0 $end - $var wire 1 S$" qual_is_snp_st0 $end - $var wire 1 [$" qual_snp_invalidate_st0 $end - $var wire 1 Y#" qual_valid_st0 $end - $var wire 1 q'" qual_valid_st1e_2 $end - $var wire 128 y#" qual_writedata_st0 [127:0] $end - $var wire 32 q#" qual_writeword_st0 [31:0] $end - $var wire 2 i#" qual_wsel_st0 [1:0] $end - $var wire 128 u%" readdata_st1e [127:0] $end - $var wire 128 E%& readdata_st2 [127:0] $end - $var wire 21 7&" readtag_st1e [20:0] $end - $var wire 21 /&& readtag_st2 [20:0] $end - $var wire 32 m%" readword_st1e [31:0] $end - $var wire 32 =%& readword_st2 [31:0] $end - $var wire 1 W"" recover_mrvq_state_st2 $end - $var wire 1 M!" reqq_empty $end - $var wire 1 A#& reqq_full $end - $var wire 1 E!" reqq_pop $end - $var wire 1 I#" reqq_pop_unqual $end - $var wire 1 /6 reqq_push $end - $var wire 30 u!" reqq_req_addr_st0 [29:0] $end - $var wire 4 m!" reqq_req_byteen_st0 [3:0] $end - $var wire 1 e!" reqq_req_rw_st0 $end - $var wire 1 U!" reqq_req_st0 $end - $var wire 42 I#& reqq_req_tag_st0 [41:0] $end - $var wire 2 ]!" reqq_req_tid_st0 [1:0] $end - $var wire 32 }!" reqq_req_writeword_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 ]%" snp_invalidate_st1(0) $end - $var wire 1 1'" snp_invalidate_st1e $end - $var wire 1 G&& snp_invalidate_st2 $end - $var wire 25 ]Y& snp_req_addr [24:0] $end - $var wire 1 #X& snp_req_invalidate $end - $var wire 1 C8" snp_req_ready $end - $var wire 28 +X& snp_req_tag [27:0] $end - $var wire 1 oZ& snp_req_valid $end - $var wire 1 e1 snp_rsp_fire $end - $var wire 1 !# snp_rsp_ready $end - $var wire 28 )G snp_rsp_tag [27:0] $end - $var wire 1 !G snp_rsp_valid $end - $var wire 1 9'" snp_to_mrvq_st1e $end - $var wire 1 O&& snp_to_mrvq_st2 $end - $var wire 25 [~! snrq_addr_st0 [24:0] $end - $var wire 1 !#& snrq_empty $end - $var wire 1 )#& snrq_full $end - $var wire 1 c~! snrq_invalidate_st0 $end - $var wire 1 S~! snrq_pop $end - $var wire 1 Q#" snrq_pop_unqual $end - $var wire 28 k~! snrq_tag_st0 [27:0] $end - $var wire 28 9'& snrq_tag_st2 [27:0] $end - $var wire 1 G"" st2_pending_hazard_st1e $end - $var wire 1 !#" stall_bank_pipe $end - $var wire 42 W&" tag_st1e [41:0] $end - $var wire 2 g&" tid_st1e [1:0] $end - $var wire 1 c$" valid_st1(0) $end - $var wire 1 Q'" valid_st1e $end - $var wire 1 %%& valid_st2 $end - $var wire 128 5%" writedata_st1(0) [127:0] $end - $var wire 32 {$" writeword_st1(0) [31:0] $end - $var wire 32 5%& writeword_st2 [31:0] $end - $var wire 2 s$" wsel_st1(0) [1:0] $end - $var wire 2 -%& wsel_st2 [1:0] $end - $scope module cache_miss_resrv $end - $var wire 32 E]& BANK_ID [31:0] $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 )[& CACHE_ID [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 9[& MRVQ_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 400 aK& addr_table [399:0] $end - $var wire 1 CT& clk $end - $var wire 4 {L& dequeue_index [3:0] $end - $var wire 1 /"" dequeue_possible $end - $var wire 4 -M& enqueue_index [3:0] $end - $var wire 1 =M& enqueue_possible $end - $var wire 25 i'" fill_addr_st1 [24:0] $end - $var wire 4 %M& head_ptr [3:0] $end - $var wire 1 w2" increment_head $end - $var wire 1 5-" is_fill_st1 $end - $var wire 1 C(" is_mrvq $end - $var wire 16 G2" make_ready [15:0] $end - $var wire 16 O2" make_ready_push [15:0] $end - $var wire 85 YG& metadata_table(0) [84:0] $end - $var wire 85 \G& metadata_table(1) [84:0] $end - $var wire 85 wG& metadata_table(10) [84:0] $end - $var wire 85 zG& metadata_table(11) [84:0] $end - $var wire 85 }G& metadata_table(12) [84:0] $end - $var wire 85 "H& metadata_table(13) [84:0] $end - $var wire 85 %H& metadata_table(14) [84:0] $end - $var wire 85 (H& metadata_table(15) [84:0] $end - $var wire 85 _G& metadata_table(2) [84:0] $end - $var wire 85 bG& metadata_table(3) [84:0] $end - $var wire 85 eG& metadata_table(4) [84:0] $end - $var wire 85 hG& metadata_table(5) [84:0] $end - $var wire 85 kG& metadata_table(6) [84:0] $end - $var wire 85 nG& metadata_table(7) [84:0] $end - $var wire 85 qG& metadata_table(8) [84:0] $end - $var wire 85 tG& metadata_table(9) [84:0] $end - $var wire 1 ;(" miss_add $end - $var wire 25 ;8" miss_add_addr [24:0] $end - $var wire 4 s$& miss_add_byteen [3:0] $end - $var wire 32 5%& miss_add_data [31:0] $end - $var wire 1 ?&& miss_add_is_snp $end - $var wire 1 k$& miss_add_rw $end - $var wire 1 G&& miss_add_snp_invalidate $end - $var wire 42 [$& miss_add_tag [41:0] $end - $var wire 2 S$& miss_add_tid [1:0] $end - $var wire 2 -%& miss_add_wsel [1:0] $end - $var wire 25 q#& miss_resrv_addr_st0 [24:0] $end - $var wire 4 ;$& miss_resrv_byteen_st0 [3:0] $end - $var wire 32 #$& miss_resrv_data_st0 [31:0] $end - $var wire 1 Y#& miss_resrv_full $end - $var wire 1 C$& miss_resrv_is_snp_st0 $end - $var wire 1 '"" miss_resrv_pop $end - $var wire 1 7"" miss_resrv_rw_st0 $end - $var wire 1 K$& miss_resrv_snp_invalidate_st0 $end - $var wire 1 a#& miss_resrv_stop $end - $var wire 42 +$& miss_resrv_tag_st0 [41:0] $end - $var wire 2 i#& miss_resrv_tid_st0 [1:0] $end - $var wire 1 /"" miss_resrv_valid_st0 $end - $var wire 2 y#& miss_resrv_wsel_st0 [1:0] $end - $var wire 1 y'" mrvq_init_ready_state $end - $var wire 1 g2" mrvq_pop $end - $var wire 1 _2" mrvq_push $end - $var wire 1 ?"" pending_hazard $end - $var wire 1 )3" qual_mrvq_init $end - $var wire 16 sL& ready_table [15:0] $end - $var wire 1 o2" recover_state $end - $var wire 1 KT& reset $end - $var wire 4 {L& schedule_ptr [3:0] $end - $var wire 5 5M& size [4:0] $end - $var wire 4 -M& tail_ptr [3:0] $end - $var wire 1 !3" update_ready $end - $var wire 16 W2" valid_address_match [15:0] $end - $var wire 16 kL& valid_table [15:0] $end - $upscope $end - $scope module core_req_arb $end - $var wire 32 A[& CORE_TAG_ID_BITS [31:0] $end - $var wire 32 Y[& CORE_TAG_WIDTH [31:0] $end - $var wire 32 A[& CREQ_SIZE [31:0] $end - $var wire 32 I[& NUM_REQUESTS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 120 kT& bank_addr [119:0] $end - $var wire 16 cT& bank_byteen [15:0] $end - $var wire 4 [T& bank_rw [3:0] $end - $var wire 42 MU& bank_tag [41:0] $end - $var wire 4 g" bank_valids [3:0] $end - $var wire 128 -U& bank_writedata [127:0] $end - $var wire 1 CT& clk $end - $var wire 1 y3& o_empty $end - $var wire 1 )+" out_empty $end - $var wire 120 7*" out_per_addr [119:0] $end - $var wire 16 /*" out_per_byteen [15:0] $end - $var wire 4 '*" out_per_rw [3:0] $end - $var wire 42 w*" out_per_tag [41:0] $end - $var wire 4 })" out_per_valids [3:0] $end - $var wire 128 W*" out_per_writedata [127:0] $end - $var wire 1 1+" pop_qual $end - $var wire 1 G6 push_qual $end - $var wire 120 93& qual_addr [119:0] $end - $var wire 16 13& qual_byteen [15:0] $end - $var wire 1 U!" qual_has_request $end - $var wire 2 ]!" qual_request_index [1:0] $end - $var wire 4 )3& qual_rw [3:0] $end - $var wire 42 I#& qual_tag [41:0] $end - $var wire 4 !3& qual_valids [3:0] $end - $var wire 128 Y3& qual_writedata [127:0] $end - $var wire 4 9+" real_out_per_valids [3:0] $end - $var wire 1 M!" reqq_empty $end - $var wire 1 A#& reqq_full $end - $var wire 1 E!" reqq_pop $end - $var wire 1 /6 reqq_push $end - $var wire 30 u!" reqq_req_addr_st0 [29:0] $end - $var wire 4 m!" reqq_req_byteen_st0 [3:0] $end - $var wire 1 e!" reqq_req_rw_st0 $end - $var wire 1 U!" reqq_req_st0 $end - $var wire 42 I#& reqq_req_tag_st0 [41:0] $end - $var wire 2 ]!" reqq_req_tid_st0 [1:0] $end - $var wire 32 }!" reqq_req_writedata_st0 [31:0] $end - $var wire 1 KT& reset $end - $var wire 1 #4& use_empty $end - $var wire 120 93& use_per_addr [119:0] $end - $var wire 16 13& use_per_byteen [15:0] $end - $var wire 4 )3& use_per_rw [3:0] $end - $var wire 42 I#& use_per_tag [41:0] $end - $var wire 4 !3& use_per_valids [3:0] $end - $var wire 128 Y3& use_per_writedata [127:0] $end - $scope module reqq_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 S\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 314 W2 data_in [313:0] $end - $var wire 314 A+" data_out [313:0] $end - $var wire 1 y3& empty $end - $var wire 1 A#& full $end - $var wire 1 1+" pop $end - $var wire 1 G6 push $end - $var wire 1 3," reading $end - $var wire 1 KT& reset $end - $var wire 4 +4& size [3:0] $end - $var wire 4 +4& size_r [3:0] $end - $var wire 1 I3 writing $end - $scope module genblk3 $end - $var wire 314 34& data(0) [313:0] $end - $var wire 314 =4& data(1) [313:0] $end - $var wire 314 G4& data(2) [313:0] $end - $var wire 314 Q4& data(3) [313:0] $end - $var wire 314 [4& data(4) [313:0] $end - $var wire 314 e4& data(5) [313:0] $end - $var wire 314 o4& data(6) [313:0] $end - $var wire 314 y4& data(7) [313:0] $end - $scope module genblk2 $end - $var wire 1 {<& bypass_r $end - $var wire 314 q;& curr_r [313:0] $end - $var wire 1 y3& empty_r $end - $var wire 1 A#& full_r $end - $var wire 314 !;& head_r [313:0] $end - $var wire 3 s<& rd_ptr_next_r [2:0] $end - $var wire 3 k<& rd_ptr_r [2:0] $end - $var wire 3 c<& wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module sel_bank $end - $var wire 32 I[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 2 ]!" grant_index [1:0] $end - $var wire 4 ;," grant_onehot [3:0] $end - $var wire 1 U!" grant_valid $end - $var wire 4 !3& requests [3:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 4 ;," grant_onehot_r [3:0] $end - $scope module priority_encoder $end - $var wire 32 I[& N [31:0] $end - $var wire 4 !3& data_in [3:0] $end - $var wire 2 ]!" data_out [1:0] $end - $var wire 32 C," i [31:0] $end - $var wire 1 U!" valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module cwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 s\& DATAW [31:0] $end - $var wire 32 A[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 76 13" data_in [75:0] $end - $var wire 76 I3" data_out [75:0] $end - $var wire 1 o&& empty $end - $var wire 1 w&& full $end - $var wire 1 76 pop $end - $var wire 1 K(" push $end - $var wire 1 Q3 reading $end - $var wire 1 KT& reset $end - $var wire 4 EM& size [3:0] $end - $var wire 4 EM& size_r [3:0] $end - $var wire 1 a3" writing $end - $scope module genblk3 $end - $var wire 76 MM& data(0) [75:0] $end - $var wire 76 PM& data(1) [75:0] $end - $var wire 76 SM& data(2) [75:0] $end - $var wire 76 VM& data(3) [75:0] $end - $var wire 76 YM& data(4) [75:0] $end - $var wire 76 \M& data(5) [75:0] $end - $var wire 76 _M& data(6) [75:0] $end - $var wire 76 bM& data(7) [75:0] $end - $scope module genblk2 $end - $var wire 1 ;P& bypass_r $end - $var wire 76 iO& curr_r [75:0] $end - $var wire 1 o&& empty_r $end - $var wire 1 w&& full_r $end - $var wire 76 QO& head_r [75:0] $end - $var wire 3 3P& rd_ptr_next_r [2:0] $end - $var wire 3 +P& rd_ptr_r [2:0] $end - $var wire 3 #P& wr_ptr_r [2:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dfp_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 K\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 153 '2 data_in [152:0] $end - $var wire 153 M)" data_out [152:0] $end - $var wire 1 1#& empty $end - $var wire 1 9#& full $end - $var wire 1 s~! pop $end - $var wire 1 gZ& push $end - $var wire 1 u)" reading $end - $var wire 1 KT& reset $end - $var wire 5 w*& size [4:0] $end - $var wire 5 w*& size_r [4:0] $end - $var wire 1 O2 writing $end - $scope module genblk3 $end - $var wire 153 !+& data(0) [152:0] $end - $var wire 153 &+& data(1) [152:0] $end - $var wire 153 S+& data(10) [152:0] $end - $var wire 153 X+& data(11) [152:0] $end - $var wire 153 ]+& data(12) [152:0] $end - $var wire 153 b+& data(13) [152:0] $end - $var wire 153 g+& data(14) [152:0] $end - $var wire 153 l+& data(15) [152:0] $end - $var wire 153 ++& data(2) [152:0] $end - $var wire 153 0+& data(3) [152:0] $end - $var wire 153 5+& data(4) [152:0] $end - $var wire 153 :+& data(5) [152:0] $end - $var wire 153 ?+& data(6) [152:0] $end - $var wire 153 D+& data(7) [152:0] $end - $var wire 153 I+& data(8) [152:0] $end - $var wire 153 N+& data(9) [152:0] $end - $scope module genblk2 $end - $var wire 1 w2& bypass_r $end - $var wire 153 72& curr_r [152:0] $end - $var wire 1 1#& empty_r $end - $var wire 1 9#& full_r $end - $var wire 153 m1& head_r [152:0] $end - $var wire 4 o2& rd_ptr_next_r [3:0] $end - $var wire 4 g2& rd_ptr_r [3:0] $end - $var wire 4 _2& wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module dwb_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 {\& DATAW [31:0] $end - $var wire 32 I[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 199 i3" data_in [198:0] $end - $var wire 199 C4" data_out [198:0] $end - $var wire 1 !'& empty $end - $var wire 1 )'& full $end - $var wire 1 ?6 pop $end - $var wire 1 c(" push $end - $var wire 1 Y3 reading $end - $var wire 1 KT& reset $end - $var wire 3 CP& size [2:0] $end - $var wire 3 CP& size_r [2:0] $end - $var wire 1 {4" writing $end - $scope module genblk3 $end - $var wire 199 KP& data(0) [198:0] $end - $var wire 199 RP& data(1) [198:0] $end - $var wire 199 YP& data(2) [198:0] $end - $var wire 199 `P& data(3) [198:0] $end - $scope module genblk2 $end - $var wire 1 ;T& bypass_r $end - $var wire 199 IS& curr_r [198:0] $end - $var wire 1 !'& empty_r $end - $var wire 1 )'& full_r $end - $var wire 199 oR& head_r [198:0] $end - $var wire 2 3T& rd_ptr_next_r [1:0] $end - $var wire 2 +T& rd_ptr_r [1:0] $end - $var wire 2 #T& wr_ptr_r [1:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 [\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 242 K," in [241:0] $end - $var wire 242 %=& out [241:0] $end - $var wire 1 KT& reset $end - $var wire 1 !#" stall $end - $var wire 242 %=& value [241:0] $end - $upscope $end - $scope module snp_req_queue $end - $var wire 32 Q[& BUFFERED_OUTPUT [31:0] $end - $var wire 32 C\& DATAW [31:0] $end - $var wire 32 9[& SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 54 m1 data_in [53:0] $end - $var wire 54 5)" data_out [53:0] $end - $var wire 1 !#& empty $end - $var wire 1 )#& full $end - $var wire 1 S~! pop $end - $var wire 1 oZ& push $end - $var wire 1 E)" reading $end - $var wire 1 KT& reset $end - $var wire 5 I'& size [4:0] $end - $var wire 5 I'& size_r [4:0] $end - $var wire 1 }1 writing $end - $scope module genblk3 $end - $var wire 54 Q'& data(0) [53:0] $end - $var wire 54 S'& data(1) [53:0] $end - $var wire 54 e'& data(10) [53:0] $end - $var wire 54 g'& data(11) [53:0] $end - $var wire 54 i'& data(12) [53:0] $end - $var wire 54 k'& data(13) [53:0] $end - $var wire 54 m'& data(14) [53:0] $end - $var wire 54 o'& data(15) [53:0] $end - $var wire 54 U'& data(2) [53:0] $end - $var wire 54 W'& data(3) [53:0] $end - $var wire 54 Y'& data(4) [53:0] $end - $var wire 54 ['& data(5) [53:0] $end - $var wire 54 ]'& data(6) [53:0] $end - $var wire 54 _'& data(7) [53:0] $end - $var wire 54 a'& data(8) [53:0] $end - $var wire 54 c'& data(9) [53:0] $end - $scope module genblk2 $end - $var wire 1 o*& bypass_r $end - $var wire 54 G*& curr_r [53:0] $end - $var wire 1 !#& empty_r $end - $var wire 1 )#& full_r $end - $var wire 54 7*& head_r [53:0] $end - $var wire 4 g*& rd_ptr_next_r [3:0] $end - $var wire 4 _*& rd_ptr_r [3:0] $end - $var wire 4 W*& wr_ptr_r [3:0] $end - $upscope $end - $upscope $end - $upscope $end - $scope module st_1e_2 $end - $var wire 32 k\& N [31:0] $end - $var wire 32 )[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 316 U1" in [315:0] $end - $var wire 316 gF& out [315:0] $end - $var wire 1 KT& reset $end - $var wire 1 !#" stall $end - $var wire 316 gF& value [315:0] $end - $upscope $end - $scope module tag_data_access $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 Q[& DRAM_ENABLE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 Q[& STAGE_1_CYCLES [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 32 Q[& WRITE_ENABLE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 I/" data_write [127:0] $end - $var wire 1 G&" dirty_st1e $end - $var wire 16 O&" dirtyb_st1e [15:0] $end - $var wire 1 !'" fill_saw_dirty_st1e $end - $var wire 1 ?&" fill_sent $end - $var wire 1 S0" force_core_miss $end - $var wire 1 O"" force_request_miss_st1e $end - $var wire 1 i/" invalidate_line $end - $var wire 1 )'" is_snp_st1e $end - $var wire 4 w&" mem_byteen_st1e [3:0] $end - $var wire 1 o&" mem_rw_st1e $end - $var wire 1 ?&" miss_st1e $end - $var wire 1 A'" mrvq_init_ready_state_st1e $end - $var wire 128 o." qual_read_data_st1 [127:0] $end - $var wire 1 W." qual_read_dirty_st1 $end - $var wire 16 _." qual_read_dirtyb_st1 [15:0] $end - $var wire 21 g." qual_read_tag_st1 [20:0] $end - $var wire 1 O." qual_read_valid_st1 $end - $var wire 128 /." read_data_st1c(0) [127:0] $end - $var wire 1 u-" read_dirty_st1c(0) $end - $var wire 16 }-" read_dirtyb_st1c(0) [15:0] $end - $var wire 21 '." read_tag_st1c(0) [20:0] $end - $var wire 1 m-" read_valid_st1c(0) $end - $var wire 4 --" readaddr_st10 [3:0] $end - $var wire 128 u%" readdata_st1e [127:0] $end - $var wire 21 7&" readtag_st1e [20:0] $end - $var wire 32 m%" readword_st1e [31:0] $end - $var wire 1 K0" real_miss $end - $var wire 1 y/" real_writefill $end - $var wire 1 ;0" req_invalid $end - $var wire 1 C0" req_miss $end - $var wire 1 KT& reset $end - $var wire 1 30" should_write $end - $var wire 1 i/" snoop_hit_no_pending $end - $var wire 1 1'" snp_invalidate_st1e $end - $var wire 1 9'" snp_to_mrvq_st1e $end - $var wire 1 !#" stall $end - $var wire 1 !#" stall_bank_pipe $end - $var wire 1 q/" tags_match $end - $var wire 128 u%" use_read_data_st1e [127:0] $end - $var wire 1 9/" use_read_dirty_st1e $end - $var wire 16 O&" use_read_dirtyb_st1e [15:0] $end - $var wire 21 7&" use_read_tag_st1e [20:0] $end - $var wire 1 1/" use_read_valid_st1e $end - $var wire 128 I/" use_write_data [127:0] $end - $var wire 16 A/" use_write_enable [15:0] $end - $var wire 1 Q'" valid_req_st1e $end - $var wire 16 +0" we [15:0] $end - $var wire 2 e-" wordsel_st1e [1:0] $end - $var wire 25 i'" writeaddr_st1e [24:0] $end - $var wire 128 E-" writedata_st1e [127:0] $end - $var wire 1 5-" writefill_st1e $end - $var wire 4 --" writeladdr_st1e [3:0] $end - $var wire 21 #0" writetag_st1e [20:0] $end - $var wire 32 =-" writeword_st1e [31:0] $end - $scope module genblk4(0) $end - $var wire 1 [0" normal_write $end - $upscope $end - $scope module genblk4(1) $end - $var wire 1 c0" normal_write $end - $upscope $end - $scope module genblk4(2) $end - $var wire 1 k0" normal_write $end - $upscope $end - $scope module genblk4(3) $end - $var wire 1 s0" normal_write $end - $upscope $end - $scope module s0_1_c0 $end - $var wire 32 c\& N [31:0] $end - $var wire 32 Q[& PASSTHRU [31:0] $end - $var wire 1 CT& clk $end - $var wire 1 y[& flush $end - $var wire 167 %1" in [166:0] $end - $var wire 167 %1" out [166:0] $end - $var wire 1 KT& reset $end - $var wire 1 !#" stall $end - $var wire 167 7F& value [166:0] $end - $upscope $end - $scope module tag_data_structure $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 1[& CACHE_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 I[& WORD_SIZE [31:0] $end - $var wire 1 CT& clk $end - $var wire 128 e=& data(0) [127:0] $end - $var wire 128 '>& data(1) [127:0] $end - $var wire 128 -A& data(10) [127:0] $end - $var wire 128 MA& data(11) [127:0] $end - $var wire 128 mA& data(12) [127:0] $end - $var wire 128 /B& data(13) [127:0] $end - $var wire 128 OB& data(14) [127:0] $end - $var wire 128 oB& data(15) [127:0] $end - $var wire 128 G>& data(2) [127:0] $end - $var wire 128 g>& data(3) [127:0] $end - $var wire 128 )?& data(4) [127:0] $end - $var wire 128 I?& data(5) [127:0] $end - $var wire 128 i?& data(6) [127:0] $end - $var wire 128 +@& data(7) [127:0] $end - $var wire 128 K@& data(8) [127:0] $end - $var wire 128 k@& data(9) [127:0] $end - $var wire 16 uE& dirty [15:0] $end - $var wire 16 SD& dirtyb(0) [15:0] $end - $var wire 16 [D& dirtyb(1) [15:0] $end - $var wire 16 EE& dirtyb(10) [15:0] $end - $var wire 16 ME& dirtyb(11) [15:0] $end - $var wire 16 UE& dirtyb(12) [15:0] $end - $var wire 16 ]E& dirtyb(13) [15:0] $end - $var wire 16 eE& dirtyb(14) [15:0] $end - $var wire 16 mE& dirtyb(15) [15:0] $end - $var wire 16 cD& dirtyb(2) [15:0] $end - $var wire 16 kD& dirtyb(3) [15:0] $end - $var wire 16 sD& dirtyb(4) [15:0] $end - $var wire 16 {D& dirtyb(5) [15:0] $end - $var wire 16 %E& dirtyb(6) [15:0] $end - $var wire 16 -E& dirtyb(7) [15:0] $end - $var wire 16 5E& dirtyb(8) [15:0] $end - $var wire 16 =E& dirtyb(9) [15:0] $end - $var wire 1 {0" do_write $end - $var wire 1 ?&" fill_sent $end - $var wire 32 'F& i [31:0] $end - $var wire 1 i/" invalidate $end - $var wire 32 /F& j [31:0] $end - $var wire 4 --" read_addr [3:0] $end - $var wire 128 o." read_data [127:0] $end - $var wire 1 W." read_dirty $end - $var wire 16 _." read_dirtyb [15:0] $end - $var wire 21 g." read_tag [20:0] $end - $var wire 1 O." read_valid $end - $var wire 1 KT& reset $end - $var wire 1 !#" stall_bank_pipe $end - $var wire 21 1C& tag(0) [20:0] $end - $var wire 21 2C& tag(1) [20:0] $end - $var wire 21 ;C& tag(10) [20:0] $end - $var wire 21 C& tag(13) [20:0] $end - $var wire 21 ?C& tag(14) [20:0] $end - $var wire 21 @C& tag(15) [20:0] $end - $var wire 21 3C& tag(2) [20:0] $end - $var wire 21 4C& tag(3) [20:0] $end - $var wire 21 5C& tag(4) [20:0] $end - $var wire 21 6C& tag(5) [20:0] $end - $var wire 21 7C& tag(6) [20:0] $end - $var wire 21 8C& tag(7) [20:0] $end - $var wire 21 9C& tag(8) [20:0] $end - $var wire 21 :C& tag(9) [20:0] $end - $var wire 21 #0" tag_index [20:0] $end - $var wire 16 }E& valid [15:0] $end - $var wire 4 --" write_addr [3:0] $end - $var wire 128 I/" write_data [127:0] $end - $var wire 16 A/" write_enable [15:0] $end - $var wire 1 y/" write_fill $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module snp_rsp_arb $end - $var wire 32 9[& BANK_LINE_SIZE [31:0] $end - $var wire 32 A[& NUM_BANKS [31:0] $end - $var wire 32 a[& SNP_REQ_TAG_WIDTH [31:0] $end - $var wire 1 CT& clk $end - $var wire 3 [L fsq_bank [2:0] $end - $var wire 1 cL fsq_valid $end - $var wire 8 ; per_bank_snp_rsp_ready [7:0] $end - $var wire 224 %= per_bank_snp_rsp_tag [223:0] $end - $var wire 8 {< per_bank_snp_rsp_valid [7:0] $end - $var wire 1 KT& reset $end - $var wire 1 KX& snp_rsp_ready $end - $var wire 28 CX& snp_rsp_tag [27:0] $end - $var wire 1 ;X& snp_rsp_valid $end - $scope module sel_ffsq $end - $var wire 32 A[& N [31:0] $end - $var wire 1 CT& clk $end - $var wire 3 [L grant_index [2:0] $end - $var wire 8 kL grant_onehot [7:0] $end - $var wire 1 cL grant_valid $end - $var wire 8 {< requests [7:0] $end - $var wire 1 KT& reset $end - $scope module genblk2 $end - $var wire 8 kL grant_onehot_r [7:0] $end - $scope module priority_encoder $end - $var wire 32 A[& N [31:0] $end - $var wire 8 {< data_in [7:0] $end - $var wire 3 [L data_out [2:0] $end - $var wire 32 sL i [31:0] $end - $var wire 1 cL valid_out $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end -$enddefinitions $end - - -#0 -b00000000100001000010000000000000 # -b00000001 + -b01000000 3 -b00000000 ; -b0000 C -1K -0S -0[ -b0000 c -0k -0s -0{ -b0000 %! -0-! -05! -0=! -b0000 E! -0M! -0U! -0]! -b0000 e! -0m! -0u! -0}! -b0000 '" -0/" -07" -0?" -b0000 G" -0O" -1W" -0_" -b0000 g" -0o" -0w" -0!# -b10000111 )# -01# -09# -0A# -0I# -b000010010100100110011000010101100001000011110000001100 Q# -0a# -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 i# -13$ -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 ;$ -0-% -15% -0=% -0E% -0M% -b000010010100100110011000010101100001000011110000001100 U% -0e% -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 m% -07& -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 ?& -01' -09' -0A' -0I' -0Q' -b000010010100100110011000010101100001000011110000001100 Y' -0i' -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 q' -0;( -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 C( -05) -0=) -0E) -0M) -0U) -b000010010100100110011000010101100001000011110000001100 ]) -0m) -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 u) -0?* -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 G* -09+ -0A+ -0I+ -0Q+ -0Y+ -b000010010100100110011000010101100001000011110000001100 a+ -0q+ -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 y+ -0C, -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 K, -0=- -0E- -0M- -0U- -0]- -b000010010100100110011000010101100001000011110000001100 e- -0u- -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 }- -0G. -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 O. -0A/ -0I/ -0Q/ -1Y/ -0a/ -b000010010100100110011000010101100001000011110000001100 i/ -0y/ -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 #0 -0K0 -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 S0 -0E1 -0M1 -0U1 -0]1 -0e1 -b000010010100100110011000010101100001000011110000001100 m1 -0}1 -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 '2 -0O2 -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 W2 -0I3 -0Q3 -0Y3 -0a3 -0i3 -1q3 -0y3 -0#4 -0+4 -034 -0;4 -0C4 -0K4 -0S4 -0[4 -0c4 -0k4 -0s4 -0{4 -0%5 -0-5 -055 -0=5 -0E5 -0M5 -0U5 -0]5 -0e5 -0m5 -0u5 -0}5 -0'6 -0/6 -076 -0?6 -0G6 -b01101011 O6 -b00100111 W6 -b0001010000001111 _6 -b0001111010111010101010110000011110101010011010100000101111110011101011010100001111101000000011110101110011001100111000100010011111111101101110010111100001010011110110100000111110110101000011011101000000110111011000011001000110100000010001100000100011011110 g6 -b101010000000100110011100100011111000111101001001000010101100111111001011100001110100101111011111011110000011110011001100000001101001001100010100000010111011010101111011010110010101111100001101000010000111001011001110101011000101000000100010101010000010101110000100011000000001101001000101010011011110111010011101010011101100111111100110 I7 -b01000000 C8 -b10011010011111110001010111110111110101110000101011001110000110011111111111011101010101011110000000101011110111000110011010111011100100001011001111001110010100110110001000001101100110000000100010011110100101010111010000101000 K8 -b11001101 %9 -b01000000 -9 -b11101001000110100110011011111010000100000001111011011101011000011100000001001010101100101101110100010000110111100111011110100110 59 -b01001010001001011000101101110010000000011101100011011110011100011110010011101000110110111101011011111001110101000010010010011110111110011011000110011111010001000010101011001011110001000000000100011001001011111000001110000000 U9 -b0111110101100110111101010111101001000101100011011100110101011111001011111001000000111111111011010010001000001000000100000101010001011000001100011000100000110000011010100110110101000111101001110110111111001110100010101101011011111011111001000000000111101101110111101100001111011101001011000000111000110100101101111010110010010011010100100111010111110100111100010110101101110101011000110110110111001101010000101101011100011111011101111101010101000010101000011101110001001010101010101000100011000011110110100010101101110010111000100001001011101110100011101101000101101100010101100111011101000110011011100100000101011100011011110110000011101111110011100110100101100111111111010011110011100001001100011011010100010110001011100111110110111001111000101010011100101101110000011001010101010011010000011101001100010100110110100110000101101010000100101000100111001010101010000010110000011101110101010010100111000101011011110000111100010111001111010101010110101100101000000110010010000000011010011000101011101001111110100011110000101010 /: -b11001000 s< -b10100001 {< -b00101111001110101111001101000110000001001110110100001101100000001110110011110001110001010010010101011010100000110101100110000001011110010011101111010101011111000010101011111101001011110010110011010010110101110110101001000110 %= -b11 ]= -b10100000010001100000100011011110 e= -b011110111010011101010011101100111111100110 m= -0}= -0'> -b0111011110100110 /> -b1001001011111000001110000 7> -b11000101011011110000111100010111001111010101010110101100101000000110010010000000011010011000101011101001111110100011110000101010 ?> -1_> -b0010110101110110101001000110 g> -b11 o> -b11010000001101110110000110010001 w> -b101110000100011000000001101001000101010011 !? -01? -09? -b0001000011011110 A? -b1100101111000100000000010 I? -b10010101010100110100000111010011000101001101101001100001011010100001001010001001110010101010100000101100000111011101010100101001 Q? -0q? -b1111110100101111001011001101 y? -b00 #@ -b11011010000011111011010100001101 +@ -b001110101011000101000000100010101010000010 3@ -0C@ -0K@ -b1011001011011101 S@ -b0001100111110100010000101 [@ -b11001110011010010110011111111101001111001110000100110001101101010001011000101110011111011011100111100010101001110010110111000001 c@ -0%A -b1011110101010111110000101010 -A -b00 5A -b11111101101110010111100001010011 =A -b010110010101111100001101000010000111001011 EA -0UA -0]A -b1100000001001010 eA -b0010010010011110111110011 mA -b01110010111000100001001011101110100011101101000101101100010101100111011101000110011011100100000101011100011011110110000011101111 uA -07B -b0101100110000001011110010011 ?B -b00 GB -b01011100110011001110001000100111 OB -b101001001100010100000010111011010101111011 WB -0gB -0oB -b1101110101100001 wB -b1011110101101111100111010 !C -b01101101110011010100001011010111000111110111011111010101010000101010000111011100010010101010101010001000110000111101101000101011 )C -0IC -b0101001001010101101010000011 QC -b01 YC -b10101101010000111110100000001111 aC -b101111011111011110000011110011001100000001 iC -0yC -0#D -b0001000000011110 +D -b0111000111100100111010001 3D -b11011110110000111101110100101100000011100011010010110111101011001001001101010010011101011111010011110001011010110111010101100011 ;D -1[D -b1000000011101100111100011100 cD -b01 kD -b10101010011010100000101111110011 sD -b001001000010101100111111001011100001110100 {D -1-E -15E -b0110011011111010 =E -b0010000000011101100011011 EE -b01011000001100011000100000110000011010100110110101000111101001110110111111001110100010101101011011111011111001000000000111101101 ME -0mE -b0110000001001110110100001101 uE -b00 }E -b00011110101110101010101100000111 'F -b101010000000100110011100100011111000111101 /F -0?F -0GF -b1110100100011010 OF -b0100101000100101100010110 WF -b01111101011001101111010101111010010001011000110111001101010111110010111110010000001111111110110100100010000010000001000001010100 _F -1!G -b0010111100111010111100110100 )G -11G -19G -b0000101000000001100110001010 AG -0IG -1QG -b110 YG -0aG -0iG -0qG -b10011001 yG -b11101101110000100001001110100110101110010111010100000100100110110101101100001011010110010110111011010110101110011101111001110100010110110111010111011010000001100001111011011010100110010010011111000001010100010111111010010000 #H -b00010100 [H -b00111110000101101111010110110001000111010000100100110011101110110011111110010100100011110000110001001101000010110110101111110000010011100000000010100000000110011000101001100111100111101100111101010101101011000101001111101101 cH -b00010000 =I -1EI -0MI -b010 UI -1]I -b0100000010011010011111110001010111110111110101110000101011001110000110011111111111011101010101011110000000101011110111000110011010111011100100001011001111001110010100110110001000001101100110000000100010011110100101010111010000101000 eI -b1001100111101101110000100001001110100110101110010111010100000100100110110101101100001011010110010110111011010110101110011101111001110100010110110111010111011010000001100001111011011010100110010010011111000001010100010111111010010000 GJ -0)K -b00000100 1K -b11111111111111111111111111111111 9K -b01000000 AK -b11111111111111111111111111111111 IK -b10100000010001100000100011011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 QK -b011110111010011101010011101100111111100110 qK -b000 #L -b00000001 +L -b00000001 3L -1;L -b10110011 CL -b00000011 KL -b11111111111111111111111111111111 SL -b000 [L -1cL -b00000001 kL -b11111111111111111111111111111111 sL -0{L -b0100101001000010011000110 %M -1-M -b1100101011011000100011111111 5M -0=M -b0110101101100111101000001 EM -b01101110010010111100111111100111000000111101101010000011111011010001001010101110011111000100100000000000100000110000010110100001 MM -0mM -0uM -1}M -b00 'N -1/N -b1111 7N -b000101111110100100011111110111 ?N -b11011011111111110110100010000000 GN -0ON -1WN -1_N -0gN -0oN -0wN -0!O -0)O -01O -19O -1AO -1IO -1QO -1YO -1aO -0iO -0qO -0yO -0#P -b1111110000000101011111110 +P -b11 3P -b01011010010011100001011001100011 ;P -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 CP -b1000100000111011001100011100001111101101001111101 cP -1sP -1{P -1%Q -0-Q -b1111001101111010000011001 5Q -b01 =Q -b11001111111000110001011000010110 EQ -b1011010111110100001100010001111101100100100100001 MQ -b11000000110001111101110111100110101100110100001100100110110111011011111010110000011101110110110110001000000110110010111110001100 ]Q -0}Q -1'R -1/R -b10000010011000101010101010001100 7R -b00000000000101101001110011010000010011100100101011001111010100001000001001100010101010101000110001001001000100110000010101010101 ?R -b100011100000101011001 _R -0gR -0oR -b1001000011111100 wR -b101101011111010000110001000111110110010010 !S -b01 1S -09S -b1000 AS -0IS -0QS -1YS -0aS -0iS -1qS -0yS -1#T -0+T -b1111001101111010000011001 3T -0;T -0CT -0KT -0ST -1[T -0cT -0kT -0sT -0{T -1%U -0-U -15U -0=U -0EU -1MU -1UU -b010010100100001001100011011100101011011000100011111111 ]U -0mU -b011010110110011110100000101101110010010111100111111100111000000111101101010000011111011010001001010101110011111000100100000000000100000110000010110100001 uU -0?V -b0010 GV -b0000 OV -b1100110010001001 WV -b001100000111100110100010010000001000110100111011110100110011000001100100001111010000011100100010101110110111100001000001 _V -b11101000011010100010010101110101101110100111110110000000011001011010110110000001000110001010001011100001100011101001011011110010 !W -b001010011101011001001011111000001100110010 AW -0QW -0YW -b0010 aW -b00100000110011001000100100110000011110011010001001000000100011010011101111010011001100000110010000111101000001110010001010111011011110000100000111101000011010100010010101110101101110100111110110000000011001011010110110000001000110001010001011100001100011101001011011110010001010011101011001001011111000001100110010 iW -0[X -b0001 cX -b11111111111111111111111111111111 kX -b11110111111000000010101111111011010110100100111000010110011000111000100000111011001100011100001111101101001111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sX -b1001 UY -1]Y -b11001111111000110001011000010110 eY -b11000000110001111101110111100110101100110100001100100110110111011011111010110000011101110110110110001000000110110010111110001100 mY -b01 /Z -07Z -1?Z -b1001000011111100 GZ -b100011100000101011001 OZ -b00000000000101101001110011010000010011100100101011001111010100001000001001100010101010101000110001001001000100110000010101010101 WZ -0wZ -1![ -b1001000011111100 )[ -b100011100000101011001 1[ -b00000000000101101001110011010000010011100100101011001111010100001000001001100010101010101000110001001001000100110000010101010101 9[ -0Y[ -1a[ -b0000000000000000 i[ -b11001111111000110001011000010110110011111110001100010110000101101100111111100011000101100001011011001111111000110001011000010110 q[ -03\ -0;\ -0C\ -b111100110111101000001 K\ -b0000000000000000 S\ -0[\ -0c\ -0k\ -0s\ -0{\ -0%] -0-] -05] -0=] -0E] -b01100100001111110010001110000010101100100000000000101101001110011010000010011100100101011001111010100001000001001100010101010101000110001001001000100110000010101010101 M] -b0100010101111001101111010000011001011100111111100011000101100001011010000010011000101010101010001100000000000001011010011100110100000100111001001010110011110101000010000010011000101010101010001100010010010001001100000101010101011000111000001010110010010010000111111001011010111110100001100010001111101100100100100001 }] -b0000000000000000 o^ -b0000000000000000 w^ -b0000000000000000 !_ -0)_ -01_ -09_ -0A_ -0I_ -0Q_ -b1000100000011101000010000011111101110101010011100110110010010111000001011000 Y_ -b1101111011101001110101001110110011111110011010100000010001100000100011011110 q_ -0+` -b1010011110110100011001111000010100100100101111101111000010110001101010000011011101110101101110000100011000100010110001001000100111000100101001110111101100001111111100111010000100000111111011101010100 3` -b0101110111101001101001001011111000001110000110001010110111100001111000101110011110101010101101011001010000001100100100000000110100110001010111010011111101000111100001010100010110101110110101001000110 k` -0Ea -0Ma -b0000011000110101101111010 Ua -0]a -b1010101111110000110100000001 ea -1ma -b1011111101010010001001010 ua -b10100101101011111000001101110001011100111100011011110000001011110000011100011101011011101111101101000110000101111011100001101010 }a -0?b -0Gb -1Ob -b01 Wb -1_b -b1001 gb -b110100110111110011101111010001 ob -b00011011001001100110010010010010 wb -0!c -0)c -11c -09c -0Ac -0Ic -0Qc -0Yc -0ac -0ic -0qc -0yc -0#d -0+d -03d -1;d -0Cd -0Kd -1Sd -b1011111101010010001001010 [d -b00 cd -b00000000000000000000000000000000 kd -b10100101101011111000001101110001011100111100011011110000001011110000011100011101011011101111101101000110000101111011100001101010 sd -b0000000000000000000000000000000000000000000000000 5e -1Ee -0Me -0Ue -1]e -b1011110101010011010101010 ee -b10 me -b11110011011001001000001101000111 ue -b0001000000010100111101111101111100001011001001001 }e -b10010010100000000100111110100001001000111011000011110100110101111010000010111111011100001001001110100111011001000011111011000010 /f -0Of -0Wf -0_f -b00000001101001001000001111011110 gf -b00000011010001010001000110111111000000011010010010000011110111100011011000000011111100101110001111110001101010101000110000000010 of -b110110111010110101010 1g -19g -0Ag -b0011101101100110 Ig -b000100000001010011110111110111110000101100 Qg -b01 ag -1ig -b0010 qg -0yg -0#h -0+h -03h -0;h -0Ch -1Kh -0Sh -0[h -b1011110101010011010101010 ch -1kh -0sh -0{h -0%i -0-i -05i -0=i -0Ei -0Mi -0Ui -0]i -0ei -0mi -1ui -0}i -0'j -b000001100011010110111101001010101111110000110100000001 /j -0?j -b101111110101001000100101010100101101011111000001101110001011100111100011011110000001011110000011100011101011011101111101101000110000101111011100001101010 Gj -1oj -b0100 wj -b0110 !k -b0101011000001100 )k -b100100010001000101010011100001000001111101010010011100001101011111101101110011010100100000110000010111110011001001000000 1k -b10100010100001111011101010010110100100011101101000000001110001111100110101000001011101101011100000100110101011101100010011000111 Qk -b110101000010111111001100011110011010010101 qk -0#l -0+l -b0100 3l -b01000110010101100000110010010001000100010101001110000100000111110101001001110000110101111110110111001101010010000011000001011111001100100100000010100010100001111011101010010110100100011101101000000001110001111100110101000001011101101011100000100110101011101100010011000111110101000010111111001100011110011010010101 ;l -0-m -b0010 5m -b11111111111111111111111111111111 =m -b00011101111110101001000100101000000000000000000000000000000000000000000000000000000000000000000000000000000000000110100101101011111000001101110001011100111100011011110000001011110000011100011101011011101111101101000110000101111011100001101010 Em -b1010 'n -0/n -b11110011011001001000001101000111 7n -b10010010100000000100111110100001001000111011000011110100110101111010000010111111011100001001001110100111011001000011111011000010 ?n -b10 _n -0gn -1on -b0011101101100110 wn -b110110111010110101010 !o -b00000011010001010001000110111111000000011010010010000011110111100011011000000011111100101110001111110001101010101000110000000010 )o -0Io -1Qo -b0011101101100110 Yo -b110110111010110101010 ao -b00000011010001010001000110111111000000011010010010000011110111100011011000000011111100101110001111110001101010101000110000000010 io -0+p -13p -b0000000000000000 ;p -b11110011011001001000001101000111111100110110010010000011010001111111001101100100100000110100011111110011011001001000001101000111 Cp -0cp -0kp -0sp -b101111010101001101010 {p -b0000000000000000 %q -0-q -15q -0=q -1Eq -0Mq -0Uq -0]q -0eq -0mq -0uq -b01001110110110011011011011101011010101000000011010001010001000110111111000000011010010010000011110111100011011000000011111100101110001111110001101010101000110000000010 }q -b0000000011011110101010011010101010101111001101100100100000110100011100000001101001001000001111011110000000110100010100010001101111110000000110100100100000111101111000110110000000111111001011100011111100011010101010001100000000101101101110101101010101000111011011001100001000000010100111101111101111100001011001001001 Or -b0000000000000000 As -b0000000000000000 Is -b0000000000000000 Qs -0Ys -0as -0is -0qs -0ys -0#t -b1011110111110011101001000110010011010011100011010011100010100101100010010110 +t -b1110111000010001100000000110100100010101001111010000001101110110000110010001 Ct -0[t -b0011010001111101101011100000000111011110001011011101001001010110000000100011111111001001110001101010011011101100011001010010010011100111101110110000001001100101010010110001010010001100100110100111000 ct -b1000010000110111101100101111000100000000010100101010101001101000001110100110001010011011010011000010110101000010010100010011100101010101000001011000001110111010101001010011111110100101111001011001101 =u -0uu -0}u -b0011011101001101101000101 'v -0/v -b1101001101110100101101111101 7v -0?v -b0001100110011100110100111 Gv -b11010100111011011110010111100011010000101111110000000101110010100001111100000010111011111101010000011110001111000000001101100100 Ov -0ov -0wv -1!w -b01 )w -11w -b1111 9w -b000101111111000000100111010001 Aw -b10101111011011010001100000100101 Iw -0Qw -0Yw -1aw -0iw -0qw -0yw -0#x -0+x -03x -0;x -0Cx -0Kx -1Sx -1[x -1cx -0kx -0sx -0{x -0%y -b0000000000000000000000000 -y -b00 5y -b00000000000000000000000000000000 =y -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Ey -b0000000000000000000000000000000000000000000000000 ey -0uy -0}y -0'z -0/z -b1011001000000001100000100 7z -b10 ?z -b11000101010111001010111101000010 Gz -b0110111100111100101010110110001110011001011001101 Oz -b01011001000111010001000010000101100111001001100010110000100001011011100001001001010101011000110111010000100001100011001101101010 _z -0!{ -0){ -01{ -b00100001010000001110111100000010 9{ -b01001110000101001100000110111111001000010100000011101111000000100110101111111100110001110111001001110100101000001111101001111010 A{ -b100001111101110110110 a{ -0i{ -0q{ -b0010001110110110 y{ -b011011110011110010101011011000111001100101 #| -b01 3| -1;| -b0011 C| -0K| -0S| -0[| -0c| -0k| -0s| -0{| -0%} -0-} -b1011001000000001100000100 5} -0=} -1E} -0M} -0U} -0]} -0e} -0m} -0u} -0}} -0'~ -0/~ -07~ -0?~ -1G~ -0O~ -0W~ -b001101110100110110100010101101001101110100101101111101 _~ -0o~ -b000110011001110011010011111010100111011011110010111100011010000101111110000000101110010100001111100000010111011111101010000011110001111000000001101100100 w~ -0A!! -b1100 I!! -b1000 Q!! -b1111111011101011 Y!! -b100111100101000000011011001010101010100100101011001100110000110001011011110100101001101110100100100101100000111101001100 a!! -b10011110100001010001100010101011010111111111000001111111001010100111100010000000010011011110011010110000011010100110100011111010 #"! -b101100000110010010010000010100000100110010 C"! -0S"! -0["! -b1100 c"! -b11001000111111101110101110011110010100000001101100101010101010010010101100110011000011000101101111010010100110111010010010010110000011110100110010011110100001010001100010101011010111111111000001111111001010100111100010000000010011011110011010110000011010100110100011111010101100000110010010010000010100000100110010 k"! -0]#! -b0010 e#! -b11111111111111111111111111111111 m#! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 u#! -b0100 W$! -1_$! -b11000101010111001010111101000010 g$! -b01011001000111010001000010000101100111001001100010110000100001011011100001001001010101011000110111010000100001100011001101101010 o$! -b10 1%! -09%! -1A%! -b0010001110110110 I%! -b100001111101110110110 Q%! -b01001110000101001100000110111111001000010100000011101111000000100110101111111100110001110111001001110100101000001111101001111010 Y%! -0y%! -1#&! -b0010001110110110 +&! -b100001111101110110110 3&! -b01001110000101001100000110111111001000010100000011101111000000100110101111111100110001110111001001110100101000001111101001111010 ;&! -0[&! -1c&! -b0000000000000000 k&! -b11000101010111001010111101000010110001010101110010101111010000101100010101011100101011110100001011000101010111001010111101000010 s&! -05'! -0='! -0E'! -b101100100000000110000 M'! -b0000000000000000 U'! -0]'! -0e'! -0m'! -0u'! -0}'! -0'(! -0/(! -07(! -0?(! -0G(! -b01001000111011011010000111110111011011001001110000101001100000110111111001000010100000011101111000000100110101111111100110001110111001001110100101000001111101001111010 O(! -b0000000101011001000000001100000100101100010101011100101011110100001000100001010000001110111100000010010011100001010011000001101111110010000101000000111011110000001001101011111111001100011101110010011101001010000011111010011110101000011111011101101100000100011101101100110111100111100101010110110001110011001011001101 !)! -b0000000000000000 q)! -b0000000000000000 y)! -b0000000000000000 #*! -0+*! -03*! -0;*! -0C*! -0K*! -0S*! -b0000101010101100000000011100010111010001001010011000010011110000111001110000 [*! -b0000111010101100010100000010001010101000001011011010000011111011010100001101 s*! -0-+! -b0001010110110100000000001101110110011001100010001111001001110100111111000000010000101010010110111011110001110101110001011101110011001111101001100101111101011010101110110110000000111000101110100010010 5+! -b1010110010110111010001100111110100010000101110011100110100101100111111111010011110011100001001100011011010100010110001011100111110110111001111000101010011100101101110000011011110101010111110000101010 m+! -0G,! -0O,! -b1111101101000001111011010 W,! -1_,! -b1010110100100001111110010111 g,! -0o,! -b1101101110100000001000010 w,! -b11010111110010000100010100100001111110000011001000100011111111101000001110111011011000001010000110100001110011000110111100110101 !-! -0A-! -0I-! -1Q-! -b00 Y-! -1a-! -b1110 i-! -b101111000100100010000100110010 q-! -b00000111001110110000100101011101 y-! -0#.! -0+.! -03.! -0;.! -0C.! -0K.! -1S.! -0[.! -0c.! -0k.! -1s.! -1{.! -1%/! -1-/! -15/! -1=/! -0E/! -0M/! -0U/! -b1101101110100000001000010 ]/! -b00 e/! -b00000000000000000000000000000000 m/! -b11010111110010000100010100100001111110000011001000100011111111101000001110111011011000001010000110100001110011000110111100110101 u/! -b0000000000000000000000000000000000000000000000000 70! -1G0! -0O0! -0W0! -1_0! -b0111011011010110100110000 g0! -b00 o0! -b10011001000010101010011111110001 w0! -b0111100011101101110111010011111110010101110100011 !1! -b10100011011100011001100101111111111110000111100110111101011011101111001101011100010101000101111110001111010100101110101101100111 11! -0Q1! -0Y1! -0a1! -b00100110011110011010101101110000 i1! -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 q1! -b111010101110101111010 32! -0;2! -0C2! -b1011010000010111 K2! -b011110001110110111011101001111111001010111 S2! -b11 c2! -0k2! -b1000 s2! -0{2! -0%3! -0-3! -053! -0=3! -0E3! -1M3! -0U3! -0]3! -b0111011011010110100110000 e3! -0m3! -1u3! -0}3! -0'4! -1/4! -074! -0?4! -0G4! -0O4! -0W4! -0_4! -0g4! -0o4! -0w4! -0!5! -0)5! -b111110110100000111101101011010110100100001111110010111 15! -0A5! -b110110111010000000100001011010111110010000100010100100001111110000011001000100011111111101000001110111011011000001010000110100001110011000110111100110101 I5! -0q5! -b0011 y5! -b0101 #6! -b1100111011011100 +6! -b111000101100001110011111011110001111011010000100100111111101100010100110110111011000111011010111111110011100110110110100 36! -b11010000101011010110100111000101000110110110101101010100011100100010101101010010000001101100101111000100011001011111011110000000 S6! -b001111001010000001110011101010110000000100 s6! -0%7! -0-7! -b0011 57! -b00110101110011101101110011100010110000111001111101111000111101101000010010011111110110001010011011011101100011101101011111111001110011011011010011010000101011010110100111000101000110110110101101010100011100100010101101010010000001101100101111000100011001011111011110000000001111001010000001110011101010110000000100 =7! -0/8! -b0001 78! -b11111111111111111111111111111111 ?8! -b00010110110111010000000100001000000000000000000000000000000000000000000000000000000000000000000000000000000000000111010111110010000100010100100001111110000011001000100011111111101000001110111011011000001010000110100001110011000110111100110101 G8! -b0000 )9! -119! -b10011001000010101010011111110001 99! -b10100011011100011001100101111111111110000111100110111101011011101111001101011100010101000101111110001111010100101110101101100111 A9! -b00 a9! -0i9! -0q9! -b1011010000010111 y9! -b111010101110101111010 #:! -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 +:! -0K:! -0S:! -b1011010000010111 [:! -b111010101110101111010 c:! -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 k:! -0-;! -05;! -b1111111111111111 =;! -b10100011011100011001100101111111111110000111100110111101011011101111001101011100010101000101111110001111010100101110101101100111 E;! -0e;! -0m;! -1u;! -b011101101101011010011 };! -b1111111111111111 '! -b0000000000000000 K>! -b0000000000000000 S>! -0[>! -0c>! -0k>! -0s>! -0{>! -0%?! -b0100111010110001101101010001101011100111101011101111100111101111110111000011 -?! -b0001011001010111110000110100001000011100101111111101101110010111100001010011 E?! -0]?! -b0000000100010111100111011001100001100000001001100011010100110100000110000000110000101101111111110010010010110000000100000110100111011001111011000111000110000010111111000011011010100011010111001111010 e?! -b0011000000010010100010010010011110111110011011100101110001000010010111011101000111011010001011011000101011001110111010001100110111001000001010111000110111101100000111011110101100110000001011110010011 ?@! -0w@! -0!A! -b1010000110100001010110010 )A! -11A! -b1000011110101011001111000110 9A! -1AA! -b0110101111110011001101110 IA! -b11011101011011101000110000100100010110011100111001110101000001110100101111011011011010001100110010010011101111010000100101110100 QA! -0qA! -1yA! -0#B! -b00 +B! -03B! -b1101 ;B! -b011000000100010111000111111011 CB! -b11010000101011001001101100010001 KB! -0SB! -0[B! -1cB! -0kB! -0sB! -0{B! -0%C! -0-C! -05C! -0=C! -0EC! -0MC! -0UC! -0]C! -1eC! -1mC! -0uC! -0}C! -1'D! -b0110101111110011001101110 /D! -b00 7D! -b00000000000000000000000000000000 ?D! -b11011101011011101000110000100100010110011100111001110101000001110100101111011011011010001100110010010011101111010000100101110100 GD! -b0000000000000000000000000000000000000000000000000 gD! -1wD! -0!E! -0)E! -11E! -b0100010010001010001001010 9E! -b01 AE! -b11011101101100000100001001000101 IE! -b1101001101011110001110001101111001111111001100100 QE! -b00110001001001100110001000111110110100011110011001101100000111110010101001001000010100011010101000111010011111011001101000000110 aE! -1#F! -1+F! -13F! -b00110001100011100110100010110000 ;F! -b00110000000111001100011110110110000010111011000101011101111101100011000110001110011010001011000000100111100100100101000111100111 CF! -b010000100000101010111 cF! -0kF! -0sF! -b1110110011010101 {F! -b110100110101111000111000110111100111111100 %G! -b00 5G! -1=G! -b1001 EG! -0MG! -1UG! -1]G! -0eG! -0mG! -0uG! -1}G! -1'H! -0/H! -b0100010010001010001001010 7H! -1?H! -0GH! -0OH! -0WH! -0_H! -0gH! -1oH! -0wH! -0!I! -0)I! -11I! -09I! -1AI! -0II! -0QI! -1YI! -b101000011010000101011001011000011110101011001111000110 aI! -0qI! -b011010111111001100110111011011101011011101000110000100100010110011100111001110101000001110100101111011011011010001100110010010011101111010000100101110100 yI! -1CJ! -b1010 KJ! -b1101 SJ! -b0110111100111111 [J! -b100011100011100110001100000110001100111110101001011111000000000000000011100110000000110010011010000100010110000100001001 cJ! -b00111001100010110101111011010110100100001111001001111011101011000111100100101000011010110000001101011111011010100111101111100011 %K! -b011001011100000101110010101111110001001101 EK! -0UK! -1]K! -b1010 eK! -b10101101011011110011111110001110001110011000110000011000110011111010100101111100000000000000001110011000000011001001101000010001011000010000100100111001100010110101111011010110100100001111001001111011101011000111100100101000011010110000001101011111011010100111101111100011011001011100000101110010101111110001001101 mK! -1_L! -b0001 gL! -b11111111111111111111111111111111 oL! -b00011011010111111001100110111000000000000000000000000000000000000000000000000000000000000000000000000000000000000111011101011011101000110000100100010110011100111001110101000001110100101111011011011010001100110010010011101111010000100101110100 wL! -b1010 YM! -0aM! -b11011101101100000100001001000101 iM! -b00110001001001100110001000111110110100011110011001101100000111110010101001001000010100011010101000111010011111011001101000000110 qM! -b01 3N! -0;N! -1CN! -b1110110011010101 KN! -b010000100000101010111 SN! -b00110000000111001100011110110110000010111011000101011101111101100011000110001110011010001011000000100111100100100101000111100111 [N! -0{N! -1%O! -b1110110011010101 -O! -b010000100000101010111 5O! -b00110000000111001100011110110110000010111011000101011101111101100011000110001110011010001011000000100111100100100101000111100111 =O! -0]O! -1eO! -b0000000000000000 mO! -b11011101101100000100001001000101110111011011000001000010010001011101110110110000010000100100010111011101101100000100001001000101 uO! -07P! -0?P! -0GP! -b010001001000101000100 OP! -b0000000000000000 WP! -0_P! -0gP! -0oP! -0wP! -0!Q! -0)Q! -01Q! -09Q! -0AQ! -0IQ! -b01111011001101010101000010000010101011100110000000111001100011110110110000010111011000101011101111101100011000110001110011010001011000000100111100100100101000111100111 QQ! -b0100110010100010010001010001001010011101110110110000010000100100010100110001100011100110100010110000001100000001110011000111101101100000101110110001010111011111011000110001100011100110100010110000001001111001001001010001111001110100001000001010101110011101100110101011101001101011110001110001101111001111111001100100 #R! -b0000000000000000 sR! -b0000000000000000 {R! -b0000000000000000 %S! -0-S! -05S! -0=S! -1ES! -0MS! -0US! -b1100100011010100100100100101011110001001100100100001010101001011000100001011 ]S! -b0010100100110001010000001011101101010111101101011100110011001110001000100111 uS! -0/T! -b0111101010101111001101100101000111010111011101110100110001100001100001000111010110111001101100111000111110101011111100111110010110011100010000011001111110100110000001010101001001001010111100010011001 7T! -b0011011101011000011011110101101111100111010011011011100110101000010110101110001111101110111110101010100001010100001110111000100101010101010100010001100001111011010001010110101001001010101101010000011 oT! -1IU! -0QU! -b1001001111100010101100011 YU! -0aU! -b1100100101001110000110110010 iU! -0qU! -b1001000000111011000101011 yU! -b00100111000110101110001101011100111000010001000010010001101000000110000101100011111001111001010011100010011111110111000000011110 #V! -0CV! -0KV! -1SV! -b01 [V! -0cV! -b0111 kV! -b100001100011001101011000110101 sV! -b10000000001001100101011110100111 {V! -0%W! -0-W! -05W! -0=W! -0EW! -0MW! -1UW! -0]W! -0eW! -1mW! -1uW! -1}W! -1'X! -1/X! -07X! -1?X! -0GX! -0OX! -0WX! -b1001000000111011000101011 _X! -b00 gX! -b00000000000000000000000000000000 oX! -b00100111000110101110001101011100111000010001000010010001101000000110000101100011111001111001010011100010011111110111000000011110 wX! -b0000000000000000000000000000000000000000000000000 9Y! -1IY! -0QY! -0YY! -0aY! -b0100111000001001001001110 iY! -b11 qY! -b00111011101111011100000011001000 yY! -b1101111110111010011011000100110000110000000110000 #Z! -b11100100101111101101100010111101100000010010101001011100001001001000100111011101001011010000110110111010010010001011111111110111 3Z! -1SZ! -0[Z! -0cZ! -b00111110000101001100000010000100 kZ! -b00111110000101001100000010000100011100000100011100101110010111001100100101111101011010010000000011010010010100111011110001111100 sZ! -b010100111010101001110 5[! -0=[! -0E[! -b0010001001010101 M[! -b110111111011101001101100010011000011000000 U[! -b00 e[! -0m[! -b1100 u[! -0}[! -1'\! -0/\! -07\! -0?\! -1G\! -0O\! -0W\! -0_\! -b0100111000001001001001110 g\! -0o\! -1w\! -0!]! -0)]! -11]! -09]! -0A]! -0I]! -0Q]! -1Y]! -0a]! -1i]! -0q]! -1y]! -1#^! -1+^! -b100100111110001010110001101100100101001110000110110010 3^! -0C^! -b100100000011101100010101100100111000110101110001101011100111000010001000010010001101000000110000101100011111001111001010011100010011111110111000000011110 K^! -0s^! -b1011 {^! -b0110 %_! -b0110110101111110 -_! -b111010000011001011000101111011010011001010100010001110100010110000111110101010100101110100111011001011110101001101010000 5_! -b00100100100101101010000111111001001011010000110011011001001111011000001000101010010001011110000010000111011110101110111000100001 U_! -b010100001000111000011111011110000000111000 u_! -0'`! -0/`! -b1011 7`! -b10110110011011010111111011101000001100101100010111101101001100101010001000111010001011000011111010101010010111010011101100101111010100110101000000100100100101101010000111111001001011010000110011011001001111011000001000101010010001011110000010000111011110101110111000100001010100001000111000011111011110000000111000 ?`! -01a! -b0010 9a! -b11111111111111111111111111111111 Aa! -b00010100100000011101100010101100000000000000000000000000000000000000000000000000000000000000000000000000000000000100100111000110101110001101011100111000010001000010010001101000000110000101100011111001111001010011100010011111110111000000011110 Ia! -b1110 +b! -13b! -b00111011101111011100000011001000 ;b! -b11100100101111101101100010111101100000010010101001011100001001001000100111011101001011010000110110111010010010001011111111110111 Cb! -b11 cb! -1kb! -1sb! -b0010001001010101 {b! -b010100111010101001110 %c! -b00111110000101001100000010000100011100000100011100101110010111001100100101111101011010010000000011010010010100111011110001111100 -c! -1Mc! -1Uc! -b0010001001010101 ]c! -b010100111010101001110 ec! -b00111110000101001100000010000100011100000100011100101110010111001100100101111101011010010000000011010010010100111011110001111100 mc! -1/d! -17d! -b0000000000000000 ?d! -b00111011101111011100000011001000001110111011110111000000110010000011101110111101110000001100100000111011101111011100000011001000 Gd! -0gd! -0od! -0wd! -b010011100000100100100 !e! -b0000000000000000 )e! -01e! -09e! -0Ae! -0Ie! -0Qe! -0Ye! -0ae! -0ie! -0qe! -0ye! -b11001000100101010101010011101010100111000111110000101001100000010000100011100000100011100101110010111001100100101111101011010010000000011010010010100111011110001111100 #f! -b0000100100100111000001001001001110110011101110111101110000001100100000111110000101001100000010000100001111100001010011000000100001000111000001000111001011100101110011001001011111010110100100000000110100100101001110111100011111000101001110101010011100000100010010101011101111110111010011011000100110000110000000110000 Sf! -b0000000000000000 Eg! -b0000000000000000 Mg! -b0000000000000000 Ug! -0]g! -0eg! -0mg! -0ug! -0}g! -0'h! -b1110101001110101000011101011010000000101000010101100011110010110101000110000 /h! -b0110111101111101111000001111001100110000000110101101010000111110100000001111 Gh! -0_h! -b1010110001101100010011110111101100010001010110000101110001110010111101001011111110101100000110011000110110100100011011010101110001001000011000101100110011100010101011111000000111010110100000001010000 gh! -b1100010000000111100111000111100100111010001110111101100001111011101001011000000111000110100101101111010110010010011010100100111010111110100111100010110101101110101011000111000000011101100111100011100 Ai! -0yi! -0#j! -b1101101000011100110100110 +j! -13j! -b1011110110100011100001000010 ;j! -0Cj! -b1110011111110000101111111 Kj! -b01101101100000101101100110111100110101111101101100011001111110010101101001111110011111100000110010111011110000111001101001111000 Sj! -0sj! -0{j! -1%k! -b01 -k! -15k! -b0010 =k! -b101100010010111111011110000000 Ek! -b00101100111010000101011100010000 Mk! -0Uk! -1]k! -1ek! -0mk! -0uk! -1}k! -1'l! -0/l! -07l! -0?l! -1Gl! -1Ol! -0Wl! -0_l! -0gl! -0ol! -0wl! -0!m! -0)m! -b1110110110110111111111000 1m! -b00 9m! -b00100100011011011001110001110101 Am! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Im! -b1000010101010110100011000111010001010010011001111 im! -1ym! -1#n! -1+n! -13n! -b0101000101101000111000101 ;n! -b01 Cn! -b01011000111011000100101011100001 Kn! -b0110000101001000101111101001011101000001111100000 Sn! -b00110101101110100111010100110010110101000010110000100010001111111000010101110101110001101111001011101111010111000100100001000110 cn! -0%o! -1-o! -15o! -b00111001101111110110011101110101 =o! -b00010011001000111011111000111111001101000111110101010010111101110011100110111111011001110111010111000111111110000010100101000010 Eo! -b101010011011100101001 eo! -1mo! -0uo! -b0001101001111010 }o! -b011000010100100010111110100101110100000111 'p! -b00 7p! -1?p! -b1000 Gp! -0Op! -0Wp! -1_p! -0gp! -1op! -0wp! -1!q! -1)q! -01q! -b0101000101101000111000101 9q! -1Aq! -0Iq! -0Qq! -0Yq! -1aq! -0iq! -0qq! -0yq! -0#r! -1+r! -03r! -1;r! -0Cr! -1Kr! -1Sr! -1[r! -b110110100001110011010011011011110110100011100001000010 cr! -0sr! -b111001111111000010111111101101101100000101101100110111100110101111101101100011001111110010101101001111110011111100000110010111011110000111001101001111000 {r! -0Es! -b0111 Ms! -b1011 Us! -b1001010011100010 ]s! -b011110101001110100101101100000100111101010101110110101010101111010001011111001011010011010000110001101101010000001001011 es! -b11010101110000110001010000111100000100110111001001110100111101110001000011010101001011010000111011101001001100010110001110010001 't! -b110010000100000001010001111000101111110010 Gt! -1Wt! -0_t! -b0000 gt! -b01111011100101001110001001111010100111010010110110000010011110101010111011010101010111101000101111100101101001101000011000110110101000000100101111010101110000110001010000111100000100110111001001110100111101110001000011010101001011010000111011101001001100010110001110010001110010000100000001010001111000101111110010 ot! -0au! -b0010 iu! -b11111111111111111111111111111111 qu! -b11110111011011011011111111100000001001000110110110011100011101011000010101010110100011000111010001010010011001111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 yu! -b0101 [v! -0cv! -b01011000111011000100101011100001 kv! -b00110101101110100111010100110010110101000010110000100010001111111000010101110101110001101111001011101111010111000100100001000110 sv! -b01 5w! -0=w! -0Ew! -b0001101001111010 Mw! -b101010011011100101001 Uw! -b00010011001000111011111000111111001101000111110101010010111101110011100110111111011001110111010111000111111110000010100101000010 ]w! -0}w! -0'x! -b0001101001111010 /x! -b101010011011100101001 7x! -b00010011001000111011111000111111001101000111110101010010111101110011100110111111011001110111010111000111111110000010100101000010 ?x! -0_x! -0gx! -b0000000000000000 ox! -b01011000111011000100101011100001010110001110110001001010111000010101100011101100010010101110000101011000111011000100101011100001 wx! -09y! -0Ay! -0Iy! -b010100010110100011100 Qy! -b0000000000000000 Yy! -0ay! -1iy! -0qy! -1yy! -0#z! -0+z! -03z! -0;z! -0Cz! -0Kz! -b00000110100111101010101001101110010100100010011001000111011111000111111001101000111110101010010111101110011100110111111011001110111010111000111111110000010100101000010 Sz! -b0110010010101000101101000111000101010101100011101100010010101110000100111001101111110110011101110101000100110010001110111110001111110011010001111101010100101111011100111001101111110110011101110101110001111111100000101001010000101010100110111001010011000011010011110100110000101001000101111101001011101000001111100000 %{! -b0000000000000000 u{! -b0000000000000000 }{! -b0000000000000000 '|! -0/|! -07|! -0?|! -0G|! -0O|! -0W|! -b0010000110001111001111001110100010110000001001001001001011000001001000110101 _|! -b0100100100001010110011111100101110000111010010101010011010100000101111110011 w|! -01}! -b1001010001010011100100101110110001001101001101100111001110100100101111101101000000111000110111010110101011010000001101010001000111100111011111010001111001101011101000010110011110011101000101100000010 9}! -b1101100110111110100010000000011101100011011010110000011000110001000001100000110101001101101010001111010011101101111110011101000101011010110111110111110010000000001111011010110000001001110110100001101 q}! -0K~! -0S~! -b1100000100010010100101001 [~! -0c~! -b1000000100101010111011110100 k~! -0s~! -b1110011100010001010101011 {~! -b10110110110110110011011010011100010010001001001101101010110101101101001110011101011111001111001011110010010001010110000001000100 %!" -0E!" -0M!" -1U!" -b01 ]!" -1e!" -b1101 m!" -b010001011101100001000100000101 u!" -b00000100111111111100010000000100 }!" -0'"" -0/"" -17"" -0?"" -0G"" -0O"" -0W"" -0_"" -0g"" -1o"" -0w"" -1!#" -0)#" -01#" -09#" -0A#" -1I#" -0Q#" -0Y#" -b0100010111011000010001000 a#" -b01 i#" -b00000100111111111100010000000100 q#" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 y#" -b0000111101011010011101011010010110011101011110101 ;$" -1K$" -0S$" -0[$" -0c$" -b1111001010011011010000101 k$" -b01 s$" -b11000101010100010001010011110111 {$" -b1001111001000000100110110100001001010001010101010 %%" -b10011100000001010001101011010000111101101001011100000111010101000000000010010001100011111001110010110100110001011000100101110100 5%" -1U%" -1]%" -0e%" -b01110101000101010010010011001010 m%" -b01111010111101001001000000000000110110000111010010110110001011110111010100010101001001001100101000000100011101100110111010100010 u%" -b000101110110010000001 7&" -0?&" -0G&" -b1000001011000001 O&" -b100111100100000010011011010000100101000101 W&" -b10 g&" -0o&" -b1010 w&" -0!'" -1)'" -11'" -09'" -0A'" -0I'" -0Q'" -0Y'" -0a'" -b1111001010011011010000101 i'" -0q'" -1y'" -0#(" -0+(" -03(" -0;(" -0C(" -0K(" -0S(" -0[(" -0c(" -1k(" -0s(" -0{(" -1%)" -1-)" -b110000010001001010010100101000000100101010111011110100 5)" -0E)" -b111001110001000101010101110110110110110110011011010011100010010001001001101101010110101101101001110011101011111001111001011110010010001010110000001000100 M)" -0u)" -b1000 })" -b1110 '*" -b1010100101111001 /*" -b111111111010100100011010100000111000111011010101101100010111101110001101101100010110111000011000100101000011001000111010 7*" -b11110101010110000011001100001011111100100001101011011100110011000000011000011011101001010011000100110101101010000000001000000011 W*" -b011000100010001111001001001000001000110011 w*" -1)+" -01+" -b0000 9+" -b10001110101010010111100111111111101010010001101010000011100011101101010110110001011110111000110110110001011011100001100010010100001100100011101011110101010110000011001100001011111100100001101011011100110011000000011000011011101001010011000100110101101010000000001000000011011000100010001111001001001000001000110011 A+" -03," -b0010 ;," -b11111111111111111111111111111111 C," -b00010010001011101100001000100001000001001111111111000100000001000000111101011010011101011010010110011101011110101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 K," -b0101 --" -05-" -b11000101010100010001010011110111 =-" -b10011100000001010001101011010000111101101001011100000111010101000000000010010001100011111001110010110100110001011000100101110100 E-" -b01 e-" -0m-" -0u-" -b1000001011000001 }-" -b000101110110010000001 '." -b01111010111101001001000000000000110110000111010010110110001011110111010100010101001001001100101000000100011101100110111010100010 /." -0O." -0W." -b1000001011000001 _." -b000101110110010000001 g." -b01111010111101001001000000000000110110000111010010110110001011110111010100010101001001001100101000000100011101100110111010100010 o." -01/" -09/" -b0000000000000000 A/" -b11000101010100010001010011110111110001010101000100010100111101111100010101010001000101001111011111000101010100010001010011110111 I/" -0i/" -0q/" -0y/" -b111100101001101101000 #0" -b0000000000000000 +0" -030" -0;0" -0C0" -0K0" -0S0" -0[0" -0c0" -0k0" -0s0" -0{0" -b00100000101100000100010111011001000000101111010111101001001000000000000110110000111010010110110001011110111010100010101001001001100101000000100011101100110111010100010 %1" -b0000110001111001010011011010000101011100010101010001000101001111011101110101000101010010010011001010011110101111010010010000000000001101100001110100101101100010111101110101000101010010010011001010000001000111011001101110101000100001011101100100000010010000010110000011001111001000000100110110100001001010001010101010 U1" -b0000000000000000 G2" -b0000000000000000 O2" -b0000000000000000 W2" -0_2" -0g2" -0o2" -0w2" -0!3" -0)3" -b1010101110111100010001111000001010010100101001111111001100000010001111000111 13" -b0010101000000010011001110010001111100011110100011110101110101010101100000111 I3" -0a3" -b1001110111101110010010111010000101101101011001110001001001110110100011111010001110000111111001101101101110001110000111001011100010100000110001011100001011100011111010101010100011110000010100101001010 i3" -b0111101001000110100100101000100101100010110011111010110011011110101011110100100010110001101110011010101111100101111100100000011111111101101001000100000100000010000010101000010111100111010111100110100 C4" -0{4" -0%5" -1-5" -155" -b1110100101010111010000101 =5" -0E5" -1M5" -1U5" -0]5" -b0000110110011000000010001 e5" -0m5" -1u5" -1}5" -1'6" -b0011110011100101001101100 /6" -076" -0?6" -0G6" -1O6" -b0110011010111011100100001 W6" -1_6" -1g6" -0o6" -0w6" -b0101111000000010101111011 !7" -0)7" -017" -197" -0A7" -b0001100111111111110111010 I7" -0Q7" -1Y7" -0a7" -1i7" -b0111110101110000101011001 q7" -1y7" -1#8" -0+8" -138" -b1001101001111111000101011 ;8" -1C8" -0K8" -b0011001001100110111101001110 S8" -1[8" -b11 c8" -1k8" -b1111000110110011001100011111 s8" -0{8" -1%9" -b00010100 -9" -b00111110000101101111010110110001000111010000100100110011101110110011111110010100100011110000110001001101000010110110101111110000010011100000000010100000000110011000101001100111100111101100111101010101101011000101001111101101 59" -1m9" -0u9" -b0101 }9" -b1110010001011010011110100110111101100101111011011011001100101100010000000110100011010000010001100001001100111111011010101100101100101010001011011000001001100111100011111000101011110101100010011110111111000101111001011110011010010110 ':" -b0110110001011101010000000110001110001100111011101000010101010011101011100111101111111010111000001000100010111111110101100100011101100001101101000101011100010100001110010010111011000111001100100010101001110001101101011101100110111111 /:" -b0111110100100111100100101110000111110110010100000101001011010000011011110100111111001100110111100101001011111110000010101010000011010101110001111010101110010010001010101101000100100101110101000110000110001010000011010011000010010011 7:" -b0000101011101000110001001010111110110000011010001101100111000111111101110101111001100011001110101001010101111010011110010110000110101110010000010101000111000100110110101101110001111011011101111000101101011010111001101111000111010011 ?:" -b1011000111001110001011011110110001100110110001100111111010010100110100001100111100010111011111100100100010100111000111110101000011101101000000111001110011110011110000010100101111000101101110011000011000111111010000011011100111010001 G:" -b1100100001011101111100011111011110000010111011010111011001111011111111010010111101010111101101101100111011011001111110010101010001110000000010001001010011101110100010011010111111100001101010010000010010100110001011101100100100101110 O:" -b1101000101100011110001010111001011100100001111011000110010000100010011110111000110011110110000001101000100000000001001100001100111111110110101010101010000111100100011001011011110010001011001010101110110111100001001101100100100010110 W:" -b0111100111111111111011010011100100010100010011001010100110001100111111010011000110011101001111111011101111001000111110100111001001011100001000110101111110101011001100111000100110000100000111110010011000000100101110111101011101111000 _:" -b1101111101111011100111101010010110001110001000011011000101010111010111011000111011000101101100111110010101101110101001000111010100011011111011000011101111111110101001101000010101010110100111101010000001101111111111010000001011000110 Q?" -b1001100111101101110000100001001110100110101110010111010100000100100110110101101100001011010110010110111011010110101110011101111001110100010110110111010111011010000001100001111011011010100110010010011111000001010100010111111010010000 3@" -b000 s@" -b011 {@" -b110 %A" -1-A" -b10110011 5A" -0=A" -b11101100 EA" -1MA" -1UA" -1]A" -0eA" -0mA" -b001001011000000100111110001111011010110101 uA" -0'B" -1/B" -b01 7B" -b1111110000000101011111110 ?B" -b11 GB" -b01011010010011100001011001100011 OB" -b100010000011101100110001110000111110110100 WB" -b1111 gB" -1oB" -1wB" -b10 !C" -b001000000111010000100000111111011101010100 )C" -19C" -b0010 AC" -0IC" -1QC" -b01 YC" -b11010010011110101000111000000101 aC" -b11100110110010010111000001011000 iC" -b11110111100001011000110101000001101110111010110111000010001100010001011000100100010011100010010100111011110110000111111110011101 qC" -13D" -1;D" -b1001111011010001 CD" -b0010000001110100001000001111110111010101001001010 KD" -b100111100001010010010 [D" -1cD" -0kD" -0sD" -1{D" -0%E" -1-E" -05E" -0=E" -0EE" -0ME" -1UE" -b1001111000010100100100101 ]E" -b0000100000111111011101010100 eE" -1mE" -b00111 uE" -b111011110110001111000011101011000101100110001100001100 }E" -b001100100101000100111010010100111000000000110110011111 !F" -b001000111011000110001111010111111000001101010101011001 #F" -b111000111101000011101111000111001111100000000101000001 %F" -b000001010001100001001010100010001010010000100111010000 'F" -b110000001100100110010100101010010011001101001101001011 )F" -b011111101111010111011100110010010010000010110101011010 +F" -b000110000110110001110110001001010010011111001000111111 -F" -b000010010001101010101010101000110111101000110010000001 /F" -b110101110000010101010111101001011111001000101000001010 1F" -b001101001111000101111011111100000010100001101111101101 3F" -b100100101010010100000110011101000011000111111001100100 5F" -b111010010010101001101101101111110010011000111101001101 7F" -b111110011001100110010101010000111010111101100010011100 9F" -b100000010111011101100100011111011010110011010100001111 ;F" -b111001001000111001001000111001111100001101111000101110 =F" -b001101111011101100110110011101000001000100101101010001 cH" -b010010100100001001100011011100101011011000100011111111 sH" -b1011 %I" -b1111 -I" -b1011 5I" -1=I" -b00001 EI" -b010010001101110100011111110101010111100000010110101011000001101110100110001011001001011111110000001101111001000011010110100111011001101100000011011111010 MI" -b001110111110001101100110010101101100110110001101010111010010100111011100110101010010100111000011011100110101001000000001011001110110101011001110000011001 RI" -b100010110010101111111101010010100110100010111101011111000110101101001000111101110001111111001111110001111000111101000101001000001111100110001000010100111 WI" -b011101100010111101100000011011011100111000011100110001000101101011010111010000101101010100111011001110000101101111111101001010000010111110010000010101110 \I" -b100000100101011000110011100001111011001010110101101101000010110100011101111001110101001001111011100110001100000001110101011000100100001101001101001110010 aI" -b001000010001111110010111110000011110111011100100011110000100101110100011001001110111100111100000110100010011110110110101010100010100000111110010111010001 fI" -b010011001110010011001100101001011000100101110110000111111010111000011011110110000011000111011111101001011010110111000010111010001111111110001100101110101 kI" -b100111010010110100000011111001100000011010100111110010100101100111110010110011111100001000001111010111101101001110100010001111000110101110101101100010101 pI" -b100001010111010110100000011101001000000111101010111101011001101001101011011010010110010000011010111001111100011010011000011110010111011110111100010111111 uI" -b111001010100010011001100011101011100101001101111100111110001001000010000101110100100011010001101011100101001110101010000011110011100001101000001110101001 zI" -b100001000111001101001010110111001100111111000011010111010010101111101101001110100110010101000111100010101010010100000110010011010101010110000010101101100 !J" -b101110110100101000011110000101100101110101010101011010000010100011100111101001100011010100000101000110101011010011100101100001110001100000011110000001000 &J" -b110101101101011010000001111110100010011000101001010111100001011100001110000100001110010000101100000101101110111001100001100010110100111100010111100010100 +J" -b011010010101111111110011010110001101110010011100110110100110011000010001010110001010011110111100000100101000001011100000100001010000000100010001111001011 0J" -b000000000011001110110100111111101000111111001001100011110111111110000011010101011000100110011100111011011111001101000110100101100100101011000000001100101 5J" -b101000100110001011100100110010101101101010100011001001001101110000011110111010011110101100001101011110011100000001100011010011100011110101010110000001000 :J" -b111010001100101101001110000010111001000101000100000110011001001011101010101100111001101101011101000000010011110100011110000001000010101101010111001010111 ;P" -b011010110110011110100000101101110010010111100111111100111000000111101101010000011111011010001001010101110011111000100100000000000100000110000010110100001 cP" -b0110 -Q" -b1010 5Q" -b0001 =Q" -1EQ" -b1101 MQ" -b1011 UQ" -b0111111001001111 ]Q" -b010011111000010011111111010101001001110000010001011000011100111010010010011111010011000011000101111110100100011111110111 eQ" -b00010000001111101110100111010111111100100111010110110000010111001100001010011010000100011000111111011011111111110110100010000000 'R" -0GR" -0OR" -b0010 WR" -b11110111001001110101100101111101010101101100100011000011111111101110011001000010101001100101110010011011001010100110101110101000000101001010110110010011100011110001111100101011101100111101111001010101110001000110100010110001100001110001101101000111011000110001011011100001001011011110101011100101011011000110100111 _R" -b10110000101011011100100110111011101111101100010010011110011011110110101101010101110110101100110110100101100011110111000001110100110000111101100000110100000000111010110100110010111001010001010101010100100001000011101110000010100100101100110011010010100110011111111100010011101010111011111000011110111000100100000011 iR" -b00000001101101010001101000010100111111011111100000010101100110100010001111111110011000101100111010000001100110000111001000110111110111011111110111100111011111110011110101111110110110010110011010001011101111010111101011111001100111011011011110001100100011101100111001010100101101010101110101001100010111100000100010 sR" -b10010010110100001000010101101111001111010110101111011110010110101100100001110110100101001000101000000011010101100001100001011001010000010000000100000011101001101101010111010110111000010100011001111100010000000100011100000100011011111010010111101111110110110100101110001110000100111011111010100011100111001100011101 }R" -b11110101111100001100111011001110111000101101111010010111100101000001001011110000000001101000100010001100100000010011101001010001101100101011010000000110001010000000100111000110010111101100010000110010100001001001111100100010100110011111111010000101001000001000100111000010101010001001011101000110100011001011000110 )S" -b10001001010000010110110000011010100111010110101010110000111010010010100111111011101000011011110010110001011110000001010001001101110000101010011110000001001100101111010011111010111001111111101110011101111111101001111001001011010110001101001111011111011100101110110110110000100000011010101111001101010001101011000101 3S" -b01010001100000000111001000010101000010110101110111100111100011000011010100011001110001000000001110111001001000001010100000110110010111111011001100100000010001101000010110110001101010101100101101010101101111011111000011101100010110111011011100011110011110010010011110101111001000000110101111100011001110000100011101 =S" -b10101100000010011011010000100001010010000000101001110100001111101010110101000010101011010001101101111000000110111110011100001101010111000110000110111001000101101001111110001011101011001111001000101000110100001101110001111000100101000000011111011010110000010000000100111110110111110111010110110000000011010010101000 GS" -b00100000110011001000100100110000011110011010001001000000100011010011101111010011001100000110010000111101000001110010001010111011011110000100000111101000011010100010010101110101101110100111110110000000011001011010110110000001000110001010001011100001100011101001011011110010001010011101011001001011111000001100110010 MY" -b00011010100110001010000010010011011111100011110100111000001110001110011110111001010101101111100101100010101011011101110010010110101110010101111011000000110001001101110101000110011011111100000000101110011000100000001110111011001100100110010010000101111000001010000100010100100110100100110011010100000011111111011001 ?Z" -b010 1[" -b110 9[" -b011 A[" -0I[" -b10110111100110111101000001100101110011111110001100010110000101101011010111110100001100010001111101100100100100001111000000110001111101110111100110101100110100001100100110110111011011111010110000011101110110110110001000000110110010111110001100 Q[" -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 3\" -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 S\" -b00001001010011101110011010011010011101100101110100101011011110011100011101011010101011001000101101111001001010110111001110001100 s\" -b11000000101111001100011111001100011111001000110110010000101001001101110111010001000111101000001110111011110000010001101110101011 5]" -b00110110010111101000110000100000110011110110010100000101101100110111100000001101010111000110000110101100001011000111110110101111 U]" -b01011000010100100000100011111111011001110101100110011000111011101100000000110100001010101111001000111110011010110101010101001000 u]" -b10111001010101100100001010000011010000011110000111000001101100011010110010011110000111110001110011001000000101010101010011110110 7^" -b10010011111010000011101010100101100110001100110100110111011000011110010100011000010111001011101000111111010000011001010111011010 W^" -b00111000011011010111111000000000010010001000011110001001010111010110110100101101000000011110010001100010110111011101001010011000 w^" -b00000000000101101001110011010000010011100100101011001111010100001000001001100010101010101000110001001001000100110000010101010101 9_" -b00010000010111100001011110100111011110000100101010111101001001010111101100001110001111000110001111110011111000011000001001011001 Y_" -b11001010100011111111000000001101011100100010011110011110001000110111011101001111110101011000111111101110101010010001011000001111 y_" -b00000001100100100101001100111110010111100011101010110100101100100111001110100111001110100101001011001000100000101001111100110010 ;`" -b11000110100011001011001000000011001110101011001001010110111011100010101101110111010001100010101011111110111111010001010111001101 [`" -b11001010010111011000011011100010110000110010000000111010110011110001010111111111100000001111101101110011101101011111001001011100 {`" -b10001110110101111010011101111011000001011011111110101100001000000111101011100111111010011101110000110101011011101101011011001010 =a" -b001010101111100111010 ]a" -b010111000111100010010 ^a" -b011100101010001111100 _a" -b011101010101101010010 `a" -b001011111101000101100 aa" -b011111001101000000100 ba" -b000000110001100101000 ca" -b101101100001011010011 da" -b010000110001001111000 ea" -b100011100000101011001 fa" -b001111100100110101010 ga" -b101101100001110111100 ha" -b000000100111001100001 ia" -b000000101100010001001 ja" -b110111001101101011001 ka" -b100000001011011011011 la" -b0101111001010011 !c" -b0011010000110110 )c" -b1110011010000010 1c" -b0101011011111111 9c" -b0000101010100001 Ac" -b0100000010001100 Ic" -b1111001010000010 Qc" -b1100100001011000 Yc" -b1101110111010111 ac" -b1001000011111100 ic" -b0110011000111110 qc" -b0000100101000100 yc" -b1001101110101111 #d" -b1111101001111110 +d" -b1000100110101111 3d" -b0011000011010100 ;d" -b0110111111010101 Cd" -b0011010010010011 Kd" -b11101001001010000011010101110001 Sd" -b01111011010010100000110110110001 [d" -b01110101000111001011001101111101011110001110011000101010001010110010000011011011111001101001110010101011110001001101101101001110011111011101000100101111110111101010111 cd" -b1001001011110100101010111010000101011101001001111010100011100000010111100110110010010111000001011000111101111000010110001101010000011011101110101101110000100011000100010110001001000100111000100101001110111101100001111111100111011001111000010100100101110011110110100010010000001110100001000001111110111010101001001010 5e" -b0110011100101001101110110010001101010101001110011001101101000101111001011011000011101 'f" -b1110000100010110100100111110101011110010001000101000100111101010111101011001110101101 *f" -b1111110000111101111110110110101011100101110001001010010011111100101001101010111001100 -f" -b0111000111011111101011000110111010010010000000010010001101001111100010001101101011100 0f" -b1011010011101001011001010110110001010101100110110110101101111100101111101100101101111 3f" -b0101101001001110000101100110001101100010000011101100110001110000111110110100111111111 6f" -b1101101100100000111111111111100111100000100101000011100111000010100000101100101110101 9f" -b1001000110010110000100111110110011101110101111100101100011001001000100101011111111101 {" -b101111001011111011110100001110000000111011000101000111011100100000000111001010001100101110111001000101110001011110110001000101011100000110011101000101000 C{" -b001111011101001001000010010000011000000101101001110011001010000110101000100100001111001011111110000111011011110001001011101000100010110011010111000110101 H{" -b000110010111111011010010011101011000001100110010010011111010101110101100100110001000101110111101100111010011110110111001110000111011100010111011111110101 M{" -b100001101100101001110001011000111000101100001111000111101110001101111000000111010100101001011001001110001110101011101000101001110011011110010111110010111 R{" -b101000001100110010011101111011000111100110101100111001100010101110100001000100011001110010101000010100111001101101000111101110110110001011110111011010011 W{" -b101110110000110111100000011001101100000001100100001011110000111111010001000110101110001001000100100001011011011111110110101000011010001101101001100110101 \{" -b101111110101001000100101010100101101011111000001101110001011100111100011011110000001011110000011100011101011011101111101101000110000101111011100001101010 ]## -b101110010001111010110010111011011101001100111110101011000100111000000100000100101101101000110101011010111011000011100111000000110000111111100110101101000 '$# -b0100 O$# -b1100 W$# -b1011 _$# -0g$# -b0010 o$# -b1010 w$# -b1011010110011000 !%# -b101101111010011010000010001100101111100001000001001101110111110100110111110011101111010001000101011101001010001100010011 )%# -b00101111100001011100010011111010000101101101100101111000010100110001101100100110011001001001001010010000010101000001101101110000 I%# -0i%# -0q%# -b0111 y%# -b01110111101111010101111010000111001011110100100010010110010101011011000100100001111011011000101011100110100101000010101101001000100001110110110010010110010010010011000010011100001001101010111111101101100100101110101001010111001000000001010000010011110000101111111001110001101011011101011110001101011000011000010010 #&# -b11001110000011010111101000001011011001100111011010110110111001101000101000010100010101111110011011110011001110011000111001111011000111101011111110010100001010110101100000110110010011010010111011100000111011011101101011010111000010111000011011000011010011101110101101111001000001101010010111101010110010111100100110 -&# -b00011010010001100001001101001111110001011110000100001001110111100111011000110110011011111100111110100011011000001101111011110001110101010111010000101100010011011000111111101011100001100000011110110100110001100001011110100111010110110001100111110001101110111111011011010110111000000100100111010101010010010001001110 7&# -b11011100010000101110000010110001111101011000110000010111100101000001001001110101100001100111100100100110001111011011101000011110110001010010110011100001111001100101101000000001101010011100011111010010010101011011000011110111101110000001110001000011100111101111111110001100110011111011001010101001111100100100010100 A&# -b01010100011100000000011000000001110100110101001001111111011010001000101110010100101110011100110011010001111111110011111000110010111100111111111010100001101100101011111010011101010001101011000110011000110000010000010101101100100101000010101011000010100111001110001000100010001010100100101001100111110001000010111111 K&# -b10000011101111001110111001001000110010011001000000101011011111110100011001101111000000110111111010101010011110101011011001011000111100000010110010000010011011100100111010011101111010000101011111100111111100111001101010010000110100001011001001001111011010111100101100011010100010100011111100111001101100011000101101 U&# -b10110101111000100001000001111001000100100010000110101100011010110001110011001001000001011101000111001011110111101001100011100111110010101001101110001100011100110000010110100001111011101011011001110110001110110000110000010100100010000100111100000110001000110001010111010000010110110101100111001101011101110000110011 _&# -b11100110010000111011000101001010011010100111111100011010101010001000101001101010001000110010010100010101111010001100100110000101001101101111010010001001011111101010110100010111101000100000001111100011101010001110001100110000001111101110111000010100111010100111011001101101010001000101011101101011001110000000011111 i&# -b11000111101101011011001010100011000111001111101100011001101011011001000010100010011010010101110110010011010010100111111101110011111001011000000100101001001001100010111011100001011000111111000001010111110100100101110000100010110000001010010110011000010101110111110010000100000111011010000110001000110110100001011011 o,# -b01000110010101100000110010010001000100010101001110000100000111110101001001110000110101111110110111001101010010000011000001011111001100100100000010100010100001111011101010010110100100011101101000000001110001111100110101000001011101101011100000100110101011101100010011000111110101000010111111001100011110011010010101 a-# -b001 S.# -b100 [.# -b001 c.# -1k.# -b00001101111010101001101010101010111100110110010010000011010001110001000000010100111101111101111100001011001001001010010010100000000100111110100001001000111011000011110100110101111010000010111111011100001001001110100111011001000011111011000010 s.# -b10011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 U/# -b11000111110011110010100100001111010101011001011011010001110010100011000010010000001001011000011000000111000010000000000111001101 u/# -b11010101000000011111001111011110101010000001000110001010101110011010000101101000011110100100011101110010101101101110011000011011 70# -b01101010100111111001010001101001001010110110010101010101010000011111100010000001001001110000001101011010011111100000001000111000 W0# -b10010001110010001110110111110110100101000010000110100001110110111011110011101010001000010001011001010000100110000111000001000110 w0# -b10110001010101000011011000011100011111101110011100011111101110000110101010100111100001011001110100101000001111001101101100000111 91# -b10001110010010001101110110100011011010100011100011111101110000000010110011110000011110111100001000101010111100011000101000101010 Y1# -b00011100000111000110011101100010110101000010110010101000001000000001010001000011101110110001001111100000001000010001111101000101 y1# -b01010010011100110100000011110101000000100011000000011110000110111111100111101100010001011101100110101100011100011101100001111111 ;2# -b10000011111001000111110010100011000001111001000001110000110011011010101100101000111110010101011010001101111010010000110001100101 [2# -b00000011010001010001000110111111000000011010010010000011110111100011011000000011111100101110001111110001101010101000110000000010 {2# -b00001011100101111111000000000100001101010111100001010011010010001001011111011000100000100110101000101000110111111101110100000100 =3# -b01010001101110001001101100110010111001111100111101011011111010101000110011110100101001011000100111100000011111110011011001000011 ]3# -b11010100000110110100001100111111111100101100110011000100010100100110100001010111001001001010111010001011101010100001110111110100 }3# -b00111000011101110011101100010111000000101110100011011010011001100111001101010001111001001111010110011110101111000100000101101100 ?4# -b01010001010111001001000101110001100000110111101101001010100010100100100001011010001100100000110011100000011101000010101010111000 _4# -b010010000010011001001 !5# -b010100000110001000011 "5# -b101000000000001111110 #5# -b101010111101010101100 $5# -b001110100001010111110 %5# -b001010000000101101101 &5# -b000111100001100011100 '5# -b001110010101110000001 (5# -b010100101000110011011 )5# -b010000101001000000111 *5# -b110110111010110101010 +5# -b100100011000001100101 ,5# -b110010001101000010010 -5# -b001011100000011101011 .5# -b101000011110011101101 /5# -b110111100110000111110 05# -b1000010010011011 C6# -b0011110111011101 K6# -b0100011111001101 S6# -b1011001000100011 [6# -b0101010001100100 c6# -b1100100001101100 k6# -b0000001010110101 s6# -b0001001000001101 {6# -b1110000101100010 %7# -b0010101100001100 -7# -b0011101101100110 57# -b1110001011001000 =7# -b1010111001100101 E7# -b0110010001001100 M7# -b1001101110001001 U7# -b0101110100100111 ]7# -b1000010100111101 e7# -b0101100111101111 m7# -b01101111111000100101000111010011 u7# -b00000010001101100010100001001010 }7# -b11000011000000110101000001001101101110110100001010001011111111011101010101110000110000100001010110110101011011101100101011000110100000100011100100100110111100011101001 '8# -b1000000100000110110011000000010001000000001010000011111100011000100111010011100010100101100010010110011011101001001010110000000100011111111001001110001101010011011101100011001010010010011100111101110110000001001100101010010110001011100000000111011111111010001111101101111011111001110100100011001001101001110001101110 W8# -b1111100100100011010011011001011000111100101000001000010100111000111101011110101100010 I9# -b1110011001101011011111010001001110010010000101110110100000011111101111010111110110100 L9# -b0101010000011001100001010001100001010110001000111010011011111101111100011111101011101 O9# -b0100001100111111101100001110011101000011001000010101010000101010010111001100111111010 R9# -b1110100000110001001100011111111101001111010010101100110110011000101101100101001001011 U9# -b0101001010111011010110100110011011010011011001001110110011000100000100011110101111100 X9# -b1110010010001011101110011101101111110011101011111001110000110000010000111010111101101 [9# -b0111001010010000000011010110101010010011000111111101110100001101010010100011111111110 ^9# -b0001011101101010101100101100011111111111101101000111011001110111010000111101101101001 a9# -b1101101100101001100000101111011100100000110101000101001111101001100101110110010010100 d9# -b0100011100100000000000100110010101101110111101101111100110101111101000011111101100011 g9# -b1000100010001110101101110100101100100110100111011010110111010101100111000110100001110 j9# -b0111000010010011011000010100010011000010000000010110010011011010010001011110110001111 m9# -b0101010000110000101010011000010100101001100010011101101000000011001101110110101000011 p9# -b0001111111000110101111100000100101010100110111011111111110101100100110011001110110101 s9# -b1000100100000100010011100100001111001110001001010000110101011100011010100001011111011 v9# -b1011111101110110010110111010101110100000111110101100111111101001100011111101100110000011011111111111000011100000100000100100101001010100011000010001110011011011111101011101010111010001011110010011110100010000011100010010100100011100011001001101000000001101000101010111100010110001100001001011001010000001000000011010101011111110000111011010010000010100100011001001101110101101010110111100100100100010 Q=# -b1000001110001001 [># -b1011111000010001 c># -b0011 k># -b0000 s># -b0000 {># -b01010 %?# -1-?# -b0001 5?# -b0111111110000111010001101001010110000000010000110010110101100000100000000100 =?# -b0101111111001101000000001000100011011011100000000100010110000111010110011001 @?# -b0101101011000110010100101100100100100111011011000101100111101000001111010101 C?# -b0110000111000001000110111111110001011001101110100100101001101110110001110000 F?# -b0000000100001110010111001110110100000101011011111000011000100011001011010101 I?# -b1110111110010010111001100111011101111110111110101110001010101100011101011111 L?# -b1110001000111111011010011000110111101110100011010000000111100100011101001010 O?# -b0001011011110111010010110011100111100010100101010000001001011100101001000111 R?# -b1100001010011010111011110110100110000110001000100010100001011110001000111010 AA# -b1110111000010001100000000110100100010101001111010000001101110110000110010001 YA# -b010 qA# -b010 yA# -b011 #B# -1+B# -b101 3B# -b1110100011001000110000001110110001010110111101110011011000000110010111111111110000000000000101110011000001111000010111010110010001001111101111011010010110101111101111101000010000111001100001001001011 ;B# -b0111110110000101011011001100010001011011010111000111001010011011011000000010011010011010010011101111110100111100010010101011100110101011101000110100001110010011000111001011000111010010001000101101110 BB# -b1001111010101100111100011000001100110001010001101001101111000001100100010100000100101100010000000101001011111110011000110001011111111111101111101001011011000101110011010101000001010101011101101100000 IB# -b1010000101101110110111000001010111011000001011111111110011010001000011000010100001100111010101110001110101110101100101000011110111110100011101101100101110010110110000010011100111000010111100000100011 PB# -b1000001110000010110110000110011101001001101010010000001110100111000111100101010110010100000111011010101111101001101100111100011000100000110010000110111001000111111000111111100111010101111000100000111 _D# -b1000010000110111101100101111000100000000010100101010101001101000001110100110001010011011010011000010110101000010010100010011100101010101000001011000001110111010101001010011111110100101111001011001101 9E# -b11 qE# -b10 yE# -b01 #F# -1+F# -13F# -1;F# -1CF# -0KF# -1SF# -b010001110001010100101110100010001100000001 [F# -0kF# -1sF# -b01 {F# -b0100100000111101001001101 %G# -b10 -G# -b11111001010001100001101010000011 5G# -b101001001100000100011101010001110011011000 =G# -b0111 MG# -1UG# -0]G# -b00 eG# -b001010101011000000000111000101110100010010 mG# -1}G# -b1010 'H# -0/H# -07H# -b10 ?H# -b11010101011011101001111101110000 GH# -b10011000010011110000111001110000 OH# -b01000111100100111010011111100000001000010101001011011101111000111010111000101110111001100111110100110010111110101101010111011011 WH# -0wH# -1!I# -b0101011011010000 )I# -b0010101010110000000001110001011101000100101101000 1I# -b000000110111011001100 AI# -0II# -0QI# -0YI# -0aI# -0iI# -0qI# -1yI# -0#J# -1+J# -13J# -0;J# -b0000001101110110011001100 CJ# -b0000000111000101110100010010 KJ# -0SJ# -b01101 [J# -b010010100100001110100111011111010101101100011000001000 cJ# -b001110011001101001101001011011100001000010000000000111 eJ# -b100010111010111000100100011101101101111110101110111111 gJ# -b000001001010100000100111011101011110110111100101011011 iJ# -b100100110101101000000111110100100001101001111110111011 kJ# -b110110001100000011011000000110010001011110100000111010 mJ# -b100001111110001101101001001001111101111010010010100100 oJ# -b110000011100100001101001000001011110010010011010100000 qJ# -b011101101111011001000101010010001000111111011001101011 sJ# -b001010111011000001011100001110010111100011110000111011 uJ# -b010001101000110010111000011010001010111111110111101100 wJ# -b001101100101000100111101111010111101101100101101001111 yJ# -b011100011010110010111011001010110001000001111100100111 {J# -b101110010110111001100100111100111100000001100001000100 }J# -b010100010010001110011110100101010111101001100100110000 !K# -b001011111100110001100101100111010101000000001100000000 #K# -b010111101000111111001110010001111010000110000010011101 IM# -b001101110100110110100010101101001101110100101101111101 YM# -b1001 iM# -b0010 qM# -b1010 yM# -1#N# -b01001 +N# -b001100000010010111110011010101000000001100100010101111000010001011100110010001000110111101110010110011010000111101000100111001111011111100010000101001000 3N# -b010011111011010011100100001111001000011010111111010111001001001010100101000111111000110001110000110011001100100100001110000100000001011001010000110000010 8N# -b100111011100010011111011111111100001010111101101000111111101011100001100111110101101011001101010101011100011001010100100011000110111011010000001100100110 =N# -b111010000010110110011011000000110110000100111100000111110011110001010111000011010101011100001010000010001001010000100010100000000010110001011111000001111 BN# -b110010101001010101101111100011101001100001101001000110111011000011010100010010100000100111110110011100111100011110011111100100101010100101111001100001001 GN# -b101111000011101101010001001001110100110111001000100101110100001000000110001111001011100100011001010100000001001001011111110110000110000011010010011111001 LN# -b000000000101001010110011100100100101001010000010101101011101110100100000101010001110011011000011000110010110011100001101111000000001001010101010001110010 QN# -b101011001111001000011000010010011000110001111111100110111100001100100011000010100010111001111101100100100010101101011011000010001110010010010111101101111 VN# -b011100101100011001001100000000110010100111100111101010111100101010010011000011100000100000011011010001010101001101000100000100010111100010100001011011101 [N# -b011001111000000010000010110101000010101001101111011101000010111101110001001111101110000010111111110001010011010101100111011010000001011100101011000000100 `N# -b101110011101001001100111001110011000011000001100110000001000101010110001001010110100101111100111010101010010110111001010101001000010101111100001101100011 eN# -b101011010001011100101011101001110100010100001000010111011100010011111111110000111101000100000010110111110010111100111110001111011110000001011011011100000 jN# -b001100111000110111001111100001111110110000100111110110001011100000001000010000100011010000010010001100010111111000011001111111001001101101100111100001001 oN# -b100110111110010001111110101101001101011010011111001001001010010101000101001000001100010100100101110001111101010111101100110010000110111001100101101010111 tN# -b110001100100111000101010111101110010110010011101110111000010010110111001100000110100110100001011011101010100001101011101101011001111000111100111110001000 yN# -b011000010001001111010001001110100011011001111000101011111010100010000010000011011101111011110100010110111011011110100001000010111011000110011010101110011 ~N# -b000110011001110011010011111010100111011011110010111100011010000101111110000000101110010100001111100000010111011111101010000011110001111000000001101100100 !U# -b101000011110101000101100100001100010001000110001111111000101101100100000111111100101010001101011001111000101101111010110100101101111100100001101010011110 IU# -b1110 qU# -b1101 yU# -b0100 #V# -0+V# -b0110 3V# -b0110 ;V# -b0011010011111001 CV# -b100111010111011101101111110011001000001100101001111101110111000101111111000000100111010001010011001010000111011011100001 KV# -b00001111111100000000010111101111000111100001010001100100111110111010111101101101000110000010010110000100000000111100111000100000 kV# -0-W# -05W# -b0001 =W# -b00110110001110001000011001011010111110001010111101011111111000001110011000001110100010111110111010010100111010101001000101011000001011010000001110101110111011001110100101011000111110000100010100101100001001000111011110110101001010100101100011101101101010100110001111001010111100000001111011010010011100100001100011 EW# -b01100010000000100010101110001101001001001101010001010110101001010100010001111101111100110011110100111001010111001011100000101000011011111010110010000010000110010000010110110000010000001100010100101101100100110110001011111000101110101001111110010000100000101001010010110100001110011000010011001110100101100110011011 OW# -b11001111010111110111011000101110001101100111010101111100100100000010111011011001001110010111100100011001001101001000011101001001000001000101100010110101010110000110100111011010101001100001011110110110011000010100011010000111001001100101111010001001011010111000010110111001001101111011110111011001000100010111000000 YW# -b01100111101010101110001111110111111101010110111011010100111010110110100011010100001011011000110010010101010111110010001001101011011100010110100111111111000101110110101111011111111011011110010100011111101110101111001100101101000000111000111010110100101000100100001001000000101011110110100010000110000101011000101010 cW# -b00100110111111011110000001100010100001110001111011010001000011010001101110100111000101110010011000111001010000110111101001111110001110000101100001111100011011111011100001101110101001100000101100001110011111111010001010000100111110010001100101110010110101101111111100001011011001010011001101101101110110011001100101 mW# -b10111100100100100011010100011101100010100000111111000010110101110101000011101001100110110111000110100011011110101101111001001100011010111110100100111010110011110110011101110111100000101100111111110010000000101111110101111101000011110101000100101100101100111000011110011010100101100111100110100100111000100111110010 wW# -b00100000110111100100001001000011010000101011110001101110001001110000000101000001110001101001111111001010000001101000110110010111111100000010000110101010011010000111001111010110110000110010010011111101110000110000101010101110011111100001011011011111111011000011111011000110111111011000111101110000011110100100100100 #X# -b11111110010001000100101010110011001011110111001100011000101100001100101010000001100001101111001011011111111111111110111110000100001010101001111000111000100010001100100111001101100101111100111100101001001110100010111100111000010000001111000011111110101110111000011001000001110110000110011000010001000111010000111100 -X# -b00111111010110111011001110101110100110000000100111111010011110101011001010111101101000011000010111001110001000000010001010100011011110010100000010000110101100110110010110001011110110010101001001100101011001010000011000100011110011000011011001110100000010101100110101010111110111011010001011111001000110101100000001 3^# -b11001000111111101110101110011110010100000001101100101010101010010010101100110011000011000101101111010010100110111010010010010110000011110100110010011110100001010001100010101011010111111111000001111111001010100111100010000000010011011110011010110000011010100110100011111010101100000110010010010000010100000100110010 %_# -b001 u_# -b101 }_# -b101 '`# -1/`# -b00010101100100000000110000010010110001010101110010101111010000100110111100111100101010110110001110011001011001101101011001000111010001000010000101100111001001100010110000100001011011100001001001010101011000110111010000100001100011001101101010 7`# -b01000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 w`# -b00000001010011111011100000111011011111011101011011010011100000001001101001100001101010011001010100111010110001111001111010101010 9a# -b01101001000100001001000000010001001001110111010111010101000100111000011010000001111011101101100001110101000101010100111010010011 Ya# -b10100101010110000110100100101101010100011110111001100000010110011110010001111011110011011101110000111111110101010110010000010110 ya# -b01001110000101001100000110111111001000010100000011101111000000100110101111111100110001110111001001110100101000001111101001111010 ;b# -b10010000111111110010111011100011100011100011000001010001101010101111011011111011011010110110011011000000101011001000100001110001 [b# -b01000010001101111110010010101011111001101010010110010000000010001000010110111111110010001110000110111100001111000011010010101010 {b# -b00101111001011100001110100001101001010001101111101011011011110101111111101011110000101101000001100011100111100110000011010000001 =c# -b00111000001110110100111000010000110110111011011101001101100111010011001011001011111110111101000010011111111101101101100000111011 ]c# -b11111100011011001001100010010000001000110010100100011100110111000011010110101001110101101001110011110001110110001001011100100110 }c# -b01001110010100110001111100010001000101101010110100100010111010101001101001100110111011011100010101010111010100000011111101010010 ?d# -b11100101000101010010101100101000001001100011101100111000010110010011101110100100010001100010011010011110001111011101000000101101 _d# -b11011011000110001110001110001110101110100011010111011101111010011000100101000010001010110110111000000010111001001111111110100110 !e# -b10101001010110110001111010010100010111000010101111101010110111100001001000111011010101010010001001000000110100000101110010010010 Ae# -b01110111110010100001111100011100010010101011110100010110110101110111000001011101010111110101010000101101111111100010111100000000 ae# -b00101111011111000011100101111011011001000100000001111101100000010001010010111001100101011010101011111000000111010110001011011110 #f# -b001101110110100011110 Cf# -b110001000011101011011 Df# -b011101101110010111000 Ef# -b100000000110010010000 Ff# -b100001111101110110110 Gf# -b011000110001110000000 Hf# -b010111010011110110100 If# -b110000011010110000011 Jf# -b111111100111001100011 Kf# -b100111010100111010011 Lf# -b110011110100011100010 Mf# -b111000110010010011100 Nf# -b001010011000000000011 Of# -b010011111000110001001 Pf# -b000000011010101000111 Qf# -b101110111111010101101 Rf# -b1000111100100010 eg# -b1100110001101001 mg# -b0111101110011100 ug# -b1111011101000100 }g# -b0010001110110110 'h# -b1101100100111101 /h# -b0000101000111110 7h# -b0001111110111100 ?h# -b1010100010100110 Gh# -b1111101000111100 Oh# -b0110010011001010 Wh# -b0100101000100110 _h# -b1000110101111001 gh# -b1010100000111000 oh# -b0100010010001101 wh# -b1000010110001101 !i# -b0011101001110001 )i# -b0101001111000100 1i# -b10000010001100101100011110110010 9i# -b00000110010101111111100001011100 Ai# -b01111010101000100010110101100000000100111001000010001101111000111001110101110111111101001111001001111000001101010001001111111001000101010101111110100111000101010110111 Ii# -b0010000000011110011100101001101100101101010101101110100111110111000010011000010011110000111001110000010001111001001110100111111000000010000101010010110111011110001110101110001011101110011001111101001100101111101011010101110110110000001101110110011000101010110110100000010101010110000000001110001011101000100101101000 yi# -b0101110011110000110010000101010011001010000110010111100011100001101010110001101001101 kj# -b1010001100110101111110000100011000010011100110000100011010111111011001101000011011001 nj# -b0110111000100011101010111100000110011101101110101110001110100010010100010101110011001 qj# -b1100001010100001111100000001010100010000011100101000001010000111001000101111100101101 tj# -b1111100101000110000110101000001101101001001100000100011101010001110011011000101111010 wj# -b0100001011111000100000010100011000000011000100110110011000100111101001011111011001011 zj# -b0011000010011000011110100110011000111001011100010000001110000001110110000011111011011 }j# -b0110101100110100110110100101111010010110001101000101110101010000010110111011110101101 "k# -b1000000110111010101100111011001111001110111100001100100101001111110011100110101011001 %k# -b1111111010011011101010101000000010110100001010011110111100110011010111000001110110010 (k# -b0101011010100101001101001101011000001111000001011101010011011100000000100000110000011 +k# -b1010101000110011101101000100001000101010110101101001101111001111001011110101110101001 .k# -b1000001101001010110010000111110001100101000000001111110110111101110110110100110111111 1k# -b0110000101110001011101001010001000101101011000010101111100100001101111100101111110110 4k# -b1100010111001000001000111001001100111101111010010110011011110100001100110011101001011 7k# -b1100101010010101011010010110100111100100001100000100110010101011100011111110110111100 :k# -b0000010100110000011011001010011001000111010010011110011011011101111001101101000000110110110000011011000101000101100101010011110010010100010101000101111110100010100110101111101011010011111010101000111101100110110011100000011100101000110010011101000110011011100001100101100110101001000001111010010011011111111111011101011010001100101011111001101001100001000010100111110000011010010000000111001011110000 sn# -b1100011011001011 }o# -b0000111100000111 'p# -b0100 /p# -b0000 7p# -b1011 ?p# -b01111 Gp# -1Op# -b0100 Wp# -b0101100100110111110000010111110000100101001000001011000100000100110101110010 _p# -b0011100100010100010010111011001110000010101001011101011100000011000001111101 bp# -b0111100010001111100000011010011000011100111001000100000000100000011001001100 ep# -b0010111110000111010001100101011101100100001010001001100100000100100100000101 hp# -b1111001100110001011100001110000100101111100011110011100111011011011001011110 kp# -b1010110111110110000000111011101010101100111001010111110000011110001100010100 np# -b0101111111110001001010001110111001110000101001110101011000100101100010001110 qp# -b1111101011000100001001101100101101011011111110000000100010000111001101001001 tp# -b1001010110111000100110101100110111010111001000101001100011100100100011101010 cr# -b0000111010101100010100000010001010101000001011011010000011111011010100001101 {r# -b011 5s# -b110 =s# -b000 Es# -1Ms# -b010 Us# -b0001111110010100011010001111000010101000000101000101000110111010011011101110001101001001111001000010010101111001011110101110100110110100000010010011100000011000110110100110001100011010100101101101111 ]s# -b0100001000010110011100011010001100111110110100011111000010001101001101101110101111010110001111001010111000101111011111001010100011010100100111001111001000100100101101111101010001110011101100100111001 ds# -b1010001100100011100111010110010001000111000111010010000100001001001100111010000101111101000000110010110000000011001011010110111100100010000010001100001001000000001001111000001101001011110010110011111 ks# -b0100100111011000111110111010010100100001111111100001100110110000011010110110100100111101100110101011111000110011100010000110110110010011110111010011001000111011000010101010110000000000011101101100110 rs# -b1110111110100000010011101011100010101101010000101110110010000001100111000100000010100000010101000100010100000100111000101111010010000100100110001100010000001011010001101101110101110010010011100001111 #v# -b1010110010110111010001100111110100010000101110011100110100101100111111111010011110011100001001100011011010100010110001011100111110110111001111000101010011100101101110000011011110101010111110000101010 [v# -b10 5w# -b10 =w# -b00 Ew# -1Mw# -1Uw# -0]w# -0ew# -0mw# -0uw# -b011011000001111111101000000111100011011100 }w# -0/x# -17x# -b11 ?x# -b1001010101101000110101010 Gx# -b01 Ox# -b00111010001010110110101101010011 Wx# -b011010111111001101111001010001110001010100 _x# -b0001 ox# -1wx# -1!y# -b01 )y# -b001110101100011011010100011010111001111010 1y# -0Ay# -b0101 Iy# -0Qy# -0Yy# -b01 ay# -b00000001000011111010101100001110 iy# -b11101111100111101111110111000011 qy# -b00110001101010011010000011000000011000010110111111111001001001011000000010000011010011101100111101100011100011000001011111100001 yy# -1;z# -1Cz# -b0000010001011110 Kz# -b0011101011000110110101000110101110011110100010101 Sz# -b011101100110000110000 cz# -0kz# -1sz# -1{z# -1%{# -1-{# -15{# -1={# -1E{# -0M{# -1U{# -1]{# -b0111011001100001100000001 e{# -b1011010100011010111001111010 m{# -0u{# -b11001 }{# -b010011101000101001001101101101100100010110111000101000 '|# -b101001100101111101001001010111110010110010101011000110 )|# -b100010111001111010010011101001001011011110000001101000 +|# -b111011000111110001100001000110111101001101111000010010 -|# -b110010100000110011110111001110111100010110111111100001 /|# -b011010001010110010110000100110100011000011001001111100 1|# -b110100101011011000111101111111010100101111111101101000 3|# -b100000100110111101001000101101100000111011110101010100 5|# -b110010010010101111000101110010000111101000011001010010 7|# -b000110100011100000010001101100001000111001111111110000 9|# -b111110001010010001100111111101001000101001011111001000 ;|# -b110101011000001010101100010110111011001000101001110011 =|# -b101001010011001001110000011000010110101111100000100011 ?|# -b000000000101011001011011101101010101000000010011001011 A|# -b010110001010100011000011100000111001101101100110111101 C|# -b011000110111010000101111110100001101101111111001010001 E|# -b111110110100000111101101011010110100100001111110010111 k~# -b110101110111110000100100001101000010100010010010010011 {~# -b0101 -!$ -b1101 5!$ -b1111 =!$ -0E!$ -b01110 M!$ -b100101111011111100110001000000100010010011111000000010011011011110101100110001111001001110001100100101110010101000100010111111001100100111110010110000010 U!$ -b000110000110110110010010100110101001001011111001000001011011111000011000010111000010100100011000101100100110101010110010010111010110000011000110001101100 Z!$ -b100101111100011100111001000000111110010000110101011001010111011001010100000110000110010001110000100010000001010001100100110100010000010010000101110000010 _!$ -b100101010010111111111011100011100100001010010111000111111100111101101100001110011010011101011100001111001000000110011100000101110101110011011100011100101 d!$ -b100111100100101111110000110100100001101101101110000111001111011001101001101111000000001110011110100011100101111001001100110101010110101101100101110111000 i!$ -b101100001011011111000011101110010000010101100110100101100101100110111110111100000011100000101100000001101000001111100101011100101100000111111000000001010 n!$ -b100110000111101101001100111100001101011010101101000111100100111000101000101111010101110010010000011011101011111100101011001000010000111101101110010111111 s!$ -b110000001010110010111101101011000000011101100010100101011011110010101011010101101001001101111110111000011000001010101101100100001101011111110110111110100 x!$ -b010100111011111000010101000101010100001110101100111010101111100010010001101100100001011111101000000101110110000000001011110010010101101001000101011000000 }!$ -b001000100000010101110111010110001101101001011110111011100000010100111110111001010001101111001000000101001011010111010000000010110110010101000001110011011 $"$ -b011011100100000000111101101001001101001101010001111100010110001011011111111001110100011001000100111111100100010100010110001001000110101110100111101110101 )"$ -b000011101010011111011100011000011010100011001111101111110111011110011101101011000110001010101000100011110100111110100010001111000011101011000010011010111 ."$ -b110111110011101111111111110101100000110101001110000001000001111010001110001000111000001010001011100000100001001010101011100101111001010001101100000111010 3"$ -b111000001100111100100000111111000001010011101011100010110010111001001000010111010000001010000001011001100100001111011100110111001110101100110110011001000 8"$ -b000101000011011011011111101101101000010100101101001011000001110111011001110101100101000001100000010110101101001000010110100001110010110011101111101010100 ="$ -b010001110001111101111111000101100110100011010010000110010111111100111110111001111001000001100110100001000011110011100101110001000011001100001110101111110 B"$ -b110100001000000101110000100001101000010100110011100011011101001100111101101010101001001001100111110010110010010001101110101100001111110010111101111101101 C($ -b110110111010000000100001011010111110010000100010100100001111110000011001000100011111111101000001110111011011000001010000110100001110011000110111100110101 k($ -b0000 5)$ -b0001 =)$ -b1010 E)$ -1M)$ -b1101 U)$ -b1111 ])$ -b1000100000101110 e)$ -b100011001011110000010100001011101100101100110101100011010010010001001000000111101101001010101111000100100010000100110010 m)$ -b10010110001100110000000000111001111101110001100110000001011000000101000100000011001011011111011100000111001110110000100101011101 /*$ -0O*$ -0W*$ -b0100 _*$ -b10111100011001001011101010000011001111100100111101111000101100001010000011101110101001011001000010001100100011101111010111001110111111000001111001110011101100010010010000111001001110010110010000100100110111100000110000111111000011011011110001010100111100010111001001000011101111100111100011110001111010000100000001 g*$ -b00100100101101001110011011000011110100111001001111100001110101011010001010011000101010101100100110111010110100101101001110010010000000000010110011110101010100100000010100010000001011110101000011101101000111001100000101101000011101110011010110111010000111010001100100111010111101011000010101001100011111111011111010 q*$ -b01111000111111110101110110000101110111101111110101000000000110110101101100101110111000101011011100000110011111101010001100111000011010101001101000011100010100100001000111010101010101011011111101111110000011001001110001101101001010111100111000011010010001100101111011010010111100100010000111010000100001111110100110 {*$ -b00001010011010011101000111001010111111011000011110111101100001110100101000111001110011000110010110110011000010000000001001010100000010100010010011110110111101001000110011110110110111000100011000011111000110111000010101110000011010100101101111111101011011011110001010100100111111001101011010011111011010010110100101 '+$ -b00001011011011111011101000000001000101110010000101010100001100010000110010001000001010011110001010111010000100110011001110000110101001011101000100000100011001100011101100001001001001110011110000001010101000010100010110011101101001111111101101101001111110011110110100100010000110111001110110000110100001000101001100 1+$ -b10000101011110011111000011010110001110110111110001101101000101010110010101100101011111100100101100010011000101111100111010111000101110011101001101011101100001001010001001000110111000000100110000111000100111000011111111110001101011101110101101000100111110111000111100010111101001010011011011000111100000111001101101 ;+$ -b10000010011011000011100101101001100100000010001001000011011010011001010111100110101010100100100110000010111111110011010111100000001001011011110011111010111010000001011100011000010011100010000110101000011100001000011100010010111111110010000110100100011100000110100101010011111011000000101000011111111011101111111111 E+$ -b10010011001101100001111001001100101101001100111101010101000011111101001011101010111101100111101101001110111001001101101111010111100101010100111011110100001110011100110000010011000010011010101011001101001001000101100001111010010000101111111001101010001010011010000010111011011011000000110000000100110001111010110100 O+$ -b00110101110011101101110011100010110000111001111101111000111101101000010010011111110110001010011011011101100011101101011111111001110011011011010011010000101011010110100111000101000110110110101101010100011100100010101101010010000001101100101111000100011001011111011110000000001111001010000001110011101010110000000100 U1$ -b00101001010010011000101001001010001011011111000100010011100100100011010010100111000111010000110001001000011011011000100110110111011010011001001000001110010001100100110111000101000000011111110011101001101001101001010110001100011010111001001001101101111000011100001100101101011000110100001101011000000110000011110000 G2$ -b000 93$ -b111 A3$ -b000 I3$ -0Q3$ -b00011011101101101011010011000000100110010000101010100111111100010111100011101101110111010011111110010101110100011110100011011100011001100101111111111110000111100110111101011011101111001101011100010101000101111110001111010100101110101101100111 Y3$ -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 ;4$ -b10010000001111011010011010110010111101100011101010111011111100000101011111101111011101011000011100101000011011101101110000001111 [4$ -b10111010000000000000001110110010000001110101110010101101111001111111001110011111111110010110110010100010011100000110011101001011 {4$ -b11110111110110100011110111110101011101111001000010001111101101001000110000111011011111100110011011001100101010101111000111000110 =5$ -b10110101001000101001110000001011101001001010011001000110111111110000100111110001111111000101110111111001001101101100000010101010 ]5$ -b01011001111010100010110000110110110111011000010011010110001110101000101010001101100011110111110000000010101110000001000010001111 }5$ -b11111100001111110010111100100000010110111110100110100100000110010011110100100010101001000100000100100111110101101100001100001010 ?6$ -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 _6$ -b01110010011011111111011001011110011001011110111011101111111100011100111001110111111011011110101101011001100111111101011011001010 !7$ -b11011101001001001100100100001001101100001110101111110010001001010100010011010010000010100110100101010011101101011000010110100111 A7$ -b10010101010010111000000000001000100101000000011110001101000000111111011010101110000101011011111100010010001000010110010101000110 a7$ -b10000001011011011001101010011001101011101100001011110001000110010110110011110011101100110011010001011101100110110110100011001110 #8$ -b00001110101100100110010110111100110111001100011010111110001100100001001000100100101110100111011110011011100111001011010100100100 C8$ -b01000100101100010000011010111011010010000110101000111001101101001010000001101011111011101111110010101001010010000111010011000101 c8$ -b01100111011100001001011000101011111100101001000111111110010001011010101011010110110011111100001110000010100100100010000100100111 %9$ -b11000010001101100011101100100100101100101100110110110111110101000000001011100001111010000100010010111100101100101011011011000010 E9$ -b111010101110101111010 e9$ -b101111011110001010011 f9$ -b001101110000101101101 g9$ -b000011111101000110100 h9$ -b001010010010000101111 i9$ -b100010110101101010010 j9$ -b110111101111110101000 k9$ -b011111101011001000000 l9$ -b111010111010011111101 m9$ -b010101000011111011000 n9$ -b000011010010111101001 o9$ -b101100110001011011010 p9$ -b110101101110101100110 q9$ -b000011010001011100111 r9$ -b100000101111001101001 s9$ -b010111101101001111001 t9$ -b1011010000010111 );$ -b1101011111001000 1;$ -b0100000111000010 9;$ -b0100111011100100 A;$ -b0000111101101011 I;$ -b0110000100000000 Q;$ -b1110101101101010 Y;$ -b0111000110111001 a;$ -b1110100101010110 i;$ -b1001011101000100 q;$ -b0101100010110011 y;$ -b0100100111000000 #<$ -b0100111110001100 +<$ -b1010100000000110 3<$ -b1110100101110101 ;<$ -b0010101011110111 C<$ -b0101000110111010 K<$ -b1101000000110100 S<$ -b01000010110010010100010000110001 [<$ -b01101110110010100001110001010000 c<$ -b11010011100000101001001000000111000110100101010000111100001110000001111110100001111101000011110101001111010101100011001010101100111110000111000000001100100101110000100 k<$ -b1111110000110011010111011100100001010000000100001111101010110000111011101111100111101111110111000011001100011010100110100000110000000110000101101111111110010010010110000000100000110100111011001111011000111000110000010111111000010111011001100001100001100000100010111100011101011000110110101000110101110011110100010101 ==$ -b1101101000100100111101011110101010000100011101111111101010010110101000101101110000000 />$ -b0011101000101011011010110101001111011010111111001101111001010001110001010100000010111 2>$ -b0101101000000011101001111101001001010101000111101010101111011111100011000110111010110 5>$ -b0010001110100101011000100110010001001111000011111000000010010101011000011001011010000 8>$ -b1000100011001000101101010001111011111101110010100101101110111010111001100110101000011 ;>$ -b1001100001110001001011011010101000100111110001000111000101011010100010111011101101001 >>$ -b1100111011111001101110000011111110010100010010010101001001001000110101110110110110101 A>$ -b1101101011110100000001111111110100110000101100011000010100001000110101010111110101011 D>$ -b0101110001100000100110101111001001001010011001101001010000100010110110001111100000101 G>$ -b0100011101100001011101011010011101011101100110011100100111111011110001111010010000101 J>$ -b1001101111110010100001100011011101110010111000110110010011001010010000000110101101100 M>$ -b0100111101011101101010101001010100000010011011110000100011011011000000110100011001010 P>$ -b0101001000101001100011011100101000010001101100101110011111110010100101001101110000011 S>$ -b1010011001100010101010001010101010010001110100001111010001010111001111101000110011011 V>$ -b1101101111100010010111010111110001011000000110101000010100010000011110000011101000111 Y>$ -b1100111001010110000010101110001100010010101000011101000001001111000100011010110110001 \>$ -b1111111011111011000010001010000111011100101001110010001001100100010100111010000111110010101110010011011001110101111011000100001111010010010110001010101000110100000011110010111001111000111011010001111101010110100101001101011011011100101111001000010001111010011011010010110010011000101101011110110010000011001011110101001111011100110000011010110110100110010101011010001101010101101001101100110100110100 7B$ -b1001011100000100 AC$ -b1110101101000101 IC$ -b0001 QC$ -b1100 YC$ -b1101 aC$ -b11011 iC$ -1qC$ -b0011 yC$ -b0010100000001101010010000010100101000101111010101010100111001100110110000011 #D$ -b0100110000111010101010001101110111101110101011010111011101000011010001001100 &D$ -b1011001110011011101110111100110001101010010101010001011001110100100101001001 )D$ -b1011010100000010001110101100011111010001000110111001110111010001010111010110 ,D$ -b1010100011000011010011000110001111101000010001010010110101100100010111111001 /D$ -b0111001000101110111000001001001110111011110001111110010111110011000101000011 2D$ -b1001101110110001110101100000110110000001110011101101110011111010001100000111 5D$ -b1011101010000000100101010100000010001110111111011101001111011111011011110010 8D$ -b0001011001010111110000110100001000011100101111111101101110010111100001010011 'F$ -b1000001100110010011110100010000111011000001100001110010110011011111100111101 ?F$ -b110 WF$ -b111 _F$ -b110 gF$ -0oF$ -b000 wF$ -b1110011000001101001001100010110001010011011101001000111011100100011010010011000100001010101010011110101011111100001010101011111100101110100010101101001011000000001110100110101100011010001110101011111 !G$ -b1001010110011001111011101101010100000001010011001111101010000100110011101100010110010010001100111001100100110011111011110010011000001011000010001100001001001001001111011010111010110110110000110000101 (G$ -b1111111110100101000000000110100010110111101101011001011110110111111010100001101010001010111011001110110100111000011101001010111101000110111100111111011111101010100011000011010001000011110100010001001 /G$ -b0011010110111110010010000101000101001101111010000110000011011100111100100010110011000010011011011001110111111100000111010000111111000101101101001100001011010010111110100100111101010110110001100000101 6G$ -b0011000000010010100010010010011110111110011011100101110001000010010111011101000111011010001011011000101011001110111010001100110111001000001010111000110111101100000111011110101100110000001011110010011 EI$ -b1111101000001111101101011100110011110101110100111000110111001010101111110000100010011010001000101000000001010000001010110110110101100000100001000110111100001010000101000111101111000100100110010000010 }I$ -b11 WJ$ -b11 _J$ -b10 gJ$ -0oJ$ -1wJ$ -1!K$ -0)K$ -11K$ -19K$ -b111110111100001101011110110001101101100101 AK$ -0QK$ -1YK$ -b10 aK$ -b1100000000111100111100101 iK$ -b10 qK$ -b00111100100101010101011001101111 yK$ -b110011111110100101011010011111010101111111 #L$ -b1010 3L$ -0;L$ -1CL$ -b11 KL$ -b001000110101001001001001010111100010011001 SL$ -1cL$ -b1100 kL$ -1sL$ -1{L$ -b01 %M$ -b01110011000111101111100100100001 -M$ -b00100001010101001011000100001011 5M$ -b10111010011000110000110000100011101011011100110110011100011111010101111110011111001011001110001000001100111111010011000000101010 =M$ -0]M$ -1eM$ -b1110101010111100 mM$ -b0010001101010010010010010101111000100110011110011 uM$ -b110110010100011101011 'N$ -0/N$ -17N$ -0?N$ -0GN$ -1ON$ -1WN$ -0_N$ -1gN$ -0oN$ -1wN$ -0!O$ -b1101100101000111010111011 )O$ -b1001001001010111100010011001 1O$ -09O$ -b00111 AO$ -b101110101100101110010111100011000100101000011100010101 IO$ -b101011011111010111011101000011100011010010111100110100 KO$ -b111110110110100011010110110000011110010110010111000011 MO$ -b010101100110000110000000001011011000100011100101010011 OO$ -b011001111000011100111000100000101010011010111011101111 QO$ -b000111001110100000111001010010001010010001101111000110 SO$ -b010111100001101111100010011001101100111000111011101110 UO$ -b101110001101000011100001100111000111110101110010111110 WO$ -b001010101011011001011010000111001011000110100111011110 YO$ -b101101111110101100010001010100100111001100001001110000 [O$ -b011010101001100100101001010001010100100001010100011000 ]O$ -b001100111110011010101000010110010001111100001000101100 _O$ -b100010011001011110101001101010100110000110100100110110 aO$ -b010011101101001000011001101111000011100111111111000101 cO$ -b000111111000001100000011110010001111101110001001101011 eO$ -b001001000100011011111100101111100101111101110100001110 gO$ -b110100111000001110100100001111011110001110110101010100 /R$ -b101000011010000101011001011000011110101011001111000110 ?R$ -b1000 OR$ -b1000 WR$ -b1011 _R$ -1gR$ -b11010 oR$ -b110011100010110100011000111001011001101110110000101110111111011101001111000110101001011101001011001001111100100000001000110001100111000110000110001011110 wR$ -b000010110111000011011010010000000100001100110000100111111010010000010000001011011110010110100000101010000011011000111001101100111100011001011101100111100 |R$ -b101010110010101010010110011110101001001101100011110110011010101101110010000111001111011111000011011010011101100000110010001011000110110111001010010001011 #S$ -b110110011100110100010100110100101110100010010101111010010011100111000111000001011001101010101100101010000000110000110000000000000110011000101010010111111 (S$ -b110011100101011110101000000010110100000101111000110100000110001101100101111010001001001100101110111011101010101100001011010011001011001001010011001100000 -S$ -b000000111111100000011011011100001110100100011110111010101010011110100110110011001011110110101110010011000011011100010100101110010111010100100111001111100 2S$ -b000001110001010001010011000001100110011011101010110010001101001010100111000110001100010110011111110001111101110000110100010101011111000010111111011111101 7S$ -b000000001100111000111111110111111001010000101100010000110100011011110110101011000111000111010011001110101010010000100101100011000011010000000001110000001 % -b001111011111001110100 K>% -b110110000010010011000 L>% -b110000100101110000111 M>% -b100101111110110000110 N>% -b001100010011101100100 O>% -b101100000011001110100 P>% -b100011111111101011011 Q>% -b111101001101011001110 R>% -b110111001001000001101 S>% -b000011110100101101111 T>% -b110011010001101100011 U>% -b011111100101100101111 V>% -b010100010111000110111 W>% -b101111111010111010001 X>% -b010100111010101001110 Y>% -b000011101010100010000 Z>% -b1111011001000110 m?% -b1000110110100100 u?% -b0101110111101000 }?% -b0001110001111011 '@% -b1010000111111010 /@% -b1111010000001101 7@% -b0101110001001100 ?@% -b0110111101001100 G@% -b1010001101010001 O@% -b1110001111100001 W@% -b1100011000010011 _@% -b0111101000110111 g@% -b0001001101000000 o@% -b0100010111011100 w@% -b0010001001010101 !A% -b1110011111100001 )A% -b0110110010111010 1A% -b1101010001111111 9A% -b01110101010000000101100111011100 AA% -b00010000100001010010101011011111 IA% -b00101001100000011000010111101110000100100011110010011001000010101100001101101111010101111111010100001000100100011000111101000001001000001100110101000011110101000011000 QA% -b0111000110001100111111111110111010011010011101011001101101010001011010101100011110010110101000110000110000101110001110010111101001011111110101100000110011000110110100100011011010101110001001000011000101100110011100010101011111000011110111101100010001110110001101100011010100111010100001110101101000000010100001011111 #B% -b0011001000110000100110000000010100101101111010111010110011110011110101101010111010111 sB% -b0111111110001111000001100011000100101101010001001110111000100000000110001010011110010 vB% -b0001100001101000001101010001101100111101100100011011101010100101001100011111001010100 yB% -b0111100000010000010100001010010001100010000111110000000100100101111101101100101110011 |B% -b1110111001111001111101111101001110100011100010101011011011101001101110100000101010111 !C% -b1001111000100011110000000101111101101111110111001001110001101100101110111011010010010 $C% -b1101000110011100010110100001010000101111100110001110110110001001110110010111111000001 'C% -b0111101010011000011010101000101010100100000100111110000011100110110000010110110011110 *C% -b0000011011010010100011101010101010011101000010000001110011111111111101011100000000011 -C% -b0000111010101111010010011011100011111111111101101001110010001100010010010000101000010 0C% -b0110110010110001000111001011011010101010100011111010000100111110111011111110110000101 3C% -b1110110110110010101101000101001111111011110001100001111110001010111001001111011101110 6C% -b0111011001110110111101111110010101010110101000101000011000100100011110101111010100010 9C% -b0000100101001000001101110011010011100000100010110111000010110000000010011100000101011 }% -b0000101111101001001100010011100000111000101001000010110010001010111110110000110001101010110001111100101010111001010001010110011001111110000100111010111011011100100100001100011111001110011111111010110 M!& -b1101100110111110100010000000011101100011011010110000011000110001000001100000110101001101101010001111010011101101111110011101000101011010110111110111110010000000001111011010110000001001110110100001101 '"& -b11 _"& -b00 g"& -b11 o"& -1w"& -0!#& -0)#& -11#& -09#& -1A#& -b000011110101101001110101101001011001110101 I#& -0Y#& -0a#& -b11 i#& -b1000100010010100101101000 q#& -b00 y#& -b10110100110000011111001101001000 #$& -b100101101010000110011011001000011001111110 +$& -b0111 ;$& -0C$& -1K$& -b10 S$& -b101011101111000100011110000010100101001010 [$& -0k$& -b0101 s$& -0{$& -0%%& -b11 -%& -b00101001011000111101000111000011 5%& -b01111111001100000010001111000111 =%& -b00111000100100111011010001111101000111000011111100110110110111000111000011100101110001010000011000101110000101110001111101010101 E%& -1e%& -0m%& -b0111011110111001 u%& -b1010111011110001000111100000101001010010100010110 }%& -b001011101000010110110 /&& -17&& -1?&& -1G&& -0O&& -0W&& -1_&& -1g&& -1o&& -1w&& -0!'& -1)'& -b0010111010000101101101011 1'& -b0100011110000010100101001010 9'& -0A'& -b00101 I'& -b100100010111100001101001011011101010001100111101001111 Q'& -b111110000101010110001000001001100101111000000000011100 S'& -b001111010100110001110101100000110001011001101111000101 U'& -b011001101010000000011010010001111001101010111010010110 W'& -b000011111010001110101100110011000100111100001100010111 Y'& -b011100010100111101111111001011111111101010110111100000 ['& -b001000010111110111100011110110111111100111111010110100 ]'& -b101110111001111110011111111111101010111010000001010001 _'& -b111001101001000101111011100011010010010100001011100000 a'& -b010000011100000010101101010101100100101101110001100101 c'& -b110100100000101101110000100111000010111011111110001111 e'& -b010110101101011011110011010000000100100000001100011101 g'& -b001101110011000111010001100111011100011001000011010011 i'& -b100100111111100111000000111000001000100001100011100001 k'& -b111101000001000001111001111000011000001110011011100100 m'& -b111111100111011110100110001000010000110111111101111100 o'& -b111101101101100000100011011001011011100101010001100000 7*& -b110000010001001010010100101000000100101010111011110100 G*& -b0010 W*& -b0101 _*& -b1110 g*& -1o*& -b11111 w*& -b100000110000100001001110100001010001101010000010001111110010111000111100011110111111111100001011010011111111011110011010110001011010110100011110010011110 !+& -b010010101111100010110101001100111011111011111001101101000010101110101010010100100010101100000101001111100010010010110010010000001100001100110001100101011 &+& -b111000010111010101011111011011111000100110100000000111011100100010001001010100001101001010100000000001110110011111110010100010001001010011011010111110110 ++& -b011101101010100110011010010100111011101100010000111111100111001101110000101000111111000011011100100000111100100101111101001010010011011110010110000010101 0+& -b011000100100000001010110000010010100111001110110011010010111011101000001111010100000101111101010100010101111101101101111011110110001111101110000010101010 5+& -b010000111111101111110111010010101000111111110110101111101101000110011111100001110011010111101111001111011010010000100101011000011110101010111100000001110 :+& -b111100001111111010000101100010101000110101111100010011111010001001101011011001001110100100010111111011011011110110100100101101110101010000100110101011010 ?+& -b110011100010101001111111101011111001101101000001101000100000101011110111001100011101001001010111010101100011111010000101011001100000010010011101111010000 D+& -b000010011110100001100001101000111110001001111110001001010111001110000110001100111000100101110011011011000110111000110101110011001011101100010000000101011 I+& -b000110011001101010001101100110111010100111001001011111101111010100011110101110001001100111100010101011011110011110110100011001010110000101110000010001001 N+& -b110110000110100111111111101000101011001110111001000000110110100101100011000001001100001010111101110110101101011111101000110000000101000100010010100010001 S+& -b001001001100010110100010111111001000000110101001110100011000000010110101011001001101000010011111011100101000001010001001110000100100001100110110010101011 X+& -b101001110110000111100101100001000001011001010001100001110010100111111101101001000011100001001000111110100101110011100010010111011000110100011001010100011 ]+& -b000010101100010101011101100000100011000011001100000001101000000101100110011110001100010100010111010011100001111111001000101010110010001001110000000001101 b+& -b011011111101001011000000100111000000000100111010101101100110001011011001000101000001010110111011111101110100110111100111111101000011110001001011001000111 g+& -b110000010010110100110111110001100010101101000001000110001011001011011001101111101001011010011111110001101100111111100000011010110011000101010000010111001 l+& -b111001110001000101010101110110110110110110011011010011100010010001001001101101010110101101101001110011101011111001111001011110010010001010110000001000100 m1& -b001110100011110010000010001101010111010000010001110101001001110100011111011111001101110000111011100101000111110100100100000100100010000000101100101100001 72& -b1100 _2& -b1110 g2& -b1101 o2& -0w2& -b0110 !3& -b0010 )3& -b1011011111011100 13& -b101101101000110010100011001001001101101011011101000111110010010001011101100001000100000101100000111100010010011110101011 93& -b01011001101000000111011011100000101000101100011111001010101100110000010011111111110001000000010011001010000010100011110010000000 Y3& -1y3& -0#4& -b0000 +4& -b00001110111110011000100000001011110111011110010100110001001111011110100111001111111101101110011100010101000010000110010101000001111001001101001001001001110110001101010001010110001110101001000000001001001011000110001101010010001000111010000111010000010100010100110011000010010000000101100000101111010001101111000011 34& -b10111111000110000100111111100001010010010111111000001011010100011000000000010110101011101010101101111000011011100110111011110001111101011011011000001010101111110110010010001001101011101110010111101010100001101011011100110011110010101000010100110101010000000101100100100000111000111001010001000011101111101111110000 =4& -b11001110010001011101010110111110100101001110110000111110100001111101001001011110001011110011110000000101001001010111111010101101000001110100111101000000100011110111101110110110001100110001000100000001001001010001110110010001010101110101011110100110010111101011111000110100110101100100011010010101110001010011110010 G4& -b01111101000111001100111000000100010000001011001001010011011011011000000001010001011110011010110011001100011011010100101100011100011110100100100110101110100101100010110000001010000110011000001011001000011011110001000111010011011001101010001011000010100000011011001111110000110010100101001001000001111011110011100000 Q4& -b00111111001001110100101010011111111111110010000011000110100011110110101110001010111000001010100000111011110111011001001000001100010011110110010001000100100001001011001110110000110000010011100001111101100100101101001101001010011111010110001011101000011011111001001101101100010101010101100100000011111111110010101100 [4& -b00111011000111101100101011001001100001010010110101000000000111000010111000010000001001010110000100110011110100010101101110001010011111111100010011101010001011100000001111011010011010001101110000101011110100001011110010011101111110111100000111100111101001100110100100000011101101110011000001110111111100011110010001 e4& -b01110000011001001101010101010101011000110101101010011011111101010101011010110000000100010010010110110100001110011100100111001011100001110011101010000010110111000011101000101100001010000100101110100110000000001111100110101110100011010111110011101101111100100100110110000000111011100001001101010100101011111011001011 o4& -b00110011100110001000111111000011101101001111110111101101100011110100000010000010010000011111111101111001011101110110101001101001000111110001000010001101111101010011101110111000101101010100101011110100010111100011110100110000000101100011010010000100100000000010101100100101001010000101101001001010011010101110101010 y4& -b11010101101000100001101010001010001110011101010110111011000001110111011000001100000010001001101011110101100011010000100010101011000110001001111101000111010001011010101111011000011001110111111100101101001110101111001111001000110010011100011110110111100000110000010010001011010100011000000110001000100101100111000011 !;& -b10001110101010010111100111111111101010010001101010000011100011101101010110110001011110111000110110110001011011100001100010010100001100100011101011110101010110000011001100001011111100100001101011011100110011000000011000011011101001010011000100110101101010000000001000000011011000100010001111001001001000001000110011 q;& -b010 c<& -b100 k<& -b000 s<& -1{<& -b01100111100101001101101000010101110001010101000100010100111101111001111001000000100110110100001001010001010101010010011100000001010001101011010000111101101001011100000111010101000000000010010001100011111001110010110100110001011000100101110100 %=& -b11111111010100010101101000010011101110001011100011111010101100001000110111110100111000111100101100010100110100001010101000000110 e=& -b11001011101111100110010101001110110011100011000010111000010001011110101010001010000100111111101101001101100110001010111101100101 '>& -b00001110110111001011001010010010110010101110111010001110001111111101110011000110010000110010101101010000000000101001000010101000 G>& -b01101101001101101101001001111101110100010110010110000110001011011111011001000000010101001010110010001001110001110101011101111100 g>& -b00000011001011100011010110011001011010001110010010011110111011010101111001111000100001110000101001001100010000010111001010010010 )?& -b01111010111101001001000000000000110110000111010010110110001011110111010100010101001001001100101000000100011101100110111010100010 I?& -b01100010100000001011001011110001010100001011011000110010111001110100101000001101101111001110000000100101110011010000100111100111 i?& -b10101000000101011111111011001011111011010010100110101111000011011011110111000100100110111010100010011011000000011010000111001011 +@& -b11010101000101111111001011111101110000000111101110111010000100100011110001010010000111001011110111101101001000111100110001111000 K@& -b11011001110011011100111100101111000001001110000111100100111001011001111000011001010000111110100001001010110101100101100011001101 k@& -b00100111100001011011000000111101111001010000001101000000100010011110100111000010110010010010000000000101110000110100001111011100 -A& -b00000110000000011010101100001111000000101111011010000011100010100010110001111001011111011000110100100100100110101010000110011011 MA& -b11100011110100001110110100000001100011110100101000110100101001111011101111001101101111110111001101100001000010100000111100100010 mA& -b10011000011011001101111110101100001110010111010101100101001110010100111000100111111010000000011011001110000000001101110001101000 /B& -b11000111100111110110100000010100100001110111011001111000101000100111110101111001010001000111011100101010110111110000010010101000 OB& -b11100001111110111011111011101001011011110110111011001001101111101100100100010010001111010010000010101010100000101001100101100100 oB& -b001101110100100100010 1C& -b010111000100000011100 2C& -b100110101001011000101 3C& -b001110010100011010101 4C& -b100001000001010101110 5C& -b000101110110010000001 6C& -b101110011001010000000 7C& -b001001110001110111010 8C& -b100001111110100111111 9C& -b010100000101011001111 :C& -b100110001111011101110 ;C& -b001110001000101011010 C& -b001001110010110101100 ?C& -b101100000010011100110 @C& -b1010001000010110 SD& -b1011101010011010 [D& -b0111011010101100 cD& -b1011000010110110 kD& -b1111011010111000 sD& -b1000001011000001 {D& -b0001011110100000 %E& -b1010100111110100 -E& -b1100111111101111 5E& -b0011110110010111 =E& -b0110001011110101 EE& -b1110101100000100 ME& -b1000000110100010 UE& -b0001011000101111 ]E& -b1000100101000011 eE& -b1101110111000000 mE& -b1110111111011101 uE& -b1110011001011011 }E& -b01010000011001100100111100010011 'F& -b00010101110011001100100000010000 /F& -b11110010011010011111011000101100110011100001011001100111111010110101101011111001001111011001110010100111001111110000001110001101000111101011101100011010011010110011110 7F& -b1010111001001101001111111000101011110010100101100011110100011100001101111111001100000010001111000111001110001001001110110100011111010001110000111111001101101101110001110000111001011100010100000110001011100001011100011111010101010010111010000101101101001110111101110011010111011110001000111100000101001010010100010110 gF& -b0000100101111101100000000010101110110010011010101001000110110110111011010100010100010 YG& -b0010110010000010011001000100011101011001111111001010011100101111100001101111011011010 \G& -b1010010100011111100110110011110001101001100000100100101110110000101010111011011001011 _G& -b1111100100100110100101001011000111100111011010011100111001111001100101011101011111000 bG& -b0111000000100110110110101111101101101011011001011000010010111110110101001000100010110 eG& -b1011010011000001111100110100100011100101101010000110011011001000011001111110101110001 hG& -b0100111000110000010100010110001011001001110000110101110011110100000110011000110111101 kG& -b0001110110011110001100110010100001100000101101000101011101101000111101101101001101100 nG& -b0110000111000011100100010111101101100011110000100010111101101101100011101010100100110 qG& -b0010101001011110011011011110101111100010001010100001010011011100000101001011101111001 tG& -b0110010000101001101011000010000000001010000000101001110111111100110011011111010110110 wG& -b1101101100111111110000000011110110001011100011010001001001000001101000010100100101000 zG& -b1011110010011011011111100101010011010101101110110010000010101001110001010110111011111 }G& -b1000111101010100111100000010010111100010011101100011001110110110010011011000000100100 "H& -b1110110001011010000100000001001101110100011001010001010110100100111010101101110011111 %H& -b1100101001011011100001011000011001010100000111010010110011110111010000101000011111101 (H& -b1110101000000100000000011011000011101110100110110100001101100111101101101000011011110100110100010110001101011000001001001100111110010111010111101101101110000111111111000010101000110101100111100110100001110001100100011000000011100001110011110011110010100010001001010010110100001110100000010000101001001010000100101001100100011011111101010111011010011101000011010100011100111101011101011001110001000100 aK& -b0101111100001100 kL& -b1000010110110010 sL& -b0101 {L& -b0000 %M& -b0000 -M& -b01011 5M& -1=M& -b0111 EM& -b1100010001011111111110110101111001000010010110100110100100100111101000100111 MM& -b1101011000001010101001001010101111001000110100011110011011111010001101101100 PM& -b1111100010110101001011100011111010100010100000011000011100011011010011110000 SM& -b1100110001110000111111011011010000101001110001010111011100000111000100011000 VM& -b0011000000111001011010100100010001110100010100001110010001000110110100010100 YM& -b1101110011000001111111001011000010001111101011110000010111000010001001100101 \M& -b1011101111011101111011001011011110011011010101101000110011111001001001001100 _M& -b0101100100100100111011000110011110110111011111110111011110001011101000000111 bM& -b0110011011010111000100010101010000111001000100000001001010100100011011110001 QO& -b0010101000000010011001110010001111100011110100011110101110101010101100000111 iO& -b111 #P& -b101 +P& -b011 3P& -1;P& -b001 CP& -b0111101001000011110100100001000100011110000100000111001010101110000101100000010010010100001000110100101010101100001101010110111110111110000100010101111001110000011111000011001000001000111100111000100 KP& -b1001010111100100001110111101101010000010101110010101100101100001001100101010100000100111101110001011100001001111011010000000110111101101011100110011101101000000010111101010011001111001000101110111100 RP& -b1111010010000011111110110110110011100101000001101011000000100101100011000111000011010011000000001110000011101011010100001100100001011000001111000000110000110010110011011101010011101000001101100111010 YP& -b0101100101100010111001000011101001110100101101000110100101010000000100001110111110001010001100111100000110111011011000111101101000000010000101010100010001011001101010111010000100010010010100110000001 `P& -b0101101101101101111010011011011000110010111111111000110111001101011001100011101000011110101010100100010010110111100000101100110100010010011101101101000100111001011111000101010111010000011000001100011 oR& -b0111101001000110100100101000100101100010110011111010110011011110101011110100100010110001101110011010101111100101111100100000011111111101101001000100000100000010000010101000010111100111010111100110100 IS& -b11 #T& -b00 +T& -b10 3T& -1;T& -0CT& -1KT& -b1110 ST& -b0001 [T& -b0100110010001011 cT& -b100110101000010000011001110111101110010000111000111010110000100000001110101010000111001101001101001010001111001011111000 kT& -b10010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000 -U& -b100010100000101101101001001100010000001111 MU& -0]U& -b1000 eU& -b10100000010001100000100011011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 mU& -b011110111010011101010011101100111111100110 /V& -1?V& -1GV& -1OV& -b0110011011111010 WV& -b0010000000011101100011011110 _V& -b01011000001100011000100000110000011010100110110101000111101001110110111111001110100010101101011011111011111001000000000111101101 gV& -b0010000000011101100011011110 )W& -11W& -19W& -b01101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 AW& -b1110001000001101100111000000 aW& -1iW& -0qW& -b0000100101001001100110000111 yW& -1#X& -b0101100001000011110000001100 +X& -13X& -1;X& -b0010110101110110101001000110 CX& -0KX& -b00 SX& -b00000000000000000000000000000000000000000000000000000000 [X& -b00 kX& -b00 sX& -b10 {X& -b01 %Y& -b10 -Y& -b00 5Y& -1=Y& -1EY& -b1110001000001101100111000 MY& -0UY& -b0000100101001001100110000 ]Y& -0eY& -0mY& -0uY& -0}Y& -0'Z& -0/Z& -07Z& -0?Z& -0GZ& -0OZ& -0WZ& -0_Z& -0gZ& -0oZ& -0wZ& -0![& -b00000000000000000000000000000000 )[& -b00000000000000000000100000000000 1[& -b00000000000000000000000000010000 9[& -b00000000000000000000000000001000 A[& -b00000000000000000000000000000100 I[& -b00000000000000000000000000000001 Q[& -b00000000000000000000000000101010 Y[& -b00000000000000000000000000011100 a[& -b00000000000000000000000000000010 i[& -b00000000000000000000000000000100 q[& -0y[& -b00000000000000000000000011101000 #\& -b00000000000000000000000000001000 +\& -b00000000000000000000000000000000 3\& -b00000000000000000000000000000001 ;\& -b00000000000000000000000000110110 C\& -b00000000000000000000000010011001 K\& -b00000000000000000000000100111010 S\& -b00000000000000000000000011110010 [\& -b00000000000000000000000010100111 c\& -b00000000000000000000000100111100 k\& -b00000000000000000000000001001100 s\& -b00000000000000000000000011000111 {\& -b00000000000000000000000000000010 %]& -b00000000000000000000000000000011 -]& -b00000000000000000000000000000101 5]& -b00000000000000000000000000000110 =]& -b00000000000000000000000000000111 E]& -#1 -b00000000 + -b00000001 3 -0K -1S -b0010 E! -b0100 e! -b1000 '" -0W" -05% -b00100001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 G* -19+ -b01000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 K, -1=- -b10000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 O. -1A/ -0Y/ -0q3 -1k4 -1%5 -1-5 -1E5 -1M5 -1e5 -b11111111 O6 -b00000000 W6 -b0000000000000000 _6 -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 g6 -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 I7 -b00000000 C8 -b00000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 K8 -b11111111 %9 -b00000000 -9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 59 -b00000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 U9 -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 /: -b11111111 s< -b00000000 {< -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 %= -b00 ]= -b00000000000000000000000000000000 e= -b000000000000000000000000000000000000000000 m= -b0000000000000000 /> -b0000000000000000000000000 7> -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ?> -0_> -b0000000000000000000000000000 g> -b00 o> -b00000000000000000000000000000000 w> -b000000000000000000000000000000000000000000 !? -b0000000000000000 A? -b0000000000000000000000000 I? -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Q? -b0000000000000000000000000000 y? -b00000000000000000000000000000000 +@ -b000000000000000000000000000000000000000000 3@ -b0000000000000000 S@ -b0000000000000000000000000 [@ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 c@ -b0000000000000000000000000000 -A -b00000000000000000000000000000000 =A -b000000000000000000000000000000000000000000 EA -b0000000000000000 eA -b0000000000000000000000000 mA -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 uA -b0000000000000000000000000000 ?B -b00000000000000000000000000000000 OB -b000000000000000000000000000000000000000000 WB -b0000000000000000 wB -b0000000000000000000000000 !C -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 )C -b0000000000000000000000000000 QC -b00 YC -b00000000000000000000000000000000 aC -b000000000000000000000000000000000000000000 iC -b0000000000000000 +D -b0000000000000000000000000 3D -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ;D -0[D -b0000000000000000000000000000 cD -b00 kD -b00000000000000000000000000000000 sD -b000000000000000000000000000000000000000000 {D -0-E -05E -b0000000000000000 =E -b0000000000000000000000000 EE -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ME -b0000000000000000000000000000 uE -b00000000000000000000000000000000 'F -b000000000000000000000000000000000000000000 /F -b0000000000000000 OF -b0000000000000000000000000 WF -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 _F -0!G -b0000000000000000000000000000 )G -01G -09G -b0000000000000000000000000000 AG -1IG -0QG -b000 YG -b00000000 yG -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #H -b00000000 [H -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 cH -b00000000 =I -b000 UI -0]I -b0000000000000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 eI -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 GJ -b00000001 1K -b00000001 AK -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 QK -b000000000000000000000000000000000000000000 qK -b00000000 +L -0;L -b00000000 CL -b00000000 KL -0cL -b0000000000000000000000000 %M -0-M -b0000000000000000000000000000 5M -b0000000000000000000000000 EM -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 MM -1uM -0}M -0WN -0_N -09O -0AO -0IO -0QO -0YO -0aO -b0000000000000000000000000 +P -b00 3P -b00000000000000000000000000000000 ;P -b0000000000000000000000000000000000000000000000000 cP -0sP -0{P -0%Q -b0000000000000000000000000 5Q -b00 =Q -b00000000000000000000000000000000 EQ -b0000000000000000000000000000000000000000000000000 MQ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ]Q -0'R -0/R -b01100101100101110011100001110111 7R -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 ?R -b001010101111100111010 _R -b0101111001010011 wR -b000000000000000000000000000000000000000000 !S -b00 1S -b0000 AS -0YS -0qS -0#T -b0000000000000000000000000 3T -0[T -0%U -05U -0MU -0UU -b000000000000000000000000000000000000000000000000000000 ]U -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 uU -b0000 GV -b0000000000000000 WV -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 _V -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !W -b000000000000000000000000000000000000000000 AW -1QW -b0000 aW -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 iW -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sX -b0000 UY -0]Y -b00000000000000000000000000000000 eY -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 mY -b00 /Z -0?Z -b0101111001010011 GZ -b001010101111100111010 OZ -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 WZ -0![ -b0101111001010011 )[ -b001010101111100111010 1[ -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 9[ -0a[ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 q[ -b000000000000000000000 K\ -b00010111100101001100101010111110011101000110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 M] -b0000000000000000000000000000000000000000000000000000000000000000000001100101100101110011100001110111001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110010101011111001110100001011110010100110000000000000000000000000000000000000000000000000 }] -b0000000000000000000000000000000000000000000000000000000000000000000000000000 Y_ -b0000000000000000000000000000000000000000000000000000000000000000000000000000 q_ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3` -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 k` -b0000000000000000000000000 Ua -b0000000000000000000000000000 ea -0ma -b0000000000000000000000000 ua -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }a -1Gb -0Ob -b00 Wb -0_b -b1000 gb -b000101011101001010001100010011 ob -b10010000010101000001101101110000 wb -0;d -0Sd -b0000000000000000000000000 [d -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sd -0Ee -0]e -b0000000000000000000000000 ee -b00 me -b00000000000000000000000000000000 ue -b0000000000000000000000000000000000000000000000000 }e -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 /f -b01000010011101000111010011110101 gf -b10011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 of -b010010000010011001001 1g -09g -b1000010010011011 Ig -b000000000000000000000000000000000000000000 Qg -b00 ag -0ig -b0000 qg -0Kh -b0000000000000000000000000 ch -0kh -0ui -b000000000000000000000000000000000000000000000000000000 /j -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Gj -0oj -b0000 wj -b0000 !k -b0000000000000000 )k -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1k -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Qk -b000000000000000000000000000000000000000000 qk -1#l -b0000 3l -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ;l -b0001 5m -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Em -b0000 'n -b00000000000000000000000000000000 7n -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ?n -b00 _n -0on -b1000010010011011 wn -b010010000010011001001 !o -b10011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 )o -0Qo -b1000010010011011 Yo -b010010000010011001001 ao -b10011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 io -03p -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Cp -b000000000000000000000 {p -05q -0Eq -b00100001001001101101001000001001100100110011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 }q -b0000000000000000000000000000000000000000000000000000000000000000000001000010011101000111010011110101100111101010110110000100011011101010010111010100111110111001001001101110101000001100100001001011010000100111010001110100111101010100100000100110010010010000100100110110000000000000000000000000000000000000000000000000 Or -b0000000000000000000000000000000000000000000000000000000000000000000000000000 +t -b0000000000000000000000000000000000000000000000000000000000000000000000000000 Ct -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ct -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 =u -b0000000000000000000000000 'v -b0000000000000000000000000000 7v -b0000000000000000000000000 Gv -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Ov -1wv -0!w -b00 )w -01w -b1001 9w -b010011001010000111011011100001 Aw -b10000100000000111100111000100000 Iw -0Sx -0[x -0cx -b0000000000000000000000000 7z -b00 ?z -b00000000000000000000000000000000 Gz -b0000000000000000000000000000000000000000000000000 Oz -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 _z -b10111001101101001000110011111100 9{ -b01000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 A{ -b001101110110100011110 a{ -b1000111100100010 y{ -b000000000000000000000000000000000000000000 #| -b00 3| -0;| -b0000 C| -b0000000000000000000000000 5} -0E} -0G~ -b000000000000000000000000000000000000000000000000000000 _~ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 w~ -b0000 I!! -b0000 Q!! -b0000000000000000 Y!! -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a!! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #"! -b000000000000000000000000000000000000000000 C"! -1S"! -b0000 c"! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 k"! -b0001 e#! -b0000 W$! -0_$! -b00000000000000000000000000000000 g$! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 o$! -b00 1%! -0A%! -b1000111100100010 I%! -b001101110110100011110 Q%! -b01000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 Y%! -0#&! -b1000111100100010 +&! -b001101110110100011110 3&! -b01000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 ;&! -0c&! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 s&! -b000000000000000000000 M'! -b00100011110010001000110111011010001111001000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 O(! -b0000000000000000000000000000000000000000000000000000000000000000000010111001101101001000110011111100010001110101000011000101011101100101001111000010001101011010101111001100000100110111011101001111101110011011010010001100111111000011011101101000111100010001111001000100000000000000000000000000000000000000000000000000 !)! -b0000000000000000000000000000000000000000000000000000000000000000000000000000 [*! -b0000000000000000000000000000000000000000000000000000000000000000000000000000 s*! -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 5+! -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m+! -b0000000000000000000000000 W,! -0_,! -b0000000000000000000000000000 g,! -b0000000000000000000000000 w,! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !-! -1I-! -0Q-! -13.! -0S.! -0s.! -0{.! -0%/! -0-/! -05/! -0=/! -b0000000000000000000000000 ]/! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 u/! -0G0! -0_0! -b0000000000000000000000000 g0! -b00000000000000000000000000000000 w0! -b0000000000000000000000000000000000000000000000000 !1! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 11! -b000000000000000000000000000000000000000000 S2! -b00 c2! -b0000 s2! -0M3! -b0000000000000000000000000 e3! -0u3! -0/4! -b000000000000000000000000000000000000000000000000000000 15! -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 I5! -b0000 y5! -b0000 #6! -b0000000000000000 +6! -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 36! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 S6! -b000000000000000000000000000000000000000000 s6! -1%7! -b0000 57! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 =7! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 G8! -019! -b00000000000000000000000000000000 99! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A9! -b0000000000000000 =;! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 E;! -0u;! -b000000000000000000000 };! -b0000000000000000 '# -b0000000000000000 c># -b0000 k># -b00000 %?# -b0000 5?# -b0000000000000000000000000000000000000000000000000000000000000000000000000000 AA# -b0000000000000000000000000000000000000000000000000000000000000000000000000000 YA# -b000 qA# -b000 yA# -b001 #B# -b000 3B# -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 _D# -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 9E# -b00 qE# -b00 yE# -0;F# -0SF# -0sF# -b11 {F# -b0010000000111001011110000 %G# -b11 -G# -b01011100111100001100100001010100 5G# -b001010000110010111100011100001101010110001 =G# -b0100 MG# -0UG# -1]G# -b000000000000000000000000000000000000000000 mG# -0}G# -b0000 'H# -b00 ?H# -b00000000000000000000000000000000 GH# -b00000000000000000000000000000000 OH# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 WH# -0!I# -b0000000000000000 )I# -b0000000000000000000000000000000000000000000000000 1I# -b000000000000000000000 AI# -0yI# -1#J# -0+J# -b0000000000000000000000000 CJ# -b0000000000000000000000000000 KJ# -b00000 [J# -b000000000000000000000000000000000000000000000000000000 IM# -b000000000000000000000000000000000000000000000000000000 YM# -b0000 iM# -b0000 qM# -b0001 yM# -b00000 +N# -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !U# -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 IU# -b0000 qU# -b0000 yU# -b0001 #V# -b0000 3V# -1-W# -15W# -b0000 =W# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 3^# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 %_# -b000 u_# -b000 }_# -b001 '`# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 7`# -b0000000000000000 )i# -b0000000000000000 1i# -b00000000000000000000000000010000 9i# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Ii# -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 yi# -b0000000000000000 }o# -b0000000000000000 'p# -b0000 /p# -b0000 ?p# -b00000 Gp# -b0000 Wp# -b0000000000000000000000000000000000000000000000000000000000000000000000000000 cr# -b0000000000000000000000000000000000000000000000000000000000000000000000000000 {r# -b000 5s# -b000 =s# -b001 Es# -b000 Us# -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #v# -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [v# -b00 5w# -b00 =w# -b01 Ew# -1ew# -07x# -b10 ?x# -b1101001101100110100110100 Gx# -b00 Ox# -b11011010001001001111010111101010 Wx# -b000100011101111111101010010110101000101101 _x# -b1000 ox# -0wx# -0!y# -b00 )y# -b000000000000000000000000000000000000000000 1y# -b0000 Iy# -b00 ay# -b00000000000000000000000000000000 iy# -b00000000000000000000000000000000 qy# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 yy# -0;z# -0Cz# -b0000000000000000 Kz# -b0000000000000000000000000000000000000000000000000 Sz# -b000000000000000000000 cz# -0sz# -0{z# -0%{# -0-{# -05{# -0={# -0]{# -b0000000000000000000000000 e{# -b0000000000000000000000000000 m{# -b00000 }{# -b000000000000000000000000000000000000000000000000000000 k~# -b000000000000000000000000000000000000000000000000000000 {~# -b0000 -!$ -b0000 5!$ -b0001 =!$ -b00000 M!$ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 C($ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 k($ -b0000 =)$ -b0001 E)$ -b0000 U)$ -1O*$ -1W*$ -b0000 _*$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 U1$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G2$ -b000 A3$ -b001 I3$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Y3$ -b0000000000000000 K<$ -b0000000000000000 S<$ -b00000000000000000000000000010000 [<$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 k<$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ==$ -b0000000000000000 AC$ -b0000000000000000 IC$ -b0000 QC$ -b0000 YC$ -b0000 aC$ -b00000 iC$ -b0000 yC$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000 'F$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000 ?F$ -b000 WF$ -b000 _F$ -b001 gF$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 EI$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }I$ -b00 WJ$ -b00 _J$ -b01 gJ$ -0!K$ -1)K$ -01K$ -09K$ -0YK$ -b01 aK$ -b1001111101101100011111110 iK$ -b00 qK$ -b10111100000111111110101110011101 yK$ -b011000010001010100001010010001000111110000 #L$ -b1000 3L$ -1;L$ -0CL$ -b00 KL$ -b000000000000000000000000000000000000000000 SL$ -0cL$ -b0000 kL$ -0sL$ -0{L$ -b00 %M$ -b00000000000000000000000000000000 -M$ -b00000000000000000000000000000000 5M$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 =M$ -0eM$ -b0000000000000000 mM$ -b0000000000000000000000000000000000000000000000000 uM$ -b000000000000000000000 'N$ -07N$ -0ON$ -0WN$ -b0000000000000000000000000 )O$ -b0000000000000000000000000000 1O$ -b00000 AO$ -b000000000000000000000000000000000000000000000000000000 /R$ -b000000000000000000000000000000000000000000000000000000 ?R$ -b0000 OR$ -b0000 WR$ -b0001 _R$ -b00000 oR$ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 eY$ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 /Z$ -b0000 WZ$ -b0000 _Z$ -b0001 gZ$ -1q[$ -b0000 #\$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 wb$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ic$ -b000 [d$ -b000 cd$ -b001 kd$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 {d$ -b0000000000000000 mm$ -b0000000000000000 um$ -b00000000000000000000000000010000 }m$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 /n$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 _n$ -b0000000000000000 ct$ -b0000000000000000 kt$ -b0000 st$ -b0000 {t$ -b00000 -u$ -b0000 =u$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000 Iw$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000 aw$ -b000 #x$ -b001 +x$ -b000 ;x$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 gz$ -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A{$ -b00 y{$ -b00 #|$ -b01 +|$ -1;|$ -0C|$ -1K|$ -0S|$ -b00 %}$ -b0010110001101001011111100 -}$ -b01 5}$ -b00110010001100001001100000000101 =}$ -b101101111010111010110011110011110101101010 E}$ -b1101 U}$ -1e}$ -b00 m}$ -b000000000000000000000000000000000000000000 u}$ -0'~$ -b0000 /~$ -07~$ -0?~$ -b00 G~$ -b00000000000000000000000000000000 O~$ -b00000000000000000000000000000000 W~$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 _~$ -0!!% -0)!% -b0000000000000000 1!% -b0000000000000000000000000000000000000000000000000 9!% -b000000000000000000000 I!% -0i!% -0q!% -0#"% -1+"% -1;"% -0C"% -b0000000000000000000000000 K"% -b0000000000000000000000000000 S"% -0["% -b00000 c"% -b000000000000000000000000000000000000000000000000000000 Q%% -b000000000000000000000000000000000000000000000000000000 a%% -b0000 q%% -b0000 y%% -b0001 #&% -b00000 3&% -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 )-% -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Q-% -b0000 y-% -b0000 #.% -b0001 +.% -b0000 ;.% -15/% -1=/% -b0000 E/% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ;6% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -7% -b000 '8% -b001 /8% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ?8% -b0000000000000000 1A% -b0000000000000000 9A% -b00000000000000000000000000010000 AA% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 QA% -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #B% -b0000000000000000 'H% -b0000000000000000 /H% -b0000 7H% -b0000 ?H% -b0000 GH% -b00000 OH% -b0000 _H% -b0000000000000000000000000000000000000000000000000000000000000000000000000000 kJ% -b0000000000000000000000000000000000000000000000000000000000000000000000000000 %K% -b000 =K% -b000 EK% -b001 MK% -b000 ]K% -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +N% -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 cN% -b00 EO% -b01 MO% -b000000000000000000000000000000000000000000 9Q% -0IQ% -b0000 QQ% -b00 iQ% -b00000000000000000000000000000000 qQ% -b00000000000000000000000000000000 yQ% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 #R% -0CR% -0KR% -b0000000000000000 SR% -b0000000000000000000000000000000000000000000000000 [R% -b000000000000000000000 kR% -0sR% -0{R% -0%S% -0-S% -05S% -0US% -1]S% -b0000000000000000000000000 mS% -b0000000000000000000000000000 uS% -b00000 'T% -b000000000000000000000000000000000000000000000000000000 sV% -b000000000000000000000000000000000000000000000000000000 %W% -b0000 =W% -b0001 EW% -b00000 UW% -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 K^% -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 s^% -b0000 =_% -b0000 E_% -b0001 M_% -b0000 ]_% -1_`% -b0000 g`% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ]g% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Oh% -b000 Ai% -b001 Qi% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ai% -b0000000000000000 Sr% -b0000000000000000 [r% -b00000000000000000000000000010000 cr% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 sr% -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Es% -b0000000000000000 Iy% -b0000000000000000 Qy% -b0000 ay% -b0000 iy% -b00000 qy% -b0000 #z% -b0000000000000000000000000000000000000000000000000000000000000000000000000000 /|% -b0000000000000000000000000000000000000000000000000000000000000000000000000000 G|% -b000 _|% -b000 g|% -b001 o|% -b000 !}% -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 M!& -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 '"& -b00 _"& -b01 o"& -1!#& -0A#& -b10 i#& -b1011101011001110001000100 q#& -b00001001011111011000000000101011 #$& -b110010011010101001000110110110111011010100 +$& -b1010 ;$& -1C$& -0K$& -b00 S$& -b000000000000000000000000000000000000000000 [$& -b0000 s$& -b00 -%& -b00000000000000000000000000000000 5%& -b00000000000000000000000000000000 =%& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 E%& -0e%& -b0000000000000000 u%& -b0000000000000000000000000000000000000000000000000 }%& -b000000000000000000000 /&& -07&& -0?&& -0G&& -0_&& -0g&& -0w&& -1!'& -0)'& -b0000000000000000000000000 1'& -b0000000000000000000000000000 9'& -b00000 I'& -b000000000000000000000000000000000000000000000000000000 7*& -b000000000000000000000000000000000000000000000000000000 G*& -b0000 W*& -b0000 _*& -b0001 g*& -b00000 w*& -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m1& -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 72& -b0000 _2& -b0000 g2& -b0001 o2& -b0000 !3& -1#4& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !;& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 q;& -b000 c<& -b000 k<& -b001 s<& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 %=& -b0000000000000000 uE& -b0000000000000000 }E& -b00000000000000000000000000010000 'F& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 7F& -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 gF& -b0000000000000000 kL& -b0000000000000000 sL& -b0000 {L& -b00000 5M& -b0000 EM& -b0000000000000000000000000000000000000000000000000000000000000000000000000000 QO& -b0000000000000000000000000000000000000000000000000000000000000000000000000000 iO& -b000 #P& -b000 +P& -b001 3P& -b000 CP& -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 oR& -b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 IS& -b00 #T& -b01 3T& -1CT& -1]U& -b0000 eU& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 mU& -b000000000000000000000000000000000000000000 /V& -0GV& -0OV& -b1111111111111111 WV& -b0000000000000000000000000000 _V& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 gV& -b0000000000000000000000000000 )W& -0;X& -b0000000000000000000000000000 CX& -#2 -b00000000000000000000000000000000 # -b0000 E! -b0000 e! -b0000 '" -03$ -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 G* -09+ -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 K, -0=- -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 O. -0A/ -0k4 -0%5 -0-5 -0E5 -0M5 -0e5 -0CT& -0KT& -b0000 ST& -09W& -0EY& -#3 -b1111101000010100 _6 -b1010011010010010011110100010011110000110001000100010000010110010100100011000100010111010011011011000111100101000010110111001000010101010100111001100110110000011000010110001000001001101011100100011001011010110000010000000010010101011110011100001110100101101 g6 -b000100010111111111101101011110010000100101101100110101110001100101001111101101101111100001100011011011000011111110010010101101000111000010011001110010100001111001110010101000000011010100100000101001010001011110011001001101111100000101111100001001010010111111100001110100011010010101100000000100110001011010100010001010010101101011000000 I7 -b11101001000011111100001000010101111100001101111100011111100011011001100000110100011111100101000110100011001000111101001010111001 59 -b01001000010001000111100001110100010011000010010101111110111111101111000000000000110111111010111011011010011011001001100010110001010011011011101000111100001010100000001000000011101100010101101110011011000011001101010010100000 U9 -b1000001110010101011100001011000000100100101000010001101001010101011000011010101101111101111100001000101011110011100000111110000110101001111001111001001100110110010000111101111010101110011010110111110111001010011001011000101010100100001001000001111110101100111010111000001010011001011010111000011110100001000000101000000101000001001000001100010110000100000011101100110100101010100110111001010000110010011100111010111111111010011010000010001011111000110101110001011111011001010100011110000110000111001010011101010110100100011101110010001101001001100010000101010101001111010101111110000101010101111110010111010001010110100101100000000111010011101000101000110111010011011101110001101001001111001000010010101111001011110101110100110110100000010010011100000011000110110100111011100110110000001100101111111111100000000000001011100110000011110000101110101100100010011111011110110100101101011111011111010001010011101001010101010011011011111110101000010110100100101000001111111110000100100011111011000110110010000110001000111010100100 /: -b10010000010001111001110001001110010011100101110110110100111010010010011111100001101011100000111010110101111111110101100011010001110101011111000110001101010010110110111100100001110011000010010010111011101110111100100000101111 %= -b10101011110011100001110100101101 e= -b110001011010100010001010010101101011000000 m= -b1101001010111001 /> -b1011000011001101010010100 7> -b01010011101001010101010011011011111110101000010110100100101000001111111110000100100011111011000110110010000110001000111010100100 ?> -b1011101110111100100000101111 g> -b01 o> -b00110010110101100000100000000100 w> -b111111100001110100011010010101100000000100 !? -b1010001100100011 A? -b0000001110110001010110111 I? -b10111001101100000011001011111111111000000000000010111001100000111100001011101011001000100111110111101101001011010111110111110100 Q? -b0010000111001100001001001011 y? -b01 #@ -b00001011000100000100110101110010 +@ -b011001001101111100000101111100001001010010 3@ -b0111111001010001 S@ -b1010001111000010101000000 [@ -b10100010100011011101001101110111000110100100111100100001001010111100101111010111010011011010000001001001110000001100011011010011 c@ -b0001100011010100101101101111 -A -b10101010100111001100110110000011 =A -b101000000011010100100000101001010001011110 EA -b1001100000110100 eA -b1001100010110001010011011 mA -b10100100011101110010001101001001100010000101010101001111010101111110000101010101111110010111010001010110100101100000000111010011 uA -b0101100011010001110101011111 ?B -b10 GB -b10001111001010000101101110010000 OB -b000111000010011001110010100001111001110010 WB -b0001111110001101 wB -b1111101011101101101001101 !C -b10010100001100100111001110101111111110100110100000100010111110001101011100010111110110010101000111100001100001110010100111010101 )C -b1110000011101011010111111111 QC -b10 YC -b10010001100010001011101001101101 aC -b100001100011011011000011111110010010101101 iC -b1111000011011111 +D -b1111111011110000000000001 3D -b11101011100000101001100101101011100001111010000100000010100000010100000100100000110001011000010000001110110011010010101010011011 ;D -b1110100100100111111000011010 cD -b11 kD -b10000110001000100010000010110010 sD -b101100110101110001100101001111101101101111 {D -b1100001000010101 =E -b0100010011000010010101111 EE -b10101001111001111001001100110110010000111101111010101110011010110111110111001010011001011000101010100100001001000001111110101100 ME -b1110010011100101110110110100 uE -b11 }E -b10100110100100100111101000100111 'F -b000100010111111111101101011110010000100101 /F -b1110100100001111 OF -b0100100001000100011110000 WF -b10000011100101010111000010110000001001001010000100011010010101010110000110101011011111011111000010001010111100111000001111100001 _F -b1001000001000111100111000100 )G -b0101111001011110011010010110 AG -b11100100 yG -b01011010011110100110111101100101111011011011001100101100010000000110100011010000010001100001001100111111011010101100101100101010001011011000001001100111100011111000101011110101100010011110111111000101111001011110011010010110 #H -b01011010011110100110111101100101111011011011001100101100010000000110100011010000010001100001001100111111011010101100101100101010001011011000001001100111100011111000101011110101100010011110111111000101111001011110011010010110 cH -b1110010001011010011110100110111101100101111011011011001100101100010000000110100011010000010001100001001100111111011010101100101100101010001011011000001001100111100011111000101011110101100010011110111111000101111001011110011010010110 GJ -b110001011010100010001010010101101011000000 qK -b1110111101100011110000111 %M -b1011000101100110001100001100 5M -b0100100011011101000111111 EM -b10101010111100000010110101011000001101110100110001011001001011111110000001101111001000011010110100111011001101100000011011111010 MM -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ]Q -b111011110110001111000011101011000101100110001100001100 ]U -b010010001101110100011111110101010111100000010110101011000001101110100110001011001001011111110000001101111001000011010110100111011001101100000011011111010 uU -b1111 GV -b0111 OV -b0010011101011001 WV -b011111010101011011001000110000111111111011100110010000101010011001011100100110110010101001101011101010000001010010101101 _V -b10010011100011110001111100101011101100111101111001010101110001000110100010110001100001110001101101000111011000110001011011100001 !W -b001011011110101011100101011011000110100111 AW -b11110111001001110101100101111101010101101100100011000011111111101110011001000010101001100101110010011011001010100110101110101000000101001010110110010011100011110001111100101011101100111101111001010101110001000110100010110001100001110001101101000111011000110001011011100001001011011110101011100101011011000110100111 iW -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 mY -b0000000000000000000000000000000000000000000001100101100101110011100001110111 Y_ -b0011000101101010001000101001010110101100000010101011110011100001110100101101 q_ -b0001011110010100110010101011111001110100000001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110000000000000000000000000000 3` -b0011010010101110011011000011001101010010100010100111010010101010100110110111111101010000101101001001010000011111111100001001000111110110001101100100001100010001110101001001011101110111100100000101111 k` -b1100100010011111000110011 Ua -b1000100010000110111011011111 ea -b1101010110011010010100100 ua -b00100001001101011010010011111000010001000100100001101110011100110111100101110111010000111011101000011111000001110100101101011110 }a -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 /f -1ui -1}i -b110010001001111100011001101000100010000110111011011111 /j -b110101011001101001010010000100001001101011010010011111000010001000100100001101110011100110111100101110111010000111011101000011111000001110100101101011110 Gj -b0111 wj -b0111 !k -b1011110101011110 )k -b100001110010111101001000100101100101010110110001001000011110110110001010111001101001010000101011010010001000011101101100 1k -b10010110010010010011000010011100001001101010111111101101100100101110101001010111001000000001010000010011110000101111111001110001 Qk -b101011011101011110001101011000011000010010 qk -b01110111101111010101111010000111001011110100100010010110010101011011000100100001111011011000101011100110100101000010101101001000100001110110110010010110010010010011000010011100001001101010111111101101100100101110101001010111001000000001010000010011110000101111111001110001101011011101011110001101011000011000010010 ;l -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ?n -b0000000000000000000000000000000000000000000001000010011101000111010011110101 +t -b0111111110000111010001101001010110000000010000110010110101100000100000000100 Ct -b0010000100100110110100100000100110010010000100111101010110110000100011011101010010111010100111110111001001001101110101000001100100001001011010000100111010001110100111101010000000000000000000000000000 ct -b1110100011001000110000001110110001010110111101110011011000000110010111111111110000000000000101110011000001111000010111010110010001001111101111011010010110101111101111101000010000111001100001001001011 =u -b0100101001000011101001110 'v -1/v -b1111010101101100011000001000 7v -b0011000000100101111100110 Gv -b10101000000001100100010101111000010001011100110010001000110111101110010110011010000111101000100111001111011111100010000101001000 Ov -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 _z -b010010100100001110100111011111010101101100011000001000 _~ -b001100000010010111110011010101000000001100100010101111000010001011100110010001000110111101110010110011010000111101000100111001111011111100010000101001000 w~ -b0011 I!! -b0110 Q!! -b0011100010000110 Y!! -b010110101111100010101111010111111110000011100110000011101000101111101110100101001110101010010001010110000010110100000011 a!! -b10101110111011001110100101011000111110000100010100101100001001000111011110110101001010100101100011101101101010100110001111001010 #"! -b111100000001111011010010011100100001100011 C"! -b00110110001110001000011001011010111110001010111101011111111000001110011000001110100010111110111010010100111010101001000101011000001011010000001110101110111011001110100101011000111110000100010100101100001001000111011110110101001010100101100011101101101010100110001111001010111100000001111011010010011100100001100011 k"! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 o$! -b0000000000000000000000000000000000000000000010111001101101001000110011111100 [*! -b0101100100110111110000010111110000100101001000001011000100000100110101110010 s*! -b0010001111001000100011011101101000111100000010001110101000011000101011101100101001111000010001101011010101111001100000100110111011101001111101110011011010010001100111111000000000000000000000000000000 5+! -b0001111110010100011010001111000010101000000101000101000110111010011011101110001101001001111001000010010101111001011110101110100110110100000010010011100000011000110110100110001100011010100101101101111 m+! -b0100111010001010010011011 W,! -b1101100100010110111000101000 g,! -b1001011110111111001100010 w,! -b00000100010010011111000000010011011011110101100110001111001001110001100100101110010101000100010111111001100100111110010110000010 !-! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 11! -1w4! -1!5! -b010011101000101001001101101101100100010110111000101000 15! -b100101111011111100110001000000100010010011111000000010011011011110101100110001111001001110001100100101110010101000100010111111001100100111110010110000010 I5! -b1011 y5! -b1100 #6! -b0110010010111010 +6! -b100000110011111001001111011110001011000010100000111011101010010110010000100011001000111011110101110011101111110000011110 36! -b01110011101100010010010000111001001110010110010000100100110111100000110000111111000011011011110001010100111100010111001001000011 S6! -b101111100111100011110001111010000100000001 s6! -b10111100011001001011101010000011001111100100111101111000101100001010000011101110101001011001000010001100100011101111010111001110111111000001111001110011101100010010010000111001001110010110010000100100110111100000110000111111000011011011110001010100111100010111001001000011101111100111100011110001111010000100000001 =7! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 A9! -b0000000000000000000000000000000000000000000000100110011110011010101101110000 -?! -b0010100000001101010010000010100101000101111010101010100111001100110110000011 E?! -b0010110100000101111110101011101011110100000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100000000000000000000000000000000 e?! -b1110011000001101001001100010110001010011011101001000111011100100011010010011000100001010101010011110101011111100001010101011111100101110100010101101001011000000001110100110101100011010001110101011111 ?@! -b1011101011001011100101111 )A! -b0011000100101000011100010101 9A! -b1100111000101101000110001 IA! -b11001011001101110110000101110111111011101001111000110101001011101001011001001111100100000001000110001100111000110000110001011110 QA! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 aE! -1II! -b101110101100101110010111100011000100101000011100010101 aI! -b110011100010110100011000111001011001101110110000101110111111011101001111000110101001011101001011001001111100100000001000110001100111000110000110001011110 yI! -b1000 KJ! -b0010 SJ! -b1000110110110001 [J! -b111110001101010001101011010110001010000001010010111110010001110100001111011100101010010111000001110111011001110011001100 cJ! -b10110010101001000110001000010000000001110110101010011100001101111101110001011100011110001010011110101011001010010011100000011111 %K! -b000100011101010000110011001100010111000111 EK! -b10000010100011011011000111111000110101000110101101011000101000000101001011111001000111010000111101110010101001011100000111011101100111001100110010110010101001000110001000010000000001110110101010011100001101111101110001011100011110001010011110101011001010010011100000011111000100011101010000110011001100010111000111 mK! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 qM! -b0000000000000000000000000000000000000000000000110110001100011111011011101110 ]S! -b1000011100001001100111001010000111100111001010001111001010000101101110010000 uS! -b0000101100000110010001110111100000000010000101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100000000000000000000000000000 7T! -b1000011111100011011111101011101101101001101100101000011001001110011101011111111101001101000001000101111100011010111000101111101100101010001111000011000011100101001110101011110000011101011010111111111 oT! -b0110011111001110111001101 YU! -b0101110000000011000010101110 iU! -b1100101011111010011000111 yU! -b10010111111010000010011001001000001011010001010010110111011001001010100111001001011001100111100110000111011010000110111000110010 #V! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 3Z! -1#^! -b011001111100111011100110100101110000000011000010101110 3^! -b110010101111101001100011110010111111010000010011001001000001011010001010010110111011001001010100111001001011001100111100110000111011010000110111000110010 K^! -b0100 {^! -b0011 %_! -b1010010101011110 -_! -b110101010011000100111110110001111101100001011010011100110100011110001001101011001111110100011100011011000101000100110110 5_! -b01100010001101000110111101101000101101000010101110101000110000000011100011100000111001010101010011001011000101111000011001111010 U_! -b000000101101011001101110100100000011011010 u_! -b01000011101001010101111011010101001100010011111011000111110110000101101001110011010001111000100110101100111111010001110001101100010100010011011001100010001101000110111101101000101101000010101110101000110000000011100011100000111001010101010011001011000101111000011001111010000000101101011001101110100100000011011010 ?`! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Cb! -b0000000000000000000000000000000000000000000010001010010010110010010101100111 /h! -b1010000110001101101100001111111001001010110110010001100010001011101001101101 Gh! -b0011110110010001100011110111110011101000000010101000111000101110010111100011001000100101001101010110101100111110011111001000000000100010111100010100100101100100101011001110000000000000000000000000000 gh! -b0111110000110111111111111011110000000000001111010111000001010011001011010111000011110100001000000101000000101000001001000001100010110000100000011101100110100101010100110111110100100100111111000011010 Ai! -b0111001011100101110010101 +j! -13j! -b0011010011111101110111101000 ;j! -b1001010010110101110001000 Kj! -b01010100010110011000010110011111101010010100110010010111111001100110111010010100000111010000010000101110101111001101000101101000 Sj! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 cn! -1Kr! -1Sr! -b011100101110010111001010110011010011111101110111101000 cr! -b100101001011010111000100001010100010110011000010110011111101010010100110010010111111001100110111010010100000111010000010000101110101111001101000101101000 {r! -b1110 Ms! -b1001 Us! -b1100110011001100 ]s! -b111100101001000011001010101010111101000111011110001110111010110001101111101010001110001011001100101110010001000001101011 es! -b00011100010111010111111001001000000110101101010001010001010101101110001101010000100111110010011000000001100110010011000101101011 't! -b001010101111000110011001110000110111111001 Gt! -b11101001110011001100110011110010100100001100101010101011110100011101111000111011101011000110111110101000111000101100110010111001000100000110101100011100010111010111111001001000000110101101010001010001010101101110001101010000100111110010011000000001100110010011000101101011001010101111000110011001110000110111111001 ot! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sv! -b0000000000000000000000000000000000000000000011001010001001011100100001011011 _|! -b1110110011010111000110010100111110110110111110000110001000100010000010110010 w|! -b0010001101101001001000010110000010110100000101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110110000000000000000000000000000 9}! -b1111000010000101010100010011000010010101111101010011110011110010011001101100100001111011110101011100110101101111101110010100110010110001010101001000010010000011111101011001110010011100101110110110100 q}! -b1001000101111000011010010 [~! -1c~! -b1011101010001100111101001111 k~! -b1000001100001000010011101 {~! -b00001010001101010000010001111110010111000111100011110111111111100001011010011111111011110011010110001011010110100011110010011110 %!" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 5%" -1%)" -b100100010111100001101001011011101010001100111101001111 5)" -b100000110000100001001110100001010001101010000010001111110010111000111100011110111111111100001011010011111111011110011010110001011010110100011110010011110 M)" -b1110 '*" -b1111100110001000 /*" -b000010111101110111100101001100010011110111101001110011111111011011100111000101010000100001100101010000011110010011010010 7*" -b01001001110110001101010001010110001110101001000000001001001011000110001101010010001000111010000111010000010100010100110011000010 W*" -b010000000101100000101111010001101111000011 w*" -b00001110111110011000100000001011110111011110010100110001001111011110100111001111111101101110011100010101000010000110010101000001111001001101001001001001110110001101010001010110001110101001000000001001001011000110001101010010001000111010000111010000010100010100110011000010010000000101100000101111010001101111000011 A+" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 E-" -b0000000000000000000000000000000000000000000000010100110100001010101000000110 13" -b1100010001011111111110110101111001000010010110100110100100100111101000100111 I3" -b0010100010000101100011011101001001000100000111111110101000101011010000100111011100010111000111110101011000010001101111101001110001111001011000101001101000010101010000001100000000000000000000000000000 i3" -b0111101001000011110100100001000100011110000100000111001010101110000101100000010010010100001000110100101010101100001101010110111110111110000100010101111001110000011111000011001000001000111100111000100 C4" -b1110010001011010011110100110111101100101111011011011001100101100010000000110100011010000010001100001001100111111011010101100101100101010001011011000001001100111100011111000101011110101100010011110111111000101111001011110011010010110 Q?" -b0000000000000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 3@" -0-A" -b01100101100101110011100001110111 iC" -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 qC" -b0101111001010011 CD" -b001010101111100111010 [D" -b0010101011111001110100000 ]E" -b111011110110001111000011101011000101100110001100001100 cH" -b000010010100100110011000010101100001000011110000001100 sH" -0=I" -b010010001101110100011111110101010111100000010110101011000001101110100110001011001001011111110000001101111001000011010110100111011001101100000011011111010 ;P" -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 cP" -0EQ" -b11110111001001110101100101111101010101101100100011000011111111101110011001000010101001100101110010011011001010100110101110101000000101001010110110010011100011110001111100101011101100111101111001010101110001000110100010110001100001110001101101000111011000110001011011100001001011011110101011100101011011000110100111 MY" -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 ?Z" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Q[" -b00000000000000000000000000000100 Sd" -b00000000000000000000000000000100 [d" -b00010111100101001100101010111110011101000110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 cd" -b0000000000000000000000000000000000000000000000000000000000000000000001100101100101110011100001110111001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110010101011111001110100001011110010100110000000000000000000000000000000000000000000000000 5e" -b0011000101101010001000101001010110101100000010101011110011100001110100101101 }m" -b0011010010101110011011000011001101010010100010100111010010101010100110110111111101010000101101001001010000011111111100001001000111110110001101100100001100010001110101001001011101110111100100000101111 =q" -b01000010011101000111010011110101 -u" -b10011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 5u" -b1000010010011011 eu" -b010010000010011001001 }u" -b0100100000100110010010000 !w" -b110010001001111100011001101000100010000110111011011111 'z" -b000010010100100110011000010101100001000011110000001100 7z" -0_z" -b110101011001101001010010000100001001101011010010011111000010001000100100001101110011100110111100101110111010000111011101000011111000001110100101101011110 ]## -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 '$# -b01110111101111010101111010000111001011110100100010010110010101011011000100100001111011011000101011100110100101000010101101001000100001110110110010010110010010010011000010011100001001101010111111101101100100101110101001010111001000000001010000010011110000101111111001110001101011011101011110001101011000011000010010 o,# -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 a-# -0k.# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 s.# -b00000000000000000000000000000100 u7# -b00000000000000000000000000000100 }7# -b00100001001001101101001000001001100100110011110101011011000010001101110101001011101010011111011100100100110111010100000110010000100101101000010011101000111010011110101 '8# -b0000000000000000000000000000000000000000000000000000000000000000000001000010011101000111010011110101100111101010110110000100011011101010010111010100111110111001001001101110101000001100100001001011010000100111010001110100111101010100100000100110010010010000100100110110000000000000000000000000000000000000000000000000 W8# -b0111111110000111010001101001010110000000010000110010110101100000100000000100 AA# -0+B# -b1110100011001000110000001110110001010110111101110011011000000110010111111111110000000000000101110011000001111000010111010110010001001111101111011010010110101111101111101000010000111001100001001001011 _D# -0+F# -b10111001101101001000110011111100 OH# -b01000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 WH# -b1000111100100010 )I# -b001101110110100011110 AI# -b0011011101101000111100000 CJ# -b010010100100001110100111011111010101101100011000001000 IM# -b000010010100100110011000010101100001000011110000001100 YM# -0#N# -b001100000010010111110011010101000000001100100010101111000010001011100110010001000110111101110010110011010000111101000100111001111011111100010000101001000 !U# -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 IU# -b00110110001110001000011001011010111110001010111101011111111000001110011000001110100010111110111010010100111010101001000101011000001011010000001110101110111011001110100101011000111110000100010100101100001001000111011110110101001010100101100011101101101010100110001111001010111100000001111011010010011100100001100011 3^# -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 %_# -0/`# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 7`# -b00000000000000000000000000000100 9i# -b00000000000000000000000000000100 Ai# -b00100011110010001000110111011010001111001000111010100001100010101110110010100111100001000110101101010111100110000010011011101110100111110111001101101001000110011111100 Ii# -b0000000000000000000000000000000000000000000000000000000000000000000010111001101101001000110011111100010001110101000011000101011101100101001111000010001101011010101111001100000100110111011101001111101110011011010010001100111111000011011101101000111100010001111001000100000000000000000000000000000000000000000000000000 yi# -b0101100100110111110000010111110000100101001000001011000100000100110101110010 cr# -0Ms# -b0001111110010100011010001111000010101000000101000101000110111010011011101110001101001001111001000010010101111001011110101110100110110100000010010011100000011000110110100110001100011010100101101101111 #v# -0Mw# -b00100110011110011010101101110000 qy# -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 yy# -b1011010000010111 Kz# -b111010101110101111010 cz# -b1110101011101011110100000 e{# -b010011101000101001001101101101100100010110111000101000 k~# -b000010010100100110011000010101100001000011110000001100 {~# -b100101111011111100110001000000100010010011111000000010011011011110101100110001111001001110001100100101110010101000100010111111001100100111110010110000010 C($ -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 k($ -0M)$ -b10111100011001001011101010000011001111100100111101111000101100001010000011101110101001011001000010001100100011101111010111001110111111000001111001110011101100010010010000111001001110010110010000100100110111100000110000111111000011011011110001010100111100010111001001000011101111100111100011110001111010000100000001 U1$ -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 G2$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Y3$ -b00000000000000000000000000000100 [<$ -b00000000000000000000000000000100 c<$ -b00101101000001011111101010111010111101011000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 k<$ -b0000000000000000000000000000000000000000000000000000000000000000000000100110011110011010101101110000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100001110101011101011110100010110100000101110000000000000000000000000000000000000000000000000 ==$ -b0010100000001101010010000010100101000101111010101010100111001100110110000011 'F$ -b1110011000001101001001100010110001010011011101001000111011100100011010010011000100001010101010011110101011111100001010101011111100101110100010101101001011000000001110100110101100011010001110101011111 EI$ -b00110110001100011111011011101110 5M$ -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 =M$ -b0010110000011001 mM$ -b000111011110000000001 'N$ -b0001110111100000000010000 )O$ -b101110101100101110010111100011000100101000011100010101 /R$ -b000010010100100110011000010101100001000011110000001100 ?R$ -0gR$ -b110011100010110100011000111001011001101110110000101110111111011101001111000110101001011101001011001001111100100000001000110001100111000110000110001011110 eY$ -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 /Z$ -0oZ$ -b10000010100011011011000111111000110101000110101101011000101000000101001011111001000111010000111101110010101001011100000111011101100111001100110010110010101001000110001000010000000001110110101010011100001101111101110001011100011110001010011110101011001010010011100000011111000100011101010000110011001100010111000111 wb$ -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 ic$ -0sd$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 {d$ -b00000000000000000000000000000100 }m$ -b00000000000000000000000000000100 'n$ -b00001011000001100100011101111000000000110110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 /n$ -b0000000000000000000000000000000000000000000000000000000000000000000000110110001100011111011011101110101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100001110111100000000010000101100000110010000000000000000000000000000000000000000000000000 _n$ -b1000011100001001100111001010000111100111001010001111001010000101101110010000 Iw$ -03x$ -b1000011111100011011111101011101101101001101100101000011001001110011101011111111101001101000001000101111100011010111000101111101100101010001111000011000011100101001110101011110000011101011010111111111 gz$ -03|$ -b10001010010010110010010101100111 W~$ -b01010100011100010111001011110001100100010010100110101011010110011111001111100100000000010001011110001010010010110010010101100111 _~$ -b1111011001000110 1!% -b001111011111001110100 I!% -b0011110111110011101000000 K"% -b011001111100111011100110100101110000000011000010101110 Q%% -b000010010100100110011000010101100001000011110000001100 a%% -b110010101111101001100011110010111111010000010011001001000001011010001010010110111011001001010100111001001011001100111100110000111011010000110111000110010 )-% -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 Q-% -03.% -b01000011101001010101111011010101001100010011111011000111110110000101101001110011010001111000100110101100111111010001110001101100010100010011011001100010001101000110111101101000101101000010101110101000110000000011100011100000111001010101010011001011000101111000011001111010000000101101011001101110100100000011011010 ;6% -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 -7% -078% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ?8% -b00000000000000000000000000000100 AA% -b00000000000000000000000000000100 IA% -b00111101100100011000111101111100111010001010100011100010111001011110001100100010010100110101011010110011111001111100100000000010001011110001010010010110010010101100111 QA% -b0000000000000000000000000000000000000000000000000000000000000000000010001010010010110010010101100111010101000111000101110010111100011001000100101001101010110101100111110011111001000000000100010111100010100100101100100101011001110011110111110011101000011110110010001100000000000000000000000000000000000000000000000000 #B% -b1010000110001101101100001111111001001010110110010001100010001011101001101101 kJ% -b0111110000110111111111111011110000000000001111010111000001010011001011010111000011110100001000000101000000101000001001000001100010110000100000011101100110100101010100110111110100100100111111000011010 +N% -b11001010001001011100100001011011 yQ% -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 #R% -b1000110110100100 SR% -b100001011000001011010 kR% -b1000010110000010110100000 mS% -b011100101110010111001010110011010011111101110111101000 sV% -b000010010100100110011000010101100001000011110000001100 %W% -0MW% -b100101001011010111000100001010100010110011000010110011111101010010100110010010111111001100110111010010100000111010000010000101110101111001101000101101000 K^% -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 s^% -0U_% -b11101001110011001100110011110010100100001100101010101011110100011101111000111011101011000110111110101000111000101100110010111001000100000110101100011100010111010111111001001000000110101101010001010001010101101110001101010000100111110010011000000001100110010011000101101011001010101111000110011001110000110111111001 ]g% -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 Oh% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ai% -b00000000000000000000000000000100 cr% -b00000000000000000000000000000100 kr% -b00100011011010010010000101100000101101010111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 sr% -b0000000000000000000000000000000000000000000000000000000000000000000011001010001001011100100001011011101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110111000010110000010110100010001101101001000000000000000000000000000000000000000000000000000 Es% -b1110110011010111000110010100111110110110111110000110001000100010000010110010 /|% -0w|% -b1111000010000101010100010011000010010101111101010011110011110010011001101100100001111011110101011100110101101111101110010100110010110001010101001000010010000011111101011001110010011100101110110110100 M!& -0w"& -b00010100110100001010101000000110 =%& -b11111111010100010101101000010011101110001011100011111010101100001000110111110100111000111100101100010100110100001010101000000110 E%& -b1010001000010110 u%& -b001101110100100100010 /&& -b0011011101001001000100000 1'& -b100100010111100001101001011011101010001100111101001111 7*& -b000010010100100110011000010101100001000011110000001100 G*& -0o*& -b100000110000100001001110100001010001101010000010001111110010111000111100011110111111111100001011010011111111011110011010110001011010110100011110010011110 m1& -b111000100000110110011100001101001001111011101101110101010110111111111100110110011011011010011011111001111001000011011001101001010111111001100110010011000 72& -b00001110111110011000100000001011110111011110010100110001001111011110100111001111111101101110011100010101000010000110010101000001111001001101001001001001110110001101010001010110001110101001000000001001001011000110001101010010001000111010000111010000010100010100110011000010010000000101100000101111010001101111000011 !;& -b00000001010011001000101110011010100001000001100111011110111001000011100011101011000010000000111010101000011100110100110100101000111100101111100010010100010111111111111000100101001101010111100111100011110001100011100111101001111101001110100111010110100011100000010010111000100010100000101101101001001100010000001111 q;& -0{<& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 %=& -b00000000000000000000000000000100 'F& -b00000000000000000000000000000100 /F& -b00101000100001011000110111010010010001011111111010100010101101000010011101110001011100011111010101100001000110111110100111000111100101100010100110100001010101000000110 7F& -b0000000000000000000000000000000000000000000000000000000000000000000000010100110100001010101000000110111111110101000101011010000100111011100010111000111110101011000010001101111101001110001111001011000101001101000010101010000001100011011101001001000100010100010000101100000000000000000000000000000000000000000000000000 gF& -b1100010001011111111110110101111001000010010110100110100100100111101000100111 QO& -0;P& -b0111101001000011110100100001000100011110000100000111001010101110000101100000010010010100001000110100101010101100001101010110111110111110000100010101111001110000011111000011001000001000111100111000100 oR& -0;T& -1CT& -b110001011010100010001010010101101011000000 /V& -b1011101110111100100000101111 CX& -#4 -0CT& -#5 -b0000000000000000000000000000000000000000000001100101100101110011100001110111 7n" -b0001011110010100110010101011111001110100000001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110000000000000000000000000000 uq" -b0000000000000000000000000000000000000000000001000010011101000111010011110101 YA# -b0010000100100110110100100000100110010010000100111101010110110000100011011101010010111010100111110111001001001101110101000001100100001001011010000100111010001110100111101010000000000000000000000000000 9E# -b0000000000000000000000000000000000000000000010111001101101001000110011111100 {r# -b0010001111001000100011011101101000111100000010001110101000011000101011101100101001111000010001101011010101111001100000100110111011101001111101110011011010010001100111111000000000000000000000000000000 [v# -b0000000000000000000000000000000000000000000000100110011110011010101101110000 ?F$ -b0010110100000101111110101011101011110100000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100000000000000000000000000000000 }I$ -b0000000000000000000000000000000000000000000000110110001100011111011011101110 aw$ -b0000101100000110010001110111100000000010000101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100000000000000000000000000000 A{$ -b0000000000000000000000000000000000000000000010001010010010110010010101100111 %K% -b0011110110010001100011110111110011101000000010101000111000101110010111100011001000100101001101010110101100111110011111001000000000100010111100010100100101100100101011001110000000000000000000000000000 cN% -b0000000000000000000000000000000000000000000011001010001001011100100001011011 G|% -b0010001101101001001000010110000010110100000101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110110000000000000000000000000000 '"& -b0000000000000000000000000000000000000000000000010100110100001010101000000110 iO& -b0010100010000101100011011101001001000100000111111110101000101011010000100111011100010111000111110101011000010001101111101001110001111001011000101001101000010101010000001100000000000000000000000000000 IS& -1CT& -#6 -b00000100000010000010000000000001 # -b0001 C -b0010 E! -b1000 e! -b0100 G" -b10100110 )# -b00011111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 ;$ -1-% -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 ?& -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 C( -b00101111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 G* -19+ -b10001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 K, -1=- -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 O. -b01001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 S0 -1E1 -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 W2 -1i3 -1#4 -1k4 -1%5 -1-5 -1E5 -1m5 -1'6 -0CT& -b1111 ST& -b1111 [T& -b1111111111111111 cT& -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 kT& -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 -U& -b000000000000000000000000000000000011111111 MU& -#7 -b0001 GV -b1111 OV -b1111111111111111 WV -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 _V -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 !W -b000000000000000000000000000000000011111111 AW -0QW -1YW -b0001 aW -b00011111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 iW -1[X -b0010 y5! -b1111 #6! -b1111111111111111 +6! -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 36! -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 S6! -b000000000000000000000000000000000011111111 s6! -0%7! -1-7! -b0010 57! -b00101111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 =7! -1/8! -b1111 SJ! -b1111111111111111 [J! -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 cJ! -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 %K! -b000000000000000000000000000000000011111111 EK! -0UK! -1]K! -b1000 eK! -b10001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 mK! -1_L! -b0100 Ms! -b1111 Us! -b1111111111111111 ]s! -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 es! -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 't! -b000000000000000000000000000000000011111111 Gt! -0Wt! -1_t! -b0100 gt! -b01001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 ot! -1au! -0GR" -b0001 WR" -b00011111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 _R" -b00011111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 ?Z" -b001 1[" -1I[" -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 a-# -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 %_# -0O*$ -b0001 _*$ -b00101111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 g*$ -b00101111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 G2$ -b001 93$ -1Q3$ -0q[$ -b0001 #\$ -b10001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 +\$ -b10001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 ic$ -b001 [d$ -1sd$ -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 -7% -0W`% -b0001 g`% -b01001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 o`% -b01001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 Oh% -b001 Ai% -1Yi% -b00001111111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001000110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111000000000000000000000000000000000011111111 q;& -1CT& -#8 -b00010000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 ;$ -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 ?& -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 C( -b00100000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 G* -b10000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 K, -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 O. -b01000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 S0 -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 W2 -0CT& -b0000 [T& -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 -U& -#9 -1mM -0uM -1}M -b010010001000100010001000100010 ?N -b11111111111111111111111111111111 GN -1qO -1#P -b0100100010001000100010001 +P -b10 3P -b11111111111111111111111111111111 ;P -b0000000000000000000000000000000000111111111111100 cP -1sP -b0000 OV -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 !W -0YW -b00010000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 iW -0[X -b00011010010001000100010001000110111111111111111111111111111111110000000000000000000000000000000000111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sX -1A-! -0I-! -1Q-! -b01 Y-! -b1111 i-! -b101110111011101110111011101100 q-! -b00010001000100010001000100010001 y-! -1E/! -1U/! -b1011101110111011101110111 ]/! -b00010001000100010001000100010001 m/! -b0000000000000000000000000000000000111111111111101 70! -1G0! -b0000 #6! -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 S6! -0-7! -b00100000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 =7! -0/8! -b0010 78! -b00011101110111011101110111011100000100010001000100010001000100010000000000000000000000000000000000111111111111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 G8! -1qA! -0yA! -1#B! -b11 +B! -13B! -b1111 ;B! -b010001000100010001000100110011 CB! -b00110011001100110011001100110011 KB! -1uC! -1'D! -b0100010001000100010001001 /D! -b11 7D! -b00110011001100110011001100110011 ?D! -b0000000000000000000000000000000000111111111111111 gD! -1wD! -b0000 SJ! -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 %K! -0]K! -b10000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 mK! -0_L! -b1000 gL! -b00011010001000100010001000100111001100110011001100110011001100110000000000000000000000000000000000111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 wL! -1sj! -0{j! -1%k! -b10 -k! -b1111 =k! -b011101110111011101110111011010 Ek! -b00100010001000100010001000100010 Mk! -1wl! -1)m! -b0111011101110111011101110 1m! -b10 9m! -b00100010001000100010001000100010 Am! -b0000000000000000000000000000000000111111111111110 im! -1ym! -b0000 Us! -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 't! -0_t! -b01000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 ot! -0au! -b0100 iu! -b00011011101110111011101110111010001000100010001000100010001000100000000000000000000000000000000000111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 yu! -b000000000000000000000000000000000011111111 uA" -b0001 MQ" -b1111 UQ" -b1111111111111111 ]Q" -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 eQ" -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 'R" -0OR" -b00010000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 iR" -b10110000101011011100100110111011101111101100010010011110011011110110101101010101110110101100110110100101100011110111000001110100110000111101100000110100000000111010110100110010111001010001010101010100100001000011101110000010100100101100110011010010100110011111111100010011101010111011111000011110111000100100000011 MY" -b00010000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 ?Z" -b010 1[" -b001 9[" -b010 A[" -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 a-# -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 %_# -b000000000000000000000000000000000011111111 }w# -b0010 U)$ -b1111111111111111 e)$ -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 m)$ -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 /*$ -0W*$ -b00100000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 q*$ -b00100100101101001110011011000011110100111001001111100001110101011010001010011000101010101100100110111010110100101101001110010010000000000010110011110101010100100000010100010000001011110101000011101101000111001100000101101000011101110011010110111010000111010001100100111010111101011000010101001100011111111011111010 U1$ -b00100000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 G2$ -b010 93$ -b001 A3$ -b010 I3$ -b000000000000000000000000000000000011111111 AK$ -b1000 wZ$ -b1111 ![$ -b1111111111111111 )[$ -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 1[$ -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 Q[$ -0y[$ -b10000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 5\$ -b01010010000001011101011011001101010000110100011101010110001111011011010001000000110000011000111110001111111010011001100001111111110001001100011110100010000011011111001000000101111001000010001001110100001001001101001001000110111110000110100100111101101001100100100100111010000010000111110000010101101111110100001011 wb$ -b10000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 ic$ -b010 [d$ -b001 cd$ -b010 kd$ -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 -7% -b000000000000000000000000000000000011111111 'P% -b0100 ]_% -b1111 e_% -b1111111111111111 m_% -b010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 u_% -b00110011001100110011001100110011001000100010001000100010001000100001000100010001000100010001000111111111111111111111111111111111 7`% -0_`% -b01000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 y`% -b01000001010001110010101010101001101101010110001010110000011100010011101101111011100110011011000110101001111100101001100101101110011010111011001010100101010111000111111001010101011111000001001000001101101010001011001011011110100011011111110110100111011111000010111010100010001010000011001010001000110010111001000100 ]g% -b01000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 Oh% -b010 Ai% -b001 Ii% -b010 Qi% -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 q;& -1CT& -#10 -b00000000000000000000000000000000 # -b0000 C -b0000 E! -b0000 e! -b0000 G" -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 ;$ -0-% -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 G* -09+ -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 K, -0=- -b00000000111111111111111101000100010001000100010011001101110111011101110111011101101010111011101110111011101110110001001000100010001000100010001011100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010000000000000000000000000000000000011111111 S0 -0E1 -0i3 -0#4 -0k4 -0%5 -0-5 -0E5 -0m5 -0'6 -0CT& -b0000 ST& -#11 -0mM -1uM -0}M -1aO -0qO -0#P -b0000000000000000000000000 +P -b00 3P -b00000000000000000000000000000000 ;P -b0000000000000000000000000000000000000000000000000 cP -0sP -1-Q -b0100100010001000100010001 5Q -b10 =Q -b11111111111111111111111111111111 EQ -b0000000000000000000000000000000000111111111111100 MQ -b11111100010101100110011000111100 7R -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 ?R -b010111000111100010010 _R -1gR -b0011010000110110 wR -b000000000000000000000000000000000011111111 !S -19S -b1111 AS -1yS -b0100100010001000100010001 3T -1;T -1YW -1[X -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sX -b0001 UY -b11111111111111111111111111111111 eY -b10 /Z -b0011010000110110 GZ -b010111000111100010010 OZ -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 WZ -b0011010000110110 )[ -b010111000111100010010 1[ -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 9[ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 q[ -b010010001000100010001 K\ -1c\ -1s\ -b00001101000011011001011100011110001001001001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 M] -b0000000010100100010001000100010001101111111111111111111111111111111111111100010101100110011000111100010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010101110001111000100101000110100001101100000000000000000000000000000000000111111111111100 }] -0A-! -1I-! -0Q-! -b00 Y-! -b010010001000100010001000100010 q-! -b11111111111111111111111111111111 y-! -15/! -0E/! -0U/! -b0000000000000000000000000 ]/! -b00000000000000000000000000000000 m/! -b0000000000000000000000000000000000000000000000000 70! -0G0! -1_0! -b1011101110111011101110111 g0! -b00010001000100010001000100010001 w0! -b0000000000000000000000000000000000111111111111101 !1! -b00111001001000110011101110010111 i1! -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 q1! -b011111101011001000000 32! -1;2! -b0111000110111001 K2! -b000000000000000000000000000000000011111111 S2! -b01 c2! -1k2! -b1111 s2! -1M3! -b1011101110111011101110111 e3! -1m3! -1-7! -1/8! -b0001 78! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 G8! -b0111 )9! -b00010001000100010001000100010001 99! -b0111000110111001 y9! -b011111101011001000000 #:! -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 +:! -b0111000110111001 [:! -b011111101011001000000 c:! -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 k:! -b00010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001 E;! -b101110111011101110111 };! -17! -b0100000000000000000000000000000000001111111100111001001000110011101110010111 -?! -b0001110001101110010111111010110010000000111000111110100011101000011011111011111011110101101000000110010001000111001001100110001100000001100001110010010001100111011100101110000000000000000000011111111 e?! -1qA! -0yA! -1#B! -b11 +B! -03B! -b010001000100010001000100110011 CB! -b11100100010001000100010001000100 KB! -0eC! -1uC! -1'D! -b0100010001000100010001001 /D! -b11 7D! -b11100100010001000100010001000100 ?D! -b0000000000000000000000000000000000111111110111111 gD! -01E! -b0000000000000000000000000 9E! -b00 AE! -b00000000000000000000000000000000 IE! -b0000000000000000000000000000000000000000000000000 QE! -b00110110001100011111011011101110 ;F! -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 CF! -b000111011110000000001 cF! -0kF! -b0010110000011001 {F! -b000000000000000000000000000000000000000000 %G! -b00 5G! -0=G! -b0000 EG! -1uG! -0}G! -b0000000000000000000000000 7H! -0?H! -1_H! -1gH! -1)I! -b1001 KJ! -b1010 SJ! -b1100010100100000 [J! -b101011100001100000000110001010111101011111111000001100011101001111001110110010110011110100110000110110000000001011111001 cJ! -b10011000111000010010010010111111010110101010111101110101100110111110011011001010011011111001111000010100000100000000111100101011 %K! -b100110000110011011010101011101111111111010 EK! -1UK! -0]K! -b0000 eK! -b10011010110001010010000010101110000110000000011000101011110101111111100000110001110100111100111011001011001111010011000011011000000000101111100110011000111000010010010010111111010110101010111101110101100110111110011011001010011011111001111000010100000100000000111100101011100110000110011011010101011101111111111010 mK! -0_L! -b1000 gL! -b00001010001000100010001000100111111001000100010001000100010001000000000000000000000000000000000000111111110111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 wL! -b0000 YM! -b00000000000000000000000000000000 iM! -b00 3N! -b0010110000011001 KN! -b000111011110000000001 SN! -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 [N! -b0010110000011001 -O! -b000111011110000000001 5O! -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 =O! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 uO! -b000000000000000000000 OP! -0gP! -0wP! -b00001011000001100100011101111000000000110110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 QQ! -b0000000000000000000000000000000000000000000000000000000000000000000000110110001100011111011011101110101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100001110111100000000010000101100000110010000000000000000000000000000000000000000000000000 #R! -1-S! -b1100000000000000000000000000000000001111111100000001101001100010011100100111 ]S! -b0001101101010111001000011010011010100011001000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100110000000000000000000011111111 7T! -1sj! -0{j! -1%k! -b10 -k! -05k! -b011101110111011101110111011010 Ek! -b11001101110111011101110111011101 Mk! -0gl! -1wl! -1)m! -b0111011101110111011101110 1m! -b10 9m! -b11001101110111011101110111011101 Am! -b0000000000000000000000000000000000111111110111110 im! -03n! -b0000000000000000000000000 ;n! -b00 Cn! -b00000000000000000000000000000000 Kn! -b0000000000000000000000000000000000000000000000000 Sn! -b11001010001001011100100001011011 =o! -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 Eo! -b100001011000001011010 eo! -0mo! -b1000110110100100 }o! -b000000000000000000000000000000000000000000 'p! -b00 7p! -0?p! -b0000 Gp! -1wp! -0!q! -b0000000000000000000000000 9q! -0Aq! -1aq! -1iq! -1+r! -b1111 Ms! -b0101 Us! -b1011100100111011 ]s! -b000110001111101100110110000100000111110110101011100000010001001101111010101000110111100110100000011001111011000111011110 es! -b01010111111101011011110000001001111100010000101110001101011110001011111111100111000111000101000110000010110011110111010111001101 't! -b100001111100100000000110110001101011111011 Gt! -1Wt! -0_t! -b0000 gt! -b11110101101110010011101100011000111110110011011000010000011111011010101110000001000100110111101010100011011110011010000001100111101100011101111001010111111101011011110000001001111100010000101110001101011110001011111111100111000111000101000110000010110011110111010111001101100001111100100000000110110001101011111011 ot! -0au! -b0100 iu! -b00001011101110111011101110111010110011011101110111011101110111010000000000000000000000000000000000111111110111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 yu! -b0000 [v! -b00000000000000000000000000000000 kv! -b00 5w! -b1000110110100100 Mw! -b100001011000001011010 Uw! -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 ]w! -b1000110110100100 /x! -b100001011000001011010 7x! -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 ?x! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 wx! -b000000000000000000000 Qy! -0iy! -0yy! -b00100011011010010010000101100000101101010111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 Sz! -b0000000000000000000000000000000000000000000000000000000000000000000011001010001001011100100001011011101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110111000010110000010110100010001101101001000000000000000000000000000000000000000000000000000 %{! -1/|! -b1000000000000000000000000000000000001111111101010010011111100000100110001000 _|! -b0011010111110100000111011111011100000011110100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110000000000000000000011111111 9}! -b0100100010001000100010001 =5" -b1011101110111011101110111 W6" -b0100010001000100010001001 !7" -b0111011101110111011101110 q7" -b000000000000000000000000000000000011111111 )C" -19C" -b1111 AC" -1QC" -b10 YC" -b11111111111111111111111111111111 aC" -b11111100010101100110011000111100 iC" -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 qC" -13D" -b0011010000110110 CD" -b0000000000000000000000000000000000111111111111100 KD" -b010111000111100010010 [D" -b0101110001111000100100001 ]E" -b0000000000000000000011111111 eE" -b0001 MQ" -b0000 UQ" -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 'R" -1GR" -0OR" -b0000 WR" -b00000001101101010001101000010100111111011111100000010101100110100010001111111110011000101100111010000001100110000111001000110111110111011111110111100111011111110011110101111110110110010110011010001011101111010111101011111001100111011011011110001100100011101100111001010100101101010101110101001100010111100000100010 MY" -b010 9[" -b011 A[" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Q[" -b0000000000000000 )c" -b00001101000011011001011100011110001001001001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 cd" -b0000000010100100010001000100010001101111111111111111111111111111111111111100010101100110011000111100010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010101110001111000100101000110100001101100000000000000000000000000000000000111111111111100 5e" -b01 )y# -b000000000000000000000000000000000011111111 1y# -1Ay# -b1111 Iy# -1Yy# -b00010001000100010001000100010001 iy# -b00111001001000110011101110010111 qy# -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 yy# -1;z# -b0111000110111001 Kz# -b0000000000000000000000000000000000111111111111101 Sz# -b011111101011001000000 cz# -b0111111010110010000000111 e{# -b0000000000000000000011111111 m{# -b0010 U)$ -b0000 ])$ -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 /*$ -1O*$ -0W*$ -b0000 _*$ -b01111000111111110101110110000101110111101111110101000000000110110101101100101110111000101011011100000110011111101010001100111000011010101001101000011100010100100001000111010101010101011011111101111110000011001001110001101101001010111100111000011010010001100101111011010010111100100010000111010000100001111110100110 U1$ -b010 A3$ -b011 I3$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Y3$ -b0000000000000000 a;$ -b00011100011011100101111110101100100000000011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 k<$ -b0000000011011101110111011101110111000001000100010001000100010001000100111001001000110011101110010111000111110100011101000011011111011111011110101101000000110010001000111001001100110001100000001100001110010010001100111011100101110111111010110010000001001110001101110010000000000000000000000000000000000111111111111101 ==$ -b11 KL$ -b000000000000000000000000000000000011111111 SL$ -1cL$ -b1111 kL$ -1{L$ -b11 %M$ -b00110011001100110011001100110011 -M$ -b00000001101001100010011100100111 5M$ -b00000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 =M$ -1]M$ -b0110110101011100 mM$ -b0000000000000000000000000000000000111111111111111 uM$ -b100001101001101010001 'N$ -b1000011010011010100011001 )O$ -b0000000000000000000011111111 1O$ -b1000 wZ$ -b0000 ![$ -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 Q[$ -1q[$ -0y[$ -b0000 #\$ -b10011010110001010010000010101110000110000000011000101011110101111111100000110001110100111100111011001011001111010011000011011000000000101111100110011000111000010010010010111111010110101010111101110101100110111110011011001010011011111001111000010100000100000000111100101011100110000110011011010101011101111111111010 wb$ -b010 cd$ -b011 kd$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 {d$ -b0000000000000000 5m$ -b00011011010101110010000110100110101000100000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 /n$ -b0000000010100010001000100010001001110011001100110011001100110011001100000001101001100010011100100111000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100111000011010011010100011001101101010111000000000000000000000000000000000000111111111111111 _n$ -b10 1Q% -b000000000000000000000000000000000011111111 9Q% -1IQ% -b1111 QQ% -1aQ% -b10 iQ% -b00100010001000100010001000100010 qQ% -b01010010011111100000100110001000 yQ% -b10000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 #R% -1CR% -b1101011111010000 SR% -b0000000000000000000000000000000000111111111111110 [R% -b011101111101110000001 kR% -b0111011111011100000011110 mS% -b0000000000000000000011111111 uS% -b0100 ]_% -b0000 e_% -b11100100010001000100010001000100110011011101110111011101110111011010101110111011101110111011101100010010001000100010001000100010 7`% -1W`% -0_`% -b0000 g`% -b11110101101110010011101100011000111110110011011000010000011111011010101110000001000100110111101010100011011110011010000001100111101100011101111001010111111101011011110000001001111100010000101110001101011110001011111111100111000111000101000110000010110011110111010111001101100001111100100000000110110001101011111011 ]g% -b010 Ii% -b011 Qi% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ai% -b0000000000000000 Cr% -b00110101111101000001110111110111000000110000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 sr% -b0000000010111011101110111011101110100010001000100010001000100010001001010010011111100000100110001000100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110111011111011100000011011010111110100000000000000000000000000000000000000111111111111110 Es% -1CT& -#14 -0CT& -#15 -11# -19# -1a3 -b00000000 C8 -b00000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 K8 -0}= -0UA -0gB -0-E -19G -b0100100010001000100010001000 AG -0IG -0QG -1qG -b01011001 yG -b00000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 #H -b01011001 [H -b00000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 cH -b01011000 =I -0EI -0MI -1]I -b0000000000000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 eI -b0101100100000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 GJ -0)K -0mM -1uM -0}M -1_N -1gN -1wN -0qO -0#P -b0000000000000000000000000 +P -b00 3P -b00000000000000000000000000000000 ;P -b0000000000000000000000000000000000000000000000000 cP -1-Q -b0100100010001000100010001 5Q -b10 =Q -b00010010001000100010001000100010 EQ -b0000000000000000000000000000000000111111110111100 MQ -b11111100010101100110011000111100 7R -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 ?R -b010111000111100010010 _R -1gR -b0000000000000000 wR -b000000000000000000000000000000000011111111 !S -b1111 AS -1iS -0qS -1yS -b0100100010001000100010001 3T -1;T -0[T -0cT -0%U -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 sX -b0001 UY -b00010010001000100010001000100010 eY -b10 /Z -b0000000000000000 GZ -b010111000111100010010 OZ -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 WZ -b0000000000000000 )[ -b010111000111100010010 1[ -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 9[ -b00010010001000100010001000100010000100100010001000100010001000100001001000100010001000100010001000010010001000100010001000100010 q[ -b010010001000100010001 K\ -1c\ -1s\ -b00000000000000000001011100011110001001001001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 M] -b0010000010100100010001000100010001100001001000100010001000100010001011111100010101100110011000111100010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010101110001111000100101000000000000000000000000000000000000000000000000000111111110111100 }] -b0000000000000001 !_ -0)_ -b0000000000000000000000000000000000000000000001100101100101110011100001110111 Y_ -b0001011110010100110010101011111001110100000001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110000000000000000000000000000 3` -0A-! -1I-! -0Q-! -b00 Y-! -b010010001000100010001000100010 q-! -b00010010001000100010001000100010 y-! -1;.! -1K.! -0E/! -0U/! -b0000000000000000000000000 ]/! -b00000000000000000000000000000000 m/! -b0000000000000000000000000000000000000000000000000 70! -1_0! -b1011101110111011101110111 g0! -b10101011101110111011101110111011 w0! -b0000000000000000000000000000000000111111110111101 !1! -b00111001001000110011101110010111 i1! -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 q1! -b011111101011001000000 32! -1;2! -b0000000000000000 K2! -b000000000000000000000000000000000011111111 S2! -b01 c2! -b1111 s2! -1=3! -0E3! -1M3! -b1011101110111011101110111 e3! -1m3! -0/4! -074! -0W4! -b0001 78! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 G8! -b0111 )9! -b10101011101110111011101110111011 99! -b0000000000000000 y9! -b011111101011001000000 #:! -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 +:! -b0000000000000000 [:! -b011111101011001000000 c:! -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 k:! -b10101011101110111011101110111011101010111011101110111011101110111010101110111011101110111011101110101011101110111011101110111011 E;! -b101110111011101110111 };! -17! -0[>! -b0000000000000000000000000000000000000000000000100110011110011010101101110000 -?! -b0010110100000101111110101011101011110100000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100000000000000000000000000000000 e?! -0qA! -1yA! -0#B! -b00 +B! -b010010001000100010001000100010 CB! -b00010010001000100010001000100010 KB! -1kB! -1{B! -0uC! -0'D! -b0000000000000000000000000 /D! -b00 7D! -b00000000000000000000000000000000 ?D! -b0000000000000000000000000000000000000000000000000 gD! -11E! -b0100010001000100010001001 9E! -b11 AE! -b11100100010001000100010001000100 IE! -b0000000000000000000000000000000000111111110111111 QE! -b00000001101001100010011100100111 ;F! -b00000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 CF! -b100001101001101010001 cF! -1kF! -b0000000000000000 {F! -b000000000000000000000000000000000011111111 %G! -b11 5G! -b1111 EG! -1mG! -0uG! -1}G! -b0100010001000100010001001 7H! -1?H! -0_H! -0gH! -0)I! -b0001 gL! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 wL! -b1001 YM! -b11100100010001000100010001000100 iM! -b11 3N! -b0000000000000000 KN! -b100001101001101010001 SN! -b00000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 [N! -b0000000000000000 -O! -b100001101001101010001 5O! -b00000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 =O! -b11100100010001000100010001000100111001000100010001000100010001001110010001000100010001000100010011100100010001000100010001000100 uO! -b010001000100010001000 OP! -1gP! -1wP! -b00000000000000000010000110100110101000100000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 QQ! -b0010000010100010001000100010001001111110010001000100010001000100010000000001101001100010011100100111000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100111000011010011010100011000000000000000000000000000000000000000000000000000111111110111111 #R! -b0000000000000001 %S! -0-S! -b0000000000000000000000000000000000000000000000110110001100011111011011101110 ]S! -b0000101100000110010001110111100000000010000101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100000000000000000000000000000 7T! -0sj! -1{j! -0%k! -b00 -k! -b010010001000100010001000100010 Ek! -b00010010001000100010001000100010 Mk! -1mk! -1}k! -0wl! -0)m! -b0000000000000000000000000 1m! -b00 9m! -b00000000000000000000000000000000 Am! -b0000000000000000000000000000000000000000000000000 im! -13n! -b0111011101110111011101110 ;n! -b10 Cn! -b11001101110111011101110111011101 Kn! -b0000000000000000000000000000000000111111110111110 Sn! -b01010010011111100000100110001000 =o! -b10000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 Eo! -b011101111101110000001 eo! -1mo! -b0000000000000000 }o! -b000000000000000000000000000000000011111111 'p! -b10 7p! -b1111 Gp! -1op! -0wp! -1!q! -b0111011101110111011101110 9q! -1Aq! -0aq! -0iq! -0+r! -b0001 iu! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 yu! -b1110 [v! -b11001101110111011101110111011101 kv! -b10 5w! -b0000000000000000 Mw! -b011101111101110000001 Uw! -b10000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 ]w! -b0000000000000000 /x! -b011101111101110000001 7x! -b10000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 ?x! -b11001101110111011101110111011101110011011101110111011101110111011100110111011101110111011101110111001101110111011101110111011101 wx! -b011101110111011101110 Qy! -1iy! -1yy! -b00000000000000000001110111110111000000110000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 Sz! -b0010000010111011101110111011101110101100110111011101110111011101110101010010011111100000100110001000100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110111011111011100000011000000000000000000000000000000000000000000000000000111111110111110 %{! -b0000000000000001 '|! -0/|! -b0000000000000000000000000000000000000000000011001010001001011100100001011011 _|! -b0010001101101001001000010110000010110100000101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110110000000000000000000000000000 9}! -b0000000000000000000000000 =5" -b0000000000000000000000000 W6" -b0000000000000000000000000 !7" -b0000000000000000000000000 q7" -0m9" -b0001 }9" -b0101100100000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 ':" -b0101100100000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 3@" -b001 s@" -1-A" -b00 7B" -b0100100010001000100010001 ?B" -b10 GB" -b11111111111111111111111111111111 OB" -b000000000000000000000000000000000011111111 WB" -b1111 gB" -0wB" -b000000000000000000000000000000000000000000 )C" -09C" -b0000 AC" -0QC" -b00 YC" -b00000000000000000000000000000000 aC" -b01100101100101110011100001110111 iC" -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 qC" -03D" -b0101111001010011 CD" -b0000000000000000000000000000000000000000000000000 KD" -b001010101111100111010 [D" -b0010101011111001110100000 ]E" -b0000000000000000000000000000 eE" -b0000 MQ" -1OR" -b00001010010001000100010001000110000100100010001000100010001000100000000000000000000000000000000000111111110111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Q[" -b00010111100101001100101010111110011101000110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 cd" -b0000000000000000000000000000000000000000000000000000000000000000000001100101100101110011100001110111001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110010101011111001110100001011110010100110000000000000000000000000000000000000000000000000 5e" -b1111111111111111111111111111111100000000000000000000000000000000000011111111111111000 'f" -b0111100001101100100001001110110010111000100110001010010011101111111110010110010100010101010110000000011001011101100110010101111000111011111010110110000100101000101110100110011010110001100010010001101111001010111001001011010001100000001011010010010001111111000000010101111111001011111010001101110110000110101000000001010110111111101100000100000111010111000010111011100011000010100100010001000100010001 /j" -b0000000000000001 9k" -b0001 Yk" -b00001 ak" -b0000000000000000000000000000000000001111111111111100010101100110011000111100 7n" -b0000110100001101100101110001111000100100001010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010000000000000000000011111111 uq" -b01 ?x# -b1011101110111011101110111 Gx# -b00010001000100010001000100010001 Wx# -b000000000000000000000000000000000011111111 _x# -b1111 ox# -b00 )y# -b000000000000000000000000000000000000000000 1y# -0Ay# -b0000 Iy# -0Yy# -b00000000000000000000000000000000 iy# -b00100110011110011010101101110000 qy# -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 yy# -0;z# -b1011010000010111 Kz# -b0000000000000000000000000000000000000000000000000 Sz# -b111010101110101111010 cz# -b1110101011101011110100000 e{# -b0000000000000000000000000000 m{# -b0000 U)$ -1W*$ -b00001101110111011101110111011100101010111011101110111011101110110000000000000000000000000000000000111111110111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Y3$ -b00101101000001011111101010111010111101011000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 k<$ -b0000000000000000000000000000000000000000000000000000000000000000000000100110011110011010101101110000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100001110101011101011110100010110100000101110000000000000000000000000000000000000000000000000 ==$ -b0001000100010001000100010001000101000000000000000000000000000000000011111111111110000 />$ -b1111111011111011000010001010000111011100101001110010001001100100010100111010000111110010101110010011011001110101111011000100001111010010010110001010101000110100000011110010111001111000111011010001111101010110100101001101011011011100101111001000010001111010011011010010110010011000101101011110110010000011001011110101001111011100110000011010110110100110010101011010001101010101011101110111011101110111 7B$ -b0000000000000001 AC$ -b0001 aC$ -b00001 iC$ -b0100000000000000000000000000000000001111111100111001001000110011101110010111 ?F$ -b0001110001101110010111111010110010000000111000111110100011101000011011111011111011110101101000000110010001000111001001100110001100000001100001110010010001100111011100101110000000000000000000011111111 }I$ -b11 aK$ -b0100010001000100010001001 iK$ -b11 qK$ -b00110011001100110011001100110011 yK$ -b000000000000000000000000000000000011111111 #L$ -b1111 3L$ -0;L$ -b00 KL$ -b000000000000000000000000000000000000000000 SL$ -0cL$ -b0000 kL$ -0{L$ -b00 %M$ -b00000000000000000000000000000000 -M$ -b00110110001100011111011011101110 5M$ -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 =M$ -0]M$ -b0010110000011001 mM$ -b0000000000000000000000000000000000000000000000000 uM$ -b000111011110000000001 'N$ -b0001110111100000000010000 )O$ -b0000000000000000000000000000 1O$ -b0000 wZ$ -1y[$ -b00001010001000100010001000100111111001000100010001000100010001000000000000000000000000000000000000111111110111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 {d$ -b00001011000001100100011101111000000000110110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 /n$ -b0000000000000000000000000000000000000000000000000000000000000000000000110110001100011111011011101110101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100001110111100000000010000101100000110010000000000000000000000000000000000000000000000000 _n$ -b0011001100110011001100110011001111000000000000000000000000000000000011111111111111100 Qo$ -b0100100110010001010011111101110011000100101111100011001001010011100001100010001011110111001001001101111111000000100011010110100001001010011110111000010101101101100011011001111000110000110101100001100001001001011110000100110001011101011010100100001001010010110110001100011011100010001001010001111100111100000000111100111100101000011010100100111001111100001001101001110001010100100010001000100010001001 Ys$ -b0000000000000001 ct$ -b0001 %u$ -b00001 -u$ -b1100000000000000000000000000000000001111111100000001101001100010011100100111 aw$ -b0001101101010111001000011010011010100011001000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100110000000000000000000011111111 A{$ -b10 GP% -b0111011101110111011101110 OP% -b10 WP% -b00100010001000100010001000100010 _P% -b000000000000000000000000000000000011111111 gP% -b1111 wP% -0!Q% -0)Q% -b00 1Q% -b000000000000000000000000000000000000000000 9Q% -0IQ% -b0000 QQ% -0aQ% -b00 iQ% -b00000000000000000000000000000000 qQ% -b11001010001001011100100001011011 yQ% -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 #R% -0CR% -b1000110110100100 SR% -b0000000000000000000000000000000000000000000000000 [R% -b100001011000001011010 kR% -b1000010110000010110100000 mS% -b0000000000000000000000000000 uS% -b0000 ]_% -1_`% -b00001011101110111011101110111010110011011101110111011101110111010000000000000000000000000000000000111111110111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ai% -b00100011011010010010000101100000101101010111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 sr% -b0000000000000000000000000000000000000000000000000000000000000000000011001010001001011100100001011011101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110111000010110000010110100010001101101001000000000000000000000000000000000000000000000000000 Es% -b0010001000100010001000100010001010000000000000000000000000000000000011111111111111000 7t% -b1011001100101001111111011111001000101101100111101010000101011010111100100011000001011100000010111101111000011001111110100011010110111011110110011010111010110111110010111100111000100100010101010001100001011100001011001111010000110101010110100001011010111111001011100000001011000110010011000101100110111011101011101011010010111100101101100111011000111100110100101100110111101010111011101110111011101110 ?x% -b0000000000000001 Iy% -b0001 iy% -b00001 qy% -b1000000000000000000000000000000000001111111101010010011111100000100110001000 G|% -b0011010111110100000111011111011100000011110100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110000000000000000000011111111 '"& -1CT& -1GV& -b0100100010001000100010001000 _V& -b0100100010001000100010001000 )W& -1wZ& -1![& -#16 -0CT& -#17 -09# -0a3 -b00000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 K8 -b1011101110111011101110111011 AG -1aG -1iG -0qG -b01101100 yG -b01011101010000000110001110001100111011101000010101010011101011100111101111111010111000001000100010111111110101100100011101100001101101000101011100010100001110010010111011000111001100100010101001110001101101011101100110111111 #H -b01011000 [H -b01010000 =I -1EI -b011 UI -b0000000000000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 eI -b0110110001011101010000000110001110001100111011101000010101010011101011100111101111111010111000001000100010111111110101100100011101100001101101000101011100010100001110010010111011000111001100100010101001110001101101011101100110111111 GJ -b00001000 1K -0gN -0wN -0-Q -b0000000000000000000000000 5Q -b00 =Q -b00000000000000000000000000000000 EQ -b0000000000000000000000000000000000000000000000000 MQ -b01100101100101110011100001110111 7R -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 ?R -b001010101111100111010 _R -0gR -b0101111001010011 wR -b000000000000000000000000000000000000000000 !S -b0000 AS -0iS -1qS -0yS -b0000000000000000000000000 3T -0;T -1CT -1[T -1cT -b0000 UY -b00000000000000000000000000000000 eY -b00 /Z -b0101111001010011 GZ -b001010101111100111010 OZ -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 WZ -b0101111001010011 )[ -b001010101111100111010 1[ -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 9[ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 q[ -b000000000000000000000 K\ -0c\ -0s\ -b00010111100101001100101010111110011101000110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 M] -b0000000000000000000000000000000000000000000000000000000000000000000001100101100101110011100001110111001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110010101011111001110100001011110010100110000000000000000000000000000000000000000000000000 }] -b0000000000000010 w^ -b0000000000000000 !_ -1)_ -1Q_ -b0000000000000000000000000000000000001111111111111100010101100110011000111100 Y_ -b0000000000000000000101110001111000100100001010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010000000000000000000011111111 3` -0;.! -0K.! -0_0! -b0000000000000000000000000 g0! -b00000000000000000000000000000000 w0! -b0000000000000000000000000000000000000000000000000 !1! -b00100110011110011010101101110000 i1! -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 q1! -b111010101110101111010 32! -0;2! -b1011010000010111 K2! -b000000000000000000000000000000000000000000 S2! -b00 c2! -b0000 s2! -0=3! -1E3! -0M3! -b0000000000000000000000000 e3! -0m3! -1u3! -1/4! -174! -b0000 )9! -b00000000000000000000000000000000 99! -b1011010000010111 y9! -b111010101110101111010 #:! -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 +:! -b1011010000010111 [:! -b111010101110101111010 c:! -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 k:! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 E;! -b000000000000000000000 };! -07! -b0000000000000000 S>! -1[>! -1%?! -b0100000000000000000000000000000000001111111100111001001000110011101110010111 -?! -b0000000000000000000111111010110010000000111000111110100011101000011011111011111011110101101000000110010001000111001001100110001100000001100001110010010001100111011100101110000000000000000000011111111 e?! -0kB! -0{B! -01E! -b0000000000000000000000000 9E! -b00 AE! -b00000000000000000000000000000000 IE! -b0000000000000000000000000000000000000000000000000 QE! -b00110110001100011111011011101110 ;F! -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 CF! -b000111011110000000001 cF! -0kF! -b0010110000011001 {F! -b000000000000000000000000000000000000000000 %G! -b00 5G! -b0000 EG! -0mG! -1uG! -0}G! -b0000000000000000000000000 7H! -0?H! -1GH! -1_H! -1gH! -b0000 YM! -b00000000000000000000000000000000 iM! -b00 3N! -b0010110000011001 KN! -b000111011110000000001 SN! -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 [N! -b0010110000011001 -O! -b000111011110000000001 5O! -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 =O! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 uO! -b000000000000000000000 OP! -0gP! -0wP! -b00001011000001100100011101111000000000110110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 QQ! -b0000000000000000000000000000000000000000000000000000000000000000000000110110001100011111011011101110101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100001110111100000000010000101100000110010000000000000000000000000000000000000000000000000 #R! -b0000000000000010 {R! -b0000000000000000 %S! -1-S! -1US! -b1100000000000000000000000000000000001111111100000001101001100010011100100111 ]S! -b0000000000000000001000011010011010100011001000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100110000000000000000000011111111 7T! -0mk! -0}k! -03n! -b0000000000000000000000000 ;n! -b00 Cn! -b00000000000000000000000000000000 Kn! -b0000000000000000000000000000000000000000000000000 Sn! -b11001010001001011100100001011011 =o! -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 Eo! -b100001011000001011010 eo! -0mo! -b1000110110100100 }o! -b000000000000000000000000000000000000000000 'p! -b00 7p! -b0000 Gp! -0op! -1wp! -0!q! -b0000000000000000000000000 9q! -0Aq! -1Iq! -1aq! -1iq! -b0000 [v! -b00000000000000000000000000000000 kv! -b00 5w! -b1000110110100100 Mw! -b100001011000001011010 Uw! -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 ]w! -b1000110110100100 /x! -b100001011000001011010 7x! -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 ?x! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 wx! -b000000000000000000000 Qy! -0iy! -0yy! -b00100011011010010010000101100000101101010111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 Sz! -b0000000000000000000000000000000000000000000000000000000000000000000011001010001001011100100001011011101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110111000010110000010110100010001101101001000000000000000000000000000000000000000000000000000 %{! -b0000000000000010 }{! -b0000000000000000 '|! -1/|! -1W|! -b1000000000000000000000000000000000001111111101010010011111100000100110001000 _|! -b0000000000000000000111011111011100000011110100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110000000000000000000011111111 9}! -b0100100010001000100010001 =5" -b1011101110111011101110111 W6" -b0100010001000100010001001 !7" -b0111011101110111011101110 q7" -1k8" -b0100100010001000100010001000 s8" -0{8" -1%9" -b01011000 -9" -b00000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 59" -1m9" -0u9" -b0000 }9" -b0110110001011101010000000110001110001100111011101000010101010011101011100111101111111010111000001000100010111111110101100100011101100001101101000101011100010100001110010010111011000111001100100010101001110001101101011101100110111111 Q?" -b0000000000000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 3@" -b001 {@" -b010 %A" -0-A" -b000000000000000000000000000000000011111111 )C" -b1111 AC" -1QC" -b10 YC" -b00010010001000100010001000100010 aC" -b11111100010101100110011000111100 iC" -b01001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 qC" -13D" -b0000000000000000 CD" -b0000000000000000000000000000000000111111110111100 KD" -b010111000111100010010 [D" -15E" -b0101110001111000100100001 ]E" -b0000000000000000000011111111 eE" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Q[" -b00000000000000000001011100011110001001001001001011011110011001000000111111111000101011001100110001111001010010001010100001110011101100010000110010111100011100011011001 cd" -b0010000010100100010001000100010001100001001000100010001000100010001011111100010101100110011000111100010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010101110001111000100101000000000000000000000000000000000000000000000000000111111110111100 5e" -b0000000000000000000000000000000000000000000001100101100101110011100001110111 7n" -b0001011110010100110010101011111001110100000001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110000000000000000000000000000 uq" -b01 )y# -b000000000000000000000000000000000011111111 1y# -b1111 Iy# -1Yy# -b10101011101110111011101110111011 iy# -b00111001001000110011101110010111 qy# -b00011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 yy# -1;z# -b0000000000000000 Kz# -b0000000000000000000000000000000000111111110111101 Sz# -b011111101011001000000 cz# -1={# -b0111111010110010000000111 e{# -b0000000000000000000011111111 m{# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 Y3$ -b00000000000000000001111110101100100000000011111010001110100001101111101111101111010110100000011001000100011100100110011000110000000110000111001001000110011101110010111 k<$ -b0010000011011101110111011101110111001010101110111011101110111011101100111001001000110011101110010111000111110100011101000011011111011111011110101101000000110010001000111001001100110001100000001100001110010010001100111011100101110111111010110010000001000000000000000000000000000000000000000000000000000111111110111101 ==$ -b0000000000000000000000000000000000000000000000100110011110011010101101110000 ?F$ -b0010110100000101111110101011101011110100000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100000000000000000000000000000000 }I$ -b11 KL$ -b000000000000000000000000000000000011111111 SL$ -b1111 kL$ -1{L$ -b11 %M$ -b11100100010001000100010001000100 -M$ -b00000001101001100010011100100111 5M$ -b00000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 =M$ -1]M$ -b0000000000000000 mM$ -b0000000000000000000000000000000000111111110111111 uM$ -b100001101001101010001 'N$ -1_N$ -b1000011010011010100011001 )O$ -b0000000000000000000011111111 1O$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 {d$ -b00000000000000000010000110100110101000100000001101001100010011100100111000101011001110011100001110011001110110111001101000111101000000000011100000001011010010001110011 /n$ -b0010000010100010001000100010001001111110010001000100010001000100010000000001101001100010011100100111000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100111000011010011010100011000000000000000000000000000000000000000000000000000111111110111111 _n$ -b0000000000000000000000000000000000000000000000110110001100011111011011101110 aw$ -b0000101100000110010001110111100000000010000101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100000000000000000000000000000 A{$ -b10 1Q% -b000000000000000000000000000000000011111111 9Q% -b1111 QQ% -1aQ% -b10 iQ% -b11001101110111011101110111011101 qQ% -b01010010011111100000100110001000 yQ% -b10000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 #R% -1CR% -b0000000000000000 SR% -b0000000000000000000000000000000000111111110111110 [R% -b011101111101110000001 kR% -1ES% -b0111011111011100000011110 mS% -b0000000000000000000011111111 uS% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001 ai% -b00000000000000000001110111110111000000110000111011000101101110101100100010100100111111000001001100010000101000111000100101000000011110100100001001010001110011101011111 sr% -b0010000010111011101110111011101110101100110111011101110111011101110101010010011111100000100110001000100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110111011111011100000011000000000000000000000000000000000000000000000000000111111110111110 Es% -b0000000000000000000000000000000000000000000011001010001001011100100001011011 G|% -b0010001101101001001000010110000010110100000101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110110000000000000000000000000000 '"& -1CT& -b1011101110111011101110111011 _V& -b1011101110111011101110111011 )W& -0![& -#18 -0CT& -#19 -b00000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 K8 -b0100010001000100010001001100 AG -0aG -0iG -1qG -b01010000 [H -b01000000 =I -b100 UI -b0000000000000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 eI -b00010000 1K -0qS -0CT -0[T -0cT -b0000000000000000 w^ -0)_ -0Q_ -b0000000000000000000000000000000000000000000001100101100101110011100001110111 Y_ -b0001011110010100110010101011111001110100000001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110000000000000000000000000000 3` -0E3! -0u3! -0/4! -074! -b0000000000000000 K>! -0[>! -0%?! -b0000000000000000000000000000000000000000000000100110011110011010101101110000 -?! -b0010110100000101111110101011101011110100000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100000000000000000000000000000000 e?! -0uG! -0GH! -0_H! -0gH! -b0000000000000000 {R! -0-S! -0US! -b0000000000000000000000000000000000000000000000110110001100011111011011101110 ]S! -b0000101100000110010001110111100000000010000101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100000000000000000000000000000 7T! -0wp! -0Iq! -0aq! -0iq! -b0000000000000000 }{! -0/|! -0W|! -b0000000000000000000000000000000000000000000011001010001001011100100001011011 _|! -b0010001101101001001000010110000010110100000101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110110000000000000000000000000000 9}! -b0000000000000000000000000 =5" -b0000000000000000000000000 W6" -b0000000000000000000000000 !7" -b0000000000000000000000000 q7" -b0100100010001000100010011000 S8" -0k8" -1{8" -0%9" -b01010000 -9" -b0000000000000000000000000000000001110111011101110111011101110110000000000000000000000000010101000100010001000100010011001011101110111011101110111011000000000000000000000000001000000000000000000000000000010100100010001000100010001000 3@" -b000000000000000000000000000000000000000000 )C" -b0000 AC" -0QC" -b00 YC" -b00000000000000000000000000000000 aC" -b01100101100101110011100001110111 iC" -b00110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 qC" -03D" -b0101111001010011 CD" -b0000000000000000000000000000000000000000000000000 KD" -b001010101111100111010 [D" -05E" -b0010101011111001110100000 ]E" -b0000000000000000000000000000 eE" -b00010111100101001100101010111110011101000110101000010100001010011100110001000010011011001100001011110010010111100101110001100101000110001100101100101110011100001110111 cd" -b0000000000000000000000000000000000000000000000000000000000000000000001100101100101110011100001110111001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110010101011111001110100001011110010100110000000000000000000000000000000000000000000000000 5e" -b0001001000100010001000100010001000000000000000000000000000000000000011111111011111000 *f" -b0111100001101100100001001110110010111000100110001010010011101111111110010110010100010101010110000000011001011101100110010101111000111011111010110110000100101000101110100110011010110001100010010001101111001010111001001011010001100000001011010010010001111111000000010101111111001011111010001101110110000110101000000001010110111111101100000100000111010101001000100010001000100010100100010001000100010001 /j" -b0000000000000011 9k" -b0000000000000010 Ak" -b0010 Yk" -b00010 ak" -b0000000000000000000000000000000000001111111111111100010101100110011000111100 7n" -b0000000000000000000101110001111000100100001010010010110111100110010000001111111110001010110011001100011110010100100010101000011100111011000100001100101111000111000110110010000000000000000000011111111 uq" -b00 )y# -b000000000000000000000000000000000000000000 1y# -b0000 Iy# -0Yy# -b00000000000000000000000000000000 iy# -b00100110011110011010101101110000 qy# -b11000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 yy# -0;z# -b1011010000010111 Kz# -b0000000000000000000000000000000000000000000000000 Sz# -b111010101110101111010 cz# -0={# -b1110101011101011110100000 e{# -b0000000000000000000000000000 m{# -b00101101000001011111101010111010111101011000100110010011100011100100110000011000000011110011100010001101110100001000011101000010001001000100110011110011010101101110000 k<$ -b0000000000000000000000000000000000000000000000000000000000000000000000100110011110011010101101110000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100001110101011101011110100010110100000101110000000000000000000000000000000000000000000000000 ==$ -b1010101110111011101110111011101101000000000000000000000000000000000011111111011110000 2>$ -b1111111011111011000010001010000111011100101001110010001001100100010100111010000111110010101110010011011001110101111011000100001111010010010110001010101000110100000011110010111001111000111011010001111101010110100101001101011011011100101111001000010001111010011011010010110010011000101101011110110010000011001011110101001111011100110000011010110110100110111011101110111011101111011101110111011101110111 7B$ -b0000000000000011 AC$ -b0000000000000010 IC$ -b0010 aC$ -b00010 iC$ -b0100000000000000000000000000000000001111111100111001001000110011101110010111 ?F$ -b0000000000000000000111111010110010000000111000111110100011101000011011111011111011110101101000000110010001000111001001100110001100000001100001110010010001100111011100101110000000000000000000011111111 }I$ -b00 KL$ -b000000000000000000000000000000000000000000 SL$ -b0000 kL$ -0{L$ -b00 %M$ -b00000000000000000000000000000000 -M$ -b00110110001100011111011011101110 5M$ -b10110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 =M$ -0]M$ -b0010110000011001 mM$ -b0000000000000000000000000000000000000000000000000 uM$ -b000111011110000000001 'N$ -0_N$ -b0001110111100000000010000 )O$ -b0000000000000000000000000000 1O$ -b00001011000001100100011101111000000000110110111111101011111101000110110001101101001100111010101001001110000001100101110010000000110110100110110001100011111011011101110 /n$ -b0000000000000000000000000000000000000000000000000000000000000000000000110110001100011111011011101110101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100001110111100000000010000101100000110010000000000000000000000000000000000000000000000000 _n$ -b1110010001000100010001000100010011000000000000000000000000000000000011111111011111100 To$ -b0100100110010001010011111101110011000100101111100011001001010011100001100010001011110111001001001101111111000000100011010110100001001010011110111000010101101101100011011001111000110000110101100001100001001001011110000100110001011101011010100100001001010010110110001100011011100010001001010001111100111100000000111100111100101000011010100100111001111101000100010001000100010010100010001000100010001001 Ys$ -b0000000000000011 ct$ -b0000000000000010 kt$ -b0010 %u$ -b00010 -u$ -b1100000000000000000000000000000000001111111100000001101001100010011100100111 aw$ -b0000000000000000001000011010011010100011001000000011010011000100111001001110001010110011100111000011100110011101101110011010001111010000000000111000000010110100100011100110000000000000000000011111111 A{$ -b00 1Q% -b000000000000000000000000000000000000000000 9Q% -b0000 QQ% -0aQ% -b00 iQ% -b00000000000000000000000000000000 qQ% -b11001010001001011100100001011011 yQ% -b10111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 #R% -0CR% -b1000110110100100 SR% -b0000000000000000000000000000000000000000000000000 [R% -b100001011000001011010 kR% -0ES% -b1000010110000010110100000 mS% -b0000000000000000000000000000 uS% -b00100011011010010010000101100000101101010111010111111110111001000000010010101101000111011000001101000100001011011100111101101001010001011001010001001011100100001011011 sr% -b0000000000000000000000000000000000000000000000000000000000000000000011001010001001011100100001011011101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110111000010110000010110100010001101101001000000000000000000000000000000000000000000000000000 Es% -b1100110111011101110111011101110110000000000000000000000000000000000011111111011111000 :t% -b1011001100101001111111011111001000101101100111101010000101011010111100100011000001011100000010111101111000011001111110100011010110111011110110011010111010110111110010111100111000100100010101010001100001011100001011001111010000110101010110100001011010111111001011100000001011000110010011000101100110111011101011101011010010111100101101100111011000111101110111011101110111011100111011101110111011101110 ?x% -b0000000000000011 Iy% -b0000000000000010 Qy% -b0010 iy% -b00010 qy% -b1000000000000000000000000000000000001111111101010010011111100000100110001000 G|% -b0000000000000000000111011111011100000011110100001110110001011011101011001000101001001111110000010011000100001010001110001001010000000111101001000010010100011100111010111110000000000000000000011111111 '"& -1CT& -b0100010001000100010001001100 _V& -b0100010001000100010001001100 )W& -1![& -#20 -0CT& -#21 -b0111011101110111011101110110 AG -1aG -1iG -0qG -b01000000 [H -b00000000 =I -b110 UI -b01000000 1K -1k8" -b0100010001000100010001001100 s8" -0{8" -1%9" -b01000000 -9" -b0000000000000000000000000000000001110000000000000000000000000110000000000000000000000000010100000000000000000000000001000000000000000000000000000011000000000000000000000000001000000000000000000000000000010000000000000000000000000000 3@" -b0000000000000000000000000000000000000000000001100101100101110011100001110111 7n" -b0001011110010100110010101011111001110100000001101010000101000010100111001100010000100110110011000010111100100101111001011100011001010001100011001011001011100111000011101110000000000000000000000000000 uq" -b0000000000000000000000000000000000000000000000100110011110011010101101110000 ?F$ -b0010110100000101111110101011101011110100000110001001100100111000111001001100000110000000111100111000100011011101000010000111010000100010010001001100111100110101011011100000000000000000000000000000000 }I$ -b0000000000000000000000000000000000000000000000110110001100011111011011101110 aw$ -b0000101100000110010001110111100000000010000101101111111010111111010001101100011011010011001110101010010011100000011001011100100000001101101001101100011000111110110111011100000000000000000000000000000 A{$ -b0000000000000000000000000000000000000000000011001010001001011100100001011011 G|% -b0010001101101001001000010110000010110100000101110101111111101110010000000100101011010001110110000011010001000010110111001111011010010100010110010100010010111001000010110110000000000000000000000000000 '"& -1CT& -b0111011101110111011101110110 _V& -b0111011101110111011101110110 )W& -0![& -#22 -0CT& -#23 -01# -09G -b0001101101011101100110111111 AG -1IG -0aG -0iG -b00000000 [H -b01011101010000000110001110001100111011101000010101010011101011100111101111111010111000001000100010111111110101100100011101100001101101000101011100010100001110010010111011000111001100100010101001110001101101011101100110111111 cH -b000 UI -0]I -b00000001 1K -b0100010001000100010001011100 S8" -0k8" -1{8" -0%9" -b00000000 -9" -1u9" -1CT& -0GV& -b0100010001000100010001011100 _V& -b0100010001000100010001011100 )W& -0wZ& -#24 -0CT& -#25 -1CT& -#26 -0CT& -#27 -1CT& -#28 -0CT& -#29 -1CT& -#30 -0CT& -#31 -1CT& -#32 -b00000000 3 -0S -0CT& -01W& -#33 -1CT& -#34 -b00000001 3 -1S -0CT& -11W& -#35 -1CT& -#36 -0CT& -#37 -1CT& -#38 -0CT& -#39 -1CT& -#40 -0CT& -#41 -1CT& -#42 -0CT& -#43 -1CT& -#44 -0CT& -#45 -1CT& -#46 -0CT& -#47 -1CT& -#48 -0CT& -#49 -1CT& -#50 -0CT& -#51 -1CT& -#52 -0CT& -#53 -1CT& -#54 -0CT& -#55 -1CT& -#56 -0CT& -#57 -1CT& -#58 -0CT& -#59 -1CT& -#60 -0CT& -#61 -1CT& -#62 -0CT& -#63 -1CT& -#64 -b00000000 3 -0S -0CT& -01W& -#65 -1CT& -#66 -b00000001 3 -1S -0CT& -11W& -#67 -1CT& -#68 -0CT& -#69 -1CT& -#70 -0CT& -#71 -1CT& -#72 -0CT& -#73 -1CT& -#74 -0CT& -#75 -1CT& -#76 -0CT& -#77 -1CT& -#78 -0CT& -#79 -1CT& -#80 -0CT& -#81 -1CT& -#82 -0CT& -#83 -1CT& -#84 -0CT& -#85 -1CT& -#86 -0CT& -#87 -1CT& -#88 -0CT& -#89 -1CT& -#90 -0CT& -#91 -1CT& -#92 -0CT& -#93 -1CT& -#94 -0CT& -#95 -1CT& -#96 -b00000000 3 -0S -0CT& -01W& -#97 -1CT& -#98 -b00000001 3 -1S -0CT& -11W& -#99 -1CT& -#100 -0CT& -#101 -1CT& -#102 -0CT& -#103 -1CT& -#104 -0CT& -#105 -1CT& -#106 -0CT& -#107 -1CT& -#108 -0CT& -#109 -1CT& -#110 -0CT& -#111 -1CT& -#112 -0CT& -#113 -1CT& -#114 -0CT& -#115 -1CT& -#116 -0CT& -#117 -1CT& -#118 -0CT& -#119 -1CT& -#120 -0CT& -#121 -1CT& -#122 -0CT& -#123 -1CT& -#124 -0CT& -#125 -1CT& -#126 -0CT& -#127 -1CT& -#128 -b00000000 3 -0S -0CT& -01W& -#129 -1CT& -#130 -b00000001 3 -1S -0CT& -11W& -#131 -1CT& -#132 -0CT& -#133 -1CT& -#134 -0CT& -#135 -1CT& -#136 -0CT& -#137 -1CT& -#138 -0CT& -#139 -1CT& -#140 -0CT& -#141 -1CT& -#142 -0CT& -#143 -1CT& -#144 -0CT& -#145 -1CT& -#146 -0CT& -#147 -1CT& -#148 -0CT& -#149 -1CT& -#150 -0CT& -#151 -1CT& -#152 -0CT& -#153 -1CT& -#154 -0CT& -#155 -1CT& -#156 -0CT& -#157 -1CT& -#158 -0CT& -#159 -1CT& -#160 -b00000000 3 -0S -0CT& -01W& -#161 -1CT& -#162 -b00000001 3 -1S -0CT& -11W& -#163 -1CT& -#164 -0CT& -#165 -1CT& -#166 -0CT& -#167 -1CT& -#168 -0CT& -#169 -1CT& -#170 -0CT& -#171 -1CT& -#172 -0CT& -#173 -1CT& -#174 -0CT& -#175 -1CT& -#176 -0CT& -#177 -1CT& -#178 -0CT& -#179 -1CT& -#180 -0CT& -#181 -1CT& -#182 -0CT& -#183 -1CT& -#184 -0CT& -#185 -1CT& -#186 -0CT& -#187 -1CT& -#188 -0CT& -#189 -1CT& -#190 -0CT& -#191 -1CT& -#192 -b00000000 3 -0S -0CT& -01W& -#193 -1CT& -#194 -b00000001 3 -1S -0CT& -11W& -#195 -1CT& -#196 -0CT& -#197 -1CT& -#198 -0CT& -#199 -1CT& -#200 -0CT& -#201 -1CT& -#202 -0CT& -#203 -1CT& diff --git a/tests/opencl/nearn/Makefile b/tests/opencl/nearn/Makefile index 7a2e6217..11dd0c17 100644 --- a/tests/opencl/nearn/Makefile +++ b/tests/opencl/nearn/Makefile @@ -4,8 +4,10 @@ SYSROOT ?= $(RISCV_TOOLCHAIN_PATH)/riscv32-unknown-elf POCL_CC_PATH ?= /opt/pocl/compiler POCL_RT_PATH ?= /opt/pocl/runtime +OPTS ?= filelist.txt + VORTEX_DRV_PATH ?= $(realpath ../../../driver) -VORTEX_RT_PATH ?= $(realpath ../../../runtime) +VORTEX_RT_PATH ?= $(realpath ../../../runtime) K_LLCFLAGS += "-O3 -march=riscv32 -target-abi=ilp32f -mcpu=generic-rv32 -mattr=+m,+f -float-abi=hard -code-model=small" K_CFLAGS += "-v -O3 --sysroot=$(SYSROOT) --gcc-toolchain=$(RISCV_TOOLCHAIN_PATH) -march=rv32imf -mabi=ilp32f -I$(VORTEX_RT_PATH)/include -fno-rtti -fno-exceptions -ffreestanding -nostartfiles -fdata-sections -ffunction-sections" @@ -34,19 +36,19 @@ $(PROJECT): $(SRCS) $(CXX) $(CXXFLAGS) $^ $(LDFLAGS) -o $@ run-fpga: $(PROJECT) kernel.pocl - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae:$(LD_LIBRARY_PATH) ./$(PROJECT) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-asesim: $(PROJECT) kernel.pocl - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae/ase:$(LD_LIBRARY_PATH) ./$(PROJECT) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae/ase:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-vlsim: $(PROJECT) kernel.pocl - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae/vlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/opae/vlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-simx: $(PROJECT) kernel.pocl - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/simx:$(LD_LIBRARY_PATH) ./$(PROJECT) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/simx:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) run-rtlsim: $(PROJECT) kernel.pocl - LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/rtlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) + LD_LIBRARY_PATH=$(POCL_RT_PATH)/lib:$(VORTEX_DRV_PATH)/rtlsim:$(LD_LIBRARY_PATH) ./$(PROJECT) $(OPTS) .depend: $(SRCS) $(CXX) $(CXXFLAGS) -MM $^ > .depend; diff --git a/tests/opencl/nearn/inputgen/Makefile b/tests/opencl/nearn/inputgen/Makefile new file mode 100644 index 00000000..cd36421b --- /dev/null +++ b/tests/opencl/nearn/inputgen/Makefile @@ -0,0 +1,5 @@ +hurricanegen: hurricanegen.c + gcc -std=c99 -o $@ $< + +clean: + rm hurricanegen diff --git a/tests/opencl/nearn/inputgen/gen_dataset.sh b/tests/opencl/nearn/inputgen/gen_dataset.sh new file mode 100644 index 00000000..4f4ead0b --- /dev/null +++ b/tests/opencl/nearn/inputgen/gen_dataset.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +./hurricanegen 65536 1 +./hurricanegen 131072 1 +./hurricanegen 262144 1 +./hurricanegen 524288 1 +./hurricanegen 1048576 1 +./hurricanegen 2097152 1 +./hurricanegen 4194304 1 +./hurricanegen 8388608 1 +./hurricanegen 16777216 1 +./hurricanegen 33554432 1 diff --git a/tests/opencl/nearn/inputgen/gen_dataset_multifile.sh b/tests/opencl/nearn/inputgen/gen_dataset_multifile.sh new file mode 100644 index 00000000..d356bd3a --- /dev/null +++ b/tests/opencl/nearn/inputgen/gen_dataset_multifile.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +./hurricanegen 10240 1 +./hurricanegen 20480 2 +./hurricanegen 40960 4 +./hurricanegen 81920 8 +./hurricanegen 163840 16 +./hurricanegen 327680 32 +./hurricanegen 655360 64 +./hurricanegen 1310720 128 +./hurricanegen 2621440 256 +./hurricanegen 5242880 512 + diff --git a/tests/opencl/nearn/inputgen/hurricanegen.c b/tests/opencl/nearn/inputgen/hurricanegen.c new file mode 100644 index 00000000..67733faf --- /dev/null +++ b/tests/opencl/nearn/inputgen/hurricanegen.c @@ -0,0 +1,105 @@ +/* + * hurricanegen.c + * Original author unknown + * Modified by Sam Kauffman - University of Virginia + * + * Generates datasets of "hurricanes" to be used by Rodinia's Nearest Neighbor (nn) + * Also generates lists of the files in the dataset. These lists are passed to nn. + * + * Usage: hurricanegen + * The number of hurricanes should be a multiple of both 1024 and the number of files. + * + */ + +#include +#include +#include + +// 641986 gets you ~30 MB of data +int main(int argc, char **argv) +{ + FILE *fp; + int i = 0, total_canes = 0, canes = 0, num_files = 0, j = 0; + int year, month, date, hour, num, speed, press; + float lat, lon; + int hours[4] = + { 0, 6, 12, 18 }; + char *name, fname[30]; + char names[21][10] = + { "ALBERTO", "BERYL", "CHRIS", "DEBBY", "ERNESTO", "FLORENCE", "GORDON", + "HELENE", "ISAAC", "JOYCE", "KIRK", "LESLIE", "MICHAEL", "NADINE", + "OSCAR", "PATTY", "RAFAEL", "SANDY", "TONY", "VALERIE", "WILLIAM" }; + + if (argc < 3) + { + fprintf(stderr, "Error: Enter a number of hurricanes and a number of files.\n"); + fprintf(stderr, "The number of hurricanes should be a multiple of both 1024\nand the number of files.\n"); + exit(0); + } + + total_canes = atoi(argv[1]); + num_files = atoi(argv[2]); + + total_canes = ((total_canes+1023)/1024) * 1024; // round up to multiple of 1024 + canes = (total_canes + num_files - 1) / num_files; // round up (ceiling division) + total_canes = canes * num_files; + + srand(time(NULL)); + + for (j = 0; j < num_files; j++) + { + if (num_files == 1) + sprintf(fname, "cane%dk.db", total_canes / 1024); + else + sprintf(fname, "cane%dk_%d_%d.db", total_canes / 1024, num_files, j); + + if ((fp = fopen(fname, "w")) == NULL) + { + fprintf(stderr, "Failed to open output file '%s'!\n", fname); + return -1; + } + + for (i = 0; i < canes; i++) + { + year = 1950 + rand() % 55; + month = 1 + rand() % 12; + date = 1 + rand() % 28; + hour = hours[rand() % 4]; + num = 1 + rand() % 28; + name = names[rand() % 21]; + lat = ((float) (7 + rand() % 63)) + + ((float) rand() / (float) 0x7fffffff); + lon = ((float) (rand() % 358)) + + ((float) rand() / (float) 0x7fffffff); + speed = 10 + rand() % 155; + press = rand() % 900; + + fprintf(fp, "%4d %2d %2d %2d %2d %-9s %5.1f %5.1f %4d %4d\n", + year, month, date, hour, num, name, lat, lon, speed, press); + + } + + fclose(fp); + } + printf("Generated %d hurricanes in %d file(s).\n", total_canes, num_files); + + if (num_files == 1) + { + sprintf(fname, "list%dk.txt", total_canes / 1024); + fp = fopen(fname, "w"); + + fprintf(fp, "../../data/nn/cane%dk.db\n", total_canes / 1024); + } + else + { + sprintf(fname, "list%dk_%d.txt", total_canes / 1024, num_files); + fp = fopen(fname, "w"); + + for (int i = 0; i < num_files; i++) + fprintf(fp, "../../data/nn/cane%dk_%d_%d.db\n", total_canes / 1024, num_files, i); + } + + fclose(fp); + printf( "File list written to %s.\n", fname ); + return 0; +} \ No newline at end of file diff --git a/tests/opencl/nearn/main.cc b/tests/opencl/nearn/main.cc index 43ce1634..5e8c1739 100755 --- a/tests/opencl/nearn/main.cc +++ b/tests/opencl/nearn/main.cc @@ -237,12 +237,12 @@ int loadData(char *filename, std::vector &records, locations.push_back(latLong); records.push_back(record); recNum++; - if (0 == (recNum % 500)) - break; + /*if (0 == (recNum % 500)) + break;*/ } - if (++q == 3) - break; + /*if (++q == 3) + break;*/ fclose(fp); } fclose(flist); @@ -281,8 +281,8 @@ void findLowest(std::vector &records, float *distances, int numRecords, int parseCommandline(int argc, char *argv[], char *filename, int *r, float *lat, float *lng, int *q, int *t, int *p, int *d) { int i; - // if (argc < 2) return 1; // error - strncpy(filename, "filelist.txt", 100); + if (argc < 2) return 1; // error + strncpy(filename,argv[1],100); char flag; for (i = 1; i < argc; i++) { From d7bce5ab45d4ef25f2cec1a61e536a6dfa84872b Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Tue, 22 Jun 2021 09:34:35 -0700 Subject: [PATCH 06/13] relaxing fcvt critical path --- hw/rtl/fp_cores/VX_fp_cvt.v | 315 +++++++++++++++++++----------------- 1 file changed, 165 insertions(+), 150 deletions(-) diff --git a/hw/rtl/fp_cores/VX_fp_cvt.v b/hw/rtl/fp_cores/VX_fp_cvt.v index a719ee55..1e823363 100644 --- a/hw/rtl/fp_cores/VX_fp_cvt.v +++ b/hw/rtl/fp_cores/VX_fp_cvt.v @@ -86,22 +86,6 @@ module VX_fp_cvt #( assign input_sign[i] = is_itof ? int_sign : fmt_sign; end - wire [LANES-1:0][LZC_RESULT_WIDTH-1:0] renorm_shamt; // renormalization shift amount - wire [LANES-1:0] mant_is_zero; // for integer zeroes - - for (genvar i = 0; i < LANES; ++i) begin - wire mant_is_nonzero; - VX_lzc #( - .WIDTH (INT_MAN_WIDTH), - .MODE (1) - ) lzc ( - .in_i (encoded_mant[i]), - .cnt_o (renorm_shamt[i]), - .valid_o (mant_is_nonzero) - ); - assign mant_is_zero[i] = ~mant_is_nonzero; - end - // Pipeline stage0 wire valid_in_s0; @@ -112,29 +96,42 @@ module VX_fp_cvt #( fp_type_t [LANES-1:0] in_a_type_s0; wire [LANES-1:0] input_sign_s0; wire [LANES-1:0][INT_EXP_WIDTH-1:0] fmt_exponent_s0; - wire [LANES-1:0][INT_MAN_WIDTH-1:0] encoded_mant_s0; - wire [LANES-1:0][LZC_RESULT_WIDTH-1:0] renorm_shamt_s0; - wire [LANES-1:0] mant_is_zero_s0; + wire [LANES-1:0][INT_MAN_WIDTH-1:0] encoded_mant_s0; wire stall; VX_pipe_register #( - .DATAW (1 + TAGW + 1 + `FRM_BITS + 1 + LANES * ($bits(fp_type_t) + 1 +INT_EXP_WIDTH + INT_MAN_WIDTH + LZC_RESULT_WIDTH + 1)), + .DATAW (1 + TAGW + 1 + `FRM_BITS + 1 + LANES * ($bits(fp_type_t) + 1 + INT_EXP_WIDTH + INT_MAN_WIDTH)), .RESETW (1) ) pipe_reg0 ( .clk (clk), .reset (reset), .enable (~stall), - .data_in ({valid_in, tag_in, is_itof, !is_signed, frm, in_a_type, input_sign, fmt_exponent, encoded_mant, renorm_shamt, mant_is_zero}), - .data_out ({valid_in_s0, tag_in_s0, is_itof_s0, unsigned_s0, rnd_mode_s0, in_a_type_s0, input_sign_s0, fmt_exponent_s0, encoded_mant_s0, renorm_shamt_s0, mant_is_zero_s0}) + .data_in ({valid_in, tag_in, is_itof, !is_signed, frm, in_a_type, input_sign, fmt_exponent, encoded_mant}), + .data_out ({valid_in_s0, tag_in_s0, is_itof_s0, unsigned_s0, rnd_mode_s0, in_a_type_s0, input_sign_s0, fmt_exponent_s0, encoded_mant_s0}) ); // Normalization - wire [LANES-1:0][INT_MAN_WIDTH-1:0] input_mant; // normalized input mantissa - wire [LANES-1:0][INT_EXP_WIDTH-1:0] input_exp; // unbiased true exponent - wire [LANES-1:0][INT_EXP_WIDTH-1:0] destination_exp; // re-biased exponent for destination + wire [LANES-1:0][LZC_RESULT_WIDTH-1:0] renorm_shamt_s0; // renormalization shift amount + wire [LANES-1:0] mant_is_zero_s0; // for integer zeroes + for (genvar i = 0; i < LANES; ++i) begin + wire mant_is_nonzero; + VX_lzc #( + .WIDTH (INT_MAN_WIDTH), + .MODE (1) + ) lzc ( + .in_i (encoded_mant_s0[i]), + .cnt_o (renorm_shamt_s0[i]), + .valid_o (mant_is_nonzero) + ); + assign mant_is_zero_s0[i] = ~mant_is_nonzero; + end + + wire [LANES-1:0][INT_MAN_WIDTH-1:0] input_mant_s0; // normalized input mantissa + wire [LANES-1:0][INT_EXP_WIDTH-1:0] input_exp_s0; // unbiased true exponent + for (genvar i = 0; i < LANES; ++i) begin `IGNORE_WARNINGS_BEGIN // Input mantissa needs to be normalized @@ -142,7 +139,7 @@ module VX_fp_cvt #( wire [INT_EXP_WIDTH-1:0] int_input_exp; // Realign input mantissa, append zeroes if destination is wider - assign input_mant[i] = encoded_mant_s0[i] << renorm_shamt_s0[i]; + assign input_mant_s0[i] = encoded_mant_s0[i] << renorm_shamt_s0[i]; // Unbias exponent and compensate for shift assign fp_input_exp = fmt_exponent_s0[i] + @@ -152,96 +149,118 @@ module VX_fp_cvt #( assign int_input_exp = (INT_MAN_WIDTH-1) - {1'b0, renorm_shamt_s0[i]}; - assign input_exp[i] = is_itof_s0 ? int_input_exp : fp_input_exp; - - // Rebias the exponent - assign destination_exp[i] = input_exp[i] + EXP_BIAS; + assign input_exp_s0[i] = is_itof_s0 ? int_input_exp : fp_input_exp; `IGNORE_WARNINGS_END end - // Perform adjustments to mantissa and exponent - - wire [LANES-1:0][2*INT_MAN_WIDTH:0] preshift_mant_s0; - wire [LANES-1:0][SHAMT_BITS-1:0] denorm_shamt_s0; - wire [LANES-1:0][INT_EXP_WIDTH-1:0] final_exp_s0; - wire [LANES-1:0] of_before_round_s0; - - for (genvar i = 0; i < LANES; ++i) begin - reg [2*INT_MAN_WIDTH:0] preshift_mant; // mantissa before final shift - reg [SHAMT_BITS-1:0] denorm_shamt; // shift amount for denormalization - reg [INT_EXP_WIDTH-1:0] final_exp; // after eventual adjustments - reg of_before_round; - - always @(*) begin - `IGNORE_WARNINGS_BEGIN - // Default assignment - final_exp = destination_exp[i]; // take exponent as is, only look at lower bits - preshift_mant = {input_mant[i], 33'b0}; // Place mantissa to the left of the shifter - denorm_shamt = 0; // right of mantissa - of_before_round = 1'b0; - - // Handle INT casts - if (is_itof_s0) begin - if ($signed(destination_exp[i]) >= $signed(2**EXP_BITS-1)) begin - // Overflow or infinities (for proper rounding) - final_exp = (2**EXP_BITS-2); // largest normal value - preshift_mant = ~0; // largest normal value and RS bits set - of_before_round = 1'b1; - end else if ($signed(destination_exp[i]) < $signed(-MAN_BITS)) begin - // Limit the shift to retain sticky bits - final_exp = 0; // denormal result - denorm_shamt = denorm_shamt + (2 + MAN_BITS); // to sticky - end else if ($signed(destination_exp[i]) < $signed(1)) begin - // Denormalize underflowing values - final_exp = 0; // denormal result - denorm_shamt = denorm_shamt + 1 - destination_exp[i]; // adjust right shifting - end - end else begin - if ($signed(input_exp[i]) >= $signed((MAX_INT_WIDTH-1) + unsigned_s0)) begin - // overflow: when converting to unsigned the range is larger by one - denorm_shamt = SHAMT_BITS'(0); // prevent shifting - of_before_round = 1'b1; - end else if ($signed(input_exp[i]) < $signed(-1)) begin - // underflow - denorm_shamt = MAX_INT_WIDTH + 1; // all bits go to the sticky - end else begin - // By default right shift mantissa to be an integer - denorm_shamt = (MAX_INT_WIDTH-1) - input_exp[i]; - end - end - `IGNORE_WARNINGS_END - end - - assign preshift_mant_s0[i] = preshift_mant; - assign denorm_shamt_s0[i] = denorm_shamt; - assign final_exp_s0[i] = final_exp; - assign of_before_round_s0[i] = of_before_round; - end - // Pipeline stage1 - + wire valid_in_s1; wire [TAGW-1:0] tag_in_s1; wire is_itof_s1; wire unsigned_s1; wire [2:0] rnd_mode_s1; - fp_type_t [LANES-1:0] in_a_type_s1; + fp_type_t [LANES-1:0] in_a_type_s1; + wire [LANES-1:0] input_sign_s1; wire [LANES-1:0] mant_is_zero_s1; - wire [LANES-1:0] input_sign_s1; - wire [LANES-1:0][2*INT_MAN_WIDTH:0] preshift_mant_s1; - wire [LANES-1:0][SHAMT_BITS-1:0] denorm_shamt_s1; - wire [LANES-1:0][INT_EXP_WIDTH-1:0] final_exp_s1; - wire [LANES-1:0] of_before_round_s1; - + wire [LANES-1:0][INT_MAN_WIDTH-1:0] input_mant_s1; + wire [LANES-1:0][INT_EXP_WIDTH-1:0] input_exp_s1; + VX_pipe_register #( - .DATAW (1 + TAGW + 1 + 1 + `FRM_BITS + LANES * ($bits(fp_type_t) + 1 + 1 + (2*INT_MAN_WIDTH+1) + SHAMT_BITS + INT_EXP_WIDTH + 1)), + .DATAW (1 + TAGW + 1 + `FRM_BITS + 1 + LANES * ($bits(fp_type_t) + 1 + 1 + INT_MAN_WIDTH + INT_EXP_WIDTH)), .RESETW (1) ) pipe_reg1 ( .clk (clk), .reset (reset), .enable (~stall), - .data_in ({valid_in_s0, tag_in_s0, is_itof_s0, unsigned_s0, rnd_mode_s0, in_a_type_s0, mant_is_zero_s0, input_sign_s0, preshift_mant_s0, denorm_shamt_s0, final_exp_s0, of_before_round_s0}), - .data_out ({valid_in_s1, tag_in_s1, is_itof_s1, unsigned_s1, rnd_mode_s1, in_a_type_s1, mant_is_zero_s1, input_sign_s1, preshift_mant_s1, denorm_shamt_s1, final_exp_s1, of_before_round_s1}) + .data_in ({valid_in_s0, tag_in_s0, is_itof_s0, unsigned_s0, rnd_mode_s0, in_a_type_s0, input_sign_s0, mant_is_zero_s0, input_mant_s0, input_exp_s0}), + .data_out ({valid_in_s1, tag_in_s1, is_itof_s1, unsigned_s1, rnd_mode_s1, in_a_type_s1, input_sign_s1, mant_is_zero_s1, input_mant_s1, input_exp_s1}) + ); + + // Perform adjustments to mantissa and exponent + + wire [LANES-1:0][2*INT_MAN_WIDTH:0] destination_mant_s1; + wire [LANES-1:0][INT_EXP_WIDTH-1:0] final_exp_s1; + wire [LANES-1:0] of_before_round_s1; + + for (genvar i = 0; i < LANES; ++i) begin + wire [INT_EXP_WIDTH-1:0] destination_exp; // re-biased exponent for destination + reg [2*INT_MAN_WIDTH:0] preshift_mant; // mantissa before final shift + reg [SHAMT_BITS-1:0] denorm_shamt; // shift amount for denormalization + reg [INT_EXP_WIDTH-1:0] final_exp; // after eventual adjustments + reg of_before_round; + + // Rebias the exponent + assign destination_exp = input_exp_s1[i] + EXP_BIAS; + + always @(*) begin + `IGNORE_WARNINGS_BEGIN + // Default assignment + final_exp = destination_exp; // take exponent as is, only look at lower bits + preshift_mant = {input_mant_s1[i], 33'b0}; // Place mantissa to the left of the shifter + denorm_shamt = 0; // right of mantissa + of_before_round = 1'b0; + + // Handle INT casts + if (is_itof_s1) begin + if ($signed(destination_exp) >= $signed(2**EXP_BITS-1)) begin + // Overflow or infinities (for proper rounding) + final_exp = (2**EXP_BITS-2); // largest normal value + preshift_mant = ~0; // largest normal value and RS bits set + of_before_round = 1'b1; + end else if ($signed(destination_exp) < $signed(-MAN_BITS)) begin + // Limit the shift to retain sticky bits + final_exp = 0; // denormal result + denorm_shamt = denorm_shamt + (2 + MAN_BITS); // to sticky + end else if ($signed(destination_exp) < $signed(1)) begin + // Denormalize underflowing values + final_exp = 0; // denormal result + denorm_shamt = denorm_shamt + 1 - destination_exp; // adjust right shifting + end + end else begin + if ($signed(input_exp_s1[i]) >= $signed((MAX_INT_WIDTH-1) + unsigned_s1)) begin + // overflow: when converting to unsigned the range is larger by one + denorm_shamt = SHAMT_BITS'(0); // prevent shifting + of_before_round = 1'b1; + end else if ($signed(input_exp_s1[i]) < $signed(-1)) begin + // underflow + denorm_shamt = MAX_INT_WIDTH + 1; // all bits go to the sticky + end else begin + // By default right shift mantissa to be an integer + denorm_shamt = (MAX_INT_WIDTH-1) - input_exp_s1[i]; + end + end + `IGNORE_WARNINGS_END + end + + assign destination_mant_s1[i] = preshift_mant >> denorm_shamt; + assign final_exp_s1[i] = final_exp; + assign of_before_round_s1[i] = of_before_round; + end + + // Pipeline stage2 + + wire valid_in_s2; + wire [TAGW-1:0] tag_in_s2; + wire is_itof_s2; + wire unsigned_s2; + wire [2:0] rnd_mode_s2; + fp_type_t [LANES-1:0] in_a_type_s2; + wire [LANES-1:0] mant_is_zero_s2; + wire [LANES-1:0] input_sign_s2; + wire [LANES-1:0][2*INT_MAN_WIDTH:0] destination_mant_s2; + wire [LANES-1:0][INT_EXP_WIDTH-1:0] final_exp_s2; + wire [LANES-1:0] of_before_round_s2; + + VX_pipe_register #( + .DATAW (1 + TAGW + 1 + 1 + `FRM_BITS + LANES * ($bits(fp_type_t) + 1 + 1 + (2*INT_MAN_WIDTH+1) + INT_EXP_WIDTH + 1)), + .RESETW (1) + ) pipe_reg2 ( + .clk (clk), + .reset (reset), + .enable (~stall), + .data_in ({valid_in_s1, tag_in_s1, is_itof_s1, unsigned_s1, rnd_mode_s1, in_a_type_s1, mant_is_zero_s1, input_sign_s1, destination_mant_s1, final_exp_s1, of_before_round_s1}), + .data_out ({valid_in_s2, tag_in_s2, is_itof_s2, unsigned_s2, rnd_mode_s2, in_a_type_s2, mant_is_zero_s2, input_sign_s2, destination_mant_s2, final_exp_s2, of_before_round_s2}) ); wire [LANES-1:0] rounded_sign; @@ -251,41 +270,37 @@ module VX_fp_cvt #( // Rouding and classification for (genvar i = 0; i < LANES; ++i) begin - wire [2*INT_MAN_WIDTH:0] destination_mant; wire [MAN_BITS-1:0] final_mant; // mantissa after adjustments wire [MAX_INT_WIDTH-1:0] final_int; // integer shifted in position wire [1:0] round_sticky_bits; wire [31:0] fmt_pre_round_abs; wire [31:0] pre_round_abs; - // Mantissa adjustment shift - assign destination_mant = preshift_mant_s1[i] >> denorm_shamt_s1[i]; - // Extract final mantissa and round bit, discard the normal bit (for FP) - assign {final_mant, fp_round_sticky_bits[i][1]} = destination_mant[2*INT_MAN_WIDTH-1 : 2*INT_MAN_WIDTH-1 - (MAN_BITS+1) + 1]; - assign {final_int, int_round_sticky_bits[i][1]} = destination_mant[2*INT_MAN_WIDTH : 2*INT_MAN_WIDTH - (MAX_INT_WIDTH+1) + 1]; + assign {final_mant, fp_round_sticky_bits[i][1]} = destination_mant_s2[i][2*INT_MAN_WIDTH-1 : 2*INT_MAN_WIDTH-1 - (MAN_BITS+1) + 1]; + assign {final_int, int_round_sticky_bits[i][1]} = destination_mant_s2[i][2*INT_MAN_WIDTH : 2*INT_MAN_WIDTH - (MAX_INT_WIDTH+1) + 1]; // Collapse sticky bits - assign fp_round_sticky_bits[i][0] = (| destination_mant[NUM_FP_STICKY-1:0]); - assign int_round_sticky_bits[i][0] = (| destination_mant[NUM_INT_STICKY-1:0]); + assign fp_round_sticky_bits[i][0] = (| destination_mant_s2[i][NUM_FP_STICKY-1:0]); + assign int_round_sticky_bits[i][0] = (| destination_mant_s2[i][NUM_INT_STICKY-1:0]); // select RS bits for destination operation - assign round_sticky_bits = is_itof_s1 ? fp_round_sticky_bits[i] : int_round_sticky_bits[i]; + assign round_sticky_bits = is_itof_s2 ? fp_round_sticky_bits[i] : int_round_sticky_bits[i]; // Pack exponent and mantissa into proper rounding form - assign fmt_pre_round_abs = {1'b0, final_exp_s1[i][EXP_BITS-1:0], final_mant[MAN_BITS-1:0]}; + assign fmt_pre_round_abs = {1'b0, final_exp_s2[i][EXP_BITS-1:0], final_mant[MAN_BITS-1:0]}; // Select output with destination format and operation - assign pre_round_abs = is_itof_s1 ? fmt_pre_round_abs : final_int; + assign pre_round_abs = is_itof_s2 ? fmt_pre_round_abs : final_int; // Perform the rounding VX_fp_rounding #( .DAT_WIDTH (32) ) fp_rounding ( .abs_value_i (pre_round_abs), - .sign_i (input_sign_s1[i]), + .sign_i (input_sign_s2[i]), .round_sticky_bits_i(round_sticky_bits), - .rnd_mode_i (rnd_mode_s1), + .rnd_mode_i (rnd_mode_s2), .effective_subtraction_i(1'b0), .abs_rounded_o (rounded_abs[i]), .sign_o (rounded_sign[i]), @@ -293,28 +308,28 @@ module VX_fp_cvt #( ); end - // Pipeline stage2 + // Pipeline stage3 - wire valid_in_s2; - wire [TAGW-1:0] tag_in_s2; - wire is_itof_s2; - wire unsigned_s2; - fp_type_t [LANES-1:0] in_a_type_s2; - wire [LANES-1:0] mant_is_zero_s2; - wire [LANES-1:0] input_sign_s2; - wire [LANES-1:0] rounded_sign_s2; - wire [LANES-1:0][31:0] rounded_abs_s2; - wire [LANES-1:0] of_before_round_s2; + wire valid_in_s3; + wire [TAGW-1:0] tag_in_s3; + wire is_itof_s3; + wire unsigned_s3; + fp_type_t [LANES-1:0] in_a_type_s3; + wire [LANES-1:0] mant_is_zero_s3; + wire [LANES-1:0] input_sign_s3; + wire [LANES-1:0] rounded_sign_s3; + wire [LANES-1:0][31:0] rounded_abs_s3; + wire [LANES-1:0] of_before_round_s3; VX_pipe_register #( .DATAW (1 + TAGW + 1 + 1 + LANES * ($bits(fp_type_t) + 1 + 1 + 32 + 1 + 1)), .RESETW (1) - ) pipe_reg2 ( + ) pipe_reg3 ( .clk (clk), .reset (reset), .enable (~stall), - .data_in ({valid_in_s1, tag_in_s1, is_itof_s1, unsigned_s1, in_a_type_s1, mant_is_zero_s1, input_sign_s1, rounded_abs, rounded_sign, of_before_round_s1}), - .data_out ({valid_in_s2, tag_in_s2, is_itof_s2, unsigned_s2, in_a_type_s2, mant_is_zero_s2, input_sign_s2, rounded_abs_s2, rounded_sign_s2, of_before_round_s2}) + .data_in ({valid_in_s2, tag_in_s2, is_itof_s2, unsigned_s2, in_a_type_s2, mant_is_zero_s2, input_sign_s2, rounded_abs, rounded_sign, of_before_round_s2}), + .data_out ({valid_in_s3, tag_in_s3, is_itof_s3, unsigned_s3, in_a_type_s3, mant_is_zero_s3, input_sign_s3, rounded_abs_s3, rounded_sign_s3, of_before_round_s3}) ); wire [LANES-1:0] of_after_round; @@ -325,14 +340,14 @@ module VX_fp_cvt #( for (genvar i = 0; i < LANES; ++i) begin // Assemble regular result, nan box short ones. Int zeroes need to be detected - assign fmt_result[i] = (is_itof_s2 & mant_is_zero_s2[i]) ? 0 : {rounded_sign_s2[i], rounded_abs_s2[i][EXP_BITS+MAN_BITS-1:0]}; + assign fmt_result[i] = (is_itof_s3 & mant_is_zero_s3[i]) ? 0 : {rounded_sign_s3[i], rounded_abs_s3[i][EXP_BITS+MAN_BITS-1:0]}; // Classification after rounding select by destination format - assign uf_after_round[i] = (rounded_abs_s2[i][EXP_BITS+MAN_BITS-1:MAN_BITS] == 0); // denormal - assign of_after_round[i] = (rounded_abs_s2[i][EXP_BITS+MAN_BITS-1:MAN_BITS] == ~0); // inf exp. + assign uf_after_round[i] = (rounded_abs_s3[i][EXP_BITS+MAN_BITS-1:MAN_BITS] == 0); // denormal + assign of_after_round[i] = (rounded_abs_s3[i][EXP_BITS+MAN_BITS-1:MAN_BITS] == ~0); // inf exp. // Negative integer result needs to be brought into two's complement - assign rounded_int_res[i] = rounded_sign_s2[i] ? (-rounded_abs_s2[i]) : rounded_abs_s2[i]; + assign rounded_int_res[i] = rounded_sign_s3[i] ? (-rounded_abs_s3[i]) : rounded_abs_s3[i]; assign rounded_int_res_zero[i] = (rounded_int_res[i] == 0); end @@ -347,13 +362,13 @@ module VX_fp_cvt #( for (genvar i = 0; i < LANES; ++i) begin // Detect special case from source format, I2F casts don't produce a special result - assign fp_result_is_special[i] = ~is_itof_s2 & (in_a_type_s2[i].is_zero | in_a_type_s2[i].is_nan); + assign fp_result_is_special[i] = ~is_itof_s3 & (in_a_type_s3[i].is_zero | in_a_type_s3[i].is_nan); // Signalling input NaNs raise invalid flag, otherwise no flags set - assign fp_special_status[i] = in_a_type_s2[i].is_signaling ? {1'b1, 4'h0} : 5'h0; // invalid operation + assign fp_special_status[i] = in_a_type_s3[i].is_signaling ? {1'b1, 4'h0} : 5'h0; // invalid operation // Assemble result according to destination format - assign fp_special_result[i] = in_a_type_s2[i].is_zero ? (32'(input_sign_s2) << 31) // signed zero + assign fp_special_result[i] = in_a_type_s3[i].is_zero ? (32'(input_sign_s3) << 31) // signed zero : {1'b0, QNAN_EXPONENT, QNAN_MANTISSA}; // qNaN end @@ -366,20 +381,20 @@ module VX_fp_cvt #( for (genvar i = 0; i < LANES; ++i) begin // Assemble result according to destination format always @(*) begin - if (input_sign_s2[i] && !in_a_type_s2[i].is_nan) begin + if (input_sign_s3[i] && !in_a_type_s3[i].is_nan) begin int_special_result[i][30:0] = 0; // alone yields 2**(31)-1 - int_special_result[i][31] = ~unsigned_s2; // for unsigned casts yields 2**31 + int_special_result[i][31] = ~unsigned_s3; // for unsigned casts yields 2**31 end else begin int_special_result[i][30:0] = 2**(31) - 1; // alone yields 2**(31)-1 - int_special_result[i][31] = unsigned_s2; // for unsigned casts yields 2**31 + int_special_result[i][31] = unsigned_s3; // for unsigned casts yields 2**31 end end // Detect special case from source format (inf, nan, overflow, nan-boxing or negative unsigned) - assign int_result_is_special[i] = in_a_type_s2[i].is_nan - | in_a_type_s2[i].is_inf - | of_before_round_s2[i] - | (input_sign_s2[i] & unsigned_s2 & ~rounded_int_res_zero[i]); + assign int_result_is_special[i] = in_a_type_s3[i].is_nan + | in_a_type_s3[i].is_inf + | of_before_round_s3[i] + | (input_sign_s3[i] & unsigned_s3 & ~rounded_int_res_zero[i]); // All integer special cases are invalid assign int_special_status[i] = {1'b1, 4'h0}; @@ -395,12 +410,12 @@ module VX_fp_cvt #( fflags_t fp_status, int_status; wire [31:0] fp_result, int_result; - wire inexact = is_itof_s2 ? (| fp_round_sticky_bits[i]) // overflow is invalid in i2f; - : (| fp_round_sticky_bits[i]) | (~in_a_type_s2[i].is_inf & (of_before_round_s2[i] | of_after_round[i])); + wire inexact = is_itof_s3 ? (| fp_round_sticky_bits[i]) // overflow is invalid in i2f; + : (| fp_round_sticky_bits[i]) | (~in_a_type_s3[i].is_inf & (of_before_round_s3[i] | of_after_round[i])); - assign fp_regular_status.NV = is_itof_s2 & (of_before_round_s2[i] | of_after_round[i]); // overflow is invalid for I2F casts + assign fp_regular_status.NV = is_itof_s3 & (of_before_round_s3[i] | of_after_round[i]); // overflow is invalid for I2F casts assign fp_regular_status.DZ = 1'b0; // no divisions - assign fp_regular_status.OF = ~is_itof_s2 & (~in_a_type_s2[i].is_inf & (of_before_round_s2[i] | of_after_round[i])); // inf casts no OF + assign fp_regular_status.OF = ~is_itof_s3 & (~in_a_type_s3[i].is_inf & (of_before_round_s3[i] | of_after_round[i])); // inf casts no OF assign fp_regular_status.UF = uf_after_round[i] & inexact; assign fp_regular_status.NX = inexact; @@ -413,8 +428,8 @@ module VX_fp_cvt #( assign int_status = int_result_is_special[i] ? int_special_status[i] : int_regular_status; // Select output depending on special case detection - assign tmp_result[i] = is_itof_s2 ? fp_result : int_result; - assign tmp_fflags[i] = is_itof_s2 ? fp_status : int_status; + assign tmp_result[i] = is_itof_s3 ? fp_result : int_result; + assign tmp_fflags[i] = is_itof_s3 ? fp_status : int_status; end assign stall = ~ready_out && valid_out; @@ -422,11 +437,11 @@ module VX_fp_cvt #( VX_pipe_register #( .DATAW (1 + TAGW + (LANES * 32) + (LANES * `FFG_BITS)), .RESETW (1) - ) pipe_reg3 ( + ) pipe_reg4 ( .clk (clk), .reset (reset), .enable (!stall), - .data_in ({valid_in_s2, tag_in_s2, tmp_result, tmp_fflags}), + .data_in ({valid_in_s3, tag_in_s3, tmp_result, tmp_fflags}), .data_out ({valid_out, tag_out, result, fflags}) ); @@ -434,4 +449,4 @@ module VX_fp_cvt #( assign has_fflags = 1'b1; -endmodule +endmodule \ No newline at end of file From b8fd2308e178447938ff29fcd5a059b15041534c Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Tue, 22 Jun 2021 21:02:37 -0700 Subject: [PATCH 07/13] arbiter specialization --- hw/rtl/libs/VX_onehot_encoder.v | 125 ++++---- hw/rtl/libs/VX_priority_encoder.v | 122 ++++---- hw/rtl/libs/VX_rr_arbiter.v | 466 +++++++++++++++++++++++++----- 3 files changed, 526 insertions(+), 187 deletions(-) diff --git a/hw/rtl/libs/VX_onehot_encoder.v b/hw/rtl/libs/VX_onehot_encoder.v index bace6dc4..b60b73e5 100644 --- a/hw/rtl/libs/VX_onehot_encoder.v +++ b/hw/rtl/libs/VX_onehot_encoder.v @@ -1,71 +1,88 @@ `include "VX_platform.vh" // Fast encoder using parallel prefix computation -// Adapter from BaseJump STL: http://bjump.org/index.html +// Adapter from BaseJump STL: http://bjump.org/data_out.html module VX_onehot_encoder #( - parameter N = 1, - parameter REVERSE = 0, - parameter FAST = 1 + parameter N = 1, + parameter LN = `LOG2UP(N) ) ( - input wire [N-1:0] data_in, - output wire [`LOG2UP(N)-1:0] data_out, - output wire valid + input wire [N-1:0] data_in, + output wire [LN-1:0] data_out, + output wire valid ); - if (FAST) begin - `IGNORE_WARNINGS_BEGIN - localparam levels_lp = $clog2(N); - localparam aligned_width_lp = 1 << $clog2(N); - - wire [levels_lp:0][aligned_width_lp-1:0] addr; - wire [levels_lp:0][aligned_width_lp-1:0] v; - - // base case, also handle padding for non-power of two inputs - assign v[0] = REVERSE ? (data_in << (aligned_width_lp - N)) : ((aligned_width_lp)'(data_in)); - assign addr[0] = 'x; - - for (genvar level = 1; level < levels_lp+1; level=level+1) begin - localparam segments_lp = 2**(levels_lp-level); - localparam segment_slot_lp = aligned_width_lp/segments_lp; - localparam segment_width_lp = level; // how many bits are needed at each level - - for (genvar segment = 0; segment < segments_lp; segment=segment+1) begin - wire [1:0] vs = { - v[level-1][segment*segment_slot_lp+(segment_slot_lp >> 1)], - v[level-1][segment*segment_slot_lp] - }; - - assign v[level][segment*segment_slot_lp] = (| vs); + if (N == 1) begin + + assign data_out = data_in; + assign valid = data_in; + + end else if (N == 2) begin + + assign data_out = data_in[1]; + assign valid = (| data_in); - if (level == 1) begin - assign addr[level][(segment*segment_slot_lp)+:segment_width_lp] = vs[!REVERSE]; - end else begin - assign addr[level][(segment*segment_slot_lp)+:segment_width_lp] = { - vs[!REVERSE], - addr[level-1][segment*segment_slot_lp+:segment_width_lp-1] | addr[level-1][segment*segment_slot_lp+(segment_slot_lp >> 1)+:segment_width_lp-1] - }; - end - end - end - - assign data_out = addr[levels_lp][`LOG2UP(N)-1:0]; - assign valid = v[levels_lp][0]; - `IGNORE_WARNINGS_END end else begin + + reg [LN-1:0] index_r; - reg [`LOG2UP(N)-1:0] data_out_r; - reg valid_r; - - always @(*) begin - data_out_r = 'x; - for (integer i = 0; i < N; i++) begin - if (data_in[i]) begin - data_out_r = `LOG2UP(N)'(i); + if (N == 4) begin + always @(*) begin + casez (data_in) + 4'b0001: index_r = LN'(0); + 4'b001?: index_r = LN'(1); + 4'b01??: index_r = LN'(2); + 4'b1???: index_r = LN'(3); + default: index_r = 'x; + endcase + end + end else if (N == 8) begin + always @(*) begin + casez (data_in) + 8'b00000001: index_r = LN'(0); + 8'b0000001?: index_r = LN'(1); + 8'b000001??: index_r = LN'(2); + 8'b00001???: index_r = LN'(3); + 8'b0001????: index_r = LN'(4); + 8'b001?????: index_r = LN'(5); + 8'b01??????: index_r = LN'(6); + 8'b1???????: index_r = LN'(7); + default: index_r = 'x; + endcase + end + end else if (N == 16) begin + always @(*) begin + casez (data_in) + 16'b0000000000000001: index_r = LN'(0); + 16'b000000000000001?: index_r = LN'(1); + 16'b00000000000001??: index_r = LN'(2); + 16'b0000000000001???: index_r = LN'(3); + 16'b000000000001????: index_r = LN'(4); + 16'b00000000001?????: index_r = LN'(5); + 16'b0000000001??????: index_r = LN'(6); + 16'b000000001???????: index_r = LN'(7); + 16'b00000001????????: index_r = LN'(8); + 16'b0000001?????????: index_r = LN'(9); + 16'b000001??????????: index_r = LN'(10); + 16'b00001???????????: index_r = LN'(11); + 16'b0001????????????: index_r = LN'(12); + 16'b001?????????????: index_r = LN'(13); + 16'b01??????????????: index_r = LN'(14); + 16'b1???????????????: index_r = LN'(15); + default: index_r = 'x; + endcase + end + end else begin + always @(*) begin + index_r = 'x; + for (integer i = 0; i < N; i++) begin + if (data_in[i]) begin + index_r = `LOG2UP(N)'(i); + end end end end - assign data_out = data_out_r; + assign data_out = index_r; assign valid = (| data_in); end diff --git a/hw/rtl/libs/VX_priority_encoder.v b/hw/rtl/libs/VX_priority_encoder.v index 57e6ff69..a14c180f 100644 --- a/hw/rtl/libs/VX_priority_encoder.v +++ b/hw/rtl/libs/VX_priority_encoder.v @@ -1,10 +1,9 @@ `include "VX_platform.vh" module VX_priority_encoder #( - parameter N = 1, - parameter REVERSE = 0, - parameter FAST = 1, - parameter LN = `LOG2UP(N) + parameter N = 1, + parameter FAST = 1, + parameter LN = `LOG2UP(N) ) ( input wire [N-1:0] data_in, output wire [N-1:0] onehot, @@ -20,71 +19,78 @@ module VX_priority_encoder #( end else if (N == 2) begin - assign onehot = {!data_in[REVERSE], data_in[REVERSE]}; - assign index = !data_in[REVERSE]; + assign onehot = {~data_in[0], data_in[0]}; + assign index = ~data_in[0]; assign valid_out = (| data_in); - end else if (FAST) begin - - wire [N-1:0] scan_lo; - - VX_scan #( - .N (N), - .OP (2), - .REVERSE (REVERSE) - ) scan ( - .data_in (data_in), - .data_out (scan_lo) - ); - - if (REVERSE) begin - assign onehot = scan_lo & {1'b1, (~scan_lo[N-1:1])}; - assign valid_out = scan_lo[0]; - end else begin - assign onehot = scan_lo & {(~scan_lo[N-2:0]), 1'b1}; - assign valid_out = scan_lo[N-1]; - end - - VX_onehot_encoder #( - .N (N), - .REVERSE (REVERSE) - ) onehot_encoder ( - .data_in (onehot), - .data_out (index), - `UNUSED_PIN (valid) - ); - end else begin - - reg [N-1:0] onehot_r; + reg [LN-1:0] index_r; - - always @(*) begin - index_r = 'x; - onehot_r = 0; - if (REVERSE) begin - for (integer i = N-1; i >= 0; i--) begin + reg [N-1:0] onehot_r; + + if (N == 4) begin + always @(*) begin + casez (data_in) + 4'b???1: begin onehot_r = 4'b0001; index_r = LN'(0); end + 4'b??10: begin onehot_r = 4'b0010; index_r = LN'(1); end + 4'b?100: begin onehot_r = 4'b0100; index_r = LN'(2); end + 4'b1000: begin onehot_r = 4'b1000; index_r = LN'(3); end + default: begin onehot_r = 'x; index_r = 'x; end + endcase + end + end else if (N == 8) begin + always @(*) begin + casez (data_in) + 8'b???????1: begin onehot_r = 8'b00000001; index_r = LN'(0); end + 8'b??????10: begin onehot_r = 8'b00000010; index_r = LN'(1); end + 8'b?????100: begin onehot_r = 8'b00000100; index_r = LN'(2); end + 8'b????1000: begin onehot_r = 8'b00001000; index_r = LN'(3); end + 8'b???10000: begin onehot_r = 8'b00010000; index_r = LN'(4); end + 8'b??100000: begin onehot_r = 8'b00100000; index_r = LN'(5); end + 8'b?1000000: begin onehot_r = 8'b01000000; index_r = LN'(6); end + 8'b10000000: begin onehot_r = 8'b10000000; index_r = LN'(7); end + default: begin onehot_r = 'x; index_r = 'x; end + endcase + end + end else if (N == 16) begin + always @(*) begin + casez (data_in) + 16'b???????????????1: begin onehot_r = 16'b0000000000000001; index_r = LN'(0); end + 16'b??????????????10: begin onehot_r = 16'b0000000000000010; index_r = LN'(1); end + 16'b?????????????100: begin onehot_r = 16'b0000000000000100; index_r = LN'(2); end + 16'b????????????1000: begin onehot_r = 16'b0000000000001000; index_r = LN'(3); end + 16'b???????????10000: begin onehot_r = 16'b0000000000010000; index_r = LN'(4); end + 16'b??????????100000: begin onehot_r = 16'b0000000000100000; index_r = LN'(5); end + 16'b?????????1000000: begin onehot_r = 16'b0000000001000000; index_r = LN'(6); end + 16'b????????10000000: begin onehot_r = 16'b0000000010000000; index_r = LN'(7); end + 16'b???????100000000: begin onehot_r = 16'b0000000100000000; index_r = LN'(8); end + 16'b??????1000000000: begin onehot_r = 16'b0000001000000000; index_r = LN'(9); end + 16'b?????10000000000: begin onehot_r = 16'b0000010000000000; index_r = LN'(10); end + 16'b????100000000000: begin onehot_r = 16'b0000100000000000; index_r = LN'(11); end + 16'b???1000000000000: begin onehot_r = 16'b0001000000000000; index_r = LN'(12); end + 16'b??10000000000000: begin onehot_r = 16'b0010000000000000; index_r = LN'(13); end + 16'b?100000000000000: begin onehot_r = 16'b0100000000000000; index_r = LN'(14); end + 16'b1000000000000000: begin onehot_r = 16'b1000000000000000; index_r = LN'(15); end + default: begin onehot_r = 'x; index_r = 'x; end + endcase + end + end else begin + always @(*) begin + index_r = 'x; + onehot_r = 'x; + for (integer i = N-1; i >= 0; --i) begin if (data_in[i]) begin index_r = LN'(i); + onehot_r = 0; onehot_r[i] = 1'b1; - break; - end - end - end else begin - for (integer i = 0; i < N; i++) begin - if (data_in[i]) begin - index_r = LN'(i); - onehot_r[i] = 1'b1; - break; end end end end - assign index = index_r; - assign onehot = onehot_r; - assign valid_out = (| data_in); - - end + assign index = index_r; + assign onehot = onehot_r; + assign valid_out = (| data_in); + end endmodule \ No newline at end of file diff --git a/hw/rtl/libs/VX_rr_arbiter.v b/hw/rtl/libs/VX_rr_arbiter.v index c7398ba2..550c9287 100644 --- a/hw/rtl/libs/VX_rr_arbiter.v +++ b/hw/rtl/libs/VX_rr_arbiter.v @@ -3,8 +3,7 @@ module VX_rr_arbiter #( parameter NUM_REQS = 1, parameter LOCK_ENABLE = 0, - parameter LOG_NUM_REQS = $clog2(NUM_REQS), - parameter FAST = 1 + parameter LOG_NUM_REQS = $clog2(NUM_REQS) ) ( input wire clk, input wire reset, @@ -15,6 +14,8 @@ module VX_rr_arbiter #( output wire grant_valid ); + localparam NN = NUM_REQS * NUM_REQS; + if (NUM_REQS == 1) begin `UNUSED_VAR (clk) @@ -24,92 +25,407 @@ module VX_rr_arbiter #( assign grant_onehot = requests; assign grant_valid = requests[0]; - end else if (FAST == 1) begin - - wire [NUM_REQS-1:0] req_masked; - wire [NUM_REQS-1:0] grant, grant_masked, grant_unmasked; - /* verilator lint_off UNOPTFLAT */ - wire [NUM_REQS-1:0] mask_higher_pri_reqs; - /* verilator lint_off UNOPTFLAT */ - wire [NUM_REQS-1:0] unmask_higher_pri_reqs; - wire no_req_masked; - reg [NUM_REQS-1:0] pointer_reg; - - // Simple priority arbitration for masked portion - assign req_masked = requests & pointer_reg; - assign mask_higher_pri_reqs[NUM_REQS-1:1] = mask_higher_pri_reqs[NUM_REQS-2:0] | req_masked[NUM_REQS-2:0]; - assign mask_higher_pri_reqs[0] = 1'b0; - assign grant_masked[NUM_REQS-1:0] = req_masked[NUM_REQS-1:0] & ~mask_higher_pri_reqs[NUM_REQS-1:0]; - - // Simple priority arbitration for unmasked portion - assign unmask_higher_pri_reqs[NUM_REQS-1:1] = unmask_higher_pri_reqs[NUM_REQS-2:0] | requests[NUM_REQS-2:0]; - assign unmask_higher_pri_reqs[0] = 1'b0; - assign grant_unmasked[NUM_REQS-1:0] = requests[NUM_REQS-1:0] & ~unmask_higher_pri_reqs[NUM_REQS-1:0]; - - // Use grant_masked if there is any there, otherwise use grant_unmasked. - assign no_req_masked = ~(| req_masked); - assign grant = ({NUM_REQS{no_req_masked}} & grant_unmasked) | grant_masked; - - // Generate arbiter pointer update - wire mask_ptr_sel = (| req_masked) & (!LOCK_ENABLE || enable); - wire unmask_ptr_sel = (| requests) & (!LOCK_ENABLE || enable); - - // Pointer update - always @(posedge clk) begin - if (reset) begin - pointer_reg <= {NUM_REQS{1'b1}}; - end else if (mask_ptr_sel) begin // select if masked arbiter used - pointer_reg <= mask_higher_pri_reqs; - end else if (unmask_ptr_sel) begin // select if unmasked arbiter used - pointer_reg <= unmask_higher_pri_reqs; - end - end - - VX_onehot_encoder #( - .N (NUM_REQS) - ) onehot_encoder ( - .data_in (grant), - .data_out (grant_index), - `UNUSED_PIN (valid) - ); - - assign grant_onehot = grant; - assign grant_valid = (| requests); - end else begin - - reg [LOG_NUM_REQS-1:0] grant_table [NUM_REQS-1:0]; - reg [LOG_NUM_REQS-1:0] state; - always @(*) begin - for (integer i = 0; i < NUM_REQS; i++) begin - grant_table[i] = LOG_NUM_REQS'(i); - for (integer j = 0; j < NUM_REQS; j++) begin - if (requests[(i+j) % NUM_REQS]) begin - grant_table[i] = LOG_NUM_REQS'((i+j) % NUM_REQS); + reg [LOG_NUM_REQS-1:0] grant_index_r; + reg [NUM_REQS-1:0] grant_onehot_r; + reg [LOG_NUM_REQS-1:0] state; + + if (NUM_REQS == 2) begin + always @(*) begin + casez ({state, requests}) + 3'b0_1?: begin grant_onehot_r = 2'b10; grant_index_r = LOG_NUM_REQS'(1); end + 3'b0_01: begin grant_onehot_r = 2'b01; grant_index_r = LOG_NUM_REQS'(0); end + 3'b1_?1: begin grant_onehot_r = 2'b01; grant_index_r = LOG_NUM_REQS'(0); end + 3'b1_10: begin grant_onehot_r = 2'b10; grant_index_r = LOG_NUM_REQS'(1); end + default: begin grant_onehot_r = 'x; grant_index_r = 'x; end + endcase + end + end else if (NUM_REQS == 4) begin + always @(*) begin + casez ({state, requests}) + 6'b00_??1?: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end + 6'b00_?10?: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end + 6'b00_100?: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end + 6'b00_0001: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end + 6'b01_?1??: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end + 6'b01_10??: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end + 6'b01_00?1: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end + 6'b01_0010: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end + 6'b10_1???: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end + 6'b10_0??1: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end + 6'b10_0?10: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end + 6'b10_0100: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end + 6'b11_???1: begin grant_onehot_r = 4'b0001; grant_index_r = LOG_NUM_REQS'(0); end + 6'b11_??10: begin grant_onehot_r = 4'b0010; grant_index_r = LOG_NUM_REQS'(1); end + 6'b11_?100: begin grant_onehot_r = 4'b0100; grant_index_r = LOG_NUM_REQS'(2); end + 6'b11_1000: begin grant_onehot_r = 4'b1000; grant_index_r = LOG_NUM_REQS'(3); end + default: begin grant_onehot_r = 'x; grant_index_r = 'x; end + endcase + end + end else if (NUM_REQS == 8) begin + always @(*) begin + casez ({state, requests}) + 11'b000_??????1?: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b000_?????10?: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b000_????100?: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b000_???1000?: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b000_??10000?: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b000_?100000?: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b000_1000000?: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b000_00000001: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b001_?????1??: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b001_????10??: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b001_???100??: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b001_??1000??: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b001_?10000??: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b001_100000??: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b001_000000?1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b001_00000010: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b010_????1???: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b010_???10???: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b010_??100???: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b010_?1000???: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b010_10000???: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b010_00000??1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b010_00000?10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b010_00000100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b011_???1????: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b011_??10????: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b011_?100????: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b011_1000????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b011_0000???1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b011_0000??10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b011_0000?100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b011_00001000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b100_??1?????: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b100_?10?????: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b100_100?????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b100_000????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b100_000???10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b100_000??100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b100_000?1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b100_00010000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b101_?1??????: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b101_10??????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b101_00?????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b101_00????10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b101_00???100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b101_00??1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b101_00?10000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b101_00100000: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b110_1???????: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + 11'b110_0??????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b110_0?????10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b110_0????100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b110_0???1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b110_0??10000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b110_0?100000: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b110_01000000: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b111_???????1: begin grant_onehot_r = 8'b00000001; grant_index_r = LOG_NUM_REQS'(0); end + 11'b111_??????10: begin grant_onehot_r = 8'b00000010; grant_index_r = LOG_NUM_REQS'(1); end + 11'b111_?????100: begin grant_onehot_r = 8'b00000100; grant_index_r = LOG_NUM_REQS'(2); end + 11'b111_????1000: begin grant_onehot_r = 8'b00001000; grant_index_r = LOG_NUM_REQS'(3); end + 11'b111_???10000: begin grant_onehot_r = 8'b00010000; grant_index_r = LOG_NUM_REQS'(4); end + 11'b111_??100000: begin grant_onehot_r = 8'b00100000; grant_index_r = LOG_NUM_REQS'(5); end + 11'b111_?1000000: begin grant_onehot_r = 8'b01000000; grant_index_r = LOG_NUM_REQS'(6); end + 11'b111_10000000: begin grant_onehot_r = 8'b10000000; grant_index_r = LOG_NUM_REQS'(7); end + default: begin grant_onehot_r = 'x; grant_index_r = 'x; end + endcase + end + end else if (NUM_REQS == 16) begin + always @(*) begin + casez ({state, requests}) + 20'b0000_??????????????1?: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0000_?????????????10?: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0000_????????????100?: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0000_???????????1000?: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0000_??????????10000?: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0000_?????????100000?: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0000_????????1000000?: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0000_???????10000000?: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0000_??????100000000?: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0000_?????1000000000?: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0000_????10000000000?: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0000_???100000000000?: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0000_??1000000000000?: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0000_?10000000000000?: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0000_100000000000000?: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0000_0000000000000001: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0001_?????????????1??: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0001_????????????10??: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0001_???????????100??: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0001_??????????1000??: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0001_?????????10000??: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0001_????????100000??: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0001_???????1000000??: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0001_??????10000000??: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0001_?????100000000??: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0001_????1000000000??: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0001_???10000000000??: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0001_??100000000000??: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0001_?1000000000000??: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0001_10000000000000??: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0001_00000000000000?1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0001_0000000000000010: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0010_????????????1???: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0010_???????????10???: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0010_??????????100???: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0010_?????????1000???: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0010_????????10000???: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0010_???????100000???: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0010_??????1000000???: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0010_?????10000000???: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0010_????100000000???: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0010_???1000000000???: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0010_??10000000000???: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0010_?100000000000???: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0010_1000000000000???: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0010_0000000000000??1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0010_0000000000000?10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0010_0000000000000100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0011_???????????1????: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0011_??????????10????: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0011_?????????100????: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0011_????????1000????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0011_???????10000????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0011_??????100000????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0011_?????1000000????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0011_????10000000????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0011_???100000000????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0011_??1000000000????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0011_?10000000000????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0011_100000000000????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0011_000000000000???1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0011_000000000000??10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0011_000000000000?100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0011_0000000000001000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0100_??????????1?????: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0100_?????????10?????: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0100_????????100?????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0100_???????1000?????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0100_??????10000?????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0100_?????100000?????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0100_????1000000?????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0100_???10000000?????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0100_??100000000?????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0100_?1000000000?????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0100_10000000000?????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0100_00000000000????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0100_00000000000???10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0100_00000000000??100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0100_00000000000?1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0100_0000000000010000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0101_?????????1??????: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0101_????????10??????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0101_???????100??????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0101_??????1000??????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0101_?????10000??????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0101_????100000??????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0101_???1000000??????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0101_??10000000??????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0101_?100000000??????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0101_1000000000??????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0101_0000000000?????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0101_0000000000????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0101_0000000000???100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0101_0000000000??1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0101_0000000000?10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0101_0000000000100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0110_????????1???????: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b0110_???????10???????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0110_??????100???????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0110_?????1000???????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0110_????10000???????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0110_???100000???????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0110_??1000000???????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0110_?10000000???????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0110_100000000???????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0110_000000000??????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0110_000000000?????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0110_000000000????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0110_000000000???1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0110_000000000??10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0110_000000000?100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0110_0000000001000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0111_???????1????????: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b0111_??????10????????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b0111_?????100????????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b0111_????1000????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b0111_???10000????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b0111_??100000????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b0111_?1000000????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b0111_10000000????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b0111_00000000???????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b0111_00000000??????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b0111_00000000?????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b0111_00000000????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b0111_00000000???10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b0111_00000000??100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b0111_00000000?1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b0111_0000000010000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1000_??????1?????????: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1000_?????10?????????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1000_????100?????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1000_???1000?????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1000_??10000?????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1000_?100000?????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1000_1000000?????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1000_0000000????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1000_0000000???????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1000_0000000??????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1000_0000000?????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1000_0000000????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1000_0000000???100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1000_0000000??1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1000_0000000?10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1000_0000000100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1001_?????1??????????: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1001_????10??????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1001_???100??????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1001_??1000??????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1001_?10000??????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1001_100000??????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1001_000000?????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1001_000000????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1001_000000???????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1001_000000??????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1001_000000?????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1001_000000????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1001_000000???1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1001_000000??10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1001_000000?100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1001_0000001000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1010_????1???????????: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1010_???10???????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1010_??100???????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1010_?1000???????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1010_10000???????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1010_00000??????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1010_00000?????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1010_00000????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1010_00000???????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1010_00000??????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1010_00000?????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1010_00000????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1010_00000???10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1010_00000??100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1010_00000?1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1010_0000010000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1011_???1????????????: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1011_??10????????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1011_?100????????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1011_1000????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1011_0000???????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1011_0000??????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1011_0000?????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1011_0000????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1011_0000???????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1011_0000??????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1011_0000?????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1011_0000????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1011_0000???100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1011_0000??1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1011_0000?10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1011_0000100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1100_??1?????????????: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1100_?10?????????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1100_100?????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1100_000????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1100_000???????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1100_000??????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1100_000?????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1100_000????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1100_000???????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1100_000??????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1100_000?????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1100_000????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1100_000???1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1100_000??10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1100_000?100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1100_0001000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1101_?1??????????????: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1101_10??????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1101_00?????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1101_00????????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1101_00???????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1101_00??????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1101_00?????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1101_00????????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1101_00???????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1101_00??????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1101_00?????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1101_00????1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1101_00???10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1101_00??100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1101_00?1000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1101_0010000000000000: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1110_1???????????????: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + 20'b1110_0??????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1110_0?????????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1110_0????????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1110_0???????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1110_0??????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1110_0?????????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1110_0????????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1110_0???????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1110_0??????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1110_0?????1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1110_0????10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1110_0???100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1110_0??1000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1110_0?10000000000000: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1110_0100000000000000: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1111_???????????????1: begin grant_onehot_r = 16'b0000000000000001; grant_index_r = LOG_NUM_REQS'(0); end + 20'b1111_??????????????10: begin grant_onehot_r = 16'b0000000000000010; grant_index_r = LOG_NUM_REQS'(1); end + 20'b1111_?????????????100: begin grant_onehot_r = 16'b0000000000000100; grant_index_r = LOG_NUM_REQS'(2); end + 20'b1111_????????????1000: begin grant_onehot_r = 16'b0000000000001000; grant_index_r = LOG_NUM_REQS'(3); end + 20'b1111_???????????10000: begin grant_onehot_r = 16'b0000000000010000; grant_index_r = LOG_NUM_REQS'(4); end + 20'b1111_??????????100000: begin grant_onehot_r = 16'b0000000000100000; grant_index_r = LOG_NUM_REQS'(5); end + 20'b1111_?????????1000000: begin grant_onehot_r = 16'b0000000001000000; grant_index_r = LOG_NUM_REQS'(6); end + 20'b1111_????????10000000: begin grant_onehot_r = 16'b0000000010000000; grant_index_r = LOG_NUM_REQS'(7); end + 20'b1111_???????100000000: begin grant_onehot_r = 16'b0000000100000000; grant_index_r = LOG_NUM_REQS'(8); end + 20'b1111_??????1000000000: begin grant_onehot_r = 16'b0000001000000000; grant_index_r = LOG_NUM_REQS'(9); end + 20'b1111_?????10000000000: begin grant_onehot_r = 16'b0000010000000000; grant_index_r = LOG_NUM_REQS'(10); end + 20'b1111_????100000000000: begin grant_onehot_r = 16'b0000100000000000; grant_index_r = LOG_NUM_REQS'(11); end + 20'b1111_???1000000000000: begin grant_onehot_r = 16'b0001000000000000; grant_index_r = LOG_NUM_REQS'(12); end + 20'b1111_??10000000000000: begin grant_onehot_r = 16'b0010000000000000; grant_index_r = LOG_NUM_REQS'(13); end + 20'b1111_?100000000000000: begin grant_onehot_r = 16'b0100000000000000; grant_index_r = LOG_NUM_REQS'(14); end + 20'b1111_1000000000000000: begin grant_onehot_r = 16'b1000000000000000; grant_index_r = LOG_NUM_REQS'(15); end + default: begin grant_onehot_r = 'x; grant_index_r = 'x; end + endcase + end + end else begin + always @(*) begin + grant_index_r = 'x; + grant_onehot_r = 'x; + for (integer i = 0; i < NN; ++i) begin + /* verilator lint_off UNUSED */ + integer src = i / NUM_REQS; + integer dst = i % NUM_REQS; + integer next = (dst + 1) % NUM_REQS; + /* verilator lint_on UNUSED */ + if (state == LOG_NUM_REQS'(src ) + && requests[next]) begin + grant_index_r = LOG_NUM_REQS'(next); + grant_onehot_r = '0; + grant_onehot_r[next] = 1; end end end - end + end always @(posedge clk) begin if (reset) begin state <= 0; end else if (!LOCK_ENABLE || enable) begin - state <= grant_table[state]; + state <= grant_index; end - end - - reg [NUM_REQS-1:0] grant_onehot_r; - always @(*) begin - grant_onehot_r = NUM_REQS'(0); - grant_onehot_r[grant_table[state]] = 1; end - assign grant_index = grant_table[state]; - assign grant_onehot = grant_onehot_r; - assign grant_valid = (| requests); - + assign grant_index = grant_index_r; + assign grant_onehot = grant_onehot_r; + assign grant_valid = (| requests); end endmodule \ No newline at end of file From a3a7239b4d875d0d774f9108ae24dffe2d8a90e1 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Wed, 23 Jun 2021 01:51:23 -0700 Subject: [PATCH 08/13] critical path optimizations --- hw/rtl/VX_ibuffer.v | 37 +++----- hw/rtl/VX_scoreboard.v | 19 +--- hw/rtl/libs/VX_onehot_encoder.v | 144 +++++++++++++++++++++++++++-- hw/rtl/libs/VX_priority_encoder.v | 147 +++++++++++++++++++++++++++--- 4 files changed, 287 insertions(+), 60 deletions(-) diff --git a/hw/rtl/VX_ibuffer.v b/hw/rtl/VX_ibuffer.v index b94eead8..ca7524bb 100644 --- a/hw/rtl/VX_ibuffer.v +++ b/hw/rtl/VX_ibuffer.v @@ -97,6 +97,7 @@ module VX_ibuffer #( reg [DATAW-1:0] deq_instr, deq_instr_n; reg [NWARPSW-1:0] num_warps; + // calculate valid table always @(*) begin valid_table_n = valid_table; if (deq_fire) begin @@ -113,11 +114,10 @@ module VX_ibuffer #( deq_valid_n = 1; deq_wid_n = 'x; deq_instr_n = 'x; - for (integer i = 0; i < `NUM_WARPS; i++) begin + for (integer i = `NUM_WARPS-1; i >= 0; --i) begin if (schedule_table[i]) begin - deq_wid_n = `NW_BITS'(i); + deq_wid_n = `NW_BITS'(i); deq_instr_n = q_data_out[i]; - break; end end end else if (1 == num_warps && !(deq_fire && q_alm_empty[deq_wid])) begin @@ -130,16 +130,16 @@ module VX_ibuffer #( deq_instr_n = q_data_in; end end - - // do round-robin with multiple active warps + + // do round-robin scheduling with multiple active warps always @(*) begin - schedule_table_n = schedule_table; - for (integer i = 0; i < `NUM_WARPS; i++) begin - if (schedule_table[i]) begin - schedule_table_n[i] = 0; - break; - end + if (1 == $countones(schedule_table) + || (num_warps < 2)) begin + schedule_table_n = valid_table_n; + end else begin + schedule_table_n = schedule_table; end + schedule_table_n[deq_wid_n] = 0; end wire warp_added = enq_fire && q_empty[ibuf_enq_if.wid]; @@ -148,21 +148,12 @@ module VX_ibuffer #( always @(posedge clk) begin if (reset) begin valid_table <= 0; - schedule_table <= 0; deq_valid <= 0; num_warps <= 0; end else begin - valid_table <= valid_table_n; - - if (0 == (| schedule_table_n) - || (num_warps < 2)) begin - schedule_table <= valid_table_n; - schedule_table[deq_wid_n] <= 0; - end else begin - schedule_table <= schedule_table_n; - end - - deq_valid <= deq_valid_n; + valid_table <= valid_table_n; + deq_valid <= deq_valid_n; + schedule_table <= schedule_table_n; if (warp_added && !warp_removed) begin num_warps <= num_warps + NWARPSW'(1); diff --git a/hw/rtl/VX_scoreboard.v b/hw/rtl/VX_scoreboard.v index cca7c007..11055825 100644 --- a/hw/rtl/VX_scoreboard.v +++ b/hw/rtl/VX_scoreboard.v @@ -12,18 +12,11 @@ module VX_scoreboard #( ); reg [`NUM_WARPS-1:0][`NUM_REGS-1:0] inuse_regs; - reg is_reg_busy; - always @(*) begin - is_reg_busy = 'x; - for (integer i = 0; i < `NUM_WARPS; ++i) begin - if (ibuf_deq_if.wid == `NW_BITS'(i)) begin - is_reg_busy = | (inuse_regs[i] & ibuf_deq_if.used_regs); - end - end - end - assign delay = is_reg_busy; - - wire reserve_reg = ibuf_deq_if.valid && ibuf_deq_if.ready && (ibuf_deq_if.wb != 0); + wire [`NUM_REGS-1:0] deq_inuse_regs = inuse_regs[ibuf_deq_if.wid]; + + assign delay = | (deq_inuse_regs & ibuf_deq_if.used_regs); + + wire reserve_reg = ibuf_deq_if.valid && ibuf_deq_if.ready && ibuf_deq_if.wb; wire release_reg = writeback_if.valid && writeback_if.ready && writeback_if.eop; @@ -43,8 +36,6 @@ module VX_scoreboard #( end end - wire [`NUM_REGS-1:0] deq_inuse_regs = inuse_regs[ibuf_deq_if.wid]; - `ifdef DBG_PRINT_PIPELINE always @(posedge clk) begin if (ibuf_deq_if.valid && ~ibuf_deq_if.ready) begin diff --git a/hw/rtl/libs/VX_onehot_encoder.v b/hw/rtl/libs/VX_onehot_encoder.v index b60b73e5..e9d71bef 100644 --- a/hw/rtl/libs/VX_onehot_encoder.v +++ b/hw/rtl/libs/VX_onehot_encoder.v @@ -4,8 +4,10 @@ // Adapter from BaseJump STL: http://bjump.org/data_out.html module VX_onehot_encoder #( - parameter N = 1, - parameter LN = `LOG2UP(N) + parameter N = 1, + parameter REVERSE = 0, + parameter FAST = 1, + parameter LN = `LOG2UP(N) ) ( input wire [N-1:0] data_in, output wire [LN-1:0] data_out, @@ -18,14 +20,24 @@ module VX_onehot_encoder #( end else if (N == 2) begin - assign data_out = data_in[1]; + assign data_out = data_in[!REVERSE]; assign valid = (| data_in); - end else begin - + end else if (N == 4) begin + reg [LN-1:0] index_r; - if (N == 4) begin + if (REVERSE) begin + always @(*) begin + casez (data_in) + 4'b1000: index_r = LN'(0); + 4'b?100: index_r = LN'(1); + 4'b??10: index_r = LN'(2); + 4'b???1: index_r = LN'(3); + default: index_r = 'x; + endcase + end + end else begin always @(*) begin casez (data_in) 4'b0001: index_r = LN'(0); @@ -35,7 +47,30 @@ module VX_onehot_encoder #( default: index_r = 'x; endcase end - end else if (N == 8) begin + end + + assign data_out = index_r; + assign valid = (| data_in); + + end else if (N == 8) begin + + reg [LN-1:0] index_r; + + if (REVERSE) begin + always @(*) begin + casez (data_in) + 8'b10000000: index_r = LN'(0); + 8'b?1000000: index_r = LN'(1); + 8'b??100000: index_r = LN'(2); + 8'b???10000: index_r = LN'(3); + 8'b????1000: index_r = LN'(4); + 8'b?????100: index_r = LN'(5); + 8'b??????10: index_r = LN'(6); + 8'b???????1: index_r = LN'(7); + default: index_r = 'x; + endcase + end + end else begin always @(*) begin casez (data_in) 8'b00000001: index_r = LN'(0); @@ -49,7 +84,38 @@ module VX_onehot_encoder #( default: index_r = 'x; endcase end - end else if (N == 16) begin + end + + assign data_out = index_r; + assign valid = (| data_in); + + end else if (N == 16) begin + + reg [LN-1:0] index_r; + + if (REVERSE) begin + always @(*) begin + casez (data_in) + 16'b1000000000000000: index_r = LN'(0); + 16'b?100000000000000: index_r = LN'(1); + 16'b??10000000000000: index_r = LN'(2); + 16'b???1000000000000: index_r = LN'(3); + 16'b????100000000000: index_r = LN'(4); + 16'b?????10000000000: index_r = LN'(5); + 16'b??????1000000000: index_r = LN'(6); + 16'b???????100000000: index_r = LN'(7); + 16'b????????10000000: index_r = LN'(8); + 16'b?????????1000000: index_r = LN'(9); + 16'b??????????100000: index_r = LN'(10); + 16'b???????????10000: index_r = LN'(11); + 16'b????????????1000: index_r = LN'(12); + 16'b?????????????100: index_r = LN'(13); + 16'b??????????????10: index_r = LN'(14); + 16'b???????????????1: index_r = LN'(15); + default: index_r = 'x; + endcase + end + end else begin always @(*) begin casez (data_in) 16'b0000000000000001: index_r = LN'(0); @@ -71,7 +137,66 @@ module VX_onehot_encoder #( default: index_r = 'x; endcase end - end else begin + end + + assign data_out = index_r; + assign valid = (| data_in); + + end if (FAST) begin + `IGNORE_WARNINGS_BEGIN + localparam levels_lp = $clog2(N); + localparam aligned_width_lp = 1 << $clog2(N); + + wire [levels_lp:0][aligned_width_lp-1:0] addr; + wire [levels_lp:0][aligned_width_lp-1:0] v; + + // base case, also handle padding for non-power of two inputs + assign v[0] = REVERSE ? (data_in << (aligned_width_lp - N)) : ((aligned_width_lp)'(data_in)); + assign addr[0] = 'x; + + for (genvar level = 1; level < levels_lp+1; level=level+1) begin + localparam segments_lp = 2**(levels_lp-level); + localparam segment_slot_lp = aligned_width_lp/segments_lp; + localparam segment_width_lp = level; // how many bits are needed at each level + + for (genvar segment = 0; segment < segments_lp; segment=segment+1) begin + wire [1:0] vs = { + v[level-1][segment*segment_slot_lp+(segment_slot_lp >> 1)], + v[level-1][segment*segment_slot_lp] + }; + + assign v[level][segment*segment_slot_lp] = (| vs); + + if (level == 1) begin + assign addr[level][(segment*segment_slot_lp)+:segment_width_lp] = vs[!REVERSE]; + end else begin + assign addr[level][(segment*segment_slot_lp)+:segment_width_lp] = { + vs[!REVERSE], + addr[level-1][segment*segment_slot_lp+:segment_width_lp-1] | addr[level-1][segment*segment_slot_lp+(segment_slot_lp >> 1)+:segment_width_lp-1] + }; + end + end + end + + assign data_out = addr[levels_lp][`LOG2UP(N)-1:0]; + assign valid = v[levels_lp][0]; + `IGNORE_WARNINGS_END + end else begin + + reg [LN-1:0] index_r; + + if (REVERSE) begin + + always @(*) begin + index_r = 'x; + for (integer i = N-1; i >= 0; --i) begin + if (data_in[i]) begin + index_r = `LOG2UP(N)'(i); + end + end + end + + end else begin always @(*) begin index_r = 'x; for (integer i = 0; i < N; i++) begin @@ -84,7 +209,6 @@ module VX_onehot_encoder #( assign data_out = index_r; assign valid = (| data_in); - end endmodule \ No newline at end of file diff --git a/hw/rtl/libs/VX_priority_encoder.v b/hw/rtl/libs/VX_priority_encoder.v index a14c180f..32eae452 100644 --- a/hw/rtl/libs/VX_priority_encoder.v +++ b/hw/rtl/libs/VX_priority_encoder.v @@ -1,9 +1,10 @@ `include "VX_platform.vh" module VX_priority_encoder #( - parameter N = 1, - parameter FAST = 1, - parameter LN = `LOG2UP(N) + parameter N = 1, + parameter REVERSE = 0, + parameter FAST = 1, + parameter LN = `LOG2UP(N) ) ( input wire [N-1:0] data_in, output wire [N-1:0] onehot, @@ -19,16 +20,26 @@ module VX_priority_encoder #( end else if (N == 2) begin - assign onehot = {~data_in[0], data_in[0]}; - assign index = ~data_in[0]; + assign onehot = {~data_in[REVERSE], data_in[REVERSE]}; + assign index = ~data_in[REVERSE]; assign valid_out = (| data_in); - end else begin - + end else if (N == 4) begin + reg [LN-1:0] index_r; reg [N-1:0] onehot_r; - if (N == 4) begin + if (REVERSE) begin + always @(*) begin + casez (data_in) + 4'b1???: begin onehot_r = 4'b0001; index_r = LN'(0); end + 4'b01??: begin onehot_r = 4'b0010; index_r = LN'(1); end + 4'b001?: begin onehot_r = 4'b0100; index_r = LN'(2); end + 4'b0001: begin onehot_r = 4'b1000; index_r = LN'(3); end + default: begin onehot_r = 'x; index_r = 'x; end + endcase + end + end else begin always @(*) begin casez (data_in) 4'b???1: begin onehot_r = 4'b0001; index_r = LN'(0); end @@ -38,7 +49,31 @@ module VX_priority_encoder #( default: begin onehot_r = 'x; index_r = 'x; end endcase end - end else if (N == 8) begin + end + + assign index = index_r; + assign onehot = onehot_r; + + end else if (N == 8) begin + + reg [LN-1:0] index_r; + reg [N-1:0] onehot_r; + + if (REVERSE) begin + always @(*) begin + casez (data_in) + 8'b1???????: begin onehot_r = 8'b00000001; index_r = LN'(0); end + 8'b01??????: begin onehot_r = 8'b00000010; index_r = LN'(1); end + 8'b001?????: begin onehot_r = 8'b00000100; index_r = LN'(2); end + 8'b0001????: begin onehot_r = 8'b00001000; index_r = LN'(3); end + 8'b00001???: begin onehot_r = 8'b00010000; index_r = LN'(4); end + 8'b000001??: begin onehot_r = 8'b00100000; index_r = LN'(5); end + 8'b0000001?: begin onehot_r = 8'b01000000; index_r = LN'(6); end + 8'b00000001: begin onehot_r = 8'b10000000; index_r = LN'(7); end + default: begin onehot_r = 'x; index_r = 'x; end + endcase + end + end else begin always @(*) begin casez (data_in) 8'b???????1: begin onehot_r = 8'b00000001; index_r = LN'(0); end @@ -52,7 +87,39 @@ module VX_priority_encoder #( default: begin onehot_r = 'x; index_r = 'x; end endcase end - end else if (N == 16) begin + end + + assign index = index_r; + assign onehot = onehot_r; + + end else if (N == 16) begin + + reg [LN-1:0] index_r; + reg [N-1:0] onehot_r; + + if (REVERSE) begin + always @(*) begin + casez (data_in) + 16'b1???????????????: begin onehot_r = 16'b0000000000000001; index_r = LN'(0); end + 16'b01??????????????: begin onehot_r = 16'b0000000000000010; index_r = LN'(1); end + 16'b001?????????????: begin onehot_r = 16'b0000000000000100; index_r = LN'(2); end + 16'b0001????????????: begin onehot_r = 16'b0000000000001000; index_r = LN'(3); end + 16'b00001???????????: begin onehot_r = 16'b0000000000010000; index_r = LN'(4); end + 16'b000001??????????: begin onehot_r = 16'b0000000000100000; index_r = LN'(5); end + 16'b0000001?????????: begin onehot_r = 16'b0000000001000000; index_r = LN'(6); end + 16'b00000001????????: begin onehot_r = 16'b0000000010000000; index_r = LN'(7); end + 16'b000000001???????: begin onehot_r = 16'b0000000100000000; index_r = LN'(8); end + 16'b0000000001??????: begin onehot_r = 16'b0000001000000000; index_r = LN'(9); end + 16'b00000000001?????: begin onehot_r = 16'b0000010000000000; index_r = LN'(10); end + 16'b000000000001????: begin onehot_r = 16'b0000100000000000; index_r = LN'(11); end + 16'b0000000000001???: begin onehot_r = 16'b0001000000000000; index_r = LN'(12); end + 16'b00000000000001??: begin onehot_r = 16'b0010000000000000; index_r = LN'(13); end + 16'b000000000000001?: begin onehot_r = 16'b0100000000000000; index_r = LN'(14); end + 16'b0000000000000001: begin onehot_r = 16'b1000000000000000; index_r = LN'(15); end + default: begin onehot_r = 'x; index_r = 'x; end + endcase + end + end else begin always @(*) begin casez (data_in) 16'b???????????????1: begin onehot_r = 16'b0000000000000001; index_r = LN'(0); end @@ -74,6 +141,58 @@ module VX_priority_encoder #( default: begin onehot_r = 'x; index_r = 'x; end endcase end + end + + assign index = index_r; + assign onehot = onehot_r; + + end else if (FAST) begin + + wire [N-1:0] scan_lo; + + VX_scan #( + .N (N), + .OP (2), + .REVERSE (REVERSE) + ) scan ( + .data_in (data_in), + .data_out (scan_lo) + ); + + if (REVERSE) begin + assign onehot = scan_lo & {1'b1, (~scan_lo[N-1:1])}; + assign valid_out = scan_lo[0]; + end else begin + assign onehot = scan_lo & {(~scan_lo[N-2:0]), 1'b1}; + assign valid_out = scan_lo[N-1]; + end + + VX_onehot_encoder #( + .N (N), + .REVERSE (REVERSE) + ) onehot_encoder ( + .data_in (onehot), + .data_out (index), + `UNUSED_PIN (valid) + ); + + end else begin + + reg [LN-1:0] index_r; + reg [N-1:0] onehot_r; + + if (REVERSE) begin + always @(*) begin + index_r = 'x; + onehot_r = 'x; + for (integer i = 0; i < N; ++i) begin + if (data_in[i]) begin + index_r = LN'(i); + onehot_r = 0; + onehot_r[i] = 1'b1; + end + end + end end else begin always @(*) begin index_r = 'x; @@ -86,11 +205,13 @@ module VX_priority_encoder #( end end end - end + end assign index = index_r; - assign onehot = onehot_r; - assign valid_out = (| data_in); + assign onehot = onehot_r; + end + + assign valid_out = (| data_in); endmodule \ No newline at end of file From 1a33c83e6e664636b58e45f4c9aca765f3da5b68 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Wed, 23 Jun 2021 04:17:45 -0700 Subject: [PATCH 09/13] minor update --- hw/rtl/VX_mem_unit.v | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/rtl/VX_mem_unit.v b/hw/rtl/VX_mem_unit.v index fb88ed0e..7db13e3c 100644 --- a/hw/rtl/VX_mem_unit.v +++ b/hw/rtl/VX_mem_unit.v @@ -282,7 +282,7 @@ module VX_mem_unit # ( .ADDR_WIDTH (`DMEM_ADDR_WIDTH), .TAG_IN_WIDTH (`DMEM_TAG_WIDTH), .BUFFERED_REQ (1), - .BUFFERED_RSP (0) + .BUFFERED_RSP (1) ) mem_arb ( .clk (clk), .reset (reset), From 7e0dc81cee05c276fec945dbc422e4674216be4f Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Wed, 23 Jun 2021 04:19:13 -0700 Subject: [PATCH 10/13] minor update --- hw/rtl/afu/VX_avs_wrapper.v | 15 ++++++++++++--- hw/scripts/scope.json | 2 +- hw/simulate/simulator.cpp | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/hw/rtl/afu/VX_avs_wrapper.v b/hw/rtl/afu/VX_avs_wrapper.v index b3d0a5d5..19123e83 100644 --- a/hw/rtl/afu/VX_avs_wrapper.v +++ b/hw/rtl/afu/VX_avs_wrapper.v @@ -51,8 +51,13 @@ module VX_avs_wrapper #( wire [NUM_BANKS-1:0] req_queue_going_full; wire [NUM_BANKS-1:0][RD_QUEUE_ADDR_WIDTH-1:0] req_queue_size; wire [NUM_BANKS-1:0][REQ_TAG_WIDTH-1:0] avs_reqq_data_out; - - wire [BANK_ADDRW-1:0] req_bank_sel = (NUM_BANKS >= 2) ? mem_req_addr[BANK_ADDRW-1:0] : '0; + wire [BANK_ADDRW-1:0] req_bank_sel; + + if (NUM_BANKS >= 2) begin + assign req_bank_sel = mem_req_addr[BANK_ADDRW-1:0]; + end else begin + assign req_bank_sel = 0; + end for (genvar i = 0; i < NUM_BANKS; i++) begin assign avs_reqq_ready[i] = !req_queue_going_full[i] && !avs_waitrequest[i]; @@ -100,7 +105,11 @@ module VX_avs_wrapper #( assign avs_burstcount[i] = AVS_BURST_WIDTH'(1); end - assign mem_req_ready = avs_reqq_ready[req_bank_sel]; + if (NUM_BANKS >= 2) begin + assign mem_req_ready = avs_reqq_ready[req_bank_sel]; + end else begin + assign mem_req_ready = avs_reqq_ready; + end // Responses handling diff --git a/hw/scripts/scope.json b/hw/scripts/scope.json index 4ccc6548..2f240161 100644 --- a/hw/scripts/scope.json +++ b/hw/scripts/scope.json @@ -74,7 +74,7 @@ "taps": { "afu": { "!cmd_type":3, - "!state":3, + "!state":2, "?cci_sRxPort_c0_mmioRdValid":1, "?cci_sRxPort_c0_mmioWrValid":1, "mmio_hdr_address":16, diff --git a/hw/simulate/simulator.cpp b/hw/simulate/simulator.cpp index 6099f182..c4e9f378 100644 --- a/hw/simulate/simulator.cpp +++ b/hw/simulate/simulator.cpp @@ -173,7 +173,7 @@ void Simulator::eval_mem_bus() { } // select the memory bank - uint32_t req_bank = vortex_->mem_req_addr % MEMORY_BANKS; + uint32_t req_bank = (MEMORY_BANKS >= 2) ? (vortex_->mem_req_addr % MEMORY_BANKS) : 0; // handle memory stalls bool mem_stalled = false; From 1ea738ed26a926a827f2f74f6533bd8d139a25e3 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Fri, 25 Jun 2021 16:28:10 -0700 Subject: [PATCH 11/13] lkg build --- ci/regression.sh | 2 +- driver/opae/vlsim/opae_sim.cpp | 2 + hw/rtl/VX_execute.v | 2 +- hw/rtl/VX_instr_demux.v | 2 +- hw/rtl/{VX_ibuffer.v => VX_instr_sched.v} | 85 ++++----- hw/rtl/VX_issue.v | 94 +++++----- hw/rtl/VX_scoreboard.v | 73 ++++---- hw/rtl/afu/vortex_afu.sv | 8 +- hw/rtl/cache/VX_nc_bypass.v | 202 ++++++++-------------- hw/rtl/interfaces/VX_instr_sched_if.v | 29 ++++ hw/rtl/libs/VX_onehot_encoder.v | 121 +------------ hw/rtl/libs/VX_priority_encoder.v | 125 +------------ hw/rtl/libs/VX_rr_arbiter.v | 21 +-- hw/syn/quartus/project.tcl | 29 +--- 14 files changed, 257 insertions(+), 538 deletions(-) rename hw/rtl/{VX_ibuffer.v => VX_instr_sched.v} (73%) create mode 100644 hw/rtl/interfaces/VX_instr_sched_if.v diff --git a/ci/regression.sh b/ci/regression.sh index 243d3597..1ada2f9d 100755 --- a/ci/regression.sh +++ b/ci/regression.sh @@ -60,7 +60,7 @@ CONFIGS="-DMEM_BLOCK_SIZE=16 -DPLATFORM_PARAM_LOCAL_MEMORY_DATA_WIDTH=128 -DPLAT CONFIGS="-DPLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH=27" ./ci/blackbox.sh --driver=vlsim --cores=1 --app=demo # test 128-bit DRAM block -CONFIGS="-DPLATFORM_PARAM_LOCAL_MEMORY_BANKS=1 -DPLATFORM_PARAM_LOCAL_MEMORY_DATA_WIDTH=128 -DPLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH=28" ./ci/blackbox.sh --driver=vlsim --cores=1 --app=demo +CONFIGS="-DPLATFORM_PARAM_LOCAL_MEMORY_DATA_WIDTH=128 -DPLATFORM_PARAM_LOCAL_MEMORY_ADDR_WIDTH=28 -DPLATFORM_PARAM_LOCAL_MEMORY_BANKS=1" ./ci/blackbox.sh --driver=vlsim --cores=1 --app=demo # test verilator reset values CONFIGS="-DVERILATOR_RESET_VALUE=0" ./ci/blackbox.sh --driver=vlsim --cores=4 --app=sgemm diff --git a/driver/opae/vlsim/opae_sim.cpp b/driver/opae/vlsim/opae_sim.cpp index d96023bf..98f54730 100644 --- a/driver/opae/vlsim/opae_sim.cpp +++ b/driver/opae/vlsim/opae_sim.cpp @@ -154,6 +154,8 @@ void opae_sim::write_mmio64(uint32_t mmio_num, uint64_t offset, uint64_t value) void opae_sim::reset() { cci_reads_.clear(); cci_writes_.clear(); + vortex_afu_->vcp2af_sRxPort_c0_mmioRdValid = 0; + vortex_afu_->vcp2af_sRxPort_c0_mmioWrValid = 0; vortex_afu_->vcp2af_sRxPort_c0_rspValid = 0; vortex_afu_->vcp2af_sRxPort_c1_rspValid = 0; vortex_afu_->vcp2af_sRxPort_c0_TxAlmFull = 0; diff --git a/hw/rtl/VX_execute.v b/hw/rtl/VX_execute.v index f195d75e..c8178ffd 100644 --- a/hw/rtl/VX_execute.v +++ b/hw/rtl/VX_execute.v @@ -16,7 +16,7 @@ module VX_execute #( VX_cmt_to_csr_if cmt_to_csr_if, `ifdef PERF_ENABLE - VX_perf_memsys_if perf_memsys_if, + VX_perf_memsys_if perf_memsys_if, VX_perf_pipeline_if perf_pipeline_if, `endif diff --git a/hw/rtl/VX_instr_demux.v b/hw/rtl/VX_instr_demux.v index 36164b94..b4984f57 100644 --- a/hw/rtl/VX_instr_demux.v +++ b/hw/rtl/VX_instr_demux.v @@ -5,7 +5,7 @@ module VX_instr_demux ( input wire reset, // inputs - VX_decode_if execute_if, + VX_instr_sched_if execute_if, VX_gpr_rsp_if gpr_rsp_if, // outputs diff --git a/hw/rtl/VX_ibuffer.v b/hw/rtl/VX_instr_sched.v similarity index 73% rename from hw/rtl/VX_ibuffer.v rename to hw/rtl/VX_instr_sched.v index ca7524bb..1290ed5e 100644 --- a/hw/rtl/VX_ibuffer.v +++ b/hw/rtl/VX_instr_sched.v @@ -1,16 +1,16 @@ `include "VX_define.vh" -module VX_ibuffer #( +module VX_instr_sched #( parameter CORE_ID = 0 ) ( input wire clk, input wire reset, // inputs - VX_decode_if ibuf_enq_if, + VX_decode_if decode_if, // outputs - VX_decode_if ibuf_deq_if + VX_instr_sched_if instr_sched_if ); `UNUSED_PARAM (CORE_ID) @@ -28,13 +28,13 @@ module VX_ibuffer #( wire [`NUM_WARPS-1:0][DATAW-1:0] q_data_prev; reg [`NUM_WARPS-1:0][DATAW-1:0] q_data_out; - wire enq_fire = ibuf_enq_if.valid && ibuf_enq_if.ready; - wire deq_fire = ibuf_deq_if.valid && ibuf_deq_if.ready; + wire enq_fire = decode_if.valid && decode_if.ready; + wire deq_fire = instr_sched_if.valid && instr_sched_if.ready; for (genvar i = 0; i < `NUM_WARPS; ++i) begin - wire writing = enq_fire && (i == ibuf_enq_if.wid); - wire reading = deq_fire && (i == ibuf_deq_if.wid); + wire writing = enq_fire && (i == decode_if.wid); + wire reading = deq_fire && (i == instr_sched_if.wid); wire is_head_ptr = empty_r[i] || (alm_empty_r[i] && reading); @@ -104,7 +104,7 @@ module VX_ibuffer #( valid_table_n[deq_wid] = !q_alm_empty[deq_wid]; end if (enq_fire) begin - valid_table_n[ibuf_enq_if.wid] = 1; + valid_table_n[decode_if.wid] = 1; end end @@ -126,7 +126,7 @@ module VX_ibuffer #( deq_instr_n = deq_fire ? q_data_prev[deq_wid] : q_data_out[deq_wid]; end else begin deq_valid_n = enq_fire; - deq_wid_n = ibuf_enq_if.wid; + deq_wid_n = decode_if.wid; deq_instr_n = q_data_in; end end @@ -142,8 +142,8 @@ module VX_ibuffer #( schedule_table_n[deq_wid_n] = 0; end - wire warp_added = enq_fire && q_empty[ibuf_enq_if.wid]; - wire warp_removed = deq_fire && ~(enq_fire && ibuf_enq_if.wid == deq_wid) && q_alm_empty[deq_wid]; + wire warp_added = enq_fire && q_empty[decode_if.wid]; + wire warp_removed = deq_fire && ~(enq_fire && decode_if.wid == deq_wid) && q_alm_empty[deq_wid]; always @(posedge clk) begin if (reset) begin @@ -166,37 +166,38 @@ module VX_ibuffer #( deq_instr <= deq_instr_n; end - assign ibuf_enq_if.ready = ~q_full[ibuf_enq_if.wid]; - assign q_data_in = {ibuf_enq_if.tmask, - ibuf_enq_if.PC, - ibuf_enq_if.ex_type, - ibuf_enq_if.op_type, - ibuf_enq_if.op_mod, - ibuf_enq_if.wb, - ibuf_enq_if.rd, - ibuf_enq_if.rs1, - ibuf_enq_if.rs2, - ibuf_enq_if.rs3, - ibuf_enq_if.imm, - ibuf_enq_if.use_PC, - ibuf_enq_if.use_imm, - ibuf_enq_if.used_regs}; + assign decode_if.ready = ~q_full[decode_if.wid]; + assign q_data_in = {decode_if.tmask, + decode_if.PC, + decode_if.ex_type, + decode_if.op_type, + decode_if.op_mod, + decode_if.wb, + decode_if.rd, + decode_if.rs1, + decode_if.rs2, + decode_if.rs3, + decode_if.imm, + decode_if.use_PC, + decode_if.use_imm, + decode_if.used_regs}; - assign ibuf_deq_if.valid = deq_valid; - assign ibuf_deq_if.wid = deq_wid; - assign {ibuf_deq_if.tmask, - ibuf_deq_if.PC, - ibuf_deq_if.ex_type, - ibuf_deq_if.op_type, - ibuf_deq_if.op_mod, - ibuf_deq_if.wb, - ibuf_deq_if.rd, - ibuf_deq_if.rs1, - ibuf_deq_if.rs2, - ibuf_deq_if.rs3, - ibuf_deq_if.imm, - ibuf_deq_if.use_PC, - ibuf_deq_if.use_imm, - ibuf_deq_if.used_regs} = deq_instr; + assign instr_sched_if.valid = deq_valid; + assign instr_sched_if.wid = deq_wid; + assign instr_sched_if.wid_n = deq_wid_n; + assign {instr_sched_if.tmask, + instr_sched_if.PC, + instr_sched_if.ex_type, + instr_sched_if.op_type, + instr_sched_if.op_mod, + instr_sched_if.wb, + instr_sched_if.rd, + instr_sched_if.rs1, + instr_sched_if.rs2, + instr_sched_if.rs3, + instr_sched_if.imm, + instr_sched_if.use_PC, + instr_sched_if.use_imm, + instr_sched_if.used_regs} = deq_instr; endmodule \ No newline at end of file diff --git a/hw/rtl/VX_issue.v b/hw/rtl/VX_issue.v index 00b727a4..95140bbd 100644 --- a/hw/rtl/VX_issue.v +++ b/hw/rtl/VX_issue.v @@ -21,36 +21,36 @@ module VX_issue #( VX_fpu_req_if fpu_req_if, VX_gpu_req_if gpu_req_if ); - VX_decode_if ibuf_deq_if(); - VX_decode_if execute_if(); + VX_instr_sched_if instr_sched_if(); + VX_instr_sched_if execute_if(); VX_gpr_req_if gpr_req_if(); VX_gpr_rsp_if gpr_rsp_if(); wire scoreboard_delay; - VX_ibuffer #( + VX_instr_sched #( .CORE_ID(CORE_ID) - ) ibuffer ( - .clk (clk), - .reset (reset), - .ibuf_enq_if (decode_if), - .ibuf_deq_if (ibuf_deq_if) + ) instr_sched ( + .clk (clk), + .reset (reset), + .decode_if (decode_if), + .instr_sched_if (instr_sched_if) ); VX_scoreboard #( .CORE_ID(CORE_ID) ) scoreboard ( - .clk (clk), - .reset (reset), - .ibuf_deq_if (ibuf_deq_if), - .writeback_if (writeback_if), - .delay (scoreboard_delay) + .clk (clk), + .reset (reset), + .instr_sched_if (instr_sched_if), + .writeback_if (writeback_if), + .delay (scoreboard_delay) ); - assign gpr_req_if.wid = ibuf_deq_if.wid; - assign gpr_req_if.rs1 = ibuf_deq_if.rs1; - assign gpr_req_if.rs2 = ibuf_deq_if.rs2; - assign gpr_req_if.rs3 = ibuf_deq_if.rs3; + assign gpr_req_if.wid = instr_sched_if.wid; + assign gpr_req_if.rs1 = instr_sched_if.rs1; + assign gpr_req_if.rs2 = instr_sched_if.rs2; + assign gpr_req_if.rs3 = instr_sched_if.rs3; VX_gpr_stage #( .CORE_ID(CORE_ID) @@ -62,19 +62,19 @@ module VX_issue #( .gpr_rsp_if (gpr_rsp_if) ); - assign execute_if.valid = ibuf_deq_if.valid && ~scoreboard_delay; - assign execute_if.wid = ibuf_deq_if.wid; - assign execute_if.tmask = ibuf_deq_if.tmask; - assign execute_if.PC = ibuf_deq_if.PC; - assign execute_if.ex_type = ibuf_deq_if.ex_type; - assign execute_if.op_type = ibuf_deq_if.op_type; - assign execute_if.op_mod = ibuf_deq_if.op_mod; - assign execute_if.wb = ibuf_deq_if.wb; - assign execute_if.rd = ibuf_deq_if.rd; - assign execute_if.rs1 = ibuf_deq_if.rs1; - assign execute_if.imm = ibuf_deq_if.imm; - assign execute_if.use_PC = ibuf_deq_if.use_PC; - assign execute_if.use_imm = ibuf_deq_if.use_imm; + assign execute_if.valid = instr_sched_if.valid && ~scoreboard_delay; + assign execute_if.wid = instr_sched_if.wid; + assign execute_if.tmask = instr_sched_if.tmask; + assign execute_if.PC = instr_sched_if.PC; + assign execute_if.ex_type = instr_sched_if.ex_type; + assign execute_if.op_type = instr_sched_if.op_type; + assign execute_if.op_mod = instr_sched_if.op_mod; + assign execute_if.wb = instr_sched_if.wb; + assign execute_if.rd = instr_sched_if.rd; + assign execute_if.rs1 = instr_sched_if.rs1; + assign execute_if.imm = instr_sched_if.imm; + assign execute_if.use_PC = instr_sched_if.use_PC; + assign execute_if.use_imm = instr_sched_if.use_imm; VX_instr_demux instr_demux ( .clk (clk), @@ -89,23 +89,23 @@ module VX_issue #( ); // issue the instruction - assign ibuf_deq_if.ready = !scoreboard_delay && execute_if.ready; + assign instr_sched_if.ready = !scoreboard_delay && execute_if.ready; - `SCOPE_ASSIGN (issue_fire, ibuf_deq_if.valid && ibuf_deq_if.ready); - `SCOPE_ASSIGN (issue_wid, ibuf_deq_if.wid); - `SCOPE_ASSIGN (issue_tmask, ibuf_deq_if.tmask); - `SCOPE_ASSIGN (issue_pc, ibuf_deq_if.PC); - `SCOPE_ASSIGN (issue_ex_type, ibuf_deq_if.ex_type); - `SCOPE_ASSIGN (issue_op_type, ibuf_deq_if.op_type); - `SCOPE_ASSIGN (issue_op_mod, ibuf_deq_if.op_mod); - `SCOPE_ASSIGN (issue_wb, ibuf_deq_if.wb); - `SCOPE_ASSIGN (issue_rd, ibuf_deq_if.rd); - `SCOPE_ASSIGN (issue_rs1, ibuf_deq_if.rs1); - `SCOPE_ASSIGN (issue_rs2, ibuf_deq_if.rs2); - `SCOPE_ASSIGN (issue_rs3, ibuf_deq_if.rs3); - `SCOPE_ASSIGN (issue_imm, ibuf_deq_if.imm); - `SCOPE_ASSIGN (issue_use_pc, ibuf_deq_if.use_PC); - `SCOPE_ASSIGN (issue_use_imm, ibuf_deq_if.use_imm); + `SCOPE_ASSIGN (issue_fire, instr_sched_if.valid && instr_sched_if.ready); + `SCOPE_ASSIGN (issue_wid, instr_sched_if.wid); + `SCOPE_ASSIGN (issue_tmask, instr_sched_if.tmask); + `SCOPE_ASSIGN (issue_pc, instr_sched_if.PC); + `SCOPE_ASSIGN (issue_ex_type, instr_sched_if.ex_type); + `SCOPE_ASSIGN (issue_op_type, instr_sched_if.op_type); + `SCOPE_ASSIGN (issue_op_mod, instr_sched_if.op_mod); + `SCOPE_ASSIGN (issue_wb, instr_sched_if.wb); + `SCOPE_ASSIGN (issue_rd, instr_sched_if.rd); + `SCOPE_ASSIGN (issue_rs1, instr_sched_if.rs1); + `SCOPE_ASSIGN (issue_rs2, instr_sched_if.rs2); + `SCOPE_ASSIGN (issue_rs3, instr_sched_if.rs3); + `SCOPE_ASSIGN (issue_imm, instr_sched_if.imm); + `SCOPE_ASSIGN (issue_use_pc, instr_sched_if.use_PC); + `SCOPE_ASSIGN (issue_use_imm, instr_sched_if.use_imm); `SCOPE_ASSIGN (scoreboard_delay, scoreboard_delay); `SCOPE_ASSIGN (execute_delay, ~execute_if.ready); `SCOPE_ASSIGN (gpr_rsp_a, gpr_rsp_if.rs1_data); @@ -145,7 +145,7 @@ module VX_issue #( if (decode_if.valid & !decode_if.ready) begin perf_ibf_stalls <= perf_ibf_stalls + `PERF_CTR_BITS'd1; end - if (ibuf_deq_if.valid & scoreboard_delay) begin + if (instr_sched_if.valid & scoreboard_delay) begin perf_scb_stalls <= perf_scb_stalls + `PERF_CTR_BITS'd1; end if (alu_req_if.valid & !alu_req_if.ready) begin diff --git a/hw/rtl/VX_scoreboard.v b/hw/rtl/VX_scoreboard.v index 11055825..8278dabd 100644 --- a/hw/rtl/VX_scoreboard.v +++ b/hw/rtl/VX_scoreboard.v @@ -6,58 +6,65 @@ module VX_scoreboard #( input wire clk, input wire reset, - VX_decode_if ibuf_deq_if, + VX_instr_sched_if instr_sched_if, VX_writeback_if writeback_if, output wire delay ); - reg [`NUM_WARPS-1:0][`NUM_REGS-1:0] inuse_regs; + reg [`NUM_WARPS-1:0][`NUM_REGS-1:0] inuse_regs, inuse_regs_n; - wire [`NUM_REGS-1:0] deq_inuse_regs = inuse_regs[ibuf_deq_if.wid]; + reg [`NUM_REGS-1:0] deq_inuse_regs; - assign delay = | (deq_inuse_regs & ibuf_deq_if.used_regs); + assign delay = |(deq_inuse_regs & instr_sched_if.used_regs); - wire reserve_reg = ibuf_deq_if.valid && ibuf_deq_if.ready && ibuf_deq_if.wb; + wire reserve_reg = instr_sched_if.valid && instr_sched_if.ready && instr_sched_if.wb; wire release_reg = writeback_if.valid && writeback_if.ready && writeback_if.eop; - - always @(posedge clk) begin - if (reset) begin - inuse_regs <= (`NUM_WARPS*`NUM_REGS)'(0); - end else begin - if (reserve_reg) begin - inuse_regs[ibuf_deq_if.wid][ibuf_deq_if.rd] <= 1; - end - if (release_reg) begin - inuse_regs[writeback_if.wid][writeback_if.rd] <= 0; - assert(inuse_regs[writeback_if.wid][writeback_if.rd] != 0) - else $error("%t: *** core%0d: invalid writeback register: wid=%0d, PC=%0h, rd=%0d", - $time, CORE_ID, writeback_if.wid, writeback_if.PC, writeback_if.rd); - end + + always @(*) begin + inuse_regs_n = inuse_regs; + if (reserve_reg) begin + inuse_regs_n[instr_sched_if.wid][instr_sched_if.rd] = 1; + end + if (release_reg) begin + inuse_regs_n[writeback_if.wid][writeback_if.rd] = 0; end end -`ifdef DBG_PRINT_PIPELINE always @(posedge clk) begin - if (ibuf_deq_if.valid && ~ibuf_deq_if.ready) begin - $display("%t: *** core%0d-stall: wid=%0d, PC=%0h, rd=%0d, wb=%0d, inuse=%b%b%b%b", - $time, CORE_ID, ibuf_deq_if.wid, ibuf_deq_if.PC, ibuf_deq_if.rd, ibuf_deq_if.wb, - deq_inuse_regs[ibuf_deq_if.rd], deq_inuse_regs[ibuf_deq_if.rs1], deq_inuse_regs[ibuf_deq_if.rs2], deq_inuse_regs[ibuf_deq_if.rs3]); + if (reset) begin + inuse_regs <= '0; + end else begin + inuse_regs <= inuse_regs_n; end - end -`endif + deq_inuse_regs <= inuse_regs_n[instr_sched_if.wid_n]; + end reg [31:0] deadlock_ctr; wire [31:0] deadlock_timeout = 1000 * (10 ** (`L2_ENABLE + `L3_ENABLE)); always @(posedge clk) begin if (reset) begin deadlock_ctr <= 0; - end else if (ibuf_deq_if.valid && ~ibuf_deq_if.ready) begin - deadlock_ctr <= deadlock_ctr + 1; - assert(deadlock_ctr < deadlock_timeout) else $error("%t: *** core%0d-deadlock: wid=%0d, PC=%0h, rd=%0d, wb=%0d, inuse=%b%b%b%b", - $time, CORE_ID, ibuf_deq_if.wid, ibuf_deq_if.PC, ibuf_deq_if.rd, ibuf_deq_if.wb, - deq_inuse_regs[ibuf_deq_if.rd], deq_inuse_regs[ibuf_deq_if.rs1], deq_inuse_regs[ibuf_deq_if.rs2], deq_inuse_regs[ibuf_deq_if.rs3]); - end else if (ibuf_deq_if.valid && ibuf_deq_if.ready) begin - deadlock_ctr <= 0; + end else begin + `ifdef DBG_PRINT_PIPELINE + if (instr_sched_if.valid && ~instr_sched_if.ready) begin + $display("%t: *** core%0d-stall: wid=%0d, PC=%0h, rd=%0d, wb=%0d, inuse=%b%b%b%b", + $time, CORE_ID, instr_sched_if.wid, instr_sched_if.PC, instr_sched_if.rd, instr_sched_if.wb, + deq_inuse_regs[instr_sched_if.rd], deq_inuse_regs[instr_sched_if.rs1], deq_inuse_regs[instr_sched_if.rs2], deq_inuse_regs[instr_sched_if.rs3]); + end + `endif + if (release_reg) begin + assert(inuse_regs[writeback_if.wid][writeback_if.rd] != 0) + else $error("%t: *** core%0d: invalid writeback register: wid=%0d, PC=%0h, rd=%0d", + $time, CORE_ID, writeback_if.wid, writeback_if.PC, writeback_if.rd); + end + if (instr_sched_if.valid && ~instr_sched_if.ready) begin + deadlock_ctr <= deadlock_ctr + 1; + assert(deadlock_ctr < deadlock_timeout) else $error("%t: *** core%0d-deadlock: wid=%0d, PC=%0h, rd=%0d, wb=%0d, inuse=%b%b%b%b", + $time, CORE_ID, instr_sched_if.wid, instr_sched_if.PC, instr_sched_if.rd, instr_sched_if.wb, + deq_inuse_regs[instr_sched_if.rd], deq_inuse_regs[instr_sched_if.rs1], deq_inuse_regs[instr_sched_if.rs2], deq_inuse_regs[instr_sched_if.rs3]); + end else if (instr_sched_if.valid && instr_sched_if.ready) begin + deadlock_ctr <= 0; + end end end diff --git a/hw/rtl/afu/vortex_afu.sv b/hw/rtl/afu/vortex_afu.sv index 1d42af92..42938737 100644 --- a/hw/rtl/afu/vortex_afu.sv +++ b/hw/rtl/afu/vortex_afu.sv @@ -718,6 +718,9 @@ always @(posedge clk) begin if (cci_rd_rsp_fire) begin cci_rd_rsp_ctr <= cci_rd_rsp_ctr + CCI_RD_QUEUE_TAGW'(1); + if (CCI_RD_QUEUE_TAGW'(cci_rd_rsp_ctr) == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1)) begin + cci_mem_wr_req_addr_base <= cci_mem_wr_req_addr_base + CCI_ADDR_WIDTH'(CCI_RD_WINDOW_SIZE); + end `ifdef DBG_PRINT_OPAE $display("%t: CCI Rd Rsp: idx=%0d, ctr=%0d, data=%0h", $time, cci_rd_rsp_tag, cci_rd_rsp_ctr, cp2af_sRxPort.c0.data); `endif @@ -729,10 +732,7 @@ always @(posedge clk) begin `endif end - if (cci_mem_wr_req_fire) begin - if (CCI_RD_QUEUE_TAGW'(cci_mem_wr_req_ctr) == CCI_RD_QUEUE_TAGW'(CCI_RD_WINDOW_SIZE-1)) begin - cci_mem_wr_req_addr_base <= cci_mem_wr_req_addr_base + CCI_ADDR_WIDTH'(CCI_RD_WINDOW_SIZE); - end + if (cci_mem_wr_req_fire) begin cci_mem_wr_req_ctr <= cci_mem_wr_req_ctr + CCI_ADDR_WIDTH'(1); if (cci_mem_wr_req_ctr == (cmd_data_size-1)) begin cmd_write_done <= 1; diff --git a/hw/rtl/cache/VX_nc_bypass.v b/hw/rtl/cache/VX_nc_bypass.v index d74eeb12..5eca868e 100644 --- a/hw/rtl/cache/VX_nc_bypass.v +++ b/hw/rtl/cache/VX_nc_bypass.v @@ -93,42 +93,37 @@ module VX_nc_bypass #( // core request handling - reg [NUM_REQS-1:0] core_req_valid_out_r; reg [NUM_REQS-1:0] core_req_ready_in_r; - wire [NUM_REQS-1:0] core_req_valid_in_nc; + wire [NUM_REQS-1:0] core_req_nc_sel; + wire [NUM_REQS-1:0] core_req_nc_tids; + wire [`UP(CORE_REQ_TIDW)-1:0] core_req_nc_tid; + wire core_req_nc_valid; for (genvar i = 0; i < NUM_REQS; ++i) begin - assign core_req_valid_in_nc[i] = core_req_valid_in[i] && core_req_tag_in[i][NC_TAG_BIT]; + assign core_req_nc_tids[i] = core_req_tag_in[i][NC_TAG_BIT]; end - always @(*) begin - for (integer i = 0; i < NUM_REQS; ++i) begin - if (core_req_valid_in_nc[i]) begin - core_req_valid_out_r[i] = 0; - end else begin - core_req_valid_out_r[i] = core_req_valid_in[i]; - end - end - end - - wire [`UP(CORE_REQ_TIDW)-1:0] core_req_nc_tid; - wire core_req_nc_valid; + assign core_req_valid_in_nc = core_req_valid_in & core_req_nc_tids; VX_priority_encoder #( .N (NUM_REQS) ) core_req_sel ( .data_in (core_req_valid_in_nc), .index (core_req_nc_tid), - `UNUSED_PIN (onehot), + .onehot (core_req_nc_sel), .valid_out (core_req_nc_valid) ); + assign core_req_valid_out = core_req_valid_in & ~core_req_nc_tids; + + `UNUSED_VAR (core_req_nc_sel) + if (NUM_REQS > 1) begin always @(*) begin for (integer i = 0; i < NUM_REQS; ++i) begin if (core_req_valid_in_nc[i]) begin - core_req_ready_in_r[i] = mem_req_ready_out && (core_req_nc_tid == CORE_REQ_TIDW'(i)); + core_req_ready_in_r[i] = ~mem_req_valid_in && mem_req_ready_out && core_req_nc_sel[i]; end else begin core_req_ready_in_r[i] = core_req_ready_out[i]; end @@ -138,14 +133,13 @@ module VX_nc_bypass #( `UNUSED_VAR (core_req_nc_tid) always @(*) begin if (core_req_valid_in_nc) begin - core_req_ready_in_r = mem_req_ready_out; + core_req_ready_in_r = ~mem_req_valid_in && mem_req_ready_out; end else begin core_req_ready_in_r = core_req_ready_out; end end end - assign core_req_valid_out = core_req_valid_out_r; assign core_req_rw_out = core_req_rw_in; assign core_req_addr_out = core_req_addr_in; assign core_req_byteen_out = core_req_byteen_in; @@ -161,91 +155,91 @@ module VX_nc_bypass #( reg [MEM_ADDR_WIDTH-1:0] mem_req_addr_out_r; reg [MEM_DATA_WIDTH-1:0] mem_req_data_out_r; reg [MEM_TAG_WIDTH-1:0] mem_req_tag_out_r; - reg mem_req_ready_in_r; + reg mem_req_ready_in_r; always @(*) begin - if (core_req_nc_valid) begin + if (mem_req_valid_in) begin mem_req_valid_out_r = 1; - mem_req_ready_in_r = 0; - end else begin - mem_req_valid_out_r = mem_req_valid_in; mem_req_ready_in_r = mem_req_ready_out; + end else begin + mem_req_valid_out_r = core_req_nc_valid; + mem_req_ready_in_r = 0; end end if (NUM_REQS > 1) begin always @(*) begin - if (core_req_nc_valid) begin + if (mem_req_valid_in) begin + mem_req_rw_out_r = mem_req_rw_in; + mem_req_addr_out_r = mem_req_addr_in; + mem_req_data_out_r = mem_req_data_in; + end else begin mem_req_rw_out_r = core_req_rw_in[core_req_nc_tid]; mem_req_addr_out_r = core_req_addr_in[core_req_nc_tid][D +: MEM_ADDR_WIDTH]; for (integer i = 0; i < P; ++i) begin mem_req_data_out_r[i * CORE_DATA_WIDTH +: CORE_DATA_WIDTH] = core_req_data_in[core_req_nc_tid]; end - end else begin - mem_req_rw_out_r = mem_req_rw_in; - mem_req_addr_out_r = mem_req_addr_in; - mem_req_data_out_r = mem_req_data_in; end end if (D != 0) begin wire [D-1:0] req_addr_idx = core_req_addr_in[core_req_nc_tid][D-1:0]; always @(*) begin - if (core_req_nc_valid) begin + if (mem_req_valid_in) begin + mem_req_byteen_out_r = mem_req_byteen_in; + mem_req_tag_out_r = mem_req_tag_in; + end else begin mem_req_byteen_out_r = 0; mem_req_byteen_out_r[req_addr_idx * CORE_DATA_SIZE +: CORE_DATA_SIZE] = core_req_byteen_in[core_req_nc_tid]; mem_req_tag_out_r = MEM_TAG_WIDTH'({core_req_nc_tid, req_addr_idx, core_req_tag_in[core_req_nc_tid]}); - end else begin - mem_req_byteen_out_r = mem_req_byteen_in; - mem_req_tag_out_r = mem_req_tag_in; end end end else begin always @(*) begin - if (core_req_nc_valid) begin - mem_req_byteen_out_r = core_req_byteen_in[core_req_nc_tid]; - mem_req_tag_out_r = MEM_TAG_WIDTH'({core_req_nc_tid, core_req_tag_in[core_req_nc_tid]}); - end else begin + if (mem_req_valid_in) begin mem_req_byteen_out_r = mem_req_byteen_in; mem_req_tag_out_r = mem_req_tag_in; + end else begin + mem_req_byteen_out_r = core_req_byteen_in[core_req_nc_tid]; + mem_req_tag_out_r = MEM_TAG_WIDTH'({core_req_nc_tid, core_req_tag_in[core_req_nc_tid]}); end end end end else begin always @(*) begin - if (core_req_nc_valid) begin + if (mem_req_valid_in) begin + mem_req_rw_out_r = mem_req_rw_in; + mem_req_addr_out_r = mem_req_addr_in; + mem_req_data_out_r = mem_req_data_in; + end else begin mem_req_rw_out_r = core_req_rw_in; mem_req_addr_out_r = core_req_addr_in[0][D +: MEM_ADDR_WIDTH]; for (integer i = 0; i < P; ++i) begin mem_req_data_out_r[i * CORE_DATA_WIDTH +: CORE_DATA_WIDTH] = core_req_data_in; end - end else begin - mem_req_rw_out_r = mem_req_rw_in; - mem_req_addr_out_r = mem_req_addr_in; - mem_req_data_out_r = mem_req_data_in; end end if (D != 0) begin wire [D-1:0] req_addr_idx = core_req_addr_in[0][D-1:0]; always @(*) begin - if (core_req_nc_valid) begin + if (mem_req_valid_in) begin + mem_req_byteen_out_r = mem_req_byteen_in; + mem_req_tag_out_r = mem_req_tag_in; + end else begin mem_req_byteen_out_r = 0; mem_req_byteen_out_r[req_addr_idx * CORE_DATA_SIZE +: CORE_DATA_SIZE] = core_req_byteen_in; mem_req_tag_out_r = MEM_TAG_WIDTH'({req_addr_idx, core_req_tag_in}); - end else begin - mem_req_byteen_out_r = mem_req_byteen_in; - mem_req_tag_out_r = mem_req_tag_in; end end end else begin always @(*) begin - if (core_req_nc_valid) begin - mem_req_byteen_out_r = core_req_byteen_in; - mem_req_tag_out_r = MEM_TAG_WIDTH'(core_req_tag_in); - end else begin + if (mem_req_valid_in) begin mem_req_byteen_out_r = mem_req_byteen_in; mem_req_tag_out_r = mem_req_tag_in; + end else begin + mem_req_byteen_out_r = core_req_byteen_in; + mem_req_tag_out_r = MEM_TAG_WIDTH'(core_req_tag_in); end end end @@ -272,26 +266,25 @@ module VX_nc_bypass #( wire [CORE_REQ_TIDW-1:0] rsp_tid = mem_rsp_tag_in[(CORE_TAG_WIDTH + D) +: CORE_REQ_TIDW]; if (NUM_RSP_TAGS > 1) begin always @(*) begin - for (integer i = 0; i < NUM_REQS; ++i) begin - if (is_mem_rsp_nc && (rsp_tid == CORE_REQ_TIDW'(i))) begin - core_rsp_valid_out_r[i] = 1; - core_rsp_tag_out_r[i] = mem_rsp_tag_in[CORE_TAG_WIDTH-1:0]; - core_rsp_ready_in_r[i] = 0; - end else begin - core_rsp_valid_out_r[i] = core_rsp_valid_in[i]; - core_rsp_tag_out_r[i] = core_rsp_tag_in[i]; - core_rsp_ready_in_r[i] = core_rsp_ready_out[i]; + if (is_mem_rsp_nc) begin + core_rsp_valid_out_r = 0; + core_rsp_valid_out_r[rsp_tid] = 1; + for (integer i = 0; i < NUM_REQS; ++i) begin + core_rsp_tag_out_r[i] = mem_rsp_tag_in[CORE_TAG_WIDTH-1:0]; end - end + core_rsp_ready_in_r = 0; + end else begin + core_rsp_valid_out_r = core_rsp_valid_in; + core_rsp_tag_out_r = core_rsp_tag_in; + core_rsp_ready_in_r = core_rsp_ready_out; + end end end else begin always @(*) begin if (is_mem_rsp_nc) begin core_rsp_valid_out_r = 0; core_rsp_valid_out_r[rsp_tid] = 1; - for (integer i = 0; i < NUM_RSP_TAGS; ++i) begin - core_rsp_tag_out_r[i] = mem_rsp_tag_in[CORE_TAG_WIDTH-1:0]; - end + core_rsp_tag_out_r = mem_rsp_tag_in[CORE_TAG_WIDTH-1:0]; core_rsp_ready_in_r = 0; end else begin core_rsp_valid_out_r = core_rsp_valid_in; @@ -301,7 +294,7 @@ module VX_nc_bypass #( end end end else begin - always @(*) begin + always @(*) begin if (is_mem_rsp_nc) begin core_rsp_valid_out_r = 1; core_rsp_tag_out_r = mem_rsp_tag_in[CORE_TAG_WIDTH-1:0]; @@ -316,49 +309,23 @@ module VX_nc_bypass #( if (D != 0) begin wire [D-1:0] rsp_addr_idx = mem_rsp_tag_in[CORE_TAG_WIDTH +: D]; - if (NUM_RSP_TAGS > 1) begin - wire [CORE_REQ_TIDW-1:0] rsp_tid = mem_rsp_tag_in[(CORE_TAG_WIDTH + D) +: CORE_REQ_TIDW]; - always @(*) begin + always @(*) begin + if (is_mem_rsp_nc) begin for (integer i = 0; i < NUM_REQS; ++i) begin - if (is_mem_rsp_nc && (rsp_tid == CORE_REQ_TIDW'(i))) begin - core_rsp_data_out_r[i] = mem_rsp_data_in[rsp_addr_idx * CORE_DATA_WIDTH +: CORE_DATA_WIDTH]; - end else begin - core_rsp_data_out_r[i] = core_rsp_data_in[i]; - end - end - end - end else begin - always @(*) begin - if (is_mem_rsp_nc) begin - for (integer i = 0; i < NUM_REQS; ++i) begin - core_rsp_data_out_r[i] = mem_rsp_data_in[rsp_addr_idx * CORE_DATA_WIDTH +: CORE_DATA_WIDTH]; - end - end else begin - core_rsp_data_out_r = core_rsp_data_in; + core_rsp_data_out_r[i] = mem_rsp_data_in[rsp_addr_idx * CORE_DATA_WIDTH +: CORE_DATA_WIDTH]; end + end else begin + core_rsp_data_out_r = core_rsp_data_in; end end - end else begin - if (NUM_RSP_TAGS > 1) begin - wire [CORE_REQ_TIDW-1:0] rsp_tid = mem_rsp_tag_in[(CORE_TAG_WIDTH + D) +: CORE_REQ_TIDW]; - always @(*) begin + end else begin + always @(*) begin + if (is_mem_rsp_nc) begin for (integer i = 0; i < NUM_REQS; ++i) begin - if (is_mem_rsp_nc && (rsp_tid == CORE_REQ_TIDW'(i))) begin - core_rsp_data_out_r[i] = mem_rsp_data_in; - end else begin - core_rsp_data_out_r[i] = core_rsp_data_in[i]; - end - end - end - end else begin - always @(*) begin - if (is_mem_rsp_nc) begin - for (integer i = 0; i < NUM_REQS; ++i) begin - core_rsp_data_out_r[i] = mem_rsp_data_in; - end - end else begin - core_rsp_data_out_r = core_rsp_data_in; + core_rsp_data_out_r[i] = mem_rsp_data_in; end + end else begin + core_rsp_data_out_r = core_rsp_data_in; end end end @@ -370,39 +337,16 @@ module VX_nc_bypass #( // memory response handling - reg mem_rsp_valid_out_r; - reg mem_rsp_ready_in_r; - - always @(*) begin - if (is_mem_rsp_nc) begin - mem_rsp_valid_out_r = 0; - end else begin - mem_rsp_valid_out_r = mem_rsp_valid_in; - end - end + assign mem_rsp_valid_out = mem_rsp_valid_in && ~mem_rsp_tag_in[NC_TAG_BIT]; if (NUM_RSP_TAGS > 1) begin wire [CORE_REQ_TIDW-1:0] rsp_tid = mem_rsp_tag_in[(CORE_TAG_WIDTH + D) +: CORE_REQ_TIDW]; - always @(*) begin - if (is_mem_rsp_nc) begin - mem_rsp_ready_in_r = core_rsp_ready_out[rsp_tid]; - end else begin - mem_rsp_ready_in_r = mem_rsp_ready_out; - end - end + assign mem_rsp_ready_in = is_mem_rsp_nc ? core_rsp_ready_out[rsp_tid] : mem_rsp_ready_out; end else begin - always @(*) begin - if (is_mem_rsp_nc) begin - mem_rsp_ready_in_r = core_rsp_ready_out; - end else begin - mem_rsp_ready_in_r = mem_rsp_ready_out; - end - end + assign mem_rsp_ready_in = is_mem_rsp_nc ? core_rsp_ready_out : mem_rsp_ready_out; end - assign mem_rsp_valid_out = mem_rsp_valid_out_r; - assign mem_rsp_data_out = mem_rsp_data_in; - assign mem_rsp_tag_out = mem_rsp_tag_in; - assign mem_rsp_ready_in = mem_rsp_ready_in_r; + assign mem_rsp_data_out = mem_rsp_data_in; + assign mem_rsp_tag_out = mem_rsp_tag_in; endmodule diff --git a/hw/rtl/interfaces/VX_instr_sched_if.v b/hw/rtl/interfaces/VX_instr_sched_if.v new file mode 100644 index 00000000..13b59db1 --- /dev/null +++ b/hw/rtl/interfaces/VX_instr_sched_if.v @@ -0,0 +1,29 @@ +`ifndef VX_INSTR_SCHED_IF +`define VX_INSTR_SCHED_IF + +`include "VX_define.vh" + +interface VX_instr_sched_if (); + + wire valid; + wire [`NW_BITS-1:0] wid; + wire [`NW_BITS-1:0] wid_n; + wire [`NUM_THREADS-1:0] tmask; + wire [31:0] PC; + wire [`EX_BITS-1:0] ex_type; + wire [`OP_BITS-1:0] op_type; + wire [`MOD_BITS-1:0] op_mod; + wire wb; + wire [`NR_BITS-1:0] rd; + wire [`NR_BITS-1:0] rs1; + wire [`NR_BITS-1:0] rs2; + wire [`NR_BITS-1:0] rs3; + wire [31:0] imm; + wire use_PC; + wire use_imm; + wire [`NUM_REGS-1:0] used_regs; + wire ready; + +endinterface + +`endif \ No newline at end of file diff --git a/hw/rtl/libs/VX_onehot_encoder.v b/hw/rtl/libs/VX_onehot_encoder.v index e9d71bef..a6236207 100644 --- a/hw/rtl/libs/VX_onehot_encoder.v +++ b/hw/rtl/libs/VX_onehot_encoder.v @@ -23,126 +23,7 @@ module VX_onehot_encoder #( assign data_out = data_in[!REVERSE]; assign valid = (| data_in); - end else if (N == 4) begin - - reg [LN-1:0] index_r; - - if (REVERSE) begin - always @(*) begin - casez (data_in) - 4'b1000: index_r = LN'(0); - 4'b?100: index_r = LN'(1); - 4'b??10: index_r = LN'(2); - 4'b???1: index_r = LN'(3); - default: index_r = 'x; - endcase - end - end else begin - always @(*) begin - casez (data_in) - 4'b0001: index_r = LN'(0); - 4'b001?: index_r = LN'(1); - 4'b01??: index_r = LN'(2); - 4'b1???: index_r = LN'(3); - default: index_r = 'x; - endcase - end - end - - assign data_out = index_r; - assign valid = (| data_in); - - end else if (N == 8) begin - - reg [LN-1:0] index_r; - - if (REVERSE) begin - always @(*) begin - casez (data_in) - 8'b10000000: index_r = LN'(0); - 8'b?1000000: index_r = LN'(1); - 8'b??100000: index_r = LN'(2); - 8'b???10000: index_r = LN'(3); - 8'b????1000: index_r = LN'(4); - 8'b?????100: index_r = LN'(5); - 8'b??????10: index_r = LN'(6); - 8'b???????1: index_r = LN'(7); - default: index_r = 'x; - endcase - end - end else begin - always @(*) begin - casez (data_in) - 8'b00000001: index_r = LN'(0); - 8'b0000001?: index_r = LN'(1); - 8'b000001??: index_r = LN'(2); - 8'b00001???: index_r = LN'(3); - 8'b0001????: index_r = LN'(4); - 8'b001?????: index_r = LN'(5); - 8'b01??????: index_r = LN'(6); - 8'b1???????: index_r = LN'(7); - default: index_r = 'x; - endcase - end - end - - assign data_out = index_r; - assign valid = (| data_in); - - end else if (N == 16) begin - - reg [LN-1:0] index_r; - - if (REVERSE) begin - always @(*) begin - casez (data_in) - 16'b1000000000000000: index_r = LN'(0); - 16'b?100000000000000: index_r = LN'(1); - 16'b??10000000000000: index_r = LN'(2); - 16'b???1000000000000: index_r = LN'(3); - 16'b????100000000000: index_r = LN'(4); - 16'b?????10000000000: index_r = LN'(5); - 16'b??????1000000000: index_r = LN'(6); - 16'b???????100000000: index_r = LN'(7); - 16'b????????10000000: index_r = LN'(8); - 16'b?????????1000000: index_r = LN'(9); - 16'b??????????100000: index_r = LN'(10); - 16'b???????????10000: index_r = LN'(11); - 16'b????????????1000: index_r = LN'(12); - 16'b?????????????100: index_r = LN'(13); - 16'b??????????????10: index_r = LN'(14); - 16'b???????????????1: index_r = LN'(15); - default: index_r = 'x; - endcase - end - end else begin - always @(*) begin - casez (data_in) - 16'b0000000000000001: index_r = LN'(0); - 16'b000000000000001?: index_r = LN'(1); - 16'b00000000000001??: index_r = LN'(2); - 16'b0000000000001???: index_r = LN'(3); - 16'b000000000001????: index_r = LN'(4); - 16'b00000000001?????: index_r = LN'(5); - 16'b0000000001??????: index_r = LN'(6); - 16'b000000001???????: index_r = LN'(7); - 16'b00000001????????: index_r = LN'(8); - 16'b0000001?????????: index_r = LN'(9); - 16'b000001??????????: index_r = LN'(10); - 16'b00001???????????: index_r = LN'(11); - 16'b0001????????????: index_r = LN'(12); - 16'b001?????????????: index_r = LN'(13); - 16'b01??????????????: index_r = LN'(14); - 16'b1???????????????: index_r = LN'(15); - default: index_r = 'x; - endcase - end - end - - assign data_out = index_r; - assign valid = (| data_in); - - end if (FAST) begin + end else if (FAST) begin `IGNORE_WARNINGS_BEGIN localparam levels_lp = $clog2(N); localparam aligned_width_lp = 1 << $clog2(N); diff --git a/hw/rtl/libs/VX_priority_encoder.v b/hw/rtl/libs/VX_priority_encoder.v index 32eae452..7847fc9d 100644 --- a/hw/rtl/libs/VX_priority_encoder.v +++ b/hw/rtl/libs/VX_priority_encoder.v @@ -24,128 +24,6 @@ module VX_priority_encoder #( assign index = ~data_in[REVERSE]; assign valid_out = (| data_in); - end else if (N == 4) begin - - reg [LN-1:0] index_r; - reg [N-1:0] onehot_r; - - if (REVERSE) begin - always @(*) begin - casez (data_in) - 4'b1???: begin onehot_r = 4'b0001; index_r = LN'(0); end - 4'b01??: begin onehot_r = 4'b0010; index_r = LN'(1); end - 4'b001?: begin onehot_r = 4'b0100; index_r = LN'(2); end - 4'b0001: begin onehot_r = 4'b1000; index_r = LN'(3); end - default: begin onehot_r = 'x; index_r = 'x; end - endcase - end - end else begin - always @(*) begin - casez (data_in) - 4'b???1: begin onehot_r = 4'b0001; index_r = LN'(0); end - 4'b??10: begin onehot_r = 4'b0010; index_r = LN'(1); end - 4'b?100: begin onehot_r = 4'b0100; index_r = LN'(2); end - 4'b1000: begin onehot_r = 4'b1000; index_r = LN'(3); end - default: begin onehot_r = 'x; index_r = 'x; end - endcase - end - end - - assign index = index_r; - assign onehot = onehot_r; - - end else if (N == 8) begin - - reg [LN-1:0] index_r; - reg [N-1:0] onehot_r; - - if (REVERSE) begin - always @(*) begin - casez (data_in) - 8'b1???????: begin onehot_r = 8'b00000001; index_r = LN'(0); end - 8'b01??????: begin onehot_r = 8'b00000010; index_r = LN'(1); end - 8'b001?????: begin onehot_r = 8'b00000100; index_r = LN'(2); end - 8'b0001????: begin onehot_r = 8'b00001000; index_r = LN'(3); end - 8'b00001???: begin onehot_r = 8'b00010000; index_r = LN'(4); end - 8'b000001??: begin onehot_r = 8'b00100000; index_r = LN'(5); end - 8'b0000001?: begin onehot_r = 8'b01000000; index_r = LN'(6); end - 8'b00000001: begin onehot_r = 8'b10000000; index_r = LN'(7); end - default: begin onehot_r = 'x; index_r = 'x; end - endcase - end - end else begin - always @(*) begin - casez (data_in) - 8'b???????1: begin onehot_r = 8'b00000001; index_r = LN'(0); end - 8'b??????10: begin onehot_r = 8'b00000010; index_r = LN'(1); end - 8'b?????100: begin onehot_r = 8'b00000100; index_r = LN'(2); end - 8'b????1000: begin onehot_r = 8'b00001000; index_r = LN'(3); end - 8'b???10000: begin onehot_r = 8'b00010000; index_r = LN'(4); end - 8'b??100000: begin onehot_r = 8'b00100000; index_r = LN'(5); end - 8'b?1000000: begin onehot_r = 8'b01000000; index_r = LN'(6); end - 8'b10000000: begin onehot_r = 8'b10000000; index_r = LN'(7); end - default: begin onehot_r = 'x; index_r = 'x; end - endcase - end - end - - assign index = index_r; - assign onehot = onehot_r; - - end else if (N == 16) begin - - reg [LN-1:0] index_r; - reg [N-1:0] onehot_r; - - if (REVERSE) begin - always @(*) begin - casez (data_in) - 16'b1???????????????: begin onehot_r = 16'b0000000000000001; index_r = LN'(0); end - 16'b01??????????????: begin onehot_r = 16'b0000000000000010; index_r = LN'(1); end - 16'b001?????????????: begin onehot_r = 16'b0000000000000100; index_r = LN'(2); end - 16'b0001????????????: begin onehot_r = 16'b0000000000001000; index_r = LN'(3); end - 16'b00001???????????: begin onehot_r = 16'b0000000000010000; index_r = LN'(4); end - 16'b000001??????????: begin onehot_r = 16'b0000000000100000; index_r = LN'(5); end - 16'b0000001?????????: begin onehot_r = 16'b0000000001000000; index_r = LN'(6); end - 16'b00000001????????: begin onehot_r = 16'b0000000010000000; index_r = LN'(7); end - 16'b000000001???????: begin onehot_r = 16'b0000000100000000; index_r = LN'(8); end - 16'b0000000001??????: begin onehot_r = 16'b0000001000000000; index_r = LN'(9); end - 16'b00000000001?????: begin onehot_r = 16'b0000010000000000; index_r = LN'(10); end - 16'b000000000001????: begin onehot_r = 16'b0000100000000000; index_r = LN'(11); end - 16'b0000000000001???: begin onehot_r = 16'b0001000000000000; index_r = LN'(12); end - 16'b00000000000001??: begin onehot_r = 16'b0010000000000000; index_r = LN'(13); end - 16'b000000000000001?: begin onehot_r = 16'b0100000000000000; index_r = LN'(14); end - 16'b0000000000000001: begin onehot_r = 16'b1000000000000000; index_r = LN'(15); end - default: begin onehot_r = 'x; index_r = 'x; end - endcase - end - end else begin - always @(*) begin - casez (data_in) - 16'b???????????????1: begin onehot_r = 16'b0000000000000001; index_r = LN'(0); end - 16'b??????????????10: begin onehot_r = 16'b0000000000000010; index_r = LN'(1); end - 16'b?????????????100: begin onehot_r = 16'b0000000000000100; index_r = LN'(2); end - 16'b????????????1000: begin onehot_r = 16'b0000000000001000; index_r = LN'(3); end - 16'b???????????10000: begin onehot_r = 16'b0000000000010000; index_r = LN'(4); end - 16'b??????????100000: begin onehot_r = 16'b0000000000100000; index_r = LN'(5); end - 16'b?????????1000000: begin onehot_r = 16'b0000000001000000; index_r = LN'(6); end - 16'b????????10000000: begin onehot_r = 16'b0000000010000000; index_r = LN'(7); end - 16'b???????100000000: begin onehot_r = 16'b0000000100000000; index_r = LN'(8); end - 16'b??????1000000000: begin onehot_r = 16'b0000001000000000; index_r = LN'(9); end - 16'b?????10000000000: begin onehot_r = 16'b0000010000000000; index_r = LN'(10); end - 16'b????100000000000: begin onehot_r = 16'b0000100000000000; index_r = LN'(11); end - 16'b???1000000000000: begin onehot_r = 16'b0001000000000000; index_r = LN'(12); end - 16'b??10000000000000: begin onehot_r = 16'b0010000000000000; index_r = LN'(13); end - 16'b?100000000000000: begin onehot_r = 16'b0100000000000000; index_r = LN'(14); end - 16'b1000000000000000: begin onehot_r = 16'b1000000000000000; index_r = LN'(15); end - default: begin onehot_r = 'x; index_r = 'x; end - endcase - end - end - - assign index = index_r; - assign onehot = onehot_r; - end else if (FAST) begin wire [N-1:0] scan_lo; @@ -209,9 +87,8 @@ module VX_priority_encoder #( assign index = index_r; assign onehot = onehot_r; + assign valid_out = (| data_in); end - assign valid_out = (| data_in); - endmodule \ No newline at end of file diff --git a/hw/rtl/libs/VX_rr_arbiter.v b/hw/rtl/libs/VX_rr_arbiter.v index 550c9287..b9754703 100644 --- a/hw/rtl/libs/VX_rr_arbiter.v +++ b/hw/rtl/libs/VX_rr_arbiter.v @@ -14,8 +14,6 @@ module VX_rr_arbiter #( output wire grant_valid ); - localparam NN = NUM_REQS * NUM_REQS; - if (NUM_REQS == 1) begin `UNUSED_VAR (clk) @@ -399,17 +397,14 @@ module VX_rr_arbiter #( always @(*) begin grant_index_r = 'x; grant_onehot_r = 'x; - for (integer i = 0; i < NN; ++i) begin - /* verilator lint_off UNUSED */ - integer src = i / NUM_REQS; - integer dst = i % NUM_REQS; - integer next = (dst + 1) % NUM_REQS; - /* verilator lint_on UNUSED */ - if (state == LOG_NUM_REQS'(src ) - && requests[next]) begin - grant_index_r = LOG_NUM_REQS'(next); - grant_onehot_r = '0; - grant_onehot_r[next] = 1; + for (integer i = 0; i < NUM_REQS; ++i) begin + for (integer j = 0; j < NUM_REQS; ++j) begin + if (state == LOG_NUM_REQS'(i) + && requests[(j + 1) % NUM_REQS]) begin + grant_index_r = LOG_NUM_REQS'((j + 1) % NUM_REQS); + grant_onehot_r = '0; + grant_onehot_r[(j + 1) % NUM_REQS] = 1; + end end end end diff --git a/hw/syn/quartus/project.tcl b/hw/syn/quartus/project.tcl index 11cbfa2d..887db971 100644 --- a/hw/syn/quartus/project.tcl +++ b/hw/syn/quartus/project.tcl @@ -40,30 +40,13 @@ set_global_assignment -name VERILOG_MACRO SYNTHESIS set_global_assignment -name VERILOG_MACRO NDEBUG set_global_assignment -name MESSAGE_DISABLE 16818 set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING ON +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON +set_global_assignment -name OPTIMIZATION_TECHNIQUE AREA -#set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED -#set_global_assignment -name OPTIMIZATION_MODE "AGGRESSIVE PERFORMANCE" -#set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS -#set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 2.0 -#set_global_assignment -name FITTER_EFFORT "STANDARD FIT" -#set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS" -#set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON -#set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL MAXIMUM -#set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON -#set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION ON -#set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON -#set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON - -#set_global_assignment -name USE_HIGH_SPEED_ADDER ON -#set_global_assignment -name MUX_RESTRUCTURE ON -#set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP ON -#set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING "FORCE ALL TILES WITH FAILING TIMING PATHS TO HIGH SPEED" -#set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON -#set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING ON - -#set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 -#set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100 -#set_global_assignment -name SEED 1 +# Power estimation +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" switch $opts(family) { "Arria 10" { From 212581a33d969614eccf3675580d5b05783bae82 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Fri, 25 Jun 2021 17:00:17 -0700 Subject: [PATCH 12/13] migrating to travis.com --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 80beccea..53f42736 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![Build Status](https://travis-ci.org/vortexgpgpu/vortex.svg?branch=master)](https://travis-ci.org/vortexgpgpu/vortex) +[![Build Status](https://travis-ci.com/vortexgpgpu/vortex.svg?branch=master)](https://travis-ci.com/vortexgpgpu/vortex) [![codecov](https://codecov.io/gh/vortexgpgpu/vortex/branch/master/graph/badge.svg)](https://codecov.io/gh/vortexgpgpu/vortex) # Vortex RISC-V GPGPU From f84c8a0b5d81f76aad807374fc70df4c55f105c0 Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Sun, 27 Jun 2021 19:36:43 -0700 Subject: [PATCH 13/13] instr_sched => ibuffer --- hw/rtl/{VX_instr_sched.v => VX_ibuffer.v} | 42 ++++---- hw/rtl/VX_instr_demux.v | 30 +++--- hw/rtl/VX_issue.v | 96 +++++++++---------- hw/rtl/VX_scoreboard.v | 24 ++--- hw/rtl/afu/vortex_afu.sv | 3 +- hw/rtl/cache/VX_bank.v | 6 +- hw/rtl/cache/VX_miss_resrv.v | 16 ++-- .../{VX_instr_sched_if.v => VX_ibuffer_if.v} | 6 +- hw/syn/opae/vortex_afu.json | 4 +- hw/syn/quartus/Makefile | 4 +- 10 files changed, 117 insertions(+), 114 deletions(-) rename hw/rtl/{VX_instr_sched.v => VX_ibuffer.v} (88%) rename hw/rtl/interfaces/{VX_instr_sched_if.v => VX_ibuffer_if.v} (89%) diff --git a/hw/rtl/VX_instr_sched.v b/hw/rtl/VX_ibuffer.v similarity index 88% rename from hw/rtl/VX_instr_sched.v rename to hw/rtl/VX_ibuffer.v index 1290ed5e..dbb1433a 100644 --- a/hw/rtl/VX_instr_sched.v +++ b/hw/rtl/VX_ibuffer.v @@ -1,6 +1,6 @@ `include "VX_define.vh" -module VX_instr_sched #( +module VX_ibuffer #( parameter CORE_ID = 0 ) ( input wire clk, @@ -10,7 +10,7 @@ module VX_instr_sched #( VX_decode_if decode_if, // outputs - VX_instr_sched_if instr_sched_if + VX_ibuffer_if ibuffer_if ); `UNUSED_PARAM (CORE_ID) @@ -29,12 +29,12 @@ module VX_instr_sched #( reg [`NUM_WARPS-1:0][DATAW-1:0] q_data_out; wire enq_fire = decode_if.valid && decode_if.ready; - wire deq_fire = instr_sched_if.valid && instr_sched_if.ready; + wire deq_fire = ibuffer_if.valid && ibuffer_if.ready; for (genvar i = 0; i < `NUM_WARPS; ++i) begin wire writing = enq_fire && (i == decode_if.wid); - wire reading = deq_fire && (i == instr_sched_if.wid); + wire reading = deq_fire && (i == ibuffer_if.wid); wire is_head_ptr = empty_r[i] || (alm_empty_r[i] && reading); @@ -182,22 +182,22 @@ module VX_instr_sched #( decode_if.use_imm, decode_if.used_regs}; - assign instr_sched_if.valid = deq_valid; - assign instr_sched_if.wid = deq_wid; - assign instr_sched_if.wid_n = deq_wid_n; - assign {instr_sched_if.tmask, - instr_sched_if.PC, - instr_sched_if.ex_type, - instr_sched_if.op_type, - instr_sched_if.op_mod, - instr_sched_if.wb, - instr_sched_if.rd, - instr_sched_if.rs1, - instr_sched_if.rs2, - instr_sched_if.rs3, - instr_sched_if.imm, - instr_sched_if.use_PC, - instr_sched_if.use_imm, - instr_sched_if.used_regs} = deq_instr; + assign ibuffer_if.valid = deq_valid; + assign ibuffer_if.wid = deq_wid; + assign ibuffer_if.wid_n = deq_wid_n; + assign {ibuffer_if.tmask, + ibuffer_if.PC, + ibuffer_if.ex_type, + ibuffer_if.op_type, + ibuffer_if.op_mod, + ibuffer_if.wb, + ibuffer_if.rd, + ibuffer_if.rs1, + ibuffer_if.rs2, + ibuffer_if.rs3, + ibuffer_if.imm, + ibuffer_if.use_PC, + ibuffer_if.use_imm, + ibuffer_if.used_regs} = deq_instr; endmodule \ No newline at end of file diff --git a/hw/rtl/VX_instr_demux.v b/hw/rtl/VX_instr_demux.v index b4984f57..ff00971f 100644 --- a/hw/rtl/VX_instr_demux.v +++ b/hw/rtl/VX_instr_demux.v @@ -5,7 +5,7 @@ module VX_instr_demux ( input wire reset, // inputs - VX_instr_sched_if execute_if, + VX_ibuffer_if ibuffer_if, VX_gpr_rsp_if gpr_rsp_if, // outputs @@ -25,17 +25,17 @@ module VX_instr_demux ( VX_priority_encoder #( .N (`NUM_THREADS) ) tid_select ( - .data_in (execute_if.tmask), + .data_in (ibuffer_if.tmask), .index (tid), `UNUSED_PIN (onehot), `UNUSED_PIN (valid_out) ); - wire [31:0] next_PC = execute_if.PC + 4; + wire [31:0] next_PC = ibuffer_if.PC + 4; // ALU unit - wire alu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_ALU); + wire alu_req_valid = ibuffer_if.valid && (ibuffer_if.ex_type == `EX_ALU); VX_skid_buffer #( .DATAW (`NW_BITS + `NUM_THREADS + 32 + 32 + `ALU_BITS + `MOD_BITS + 32 + 1 + 1 + `NR_BITS + 1 + `NT_BITS + (2 * `NUM_THREADS * 32)) @@ -44,7 +44,7 @@ module VX_instr_demux ( .reset (reset), .valid_in (alu_req_valid), .ready_in (alu_req_ready), - .data_in ({execute_if.wid, execute_if.tmask, execute_if.PC, next_PC, `ALU_OP(execute_if.op_type), execute_if.op_mod, execute_if.imm, execute_if.use_PC, execute_if.use_imm, execute_if.rd, execute_if.wb, tid, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data}), + .data_in ({ibuffer_if.wid, ibuffer_if.tmask, ibuffer_if.PC, next_PC, `ALU_OP(ibuffer_if.op_type), ibuffer_if.op_mod, ibuffer_if.imm, ibuffer_if.use_PC, ibuffer_if.use_imm, ibuffer_if.rd, ibuffer_if.wb, tid, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data}), .data_out ({alu_req_if.wid, alu_req_if.tmask, alu_req_if.PC, alu_req_if.next_PC, alu_req_if.op_type, alu_req_if.op_mod, alu_req_if.imm, alu_req_if.use_PC, alu_req_if.use_imm, alu_req_if.rd, alu_req_if.wb, alu_req_if.tid, alu_req_if.rs1_data, alu_req_if.rs2_data}), .valid_out (alu_req_if.valid), .ready_out (alu_req_if.ready) @@ -52,7 +52,7 @@ module VX_instr_demux ( // lsu unit - wire lsu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_LSU); + wire lsu_req_valid = ibuffer_if.valid && (ibuffer_if.ex_type == `EX_LSU); VX_skid_buffer #( .DATAW (`NW_BITS + `NUM_THREADS + 32 + `LSU_BITS + 32 + `NR_BITS + 1 + (2 * `NUM_THREADS * 32)) @@ -61,7 +61,7 @@ module VX_instr_demux ( .reset (reset), .valid_in (lsu_req_valid), .ready_in (lsu_req_ready), - .data_in ({execute_if.wid, execute_if.tmask, execute_if.PC, `LSU_OP(execute_if.op_type), execute_if.imm, execute_if.rd, execute_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data}), + .data_in ({ibuffer_if.wid, ibuffer_if.tmask, ibuffer_if.PC, `LSU_OP(ibuffer_if.op_type), ibuffer_if.imm, ibuffer_if.rd, ibuffer_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data}), .data_out ({lsu_req_if.wid, lsu_req_if.tmask, lsu_req_if.PC, lsu_req_if.op_type, lsu_req_if.offset, lsu_req_if.rd, lsu_req_if.wb, lsu_req_if.base_addr, lsu_req_if.store_data}), .valid_out (lsu_req_if.valid), .ready_out (lsu_req_if.ready) @@ -69,7 +69,7 @@ module VX_instr_demux ( // csr unit - wire csr_req_valid = execute_if.valid && (execute_if.ex_type == `EX_CSR); + wire csr_req_valid = ibuffer_if.valid && (ibuffer_if.ex_type == `EX_CSR); VX_skid_buffer #( .DATAW (`NW_BITS + `NUM_THREADS + 32 + `CSR_BITS + `CSR_ADDR_BITS + `NR_BITS + 1 + 1 + `NR_BITS + 32) @@ -78,7 +78,7 @@ module VX_instr_demux ( .reset (reset), .valid_in (csr_req_valid), .ready_in (csr_req_ready), - .data_in ({execute_if.wid, execute_if.tmask, execute_if.PC, `CSR_OP(execute_if.op_type), execute_if.imm[`CSR_ADDR_BITS-1:0], execute_if.rd, execute_if.wb, execute_if.use_imm, execute_if.rs1, gpr_rsp_if.rs1_data[0]}), + .data_in ({ibuffer_if.wid, ibuffer_if.tmask, ibuffer_if.PC, `CSR_OP(ibuffer_if.op_type), ibuffer_if.imm[`CSR_ADDR_BITS-1:0], ibuffer_if.rd, ibuffer_if.wb, ibuffer_if.use_imm, ibuffer_if.rs1, gpr_rsp_if.rs1_data[0]}), .data_out ({csr_req_if.wid, csr_req_if.tmask, csr_req_if.PC, csr_req_if.op_type, csr_req_if.addr, csr_req_if.rd, csr_req_if.wb, csr_req_if.use_imm, csr_req_if.rs1, csr_req_if.rs1_data}), .valid_out (csr_req_if.valid), .ready_out (csr_req_if.ready) @@ -87,7 +87,7 @@ module VX_instr_demux ( // fpu unit `ifdef EXT_F_ENABLE - wire fpu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_FPU); + wire fpu_req_valid = ibuffer_if.valid && (ibuffer_if.ex_type == `EX_FPU); VX_skid_buffer #( .DATAW (`NW_BITS + `NUM_THREADS + 32 + `FPU_BITS + `MOD_BITS + `NR_BITS + 1 + (3 * `NUM_THREADS * 32)) @@ -96,7 +96,7 @@ module VX_instr_demux ( .reset (reset), .valid_in (fpu_req_valid), .ready_in (fpu_req_ready), - .data_in ({execute_if.wid, execute_if.tmask, execute_if.PC, `FPU_OP(execute_if.op_type), execute_if.op_mod, execute_if.rd, execute_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data, gpr_rsp_if.rs3_data}), + .data_in ({ibuffer_if.wid, ibuffer_if.tmask, ibuffer_if.PC, `FPU_OP(ibuffer_if.op_type), ibuffer_if.op_mod, ibuffer_if.rd, ibuffer_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data, gpr_rsp_if.rs3_data}), .data_out ({fpu_req_if.wid, fpu_req_if.tmask, fpu_req_if.PC, fpu_req_if.op_type, fpu_req_if.op_mod, fpu_req_if.rd, fpu_req_if.wb, fpu_req_if.rs1_data, fpu_req_if.rs2_data, fpu_req_if.rs3_data}), .valid_out (fpu_req_if.valid), .ready_out (fpu_req_if.ready) @@ -108,7 +108,7 @@ module VX_instr_demux ( // gpu unit - wire gpu_req_valid = execute_if.valid && (execute_if.ex_type == `EX_GPU); + wire gpu_req_valid = ibuffer_if.valid && (ibuffer_if.ex_type == `EX_GPU); VX_skid_buffer #( .DATAW (`NW_BITS + `NUM_THREADS + 32 + 32 + `GPU_BITS + `NR_BITS + 1 + (`NUM_THREADS * 32 + 32)) @@ -117,7 +117,7 @@ module VX_instr_demux ( .reset (reset), .valid_in (gpu_req_valid), .ready_in (gpu_req_ready), - .data_in ({execute_if.wid, execute_if.tmask, execute_if.PC, next_PC, `GPU_OP(execute_if.op_type), execute_if.rd, execute_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data[0]}), + .data_in ({ibuffer_if.wid, ibuffer_if.tmask, ibuffer_if.PC, next_PC, `GPU_OP(ibuffer_if.op_type), ibuffer_if.rd, ibuffer_if.wb, gpr_rsp_if.rs1_data, gpr_rsp_if.rs2_data[0]}), .data_out ({gpu_req_if.wid, gpu_req_if.tmask, gpu_req_if.PC, gpu_req_if.next_PC, gpu_req_if.op_type, gpu_req_if.rd, gpu_req_if.wb, gpu_req_if.rs1_data, gpu_req_if.rs2_data}), .valid_out (gpu_req_if.valid), .ready_out (gpu_req_if.ready) @@ -126,7 +126,7 @@ module VX_instr_demux ( // can take next request? reg ready_r; always @(*) begin - case (execute_if.ex_type) + case (ibuffer_if.ex_type) `EX_ALU: ready_r = alu_req_ready; `EX_LSU: ready_r = lsu_req_ready; `EX_CSR: ready_r = csr_req_ready; @@ -135,6 +135,6 @@ module VX_instr_demux ( default: ready_r = 1'b1; // ignore NOPs endcase end - assign execute_if.ready = ready_r; + assign ibuffer_if.ready = ready_r; endmodule \ No newline at end of file diff --git a/hw/rtl/VX_issue.v b/hw/rtl/VX_issue.v index 95140bbd..9f2495f1 100644 --- a/hw/rtl/VX_issue.v +++ b/hw/rtl/VX_issue.v @@ -21,36 +21,36 @@ module VX_issue #( VX_fpu_req_if fpu_req_if, VX_gpu_req_if gpu_req_if ); - VX_instr_sched_if instr_sched_if(); - VX_instr_sched_if execute_if(); + VX_ibuffer_if ibuffer_if(); + VX_ibuffer_if execute_if(); VX_gpr_req_if gpr_req_if(); VX_gpr_rsp_if gpr_rsp_if(); wire scoreboard_delay; - VX_instr_sched #( + VX_ibuffer #( .CORE_ID(CORE_ID) - ) instr_sched ( - .clk (clk), - .reset (reset), - .decode_if (decode_if), - .instr_sched_if (instr_sched_if) + ) ibuffer ( + .clk (clk), + .reset (reset), + .decode_if (decode_if), + .ibuffer_if (ibuffer_if) ); VX_scoreboard #( .CORE_ID(CORE_ID) ) scoreboard ( - .clk (clk), - .reset (reset), - .instr_sched_if (instr_sched_if), - .writeback_if (writeback_if), - .delay (scoreboard_delay) + .clk (clk), + .reset (reset), + .ibuffer_if (ibuffer_if), + .writeback_if(writeback_if), + .delay (scoreboard_delay) ); - assign gpr_req_if.wid = instr_sched_if.wid; - assign gpr_req_if.rs1 = instr_sched_if.rs1; - assign gpr_req_if.rs2 = instr_sched_if.rs2; - assign gpr_req_if.rs3 = instr_sched_if.rs3; + assign gpr_req_if.wid = ibuffer_if.wid; + assign gpr_req_if.rs1 = ibuffer_if.rs1; + assign gpr_req_if.rs2 = ibuffer_if.rs2; + assign gpr_req_if.rs3 = ibuffer_if.rs3; VX_gpr_stage #( .CORE_ID(CORE_ID) @@ -62,24 +62,24 @@ module VX_issue #( .gpr_rsp_if (gpr_rsp_if) ); - assign execute_if.valid = instr_sched_if.valid && ~scoreboard_delay; - assign execute_if.wid = instr_sched_if.wid; - assign execute_if.tmask = instr_sched_if.tmask; - assign execute_if.PC = instr_sched_if.PC; - assign execute_if.ex_type = instr_sched_if.ex_type; - assign execute_if.op_type = instr_sched_if.op_type; - assign execute_if.op_mod = instr_sched_if.op_mod; - assign execute_if.wb = instr_sched_if.wb; - assign execute_if.rd = instr_sched_if.rd; - assign execute_if.rs1 = instr_sched_if.rs1; - assign execute_if.imm = instr_sched_if.imm; - assign execute_if.use_PC = instr_sched_if.use_PC; - assign execute_if.use_imm = instr_sched_if.use_imm; + assign execute_if.valid = ibuffer_if.valid && ~scoreboard_delay; + assign execute_if.wid = ibuffer_if.wid; + assign execute_if.tmask = ibuffer_if.tmask; + assign execute_if.PC = ibuffer_if.PC; + assign execute_if.ex_type = ibuffer_if.ex_type; + assign execute_if.op_type = ibuffer_if.op_type; + assign execute_if.op_mod = ibuffer_if.op_mod; + assign execute_if.wb = ibuffer_if.wb; + assign execute_if.rd = ibuffer_if.rd; + assign execute_if.rs1 = ibuffer_if.rs1; + assign execute_if.imm = ibuffer_if.imm; + assign execute_if.use_PC = ibuffer_if.use_PC; + assign execute_if.use_imm = ibuffer_if.use_imm; VX_instr_demux instr_demux ( .clk (clk), .reset (reset), - .execute_if (execute_if), + .ibuffer_if (execute_if), .gpr_rsp_if (gpr_rsp_if), .alu_req_if (alu_req_if), .lsu_req_if (lsu_req_if), @@ -89,23 +89,23 @@ module VX_issue #( ); // issue the instruction - assign instr_sched_if.ready = !scoreboard_delay && execute_if.ready; + assign ibuffer_if.ready = !scoreboard_delay && execute_if.ready; - `SCOPE_ASSIGN (issue_fire, instr_sched_if.valid && instr_sched_if.ready); - `SCOPE_ASSIGN (issue_wid, instr_sched_if.wid); - `SCOPE_ASSIGN (issue_tmask, instr_sched_if.tmask); - `SCOPE_ASSIGN (issue_pc, instr_sched_if.PC); - `SCOPE_ASSIGN (issue_ex_type, instr_sched_if.ex_type); - `SCOPE_ASSIGN (issue_op_type, instr_sched_if.op_type); - `SCOPE_ASSIGN (issue_op_mod, instr_sched_if.op_mod); - `SCOPE_ASSIGN (issue_wb, instr_sched_if.wb); - `SCOPE_ASSIGN (issue_rd, instr_sched_if.rd); - `SCOPE_ASSIGN (issue_rs1, instr_sched_if.rs1); - `SCOPE_ASSIGN (issue_rs2, instr_sched_if.rs2); - `SCOPE_ASSIGN (issue_rs3, instr_sched_if.rs3); - `SCOPE_ASSIGN (issue_imm, instr_sched_if.imm); - `SCOPE_ASSIGN (issue_use_pc, instr_sched_if.use_PC); - `SCOPE_ASSIGN (issue_use_imm, instr_sched_if.use_imm); + `SCOPE_ASSIGN (issue_fire, ibuffer_if.valid && ibuffer_if.ready); + `SCOPE_ASSIGN (issue_wid, ibuffer_if.wid); + `SCOPE_ASSIGN (issue_tmask, ibuffer_if.tmask); + `SCOPE_ASSIGN (issue_pc, ibuffer_if.PC); + `SCOPE_ASSIGN (issue_ex_type, ibuffer_if.ex_type); + `SCOPE_ASSIGN (issue_op_type, ibuffer_if.op_type); + `SCOPE_ASSIGN (issue_op_mod, ibuffer_if.op_mod); + `SCOPE_ASSIGN (issue_wb, ibuffer_if.wb); + `SCOPE_ASSIGN (issue_rd, ibuffer_if.rd); + `SCOPE_ASSIGN (issue_rs1, ibuffer_if.rs1); + `SCOPE_ASSIGN (issue_rs2, ibuffer_if.rs2); + `SCOPE_ASSIGN (issue_rs3, ibuffer_if.rs3); + `SCOPE_ASSIGN (issue_imm, ibuffer_if.imm); + `SCOPE_ASSIGN (issue_use_pc, ibuffer_if.use_PC); + `SCOPE_ASSIGN (issue_use_imm, ibuffer_if.use_imm); `SCOPE_ASSIGN (scoreboard_delay, scoreboard_delay); `SCOPE_ASSIGN (execute_delay, ~execute_if.ready); `SCOPE_ASSIGN (gpr_rsp_a, gpr_rsp_if.rs1_data); @@ -145,7 +145,7 @@ module VX_issue #( if (decode_if.valid & !decode_if.ready) begin perf_ibf_stalls <= perf_ibf_stalls + `PERF_CTR_BITS'd1; end - if (instr_sched_if.valid & scoreboard_delay) begin + if (ibuffer_if.valid & scoreboard_delay) begin perf_scb_stalls <= perf_scb_stalls + `PERF_CTR_BITS'd1; end if (alu_req_if.valid & !alu_req_if.ready) begin diff --git a/hw/rtl/VX_scoreboard.v b/hw/rtl/VX_scoreboard.v index 8278dabd..387b1876 100644 --- a/hw/rtl/VX_scoreboard.v +++ b/hw/rtl/VX_scoreboard.v @@ -6,7 +6,7 @@ module VX_scoreboard #( input wire clk, input wire reset, - VX_instr_sched_if instr_sched_if, + VX_ibuffer_if ibuffer_if, VX_writeback_if writeback_if, output wire delay ); @@ -14,16 +14,16 @@ module VX_scoreboard #( reg [`NUM_REGS-1:0] deq_inuse_regs; - assign delay = |(deq_inuse_regs & instr_sched_if.used_regs); + assign delay = |(deq_inuse_regs & ibuffer_if.used_regs); - wire reserve_reg = instr_sched_if.valid && instr_sched_if.ready && instr_sched_if.wb; + wire reserve_reg = ibuffer_if.valid && ibuffer_if.ready && ibuffer_if.wb; wire release_reg = writeback_if.valid && writeback_if.ready && writeback_if.eop; always @(*) begin inuse_regs_n = inuse_regs; if (reserve_reg) begin - inuse_regs_n[instr_sched_if.wid][instr_sched_if.rd] = 1; + inuse_regs_n[ibuffer_if.wid][ibuffer_if.rd] = 1; end if (release_reg) begin inuse_regs_n[writeback_if.wid][writeback_if.rd] = 0; @@ -36,7 +36,7 @@ module VX_scoreboard #( end else begin inuse_regs <= inuse_regs_n; end - deq_inuse_regs <= inuse_regs_n[instr_sched_if.wid_n]; + deq_inuse_regs <= inuse_regs_n[ibuffer_if.wid_n]; end reg [31:0] deadlock_ctr; @@ -46,10 +46,10 @@ module VX_scoreboard #( deadlock_ctr <= 0; end else begin `ifdef DBG_PRINT_PIPELINE - if (instr_sched_if.valid && ~instr_sched_if.ready) begin + if (ibuffer_if.valid && ~ibuffer_if.ready) begin $display("%t: *** core%0d-stall: wid=%0d, PC=%0h, rd=%0d, wb=%0d, inuse=%b%b%b%b", - $time, CORE_ID, instr_sched_if.wid, instr_sched_if.PC, instr_sched_if.rd, instr_sched_if.wb, - deq_inuse_regs[instr_sched_if.rd], deq_inuse_regs[instr_sched_if.rs1], deq_inuse_regs[instr_sched_if.rs2], deq_inuse_regs[instr_sched_if.rs3]); + $time, CORE_ID, ibuffer_if.wid, ibuffer_if.PC, ibuffer_if.rd, ibuffer_if.wb, + deq_inuse_regs[ibuffer_if.rd], deq_inuse_regs[ibuffer_if.rs1], deq_inuse_regs[ibuffer_if.rs2], deq_inuse_regs[ibuffer_if.rs3]); end `endif if (release_reg) begin @@ -57,12 +57,12 @@ module VX_scoreboard #( else $error("%t: *** core%0d: invalid writeback register: wid=%0d, PC=%0h, rd=%0d", $time, CORE_ID, writeback_if.wid, writeback_if.PC, writeback_if.rd); end - if (instr_sched_if.valid && ~instr_sched_if.ready) begin + if (ibuffer_if.valid && ~ibuffer_if.ready) begin deadlock_ctr <= deadlock_ctr + 1; assert(deadlock_ctr < deadlock_timeout) else $error("%t: *** core%0d-deadlock: wid=%0d, PC=%0h, rd=%0d, wb=%0d, inuse=%b%b%b%b", - $time, CORE_ID, instr_sched_if.wid, instr_sched_if.PC, instr_sched_if.rd, instr_sched_if.wb, - deq_inuse_regs[instr_sched_if.rd], deq_inuse_regs[instr_sched_if.rs1], deq_inuse_regs[instr_sched_if.rs2], deq_inuse_regs[instr_sched_if.rs3]); - end else if (instr_sched_if.valid && instr_sched_if.ready) begin + $time, CORE_ID, ibuffer_if.wid, ibuffer_if.PC, ibuffer_if.rd, ibuffer_if.wb, + deq_inuse_regs[ibuffer_if.rd], deq_inuse_regs[ibuffer_if.rs1], deq_inuse_regs[ibuffer_if.rs2], deq_inuse_regs[ibuffer_if.rs3]); + end else if (ibuffer_if.valid && ibuffer_if.ready) begin deadlock_ctr <= 0; end end diff --git a/hw/rtl/afu/vortex_afu.sv b/hw/rtl/afu/vortex_afu.sv index 42938737..a8aba5cf 100644 --- a/hw/rtl/afu/vortex_afu.sv +++ b/hw/rtl/afu/vortex_afu.sv @@ -534,7 +534,8 @@ VX_mem_arb #( .DATA_WIDTH (LMEM_LINE_WIDTH), .ADDR_WIDTH (LMEM_ADDR_WIDTH), .TAG_IN_WIDTH (AVS_REQ_TAGW), - .TYPE ("X") + .BUFFERED_REQ (1), + .BUFFERED_RSP (1) ) mem_arb ( .clk (clk), .reset (reset), diff --git a/hw/rtl/cache/VX_bank.v b/hw/rtl/cache/VX_bank.v index cc953f8c..ade74119 100644 --- a/hw/rtl/cache/VX_bank.v +++ b/hw/rtl/cache/VX_bank.v @@ -437,10 +437,12 @@ module VX_bank #( `UNUSED_PIN (enqueue_almfull), `UNUSED_PIN (enqueue_full), - // lookup - .lookup_ready (mrsq_pop), + // lookup .lookup_addr (lookup_addr), .lookup_match (mshr_pending), + + // fill update + .fill_update (mrsq_pop), // schedule .schedule (mshr_pop), diff --git a/hw/rtl/cache/VX_miss_resrv.v b/hw/rtl/cache/VX_miss_resrv.v index 6bf3aa8c..8644ba28 100644 --- a/hw/rtl/cache/VX_miss_resrv.v +++ b/hw/rtl/cache/VX_miss_resrv.v @@ -42,11 +42,13 @@ module VX_miss_resrv #( output wire enqueue_full, output wire enqueue_almfull, - // lookup - input wire lookup_ready, + // lookup input wire [`LINE_ADDR_WIDTH-1:0] lookup_addr, output wire lookup_match, + // fill update + input wire fill_update, + // schedule input wire schedule, output wire schedule_valid, @@ -74,8 +76,6 @@ module VX_miss_resrv #( assign valid_address_match[i] = valid_table[i] && (addr_table[i] == lookup_addr); end - assign lookup_match = (| valid_address_match); - wire push_new = enqueue && !enqueue_is_mshr; wire restore = enqueue && enqueue_is_mshr; @@ -93,10 +93,9 @@ module VX_miss_resrv #( used_r <= 0; alm_full_r <= 0; full_r <= 0; - end else begin + end else begin - // WARNING: lookup should happen enqueue for ready_table's correct update - if (lookup_ready) begin + if (fill_update) begin // unlock pending requests for scheduling ready_table <= ready_table | valid_address_match; end @@ -170,6 +169,7 @@ module VX_miss_resrv #( .dout(schedule_data) ); + assign lookup_match = (| valid_address_match); assign schedule_valid = ready_table[schedule_ptr]; assign schedule_addr = addr_table[schedule_ptr]; assign enqueue_almfull = alm_full_r; @@ -177,7 +177,7 @@ module VX_miss_resrv #( `ifdef DBG_PRINT_CACHE_MSHR always @(posedge clk) begin - if (lookup_ready || schedule || enqueue || dequeue) begin + if (fill_update || schedule || enqueue || dequeue) begin if (schedule) $display("%t: cache%0d:%0d mshr-schedule: addr%0d=%0h, wid=%0d, PC=%0h", $time, CACHE_ID, BANK_ID, schedule_ptr, `LINE_TO_BYTE_ADDR(schedule_addr, BANK_ID), deq_debug_wid, deq_debug_pc); if (enqueue) begin diff --git a/hw/rtl/interfaces/VX_instr_sched_if.v b/hw/rtl/interfaces/VX_ibuffer_if.v similarity index 89% rename from hw/rtl/interfaces/VX_instr_sched_if.v rename to hw/rtl/interfaces/VX_ibuffer_if.v index 13b59db1..30f93026 100644 --- a/hw/rtl/interfaces/VX_instr_sched_if.v +++ b/hw/rtl/interfaces/VX_ibuffer_if.v @@ -1,9 +1,9 @@ -`ifndef VX_INSTR_SCHED_IF -`define VX_INSTR_SCHED_IF +`ifndef VX_IBUFFER_IF +`define VX_IBUFFER_IF `include "VX_define.vh" -interface VX_instr_sched_if (); +interface VX_ibuffer_if (); wire valid; wire [`NW_BITS-1:0] wid; diff --git a/hw/syn/opae/vortex_afu.json b/hw/syn/opae/vortex_afu.json index 29bc25a9..8f47e292 100644 --- a/hw/syn/opae/vortex_afu.json +++ b/hw/syn/opae/vortex_afu.json @@ -2,8 +2,8 @@ "version": 1, "afu-image": { "power": 0, - "clock-frequency-high": "auto-210", - "clock-frequency-low": "auto-210", + "clock-frequency-high": "auto", + "clock-frequency-low": "auto", "cmd-mem-read": 1, "cmd-mem-write": 2, diff --git a/hw/syn/quartus/Makefile b/hw/syn/quartus/Makefile index 9cf2a79b..c9be9832 100644 --- a/hw/syn/quartus/Makefile +++ b/hw/syn/quartus/Makefile @@ -5,7 +5,7 @@ BUILDIR ?= build unittest: mkdir -p unittest/$(BUILDIR) cp unittest/Makefile unittest/$(BUILDIR) - $(MAKE) -C unittest/$(BUILDIR) clean && $(MAKE) -C unittest/$(BUILDIR) > unittest//$(BUILDIR)build.log 2>&1 & + $(MAKE) -C unittest/$(BUILDIR) clean && $(MAKE) -C unittest/$(BUILDIR) > unittest/$(BUILDIR)/build.log 2>&1 & pipeline: mkdir -p pipeline/$(BUILDIR) @@ -55,7 +55,7 @@ top8: top16: mkdir -p top16/$(BUILDIR) cp top16/Makefile top16/$(BUILDIR) - $(MAKE) -C top16/$(BUILDIR) clean && $(MAKE) -C top16/$(BUILDIR) > top16/$(BUILDIR)build.log 2>&1 & + $(MAKE) -C top16/$(BUILDIR) clean && $(MAKE) -C top16/$(BUILDIR) > top16/$(BUILDIR)/build.log 2>&1 & top32: mkdir -p top32/$(BUILDIR)