欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STIL中的Spec

程序员文章站 2024-02-09 18:14:40
...

Spec的意思是:我们可以定义多组值,在执行的时候来决定到底需要使用哪一组。

Spec tmode_spec {
    Category tmode {
        tplh { Typ ’13.00ns’;Max ’12.00ns’; } #定义了两组,一个是Type,一个是Max
        tphl { Typ ’13.00ns’;Max ’12.00ns’; }
        tpzl { Typ ’41.00ns’;Max ’40.00ns’; }
        tpzh { Typ ’41.00ns’;Max ’40.00ns’; }
        tplz { Typ ’26.00ns’;Max ’25.00ns’; }
        tphz { Typ ’26.00ns’;Max ’25.00ns’; }
        strobe_width = ’20ns’; #像这样的,表示Type和Max是一样的值
        tperiod = ’500ns’;
    }
}

Selector tmode_typ {
    tplh Typ; #tplh使用Type的值,也就是13ns
    tphl Typ;
    tpzl Typ;
    tpzh Typ;
    tplz Typ;
    tphz Typ;
}

Timing to_specs {
    WaveformTable pulsed_oe {
        Period ’tperiod’;
        Waveforms {
            DIR { 01 { ’0ns’ D/U; }} #D/U就是ForceDown/ForceUp,两者可以互换
            #定义了以event_label,但是使用范围只能是当前WaveformTable
            OE_ { 01 { ’0ns’ U; OE_MARK: ’200ns’ D/U; 
                               OE_CLOSE: ’OE_MARK+100ns’ U; }}
            BUSES{ 01 { ’10ns’ D/U; }
                    #L的第三个event的时间点是’OE_MARK+tpzl’,就是200ns+41ns
                    #L的第四个event的时间点是’@+strobe_width’
                    #这里的@的意思是它前面的timed event,即OE_MARK+tpzl=241nS
                    #所以第四个event的时间点是:241ns+20ns
                    L { ’0ns’ Z;’0ns’ X; ’OE_MARK+tpzl’ l; ’@+strobe_width’ X;} 
                    H { ’0ns’ Z;’0ns’ X; ’OE_MARK+tpzh’ h; ’@+strobe_width’ X;}
                    D { ’0ns’ Z;’0ns’ X; ’OE_CLOSE+tplz’ t;’@+strobe_width’ X;}
                    U { ’0ns’ Z;’0ns’ X; ’OE_CLOSE+tphz’ t;’@+strobe_width’ X;}
                    X { ’0ns’ Z;’0ns’ X; }
            }
        } // end Waveforms
    } // end WaveformTable pulsed_oe
    
    WaveformTable const_oe {
        Period ’tperiod’;
        Waveforms {
            DIR { 01 { ’0ns’ D/U; }}
            OE_ { 01 { ’0ns’ D; ’tperiod-strobe_width’ U;}}
            BUSES{ 01 { IN_MARK: ’tperiod/10’ D/U; }
                    L { ’0ns’ Z;’0ns’ X; ’IN_MARK+tphl’ l; ’@+strobe_width’ X;}
                    H { ’0ns’ Z;’0ns’ X; ’IN_MARK+tplh’ h; ’@+strobe_width’ X;}
                    X { ’0ns’ Z;’0ns’ X; }
            }
        } // end Waveforms
    } // end WaveformTable const_oe
} // end Timing to_specs

PatternBurst spec_check_burst {
    SignalGroups more;
    PatList { spec_check; }
} //end PatternBurst spec_check_burst

PatternExec {
    Timing to_specs;
    Selector tmode_typ; #使用到的Spec中的哪一组
    Category tmode; #使用到的spec
    PatternBurst spec_check_burst;
} //end PatternExec