Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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