def __init__(self, temp_db, lib_name, params, used_names, **kwargs): # type: (TemplateDB, str, Dict[str, Any], Set[str], **kwargs) -> None ResArrayBase.__init__(self, temp_db, lib_name, params, used_names, **kwargs) self._sch_params = None
def draw_layout(self): h_unit = self.params['h_unit'] sub_w = self.params['sub_w'] sub_lch = self.params['sub_lch'] sub_type = self.params['sub_type'] threshold = self.params['threshold'] top_layer = self.params['top_layer'] in_tr_info = self.params['in_tr_info'] out_tr_info = self.params['out_tr_info'] vdd_tr_info = self.params['vdd_tr_info'] res_type = self.params['res_type'] sub_tr_w = self.params['sub_tr_w'] sub_tids = self.params['sub_tids'] end_mode = self.params['end_mode'] show_pins = self.params['show_pins'] # compute substrate contact height, subtract from h_unit bot_end_mode, top_end_mode = self.get_sub_end_modes(end_mode) h_subb = self.get_substrate_height(self.grid, top_layer, sub_lch, sub_w, sub_type, threshold, end_mode=bot_end_mode, is_passive=True) h_subt = self.get_substrate_height(self.grid, top_layer, sub_lch, sub_w, sub_type, threshold, end_mode=top_end_mode, is_passive=True) hm_layer = ResArrayBase.get_port_layer_id(self.grid.tech_info) + 2 tr_off = self.grid.find_next_track(hm_layer, h_subb, half_track=True, mode=1, unit_mode=True) params = self.params.copy() params['h_unit'] = h_unit - h_subb - h_subt params['in_tr_info'] = (in_tr_info[0] - tr_off, in_tr_info[1] - tr_off, in_tr_info[2]) params['out_tr_info'] = (out_tr_info[0] - tr_off, out_tr_info[1] - tr_off, out_tr_info[2]) if vdd_tr_info is not None: new_info_list = [] for tr_info in vdd_tr_info: new_info_list.append((tr_info[0] - tr_off, tr_info[1])) params['vdd_tr_info'] = new_info_list self.draw_layout_helper(HighPassDiffCore, params, sub_lch, sub_w, sub_tr_w, sub_type, threshold, show_pins, end_mode=end_mode, is_passive=True, sub_tids=sub_tids, res_type=res_type) # do max space fill for lay_id in range(1, hm_layer): self.do_max_space_fill(lay_id, fill_pitch=2) self.fill_box = self.bound_box