def instantiate(self, dram_wr_chn, noc_wr_chn, rd_chn, glb_depth, chn_per_word): self.dram_wr_chn = dram_wr_chn self.noc_wr_chn = noc_wr_chn self.rd_chn = rd_chn self.chn_per_word = chn_per_word self.name = 'psum_glb' self.stat_type = 'show' self.raw_stats = {'size': (glb_depth, chn_per_word), 'rd': 0, 'wr': 0} self.sram = SRAM(glb_depth, chn_per_word, nports=2, name=self.name) self.last_read = Channel(3, name='last_read') self.filter_size = (0, 0) self.fmap_sets = 0 self.fmap_per_iteration = 0 self.rd_set = 0 self.fmap_rd_idx = 0 self.iteration = 0 self.wr_set = 0 self.fmap_wr_idx = 0 self.wr_done = False
def instantiate(self, wr_chn, rd_chn, glb_depth, chn_per_word): self.wr_chn = wr_chn self.rd_chn = rd_chn self.chn_per_word = chn_per_word self.glb_depth = glb_depth self.name = 'ifmap_glb' self.stat_type = 'show' self.raw_stats = { 'size': (glb_depth, chn_per_word), 'ifmap_glb_rd': 0, 'ifmap_glb_wr': 0 } self.sram = SRAM(glb_depth, chn_per_word) self.last_read = Channel(3) self.image_size = (0, 0) self.filter_size = (0, 0) self.fmap_sets = 0 self.fmap_per_iteration = 0 self.curr_set = 0 self.fmap_idx = 0 self.iteration = 0 self.wr_done = False
def instantiate(self, wr_chn, rd_chn, glb_depth, chn_per_word): self.wr_chn = wr_chn self.rd_chn = rd_chn self.chn_per_word = chn_per_word self.name = 'ifmap_glb' self.stat_type = 'show' self.raw_stats = {'size' : (glb_depth, chn_per_word), 'rd': 0, 'wr': 0} self.sram = SRAM(glb_depth, chn_per_word, name=self.name) self.last_read = Channel(3, name='last_read') self.image_size = (0, 0) self.filter_size = (0, 0) self.fmap_sets = 0 self.full_fmap_sets = 0 self.fmap_per_iteration = 0 self.curr_set = 0 self.fmap_idx = 0 self.iteration = 0 self.tile_in = 0 self.tile_out = 0 self.wr_done = False self.task_done = True
def instantiate(self, dram_wr_chn, noc_wr_chn, rd_chn, glb_depth, block_size, num_nonzero): self.dram_wr_chn = dram_wr_chn self.noc_wr_chn = noc_wr_chn self.rd_chn = rd_chn self.name = 'psum_glb' self.block_size = block_size self.num_nonzero = num_nonzero self.stat_type = 'show' self.raw_stats = {'size': (glb_depth, block_size), 'rd': 0, 'wr': 0} self.sram = SRAM(glb_depth, block_size, nports=2, dtype=np.float16) self.last_read = Channel(3) self.filter_size = (0, 0) self.fmap_sets = 0 self.fmap_per_iteration = 0 self.rd_set = 0 self.fmap_rd_idx = 0 self.iteration = 0 self.wr_set = 0 self.fmap_wr_idx = 0 self.wr_done = False
def instantiate(self, wr_chn, rd_chn, glb_depth, block_size): self.wr_chn = wr_chn self.rd_chn = rd_chn self.name = 'weight_glb' self.filter_size = (0, 0) self.image_size = (0, 0) self.wr_done = False self.iteration = 0 self.addr = 0 self.in_chn = 0 self.out_chn = 0 #self.arr_y = 0 #self.out_sets = 0 self.block_size = block_size self.sram = SRAM(glb_depth, block_size) self.last_read = Channel(3) self.stat_type = 'show' self.raw_stats = {'size': (glb_depth, block_size), 'rd': 0, 'wr': 0}
def instantiate(self, wr_chn, rd_chn, arr_y, glb_depth, block_size, num_nonzero): self.wr_chn = wr_chn self.rd_chn = rd_chn self.arr_y = arr_y self.block_size = block_size self.num_nonzero = num_nonzero self.name = 'ifmap_glb' self.stat_type = 'show' self.raw_stats = {'size': (glb_depth, num_nonzero), 'rd': 0, 'wr': 0} self.sram = SRAM(glb_depth, num_nonzero * 3) self.last_read = Channel(3) self.glb_depth = glb_depth self.image_size = (0, 0) self.filter_size = (0, 0) self.fmap_sets = 0 self.fmap_per_iteration = 0 self.curr_set = 0 self.fmap_idx = 0 self.iteration = 0 self.wr_done = False # For managing convolution self.curr_x = 0 self.curr_y = 0 self.curr_chn = 0 self.request_idx = 0 self.send_idx = 0 #self.curr_filt_x = 0 #self.curr_filt_y = 0 self.ifmap_done = False self.needed_addr = 0 self.ready_to_output = False # ready to output a filter_size block of inputs self.curr_data = [0 for i in range(3 * num_nonzero)] self.data_idx = num_nonzero # block other operations while actively working through data
def instantiate(self, ifmap_wr_chn, ifmap_rd_chn, weights_wr_chn, weights_rd_chn,\ arr_y, ifmap_glb_depth, weights_glb_depth, \ block_size, num_nonzero): self.ifmap_wr_chn = ifmap_wr_chn self.ifmap_rd_chn = ifmap_rd_chn self.weights_wr_chn = weights_wr_chn self.weights_rd_chn = weights_rd_chn self.arr_y = arr_y self.block_size = block_size self.num_nonzero = num_nonzero self.name = 'ifmap_weights_glb' self.in_chn = 0 self.out_chn = 0 self.stat_type = 'show' self.raw_stats = { 'size': (ifmap_glb_depth, num_nonzero * 3), 'rd': 0, 'wr': 0 } self.isram = SRAM(ifmap_glb_depth, num_nonzero * 3, dtype=np.float16) self.ilast_read = Channel(3) self.ifmap_glb_depth = ifmap_glb_depth self.wsram = SRAM(weights_glb_depth, block_size, dtype=np.float16) self.wlast_read = Channel(1) # Channel depth of one here prevents SRAM reads from colliding # was having issues with a later read 'replacing' an earlier one # and thus getting the wrong data # having only one extant write on an SRAM at a time prevents this self.weights_glb_depth = weights_glb_depth # Channel to hold indices of weights that need to be sent # to NoC self.weights_to_send = Channel(3) self.image_size = (0, 0) self.filter_size = (0, 0) self.fmap_sets = 0 self.fmap_per_iteration = 0 self.curr_set = 0 self.fmap_idx = 0 self.iteration = 0 self.iwr_done = False self.wwr_done = False # For managing convolution self.curr_x = 0 self.curr_y = 0 self.curr_chn = 0 self.request_idx = 0 self.send_idx = 0 #self.curr_filt_x = 0 #self.curr_filt_y = 0 self.ifmap_done = False # for weights self.addr = 0 self.base_addr = 0 # to store values from self.weights_to_send self.base_addr_wo_chn = -1 # to keep track of current position within 3x3 filter # invalid weights and inputs to use at the end to flush out last outputs self.weights_to_flush = 0 self.inputs_to_flush = 0 self.needed_addr = 0 self.ready_to_output = False # ready to output a filter_size block of inputs self.curr_data = [0 for i in range(3 * num_nonzero)] self.curr_weights = [0 for i in range(block_size)] self.data_idx = num_nonzero # block other operations while actively working through data