Line 71... |
Line 71... |
"prefix=s" => \$prefix,
|
"prefix=s" => \$prefix,
|
"vendor=s" => \$vendor,
|
"vendor=s" => \$vendor,
|
"library=s" => \$library,
|
"library=s" => \$library,
|
"component=s" => \$component,
|
"component=s" => \$component,
|
"version=s" => \$version,
|
"version=s" => \$version,
|
|
"configuration=s" => \$configuration,
|
|
"dest_dir=s" => \$dest_dir,
|
"env=s" => \$env,
|
"env=s" => \$env,
|
"tool=s" => \$tool,
|
"tool=s" => \$tool,
|
"unit=s" => \$unit,
|
"unit=s" => \$unit,
|
"name=s" => \$name
|
"name=s" => \$name
|
|
|
) || die "(use '$program_name -h' for help)";
|
) || die "(use '$program_name -h' for help)";
|
|
|
|
|
|
|
##############################################################################
|
##############################################################################
|
## Help option
|
## Help option
|
##############################################################################
|
##############################################################################
|
if ( $opt_h or $opt_help )
|
if ( $opt_h or $opt_help )
|
{ print "\n elab_verilog -envidentifier {sim/syn} -prefix /work -vendor vendor_name -library library_name -component component_name -version version_name -env env -tool tool -unit unit -name name \n";
|
{ print "\n elab_verilog -envidentifier {sim/syn} -prefix /work -vendor vendor_name -library library_name -component component_name -version version_name -env env -tool tool -unit unit -name name \n";
|
Line 104... |
Line 107... |
$prefix = "/${prefix}";
|
$prefix = "/${prefix}";
|
}
|
}
|
|
|
|
|
my $variant;
|
my $variant;
|
my $configuration;
|
|
|
|
my $dest_dir = "elab";
|
|
|
|
|
|
my $destination = "${component}_${version}";
|
my $destination = "${component}_${version}";
|
|
|
unless ($env ) {$env = "none";}
|
unless ($env ) {$env = "none";}
|
unless ($tool ){$tool = "none";}
|
unless ($tool ){$tool = "none";}
|
unless ($unit ){$unit = "none";}
|
unless ($unit ){$unit = "none";}
|
Line 119... |
Line 123... |
{
|
{
|
$destination = "${destination}_${name}";
|
$destination = "${destination}_${name}";
|
}
|
}
|
else
|
else
|
{
|
{
|
$name = $version;
|
|
$destination = "${destination}";
|
$destination = "${destination}";
|
}
|
}
|
|
|
|
|
|
|
Line 131... |
Line 134... |
my $root = "root";
|
my $root = "root";
|
|
|
if($version) {$variant = "${component}_${version}";}
|
if($version) {$variant = "${component}_${version}";}
|
else {$variant = "${component}";}
|
else {$variant = "${component}";}
|
|
|
#print "elab_verilog -prefix $prefix -vendor $vendor -library $library -component $component -version $version -env $env -tool $tool -unit $unit -name $name \n";
|
#print "ELAB_VERILOG -prefix $prefix -vendor $vendor -library $library -component $component -version $version -env $env -tool $tool -unit $unit -name $name \n";
|
|
|
|
|
my $parser = XML::LibXML->new();
|
my $parser = XML::LibXML->new();
|
|
|
|
|
Line 145... |
Line 148... |
|
|
|
|
my $comp_xml_sep = yp::lib::find_comp_xml_sep($vendor,$library,$component,$version);
|
my $comp_xml_sep = yp::lib::find_comp_xml_sep($vendor,$library,$component,$version);
|
my $lib_comp_sep = yp::lib::find_lib_comp_sep($vendor,$library,$component);
|
my $lib_comp_sep = yp::lib::find_lib_comp_sep($vendor,$library,$component);
|
|
|
|
my $path;
|
|
|
#print "lib_comp_sep $lib_comp_sep \n";
|
|
#print "comp_xml_sep $comp_xml_sep \n";
|
|
|
|
|
|
|
|
|
|
my $path = "${home}${prefix}/${vendor}__${library}${lib_comp_sep}${component}${comp_xml_sep}/../${dest_dir}";
|
|
|
|
unless( -e $path )
|
|
{
|
|
print "$path does not exist... creating \n";
|
|
my $cmd = "mkdir $path \n";
|
|
if(system($cmd)){};
|
|
}
|
|
|
|
|
|
|
|
$data_db_dir = "${path}/${destination}";
|
|
|
|
|
$data_db_file = "${home}/dbs/${vendor}_${library}_${destination}.db";
|
|
|
|
|
|
#print "ELAB_XXXXX ${vendor}_${library}_${component}_${version} $env $tool $unit || $name || $data_db_file \n";
|
|
|
unless(-e $data_db_dir )
|
|
{
|
|
my $cmd = "mkdir $data_db_dir \n";
|
|
if(system($cmd)){};
|
|
}
|
|
|
|
|
my $elab_db = new BerkeleyDB::Hash( -Filename => "$data_db_file", -Flags => DB_CREATE ) or die "Cannot open $data_db_file: $!";
|
|
$elab_db->db_put( "component_${root}","${vendor}:${library}:${component}:${version}" );
|
|
$elab_db->db_put( "component___root" ,"${vendor}:${library}:${component}:${version}" );
|
|
|
$data_db_file = "${path}/${destination}/${root}.db";
|
my $repo_data;
|
|
$elab_db->db_get("VLNV___${vendor}:${library}:${component}:${version}", $repo_data );
|
|
$elab_db->db_put("VLNV___${vendor}:${library}:${component}:${version}","${repo_data}${root}:::" );
|
|
|
|
|
|
|
|
|
if(-e $data_db_file )
|
|
{
|
|
print "$data_db_file does exist... removing \n";
|
|
my $cmd = "rm $data_db_file \n";
|
|
if(system($cmd)){};
|
|
}
|
|
|
|
|
|
print "ELAB $data_db_file \n";
|
|
|
|
|
|
my $elab_db = new BerkeleyDB::Hash( -Filename => "$data_db_file", -Flags => DB_CREATE ) or die "Cannot open $data_db_file: $!";
|
|
$elab_db->db_put( "component_${root}","${vendor}:${library}:${component}:${version}" );
|
|
$elab_db->db_put( "component___root" ,"${vendor}:${library}:${component}:${version}" );
|
|
|
|
|
|
|
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:${env}/socgen:${tool}/socgen:${unit}/socgen:parameters/socgen:parameter"))
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:${env}/socgen:${tool}/socgen:${unit}/socgen:parameters/socgen:parameter"))
|
{
|
{
|
Line 207... |
Line 188... |
if($name eq "${ise_new_name}")
|
if($name eq "${ise_new_name}")
|
{
|
{
|
if($ise_param_name)
|
if($ise_param_name)
|
{
|
{
|
$elab_db->db_put( "parameter_${root}__${ise_param_name}","${ise_param}" );
|
$elab_db->db_put( "parameter_${root}__${ise_param_name}","${ise_param}" );
|
#print "XXXXXXXA $ise_param_name $ise_param $ise_new_name \n";
|
|
}
|
}
|
}
|
}
|
|
|
|
if($version eq "${ise_new_name}")
|
|
{
|
|
if($ise_param_name)
|
|
{
|
|
$elab_db->db_put( "parameter_${root}__${ise_param_name}","${ise_param}" );
|
|
}
|
|
}
|
|
|
|
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
#/**********************************************************************/
|
|
#/* */
|
|
#/* if configuration set then read parameters from socgen:componentConfiguration file */
|
|
#/* */
|
|
#/**********************************************************************/
|
|
if(defined $configuration)
|
|
{
|
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:configurations/socgen:configuration/socgen:parameters/socgen:parameter/socgen:name"))
|
|
{
|
|
my($param_name) = $socgen_cfg->findnodes('./text()')->to_literal ;
|
|
my($param_value) = $socgen_cfg->findnodes('../socgen:value/text()')->to_literal ;
|
|
my($config_name) = $socgen_cfg->findnodes('../../../socgen:name/text()')->to_literal ;
|
|
if($config_name eq $configuration )
|
|
{
|
|
my $repo_data;
|
|
$elab_db->db_get("parameter_${root}__${param_name}", $repo_data );
|
|
unless (defined $repo_data)
|
|
{
|
|
$elab_db->db_put( "parameter_${root}__${param_name}","${param_value}" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:${env}/socgen:${tool}/socgen:${unit}/socgen:variant"))
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:${env}/socgen:${tool}/socgen:${unit}/socgen:variant"))
|
{
|
{
|
my($variant_name) = $socgen_cfg->findnodes('./text()')->to_literal ;
|
my($variant_name) = $socgen_cfg->findnodes('./text()')->to_literal ;
|
$configuration = $socgen_cfg->findnodes('../socgen:configuration/text()')->to_literal ;
|
my $configuration = $socgen_cfg->findnodes('../socgen:configuration/text()')->to_literal ;
|
|
|
#/**********************************************************************/
|
#/**********************************************************************/
|
#/* */
|
#/* */
|
#/* if configuration set then read parameters from socgen:componentConfiguration file */
|
#/* if configuration set then read parameters from socgen:componentConfiguration file */
|
#/* */
|
#/* */
|
#/**********************************************************************/
|
#/**********************************************************************/
|
if($variant_name eq $variant)
|
if($variant_name eq $variant)
|
{
|
{
|
#print "XXXXXXXQ $variant_name configuration $configuration \n";
|
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:configurations/socgen:configuration/socgen:parameters/socgen:parameter/socgen:name"))
|
foreach my $socgen_cfg ($socgen_file->findnodes("//socgen:componentConfiguration/socgen:configurations/socgen:configuration/socgen:parameters/socgen:parameter/socgen:name"))
|
{
|
{
|
my($param_name) = $socgen_cfg->findnodes('./text()')->to_literal ;
|
my($param_name) = $socgen_cfg->findnodes('./text()')->to_literal ;
|
my($param_value) = $socgen_cfg->findnodes('../socgen:value/text()')->to_literal ;
|
my($param_value) = $socgen_cfg->findnodes('../socgen:value/text()')->to_literal ;
|
my($config_name) = $socgen_cfg->findnodes('../../../socgen:name/text()')->to_literal ;
|
my($config_name) = $socgen_cfg->findnodes('../../../socgen:name/text()')->to_literal ;
|
#print "XXXXXXXQQ $config_name $param_name $param_value \n";
|
|
|
|
|
|
if($config_name eq $configuration )
|
if($config_name eq $configuration )
|
{
|
{
|
my $repo_data;
|
my $repo_data;
|
$elab_db->db_get("parameter_${root}__${param_name}", $repo_data );
|
$elab_db->db_get("parameter_${root}__${param_name}", $repo_data );
|
unless ($repo_data)
|
unless (defined $repo_data)
|
{
|
{
|
#print "XXXXXXXB $param_name ${param_value} \n";
|
|
$elab_db->db_put( "parameter_${root}__${param_name}","${param_value}" );
|
$elab_db->db_put( "parameter_${root}__${param_name}","${param_value}" );
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|
Line 265... |
Line 278... |
my $value;
|
my $value;
|
|
|
|
|
my @elab_list;
|
my @elab_list;
|
|
|
my $cursor = $elab_db ->db_cursor() ;
|
|
while ($cursor->c_get($key, $value, DB_NEXT) == 0)
|
|
{
|
|
#print "ELAB $key, $value \n";
|
|
( ${key_type},@elab_list) = split( /\./ , $key);
|
|
|
|
if(($key_type eq "component___${root}"))
|
|
{
|
|
#print "Component $key -- $value @elab_list \n";
|
|
build_hierarchy ($value,"${path}/${destination}",$root,@elab_list);
|
|
}
|
|
}
|
|
my $status = $cursor->c_close() ;
|
|
|
|
|
|
|
|
|
|
$cursor = $elab_db ->db_cursor() ;
|
|
while ($cursor->c_get($key, $value, DB_NEXT) == 0)
|
|
{
|
|
$_ = $key;
|
|
if(/parameter_${root}(\S+)__(\S+)/)
|
|
{
|
|
my $xpath = $1;
|
|
my $parname = $2;
|
|
$xpath =~ s/\./\//g;
|
|
my $file_name = "${path}/${destination}/${root}/${xpath}/Index.db";
|
|
my $param_db = new BerkeleyDB::Hash( -Filename => "$file_name", -Flags => DB_CREATE ) or die "Cannot open ${file_name}: $!";
|
|
$param_db->db_put( "$key","${value}");
|
|
$param_db->db_close();
|
|
#print "Parameter $key --- ${file_name} $parname $value \n";
|
|
}
|
|
}
|
|
$status = $cursor->c_close() ;
|
|
|
|
|
|
|
|
$cursor = $elab_db ->db_cursor() ;
|
|
while ($cursor->c_get($key, $value, DB_NEXT) == 0)
|
|
{
|
|
$_ = $key;
|
|
if(/busInterface_${root}(\S+)__(\S+)/)
|
|
{
|
|
my $xpath = $1;
|
|
my $parname = $2;
|
|
$xpath =~ s/\./\//g;
|
|
my $file_name = "${path}/${destination}/${root}/${xpath}/Index.db";
|
|
my $param_db = new BerkeleyDB::Hash( -Filename => "$file_name", -Flags => DB_CREATE ) or die "Cannot open ${file_name}: $!";
|
|
$param_db->db_put( "$key","${value}");
|
|
$param_db->db_close();
|
|
#print "busInterface $key --- ${file_name} $parname $value \n";
|
|
}
|
|
}
|
|
$status = $cursor->c_close() ;
|
|
|
|
|
|
|
|
|
|
|
|
Line 420... |
Line 379... |
{
|
{
|
my($parameter_name) = $i_name ->to_literal;
|
my($parameter_name) = $i_name ->to_literal;
|
my($parameter_default) = $i_name ->findnodes('../spirit:value/text()')->to_literal ;
|
my($parameter_default) = $i_name ->findnodes('../spirit:value/text()')->to_literal ;
|
my $repo_data;
|
my $repo_data;
|
$elab_db->db_get("parameter_${elab_root}__${parameter_name}", $repo_data );
|
$elab_db->db_get("parameter_${elab_root}__${parameter_name}", $repo_data );
|
unless ($repo_data)
|
|
|
|
|
unless (defined $repo_data)
|
{
|
{
|
#print "XXXXXXXC $parameter_name ${parameter_default} \n";
|
|
$elab_db->db_put( "parameter_${elab_root}__${parameter_name}","${parameter_default}" );
|
$elab_db->db_put( "parameter_${elab_root}__${parameter_name}","${parameter_default}" );
|
|
|
|
|
}
|
}
|
}
|
}
|
|
|
|
|
|
|
Line 451... |
Line 414... |
if($key_type eq "AbsDef")
|
if($key_type eq "AbsDef")
|
{
|
{
|
# print "BUS-- ${elab_root} ||| $name $sense === $value \n";
|
# print "BUS-- ${elab_root} ||| $name $sense === $value \n";
|
my $repo_data;
|
my $repo_data;
|
$elab_db->db_get("businterface_${elab_root}__${name}", $repo_data );
|
$elab_db->db_get("businterface_${elab_root}__${name}", $repo_data );
|
unless ($repo_data)
|
unless (defined $repo_data)
|
{
|
{
|
# print "BUS--::: \n";
|
# print "BUS--::: \n";
|
$elab_db->db_put( "busInterface_${elab_root}__${name}","busInterface:${sense}:${value}" );
|
$elab_db->db_put( "busInterface_${elab_root}__${name}","busInterface:${sense}:${value}" );
|
}
|
}
|
}
|
}
|
Line 617... |
Line 580... |
my($component_name) = $x_name ->findnodes('../spirit:componentRef/@spirit:name')->to_literal ;
|
my($component_name) = $x_name ->findnodes('../spirit:componentRef/@spirit:name')->to_literal ;
|
my($version_name) = $x_name ->findnodes('../spirit:componentRef/@spirit:version')->to_literal ;
|
my($version_name) = $x_name ->findnodes('../spirit:componentRef/@spirit:version')->to_literal ;
|
#print "INSTANCED $instance_name $vendor_name $library_name $component_name $version_name \n";
|
#print "INSTANCED $instance_name $vendor_name $library_name $component_name $version_name \n";
|
$elab_db->db_put( "component___${elab_root}.${instance_name}","${vendor_name}:${library_name}:${component_name}:${version_name}" );
|
$elab_db->db_put( "component___${elab_root}.${instance_name}","${vendor_name}:${library_name}:${component_name}:${version_name}" );
|
|
|
|
my $repo_data;
|
|
$elab_db->db_get("VLNV___${vendor_name}:${library_name}:${component_name}:${version_name}", $repo_data );
|
|
$elab_db->db_put("VLNV___${vendor_name}:${library_name}:${component_name}:${version_name}","${repo_data}${elab_root}.${instance_name}:::");
|
|
|
if ($instance_name)
|
if ($instance_name)
|
{
|
{
|
|
|
|
|
|
|
foreach my $i_parameter ($spirit_design_file->findnodes("//spirit:componentInstance[spirit:instanceName/text() = '$instance_name']/spirit:configurableElementValues/spirit:configurableElementValue/\@spirit:referenceId"))
|
foreach my $i_parameter ($spirit_design_file->findnodes("//spirit:componentInstance[spirit:instanceName/text() = '$instance_name']/spirit:configurableElementValues/spirit:configurableElementValue/\@spirit:referenceId"))
|
{
|
{
|
my($foo_name) = $i_parameter ->to_literal ;
|
my($foo_name) = $i_parameter ->to_literal ;
|
my($foo_value) = $i_parameter ->findnodes('../text()')->to_literal ;
|
my($foo_value) = $i_parameter ->findnodes('../text()')->to_literal ;
|
my $repo_data;
|
|
$elab_db->db_get("parameter_${elab_root}__${foo_value}", $repo_data );
|
|
unless ($repo_data) {$repo_data = $foo_value};
|
|
#print "PARAMETERE $foo_name $foo_value $repo_data \n";
|
|
$elab_db->db_put( "parameter_${elab_root}.${instance_name}__${foo_name}","${repo_data}" );
|
|
}
|
|
|
|
elaborate( "${elab_root}.${instance_name}","${vendor_name}","${library_name}","${component_name}","${version_name}" );
|
$_ = $foo_value;
|
|
my $t_name;
|
|
my $t_op;
|
|
my $repo_data;
|
|
|
|
if(/(\S+)[+](\S+)/)
|
|
{
|
|
$t_name = $1;
|
|
$t_op = $2;
|
|
$elab_db->db_get("parameter_${elab_root}__${t_name}", $repo_data );
|
|
unless (defined $repo_data)
|
|
{
|
|
$repo_data = $foo_value ;
|
|
}
|
|
else
|
|
{
|
|
$repo_data = $repo_data + $t_op ;
|
}
|
}
|
|
|
|
# print "GGGGGGGHHHH $foo_value $t_name $t_op $repo_data \n";
|
}
|
}
|
|
else
|
|
{
|
|
$elab_db->db_get("parameter_${elab_root}__${foo_value}", $repo_data );
|
|
unless (defined $repo_data)
|
|
{
|
|
$repo_data = $foo_value ;
|
}
|
}
|
}
|
}
|
|
|
|
$elab_db->db_put( "parameter_${elab_root}.${instance_name}__${foo_name}","${repo_data}" );
|
|
$elab_db->db_put( "Parameter_${elab_root}.${instance_name}__${foo_name}","${foo_value}" );
|
|
|
|
# print "PARAMETERE ${elab_root}.${instance_name} $foo_name $repo_data <- $foo_value \n";
|
|
|
|
}
|
|
|
|
elaborate( "${elab_root}.${instance_name}","${vendor_name}","${library_name}","${component_name}","${version_name}" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
Line 683... |
Line 674... |
|
|
|
|
|
|
|
|
|
|
#/*********************************************************************************************/
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/ */
|
|
#/*********************************************************************************************/
|
|
|
|
sub build_hierarchy
|
|
{
|
|
my @params = @_;
|
|
my $vlnv = shift(@params);
|
|
my $path = shift(@params);
|
|
my $root = shift(@params);
|
|
my $top = shift(@params);
|
|
my $new_elab_db ;
|
|
my $new_elab_db_file_name ;
|
|
|
|
|
|
|
|
#print "Hier $path \nHier- $root $top --- @params \n";
|
|
$path ="${path}/${root}";
|
|
unless(-e $path)
|
|
{
|
|
$cmd ="mkdir ${path} \n";
|
|
if(system($cmd)){}
|
|
#print "Create Dir ${path} \n";
|
|
}
|
|
|
|
unless (-e "${path}/${top}")
|
|
{
|
|
$cmd ="mkdir ${path}/${top} \n";
|
|
if(system($cmd)){}
|
|
}
|
|
|
|
$new_elab_db_file_name = "${path}/${top}/Index.db";
|
|
|
|
if(@params)
|
|
{
|
|
build_hierarchy ("$vlnv","${path}","${top}",@params);
|
|
}
|
|
else
|
|
{
|
|
#print "CREATE $new_elab_db_file_name \n";
|
|
$new_elab_db = new BerkeleyDB::Hash( -Filename => "$new_elab_db_file_name", -Flags => DB_CREATE ) or die "Cannot open $new_elab_db_file_name : $!";
|
|
$new_elab_db->db_put( "VLNV","${vlnv}" );
|
|
# print "VLNV $vlnv \nVLNV -> $new_elab_db_file_name \n";
|
|
}
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
1
|
1
|
No newline at end of file
|
No newline at end of file
|