- added model
git-svn-id: http://moon:8086/svn/vhdl/trunk@1291 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
SET sdffile_suffix .sdf
|
||||
SET use_global_timing_dir false
|
||||
SET timingfile_dir /user/USERNAME/CreateSDF
|
||||
SET timingfile_suffix .ftm
|
||||
SET time_scale 1ns
|
||||
SET local_path .
|
||||
SET vendor MODELSIM_HOME
|
||||
SET diagnostics on
|
||||
SET vhdl_file testbench.vhd
|
||||
SET lwb false
|
||||
@@ -0,0 +1,462 @@
|
||||
#!/usr/local/bin/perl
|
||||
#
|
||||
# mk_sdf : Perl replacement for C mk_sdf
|
||||
#
|
||||
# Copyright (C) 2000, 1999 Free Model Foundry; http:/vhdl.org/fmf/
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# Author : R. Munden
|
||||
# Date : 20001115
|
||||
# Version : 2.0.4
|
||||
#
|
||||
# Revision history:
|
||||
# 2.0: 19990702
|
||||
# o Intial release of perl version
|
||||
# 2.0.1: 19990722
|
||||
# o fixed problem with . in path for TimingModels
|
||||
# 2.0.2: 20000616
|
||||
# o changed instance search to work with Mentor
|
||||
# 2.0.3: 20001115
|
||||
# o changed to parse ":" without leading space
|
||||
# o fixed problem with . in path for TimingModels again
|
||||
# 2.0.4: 20030405
|
||||
# o chaged SDF version to 3.0
|
||||
#
|
||||
#################################################################
|
||||
#
|
||||
# command line arguments:
|
||||
|
||||
# ARGV[0] - name of VHDL netlist
|
||||
|
||||
# global variables:
|
||||
|
||||
# %component_list - list of instance names by component name
|
||||
# %instance_isin - list architectures by instances contained therein
|
||||
# %instance_comp - list of component names by instance name
|
||||
# %comp_lib - library each component (by name) is configured to
|
||||
# @instance_list - array of all instance names in design in order found
|
||||
|
||||
$version = "2.0.4";
|
||||
$design_name = '';
|
||||
$timing_dir = '';
|
||||
$diags = "off";
|
||||
|
||||
%keywords = (architecture => 1,
|
||||
component => 1,
|
||||
timingmodel => 1);
|
||||
|
||||
# INPUT files
|
||||
$CMD = "mk_sdf.cmd";
|
||||
$VHD = ''; # name of VHDL netlist
|
||||
|
||||
# OUTPUT files
|
||||
$RFV = "/tmp/short.vhd"; # reformatted VHDL
|
||||
$sdf_file = ''; # name of SDF file
|
||||
|
||||
&read_cmd_file;
|
||||
&get_names;
|
||||
&reformat;
|
||||
|
||||
open INPUT, $RFV;
|
||||
@lines = <INPUT>;
|
||||
close INPUT;
|
||||
|
||||
$current_architecture = "";
|
||||
|
||||
foreach $line (@lines)
|
||||
{
|
||||
@words = split / /, $line;
|
||||
foreach $word (@words)
|
||||
{
|
||||
$keywords{$word} == "1" and do { &$word(@words);};
|
||||
if ($component_list{$word})
|
||||
{
|
||||
$line =~ /(.+) : $word/ and do {
|
||||
if ($1 !~ /for/) { # instantiation found
|
||||
$component_list{$word} = $component_list{$word} . $1;
|
||||
push (@instance_list, $1);
|
||||
$instance_name = $1;
|
||||
}
|
||||
};
|
||||
$instance_comp{$1} = $word;
|
||||
$instance_isin{$1} = $current_architecture;
|
||||
if ( $diags ne off ) {
|
||||
print "reading instance $instance_name: $word in $current_architecture\n";
|
||||
}
|
||||
$line =~ /for all : $word use entity (.+)/ and do
|
||||
{
|
||||
@config = split(/\./, $1);
|
||||
$comp_lib{$word} = $config[0];};
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( $diags ne off ) {
|
||||
print "finished with netlist\n\n";
|
||||
}
|
||||
|
||||
&begin_sdf;
|
||||
&build_paths;
|
||||
&close_sdf;
|
||||
`rm $RFV`;
|
||||
|
||||
print "$time\n";
|
||||
|
||||
sub architecture
|
||||
{
|
||||
$current_architecture = $_[3];
|
||||
push (@architectures, $current_architecture);
|
||||
}
|
||||
|
||||
sub component
|
||||
{
|
||||
if ($_[0] ne "end")
|
||||
{
|
||||
$name = $_[1];
|
||||
$arch_list{$current_architecture} =
|
||||
$arch_list{$current_architecture} . " " . $name;
|
||||
unless ($component_list{$name}) { $component_list{$name} = " ";}
|
||||
}
|
||||
}
|
||||
|
||||
sub timingmodel
|
||||
{
|
||||
$line =~ /timingmodel => \"(.+)\"/ and do {
|
||||
$model = $1;
|
||||
$model_name{$instance_name} = $model;
|
||||
};
|
||||
}
|
||||
|
||||
sub begin_sdf
|
||||
{
|
||||
if ( $diags ne off ) {
|
||||
print "writing SDF boilerplate\n";
|
||||
}
|
||||
$time = localtime;
|
||||
if (open(SDF, ">$sdf_file") !=1) { die "can't open $sdf_file\n";}
|
||||
print "Opening $sdf_file\n";
|
||||
print SDF "(DELAYFILE\n";
|
||||
print SDF " (SDFVERSION \"3.0\")\n";
|
||||
print SDF " (DESIGN \"$design_name\")\n";
|
||||
print SDF " (DATE \"$time\")\n";
|
||||
print SDF " (VENDOR \"Free Model Foundry\")\n";
|
||||
print SDF " (PROGRAM \"SDF timing utility(tm)\")\n";
|
||||
print SDF " (VERSION \"$version\")\n";
|
||||
print SDF " (DIVIDER /)\n";
|
||||
print SDF " (VOLTAGE)\n";
|
||||
print SDF " (PROCESS)\n";
|
||||
print SDF " (TEMPERATURE)\n";
|
||||
print SDF " (TIMESCALE 1ns)\n";
|
||||
}
|
||||
|
||||
sub build_paths
|
||||
{
|
||||
foreach $instance_list (@instance_list)
|
||||
{
|
||||
@instance = $instance_list;
|
||||
foreach $instance (@instance)
|
||||
{
|
||||
if ( $diags ne off ) {
|
||||
print "working on $instance\n";
|
||||
}
|
||||
if ($gtd =~ /true/i) {
|
||||
$path = "$lib_path{$comp_lib{$instance_comp{$instance}}}/$timing_dir";
|
||||
# $path = "$lib_path{$comp_lib{$instance_comp{$instance}}}./$timing_dir";
|
||||
} else {
|
||||
$path = "$lib_path{$comp_lib{$instance_comp{$instance}}}/$timing_dir";
|
||||
}
|
||||
$timing_file = "$path/$instance_comp{$instance}_vhd.ftm";
|
||||
$timing_file =~ s/\s//;
|
||||
if ( $diags ne off ) {
|
||||
print "$instance should be in $timing_file\n";
|
||||
}
|
||||
if (-e $timing_file) {
|
||||
if ($model_name{$instance} ne "") {
|
||||
print SDF " (CELL\n";
|
||||
print SDF " (CELLTYPE \"$instance_comp{$instance}\")\n";
|
||||
$inst = $instance;
|
||||
$full_inst = $instance;
|
||||
while ($component_list{$instance_isin{$inst}}) {
|
||||
$full_inst = "$component_list{$instance_isin{$inst}}/$full_inst";
|
||||
$full_inst =~ s/\s+//;
|
||||
$inst = $component_list{$instance_isin{$inst}};
|
||||
$inst =~ s/\s+//;
|
||||
# print SDF " (INSTANCE $component_list{$instance_isin{$instance}}/$instance)\n";
|
||||
}
|
||||
print SDF " (INSTANCE $full_inst)\n";
|
||||
&add_timing;
|
||||
}
|
||||
} else {
|
||||
if ( $diags ne off ) {
|
||||
print "$timing_file not found!\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub add_timing
|
||||
{
|
||||
$timing_found = "false";
|
||||
$part_found = "false";
|
||||
# unless ($lib_path{$comp_lib{$instance_comp{$instance}}})
|
||||
unless ($timing_file)
|
||||
{
|
||||
print "path to $timing_file not found\n";
|
||||
exit;
|
||||
}
|
||||
if ($gtd =~ /true/i) {
|
||||
$path = "$lib_path{$comp_lib{$instance_comp{$instance}}}/$timing_dir";
|
||||
# $path = "$lib_path{$comp_lib{$instance_comp{$instance}}}./$timing_dir";
|
||||
} else {
|
||||
$path = "$lib_path{$comp_lib{$instance_comp{$instance}}}/$timing_dir";
|
||||
}
|
||||
$timing_file = "$path/$instance_comp{$instance}_vhd.ftm";
|
||||
if (open(TF, "<$timing_file") !=1) { warn "can't open $timing_file\n"; }
|
||||
if ( $diags ne off ) {
|
||||
print "reading $timing_file\n";
|
||||
}
|
||||
$section_found = "false";
|
||||
while (<TF>)
|
||||
{
|
||||
next unless (/$model_name{$instance}/i || ($part_found eq "true"));
|
||||
$part_found = "true";
|
||||
if ( $diags ne off ) {
|
||||
print "found entry for $model_name{$instance}\n";
|
||||
}
|
||||
next unless (/<timing>/i || ($timing_found eq "true"));
|
||||
$timing_found = "true";
|
||||
next if (/<timing>/i);
|
||||
if (/<\/timing>/i)
|
||||
{
|
||||
print SDF " )\n";
|
||||
$timing_found = "false";
|
||||
$part_found = "false";
|
||||
$section_found = "true";
|
||||
last;
|
||||
} else {
|
||||
if (/%LABEL%/)
|
||||
{
|
||||
if ($component_list{$instance_isin{$instance}})
|
||||
{
|
||||
$_ =~ s/%LABEL%/$component_list{$instance_isin{$instance}}\/$instance/;
|
||||
} else {
|
||||
$_ =~ s/%LABEL%/$instance/;
|
||||
}
|
||||
}
|
||||
print SDF $_;
|
||||
}
|
||||
}
|
||||
unless ($section_found eq "true") {
|
||||
print "$model_name not found\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub close_sdf
|
||||
{
|
||||
print SDF ")\n";
|
||||
print "closing $sdf_file\n";
|
||||
close(SDF);
|
||||
}
|
||||
|
||||
# read mk_sdf.cmd
|
||||
|
||||
sub read_cmd_file {
|
||||
|
||||
if (open(CMD, $CMD) !=1) { die "can't open $CMD\n"; }
|
||||
while (<CMD>) {
|
||||
chop;
|
||||
@fields = '';
|
||||
@fields = split;
|
||||
unless ($fields[0] =~ /#/) {
|
||||
if ($fields[0] =~ /SET/) {
|
||||
if ($fields[1] =~ /vhdl_file/) {$VHD = $fields[2]}
|
||||
if ($fields[1] =~ /sdffile_suffix/) {$suffix = $fields[2]}
|
||||
if ($fields[1] =~ /use_global_timing_dir/) {$gtd = $fields[2]}
|
||||
if ($fields[1] =~ /timingfile_dir/) {$timing_dir = $fields[2]}
|
||||
if ($fields[1] =~ /vendor/) {$vendor = $fields[2]}
|
||||
if ($fields[1] =~ /diagnostics/) {$diags = $fields[2]}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( $diags ne off ) {
|
||||
print "\nmk_sdf diagnostics on\n\n";
|
||||
print "vhdl_file $VHD\n";
|
||||
print "sdffile_suffix $suffix\n";
|
||||
print "use_global_timing_dir $gtd\n";
|
||||
print "timingfile_dir $timing_dir\n";
|
||||
print "vendor $vendor\n\n";
|
||||
}
|
||||
}
|
||||
#
|
||||
|
||||
# get name of netlist
|
||||
|
||||
sub get_names
|
||||
{
|
||||
|
||||
if ($ARGV[0] ne "") { $VHD = "$ARGV[0]"; }
|
||||
|
||||
if ($ARGV[1] eq "")
|
||||
{
|
||||
@name = split(/\./,$VHD);
|
||||
$design_name = $name[0];
|
||||
} else {
|
||||
$design_name = "$ARGV[1]";
|
||||
}
|
||||
$sdf_file = $design_name . $suffix;
|
||||
if ($gtd =~ /false/i)
|
||||
{
|
||||
if ($vendor =~ /modeltech/i) { &read_mti; }
|
||||
if ($vendor =~ /cadence/i) { &read_cds; }
|
||||
}
|
||||
if ( $diags ne off ) {
|
||||
print "design name is $design_name\n\n";
|
||||
}
|
||||
}
|
||||
#
|
||||
################################################################
|
||||
#
|
||||
|
||||
# reformat netlist
|
||||
|
||||
sub reformat
|
||||
{
|
||||
$entfound = false;
|
||||
|
||||
if (open(VHD, $VHD) !=1) { die "can't open $VHD\n"; }
|
||||
if (open(OUT, ">$RFV") !=1) { die "can't open $OUT\n"; }
|
||||
|
||||
while (<VHD>) {
|
||||
if (/^--|library|package/i) { next }
|
||||
if (/--/) { # strip embeded comments
|
||||
@line = split("--");
|
||||
$_ = $line[0];
|
||||
}
|
||||
s/:/ : /g;
|
||||
s/;/ ;/g;
|
||||
s/\s+/ /g; # reduces spaces and tabs
|
||||
s/^\s//g; # no leading spaces
|
||||
if (/entity/i) {
|
||||
$entfound = "true";
|
||||
}
|
||||
chomp;
|
||||
if ( $entfound eq true ) {
|
||||
print OUT lc($_);
|
||||
if (/;|is|begin/i) { print OUT "\n"; }
|
||||
}
|
||||
}
|
||||
|
||||
close OUT;
|
||||
if ( $diags ne off ) {
|
||||
print "reformatted netlist written to $RFV\n\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# read ModelTech's modelsim.ini file
|
||||
|
||||
sub read_mti
|
||||
{
|
||||
$lib_found = "false";
|
||||
if ($ENV{MODELPATH})
|
||||
{
|
||||
$ini_file = "$ENV{MODELPATH}/../modelsim.ini";
|
||||
if (open(INI, "$ini_file") !=1) { die "can't open $ini_file\n";}
|
||||
if ( $diags ne off ) {
|
||||
print "reading $ini_file\n\n";
|
||||
}
|
||||
while (<INI>)
|
||||
{
|
||||
if ($lib_found eq "true")
|
||||
{
|
||||
chomp;
|
||||
if (/\[.+\]/) { last; }
|
||||
s/\s+//;
|
||||
@lib_line = split(/=/);
|
||||
$lib_line[1] =~ s/\/work//;
|
||||
$lib_path{$lib_line[0]} = $lib_line[1];
|
||||
} elsif (/\[Library\]/i)
|
||||
{
|
||||
$lib_found = "true";
|
||||
next;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print "\$MODELPATH environment variable not found\n";
|
||||
}
|
||||
$lib_found = "false";
|
||||
if (-e "modelsim.ini")
|
||||
{
|
||||
$ini_file = "modelsim.ini";
|
||||
if (open(INI, "$ini_file") !=1) { die "can't open $ini_file\n";}
|
||||
if ( $diags ne off ) {
|
||||
print "reading $ini_file\n\n";
|
||||
}
|
||||
while (<INI>)
|
||||
{
|
||||
if ($lib_found eq "true")
|
||||
{
|
||||
chomp;
|
||||
if (/\[.+\]/) { last; }
|
||||
s/\s+//;
|
||||
@lib_line = split(/=/);
|
||||
$lib_line[1] =~ s/\/work//;
|
||||
$lib_path{$lib_line[0]} = $lib_line[1];
|
||||
} elsif (/\[Library\]/i)
|
||||
{
|
||||
$lib_found = "true";
|
||||
next;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print "local modelsim.ini file not found, may not be needed\n";
|
||||
}
|
||||
}
|
||||
|
||||
# read Cadence's cds.lib file
|
||||
|
||||
sub read_cds
|
||||
{
|
||||
if ($ENV{CDS_VHDL})
|
||||
{
|
||||
$ini_file = "$ENV{CDS_VHDL}/files/cds.lib";
|
||||
if (open(INI, "$ini_file") !=1) { die "can't open $ini_file\n";}
|
||||
if ( $diags ne off ) {
|
||||
print "reading $ini_file\n\n";
|
||||
}
|
||||
while (<INI>)
|
||||
{
|
||||
chomp;
|
||||
s/\s+/ /;
|
||||
if (/define/i)
|
||||
{
|
||||
@lib_line = split;
|
||||
$lib_path{$lib_line[1]} = $lib_line[2];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print "\$CDS_VHDL environment variable not found\n";
|
||||
}
|
||||
if (-e "cds.lib")
|
||||
{
|
||||
$ini_file = "cds.lib";
|
||||
if (open(INI, "$ini_file") !=1) { die "can't open $ini_file\n";}
|
||||
if ( $diags ne off ) {
|
||||
print "reading $ini_file\n\n";
|
||||
}
|
||||
while (<INI>)
|
||||
{
|
||||
chomp;
|
||||
s/\s+/ /;
|
||||
if (/define/i)
|
||||
{
|
||||
@lib_line = split;
|
||||
$lib_path{$lib_line[1]} = $lib_line[2];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print "local cds.lib file not found, may not be needed\n";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
<!DOCTYPE FTML SYSTEM "ftml.dtd">
|
||||
<FTML><HEAD><TITLE>FMF Timing for testbench Parts</TITLE>
|
||||
<BODY>
|
||||
<REVISION.HISTORY>
|
||||
version: | author: | mod date: | changes made:
|
||||
V1.0 VHD2FTM 03 July 11 Initial release
|
||||
</REVISION.HISTORY>
|
||||
<TIMESCALE>1ns</TIMESCALE>
|
||||
<MODEL>am29lv640m
|
||||
<FMFTIME>
|
||||
MY_MEM<SOURCE></SOURCE>
|
||||
AM29LV640MH90R<SOURCE></SOURCE>
|
||||
AM29LV640ML90R<SOURCE></SOURCE>
|
||||
<COMMENT></COMMENT>
|
||||
<TIMING>
|
||||
(DELAY (ABSOLUTE
|
||||
(IOPATH A0 DQ0 (90:90:90) (90:90:90))
|
||||
(IOPATH A0 DQ1 (25:25:25) (25:25:25))
|
||||
(IOPATH CENeg DQ0 (85:85:85) (85:85:85) (11:11:11) (85:85:85) (11:11:11) (85:85:85))
|
||||
(IOPATH OENeg DQ0 (20:20:20) (20:20:20) (11:11:11) (20:20:20) (11:11:11) (20:20:20))
|
||||
(IOPATH RESETNeg DQ0 () () (0:0:0) () (0:0:0) ())
|
||||
(IOPATH CENeg RY (0) (90))
|
||||
(IOPATH WENeg RY (0) (90))
|
||||
))
|
||||
(TIMINGCHECK
|
||||
(SETUP A0 CENeg (0:0:0))
|
||||
(SETUP A0 OENeg (15:15:15))
|
||||
(SETUP DQ0 CENeg (45:45:45))
|
||||
(HOLD CENeg RESETNeg (50:50:50))
|
||||
(HOLD OENeg WENeg (0:0:0))
|
||||
(HOLD A0 CENeg (45:45:45))
|
||||
(HOLD A0 OENeg (0:0:0))
|
||||
(HOLD DQ0 CENeg (0:0:0))
|
||||
(HOLD WENeg OENeg (0:0:0))
|
||||
(WIDTH (negedge RESETNeg) (500:500:500))
|
||||
(WIDTH (posedge OENeg) (20:20:20))
|
||||
(WIDTH (negedge WENeg) (35:35:35))
|
||||
(WIDTH (posedge WENeg) (30:30:30))
|
||||
(WIDTH (negedge CENeg) (45:45:45))
|
||||
(WIDTH (posedge CENeg) (30:30:30))
|
||||
(WIDTH (negedge A0) (90:90:90))
|
||||
))
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/WBPB) (DELAY (ABSOLUTE (DEVICE(11000:11000:11000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/POB) (DELAY (ABSOLUTE (DEVICE(100000:100000:100000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/SEO) (DELAY (ABSOLUTE (DEVICE(500000000:500000000:500000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/HANG) (DELAY (ABSOLUTE (DEVICE(400000000:400000000:400000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/START_T1) (DELAY (ABSOLUTE (DEVICE(5000:5000:20000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/CTMOUT) (DELAY (ABSOLUTE (DEVICE(50000:50000:50000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/READY) (DELAY (ABSOLUTE (DEVICE(20000:20000:20000) ) ) )
|
||||
</TIMING></FMFTIME>
|
||||
<FMFTIME>
|
||||
AM29LV640MH101<SOURCE></SOURCE>
|
||||
AM29LV640ML101<SOURCE></SOURCE>
|
||||
AM29LV640MH101R<SOURCE></SOURCE>
|
||||
AM29LV640ML101R<SOURCE></SOURCE>
|
||||
<COMMENT></COMMENT>
|
||||
<TIMING>
|
||||
(DELAY (ABSOLUTE
|
||||
(IOPATH A0 DQ0 (100:100:100) (100:100:100))
|
||||
(IOPATH A0 DQ1 (30:30:30) (30:30:30))
|
||||
(IOPATH CENeg DQ0 (95:95:95) (95:95:95) (11:11:11) (95:95:95) (11:11:11) (95:95:95))
|
||||
(IOPATH OENeg DQ0 (25:25:25) (25:25:25) (11:11:11) (25:25:25) (11:11:11) (25:25:25))
|
||||
(IOPATH RESETNeg DQ0 () () (0:0:0) () (0:0:0) ())
|
||||
(IOPATH CENeg RY (0) (100))
|
||||
(IOPATH WENeg RY (0) (100))
|
||||
))
|
||||
(TIMINGCHECK
|
||||
(SETUP A0 CENeg (0:0:0))
|
||||
(SETUP A0 OENeg (15:15:15))
|
||||
(SETUP DQ0 CENeg (45:45:45))
|
||||
(HOLD CENeg RESETNeg (50:50:50))
|
||||
(HOLD OENeg WENeg (0:0:0))
|
||||
(HOLD A0 CENeg (45:45:45))
|
||||
(HOLD A0 OENeg (0:0:0))
|
||||
(HOLD DQ0 CENeg (0:0:0))
|
||||
(HOLD WENeg OENeg (0:0:0))
|
||||
(WIDTH (negedge RESETNeg) (500:500:500))
|
||||
(WIDTH (posedge OENeg) (20:20:20))
|
||||
(WIDTH (negedge WENeg) (35:35:35))
|
||||
(WIDTH (posedge WENeg) (30:30:30))
|
||||
(WIDTH (negedge CENeg) (45:45:45))
|
||||
(WIDTH (posedge CENeg) (30:30:30))
|
||||
(WIDTH (negedge A0) (100:100:100))
|
||||
))
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/WBPB) (DELAY (ABSOLUTE (DEVICE(11000:11000:11000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/POB) (DELAY (ABSOLUTE (DEVICE(100000:100000:100000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/SEO) (DELAY (ABSOLUTE (DEVICE(500000000:500000000:500000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/HANG) (DELAY (ABSOLUTE (DEVICE(400000000:400000000:400000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/START_T1) (DELAY (ABSOLUTE (DEVICE(5000:5000:20000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/CTMOUT) (DELAY (ABSOLUTE (DEVICE(50000:50000:50000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/READY) (DELAY (ABSOLUTE (DEVICE(20000:20000:20000) ) ) )
|
||||
</TIMING></FMFTIME>
|
||||
<FMFTIME>
|
||||
AM29LV640MH112<SOURCE></SOURCE>
|
||||
AM29LV640ML112<SOURCE></SOURCE>
|
||||
AM29LV640MH112R<SOURCE></SOURCE>
|
||||
AM29LV640ML112R<SOURCE></SOURCE>
|
||||
<COMMENT></COMMENT>
|
||||
<TIMING>
|
||||
(DELAY (ABSOLUTE
|
||||
(IOPATH A0 DQ0 (110:110:110) (110:110:110))
|
||||
(IOPATH A0 DQ1 (40:40:40) (40:40:40))
|
||||
(IOPATH CENeg DQ0 (105:105:105) (105:105:105) (11:11:11) (105:105:105) (11:11:11) (105:105:105))
|
||||
(IOPATH OENeg DQ0 (35:35:35) (35:35:35) (11:11:11) (35:35:35) (11:11:11) (35:35:35))
|
||||
(IOPATH RESETNeg DQ0 () () (0:0:0) () (0:0:0) ())
|
||||
(IOPATH CENeg RY (0) (110))
|
||||
(IOPATH WENeg RY (0) (110))
|
||||
))
|
||||
(TIMINGCHECK
|
||||
(SETUP A0 CENeg (0:0:0))
|
||||
(SETUP A0 OENeg (15:15:15))
|
||||
(SETUP DQ0 CENeg (45:45:45))
|
||||
(HOLD CENeg RESETNeg (50:50:50))
|
||||
(HOLD OENeg WENeg (0:0:0))
|
||||
(HOLD A0 CENeg (45:45:45))
|
||||
(HOLD A0 OENeg (0:0:0))
|
||||
(HOLD DQ0 CENeg (0:0:0))
|
||||
(HOLD WENeg OENeg (0:0:0))
|
||||
(WIDTH (negedge RESETNeg) (500:500:500))
|
||||
(WIDTH (posedge OENeg) (20:20:20))
|
||||
(WIDTH (negedge WENeg) (35:35:35))
|
||||
(WIDTH (posedge WENeg) (30:30:30))
|
||||
(WIDTH (negedge CENeg) (45:45:45))
|
||||
(WIDTH (posedge CENeg) (30:30:30))
|
||||
(WIDTH (negedge A0) (110:110:110))
|
||||
))
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/WBPB) (DELAY (ABSOLUTE (DEVICE(11000:11000:11000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/POB) (DELAY (ABSOLUTE (DEVICE(100000:100000:100000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/SEO) (DELAY (ABSOLUTE (DEVICE(500000000:500000000:500000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/HANG) (DELAY (ABSOLUTE (DEVICE(400000000:400000000:400000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/START_T1) (DELAY (ABSOLUTE (DEVICE(5000:5000:20000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/CTMOUT) (DELAY (ABSOLUTE (DEVICE(50000:50000:50000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/READY) (DELAY (ABSOLUTE (DEVICE(20000:20000:20000) ) ) )
|
||||
</TIMING></FMFTIME>
|
||||
<FMFTIME>
|
||||
AM29LV640MH120<SOURCE></SOURCE>
|
||||
AM29LV640ML120<SOURCE></SOURCE>
|
||||
AM29LV640MH120R<SOURCE></SOURCE>
|
||||
AM29LV640ML120R<SOURCE></SOURCE>
|
||||
<COMMENT></COMMENT>
|
||||
<TIMING>
|
||||
(DELAY (ABSOLUTE
|
||||
(IOPATH A0 DQ0 (120:120:120) (120:120:120))
|
||||
(IOPATH A0 DQ1 (40:40:40) (40:40:40))
|
||||
(IOPATH CENeg DQ0 (115:115:115) (115:115:115) (11:11:11) (115:115:115) (11:11:11) (115:115:115))
|
||||
(IOPATH OENeg DQ0 (35:35:35) (35:35:35) (11:11:11) (35:35:35) (11:11:11) (35:35:35))
|
||||
(IOPATH RESETNeg DQ0 () () (0:0:0) () (0:0:0) ())
|
||||
(IOPATH CENeg RY (0) (120))
|
||||
(IOPATH WENeg RY (0) (120))
|
||||
))
|
||||
(TIMINGCHECK
|
||||
(SETUP A0 CENeg (0:0:0))
|
||||
(SETUP A0 OENeg (15:15:15))
|
||||
(SETUP DQ0 CENeg (45:45:45))
|
||||
(HOLD CENeg RESETNeg (50:50:50))
|
||||
(HOLD OENeg WENeg (0:0:0))
|
||||
(HOLD A0 CENeg (45:45:45))
|
||||
(HOLD A0 OENeg (0:0:0))
|
||||
(HOLD DQ0 CENeg (0:0:0))
|
||||
(HOLD WENeg OENeg (0:0:0))
|
||||
(WIDTH (negedge RESETNeg) (500:500:500))
|
||||
(WIDTH (posedge OENeg) (20:20:20))
|
||||
(WIDTH (negedge WENeg) (35:35:35))
|
||||
(WIDTH (posedge WENeg) (30:30:30))
|
||||
(WIDTH (negedge CENeg) (45:45:45))
|
||||
(WIDTH (posedge CENeg) (30:30:30))
|
||||
(WIDTH (negedge A0) (120:120:120))
|
||||
))
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/WBPB) (DELAY (ABSOLUTE (DEVICE(11000:11000:11000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/POB) (DELAY (ABSOLUTE (DEVICE(100000:100000:100000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/SEO) (DELAY (ABSOLUTE (DEVICE(500000000:500000000:500000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/HANG) (DELAY (ABSOLUTE (DEVICE(400000000:400000000:400000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/START_T1) (DELAY (ABSOLUTE (DEVICE(5000:5000:20000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/CTMOUT) (DELAY (ABSOLUTE (DEVICE(50000:50000:50000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/READY) (DELAY (ABSOLUTE (DEVICE(20000:20000:20000) ) ) )
|
||||
</TIMING></FMFTIME>
|
||||
</BODY></FTML>
|
||||
@@ -0,0 +1,58 @@
|
||||
(DELAYFILE
|
||||
(SDFVERSION "3.0")
|
||||
(DESIGN "testbench")
|
||||
(DATE "Wed Jan 28 15:15:41 2004")
|
||||
(VENDOR "Free Model Foundry")
|
||||
(PROGRAM "SDF timing utility(tm)")
|
||||
(VERSION "2.0.4")
|
||||
(DIVIDER /)
|
||||
(VOLTAGE)
|
||||
(PROCESS)
|
||||
(TEMPERATURE)
|
||||
(TIMESCALE 1ns)
|
||||
(CELL
|
||||
(CELLTYPE "my_mem")
|
||||
(INSTANCE dut)
|
||||
(DELAY (ABSOLUTE
|
||||
(IOPATH A0 DQ0 (90:90:90) (90:90:90))
|
||||
(IOPATH A0 DQ1 (25:25:25) (25:25:25))
|
||||
(IOPATH CENeg DQ0 (85:85:85) (85:85:85) (11:11:11) (85:85:85) (11:11:11) (85:85:85))
|
||||
(IOPATH OENeg DQ0 (20:20:20) (20:20:20) (11:11:11) (20:20:20) (11:11:11) (20:20:20))
|
||||
(IOPATH RESETNeg DQ0 () () (0:0:0) () (0:0:0) ())
|
||||
(IOPATH CENeg RY (0) (90))
|
||||
(IOPATH WENeg RY (0) (90))
|
||||
))
|
||||
(TIMINGCHECK
|
||||
(SETUP A0 CENeg (0:0:0))
|
||||
(SETUP A0 OENeg (15:15:15))
|
||||
(SETUP DQ0 CENeg (45:45:45))
|
||||
(HOLD CENeg RESETNeg (50:50:50))
|
||||
(HOLD OENeg WENeg (0:0:0))
|
||||
(HOLD A0 CENeg (45:45:45))
|
||||
(HOLD A0 OENeg (0:0:0))
|
||||
(HOLD DQ0 CENeg (0:0:0))
|
||||
(HOLD WENeg OENeg (0:0:0))
|
||||
(WIDTH (negedge RESETNeg) (500:500:500))
|
||||
(WIDTH (posedge OENeg) (20:20:20))
|
||||
(WIDTH (negedge WENeg) (35:35:35))
|
||||
(WIDTH (posedge WENeg) (30:30:30))
|
||||
(WIDTH (negedge CENeg) (45:45:45))
|
||||
(WIDTH (posedge CENeg) (30:30:30))
|
||||
(WIDTH (negedge A0) (90:90:90))
|
||||
))
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/WBPB) (DELAY (ABSOLUTE (DEVICE(11000:11000:11000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/POB) (DELAY (ABSOLUTE (DEVICE(100000:100000:100000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/SEO) (DELAY (ABSOLUTE (DEVICE(500000000:500000000:500000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/HANG) (DELAY (ABSOLUTE (DEVICE(400000000:400000000:400000000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/START_T1) (DELAY (ABSOLUTE (DEVICE(5000:5000:20000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/CTMOUT) (DELAY (ABSOLUTE (DEVICE(50000:50000:50000) ) ) ) )
|
||||
(CELL (CELLTYPE "VITALbuf")
|
||||
(INSTANCE dut/READY) (DELAY (ABSOLUTE (DEVICE(20000:20000:20000) ) ) )
|
||||
)
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user