Ejemplo n.º 1
0
    def write_measures(self, mode, correct_value, noise_margin, period):
        """ Measure statements for setup/hold with right phases. """

        if correct_value == vdd:
            max_or_min = "MAX"
            rise_or_fall = "RISE"
        else:
            max_or_min = "MIN"
            rise_or_fall = "FALL"

        incorrect_value = stimuli.get_inverse_value(correct_value)

        self.sf.write("* Measure statements for pass/fail verification\n")
        self.sf.write(".IC v({0})={1}\n".format(self.output_name,
                                                incorrect_value))
        #self.sf.write(".MEASURE TRAN {0}VOUT {0} v({1}) GOAL={2}\n".format(max_or_min, output_name, noise_margin))
        # above is the old cmd for hspice, below is the one work for both
        self.sf.write(
            ".MEASURE TRAN {0}VOUT {0} v({1}) from ={2}n to ={3}n\n".format(
                max_or_min, self.output_name, 1.5 * period, 2 * period))
        self.sf.write("\n")
Ejemplo n.º 2
0
    def write_data(self, mode, target_time, correct_value):
        """Create the data signals for setup/hold analysis. First period is to
        initialize it to the opposite polarity. Second period is used for
        characterization.

        """
        self.sf.write("\n* Generation of the data and clk signals\n")
        incorrect_value = stimuli.get_inverse_value(correct_value)
        if mode=="HOLD":
            init_value = incorrect_value
            start_value = correct_value
            end_value = incorrect_value
        else:
            init_value = incorrect_value
            start_value = incorrect_value
            end_value = correct_value

        stimuli.gen_pwl(stim_file=self.sf,
                        sig_name="data",
                        clk_times=[0, self.period, target_time],
                        data_values=[init_value, start_value, end_value],
                        period=target_time,
                        slew=self.constrained_input_slew,
                        setup=0)        
Ejemplo n.º 3
0
    def write_data(self, mode, period, target_time, correct_value):
        """ Create the buffered data signals for setup/hold analysis """
        self.sf.write("* Buffer for the DATA signal\n")
        stimuli.add_buffer(stim_file=self.sf,
                           buffer_name="buffer",
                           signal_list=["DATA"])
        self.sf.write("* Generation of the data and clk signals\n")
        incorrect_value = stimuli.get_inverse_value(correct_value)
        if mode == "HOLD":
            start_value = correct_value
            end_value = incorrect_value
        else:
            start_value = incorrect_value
            end_value = correct_value

        stimuli.gen_pulse(stim_file=self.sf,
                          sig_name="DATA",
                          v1=start_value,
                          v2=end_value,
                          offset=target_time,
                          period=2 * period,
                          t_rise=tech.spice["rise_time"],
                          t_fall=tech.spice["fall_time"])
        self.sf.write("\n")