From 0e71461c2bda56f689715be5345c7dd0e1f10722 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 5 Jun 2008 23:46:52 +0000 Subject: [PATCH] added base project files git-svn-id: svn://anubis/nexys2@2 75d2ff46-95cb-4c49-a3ed-7201f6c6b742 --- .../joshs_svga_controller.ise | Bin 0 -> 103765 bytes .../joshs_svga_controller.restore | 1272 +++++++++++++++++ 2 files changed, 1272 insertions(+) create mode 100644 joshs_svga_controller/joshs_svga_controller.ise create mode 100644 joshs_svga_controller/joshs_svga_controller.restore diff --git a/joshs_svga_controller/joshs_svga_controller.ise b/joshs_svga_controller/joshs_svga_controller.ise new file mode 100644 index 0000000000000000000000000000000000000000..ffef59d680876678d99fc5fc6e04adf93d0d152f GIT binary patch literal 103765 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�dx@DIgeIIuPRZ5$BFIC`@^EMtdh=*) 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 literal 0 HcmV?d00001 diff --git a/joshs_svga_controller/joshs_svga_controller.restore b/joshs_svga_controller/joshs_svga_controller.restore new file mode 100644 index 0000000..1a90f2f --- /dev/null +++ b/joshs_svga_controller/joshs_svga_controller.restore @@ -0,0 +1,1272 @@ +# version: 10.1 +# Project Navigator Project Restoration Script +# +# WARNING: Do not modify this file. Any alteration of this file is not +# supported and will likely cause project restoration to fail. The +# format and the contents will be modified without further notice. +# +# This script can be used to recreate the associated project. To use this script, +# source it in a Xilinx Tcl shell, such as xtclsh or the Project Navigator Tcl +# Shell tab, and call the 'restore' proc. Restore takes the project directory as +# an optional argument. Pass in the project directory if it is different than the +# current working directory, otherwise don't pass in anything. +# +# Example: +# In this example the project is in the directory "./projects/m_project_dir". +# +# source ./projects/m_project_dir/my_project.restore +# restore ./projects/m_project_dir +# +# Example: +# In this example the project is in the current working directory. +# +# source my_project.restore +# restore +# +# Note that restoring a project this way has the following limitations: +# - Process status will not be restored. +# - A root-level source will be set as "Top", even if a lower-level source had +# previously been set as "Top". +# - Sources with non-default Design View associations will revert to the default +# association. +# - Snapshots will not be restored. +# +# The project which failed to load will be backed up as .fail. +# Please open a Technical Support WebCase at +# www.xilinx.com/support/clearexpress/websupport.htm and submit this file, along +# with the project source files, for evaluation. +# +# Copyright 2007, Xilinx, Inc. + + +proc ERR { msg } { + puts "ERROR: $msg" +} + +proc WARN { msg } { + puts "WARNING: $msg" +} + +proc INFO { msg } { + puts "$msg" +} + +# Helper that returns 1 if the string is blank, otherwise 0. +proc IsBlank { str } { + if { [string length $str] == 0 } { + return 1 + } + return 0 +} + +# Helper for determining whether a value is 'NULL'. +# Returns 1 if the value is 0; returns 0 if the value is anything else. +proc IsNull { val } { + if { $val == 0 } { + return 1 + } + return 0 +} + +proc HandleException { script { msg "" } } { + set catch_result [catch { + uplevel 1 $script + } RESULT] + if {$catch_result} { + if {![IsBlank $msg]} { + ERR $msg + } + INFO "$RESULT" + INFO "$::errorInfo" + } +} + +# These two procs help to load shared libraries in a platform +# independent way. +proc _LoadLibrary {name} { + set libExt [info sharedlibextension] + set libFullName "$name$libExt" + HandleException { + load $libFullName + } "A problem occured loading library $libFullName." +} + +proc _LoadFactoryLibrary {Factory} { + HandleException { + Xilinx::Cit::FactoryLoad $Factory + } "A problem occured loading library $Factory." +} + +_LoadLibrary libCit_CoreStub +_LoadLibrary libPrjrep_CommonStub +_LoadFactoryLibrary libPrjrep_Common +_LoadLibrary libDpm_SupportStub +_LoadLibrary libDpm_PnfStub +_LoadLibrary libDpm_DefnDataStub +_LoadLibrary libDpm_DesignDataStub +_LoadLibrary libDpm_HdlStub +_LoadLibrary libPrjrep_RepositoryStub +_LoadLibrary libCitI_CoreStub +_LoadLibrary libHdcI_HdcHDProjectStub +_LoadLibrary libTcltaskI_TaskStub +_LoadLibrary libCommonI_CommonStub +_LoadFactoryLibrary libTcltask_Helpers +_LoadFactoryLibrary libHdcC_HDProject +_LoadLibrary libHdcI_HdcContainerStub +_LoadLibrary libGuiI_Stub + +# Helper to exectute code only when the (pointer) variable name is valid. +proc OnOkPtr { var_name script } { + if { [ uplevel info exists $var_name ] } { + upvar $var_name var + if { $var != 0 } { return [ uplevel $script ] } + } +} + +# Helper to exectute code only when the (pointer) variable name is 0. +proc OnNullPtr { var_name script } { + if { [ uplevel info exists $var_name ] } { + upvar $var_name var + if { $var == 0 } { return [ uplevel $script ] } + } +} + +# Helper to exectute code only when the value of variable name is 1. +proc OnSuccess { var_name script } { + if { $val != 0 } { return [ uplevel $script ] } +} + +# Helper to exectute code only when the value of variable name is 0. +proc OnFail { val script } { + if { $val != 1 } { return [ uplevel $script ] } +} + +# Helper to get a component interface. +proc GetInterface { iUnk id { name "" } } { + if {$iUnk == 0} { return 0 } + set iIface [ $iUnk GetInterface $id ] + OnNullPtr iIface { + if {![IsBlank $name]} { + ERR " Could not get the \"$name\" interface." + } + } + return $iIface +} + +# Helper to create a component and return one of its interfaces. +proc CreateComponent { compId ifaceId { name "" } } { + set iUnk [ ::Xilinx::Cit::FactoryCreate $compId ] + set iIface [ GetInterface $iUnk $ifaceId ] + OnNullPtr iIface { + if {![IsBlank $name]} { ERR "Could not create a \"$name\" component." } + } + return $iIface +} + +# Helper to release an object +proc Release { args } { + foreach iUnk $args { + set i_refcount [ GetInterface $iUnk $::xilinx::Prjrep::IRefCountID ] + OnNullPtr i_refcount { set i_refcount [ GetInterface $iUnk $::xilinx::CommonI::IRefCountID ] } + OnOkPtr i_refcount { $i_refcount Release } + } +} + +# Helper to loop over IIterator based pointers. +proc ForEachIterEle { _ele_var_name _iter script } { + if {$_iter == 0} { return 0 } + upvar $_ele_var_name ele + for { $_iter First } { ![ $_iter IsEnd ] } { $_iter Next } { + set ele [ $_iter CurrentItem ] + set returned_val [ uplevel $script ] + } +} + +# Helper to get the Tcl Project Manager, if possible. +proc GetTclProjectMgr { } { + set TclProjectMgrId "{7d528480-1196-4635-aba9-639446e4aa59}" + set iUnk [ Xilinx::CitP::CreateComponent $TclProjectMgrId ] + if {$iUnk == 0} { return 0 } + set iTclProjectMgr [ $iUnk GetInterface $::xilinx::TcltaskI::ITclProjectMgrID ] + OnNullPtr iTclProjectMgr { + ERR "Could not create a \"TclProjectMgr\" component." + } + return $iTclProjectMgr +} + +# Helper to get the current Tcl Project, if one is open. +proc GetCurrentTclProject { } { + set iTclProject 0 + set iTclProjectMgr [GetTclProjectMgr] + OnOkPtr iTclProjectMgr { + set errmsg "" + $iTclProjectMgr GetCurrentTclProject iTclProject errmsg + } + return $iTclProject +} + +# Helper to get the current HDProject, if one is open. +proc GetCurrentHDProject { } { + set iHDProject 0 + set iTclProjectMgr [GetTclProjectMgr] + set errmsg "" + OnOkPtr iTclProjectMgr { $iTclProjectMgr GetCurrentHDProject iHDProject errmsg } + OnNullPtr iHDProject { + ERR "Could not get the current HDProject." + } + return $iHDProject +} + +# Helper to create a Project Helper. +proc GetProjectHelper { } { + set ProjectHelperID "{0725c3d2-5e9b-4383-a7b6-a80c932eac21}" + set iProjHelper [CreateComponent $ProjectHelperID $::xilinx::Dpm::IProjectHelperID "Project Helper"] + return $iProjHelper +} + +# Helper to find out if a project is currently open. +# Returns 1 if a project is open, otherwise 0. +proc IsProjectOpen { } { + set iTclProject [GetCurrentTclProject] + set isOpen [expr {$iTclProject != 0}] + Release $iTclProject + return $isOpen +} + +# Helper to return the lock file for the specified project if there is one. +# Returns an empty string if there is no lock file on the specified project, +# or there is no corresponding .ise file +# This assumes that the project_file is in the current directory. +# It also assumes project_file does not have a path. +proc GetProjectLockFile { project_file } { + if { ![ file isfile "$project_file" ] } { + return + } + INFO "Checking for a lock file for \"$project_file\"." + set lock_file "__ISE_repository_${project_file}_.lock" + if { [ file isfile "$lock_file" ] } { + return $lock_file + } + return +} + +# Helper to back up the project file. +# This assumes that the project_file is in the current directory. +proc BackUpProject { project_file backup_file } { + if { ![ file isfile "$project_file" ] } { + WARN "Could not find \"$project_file\"; the project will not be backed up." + return 0 + } else { + INFO "Backing up the project to \"$backup_file\"." + file copy -force "$project_file" "$backup_file" + } + return 1 +} + +# Helper to remove the project file so that a new project can be created +# in its place. Presumably the old project is corrupted and can no longer +# be opened. +proc RemoveProject { project_file } { + file delete -force "$project_file" + # Return failure if the project still exists. + if { [ file isfile "$project_file" ] } { + ERR "Could not remove \"$project_file\"; Unable to restore the project." + return 0 + } + return 1 +} + +# Helper to open a project and return a project facilitator (pointer). +proc OpenFacilProject { project_name } { + # first make sure the tcl project mgr singleton exists + GetTclProjectMgr + # get a Project Helper and open the project. + set iProjHelper [GetProjectHelper] + if {$iProjHelper == 0} { return 0 } + set result [$iProjHelper Open $project_name] + OnFail $result { + if {$result == 576460769483292673} { + ERR "Could not open the project \"$project_name\" because it is locked." + } else { + ERR "Could not open the \"$project_name\" project." + } + Release $iProjHelper + set iProjHelper 0 + } + return $iProjHelper +} + +# Helper to close and release a project. +proc CloseFacilProject { iProjHelper } { + if {$iProjHelper == 0} { return } + $iProjHelper Close + Release $iProjHelper +} + +# Helper to get the Project from the Project Helper. +# Clients must release this. +proc GetProject { iProjHelper } { + if {$iProjHelper == 0} { return 0 } + set dpm_project 0 + $iProjHelper GetDpmProject dpm_project + set iProject [ GetInterface $dpm_project $xilinx::Dpm::IProjectID ] + OnNullPtr iProject { + ERR "Could not get the Project from the Project Helper." + } + return $iProject +} + +# Helper to get the File Manager from the Project Helper. +# Clients must release this. +proc GetFileManager { iProjHelper } { + set iProject [GetProject $iProjHelper] + set iFileMgr [ GetInterface $iProject $xilinx::Dpm::IFileManagerID ] + OnNullPtr iFileMgr { + ERR "Could not get the File Manager from the Project Helper." + } + # Don't release the project here, clients will release it + # when they release its IFileManager interface. + return $iFileMgr +} + +# Helper to get the Source Library Manager from the Project Helper. +# Clients must release this. +proc GetSourceLibraryManager { iProjHelper } { + set iProject [GetProject $iProjHelper] + set iSourceLibraryMgr [ GetInterface $iProject $xilinx::Dpm::ISourceLibraryManagerID ] + OnNullPtr iSourceLibraryMgr { + ERR "Could not get the Source Library Manager from the Project Helper." + } + # Don't release the project here, clients will release it + # when they release its IFileManager interface. + return $iSourceLibraryMgr +} + +# Helper to get the ProjSrcHelper from the Project Helper. +# Clients must NOT release this. +proc GetProjSrcHelper { iProjHelper } { + set iSrcHelper [ GetInterface $iProjHelper $::xilinx::Dpm::IProjSrcHelperID IProjSrcHelper ] + OnNullPtr iSrcHelper { + ERR "Could not get the ProjSrcHelper from the Project Helper." + } + return $iSrcHelper +} + +# Helper to get the ScratchPropertyManager from the Project Helper. +# Clients must NOT release this. +proc GetScratchPropertyManager { iProjHelper } { + set iPropTableFetch [ GetInterface $iProjHelper $xilinx::Dpm::IPropTableFetchID IPropTableFetch ] + set prop_table_comp 0 + OnOkPtr iPropTableFetch { + $iPropTableFetch GetPropTable prop_table_comp + } + set iScratch [ GetInterface $prop_table_comp $xilinx::Dpm::IScratchPropertyManagerID ] + OnNullPtr iScratch { + ERR "Could not get the Scratch Property Manager from the Project Helper." + } + return $iScratch +} + +# Helper to get the Design from the Project Helper. +# Clients must release this. +proc GetDesign { iProjHelper } { + set iProject [GetProject $iProjHelper] + set iDesign 0 + OnOkPtr iProject { $iProject GetDesign iDesign } + OnNullPtr iDesign { + ERR "Could not get the Design from the Project Helper." + } + Release $iProject + return $iDesign +} + +# Helper to get the Data Store from the Project Helper. +# Clients must NOT release this. +proc GetDataStore { iProjHelper } { + set iDesign [ GetDesign $iProjHelper] + set iDataStore 0 + OnOkPtr iDesign { $iDesign GetDataStore iDataStore } + OnNullPtr iDataStore { + ERR "Could not get the Data Store from the Project Helper." + } + Release $iDesign + return $iDataStore +} + +# Helper to get the View Manager from the Project Helper. +# Clients must NOT release this. +proc GetViewManager { iProjHelper } { + set iDesign [ GetDesign $iProjHelper] + set iViewMgr [ GetInterface $iDesign $xilinx::Dpm::IViewManagerID ] + OnNullPtr iViewMgr { + ERR "Could not get the View Manager from the Project Helper." + } + # Don't release the design here, clients will release it + # when they release its IViewManager interface. + return $iViewMgr +} + +# Helper to get the Property Manager from the Project Helper. +# Clients must release this. +proc GetPropertyManager { iProjHelper } { + set iDesign [ GetDesign $iProjHelper] + set iPropMgr 0 + OnOkPtr iDesign { $iDesign GetPropertyManager iPropMgr } + OnNullPtr iPropMgr { + ERR "Could not get the Property Manager from the Project Helper." + } + Release $iDesign + return $iPropMgr +} + +# Helper to find a property template, based on prop_name +# Clients must NOT release this. +proc GetPropertyTemplate { iProjHelper prop_name } { + set iPropTempl 0 + set iUnk 0 + set iDefdataId 0 + set iPropTemplStore 0 + set iDataStore [GetDataStore $iProjHelper] + OnOkPtr iDataStore { $iDataStore GetComponentByName $prop_name iUnk } + OnOkPtr iUnk { set iDefdataId [ GetInterface $iUnk $xilinx::Dpm::IDefDataIdID IDefDataId ] } + OnOkPtr iDefdataId { + set iPropTemplStore [ GetInterface $iDataStore $xilinx::Dpm::IPropertyTemplateStoreID IPropertyTemplateStore ] + } + OnOkPtr iPropTemplStore { $iPropTemplStore GetPropertyTemplate $iDefdataId iPropTempl } + OnNullPtr iPropTempl { + WARN "Could not get the property template for \"$prop_name\"." + } + return $iPropTempl +} + +# Helper to get a component's name. +proc GetName { iUnk } { + set name "" + set iName [ GetInterface $iUnk $xilinx::Prjrep::INameID IName ] + OnOkPtr iName { $iName GetName name } + return $name +} + +# Helper to get the name of a view's type. +proc GetViewTypeName { iView } { + set typeName "" + set iType 0 + set iDefdataType 0 + OnOkPtr iView { $iView GetType iType } + OnOkPtr iType { + set iDefdataType [ GetInterface $iType $xilinx::Dpm::IDefDataIdID IDefDataId ] + } + OnOkPtr iDefdataType { $iDefdataType GetID typeName } + return $typeName +} + +# Helper to find a view and return its context. +# Must clients release this? +proc GetViewContext { iProjHelper view_id view_name } { + # Simply return if the view_id or view_name is empty. + if { [IsBlank $view_id] || [IsBlank $view_name] } { return 0 } + set foundview 0 + set viewiter 0 + set iViewMgr [GetViewManager $iProjHelper] + OnOkPtr iViewMgr { $iViewMgr GetViews viewiter } + ForEachIterEle view $viewiter { + set typeName [GetViewTypeName $view] + set name [GetName $view] + if { [ string equal $name $view_name ] && [ string equal $view_id $typeName ] } { + set foundview $view + } + } + set context [ GetInterface $foundview $xilinx::Dpm::IPropertyContextID ] + OnNullPtr context { + WARN "Could not get the context for view \"$view_id\":\"$view_name\"." + } + return $context +} + +# Helper to get a string property instance from the property manager. +proc GetStringPropertyInstance { iProjHelper simple_id } { + set iPropMgr [GetPropertyManager $iProjHelper] + if {$iPropMgr == 0} { return 0 } + set iPropInst 0 + $iPropMgr GetStringProperty $simple_id iPropInst + OnNullPtr iPropInst { WARN "Could not get the string property instance $simple_id." } + Release $iPropMgr + return $iPropInst +} + +# Helper to get a property instance from the property manager. +proc GetPropertyInstance { iProjHelper view_name view_id prop_name } { + set iPropInst 0 + set iPropTempl [ GetPropertyTemplate $iProjHelper $prop_name ] + if {$iPropTempl == 0} { return 0 } + set context [ GetViewContext $iProjHelper $view_id $view_name ] + set iPropMgr [GetPropertyManager $iProjHelper] + if {$iPropMgr == 0} { return 0 } + $iPropMgr GetPropertyInstance $iPropTempl $context iPropInst + OnNullPtr iPropInst { + if { ![IsBlank $view_id] && ![IsBlank $view_name] } { + WARN "Could not get the context sensitive property instance $prop_name." + } else { + WARN "Could not get the property instance $prop_name." + } + } + Release $iPropMgr + return $iPropInst +} + +# Helper to store properties back into the property manager. +proc RestoreProcessProperties { iProjHelper process_props } { + INFO "Restoring process properties" + foreach { unused view_name view_id simple_id prop_name prop_val } $process_props { + set iPropInst 0 + if {![IsBlank $simple_id]} { + set iPropInst [ GetStringPropertyInstance $iProjHelper $simple_id ] + } else { + set iPropInst [ GetPropertyInstance $iProjHelper $view_name $view_id $prop_name ] + } + OnOkPtr iPropInst { + OnFail [ $iPropInst SetStringValue "$prop_val" ] { + WARN "Could not set the value of the $prop_name property to \"$prop_val\"." + } + } + Release $iPropInst + } +} + +# Helper to recreate partitions from the variable name with +# a list of instance names. +proc RestorePartitions { namelist } { + INFO "Restoring partitions." + set iHDProject [ GetCurrentHDProject ] + OnOkPtr iHDProject { + foreach name $namelist { + set iPartition [ $iHDProject CreatePartition "$name" ] + } + } +} + +# Helper to create and populate a library +# +proc CreateLibrary { iProjHelper libname filelist } { + + set iLibMgr [ GetSourceLibraryManager $iProjHelper ] + set iFileMgr [ GetFileManager $iProjHelper ] + + if {$iLibMgr == 0} { return 0 } + if {$iFileMgr == 0} { return 0 } + + $iLibMgr CreateSourceLibrary "libname" ilib + + OnOkPtr ilib { + foreach filename $filelist { + set argfile [ file normalize "$filename" ] + set found 0 + set fileiter 0 + $iFileMgr GetFiles fileiter + ForEachIterEle ifile $fileiter { + set path "" + set file "" + $ifile getPath path file + set currentfile [ file normalize [ file join "$path" "$file" ] ] + if { $currentfile == $argfile } { + set found 1 + $ilib AddFile ifile + break + } + } + OnNullPtr found { + WARN "Could not add the file \"$filename\" to the library \"$libname\"." + } + } + } +} + +# Helper to create source libraries and populate them. +proc RestoreSourceLibraries { iProjHelper libraries } { + INFO "Restoring source libraries." + foreach { libname filelist } $libraries { + CreateLibrary $iProjHelper "$libname" $filelist + } +} + +# Helper to add user files to the project using the PnF. +proc AddUserFiles { iProjHelper files } { + INFO "Adding User files." + set iconflict 0 + set iSrcHelper [ GetProjSrcHelper $iProjHelper ] + if {$iSrcHelper == 0} { return 0 } + foreach filename $files { + INFO "Adding the file \"$filename\" to the project." + set result [$iSrcHelper AddSourceFile "$filename" iconflict] + OnFail $result { + if {$result == 6} { + INFO "The file \"$filename\" is already in the project." + } else { + ERR "A problem occurred adding the file \"$filename\" to the project." + } + } + } +} + +# Helper to add files to the project and set their origination. +# Valid origination values are: +# 0 - User +# 1 - Generated +# 2 - Imported +# Files of origination "User" are added through the facilitator, +# otherwise they are added directly to the File Manager. +proc AddImportedFiles { iProjHelper files origination } { + switch $origination { + 0 { INFO "Adding User files." } + 1 { INFO "Adding Generated files." } + 2 { INFO "Adding Imported files." } + default { + ERR "Invalid parameter: origination was set to \"$origination\", but may only be 0, 1, or 2." + return 0 + } + } + set iFileMgr [ GetFileManager $iProjHelper ] + if {$iFileMgr == 0} { return 0 } + foreach filename $files { + set file_type 0 + set hdl_file 0 + set result [$iFileMgr AddFile "$filename" $file_type hdl_file] + OnFail $result { + if {$result == 6} { + INFO "The file \"$filename\" is already in the project." + } elseif { $hdl_file == 0 } { + ERR "A problem occurred adding the file \"$filename\" to the project." + } + } + OnOkPtr hdl_file { + set ifile [ GetInterface $hdl_file $xilinx::Dpm::IFileID IFile ] + OnOkPtr ifile { + set result [ $ifile SetOrigination $origination ] + if {$result != 1} { + ERR "A problem occurred setting the origination of \"$filename\" to \"$origination\"." + } + Release $ifile + } + } + } + return 1 +} + +proc RestoreProjectSettings { iProjHelper project_settings } { + INFO "Restoring device settings" + set iScratch [GetScratchPropertyManager $iProjHelper] + set iPropIter 0 + set iPropSet [ GetInterface $iScratch $xilinx::Dpm::IPropertyNodeSetID IPropertyNodeSet ] + OnOkPtr iPropSet { + $iPropSet GetIterator iPropIter + } + set index 0 + set lastindex [llength $project_settings] + ForEachIterEle prop_node $iPropIter { + set prop_instance 0 + $prop_node GetPropertyInstance prop_instance + if { $index < $lastindex } { + set argname [ lindex $project_settings $index ] + set argvalue [ lindex $project_settings [ expr $index + 1 ] ] + } else { + set argname {} + set argvalue {} + } + if { $prop_instance != 0 } { + set name {} + $prop_instance GetName name + if { [string equal $name $argname ] } { + $prop_instance SetStringValue $argvalue + incr index + incr index + } + } + Release $prop_instance + } + $iScratch Commit + # initialize + $iProjHelper Init +} + +# Helper to load a source control configuration from a stream +# and then store it back into an ise file. +proc RestoreSourceControlOptions { prjfile istream } { + INFO "Restoring source control options" + set config_comp [::Xilinx::Cit::FactoryCreate $::xilinx::Dpm::SourceControlConfigurationCompID ] + OnOkPtr config_comp { set ipersist [ $config_comp GetInterface $xilinx::Prjrep::IPersistID ] } + OnOkPtr config_comp { set igetopts [ $config_comp GetInterface $xilinx::Dpm::SrcCtrl::IGetOptionsID ] } + set helper_comp [::Xilinx::Cit::FactoryCreate $::xilinx::Dpm::SourceControlHelpCompID ] + OnOkPtr helper_comp { set ihelper [ $config_comp GetInterface $xilinx::Dpm::SrcCtrl::IHelperID ] } + OnOkPtr ipersist { $ipersist Load istream } + OnOkPtr ihelper { OnOkPtr igetopts { $ihelper SaveOptions $prjfile $igetopts } } + Release $helper_comp $config_comp +} + +# put a string message in a GUI popup message dialog (if possible), +# Get a user Yes/No response. If the GUI isn't active just 'puts' +# the message to stdout and return the default value. +# sMessageGUI - string, the message to display in GUI environment +# sMessageCmdLine - string, the message to display in CMdLine environment +# defaultValue - integer, the response to return on a timeout +# hasCancel - integer, defaulting to 0. If 1, show Yes/No/Cancel buttons +proc dpm_DisplayQuestionDialog { sMessageGUI sMessageCmdLine defaultValue { hasCancel 0} } { + set iMessageDisplay 0 + if {[catch { + set iInterface [Xilinx::CitP::GetInstance $::xilinx::GuiI::IMessageDlgID] + set iMessageDisplay [$iInterface GetInterface $::xilinx::GuiI::IMessageDlgID] + }]} { + # if we cannot get the IMessageDlgID interface then we are most likely + # running from command line and not in the GUI. + puts $sMessageCmdLine + } else { + # got a good dialog singleton + set nTimeout 999999 + set buttonValue [$iMessageDisplay Question "Project Navigator" $sMessageGUI $hasCancel $nTimeout] + if { $buttonValue == 2 } { ; # cancel + return 3 + } elseif { $buttonValue == 3 } { ; # yes + return 1 + } elseif { $buttonValue == 4 } { ; # no + return 2 + } else { # probably timeout + return $defaultValue + } + } + return $defaultValue +} + +# Call this proc to restore the ISE project. +proc restore { { project_dir "" } } { + set script_file "joshs_svga_controller.restore" + set project_file "joshs_svga_controller.ise" + set backup_file "joshs_svga_controller.fail" + set old_working_dir [pwd] + # Make sure a project isn't already open. + if {[IsProjectOpen]} { + ERR "The project must be closed before performing this operation." + cd $old_working_dir + return + } + # If a project directory was supplied, cd into it. + if {![IsBlank $project_dir]} { + cd $project_dir + } + # capture the project directory ... it should be CWD at this point + set project_dir [pwd] + + # before proceeding detect if lock files exist and if so ask the user what to do + set proj_rootname [file rootname $project_file] + set intermediate_proj_dir [file join $project_dir ${proj_rootname}_xdb] + set proj_temp_dir [file join $intermediate_proj_dir "projtemp"] + set repo_temp_dir [file join $proj_temp_dir $project_file] + set new_lock_file [file join $proj_temp_dir ${project_file}.lock] + set old_lock_file [GetProjectLockFile $project_file] + set bLockFilesExist 0 + # see if any lock files are there + if {[file exists $new_lock_file] || ![IsBlank "$old_lock_file" ] } { + set bLockFilesExist 1 + } + + # if lock file(s) are found ask the user what to do + if { $bLockFilesExist == 1 } { + set lockFileMsgGUI "The project to be restored appears to be locked. Remove Lock and continue the restore project process ?" + set lockFileMsgCmdLine "The project to be restored appears to be locked. Please remove the lock file \"$new_lock_file\" and try the restore process again." + set answer [dpm_DisplayQuestionDialog $lockFileMsgGUI $lockFileMsgCmdLine 2] + if { $answer == 1 } { + # remove the lock file(s) and the repo temo dir, if present + # remove the new style lock file if it exists + if {[file exists $new_lock_file]} { + INFO "Removing lock file \"$new_lock_file\"." + file delete -force $new_lock_file + } + # remove the old style lock file if it exists + if {[file exists $old_lock_file]} { + INFO "Removing lock file \"$old_lock_file\"." + file delete -force $old_lock_file + } + # remove the temp proj dir if it exists + if {[file exists $repo_temp_dir]} { + INFO "Removing old temporary project directory \"$repo_temp_dir\"." + file delete -force $repo_temp_dir + } + } else { + # the user answered 'no' so exist without doing anything + INFO "Exiting without restoring project." + return + } + } + + # Backup this script because it will be overwritten the next time + # the project is saved, which happens right after it is created! + file copy -force "$script_file" "${script_file}.last" + # Back up the project. + set wasBackedUp [ BackUpProject "$project_file" "$backup_file" ] + # Remove the project file, so that it can be recreated, since the old. + # is presumably corrupted and can no longer be opened. + OnFail [ RemoveProject "$project_file" ] { + cd $old_working_dir + return + } + + # Open the project. + HandleException { + set iProjHelper [ OpenFacilProject "$project_file"] + } "A problem occurred while creating the project \"$project_file\"." + if {$iProjHelper == 0} { + cd $old_working_dir + return + } + INFO "Recreating project \"$project_file\"." + set project_settings { + "PROP_DevFamily" "Spartan3E" + "PROP_DevDevice" "xc3s500e" + "PROP_DevPackage" "fg320" + "PROP_DevSpeed" "-5" + "PROP_Top_Level_Module_Type" "HDL" + "PROP_Synthesis_Tool" "XST (VHDL/Verilog)" + "PROP_Simulator" "ISE Simulator (VHDL/Verilog)" + "PROP_PreferredLanguage" "VHDL" + "PROP_Enable_Message_Capture" "true" + "PROP_Enable_Message_Filtering" "false" + "PROP_Enable_Incremental_Messaging" "false" + } + + HandleException { + RestoreProjectSettings $iProjHelper $project_settings + } "A problem occured while restoring project settings." + + set user_files {} + + HandleException { + AddUserFiles $iProjHelper $user_files + } "A problem occured while restoring user files." + + set imported_files {} + + set origination 2 + + HandleException { + AddImportedFiles $iProjHelper $imported_files $origination + } "A problem occured while restoring imported files." + + set process_props { + "A" "" "" "" "PROPEXT_SynthMultStyle_virtex2" "Auto" + "A" "" "" "" "PROPEXT_xilxBitgCfg_Rate_spartan3e" "Default (1)" + "A" "" "" "" "PROPEXT_xilxMapGenInputK_virtex2" "4" + "A" "" "" "" "PROPEXT_xilxSynthAddBufg_spartan3e" "24" + "A" "" "" "" "PROPEXT_xilxSynthMaxFanout_virtex2" "500" + "A" "" "" "" "PROP_AutoGenFile" "false" + "A" "" "" "" "PROP_BehavioralSimTop" "" + "A" "" "" "" "PROP_CPLDFitkeepio" "false" + "A" "" "" "" "PROP_CompxlibAbelLib" "true" + "A" "" "" "" "PROP_CompxlibCPLDDetLib" "true" + "A" "" "" "" "PROP_CompxlibOtherCompxlibOpts" "" + "A" "" "" "" "PROP_CompxlibOutputDir" "$XILINX//" + "A" "" "" "" "PROP_CompxlibOverwriteLib" "Overwrite" + "A" "" "" "" "PROP_CompxlibSimPrimatives" "true" + "A" "" "" "" "PROP_CompxlibXlnxCoreLib" "true" + "A" "" "" "" "PROP_CurrentFloorplanFile" "" + "A" "" "" "" "PROP_DesignName" "joshs_svga_controller" + "A" "" "" "" "PROP_Dummy" "dum1" + "A" "" "" "" "PROP_EnableWYSIWYG" "None" + "A" "" "" "" "PROP_Enable_Incremental_Messaging" "false" + "A" "" "" "" "PROP_Enable_Message_Capture" "true" + "A" "" "" "" "PROP_Enable_Message_Filtering" "false" + "A" "" "" "" "PROP_FitterReportFormat" "HTML" + "A" "" "" "" "PROP_FlowDebugLevel" "0" + "A" "" "" "" "PROP_FunctionBlockInputLimit" "38" + "A" "" "" "" "PROP_ISimLibSearchOrderFile" "" + "A" "" "" "" "PROP_ISimOtherCompilerOptions_behav" "" + "A" "" "" "" "PROP_ISimOtherCompilerOptions_par" "" + "A" "" "" "" "PROP_ISimSDFTimingToBeRead" "Setup Time" + "A" "" "" "" "PROP_ISimUseCustomCompilationOrder" "false" + "A" "" "" "" "PROP_ISimUseCustomSimCmdFile_behav_tb" "false" + "A" "" "" "" "PROP_ISimUseCustomSimCmdFile_behav_tbw" "false" + "A" "" "" "" "PROP_ISimUseCustomSimCmdFile_gen_tbw" "false" + "A" "" "" "" "PROP_ISimUseCustomSimCmdFile_par_tb" "false" + "A" "" "" "" "PROP_ISimUseCustomSimCmdFile_par_tbw" "false" + "A" "" "" "" "PROP_ISimUutInstName" "UUT" + "A" "" "" "" "PROP_ImpactProjectFile" "Default" + "A" "" "" "" "PROP_Parse_Target" "synthesis" + "A" "" "" "" "PROP_PartitionCreateDelete" "" + "A" "" "" "" "PROP_PartitionForcePlacement" "" + "A" "" "" "" "PROP_PartitionForceSynth" "" + "A" "" "" "" "PROP_PartitionForceTranslate" "" + "A" "" "" "" "PROP_PlsClockEnable" "true" + "A" "" "" "" "PROP_PostFitSimTop" "" + "A" "" "" "" "PROP_PostMapSimTop" "" + "A" "" "" "" "PROP_PostParSimTop" "" + "A" "" "" "" "PROP_PostSynthSimTop" "" + "A" "" "" "" "PROP_PostTrceFastPath" "false" + "A" "" "" "" "PROP_PostTrceGenDatasheet" "true" + "A" "" "" "" "PROP_PostTrceGenTimegroups" "false" + "A" "" "" "" "PROP_PostXlateSimTop" "" + "A" "" "" "" "PROP_PreTrceFastPath" "false" + "A" "" "" "" "PROP_PreTrceGenDatasheet" "true" + "A" "" "" "" "PROP_PreTrceGenTimegroups" "false" + "A" "" "" "" "PROP_PreTrceTSIFile" "" + "A" "" "" "" "PROP_SimModelGenerateTestbenchFile" "false" + "A" "" "" "" "PROP_SimModelInsertBuffersPulseSwallow" "false" + "A" "" "" "" "PROP_SimModelOtherNetgenOpts" "" + "A" "" "" "" "PROP_SimModelRetainHierarchy" "true" + "A" "" "" "" "PROP_SynthCaseImplStyle" "None" + "A" "" "" "" "PROP_SynthDecoderExtract" "true" + "A" "" "" "" "PROP_SynthEncoderExtract" "Yes" + "A" "" "" "" "PROP_SynthExtractMux" "Yes" + "A" "" "" "" "PROP_SynthExtractRAM" "true" + "A" "" "" "" "PROP_SynthExtractROM" "true" + "A" "" "" "" "PROP_SynthFsmEncode" "Auto" + "A" "" "" "" "PROP_SynthLogicalShifterExtract" "true" + "A" "" "" "" "PROP_SynthOpt" "Speed" + "A" "" "" "" "PROP_SynthOptEffort" "Normal" + "A" "" "" "" "PROP_SynthResSharing" "true" + "A" "" "" "" "PROP_SynthShiftRegExtract" "true" + "A" "" "" "" "PROP_SynthTop" "" + "A" "" "" "" "PROP_SynthXORCollapse" "true" + "A" "" "" "" "PROP_Top_Level_Module_Type" "HDL" + "A" "" "" "" "PROP_UseDataGate" "true" + "A" "" "" "" "PROP_UseSmartGuide" "false" + "A" "" "" "" "PROP_UserConstraintEditorPreference" "Constraints Editor" + "A" "" "" "" "PROP_UserEditorCustomSetting" ""C:/Program Files/Vim/vim71/gvim.exe" --remote-tab-silent "$1"" + "A" "" "" "" "PROP_UserEditorPreference" "Custom" + "A" "" "" "" "PROP_XPowerOptInputTclScript" "" + "A" "" "" "" "PROP_XPowerOptLoadPCFFile" "Default" + "A" "" "" "" "PROP_XPowerOptLoadVCDFile" "Default" + "A" "" "" "" "PROP_XPowerOptLoadXMLFile" "Default" + "A" "" "" "" "PROP_XPowerOptOutputFile" "Default" + "A" "" "" "" "PROP_XPowerOptVerboseRpt" "false" + "A" "" "" "" "PROP_XPowerOtherXPowerOpts" "" + "A" "" "" "" "PROP_XplorerMode" "Off" + "A" "" "" "" "PROP_bitgen_otherCmdLineOptions" "" + "A" "" "" "" "PROP_cpldBestFit" "false" + "A" "" "" "" "PROP_cpldfitHDLeqStyle" "Source" + "A" "" "" "" "PROP_cpldfit_otherCmdLineOptions" "" + "A" "" "" "" "PROP_fitGenSimModel" "false" + "A" "" "" "" "PROP_hprep6_autosig" "false" + "A" "" "" "" "PROP_hprep6_otherCmdLineOptions" "" + "A" "" "" "" "PROP_ibiswriterShowAllModels" "false" + "A" "" "" "" "PROP_isimCompileForHdlDebug" "true" + "A" "" "" "" "PROP_isimIncreCompilation" "true" + "A" "" "" "" "PROP_isimSpecifyDefMacroAndValue" "" + "A" "" "" "" "PROP_isimSpecifySearchDirectory" "" + "A" "" "" "" "PROP_isimValueRangeCheck" "false" + "A" "" "" "" "PROP_lockPinsUcfFile" "" + "A" "" "" "" "PROP_mapIgnoreTimingConstraints" "false" + "A" "" "" "" "PROP_mapUseRLOCConstraints" "true" + "A" "" "" "" "PROP_map_otherCmdLineOptions" "" + "A" "" "" "" "PROP_mpprRsltToCopy" "" + "A" "" "" "" "PROP_ngdbuildUseLOCConstraints" "true" + "A" "" "" "" "PROP_ngdbuild_otherCmdLineOptions" "" + "A" "" "" "" "PROP_parIgnoreTimingConstraints" "false" + "A" "" "" "" "PROP_parUseTimingConstraints" "true" + "A" "" "" "" "PROP_par_otherCmdLineOptions" "" + "A" "" "" "" "PROP_primeCorrelateOutput" "false" + "A" "" "" "" "PROP_primeFlatternOutputNetlist" "false" + "A" "" "" "" "PROP_primeTopLevelModule" "" + "A" "" "" "" "PROP_primetimeBlockRamData" "" + "A" "" "" "" "PROP_taengine_otherCmdLineOptions" "" + "A" "" "" "" "PROP_xcpldFitDesInit" "Low" + "A" "" "" "" "PROP_xcpldFitDesInputLmt_xbr" "32" + "A" "" "" "" "PROP_xcpldFitDesMultiLogicOpt" "true" + "A" "" "" "" "PROP_xcpldFitDesSlew" "Fast" + "A" "" "" "" "PROP_xcpldFitDesTimingCst" "true" + "A" "" "" "" "PROP_xcpldFitDesTriMode" "Keeper" + "A" "" "" "" "PROP_xcpldFitDesUnused" "Keeper" + "A" "" "" "" "PROP_xcpldFitDesVolt" "LVCMOS18" + "A" "" "" "" "PROP_xcpldFitTemplate_xpla3" "Optimize Density" + "A" "" "" "" "PROP_xcpldFittimRptOption" "Summary" + "A" "" "" "" "PROP_xcpldUseGlobalClocks" "true" + "A" "" "" "" "PROP_xcpldUseGlobalOutputEnables" "true" + "A" "" "" "" "PROP_xcpldUseGlobalSetReset" "true" + "A" "" "" "" "PROP_xcpldUseLocConst" "Always" + "A" "" "" "" "PROP_xilxBitgCfg_Code" "0xFFFFFFFF" + "A" "" "" "" "PROP_xilxBitgCfg_DCMShutdown" "false" + "A" "" "" "" "PROP_xilxBitgCfg_Done" "Pull Up" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_ASCIIFile" "false" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_BinaryFile" "false" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_BitFile" "true" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_Compress" "false" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_DRC" "true" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_EnableCRC" "true" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_IEEE1532File" "false" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_IEEE1532File_xbr" "false" + "A" "" "" "" "PROP_xilxBitgCfg_GenOpt_ReadBack" "false" + "A" "" "" "" "PROP_xilxBitgCfg_Pgm" "Pull Up" + "A" "" "" "" "PROP_xilxBitgCfg_TCK" "Pull Up" + "A" "" "" "" "PROP_xilxBitgCfg_TDI" "Pull Up" + "A" "" "" "" "PROP_xilxBitgCfg_TDO" "Pull Up" + "A" "" "" "" "PROP_xilxBitgCfg_TMS" "Pull Up" + "A" "" "" "" "PROP_xilxBitgCfg_Unused" "Pull Down" + "A" "" "" "" "PROP_xilxBitgReadBk_Sec" "Enable Readback and Reconfiguration" + "A" "" "" "" "PROP_xilxBitgStart_Clk" "CCLK" + "A" "" "" "" "PROP_xilxBitgStart_Clk_Done" "Default (4)" + "A" "" "" "" "PROP_xilxBitgStart_Clk_DriveDone" "false" + "A" "" "" "" "PROP_xilxBitgStart_Clk_EnOut" "Default (5)" + "A" "" "" "" "PROP_xilxBitgStart_Clk_RelDLL" "Default (NoWait)" + "A" "" "" "" "PROP_xilxBitgStart_Clk_WrtEn" "Default (6)" + "A" "" "" "" "PROP_xilxBitgStart_IntDone" "false" + "A" "" "" "" "PROP_xilxMapAllowLogicOpt" "false" + "A" "" "" "" "PROP_xilxMapCoverMode" "Area" + "A" "" "" "" "PROP_xilxMapDisableRegOrdering" "false" + "A" "" "" "" "PROP_xilxMapPackRegInto" "Off" + "A" "" "" "" "PROP_xilxMapReplicateLogic" "true" + "A" "" "" "" "PROP_xilxMapReportDetail" "false" + "A" "" "" "" "PROP_xilxMapSliceLogicInUnusedBRAMs" "false" + "A" "" "" "" "PROP_xilxMapTimingDrivenPacking" "false" + "A" "" "" "" "PROP_xilxMapTrimUnconnSig" "true" + "A" "" "" "" "PROP_xilxNgdbldIOPads" "false" + "A" "" "" "" "PROP_xilxNgdbldMacro" "" + "A" "" "" "" "PROP_xilxNgdbldNTType" "Timestamp" + "A" "" "" "" "PROP_xilxNgdbldUR" "" + "A" "" "" "" "PROP_xilxNgdbldUnexpBlks" "false" + "A" "" "" "" "PROP_xilxNgdbld_AUL" "false" + "A" "" "" "" "PROP_xilxPARplacerCostTable" "1" + "A" "" "" "" "PROP_xilxPARplacerEffortLevel" "None" + "A" "" "" "" "PROP_xilxPARrouterEffortLevel" "None" + "A" "" "" "" "PROP_xilxPARstrat" "Normal Place and Route" + "A" "" "" "" "PROP_xilxPARuseBondedIO" "false" + "A" "" "" "" "PROP_xilxPostTrceAdvAna" "false" + "A" "" "" "" "PROP_xilxPostTrceEndpointPath" "" + "A" "" "" "" "PROP_xilxPostTrceRpt" "Error Report" + "A" "" "" "" "PROP_xilxPostTrceRptLimit" "3" + "A" "" "" "" "PROP_xilxPostTrceStamp" "" + "A" "" "" "" "PROP_xilxPostTrceTSIFile" "" + "A" "" "" "" "PROP_xilxPostTrceUncovPath" "" + "A" "" "" "" "PROP_xilxPreTrceAdvAna" "false" + "A" "" "" "" "PROP_xilxPreTrceEndpointPath" "" + "A" "" "" "" "PROP_xilxPreTrceRpt" "Verbose Report" + "A" "" "" "" "PROP_xilxPreTrceRptLimit" "3" + "A" "" "" "" "PROP_xilxPreTrceUncovPath" "" + "A" "" "" "" "PROP_xilxSynthAddIObuf" "true" + "A" "" "" "" "PROP_xilxSynthGlobOpt" "AllClockNets" + "A" "" "" "" "PROP_xilxSynthKeepHierarchy" "No" + "A" "" "" "" "PROP_xilxSynthKeepHierarchy_CPLD" "Yes" + "A" "" "" "" "PROP_xilxSynthMacroPreserve" "true" + "A" "" "" "" "PROP_xilxSynthRegBalancing" "No" + "A" "" "" "" "PROP_xilxSynthRegDuplication" "true" + "A" "" "" "" "PROP_xilxSynthXORPreserve" "true" + "A" "" "" "" "PROP_xstAsynToSync" "false" + "A" "" "" "" "PROP_xstAutoBRAMPacking" "false" + "A" "" "" "" "PROP_xstBRAMUtilRatio" "100" + "A" "" "" "" "PROP_xstBusDelimiter" "<>" + "A" "" "" "" "PROP_xstCase" "Maintain" + "A" "" "" "" "PROP_xstCoresSearchDir" "" + "A" "" "" "" "PROP_xstCrossClockAnalysis" "false" + "A" "" "" "" "PROP_xstEquivRegRemoval" "true" + "A" "" "" "" "PROP_xstFsmStyle" "LUT" + "A" "" "" "" "PROP_xstGenerateRTLNetlist" "Yes" + "A" "" "" "" "PROP_xstGenericsParameters" "" + "A" "" "" "" "PROP_xstHierarchySeparator" "/" + "A" "" "" "" "PROP_xstIniFile" "" + "A" "" "" "" "PROP_xstLibSearchOrder" "" + "A" "" "" "" "PROP_xstNetlistHierarchy" "As Optimized" + "A" "" "" "" "PROP_xstOptimizeInsPrimtives" "false" + "A" "" "" "" "PROP_xstPackIORegister" "Auto" + "A" "" "" "" "PROP_xstReadCores" "true" + "A" "" "" "" "PROP_xstSlicePacking" "true" + "A" "" "" "" "PROP_xstSliceUtilRatio" "100" + "A" "" "" "" "PROP_xstUseClockEnable" "Yes" + "A" "" "" "" "PROP_xstUseSyncReset" "Yes" + "A" "" "" "" "PROP_xstUseSyncSet" "Yes" + "A" "" "" "" "PROP_xstUseSynthConstFile" "true" + "A" "" "" "" "PROP_xstUserCompileList" "" + "A" "" "" "" "PROP_xstVeriIncludeDir_Global" "" + "A" "" "" "" "PROP_xstVerilog2001" "true" + "A" "" "" "" "PROP_xstVerilogMacros" "" + "A" "" "" "" "PROP_xstWorkDir" "./xst" + "A" "" "" "" "PROP_xstWriteTimingConstraints" "false" + "A" "" "" "" "PROP_xst_otherCmdLineOptions" "" + "A" "AutoGeneratedView" "VIEW_AnnotatedPreSimulation" "" "PROP_ISimIncreCompilation" "true" + "A" "AutoGeneratedView" "VIEW_AnnotatedPreSimulation" "" "PROP_ISimSpecifyDefMacroAndValue" "" + "A" "AutoGeneratedView" "VIEW_AnnotatedPreSimulation" "" "PROP_ISimSpecifySearchDirectory" "" + "A" "AutoGeneratedView" "VIEW_AnnotatedPreSimulation" "" "PROP_ISimValueRangeCheck" "false" + "A" "AutoGeneratedView" "VIEW_AnnotatedPreSimulation" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_BehavioralFuse" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_Post-ParFuse" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_Post-ParPreSimulation" "" "PROP_ISimCompileForHdlDebug" "true" + "A" "AutoGeneratedView" "VIEW_Post-ParPreSimulation" "" "PROP_ISimIncreCompilation" "true" + "A" "AutoGeneratedView" "VIEW_Post-ParPreSimulation" "" "PROP_ISimSpecifyDefMacroAndValue" "" + "A" "AutoGeneratedView" "VIEW_Post-ParPreSimulation" "" "PROP_ISimSpecifySearchDirectory" "" + "A" "AutoGeneratedView" "VIEW_Post-ParPreSimulation" "" "PROP_ISimValueRangeCheck" "false" + "A" "AutoGeneratedView" "VIEW_Post-ParPreSimulation" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_PostAbstractSimulation" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_ISimCompileForHdlDebug" "true" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_ISimIncreCompilation" "true" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_ISimSpecifyDefMacroAndValue" "" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_ISimSpecifySearchDir" "" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_ISimSpecifySearchDirectory" "" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_ISimValueRangeCheck" "false" + "A" "AutoGeneratedView" "VIEW_PreSimulation" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_TBWPost-ParPreSimulation" "" "PROP_ISimCompileForHdlDebug" "true" + "A" "AutoGeneratedView" "VIEW_TBWPost-ParPreSimulation" "" "PROP_ISimIncreCompilation" "true" + "A" "AutoGeneratedView" "VIEW_TBWPost-ParPreSimulation" "" "PROP_ISimSpecifyDefMacroAndValue" "" + "A" "AutoGeneratedView" "VIEW_TBWPost-ParPreSimulation" "" "PROP_ISimSpecifySearchDirectory" "" + "A" "AutoGeneratedView" "VIEW_TBWPost-ParPreSimulation" "" "PROP_ISimValueRangeCheck" "false" + "A" "AutoGeneratedView" "VIEW_TBWPreSimulation" "" "PROP_ISimCompileForHdlDebug" "true" + "A" "AutoGeneratedView" "VIEW_TBWPreSimulation" "" "PROP_ISimIncreCompilation" "true" + "A" "AutoGeneratedView" "VIEW_TBWPreSimulation" "" "PROP_ISimSpecifyDefMacroAndValue" "" + "A" "AutoGeneratedView" "VIEW_TBWPreSimulation" "" "PROP_ISimSpecifySearchDirectory" "" + "A" "AutoGeneratedView" "VIEW_TBWPreSimulation" "" "PROP_ISimValueRangeCheck" "false" + "A" "AutoGeneratedView" "VIEW_TBWPreSimulation" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_XSTPreSynthesis" "" "PROP_TopDesignUnit" "" + "A" "AutoGeneratedView" "VIEW_XSTPreSynthesis" "" "PROP_xstVeriIncludeDir" "" + "B" "" "" "" "PROP_DevFamily" "Spartan3E" + "B" "" "" "" "PROP_FitterOptimization_xpla3" "Density" + "B" "" "" "" "PROP_ISimCustomCompilationOrderFile" "" + "B" "" "" "" "PROP_ISimCustomSimCmdFileName_behav_tb" "" + "B" "" "" "" "PROP_ISimCustomSimCmdFileName_behav_tbw" "" + "B" "" "" "" "PROP_ISimCustomSimCmdFileName_gen_tbw" "" + "B" "" "" "" "PROP_ISimCustomSimCmdFileName_par_tb" "" + "B" "" "" "" "PROP_ISimCustomSimCmdFileName_par_tbw" "" + "B" "" "" "" "PROP_ISimGenVCDFile_par_tb" "false" + "B" "" "" "" "PROP_ISimGenVCDFile_par_tbw" "false" + "B" "" "" "" "PROP_ISimSimulationRun_behav_tb" "true" + "B" "" "" "" "PROP_ISimSimulationRun_behav_tbw" "true" + "B" "" "" "" "PROP_ISimSimulationRun_par_tb" "true" + "B" "" "" "" "PROP_ISimSimulationRun_par_tbw" "true" + "B" "" "" "" "PROP_ISimStoreAllSignalTransitions_behav_tb" "false" + "B" "" "" "" "PROP_ISimStoreAllSignalTransitions_behav_tbw" "false" + "B" "" "" "" "PROP_ISimStoreAllSignalTransitions_par_tb" "false" + "B" "" "" "" "PROP_ISimStoreAllSignalTransitions_par_tbw" "false" + "B" "" "" "" "PROP_MapEffortLevel" "Medium" + "B" "" "" "" "PROP_MapLogicOptimization" "false" + "B" "" "" "" "PROP_MapPlacerCostTable" "1" + "B" "" "" "" "PROP_MapPowerReduction" "false" + "B" "" "" "" "PROP_MapRegDuplication" "false" + "B" "" "" "" "PROP_SimModelRenTopLevInstTo" "UUT" + "B" "" "" "" "PROP_Simulator" "ISE Simulator (VHDL/Verilog)" + "B" "" "" "" "PROP_SmartGuideFileName" "_guide.ncd" + "B" "" "" "" "PROP_SynthConstraintsFile" "" + "B" "" "" "" "PROP_SynthMuxStyle" "Auto" + "B" "" "" "" "PROP_SynthRAMStyle" "Auto" + "B" "" "" "" "PROP_XPowerOptAdvancedVerboseRpt" "false" + "B" "" "" "" "PROP_XPowerOptMaxNumberLines" "1000" + "B" "" "" "" "PROP_impactPort" "Auto - default" + "B" "" "" "" "PROP_mapTimingMode" "Non Timing Driven" + "B" "" "" "" "PROP_parGenAsyDlyRpt" "false" + "B" "" "" "" "PROP_parGenClkRegionRpt" "false" + "B" "" "" "" "PROP_parGenSimModel" "false" + "B" "" "" "" "PROP_parGenTimingRpt" "true" + "B" "" "" "" "PROP_parMpprNodelistFile" "" + "B" "" "" "" "PROP_parMpprParIterations" "3" + "B" "" "" "" "PROP_parMpprResultsDirectory" "" + "B" "" "" "" "PROP_parMpprResultsToSave" "" + "B" "" "" "" "PROP_parPowerReduction" "false" + "B" "" "" "" "PROP_parTimingMode" "Performance Evaluation" + "B" "" "" "" "PROP_xcpldFitDesInReg_xbr" "true" + "B" "" "" "" "PROP_xcpldFitDesPtermLmt_xbr" "28" + "B" "" "" "" "PROP_xilxBitgCfg_GenOpt_DbgBitStr" "false" + "B" "" "" "" "PROP_xilxBitgCfg_GenOpt_LogicAllocFile" "false" + "B" "" "" "" "PROP_xilxBitgCfg_GenOpt_MaskFile" "false" + "B" "" "" "" "PROP_xilxBitgReadBk_GenBitStr" "false" + "B" "" "" "" "PROP_xilxMapPackfactor" "100" + "B" "" "" "" "PROP_xilxPAReffortLevel" "Standard" + "B" "" "" "" "PROP_xstMoveFirstFfStage" "true" + "B" "" "" "" "PROP_xstMoveLastFfStage" "true" + "B" "" "" "" "PROP_xstROMStyle" "Auto" + "B" "" "" "" "PROP_xstSafeImplement" "No" + "B" "AutoGeneratedView" "VIEW_Map" "" "PROP_ParSmartGuideFileName" "_guide.ncd" + "B" "AutoGeneratedView" "VIEW_Translation" "" "PROP_MapSmartGuideFileName" "_guide.ncd" + "C" "" "" "" "PROP_CompxlibLang" "VHDL" + "C" "" "" "" "PROP_CompxlibSimPath" "Search in Path" + "C" "" "" "" "PROP_DevDevice" "xc3s500e" + "C" "" "" "" "PROP_DevFamilyPMName" "spartan3e" + "C" "" "" "" "PROP_ISimSimulationRunTime_behav_tb" "1000 ns" + "C" "" "" "" "PROP_ISimSimulationRunTime_behav_tbw" "1000 ns" + "C" "" "" "" "PROP_ISimSimulationRunTime_par_tb" "1000 ns" + "C" "" "" "" "PROP_ISimSimulationRunTime_par_tbw" "1000 ns" + "C" "" "" "" "PROP_ISimVCDFileName_par_tb" "xpower.vcd" + "C" "" "" "" "PROP_ISimVCDFileName_par_tbw" "xpower.vcd" + "C" "" "" "" "PROP_MapExtraEffort" "None" + "C" "" "" "" "PROP_MapPowerActivityFile" "" + "C" "" "" "" "PROP_SimModelGenMultiHierFile" "false" + "C" "" "" "" "PROP_parPowerActivityFile" "" + "C" "" "" "" "PROP_xilxPARextraEffortLevel" "None" + "D" "" "" "" "PROP_CompxlibUni9000Lib" "true" + "D" "" "" "" "PROP_CompxlibUniSimLib" "true" + "D" "" "" "" "PROP_DevPackage" "fg320" + "D" "" "" "" "PROP_Synthesis_Tool" "XST (VHDL/Verilog)" + "E" "" "" "" "PROP_DevSpeed" "-5" + "E" "" "" "" "PROP_PreferredLanguage" "VHDL" + "F" "" "" "" "PROP_ChangeDevSpeed" "-5" + "F" "" "" "" "PROP_SimModelTarget" "VHDL" + "F" "" "" "" "PROP_tbwTestbenchTargetLang" "VHDL" + "F" "" "" "" "PROP_xilxPostTrceSpeed" "-5" + "F" "" "" "" "PROP_xilxPreTrceSpeed" "-5" + "G" "" "" "" "PROP_SimModelAutoInsertGlblModuleInNetlist" "true" + "G" "" "" "" "PROP_SimModelGenArchOnly" "false" + "G" "" "" "" "PROP_SimModelIncSdfAnnInVerilogFile" "true" + "G" "" "" "" "PROP_SimModelIncSimprimInVerilogFile" "false" + "G" "" "" "" "PROP_SimModelIncUnisimInVerilogFile" "false" + "G" "" "" "" "PROP_SimModelIncUselibDirInVerilogFile" "false" + "G" "" "" "" "PROP_SimModelNoEscapeSignal" "false" + "G" "" "" "" "PROP_SimModelOutputExtIdent" "false" + "G" "" "" "" "PROP_SimModelRenTopLevArchTo" "Structure" + "G" "" "" "" "PROP_SimModelRenTopLevMod" "" + "G" "" "" "" "PROP_bencherPostMapTestbenchName" "" + "G" "" "" "" "PROP_bencherPostParTestbenchName" "" + "G" "" "" "" "PROP_bencherPostXlateTestbenchName" "" + "G" "" "" "" "PROP_netgenPostMapSimModelName" "_map.vhd" + "G" "" "" "" "PROP_netgenPostParSimModelName" "_timesim.vhd" + "G" "" "" "" "PROP_netgenPostSynthesisSimModelName" "_synthesis.vhd" + "G" "" "" "" "PROP_netgenPostXlateSimModelName" "_translate.vhd" + "G" "AutoGeneratedView" "VIEW_Map" "" "PROP_PostMapSimModelName" "_map.vhd" + "G" "AutoGeneratedView" "VIEW_Par" "" "PROP_PostParSimModelName" "_timesim.vhd" + "G" "AutoGeneratedView" "VIEW_Post-MapAbstractSimulation" "" "PROP_tbwPostMapTestbenchName" "" + "G" "AutoGeneratedView" "VIEW_Post-ParAbstractSimulation" "" "PROP_tbwPostParTestbenchName" "" + "G" "AutoGeneratedView" "VIEW_Post-TranslateAbstractSimulation" "" "PROP_tbwPostXlateTestbenchName" "" + "G" "AutoGeneratedView" "VIEW_Structural" "" "PROP_PostSynthesisSimModelName" "_synthesis.vhd" + "G" "AutoGeneratedView" "VIEW_Translation" "" "PROP_PostXlateSimModelName" "_translate.vhd" + "H" "" "" "" "PROP_SimModelBringOutGsrNetAsAPort" "false" + "H" "" "" "" "PROP_SimModelBringOutGtsNetAsAPort" "false" + "H" "" "" "" "PROP_SimModelPathUsedInSdfAnn" "Default" + "H" "" "" "" "PROP_netgenRenameTopLevEntTo" "" + "I" "" "" "" "PROP_SimModelGsrPortName" "GSR_PORT" + "I" "" "" "" "PROP_SimModelGtsPortName" "GTS_PORT" + "I" "" "" "" "PROP_SimModelRocPulseWidth" "100" + "I" "" "" "" "PROP_SimModelTocPulseWidth" "0"} + + HandleException { + RestoreProcessProperties $iProjHelper $process_props + } "A problem occured while restoring process properties." + + # library names and their members + set libraries { + } + + HandleException { + RestoreSourceLibraries $iProjHelper $libraries + } "A problem occured while restoring source libraries." + + # partition names for recreation + set partition_names { + } + + HandleException { + RestorePartitions $partition_names + } "A problem occured while restoring partitions." + + # Close the facilitator project. + CloseFacilProject $iProjHelper + + # cd into the project directory before trying to open thr project + cd $project_dir + + set proj_file_full_path [file join $project_dir $project_file] + INFO "Opening restored project file \"$proj_file_full_path\" ..." + + # Open the restored project in the user's client application, + # which will either be the Projnav GUI or xtclsh. + project open $project_file + + # Let the user know about the backed up project file. + INFO "The project \"$project_file\" was successfully recovered and opened." + if {$wasBackedUp} { + INFO "" + INFO "The original project was renamed as \"$backup_file\"." + INFO "Please open a Technical Support WebCase at" + INFO "www.xilinx.com/support/clearexpress/websupport.htm" + INFO "and submit this file, along with the project source files, for evaluation." + } +} +