]> AND Private Git Repository - blast.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
added sources managment
authorsdomas <sdomas@caolila.iut-bm.univ-fcomte.fr>
Thu, 22 Mar 2018 10:05:50 +0000 (11:05 +0100)
committersdomas <sdomas@caolila.iut-bm.univ-fcomte.fr>
Thu, 22 Mar 2018 10:05:50 +0000 (11:05 +0100)
23 files changed:
BlockImplementation.h
ExternalSource.cpp [new file with mode: 0644]
ExternalSource.h [new file with mode: 0644]
MainWindow.cpp
Parameters.cpp
Parameters.h
blast.cpp
blast.creator.user
blast.files
blastconfig.xml
blastconfig.xsd
implementation.xsd
lib/implementations/boxfilter_3x3_impl.xml
lib/implementations/impls.bmf
lib/implementations/rgb3sx8_to_ycbcr_3DSP_impl.xml
lib/sources/mult_accum.ngc [new file with mode: 0644]
lib/sources/mult_accum.vhd [new file with mode: 0644]
lib/sources/ram_dp_1024x8.ngc [new file with mode: 0644]
lib/sources/ram_dp_1024x8.vhd [new file with mode: 0644]
lib/sources/ram_dp_2048x8.ngc [new file with mode: 0644]
lib/sources/ram_dp_2048x8.vhd [new file with mode: 0644]
lib/sources/tools_pkg.vhd [new file with mode: 0644]
object-files.txt

index fb9c77c92be6a276b97bce1afedbb5d32ebd0dcb..aa08ed970d002720112d0824c96244de0ba1d0b9 100644 (file)
@@ -17,7 +17,6 @@ class ArithmeticEvaluator;
 #include "Exception.h"\r
 class Exception;\r
 \r
 #include "Exception.h"\r
 class Exception;\r
 \r
-\r
 using namespace std;\r
 using namespace Qt;\r
 \r
 using namespace std;\r
 using namespace Qt;\r
 \r
@@ -54,12 +53,14 @@ public:
   void loadPatterns(QDomElement &root) throw(Exception);\r
   bool checkPatterns();  \r
   \r
   void loadPatterns(QDomElement &root) throw(Exception);\r
   bool checkPatterns();  \r
   \r
-\r
+  inline void addSource(QString file) { sources.append(file); }\r
 private:  \r
   QString xmlFile;\r
   QString referenceXml;\r
   QString referenceMd5;\r
 private:  \r
   QString xmlFile;\r
   QString referenceXml;\r
   QString referenceMd5;\r
-  QString nameEnt, line;\r
+\r
+  QList<QString> sources;\r
+\r
   QMap<QString, int> paramMap;\r
   ArithmeticEvaluator* evaluator;\r
   ReferenceBlock* reference;\r
   QMap<QString, int> paramMap;\r
   ArithmeticEvaluator* evaluator;\r
   ReferenceBlock* reference;\r
diff --git a/ExternalSource.cpp b/ExternalSource.cpp
new file mode 100644 (file)
index 0000000..b0f8b32
--- /dev/null
@@ -0,0 +1,9 @@
+#include "ExternalSource.h"\r
+\r
+\r
+ExternalSource::ExternalSource(const QString& _name, const QString& _file, int _type) {\r
+\r
+  name = _name;\r
+  file = _file;\r
+  type = _type;\r
+}\r
diff --git a/ExternalSource.h b/ExternalSource.h
new file mode 100644 (file)
index 0000000..5c244c4
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef __EXTERNALSOURCE_H__\r
+#define __EXTERNALSOURCE_H__\r
+\r
+#include <iostream>\r
+#include <fstream>\r
+\r
+#include <QtCore>\r
+\r
+\r
+using namespace std;\r
+using namespace Qt;\r
+\r
+class ExternalSource {\r
+\r
+public :\r
+\r
+  enum SourceType { Code = 1, Package, Netlist, InitFile};\r
+\r
+  ExternalSource(const QString& _name, const QString& _file, int _type = Code);\r
+\r
+  // getters\r
+  inline QString getName() { return name; }\r
+  inline QString getFile() { return file; }\r
+  inline int getType() { return type; }\r
+\r
+private:\r
+  QString name;\r
+  QString file;\r
+  int type;\r
+};\r
+\r
+#endif // __EXTERNALSOURCE_H__\r
+\r
index 683ba3d03c2e4d0154eb489634d9aee4ed084451..ad3648470f9a9e1d1df283051e7c2ffaee5c6a5c 100644 (file)
@@ -24,6 +24,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
   try {    
     params->loadBlastConfiguration("blastconfig.xml");
 
   try {    
     params->loadBlastConfiguration("blastconfig.xml");
 
+    // first load external sources
+    params->loadSources();
+
     if (!QFileInfo::exists(params->refLib)) {
       params->loadReferencesFromXml();
       int ret = QMessageBox::question(this,tr("Building references library"),tr("The reference block library does not exists.\n References have been read directly from the xml descriptions of blocks.\n It can be saved into a library in order to start application faster. "), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok);
     if (!QFileInfo::exists(params->refLib)) {
       params->loadReferencesFromXml();
       int ret = QMessageBox::question(this,tr("Building references library"),tr("The reference block library does not exists.\n References have been read directly from the xml descriptions of blocks.\n It can be saved into a library in order to start application faster. "), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok);
index 46437c34bc0dcd1aa3cd36bca0ce9cf98379648f..c903f5d94be772d400ded37c64e1de0519b211b7 100644 (file)
@@ -574,10 +574,27 @@ void Parameters::loadBlastConfiguration(QString confFile) throw(Exception) {
     implPathes.append(path);\r
     cout << "impl path : " << qPrintable(path) << endl << endl;\r
   }\r
     implPathes.append(path);\r
     cout << "impl path : " << qPrintable(path) << endl << endl;\r
   }\r
+\r
+  QDomElement eltSource = eltImpl.nextSiblingElement("sources");\r
+  nbPathesStr = eltSource.attribute("nb","none");\r
+  nbPathes = nbPathesStr.toInt(&ok);\r
+  QDomNodeList listSourceDir = eltSource.elementsByTagName("source_lib");\r
+  if ((!ok) || (nbPathes != listSourceDir.size())) throw(Exception(CONFIGFILE_CORRUPTED));\r
+\r
+  for(int i=0;i<listSourceDir.size();i++) {\r
+    QDomNode nodeSourceDir = listSourceDir.at(i);\r
+    QDomElement eltSourceDir = nodeSourceDir.toElement();\r
+    if (eltSourceDir.isNull()) throw(Exception(CONFIGFILE_CORRUPTED));\r
+    QString path = eltSourceDir.attribute("path","none");\r
+    if (path == "none") throw(Exception(CONFIGFILE_CORRUPTED));\r
+    sourcePathes.append(path);\r
+    cout << "core path : " << qPrintable(path) << endl << endl;\r
+  }\r
+\r
   // getting elt = the element <defaults>\r
   // for each child element, initialize the associated attributes of Parameters\r
 \r
   // getting elt = the element <defaults>\r
   // for each child element, initialize the associated attributes of Parameters\r
 \r
-  QDomElement eltDefaults = eltImpl.nextSiblingElement("defaults");\r
+  QDomElement eltDefaults = eltSource.nextSiblingElement("defaults");\r
 \r
   QDomElement eltBlocks = eltDefaults.firstChildElement("blocks");\r
   QString attributeStr = eltBlocks.attribute("width", "none");\r
 \r
   QDomElement eltBlocks = eltDefaults.firstChildElement("blocks");\r
   QString attributeStr = eltBlocks.attribute("width", "none");\r
@@ -807,6 +824,22 @@ void Parameters::loadImplementationsFromXml() throw(Exception) {
       QString refXml = implRoot.attribute("ref_name","none");\r
       QString refMd5 = implRoot.attribute("ref_md5","none");\r
       BlockImplementation* impl = new BlockImplementation(fileName,refXml,refMd5);\r
       QString refXml = implRoot.attribute("ref_name","none");\r
       QString refMd5 = implRoot.attribute("ref_md5","none");\r
       BlockImplementation* impl = new BlockImplementation(fileName,refXml,refMd5);\r
+\r
+      QDomNodeList archNode = implRoot.elementsByTagName("architecture");\r
+\r
+      if (archNode.isEmpty()) {\r
+        cout << "impl has no architecture" << endl;\r
+        return;\r
+      }\r
+      QDomElement archElt = archNode.at(0).toElement();\r
+      QString compList = archElt.attribute("comp_list","none");\r
+      if (compList != "none") {\r
+        QStringList compos = compList.split(",");\r
+        foreach(QString s, compos) {\r
+          impl->addSource(s);\r
+        }\r
+      }\r
+\r
       try {\r
         impl->loadPatterns(implRoot);\r
       }\r
       try {\r
         impl->loadPatterns(implRoot);\r
       }\r
@@ -908,6 +941,64 @@ void Parameters::saveImplementationsToLib() throw(Exception) {
   libFile.close();\r
 \r
 }\r
   libFile.close();\r
 \r
 }\r
+\r
+\r
+void Parameters::loadSources() throw(Exception) {\r
+\r
+  for(int i=0;i<sourcePathes.size();i++) {\r
+    cout << "analyzing " << qPrintable(sourcePathes.at(i)) << endl;\r
+    QDir dir(sourcePathes.at(i));\r
+    QStringList filter;\r
+    filter << "*.vhd";\r
+    dir.setNameFilters(filter);\r
+    QStringList list = dir.entryList();\r
+    for(int j=0;j<list.size();j++) {\r
+      QString fileName = dir.absolutePath();\r
+      fileName.append("/"+list.at(j));\r
+\r
+      cout << "parsing " << qPrintable(fileName) << " ... ";\r
+      QFile srcXML(fileName);\r
+      if (!srcXML.open(QIODevice::ReadOnly)) {\r
+        throw(Exception(IMPLFILE_NOACCESS));\r
+      }\r
+      QTextStream in(&srcXML);\r
+\r
+      QString line = in.readLine();\r
+      while (!line.isNull()) {\r
+        if (line.contains("package", Qt::CaseInsensitive)) {\r
+          QRegularExpression rxPack("^package (.+) is$",QRegularExpression::CaseInsensitiveOption);\r
+          QRegularExpressionMatch matchPack = rxPack.match(line);\r
+          if (matchPack.hasMatch()) {\r
+            QString packName = matchPack.captured(1);\r
+            cout << "found package " << qPrintable(packName) << endl;\r
+            availableSources.append(new ExternalSource(packName,fileName,ExternalSource::Package));\r
+          }\r
+        }\r
+        else if (line.contains("entity", Qt::CaseInsensitive)) {\r
+          QRegularExpression rxEnt("^entity (.+) is$",QRegularExpression::CaseInsensitiveOption);\r
+          QRegularExpressionMatch matchEnt = rxEnt.match(line);\r
+          if (matchEnt.hasMatch()) {\r
+            QString entityName = matchEnt.captured(1);\r
+            cout << "found entity " << qPrintable(entityName) << endl;\r
+            availableSources.append(new ExternalSource(entityName,fileName,ExternalSource::Code));\r
+          }\r
+        }\r
+        line = in.readLine();\r
+      }\r
+      srcXML.close();\r
+      cout << "OK" << endl;\r
+\r
+    }\r
+  }\r
+}\r
+\r
+ExternalSource* Parameters::searchSourceByName(const QString& name) {\r
+  foreach(ExternalSource* s, availableSources) {\r
+    if (s->getName() == name) return s;\r
+  }\r
+  return NULL;\r
+}\r
+\r
 void Parameters::addAvailableBlock(ReferenceBlock *block) {\r
   availableBlocks.append(block);\r
   foreach (int id,block->getCategories()) {\r
 void Parameters::addAvailableBlock(ReferenceBlock *block) {\r
   availableBlocks.append(block);\r
   foreach (int id,block->getCategories()) {\r
index f03ca0a1f9363d4b821b4df3c9fbf4fe1cb4fab0..03291305b1030b2cb331b17469f97865ba4c8d27 100644 (file)
@@ -24,6 +24,7 @@ class Graph;
 class GroupWidget;\r
 \r
 #include "BlockImplementation.h"\r
 class GroupWidget;\r
 \r
 #include "BlockImplementation.h"\r
+#include "ExternalSource.h"\r
 \r
 #include "Exception.h"\r
 class Exception;\r
 \r
 #include "Exception.h"\r
 class Exception;\r
@@ -82,6 +83,7 @@ public :
 \r
   // others\r
   static QString normalizeName(const QString& name);\r
 \r
   // others\r
   static QString normalizeName(const QString& name);\r
+  ExternalSource* searchSourceByName(const QString& name);\r
 \r
   /***************************************************\r
     attributes that are general to the application\r
 \r
   /***************************************************\r
     attributes that are general to the application\r
@@ -89,8 +91,11 @@ public :
   BlockLibraryTree* categoryTree;\r
   QList<QString> refPathes;\r
   QList<QString> implPathes;\r
   BlockLibraryTree* categoryTree;\r
   QList<QString> refPathes;\r
   QList<QString> implPathes;\r
+  QList<QString> sourcePathes;\r
   QList<ReferenceBlock*> availableBlocks;\r
   QList<BlockImplementation*> availableImplementations;\r
   QList<ReferenceBlock*> availableBlocks;\r
   QList<BlockImplementation*> availableImplementations;\r
+  QList<ExternalSource*> availableSources;\r
+\r
   ReferenceBlock* delayRef;\r
   BlockImplementation* delayImpl;  \r
 \r
   ReferenceBlock* delayRef;\r
   BlockImplementation* delayImpl;  \r
 \r
@@ -157,6 +162,8 @@ public :
   void loadImplementationsFromLib() throw(Exception);\r
   void saveImplementationsToLib() throw(Exception);\r
 \r
   void loadImplementationsFromLib() throw(Exception);\r
   void saveImplementationsToLib() throw(Exception);\r
 \r
+  void loadSources() throw(Exception);\r
+\r
   void addAvailableBlock(ReferenceBlock *block);  \r
   void parametersValidation();\r
   void connectionsValidation();\r
   void addAvailableBlock(ReferenceBlock *block);  \r
   void parametersValidation();\r
   void connectionsValidation();\r
index b205eb29c6dbe45ece614c421c44a09f0fcb8684..35dd592d878c9b49c1e1aec8c4aab5d186ea1a67 100644 (file)
--- a/blast.cpp
+++ b/blast.cpp
@@ -6,13 +6,12 @@
 using namespace std;
 using namespace Qt;
 
 using namespace std;
 using namespace Qt;
 
-int main(int argc, char *argv[])
-{
+int main(int argc, char *argv[]) {
+
     QApplication a(argc, argv);
     MainWindow w;
 
     w.show();
 
     return a.exec();
     QApplication a(argc, argv);
     MainWindow w;
 
     w.show();
 
     return a.exec();
-
 }
 }
index 1aea169400b81fdabdeab41c20901b2a515257d3..8441c31feb4fbdd080ebbd4378d0dddb05dd7a01 100644 (file)
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.2.0, 2018-03-21T17:45:46. -->
+<!-- Written by QtCreator 4.2.0, 2018-03-22T11:05:23. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
-  <value type="QByteArray">{3701e197-5b6c-48ea-9e98-a6cf6de18672}</value>
+  <value type="QByteArray">{94112477-caab-4897-8f75-5f412f2c883a}</value>
  </data>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
  </data>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -19,7 +19,7 @@
    <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
     <value type="QString" key="language">Cpp</value>
     <valuemap type="QVariantMap" key="value">
    <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
     <value type="QString" key="language">Cpp</value>
     <valuemap type="QVariantMap" key="value">
-     <value type="QByteArray" key="CurrentPreferences">qt2</value>
+     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
     </valuemap>
    </valuemap>
    <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
     </valuemap>
    </valuemap>
    <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
@@ -31,7 +31,7 @@
    <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
    <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
    <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
    <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
    <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
    <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
-   <value type="int" key="EditorConfiguration.IndentSize">2</value>
+   <value type="int" key="EditorConfiguration.IndentSize">4</value>
    <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
    <value type="int" key="EditorConfiguration.MarginColumn">80</value>
    <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
    <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
    <value type="int" key="EditorConfiguration.MarginColumn">80</value>
    <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
    <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
    <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
    <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
    <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
    <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
    <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
-   <value type="int" key="EditorConfiguration.TabSize">4</value>
-   <value type="bool" key="EditorConfiguration.UseGlobal">false</value>
+   <value type="int" key="EditorConfiguration.TabSize">8</value>
+   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
    <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
    <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
    <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
    <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
    <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
    <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
-   <value type="bool" key="EditorConfiguration.cleanWhitespace">false</value>
+   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
    <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
   </valuemap>
  </data>
    <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
   </valuemap>
  </data>
@@ -61,7 +61,7 @@
   <valuemap type="QVariantMap">
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
   <valuemap type="QVariantMap">
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ed04208c-8774-456b-99b9-4a02094ca7a4}</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{c934e180-ebc6-41ed-be82-502cc94f41f6}</value>
    <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
     <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
     <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
     <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
     <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
-    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">0</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
     <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
     <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
     <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
     <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
     <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
     <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
     <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
     <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
     <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
     <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
-    <value type="bool" key="ProjectExplorer.CustomExecutableRunConfiguration.UseTerminal">false</value>
     <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
     <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Exécutable personnalisé</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Custom Executable</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
     <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
     <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
index 2ef276801fc588e1f66db71501cb25907d0d5923..01b85e5d8fa1cb2040d102e39b20a191535cc8d6 100755 (executable)
@@ -1,3 +1,5 @@
+ExternalSource.h
+ExternalSource.cpp
 CustomDialog.h
 CustomDialog.cpp
 NewProjectDialog.h
 CustomDialog.h
 CustomDialog.cpp
 NewProjectDialog.h
index 0abb6372024536cc5daa04214e891d607d85568a..354465035fdc6a530bb2b8c9dc949108b4ec5b08 100644 (file)
     <impl_lib path="/home/sdomas/Projet/Blast/code/blast/lib/implementations" />
   </implementations>
 
     <impl_lib path="/home/sdomas/Projet/Blast/code/blast/lib/implementations" />
   </implementations>
 
+  <sources nb="1">
+    <source_lib path="/home/sdomas/Projet/Blast/code/blast/lib/sources" />
+  </sources>  
+
   <defaults>
     <blocks width="175" height="125" font="Helvetica" font_size="14" />
     <interfaces linelength="10" width="5" height="10" font="Helvetica" font_size="10" />
   <defaults>
     <blocks width="175" height="125" font="Helvetica" font_size="14" />
     <interfaces linelength="10" width="5" height="10" font="Helvetica" font_size="10" />
index ef4a2fad26acd8355c4612c1b64551e48d8b76ee..6ad294aa6baf8fdb4eb49f3237a9b4dde3cc0d5d 100644 (file)
             <xs:element ref="categories"/>
             <xs:element ref="references"/>
            <xs:element ref="implementations"/>
             <xs:element ref="categories"/>
             <xs:element ref="references"/>
            <xs:element ref="implementations"/>
+           <xs:element ref="sources"/>     
             <xs:element ref="defaults" />
        </xs:sequence>
     </xs:group>
             <xs:element ref="defaults" />
        </xs:sequence>
     </xs:group>
       </xs:complexType>
     </xs:element>
 
       </xs:complexType>
     </xs:element>
 
+    <xs:element name="source_lib">
+      <xs:complexType>
+       <xs:attribute ref="path" use="required"/>
+      </xs:complexType>
+    </xs:element>
+
     <xs:element name="blocks">
        <xs:complexType>
            <xs:attributeGroup ref="blocksAttrGroup" />
     <xs:element name="blocks">
        <xs:complexType>
            <xs:attributeGroup ref="blocksAttrGroup" />
         </xs:complexType>
     </xs:element>
 
         </xs:complexType>
     </xs:element>
 
+    <xs:element name="sources">
+        <xs:complexType >
+            <xs:sequence>
+                <xs:element ref="source_lib" maxOccurs="unbounded" />
+            </xs:sequence>
+           <xs:attribute ref="nb" use="required"/>
+        </xs:complexType>
+    </xs:element>
+    
     <xs:element name="defaults">
         <xs:complexType>
            <xs:group ref="defaultsElmtGroup" />
     <xs:element name="defaults">
         <xs:complexType>
            <xs:group ref="defaultsElmtGroup" />
index c8385148e3ef1b53be83f50239a81884c519f98a..a42059f55daee4fcce736c8d06c27848b61acbeb 100644 (file)
@@ -15,6 +15,8 @@
     <xs:attribute name="value" type="xs:string" />
     <xs:attribute name="pattern" type="xs:string"/>
     <xs:attribute name="counter" type="xs:string"/>
     <xs:attribute name="value" type="xs:string" />
     <xs:attribute name="pattern" type="xs:string"/>
     <xs:attribute name="counter" type="xs:string"/>
+    <xs:attribute name="comp_list" type="xs:string"/>
+    
 
     <!-- déclaration des groupes d'éléments -->
 
 
     <!-- déclaration des groupes d'éléments -->
 
          <xs:attribute ref="use" />
        </xs:complexType>
     </xs:element>
          <xs:attribute ref="use" />
        </xs:complexType>
     </xs:element>
-        
-    <xs:element name="architecture" type="xs:string" />
+
+    <xs:element name="architecture">
+      <xs:complexType>
+       <xs:simpleContent>
+         <xs:extension base="xs:string">
+           <xs:attribute ref="comp_list" />
+         </xs:extension>
+       </xs:simpleContent>
+      </xs:complexType>
+    </xs:element> 
 
     <xs:element name="patterns">
        <xs:complexType>
 
     <xs:element name="patterns">
        <xs:complexType>
index 50d2d0c589e10eb37028d6ebab0e7fbceca4f9a1..40f260f6bb43719cfa37245475e9fafaa1112528 100644 (file)
@@ -13,7 +13,7 @@
       <package name="numeric_std" use="all"/>
     </library>
   </libraries>
       <package name="numeric_std" use="all"/>
     </library>
   </libraries>
-  <architecture>
+  <architecture comp_list="ram_dp_1024x8">
 component ram_dp_1024x8
 port (
 clka : in std_logic;
 component ram_dp_1024x8
 port (
 clka : in std_logic;
index b69078a4664468635a51c6942ba6b7fc55fb2126..26cb30254bf85e13c2c49c733f624827b959ee0d 100644 (file)
Binary files a/lib/implementations/impls.bmf and b/lib/implementations/impls.bmf differ
index e186114e0ab6008e76f6880177b1c1dab1cef349..e9415791a2448b527085f8b89fe09401f9a352d2 100644 (file)
@@ -13,7 +13,7 @@
       <package name="numeric_std" use="all"/>
     </library>
   </libraries>
       <package name="numeric_std" use="all"/>
     </library>
   </libraries>
-  <architecture>
+  <architecture comp_list="mult_accum">
 component mult_accum
 port (
 @{clk} : in std_logic;
 component mult_accum
 port (
 @{clk} : in std_logic;
diff --git a/lib/sources/mult_accum.ngc b/lib/sources/mult_accum.ngc
new file mode 100644 (file)
index 0000000..a846bd9
--- /dev/null
@@ -0,0 +1,3 @@
+XILINX-XDB 0.1 STUB 0.1 ASCII
+XILINX-XDM V1.6e
+$3`f\7f44<,[o}e~g`n;"2*73>(-80!<??;0:9MKVR\3K7=:4?>0285=<NFY__6O2>7;2=56=603CE\XZ5BBKM841=87;;7<65IORVP?B;9>0;2<>4198JJUSS2h6:;7>11192<?OIX\^1n1?8:1<21>7?2F__\XZ5BBMVP970294:=6=9:NWWTPR=E59>6=0>0:6;>LHW]]0H09950?30?1>=AGZ^X7^LIO>73?69981?47AZTQWW>U:3?3:5=85;8;MVPUSS2YIDYY2;7;2=54=303E^X][[:R>73?69981?47AZTQWW>v:3?3:5j68|ly334ca`<1>&?<=48;KMTPR=GYGDHH28:1<6?D6UMN?0M<\JG59B85823H6:<3;4A=32:0=F488596O312<6?D:6<7?0M1?:>49B8409?2K7=:4?>49B8419<2K7=3:4A=0=0>G;;7>0M1:14:C?1;2<I5<586O37?68E9>9<2K753;4B1PFC0=E9[OL86L30?78F9776<1I0<?15:@?57823K6:?3;4B=37:0=E48?596L317<4?G:6?3:596L316<7?G:66=1I0?0;;C>0:1=E4=4?7O2:>59A83833K6<295M<9<7?G:>6>1IOD@30?:8FFOI48:546LLIO>25;><JJCE0<<18:@@MK:6;720NNGA<06=<>DDAG6:9364BBKM8409i2HHEC2>7;2=<>DDAG6:;394BBKM84803KIBB1<17:@@MK:46>1IOD@34?58FFOI4<4<7OMFN=4=3>DDAG6<2:5MCHL?<;1<JJCE0407;CALQQ:7601IOB[[<02==>DDG\^7=<06;CALQQ:6:730NNAZT=30:<=EKF__0<:19:@@KPR;9<427OM@UU>22;d<JJE^X1?8:1<:?GEH]]6:;364BBMVP97902HHCXZ32?:8FFIR\59546LLOTV?0;><JJE^X1;18:@@KPR;>720NNAZT=5=<>DDG\^74364BBMVP9?902H^_RGAFN48F\VF[Z>0O1>15:A?55823J6:=3;4C=31:0=D489596M315<6?F:6=7?0O1?9>49@8419=2I7=50:;B>2=;2<K5;596M321<6?F:597?0O1<=>49@8759=2I7>90:;B>11;3<K58=285L<35=1>E;:14>7N2=9?68G949=2I7?=0:;B>05;3<K599285L<21=1>E;;=4>7N2<5?78G9516<1H0>915:A?7=823J6853:4C=1=1>E;<94>7N2;1?78G9256<1H09=15:A?01823J6?93;4C=65:2=D4==1<3;4C=64:1=D4=4?7N2:>59@83833J6<295L<9<7?F:>6>1HM_\VIOc8GDTUQ@DYIJo4C@PQ]LHTME20OL\]YNWW=>EFZ[SDYYHm;BCQV\IR\[OL>6MJ3:AFE6=DMK90OHM6;BG@EWT^AG90OHJ<;BGN<>EBGYGDHH=4CDR26>EOMJAT@DMJNRG\P\VB;2IGG95LLJ25?FJL91:=7NBD2626?FJL:Q20OAE=X0:31>EKC0:>7NBDA058GIMF9M8<7NBDA0F73>EKCH;O485LLJ@21>EKCJ;>7NBDD078GIMC^j1H@FJY_EKUMAC23JF@JU64CMIE\4>712IDA@G[TDF20>EHZLULICK]AUKLJZOINF=0O_KNTDF7?FTBO=1O0=0:;E>24;3<L5;:285K<00=1>B;9:4>7I2>4?78@9726<1O0<817:F?52<76<1O0<914:F?5;2<L58586J33?68@929<2N793:4D=4=0>B;?7>0H1614:F?=;2<L[OL;6J\P5:B54=@;2MEH;5CO@FF@3=KGJANH:5COFK@EI2<E5:596C311<6?H:697?0A1?=>49N8459=2G7=90:;L>21;3<E5;=285B<05=1>K;914>7@2>9?68I979=2G7>=0:;L>15;3<E589285B<31=1>K;:=4>7@2=5?78I9416<1F0?915:O?6=823D6953:4M=0=1>K;;94>7@2<1?78I9556<1F0>=15:O?71803D6897>15:O?70833D68295B<5<7?H:26=1F0;0;;L>4:1=J414?7@26>59NV@Ad3Dkac\7fXjrrkljf=JageyZh||inl4?KCS_FX@;6A_MNFF1<=HXDEOI1>19:MSIJBB48427B^BOEG?6;?<GYGDHH2<>89LTHICM5>556A_MNFF808>3FZFCIK36?`8KUKHLL6<6=06;NRNKAC;?730C]C@DDPFC41<GY^BADTJ_QPJILRN^LYTBJMn;N`eqvef|fx:7]94P/7;bZJ33Y6;285_<02=1>V;984>7]2>2?78T9746<1[0<:15:R?50823Y6::3;4P=34:0=W482596^318<7?U:66<1[0?>15:R?64823Y69>3;4P=00:0=W4;>596^324<6?U:5>7?0\1<8>49S87>9=2Z7>40;;Q>1:0=W4::596^330<6?U:4:7?0\1=<>49S8629=2Z7?80:;Q>02;3<X59<285_<2:=1>V;;04?7]2<>49S8169=2Z78<0:;Q>76;3<X5>8285_<56=1>V;<<4>7]2;6?58T920294>7]2;7?68T929<2Z793:4P=4=0>V;?7>0\1614:R?=;2<XHX_;6^LIO>3:==WK@D7==07;QAJJ976611[OD@313<;?UENF5;8255_CHL?518?3YIBB1?:>99SGLH;9?437]MFN=34:==WK@D7=507;QAJJ97>6>1[OD@31?:8TFOI4;:546^LIO>15;><XJCE0?<18:R@MK:5;720\NGA<36=<>VDAG699364PBKM870902ZHEC2=7?:8TFOI4;2546^LIO>1=;1<XJCE0?07;QAJJ957611[OD@330<;?UENF599255_CHL?768?3YIBB1=;>99SGLH;;<437]MFN=15:==WK@D7?:07;QAJJ95?611[OD@338<4?UENF59546^LIO>74;><XJCE09?18:R@MK:3:720\NGA<51=<>VDAG6?8364PBKM813902ZHEC2;6?c8TFOI4==1<364PBKM8119?2ZHEC2;>69SGLH;=7=0\NGA<7<4?UENF5=5;6^LIO>;:2=WK@D75364PBMVP96912ZHCXZ311<:?UEH]]6:=374PBMVP975601[OB[[<01==>VDG\^7=906;QALQQ:6=730\NAZT=35:<=WKF__0<919:R@KPR;91427]M@UU>2=;><XJE^X1?19:R@KPR;:9427]M@UU>15;?<XJE^X1<=>89SGJSS4;9556^LOTV?618>3YIDYY2=5?;8TFIR\58=245_CNWW871912ZHCXZ329<:?UEH]]695364PBMVP94912ZHCXZ331<:?UEH]]68=374PBMVP955601[OB[[<21==>VDG\^7?906;QALQQ:4=730\NAZT=15:<=WKF__0>919:R@KPR;;1427]M@UU>0=;><XJE^X1=19:R@KPR;<9427]M@UU>75;?<XJE^X1:=>89SGJSS4=9556^LOTV?018>3YIDYY2;5?;8TFIR\5>=2o5_CNWW811=8730\NAZT=64:==WKF__0907;QALQQ:2611[OB[[<7<;?UEH]]6<255_CNWW8=8?3YIDYY26>`9SMKYE]ZCOTo5_IO]AQVHFEL>0\_KH6:RP@JHB<2XXXL:4RRVA0>TT\Jk0^^ZLASPZMK2<ZZ^O86\\TL;8VVRHXDEOI95]SUR4?WUS\PZN86]30?78W9776<1X0<?15:Q?57823Z6:?3;4S=37:0=T48?596]317<6?V:6?7?0_1?7>49P84?9<2Y7=3;4S=03:0=T4;;596]323<6?V:5;7?0_1<;>49P8739=2Y7>;0:;R>13;3<[583285\<3;=0>U;:7?0_1=?>49P8679=2Y7??0:;R>07;3<[59?285\<27=1>U;;?4>7^2<7?78W95?6<1X0>714:Q?7;3<[5>;285\<53=1>U;<;4>7^2;3?78W9236<1X09;15:Q?03803Z6?;7>15:Q?02833Z6?295\<4<7?V:16=1X0:0;;R>;:1=T404?7^MCR038WMTBOVOSX_OLT^LDG`=T@[OLS@GA_RKYA==TC@ZT\D@9;RMVVFC13Z^JXX]7;RWAPWGD\=1XUCM;;U[SAf=R[LXTZD]FBMG0?SED12\BIZQ[YQG2`>^ND@DS!UJM 1,2$VRRJ):%=-O\CHK5?]USD@Hi7UQLOSG\MK@H>2RonRGkf:ZglZVuad\n~~g`n028\akXEh`d~[k}shmm55=_ldUFeca}Vdppmjh43Qy\7f?6Wjs59b85823h6:<3;4a=32:0=f488596o312<6?d:6<7?0m1?:>49b8409?2k7=:4?>49b8419<2k7=3:4a=0=0>g;;7>0m1:14:c?1;2<i5<586o37?68e9>9<2k753:4b=2=1>d;994>7o2>1?78f9756<1i0<=15:`?51823k6:93;4b=35:2=e48=1<3;4b=34:1=e484?7o2=>59a86833k6?295m<4<7?g:16=1i0:0;;c>;:1=e404:;6lfp^fpt1>Xe|f\7fmnmPsxlwlg=edb:;<=>?00`8fim789:;<=<m;cnh456789:8n6lck1234567<?1iu}o|s39`a6=ddbk0axb{_`a`qh77;2g~`yQncbwn(}dnxVg~`yolcto\r7Y7$riTmRzvpd?3(fYfW~coxe3>8-a\efereVgdhh3?,b]bgfsjW~coxe3;8-a\fZr~xl7; nQm_vkgpm;60%iTnt~nsr]okr;7$jUhiRayespj``uX{jfy1="l_icp[g\7fwizy6=!mPl`vfjf\7f:9%iTcxzPwhfwl82?$jUycx`k_u{sa86+kV\7fxiRj|p5:>5)eX~lxic~g{y<2/gZ~cm\7fchikobim{>wugu|hd=q??4mtnw[ded}d&snd~PmtnwefereV|9S="t}e9nqirfkj\7ffSi}\7f8:ldggsndm80bb:4s=2=1>u;994>7~2>1?78w9756<1x0<=15:q?51823z6:93;4s=35:0=t48=596}319<6?v:617>0\7f1?15:q?65823z69=3;4s=01:0=t4;9596}325<6?v:5=7?0\7f1<9>49p8719=2y7>50:;r>1=;2<{58596}331<6?v:497?0\7f1==>49p8659=2y7?90:;r>01;3<{59=285|<25=1>u;;14>7~2<9?68w959=2y78=0:;r>75;3<{5>9285|<51=1>u;<=4>7~2;5?78w9216>1x09950?78w9206=1x090;;r>6:1=t4?4?7~28>59p8=833z62295|cmpa?vo`89:;<=>>b:qjc56789:;>o5|if2345678:h0\7fdi?0123452e3zcl<=>?0126f>uno9:;<=>?6c9pmb6789:;<:l4she34567892i7~gh0123456>j2ybk=>?0123eg=tan:;<=>?0c`8wla789:;<=mm;rkd456789:on6}fg1234567mk1xej>?01234cd<{`m;<=>?002a?vo`89:;<=?>b:qjc56789::>o5|if2345679:h0\7fdi?0123442e3zcl<=>?0136f>uno9:;<=>>6c9pmb6789:;=:l4she34567882i7~gh0123457>j2ybk=>?0122eg=tan:;<=>?1c`8wla789:;<<mm;rkd456789;on6}fg1234566mk1xej>?01235cd<{`m;<=>?032a?vo`89:;<=<>b:qjc56789:9>o5|if234567::h0\7fdi?0123472e3zcl<=>?0106f>uno9:;<=>=6c9pmb6789:;>:l4she345678;2i7~gh0123454>j2ybk=>?0121eg=tan:;<=>?2c`8wla789:;<?mm;rkd4567898on6}fg1234565mk1xej>?01236cd<{`m;<=>?022a?vo`89:;<==>b:qjc56789:8>o5|if234567;:h0\7fdi?0123462e3zcl<=>?0116f>uno9:;<=><6c9pmb6789:;?:l4she345678:2i7~gh0123455>j2ybk=>?0120eg=tan:;<=>?3c`8wla789:;<>mm;rkd4567899on6}fg1234564mk1xej>?01237cd<{`m;<=>?052a?vo`89:;<=:>b:qjc56789:?>o5|if234567<:h0\7fdi?0123412e3zcl<=>?0166f>uno9:;<=>;6c9pmb6789:;8:l4she345678=2i7~gh0123452>j2ybk=>?0127eg=tan:;<=>?4c`8wla789:;<9mm;rkd456789>on6}fg1234563mk1xej>?01230cd<{`m;<=>?042a?vo`89:;<=;>b:qjc56789:>>o5|if234567=:h0\7fdi?0123402e3zcl<=>?0176f>uno9:;<=>:6c9pmb6789:;9:l4she345678<2i7~gh0123453>j2ybk=>?0126e1=q9'::n6vmiq]gwu2?Wd\7fgxlml_w0\4Z~t|820tog\7f_eqs0=gX\7f{k{|h|Pv3]356=\7fj`zTaxb{abaviZp5W98m7ulfp^ovhqgdk|gTz?Q?,!Zjhlh\7f(JEYI-Ijndpbpjt'9=$>=:5wbhr\ipjsiji~aRx=_1]{wq763ÊÁ¶±Ë°ØÌżĸºÖ¿»³=0ÂÂÅÀ¿½Îg?ÔĸØŴܶÈ͵¼¸g8Õǹ×Ä·ÝηÄγÅÄ\7fCDu55i2JKt?<=:G85>4}Tj00:j?4>0b8276e>8h0:>;oj{o3e4?7<f8l:6;5+1dg95`d<uZh<6<h=:02`>454k0:j6<<9ag9P`7<5:?0;6<=<c82b>441j81Xn:4=2783>454k0:j6<<9b39P`7<68h09n94>32a:4d<6:?h87^l8:02b>7d32898o4>n:005f6=c:;81<7?51zQa=?7a:3;;o7?<3b;3e?75>ho0zY?j3;295?7==hqXn44>f3824f<6;:i2<l4>27cf?!7bi3n?7[?jf;0xqcd=92\7fmo7>4}%30a?773k89>7>55982>0>|@8o37)?j7;016>\1:39p:795f;\7f'5`b=:k20(l:52368 g>=:;90(<k>:09'5`6=9o90e<hk:18'5d4=9oi0b<o>:198m4`e290/=l<51ga8j4g62810e<hn:18'5d4=9oi0b<o>:398m4`>290/=l<51ga8j4g62:10e<h7:18'5d4=9oi0b<o>:598m4`0290/=l<51ga8j4g62<10e<h9:18'5d4=9oi0b<o>:798m4`2290/=l<51ga8j4g62>10e?>9:18'5d4=9oi0b<o>:998m762290/=l<51ga8j4g62010e?>;:18'5d4=9oi0b<o>:`98m764290/=l<51ga8j4g62k10e?>=:18'5d4=9oi0b<o>:b98m766290/=l<51ga8j4g62m10e?>?:18'5d4=9oi0b<o>:d98m4`a290/=l<51ga8j4g62o10e<hj:18'5d4=9oi0b<o>:028?l7a<3:1(<o=:0d`?k7f93;:76g=1183>!7f:38;j6`>a083?>o58l0;6)?n2;03b>h6i80:76g=0e83>!7f:38;j6`>a081?>o58j0;6)?n2;03b>h6i80876g=0c83>!7f:38;j6`>a087?>o58h0;6)?n2;03b>h6i80>76g=0883>!7f:38;j6`>a085?>o5810;6)?n2;03b>h6i80<76g=1883>!7f:38;j6`>a08;?>o5910;6)?n2;03b>h6i80276g=1683>!7f:38;j6`>a08b?>o59?0;6)?n2;03b>h6i80i76g=1483>!7f:38;j6`>a08`?>o59=0;6)?n2;03b>h6i80o76g=1283>!7f:38;j6`>a08f?>o59;0;6)?n2;03b>h6i80m76g=1083>!7f:38;j6`>a0824>=n:9=1<7*>a3814c=i9h;1=<54i302>5<<a;8;6=44i37:>5<<a;;m6=44o371>5<#9h81>8?4n0c2>5=<g;?;6=4+1`09607<f8k:6<54o36e>5<#9h81>8?4n0c2>7=<g;>n6=4+1`09607<f8k:6>54o36g>5<#9h81>8?4n0c2>1=<g;>h6=4+1`09607<f8k:6854o36a>5<#9h81>8?4n0c2>3=<g;>j6=4+1`09607<f8k:6:54o36;>5<#9h81>8?4n0c2>==<g;><6=4+1`09607<f8k:6454o365>5<#9h81>8?4n0c2>d=<g;>>6=4+1`09607<f8k:6o54o367>5<#9h81>8?4n0c2>f=<g;>86=4+1`09607<f8k:6i54o361>5<#9h81>8?4n0c2>`=<g;>:6=4+1`09607<f8k:6k54o363>5<#9h81>8?4n0c2>46<3f88j7>5$0c1>7363g;j=7?>;:m17a<72-;j>7<:1:l2e4<6:21d>>m50;&2e7<5=81e=l?51298k75e290/=l<52438j4g628>07b<<a;29 4g52;?:7c?n1;36?>i5;00;6)?n2;065>h6i80::65`22:94?"6i;099<5a1`3952=<g;9<6=4+1`09607<f8k:6<64;n002?6=,8k96?;>;o3b5?7>32e9?84?:%3b6?4292d:m<4>a:9l662=83.:m?4=509m5d7=9k10c?==:18'5d4=:<;0b<o>:0a8?j4493:1(<o=:372?k7f93;o76a=3183>!7f:38>=6`>a082a>=h:;l1<7*>a38114=i9h;1=k54o30f>5<#9h81>8?4n0c2>76<3f89h7>5$0c1>7363g;j=7<>;:m16f<72-;j>7<:1:l2e4<5:21d>?l50;&2e7<5=81e=l?52298k74f290/=l<52438j4g62;>07b<=9;29 4g52;?:7c?n1;06?>i5=10;6)?n2;065>h6i809:65`24594?"6i;099<5a1`3962=<g;?=6=4+1`09607<f8k:6?64;n061?6=,8k96?;>;o3b5?4>32e9994?:%3b6?4292d:m<4=a:9l605=83.:m?4=509m5d7=:k10c?:6:18'5d4=:<;0b<o>:3a8?j44m3:1(<o=:372?k7f938o76a=3283>!7f:38>=6`>a081a>=h:;21<7*>a38114=i9h;1>k54b33a>5<213919luG1d:8 4c02;h27W8=:2y1>6<b2t.9nn4=bc9'6gb=:kk0e<j50;&2e7<6k2d:m<4?;:k2f?6=,8k96<m4n0c2>4=<a8k1<7*>a382g>h6i80976g>9;29 4g528i0b<o>:298m4>=83.:m?4>c:l2e4<332c:;7>5$0c1>4e<f8k:6854i0494?"6i;0:o6`>a085?>o6=3:1(<o=:0a8j4g62>10e?850;&2e7<6k2d:m<47;:k11?6=,8k96<m4n0c2><=<a;>1<7*>a382g>h6i80j76g=3;29 4g528i0b<o>:c98m74=83.:m?4>c:l2e4<d32c9=7>5$0c1>4e<f8k:6i54i3294?"6i;0:o6`>a08f?>o6n3:1(<o=:0a8j4g62o10e<k50;&2e7<6k2d:m<4>0:9j51<72-;j>7?l;o3b5?7632c8>7>5$0c1>67<f8k:6=54i2294?"6i;08=6`>a082?>o5n3:1(<o=:238j4g62;10e?k50;&2e7<492d:m<4<;:k1`?6=,8k96>?4n0c2>1=<a;i1<7*>a3805>h6i80>76g=b;29 4g52:;0b<o>:798m7g=83.:m?4<1:l2e4<032c8n7>5$0c1>67<f8k:6554i2c94?"6i;08=6`>a08:?>o413:1(<o=:238j4g62h10e>650;&2e7<492d:m<4m;:k03?6=,8k96>?4n0c2>f=<a:<1<7*>a3805>h6i80o76g<5;29 4g52:;0b<o>:d98m62=83.:m?4<1:l2e4<a32c8?7>5$0c1>67<f8k:6<>4;h0:>5<#9h81?<5a1`3954=<ah?1<75f9c83>>o6lo0;66g93;29?l7b=3:17b?k8;29 4g528n<7c?n1;28?j7c>3:1(<o=:0f4?k7f93;07b?k5;29 4g528n<7c?n1;08?j7c<3:1(<o=:0f4?k7f93907b?k3;29 4g528n<7c?n1;68?j7c:3:1(<o=:0f4?k7f93?07b?k1;29 4g528n<7c?n1;48?j7c83:1(<o=:0f4?k7f93=07b?le;29 4g528n<7c?n1;:8?j7dl3:1(<o=:0f4?k7f93307b?lc;29 4g528n<7c?n1;c8?j7dj3:1(<o=:0f4?k7f93h07b?la;29 4g528n<7c?n1;a8?j7d13:1(<o=:0f4?k7f93n07b?l8;29 4g528n<7c?n1;g8?j7d?3:1(<o=:0f4?k7f93l07b?l6;29 4g528n<7c?n1;33?>i6k<0;6)?n2;3g3>h6i80:=65`1b194?"6i;0:h:5a1`3957=<g8i96=4+1`095a1<f8k:6<=4;n3`5?6=,8k96<j8;o3b5?7332e:o=4?:%3b6?7c?2d:m<4>5:9l5g`=83.:m?4>d69m5d7=9?10c<lj:18'5d4=9m=0b<o>:058?j7el3:1(<o=:0f4?k7f93;376a>bb83>!7f:3;o;6`>a082=>=h9kh1<7*>a382`2=i9h;1=l54o0`b>5<#9h81=i94n0c2>4d<3f;i47>5$0c1>4b03g;j=7?l;:m2f2<72-;j>7?k7:l2e4<6l21d=o850;&2e7<6l>1e=l?51d98k4d2290/=l<51e58j4g628l07b?m4;29 4g528n<7c?n1;03?>i6j:0;6)?n2;3g3>h6i809=65`1c094?"6i;0:h:5a1`3967=<g8h:6=4+1`095a1<f8k:6?=4;n3a4?6=,8k96<j8;o3b5?4332e:mk4?:%3b6?7c?2d:m<4=5:9l5ac=83.:m?4>d69m5d7=:?10c<jk:18'5d4=9m=0b<o>:358?j7ck3:1(<o=:0f4?k7f938376a>dc83>!7f:3;o;6`>a081=>=h9mk1<7*>a382`2=i9h;1>l54o0f:>5<#9h81=i94n0c2>7d<3f;hj7>5$0c1>4b03g;j=7<l;:m2g1<72-;j>7?k7:l2e4<5l21d=o750;&2e7<6l>1e=l?52d98k4gb290/=l<51e58j4g62;l07o<>c;295?6=8r.:i:4>e89K5`e<@8o37b??b;29?xd59m0;6<4?:1y'5`1=l81C=hm4H0g;?jb72900qo<>e;2950g=83:p(<k8:bd8L4cd3A;n46T92;`x54<?2m0i694<:`8`>0<5200v(<>6:304?k75291e=>4?;o04>5=i:10;7c79:19'=2<am2dim7>4nbg94>hai3:0b<>7:19m5d5=92.:mi4>e79m=d<73`3m6=44i0c4>5<<a8k36=44i`294?=n9h31<75fa383>>o>m3:17b76:188m4ge2900e<on:188md3=831b=l850;9je4<722c2h7>5;h;6>5<<ah91<75f9b83>>i>03:17d?n5;29?l7fk3:17d==:18'5d4=;81e=l?50:9j75<72-;j>7=>;o3b5?7<3`8m6=4+1`0974=i9h;1>65f2d83>!7f:39:7c?n1;18?l4c290/=l<5309m5d7=<21b>n4?:%3b6?563g;j=7;4;h0a>5<#9h81?<5a1`392>=n:h0;6)?n2;12?k7f93=07d=m:18'5d4=;81e=l?58:9j7d<72-;j>7=>;o3b5??<3`926=4+1`0974=i9h;1m65f3983>!7f:39:7c?n1;`8?l50290/=l<5309m5d7=k21b?;4?:%3b6?563g;j=7j4;h16>5<#9h81?<5a1`39a>=n;=0;6)?n2;12?k7f93l07d=<:18'5d4=;81e=l?51198m7?=83.:m?4<1:l2e4<6921d954?:%3b6?303g;j=7>4;n75>5<#9h819:5a1`395>=h=<0;6)?n2;74?k7f93807b;;:18'5d4==>1e=l?53:9l16<72-;j>7;8;o3b5?2<3f?96=4+1`0912=i9h;1965`5083>!7f:3?<7c?n1;48?j37290/=l<5569m5d7=?21d:<4?:%3b6?303g;j=764;n43>5<#9h819:5a1`39=>=h=o0;6)?n2;74?k7f93k07b;j:18'5d4==>1e=l?5b:9l1a<72-;j>7;8;o3b5?e<3f?h6=4+1`0912=i9h;1h65`5c83>!7f:3?<7c?n1;g8?j3f290/=l<5569m5d7=n21d944?:%3b6?303g;j=7??;:m7b?6=,8k96894n0c2>47<3`;=57>5$0c1>40?3g;j=7>4;h353?6=,8k96<87;o3b5?7<3`;=:7>5$0c1>40?3g;j=7<4;h351?6=,8k96<87;o3b5?5<3`;=87>5$0c1>40?3g;j=7:4;h357?6=,8k96<87;o3b5?3<3`;=>7>5$0c1>40?3g;j=784;h355?6=,8k96<87;o3b5?1<3`;>j7>5$0c1>40?3g;j=764;h36a?6=,8k96<87;o3b5??<3`;>h7>5$0c1>40?3g;j=7o4;h36g?6=,8k96<87;o3b5?d<3`;>n7>5$0c1>40?3g;j=7m4;h36e?6=,8k96<87;o3b5?b<3`;>57>5$0c1>40?3g;j=7k4;h36<?6=,8k96<87;o3b5?`<3`;>;7>5$0c1>40?3g;j=7??;:k213<72-;j>7?98:l2e4<6921b=8:50;&2e7<6>11e=l?51398m434290/=l<517:8j4g628907d?:2;29 4g528<37c?n1;37?>o6=80;6)?n2;35<>h6i80:965f14294?"6i;0::55a1`3953=<a8>m6=4+1`0953><f8k:6<94;h37a?6=,8k96<87;o3b5?7?32c:8i4?:%3b6?7102d:m<4>9:9j51e=83.:m?4>699m5d7=9h10e<:m:18'5d4=9?20b<o>:0`8?l7313:1(<o=:04;?k7f93;h76g>4983>!7f:3;=46`>a082`>=n9==1<7*>a3822==i9h;1=h54i065>5<#9h81=;64n0c2>4`<3`;?97>5$0c1>40?3g;j=7<?;:k201<72-;j>7?98:l2e4<5921b=9=50;&2e7<6>11e=l?52398m425290/=l<517:8j4g62;907d?;1;29 4g528<37c?n1;07?>o6<90;6)?n2;35<>h6i809965f17d94?"6i;0::55a1`3963=<a8<n6=4+1`0953><f8k:6?94;h35`?6=,8k96<87;o3b5?4?32c::n4?:%3b6?7102d:m<4=9:9j53d=83.:m?4>699m5d7=:h10e<8n:18'5d4=9?20b<o>:3`8?l7183:1(<o=:04;?k7f938h76g>5483>!7f:3;=46`>a081`>=n9=k1<7*>a3822==i9h;1>h54i01e>5<#9h81=;64n0c2>7`<3`2n6=4+1`09<a=i9h;1<65f8b83>!7f:32o7c?n1;38?l>e290/=l<58e9m5d7=:21b4l4?:%3b6?>c3g;j=7=4;h::>5<#9h814i5a1`390>=n010;6)?n2;:g?k7f93?07d68:18'5d4=0m1e=l?56:9j<3<72-;j>76k;o3b5?1<3`2?6=4+1`09<a=i9h;1465f8283>!7f:32o7c?n1;;8?l>5290/=l<58e9m5d7=i21b4<4?:%3b6?>c3g;j=7l4;h:3>5<#9h814i5a1`39g>=n?o0;6)?n2;:g?k7f93n07d9j:18'5d4=0m1e=l?5e:9j3a<72-;j>76k;o3b5?`<3`=h6=4+1`09<a=i9h;1==54i6`94?"6i;03h6`>a0825>=n?00;6)?n2;:g?k7f93;976g88;29 4g521n0b<o>:018?l10290/=l<58e9m5d7=9=10e:850;&2e7<?l2d:m<4>5:9j30<72-;j>76k;o3b5?7132c<87>5$0c1>=b<f8k:6<94;h50>5<#9h814i5a1`395==<a>81<7*>a38;`>h6i80:565f7083>!7f:32o7c?n1;3b?>o083:1(<o=:9f8j4g628h07d8j:18'5d4=0m1e=l?51b98m3b=83.:m?47d:l2e4<6l21b:n4?:%3b6?>c3g;j=7?j;:k5f?6=,8k965j4n0c2>4`<3`<j6=4+1`09<a=i9h;1>=54i7;94?"6i;03h6`>a0815>=n>10;6)?n2;:g?k7f938976g97;29 4g521n0b<o>:318?l01290/=l<58e9m5d7=:=10e;;50;&2e7<?l2d:m<4=5:9j=1<72-;j>76k;o3b5?4132c2?7>5$0c1>=b<f8k:6?94;h;1>5<#9h814i5a1`396==<a0;1<7*>a38;`>h6i809565f9183>!7f:32o7c?n1;0b?>o?n3:1(<o=:9f8j4g62;h07d6::18'5d4=0m1e=l?52b98m2g=83.:m?47d:l2e4<5l21b:k4?:%3b6?>c3g;j=7<j;:k50?6=,8k965j4n0c2>7`<3f;8;7>5$0c1>4513g;j=7>4;n301?6=,8k96<=9;o3b5?7<3f;887>5$0c1>4513g;j=7<4;n307?6=,8k96<=9;o3b5?5<3f;8>7>5$0c1>4513g;j=7:4;n305?6=,8k96<=9;o3b5?3<3f;8<7>5$0c1>4513g;j=784;n31b?6=,8k96<=9;o3b5?1<3f;9h7>5$0c1>4513g;j=764;n31g?6=,8k96<=9;o3b5??<3f;9n7>5$0c1>4513g;j=7o4;n31e?6=,8k96<=9;o3b5?d<3f;957>5$0c1>4513g;j=7m4;n31<?6=,8k96<=9;o3b5?b<3f;9;7>5$0c1>4513g;j=7k4;n312?6=,8k96<=9;o3b5?`<3f;997>5$0c1>4513g;j=7??;:m261<72-;j>7?<6:l2e4<6921d=?<50;&2e7<6;?1e=l?51398k446290/=l<51248j4g628907b?=0;29 4g5289=7c?n1;37?>i69o0;6)?n2;302>h6i80:965`10g94?"6i;0:?;5a1`3953=<g8;o6=4+1`09560<f8k:6<94;n32g?6=,8k96<=9;o3b5?7?32e:=o4?:%3b6?74>2d:m<4>9:9l54g=83.:m?4>379m5d7=9h10c<?6:18'5d4=9:<0b<o>:0`8?j76?3:1(<o=:015?k7f93;h76a>1783>!7f:3;8:6`>a082`>=h98?1<7*>a38273=i9h;1=h54o037>5<#9h81=>84n0c2>4`<3f;:?7>5$0c1>4513g;j=7<?;:m257<72-;j>7?<6:l2e4<5921d=<?50;&2e7<6;?1e=l?52398k477290/=l<51248j4g62;907b??f;29 4g5289=7c?n1;07?>i68l0;6)?n2;302>h6i809965`12f94?"6i;0:?;5a1`3963=<g89h6=4+1`09560<f8k:6?94;n30f?6=,8k96<=9;o3b5?4?32e:?l4?:%3b6?74>2d:m<4=9:9l56?=83.:m?4>379m5d7=:h10c<=7:18'5d4=9:<0b<o>:3`8?j75m3:1(<o=:015?k7f938h76a>2283>!7f:3;8:6`>a081`>=h9821<7*>a38273=i9h;1>h54o02g>5<#9h81=>84n0c2>7`<3`;;;7>5$0c1>4613g;j=7>4;h331?6=,8k96<>9;o3b5?7<3`;;87>5$0c1>4613g;j=7<4;h337?6=,8k96<>9;o3b5?5<3`;;>7>5$0c1>4613g;j=7:4;h335?6=,8k96<>9;o3b5?3<3`;;<7>5$0c1>4613g;j=784;hde>5<#9h81==84n0c2>2=<aj>1<7*>a38`7>h6i80;76gl2;29 4g52j90b<o>:098mf7=83.:m?4l3:l2e4<532ch<7>5$0c1>f5<f8k:6>54icd94?"6i;0h?6`>a087?>oem3:1(<o=:b18j4g62<10eoj50;&2e7<d;2d:m<49;:kag?6=,8k96n=4n0c2>2=<ajn1<7*>a38`7>h6i80376glc;29 4g52j90b<o>:898mfd=83.:m?4l3:l2e4<f32chm7>5$0c1>f5<f8k:6o54ib;94?"6i;0h?6`>a08`?>od03:1(<o=:b18j4g62m10en950;&2e7<d;2d:m<4j;:k`2?6=,8k96n=4n0c2>c=<aj?1<7*>a38`7>h6i80:<65fbc83>!7f:3i87c?n1;32?>i61h0;6)?n2;3:=>h6i80;76a>9983>!7f:3;256`>a082?>i61>0;6)?n2;3:=>h6i80976a>9783>!7f:3;256`>a080?>i61<0;6)?n2;3:=>h6i80?76a>9583>!7f:3;256`>a086?>i61:0;6)?n2;3:=>h6i80=76a>9383>!7f:3;256`>a084?>i6190;6)?n2;3:=>h6i80376a>8g83>!7f:3;256`>a08:?>i60l0;6)?n2;3:=>h6i80j76a>8e83>!7f:3;256`>a08a?>i60j0;6)?n2;3:=>h6i80h76a>8c83>!7f:3;256`>a08g?>i60h0;6)?n2;3:=>h6i80n76a>8883>!7f:3;256`>a08e?>i6010;6)?n2;3:=>h6i80:<65`19594?"6i;0:545a1`3954=<g82>6=4+1`095<?<f8k:6<<4;n3;0?6=,8k96<76;o3b5?7432e:4>4?:%3b6?7>12d:m<4>4:9l5=4=83.:m?4>989m5d7=9<10c<6>:18'5d4=9030b<o>:048?j7?83:1(<o=:0;:?k7f93;<76a>7g83>!7f:3;256`>a082<>=h9>o1<7*>a382=<=i9h;1=454o05g>5<#9h81=474n0c2>4g<3f;<o7>5$0c1>4?>3g;j=7?m;:m23d<72-;j>7?69:l2e4<6k21d=:750;&2e7<6101e=l?51e98k41?290/=l<518;8j4g628o07b?87;29 4g528327c?n1;3e?>i6??0;6)?n2;3:=>h6i809<65`16794?"6i;0:545a1`3964=<g8=?6=4+1`095<?<f8k:6?<4;n347?6=,8k96<76;o3b5?4432e:;?4?:%3b6?7>12d:m<4=4:9l527=83.:m?4>989m5d7=:<10c<o?:18'5d4=9030b<o>:348?j7>n3:1(<o=:0;:?k7f938<76a>9d83>!7f:3;256`>a081<>=h90n1<7*>a382=<=i9h;1>454o0;`>5<#9h81=474n0c2>7g<3f;2n7>5$0c1>4?>3g;j=7<m;:m2=4<72-;j>7?69:l2e4<5k21d=5850;&2e7<6101e=l?52e98k41e290/=l<518;8j4g62;o07b?80;29 4g528327c?n1;0e?>o6l3:1(<o=:0a8j4g62910e<l50;&2e7<6k2d:m<4>;:k2e?6=,8k96<m4n0c2>7=<a831<7*>a382g>h6i80876g>8;29 4g528i0b<o>:598m41=83.:m?4>c:l2e4<232c::7>5$0c1>4e<f8k:6;54i0794?"6i;0:o6`>a084?>o5>3:1(<o=:0a8j4g62110e?;50;&2e7<6k2d:m<46;:k10?6=,8k96<m4n0c2>d=<a;91<7*>a382g>h6i80i76g=2;29 4g528i0b<o>:b98m77=83.:m?4>c:l2e4<c32c9<7>5$0c1>4e<f8k:6h54i0d94?"6i;0:o6`>a08e?>o6m3:1(<o=:0a8j4g628:07d?;:18'5d4=9j1e=l?51098kc4=83.:m?4i1:l2e4<732em<7>5$0c1>c7<f8k:6<54odd94?"6i;0m=6`>a081?>ibm3:1(<o=:g38j4g62:10chj50;&2e7<a92d:m<4;;:mfg?6=,8k96k?4n0c2>0=<glk1<7*>a38e5>h6i80=76aj9;29 4g52o;0b<o>:698k`>=83.:m?4i1:l2e4<?32en;7>5$0c1>c7<f8k:6454od494?"6i;0m=6`>a08b?>ib=3:1(<o=:g38j4g62k10ch:50;&2e7<a92d:m<4l;:mf7?6=,8k96k?4n0c2>a=<gl81<7*>a38e5>h6i80n76aj1;29 4g52o;0b<o>:g98ka`=83.:m?4i1:l2e4<6821dhh4?:%3b6?`63g;j=7?>;:mg`?6=,8k96k?4n0c2>44<3fnh6=4+1`09b4=i9h;1=>54oe`94?"6i;0m=6`>a0820>=hlh0;6)?n2;d2?k7f93;>76ak9;29 4g52o;0b<o>:048?jb?290/=l<5f09m5d7=9>10ci950;&2e7<a92d:m<4>8:9l`3<72-;j>7h>;o3b5?7>32em57>5$0c1>c7<f8k:6<o4;nd;>5<#9h81j<5a1`395g=<go=1<7*>a38e5>h6i80:o65`f783>!7f:3l:7c?n1;3g?>ia=3:1(<o=:g38j4g628o07bh;:18'5d4=n81e=l?51g98kc5=83.:m?4i1:l2e4<5821dio4?:%3b6?`63g;j=7<>;:mf4?6=,8k96k?4n0c2>74<3fn>6=4+1`09b4=i9h;1>>54i5794?"6i;0?86`>a083?M7b:21b8>4?:%3b6?233g;j=7?4H0g1?>o3:3:1(<o=:568j4g62;1C=h<4;h62>5<#9h81895a1`397>N6m;10e9>50;&2e7<3<2d:m<4;;I3f6>=n;o0;6)?n2;67?k7f93?0D<k=;:k0a?6=,8k969:4n0c2>3=O9l807d=k:18'5d4=<=1e=l?57:J2a7=<a=o1<7*>a3870>h6i8037E?j2:9j0a<72-;j>7:;;o3b5??<@8o976g;c;29 4g52=>0b<o>:`9K5`4<3`>i6=4+1`0901=i9h;1n6F>e398m1g=83.:m?4;4:l2e4<d3A;n>65f4883>!7f:3>?7c?n1;f8L4c532c?47>5$0c1>12<f8k:6h5G1d08?l20290/=l<5459m5d7=n2B:i?54i5494?"6i;0?86`>a0824>N6m;10e>m50;&2e7<3<2d:m<4>1:J2a7=<uz8>m7>52z\2`>;59l0:h6s|24`94?4|V8h01??j:0`8yv42k3:1>vP>a:?15`<6i2wx>8j50;0xZ4?<5;;n6<74}r06a?6=:rT:463=1d82<>{t:<l1<7<t^058977b28=0q~<90;296~X6>279=h4>6:\7fp637=838pR<;4=33f>43<uz8=>7>52z\12>;59l09:6s|27194?4|V;?01??j:378yv41<3:1>vP=4:?15`<5<2wx>;;50;0xZ75<5;;n6?=4}r052?6=:rT9>63=1d816>{t:?=1<7<t^338977b2;;0q~<98;296~X58279=h4=0:\7fp63?=838pR<h4=33f>4`<uz8=m7>52z\2a>;59l0:i6s|27`94?4|V8>01??j:068yv41k3:1>vP<2:?15`<4:2wx>;j50;0xZ66<5;;n6>>4}r05a?6=:rT9j63=1d81b>{t:?l1<7<t^3g8977b2;o0q~<80;296~X5l279=h4=d:\7fp627=838pR?m4=33f>7e<uz8<>7>52z\1f>;59l09n6s|26194?4|V;k01??j:3c8yv40<3:1>vP<b:?15`<4j2wx>:;50;0xZ6g<5;;n6>o4}r042?6=:rT8563=1d80=>{t:>=1<7<t^2:8977b2:20q~<88;296~X4?279=h4<7:\7fp62?=838pR>84=33f>60<uz8<m7>52z\01>;59l0896s|26`94?4|V:>01??j:268yv40k3:1>vP<3:?15`<4;2wx>:j50;0xZ7?<5;;n6?74}r04a?6=:rTj963=1d8b1>{t:>l1<7<t^8`8977b2h90q~<70;296~X6lo16><k51`a8yv4?93:1>vP93:?15`<6881v\7f?6=:181\7f[7c0279=h4>369~w7>42909wS?k6:?15`<6;<1v\7f?6;:181\7f[7c=279=h4>359~w7>22909wS?k4:?15`<6;:1v\7f?69:181\7f[7c;279=h4>339~w7>02909wS?k2:?15`<6;81v\7f?67:181\7f[7c9279=h4>319~w7>>2909wS?k0:?15`<6:o1v\7f?6n:181\7f[7dm279=h4>2e9~w7>e2909wS?ld:?15`<6:j1v\7f?6l:181\7f[7dk279=h4>2c9~w7>c2909wS?lb:?15`<6:h1v\7f?6j:181\7f[7di279=h4>289~w7>a2909wS?l9:?15`<6:11v\7f?7?:181\7f[7d0279=h4>269~w7?62909wS?l7:?15`<6:?1v\7f?7=:181\7f[7d>279=h4>249~w7?42909wS?l5:?15`<6:=1v\7f?7;:181\7f[7d;279=h4>239~w7?22909wS?l2:?15`<6:81v\7f?79:181\7f[7d9279=h4>219~w7?02909wS?l0:?15`<69o1v\7f?77:181\7f[7en279=h4>1d9~w7?>2909wS?me:?15`<69m1v\7f?7n:181\7f[7el279=h4>1b9~w7?e2909wS?mc:?15`<69k1v\7f?7l:181\7f[7ej279=h4>1`9~w7?c2909wS?ma:?15`<6901v\7f?7j:181\7f[7e0279=h4>169~w7?a2909wS?m7:?15`<69?1v\7f?o?:181\7f[7e>279=h4>149~w7g62909wS?m5:?15`<69=1v\7f?o=:181\7f[7e<279=h4>129~w7g42909wS?m3:?15`<69;1v\7f?o;:181\7f[7e:279=h4>109~w7g22909wS?m1:?15`<6991v\7f?o9:181\7f[7e8279=h4>0g9~w7g02909wS?nf:?15`<68l1v\7f?o7:181\7f[7cm279=h4>3e9~w7g>2909wS?kd:?15`<6;j1v\7f?on:181\7f[7ck279=h4>3c9~w7ge2909wS?kb:?15`<6;h1v\7f?ol:181\7f[7ci279=h4>389~w7gc2909wS?k9:?15`<6;11v\7f?oj:181\7f[7dn279=h4>2d9~w7ga2909wS?l4:?15`<6::1v\7f?l?:181\7f[7e1279=h4>199~w7d62909wS?ne:?15`<68m1v\7f?l=:180\7f846k3;;n63=1d8eb>;59l0:<?5rs3`0>5<??r79=i4k0:?15`<68916><k51118977b28:?70<>e;331>;59l0:<:5220g921=::8o1:k5220g93d=::8o1485220g9<c=::8o15=5220g9=4=::8o15?5220g9=6=::8o1595220g920=::8o1:;5220g922=::8o1:55220g92<=::8o1:l5220g92g=::8o1:n5220g92a=::8o1:h5220g935=::8o1;<5220g937=::8o1;>5220g931=::8o1;85220g933=::8o1;:5220g93==::8o1;45220g93g=::8o1;n5220g93a=::8o1;h5220g93c=::8o14=5220g9<4=::8o14?5220g9<6=::8o1495220g9<3=::8o14:5220g9<==::8o1445220g9<d=::8o14o5220g9<f=::8o14h5220g9=0=::8o15n5220g9=a=::8o15h5220g9=c=::8o1m=5220g9e4=::8o1m?5220g9fg=::8o1o85220g9g3=::8o1o:5220g9g==::8o1o45220g9gd=::8o1oo5220g9gf=::8o1oi5220g9ff=::8o1ni5220g9f`=::8o1nk5220g9g5=::8o1o<5220g9g7=::8o1o95220g956`<5;;n6<:n;<02a?72=279=h4>619>64c=9?k01??j:04a?846m3;=o63=1d822a=::8o1=;k4=33f>40a348:i7?;0:?15`<6<816><k51508977b28>870<>e;370>;59l0:885220g9510<5;;n6<:8;<02a?730279=h4>489>64c=9=h01??j:06`?846m3;?h63=1d820`=::8o1=9h4=33f>437348:i7?:1:?15`<6=;16><k51418977b28??70<>e;362>;59l0:9:5220g950><5;;n6<;6;<02a?72i279=h4>5c9>64c=9<i01??j:07g?846m3;>i63=1d821c=::8o1=;?4=33f>405348:i7?93:?15`<6>=16><k51778977b28<=70<>e;353>;59l0::45220g95d3<5;;n6<o9;<02a?7f?279=h4>a99>64c=9h301??j:0cb?846m3;jn6srs0dg>5<5sW;mh63=1c82`>{t9oh1<7<t^0da?846j3;i7p}>f`83>7}Y9ok01??m:0c8yv7a13:1>vP>f89>64d=901v\7f<h7:181\7f[7a0279=o4>8:\7fp5c1=838pR<h8;<02f?703ty:j;4?:3y]5c0<5;;i6<84}r3e1?6=:rT:j85220`950=z{;:=6=4={_032>;59k09:6s|21794?4|V;:>70<>b;06?xu58=0;6?uQ2168977e2;>0q~<?3;296~X58:16><l5229~w7652909wS<?2:?15g<5:2wx>=?50;0xZ766348:n7<>;|q145<72;qU>=>4=33a>76<uz;mj7>52z\2bc=::8h1=k5rs0df>5<5sW;mi63=1c82a>{t9o>1<7<t^0d7?846j3;?7p}=1183>7}Y:8:01??m:208yv47m3:1>vP=0d9>64d=;91v\7f?>k:181\7f[47l279=o4=f:\7fp65e=838pR?>l;<02f?4b3ty9<o4?:3y]65d<5;;i6?j4}r03e?6=:rT9<l5220`96f=z{;:26=4={_03=>;59k09n6s|21:94?4|V;:370<>b;0b?xu5900;6?uQ20;8977e2:h0q~<>8;296~X59116><l53`9~w7702909wS<>7:?15g<412wx><850;0xZ771348:n7=7;|q150<72;qU><;4=33a>61<uz8:87>52z\151=::8h1?;5rs330>5<5sW8:?63=1c801>{t:881<7<t^331?846j39?7p}=1083>7}Y:8;01??m:218yv47?3:1>vP=069>64d=:01v\7f?<>:181\7f[459279=o4n5:\7fp676=838pR?<?;<02f??e3ty9944?:3y]60?<5;;i6<ji;|q15c<72;qU><h4=33a>35<uz8>>7>52z\117=::8h1=i64}r064?6=:rT99=5220`95a0<uz8?j7>52z\10c=::8h1=i;4}r07a?6=:rT98h5220`95a2<uz8?h7>52z\10a=::8h1=i=4}r07g?6=:rT98n5220`95a4<uz8?n7>52z\10g=::8h1=i?4}r07e?6=:rT98l5220`95a6<uz8?47>52z\10==::8h1=nk4}r073?6=:rT98:5220`95fb<uz8?:7>52z\103=::8h1=nm4}r071?6=:rT9885220`95fd<uz8?87>52z\101=::8h1=no4}r077?6=:rT98>5220`95f?<uz8?>7>52z\107=::8h1=n64}r075?6=:rT98<5220`95f1<uz8?<7>52z\105=::8h1=n84}r00b?6=:rT9?k5220`95f3<uz88h7>52z\17a=::8h1=n=4}r00g?6=:rT9?n5220`95f4<uz88n7>52z\17g=::8h1=n?4}r00e?6=:rT9?l5220`95f6<uz8857>52z\17<=::8h1=oh4}r00<?6=:rT9?55220`95gc<uz88;7>52z\172=::8h1=oj4}r002?6=:rT9?;5220`95ge<uz8897>52z\170=::8h1=ol4}r000?6=:rT9?95220`95gg<uz88>7>52z\177=::8h1=o64}r005?6=:rT9?<5220`95g1<uz88<7>52z\175=::8h1=o84}r01b?6=:rT9>k5220`95g3<uz89i7>52z\16`=::8h1=o:4}r01`?6=:rT9>i5220`95g5<uz89o7>52z\16f=::8h1=o<4}r01f?6=:rT9>o5220`95g7<uz89m7>52z\16d=::8h1=o>4}r01=?6=:rT9>45220`95d`<uz8>47>52z\11==::8h1=ik4}r063?6=:rT99:5220`95ab<uz8>:7>52z\113=::8h1=im4}r061?6=:rT9985220`95ad<uz8>87>52z\111=::8h1=io4}r067?6=:rT99>5220`95a?<uz8?57>52z\10<=::8h1=nh4}r00a?6=:rT9?h5220`95f2<uz88?7>52z\176=::8h1=o74}r01<?6=:rT9>55220`95dc<utd9;54?:3yK5`><ug8<57>52zJ2a==zf;=j6=4={I3f<>{i:>h1<7<tH0g;?xh5?j0;6?uG1d:8yk40l3:1>vF>e99~j71b2909wE?j8:\7fm62`=838pD<k7;|l1<5<72;qC=h64}o0;5?6=:rB:i55rn3:1>5<5sA;n46sa29194?4|@8o37p`=8583>7}O9l20qc<75;296~N6m11vb?69:181\7fM7b02we>5950;0xL4c?3td9454?:3yK5`><ug8357>52zJ2a==zf;2j6=4={I3f<>{i:1h1<7<tH0g;?xh50j0;6?uG1d:8yk4?l3:1>vF>e99~j7>b2909wE?j8:\7fm6=`=838pD<k7;|l1=5<72;qC=h64}o0:5?6=:rB:i55rn3;1>5<5sA;n46sa28194?4|@8o37p`=9583>7}O9l20qc<65;296~N6m11vb?79:181\7fM7b02we>4950;0xL4c?3td9554?:3yK5`><ug8257>52zJ2a==zf;3j6=4={I3f<>{i:0h1<7<tH0g;?xh51j0;6?uG1d:8yk4>l3:1>vF>e99~j7?b2909wE?j8:\7fm6<`=838pD<k7;|l1e5<72;qC=h64}o0b5?6=:rB:i55rn3c1>5<5sA;n46sa2`194?4|@8o37p`=a583>7}O9l20qc<n5;296~N6m11vb?o9:181\7fM7b02we>l950;0xL4c?3td9m54?:3yK5`><ug8j57>52zJ2a==zf;kj6=4={I3f<>{i:hh1<7<tH0g;?xh5ij0;6?uG1d:8yk4fl3:1>vF>e99~j7gb2909wE?j8:\7fm6d`=838pD<k7;|l1f5<72;qC=h64}o0a5?6=:rB:i55rn3`1>5<5sA;n46sa2c194?4|@8o37p`=b583>7}O9l20qc<m5;296~N6m11vb?l9:181\7fM7b02we>o950;0xL4c?3td9n54?:3yK5`><ug8i57>52zJ2a==zf;hj6=4={I3f<>{i:kh1<7<tH0g;?xh5jj0;6?uG1d:8yk4el3:1>vF>e99~j7db2909wE?j8:\7fm6g`=838pD<k7;|l1g5<72;qC=h64}o0`5?6=:rB:i55rn3a1>5<5sA;n46sa2b194?4|@8o37p`=c583>7}O9l20qc<l5;296~N6m11vb?m9:181\7fM7b02we>n950;0xL4c?3td9o54?:3yK5`><ug8h57>52zJ2a==zf;ij6=4={I3f<>{i:jh1<7<tH0g;?xh5kj0;6?uG1d:8yk4dl3:1>vF>e99~j7eb2909wE?j8:\7fm6f`=838pD<k7;|l133<728qC=h64}o043?6=9rB:i55r}|\7fCDF}4:h024i>?be1~DED|8tJK\vsO@
\ No newline at end of file
diff --git a/lib/sources/mult_accum.vhd b/lib/sources/mult_accum.vhd
new file mode 100644 (file)
index 0000000..59fc0f2
--- /dev/null
@@ -0,0 +1,103 @@
+--------------------------------------------------------------------------------
+--    This file is owned and controlled by Xilinx and must be used solely     --
+--    for design, simulation, implementation and creation of design files     --
+--    limited to Xilinx devices or technologies. Use with non-Xilinx          --
+--    devices or technologies is expressly prohibited and immediately         --
+--    terminates your license.                                                --
+--                                                                            --
+--    XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY    --
+--    FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES.  BY    --
+--    PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE             --
+--    IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS      --
+--    MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY      --
+--    CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY       --
+--    RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY       --
+--    DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE   --
+--    IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR          --
+--    REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF         --
+--    INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A   --
+--    PARTICULAR PURPOSE.                                                     --
+--                                                                            --
+--    Xilinx products are not intended for use in life support appliances,    --
+--    devices, or systems.  Use in such applications are expressly            --
+--    prohibited.                                                             --
+--                                                                            --
+--    (c) Copyright 1995-2017 Xilinx, Inc.                                    --
+--    All rights reserved.                                                    --
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-- You must compile the wrapper file mult_accum.vhd when simulating
+-- the core, mult_accum. When compiling the wrapper file, be sure to
+-- reference the XilinxCoreLib VHDL simulation library. For detailed
+-- instructions, please refer to the "CORE Generator Help".
+
+-- The synthesis directives "translate_off/translate_on" specified
+-- below are supported by Xilinx, Mentor Graphics and Synplicity
+-- synthesis tools. Ensure they are correct for your synthesis tool(s).
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+-- synthesis translate_off
+LIBRARY XilinxCoreLib;
+-- synthesis translate_on
+ENTITY mult_accum IS
+  PORT (
+    clk : IN STD_LOGIC;
+    ce : IN STD_LOGIC;
+    sclr : IN STD_LOGIC;
+    bypass : IN STD_LOGIC;
+    a : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
+    b : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
+    s : OUT STD_LOGIC_VECTOR(47 DOWNTO 0)
+  );
+END mult_accum;
+
+ARCHITECTURE mult_accum_a OF mult_accum IS
+-- synthesis translate_off
+COMPONENT wrapped_mult_accum
+  PORT (
+    clk : IN STD_LOGIC;
+    ce : IN STD_LOGIC;
+    sclr : IN STD_LOGIC;
+    bypass : IN STD_LOGIC;
+    a : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
+    b : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
+    s : OUT STD_LOGIC_VECTOR(47 DOWNTO 0)
+  );
+END COMPONENT;
+
+-- Configuration specification
+  FOR ALL : wrapped_mult_accum USE ENTITY XilinxCoreLib.xbip_multaccum_v2_0(behavioral)
+    GENERIC MAP (
+      c_a_type => 0,
+      c_a_width => 18,
+      c_accum_mode => 0,
+      c_accum_width => 48,
+      c_b_type => 0,
+      c_b_width => 18,
+      c_bypass_low => 0,
+      c_ce_overrides_sclr => 0,
+      c_has_bypass => 1,
+      c_latency => 1,
+      c_out_width => 48,
+      c_round_type => 0,
+      c_use_dsp48 => 1,
+      c_verbosity => 0,
+      c_xdevicefamily => "spartan6"
+    );
+-- synthesis translate_on
+BEGIN
+-- synthesis translate_off
+U0 : wrapped_mult_accum
+  PORT MAP (
+    clk => clk,
+    ce => ce,
+    sclr => sclr,
+    bypass => bypass,
+    a => a,
+    b => b,
+    s => s
+  );
+-- synthesis translate_on
+
+END mult_accum_a;
diff --git a/lib/sources/ram_dp_1024x8.ngc b/lib/sources/ram_dp_1024x8.ngc
new file mode 100644 (file)
index 0000000..4afd999
--- /dev/null
@@ -0,0 +1,3 @@
+XILINX-XDB 0.1 STUB 0.1 ASCII
+XILINX-XDM V1.6e
+$07b\7f44<,[o}e~g`n;"2*73>(-80!<;40123416<89:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?012345679:1:<7GAPTV9eabui531<3?<;029MKVR\3koh\7fl39;2=5d=6;3CE\XZ5AEFQERTFLMX7=?4?>0c856<NFY__6LJKRCPGEABU4881<3?;;049MKVR\3NBMIG31483:42<9?0BB][[:EKA@L:6=3:5=85>6;MVPUSS2MEJHB2>5;2=50=6>3E^X][[:EMA@J:6=3:5==5>:HLSQQ<pmh6;6=0>0:39MKVR\3}nn1>50?37?7<NFY__6IG_AEKS84<768>0>7GAPTV9@LVEL@Z7=7>11291>LHW]]0\ILYJL=394;743;0BB][[:VGAS@S;93:5=85=:NWWTPR=LFZJHB^31;2=50=52F__\XZ5DNRA@JV;93:5j68|ly334ca`<1>&?<?48;KMTPR=l`dj0:4?>038<?OIX\^1hd`m<683:45<03E^X][[:emvpd:0294:?665OTVSQQ<cg|~i0:4?>d9B@ATF_[KOH_2?>g9B@ATF_[KOH_2>0?d8EABUI^XJHI\310<25>GCL[K\^LJKR=31>58a3HNO^LY]AEFQ8449m2KOH_OXR@FGV979m2KOH_OXR@FGV949m2KOH_OXR@FGV959m2KOH_OXR@FGV929m2KOH_OXR@FGV939m2KOH_OXR@FGV909m2KOH_OXR@FGV919m2KOH_OXR@FGV9>9m2KOH_OXR@FGV9?9m2KOH_L]D@FGV969n2KOH_L]D@FGV9776o1JHI\MRECG@W:697;:7LJKRCPGEABU4881<3h4AEFQFWBFLMX7=?0j;@FGVGTCIMNY0<0j;@FGVGTCIMNY0?0j;@FGVGTCIMNY0>0j;@FGVGTCIMNY090j;@FGVGTCIMNY080j;@FGVGTCIMNY0;0j;@FGVGTCIMNY0:0j;@FGVGTCIMNY050j;@FGVGTCIMNY040<;@NO<>DR[VCEJB<4CD31?FNBKBUGENKASD]W]UC33JF@<;5LLJ3;43=DDB8<<85LLJ0[<>EKC;R:4=;4CMI:40=DDBK:;6MCK@3G62=DDBK:H994CMIB5A>>3JF@MZ\LLJ78GIME901H@FL]DBNH1>EKCJ;>7NBDD078GIMC^j1H@FJY_EKUMAC23JF@JU64CMIE\4>712IDA@G[TDF20>EHZLULICK]AUKLJZOINF=0O_KNTDF`?AGSIV]BHYFPAb9GEQGX_@N_DRL7;EKB@L:7601OELJF<02==>BNIMC7=<06;EKB@L:6:730HDOKI=30:<=CAHNB0<:1b:FJEAO;9<0;245KI@FJ843902NBMIG31?:8@LGCA58546JFAEK?7;><L@KOE1:18:FJEAO;=720HDOKI=4=<>BNIMC7;364DHCGM9>902NBMIG39?:8@LDCA5:556JFBEK?558>3MCIHD2>1?;8@LDCA5;9245KICFJ845912NBNIG315<a?AOEL@6:97>19:FJFAO;9<437IGMDH>2:==CAKNB0?07;EKA@L:4611OEOJF<5<;?AOEL@6>255KICFJ838?3MCIHD28>99GMGBN41437IGMDH>::d=CAYKOE]2?>b9GMUGCAY6:6=0n;EKSEAOW484j7IG_BEKS858d3MC[NIG_<083:d=CAYHOE]2>>99GKDBH49427IANDN>24;?<LFKOC1?>>89GKDBH488556J@AEM?568>3MEJHB2>4?`8@JGCG5;>6=06;EMB@J:6=720HBOKO=3=<>BHIME7>364DNCGK95902NDMIA34?:8@JGCG5?546J@AEM?2;><LFKOC1918:FLEAI;0720HBOKO=;=3>BHIVXNK55KOCFL858>3MEIHB2>0?;8@JDCG5;:245KOCFL844912NDNIA312<:?AIELF6:83l4DN@GK97229427IAMDN>21;><LFHOC1?18:FLFAI;:720HBLKO=1=<>BHJME78364DN@GK93902NDNIA36?:8@JDCG5=546J@BEM?<;><LFHOC1717:FLFZTBOh1OC]OKOQ>3:f=CGYKOC]2>:1<b?AIWIME[0<0n;EMSFAIW494h7IA_BEMS84<76h1OC]LKOQ>2:2=BFH]YIC94EO@Q@@He3LDT^^Z]AL]Bf>CIW[Y_^LCPB49EEIUB92M87J@K8:KMMQVX8920ECG[P^22<>OIA]ZT<?64IOKWTZ64?2CEEYQ?069JJLRX88=0ECG[_104?LHN\V:8;6GAIU]302=NF@^T<894IOKW[5003@DBXR>87:KMMQY70>1BBDZP0858MKOSW9K<7D@FT^2A3>OIA]U;O:5FNHV\4A1<AGC_S=K8;HLJPZ6A?2CEEYQ>069JJLRX98=0ECG[_004?LHN\V;8;6GAIU]202=NF@^T=894IOKW[4003@DBXR?87:KMMQY60>1BBDZP1858MKOSW8K<7D@FT^3A3>OIA]U:O:5FNHV\5A1<AGC_S<K8;HLJPZ7A>2CEEYQN6:KMMQYE12CEEYQIIMG5?IIFLLN=7AALKDF4?II@AJKGo6CnjnpUawunggi0Ad``rWgqwlii:2D;>6@>7:LFPRIUC=1ECCK>7:MSPLKNRLU[^DCFTHTFWZH@K81[;6^!59d\H1=WI[^j7]GA_CWPMA^e3YCESO[\N@OF2>VTLFDN56\NMC:AS@T?3[KFS@AKE79QABEBIk1YIJMJBSGDG@2<ZZ^J;6\\TCPPP2=U[]^R\Hk4RRV\TWOHZ@^RSLk4RRV\TWOHZ@^RSO?>;RJQABYBP]XJOYQAGBg8WMTBOVGBBR]FZD30?VOJWJEG@D]FOO]@L@EL>2YDY_MJ7:QQRDJXI>1X^[OC_C48WQGS]Z>0_T@L3:VGT1=SQYO<<6[?/yqw[gjlWdofSjkaescwkw)`fh~bzhlbg/lbplpbWkf`S`kb_fgm+sgkam$h\7fy| r`ookjv\8T$ym` }/r4\mkos&{kf#Y\ZE^FS*UTNE0$ym`m4URGQ[SOTAKFN?6XLC89UM@QX\PZN56YJAVGO858e3^OJ[HB31;2==>QBI^OG0<06;VGAS@S;87h0[HLXET>2>58>3^OI[H[31?`8SWOSMVLB^^Zl;VPJP@YJGMOTMn5XRHVF[HICMVH:h6VFLHL[)]BE(9$:,^ZZB!2-5%GTK@C=7U][LH@4?]USWNDO;6V\T^T@Gg=_WJEYIRGAFN48\adXAml0TifPPsknR`ttafd:<6Vkm^ObnjtQm{ybcc??;Yfn[Hoig{\n~~g`n29[wq5<Qly37ljkr`>3:==flmxj0<07;`fgvd:5611jhi|n<2<;?dbczh6?255ndepb808?3hno~l29>99b`atf4>437ljkr`>;:d=flmxj044?>99b`atf40437ljkrc>3:==flmxi0<07;`fgvg:5611jhi|m<2<;?dbczk6?255ndepa808?3hno~o29>99b`ate4>437ljkrc>;:d=flmxi044?>99b`ate404:46lck^ofiZabfVmnbh|fc^appw713kf`S`kb_fgm[utneV}bhyf=0:`ooZkbeVmnbR~}il]tvdvwm{Ux:Rgaiud8fimXelgTkh`Ptnr24>dkcVgnaRijn^t4[64d3kf`S`kb_fgm[s1X;%*Seagax!ALV@&@mgoymya} 06-142<jeaTahcPgdl\r2Y4Wqy\7f=>5mlj]nahYnfy\7f\7fSob`cj37?gjlWdofSb{{ptv\fiidc=1h`fo;;bnhf2=cagk7<394dhlb84803mcem1<17:fjjd:46>1oeco34?58`lhf4<4<7igaa=4==>bnfh6<6=08;ekme919?2nbbo2?>69gmkd;97=0hd`m<3<4?aoij595;6jfnc>7:2=cagh79394dhla838>3mcen1950?58`lhe4>437iazt`>3:==cg|~j0<07;emvpd:5611ocxzn<2<;?air|h6?255kotvb808?3me~xl29>`9gkprf4>0;255kotvb828?3me~xo2?>99gkpre48437iaztc>1:==cg|~i0>07;emvpg:3611ocxzm<4<;?air|k6=2l5kotva82<7611ocxzm<6<;?kadj|cgh?5aoe9qehYcxV;;>9v74g68vdkXlyU:<?:w8-`ooZkbeVmnbRx8_2.xgZgcl{kT{dj{h<33(fYflmxiSzgkti?24)eXiemd~dzgm<3/gZg\7faVcoSzgkti?7(fYfp`Ux`lxj_u{sa86+kVkseRzvpd?2(fYeq}oT\7fdtj=8.`[fijefdToae20-a\```f}e~Thlzn=1.`[aotikfnSzo}n^`krZehde7; nQkircah`Ypi{dTnexPr`lda86+kVogmoa}aukljZbnz4%cc`k semnev)dgmo$ZEJC/cnbwq+bp8%b\7fh!fpbmqaZbnz&~f|"Qlg..`[`hfjeoT??lft^cg`wct{4:'oRhnmhnz9vvfz}ke:!mPh`q\e}oXam7; nQgar]fjd;7$jUcm~Qjnc?3(fYoizUbbgkltdpq95*dWakxS`kb_nwwtprXzlmxSl3?,b]kevYjmdUdyy~zt^pfcvYe59&hSeo|_lw{[jssx|~T~hi|_`?3(fYoizUfyuQ`uurvpZtbozUi1="l_icp[wc`klk6<!mPh`q\v`admk7; nQgar]qwqg:8%iTdl}Prrva95*dWakxS~aitda`[lhw}}Uyij}Pa<2/gZnf{Vydjyklc^mvpussW{ol\7fRl20-a\mkosWocgi0LcaoiPpwoio%iTecg{_gkoaZhfel7ecRm`e^djh`Ykghnnh!mPiokweZpfd4:'oRgaiu`\rdj:8%iTeczjrgc`aZr~xl7; nQco`f\mkosWocgi0>#c^ofiZr~xl79 nQbuy]smuckagoT\7fyoher?3(fYwz`gTxt~j=0.`[wcflVnn|yfPa<3361*dW{ojhRjjpuj\f877:=&hS\7fknd^uj`qnXi42'oR|jae]tmaroWk73 nQ}su]svliua}sTm0MJ,b]qwqYwz`eyeywPb<AF(fYu{}U\7fu}k2SXL@(fYu{}xjaRo20-a\vvruidUi1="l_rkn[fikd`ybccQlhdah9DJK$jU~\7fhQmr`o\fiidc4:'oR{|e^`zp`Ypmh7; nQzsd]a}qcX\7flh6<!mPurg\```f}e~Thlzn=0.`[pubWlih1="l_tqf[via|lih1="l_vgb[roc|a7: nQxec]tmaro58&hSz|ftd]gauroWh7:<?:#c^uqmqcXllz\7fdRl21107(fYpz`~nS`ake^c>SWOSMVLB^^Z#c^uqmqcXefnnSo3XRHVF[COU[]&hSz|ftd]tmaroWh73 nQxrhvf[roc|aUi15"l_yffrlebnhgb`t3|p`pwek0z:81ym`Qkp^3361~?$kf`S`kb_fgm[s1X;%qv46yja=294;0<\7flk7<364wd`?4?69>2}nn1>1}ABs57g<HIr:9>4I:582\7fV2b28:j6im5121`=33=:;?=hv`>0982?k7713<0(<>9:022?xU3k3;;m7jl:010g<022;8>;<5\d08214<72898o48::306=a=T<j0:9<4?:010g<022;8>5h5k14194?7=9rY?i7??a;f`>454k0<>6?<:719uP`b=83;1=7=n{R6f>46f2mi1=>=l9779673082.m;7j<;W333?4|}m>1=6{k5;28y!bc28>0n<;<:180<?5=;hqCj85+f28216=];?03wn4;:079`?3=9?0:;7?7:|&240<6:>1/?54>549'0a<6==1/io4>;%gb>46e3`;>;7>5$ed9500<fmo1<65f10494?"cn3;:96`ke;28?l76<3:1(ih51078jac=921b=<=50;&gb?76=2doi7<4;h326?6=,ml1=<;4neg97>=n98;1<7*kf;321>hcm3>07d?>0;29 a`=98?0bik55:9j55`=83.oj7?>5:lga?0<3`;;i7>5$ed9543<fmo1;65f11f94?"cn3;:96`ke;:8?l77k3:1(ih51078jac=121b=>;50;&gb?74<2doi7>4;h307?6=,ml1=>:4neg95>=n9:81<7*kf;300>hcm3807d?<1;29 a`=9:>0bik53:9j566=83.oj7?<4:lga?2<3`;9j7>5$ed9562<fmo1965f13g94?"cn3;886`ke;48?l75l3:1(ih51268jac=?21b=8750;&gb?7202doi7>4;h315?6=,ml1=?>4neg94>=n98l1<7*kf;314>hcm3;07d?>e;29 a`=9;:0bik52:9j54b=83.oj7?=0:lga?5<3`;:o7>5$ed9576<fmo1865f10`94?"cn3;9<6`ke;78?l76i3:1(ih51328jac=>21b=<750;&gb?7582doi794;h32<?6=,ml1=?>4neg9<>=n98=1<7*kf;314>hcm3307d?<e;29 a`=9:n0bik50:9j56e=83.oj7?<d:lga?7<3`;8n7>5$ed956b<fmo1>65f12c94?"cn3;8h6`ke;18?l7413:1(ih512f8jac=<21b=>650;&gb?74l2doi7;4;h303?6=,ml1=>j4neg92>=n9:<1<7*kf;30`>hcm3=07d?=b;29?l75k3:17b?;7;29 a`=9=<0bik50:9l513=83.oj7?;6:lga?7<3f;?87>5$ed9510<fmo1>65`15194?"cn3;?:6`ke;18?j73:3:1(ih51548jac=<21d=9?50;&gb?73>2doi7;4;n374?6=,ml1=984neg92>=h9:l1<7*kf;372>hcm3=07b?:0;29 a`=9=l0bik50:9l51c=83.oj7?;f:lga?7<3f;?h7>5$ed951`<fmo1>65`15a94?"cn3;?j6`ke;18?j73j3:1(ih515d8jac=<21d=9o50;&gb?73n2doi7;4;n37=?6=,ml1=9h4neg92>=h9=21<7*kf;37b>hcm3=07o??4;295?6=8r.m?7h9;I336>Na=2eon7>5;|`246<7280;6=u+f28b=>N68;1Cj85`a983>>{en=0;6;k50;2x c5=m81C==<4Hg78^60=kr<1;7?=:019b?c=990:=7o59;:9f?{#lh0:9?5a4g8:?k37201e4l4?;o;`>5=#i<0j;6*n6;c4?!gf2:1/mo4<;%c`>6=#im087)oj:29'ec<43-h;6>5+b080?!d52:1/n>4<;%`7>6=#j<087)l9:29'f2<43-h36>5+b880?!df2:1/no4<;%``>6=#jm087)lj:29'fc<43-i;6>5+c080?!e52:1/o>4<;%a7>6=#k<087)m9:29'g2<43-i36>5+c880?!ef2:1/oo4<;%a`>6=#km087)mj:39'gc<53-n;6i74$d09b7=#m>0m=6*j8;14?!c>2:=0(hm5349'a`<53-om6?5+fg8ea>"6890mi6gj6;29?lg32900eh=50;9je6<722c??7>5;h66>5<<al>1<75fe483>>oai3:1(ih5f89m``<732cm47>5$ed9b<=ill0:76a70;29 a`=?o1ehh4?;:m4a?6=,ml1;k5add82?>i0l3:1(ih57g9m``<532e<o7>5$ed93c=ill0876a8b;29 a`=?o1ehh4;;:m4e?6=,ml1;k5add86?>i?13:1(ih57g9m``<132e347>5$ed93c=ill0<76a77;29 a`=?o1ehh47;:m;2?6=,ml1;k5add8:?>i?=3:1(ih57g9m``<f32e387>5$ed93c=ill0i76a73;29 a`=?o1ehh4l;:m;6?6=,ml1;k5add8g?>i?93:1(ih57g9m``<b32e<57>5$ed93c=ill0m76a6f;29 a`=1l1ehh4?;:m:`?6=,ml15h5add82?>if:3:1(ih5a09m``<732ej<7>5$ed9e4=ill0:76gid;29 a`=nj1ehh4?;:kef?6=,ml1jn5add82?>o6l3:1(ih51b9m``<732c:n7>5$ed95f=ill0:76g>a;29 a`=9j1ehh4=;:k12?6=,ml1=n5add80?>o5=3:1(ih51b9m``<332c987>5$ed95f=ill0>76g=3;29 a`=9j1ehh49;:k16?6=,ml1=n5add84?>o593:1(ih51b9m``<?32c9<7>5$ed95f=ill0276g>f;29 a`=9j1ehh4n;:k2a?6=,ml1=n5add8a?>o613:1(ih51b9m``<d32c<47>5$ed932=ill0;76g86;29 a`=?>1ehh4>;:k5=?6=,ml1:55add83?>o1?3:1(ih5699m``<632c=:7>5$ed92==ill0976g95;29 a`=>11ehh4<;:k50?6=,ml1:55add87?>o1;3:1(ih5699m``<232c<>7>5$ed92==ill0=76g81;29 a`=>11ehh48;:k44?6=,ml1:55add8;?>o1n3:1(ih5699m``<>32c=i7>5$ed92==ill0j76g9d;29 a`=>11ehh4m;:k5g?6=,ml1:55add8`?>o1j3:1(ih5699m``<c32c=m7>5$ed92==ill0n76g92;29 a`=>11ehh4i;:k6<?6=,ml19:5add83?>o2>3:1(ih5569m``<632c>97>5$ed912=ill0976g:4;29 a`==>1ehh4<;:k67?6=,ml19:5add87?>o2:3:1(ih5569m``<232c==7>5$ed912=ill0=76g90;29 a`==>1ehh48;:k6b?6=,ml19:5add8;?>o2m3:1(ih5569m``<>32c>h7>5$ed912=ill0j76g:c;29 a`==>1ehh4m;:k6f?6=,ml19:5add8`?>o2i3:1(ih5569m``<c32c>57>5$ed912=ill0n76g:1;29 a`==>1ehh4i;:k1f?6=,ml1>l5add83?>o513:1(ih52`9m``<632c947>5$ed96d=ill0976g<4;29 a`=:h1ehh4<;:k07?6=,ml1>l5add87?>o4:3:1(ih52`9m``<232c8=7>5$ed96d=ill0=76g<0;29 a`=:h1ehh48;:k1b?6=,ml1>l5add8;?>o5m3:1(ih52`9m``<>32c9h7>5$ed96d=ill0j76g=c;29 a`=:h1ehh4m;:k13?6=,ml1>l5add8`?>i>:3:1(ih5909m``<732e2<7>5$ed9=4=ill0:76a7f;29 a`=181ehh4=;:m;a?6=,ml15<5add80?>i?l3:1(ih5909m``<332e3o7>5$ed9=4=ill0>76a6b;29 a`=181ehh49;:m:e?6=,ml15<5add84?>i>13:1(ih5909m``<?32e247>5$ed9=4=ill0276a67;29 a`=181ehh4n;:m:2?6=,ml15<5add8a?>i>=3:1(ih5909m``<d32e287>5$ed9=4=ill0o76a63;29 a`=181ehh4j;:m;f?6=,ml15<5add8e?>o0=3:1(ih5759m``<732c<?7>5$ed931=ill0:76s|d783>6}:99>1ho52f58b7>;a<3k?7p}k7;295c}:9991m552f582b>;a<3;n70h;:0;89c2=:m16j94=c:?e0?4034l?6864=g6913=:n=0>963i4;77?8`32<901k:5539>b1<1927m878?;<d7>3?<5o>1::52f5852>;a<3<>70h;:7689c2=>:16j9482:?e0?1634l?6:;4=g6936=:n=0<463i4;55?8`32l901k:5e59>b1<b=27m87k9;|q20=<72;qU=964=g69<g=z{8>26=4={_37=>;a<3387p}>4`83>7}Y9=k01k:5959~w42e2909wS?;b:?e0??23ty:8n4?:3y]51e<5o>15;5rs06g>5<5sW;?h63i4;;4?xu6<l0;6?uQ15g89c2=111v\7f<;?:181\7f[72827m8776;|q27c<72;qU=>h4=g693<=z{8>;6=4={_374>;a<32:7p}>4083>7}Y9=;01k:5839~w4252909wS?;2:?e0?>43ty:8>4?:3y]515<5o>1495rs067>5<5sW;?863i4;:6?xu6<<0;6?uQ15789c2=0?1v\7f<:8:181\7f[73?27m8768;|q26f<72;qU=?m4=g6900=z{88i6=4={_31f>;a<3>87p}>3783>7}Y9:<01k:5639~w4502909wS?<7:?e0?0f3ty:?54?:3y]56><5o>1:o5rs01:>5<5sW;8563i4;4`?xu6;h0;6?uQ12c89c2=>m1v\7f<=m:181\7f[74j27m878j;|q27f<72;qU=>m4=g692c=z{89n6=4={_30a>;a<3=;7p}>1683>7}Y98=01k:52d9~w47?2909wS?>8:?e0?4a3ty:=44?:3y]54?<5o>1?=5rs03b>5<5sW;:m63i4;12?xu69k0;6?uQ10`89c2=;;1v\7f<?l:181\7f[76k27m87=<;|q25a<72;qU=<j4=g6971=z{8;n6=4={_32a>;a<3837p}>1g83>7}Y98l01k:5289~w4462909wS?=1:?e0?4e3ty:944?:2y]50?<5o>1ji52f58ef>{t9;n1<7<t^00g?8`32<;0q~?=e;296~X6:l16j94:9:\7fp57`=838pR<<i;<d7>0g<uz;8<7>52z\275=:n=0>n6s|12394?4|V89:70h;:4a8yv74:3:1>vP>339>b1<2l2wx=>=50;0xZ45434l?68k4}r301?6=:rT:?852f586b>{t99i1<7<t^02`?8`32;:0q~??d;296~X68m16j94=1:\7fp55c=838pR<>j;<d7>74<uz;;j7>52z\24c=:n=09?6s|10294?4|V8;;70h;:368yv7693:1>vP>109>b1<5=2wx=<<50;0xZ47534l?6?84}r327?6=:rT:=>52f582e>{t98>1<7<t^037?8`328h0q~?>6;296~X69?16j94>d:\7fp501=839pR<;8;<d7>cg<5o>1j55r}o`5>5<6sAl>7p`m7;295~Na=2wen54?:0yKb0=zfk31<7?tHg78ykdf290:wEh:;|laf?6=9rBm96sabb83>4}On<1vboj50;3xLc3<ughn6=4>{Id6?xhen3:1=vFi5:\7fmg5<728qCj85rnb394?7|@o?0qcm=:182\7fM`23tdh?7>51zJe1>{ik=0;6<uGf49~jf3=83;pDk;4}oa5>5<6sAl>7p`l7;295~Na=2weo54?:0yKb0=zfj31<7?tHg78ykef290:wEh:;|l`f?6=9rBm96sacb83>4}On<1vbnj50;3xLc3<ugin6=4>{Id6?xhdn3:1=vFi5:\7fm`5<728qCj85rne394?7|@o?0qcj=:182\7fM`23tdo?7>51zJe1>{il=0;6<uGf49~ja3=83;pDk;4}of5>5<6sAl>7p`k7;295~Na=2weh54?:0yKb0=zfm31<7?tHg78ykbf290:wEh:;|lgf?6=9rBm96sadb83>4}On<1vbij50;3xLc3<ugnn6=4>{Id6?xhcn3:1=vFi5:\7fma5<728qCj85rnd394?7|@o?0qck=:182\7fM`23tdn?7>51zJe1>{im=0;6<uGf49~j`3=83;pDk;4}og5>5<6sAl>7p`j7;295~Na=2wei54?:0yKb0=zfl31<7?tHg78ykcf290:wEh:;|lff?6=9rBm96saeb83>4}On<1vbhj50;3xLc3<ugon6=4>{Id6?xhbn3:1=vFi5:\7f~yxFGKr;9m7l>5c`e2g{GHKq;qMN_{|BC
\ No newline at end of file
diff --git a/lib/sources/ram_dp_1024x8.vhd b/lib/sources/ram_dp_1024x8.vhd
new file mode 100644 (file)
index 0000000..d6459c5
--- /dev/null
@@ -0,0 +1,158 @@
+--------------------------------------------------------------------------------
+--    This file is owned and controlled by Xilinx and must be used solely     --
+--    for design, simulation, implementation and creation of design files     --
+--    limited to Xilinx devices or technologies. Use with non-Xilinx          --
+--    devices or technologies is expressly prohibited and immediately         --
+--    terminates your license.                                                --
+--                                                                            --
+--    XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY    --
+--    FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES.  BY    --
+--    PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE             --
+--    IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS      --
+--    MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY      --
+--    CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY       --
+--    RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY       --
+--    DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE   --
+--    IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR          --
+--    REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF         --
+--    INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A   --
+--    PARTICULAR PURPOSE.                                                     --
+--                                                                            --
+--    Xilinx products are not intended for use in life support appliances,    --
+--    devices, or systems.  Use in such applications are expressly            --
+--    prohibited.                                                             --
+--                                                                            --
+--    (c) Copyright 1995-2017 Xilinx, Inc.                                    --
+--    All rights reserved.                                                    --
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-- You must compile the wrapper file ram_dp_1024x8.vhd when simulating
+-- the core, ram_dp_1024x8. When compiling the wrapper file, be sure to
+-- reference the XilinxCoreLib VHDL simulation library. For detailed
+-- instructions, please refer to the "CORE Generator Help".
+
+-- The synthesis directives "translate_off/translate_on" specified
+-- below are supported by Xilinx, Mentor Graphics and Synplicity
+-- synthesis tools. Ensure they are correct for your synthesis tool(s).
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+-- synthesis translate_off
+LIBRARY XilinxCoreLib;
+-- synthesis translate_on
+ENTITY ram_dp_1024x8 IS
+  PORT (
+    clka : IN STD_LOGIC;
+    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addra : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
+    dina : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    douta : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
+    clkb : IN STD_LOGIC;
+    web : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addrb : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
+    dinb : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    doutb : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
+  );
+END ram_dp_1024x8;
+
+ARCHITECTURE ram_dp_1024x8_a OF ram_dp_1024x8 IS
+-- synthesis translate_off
+COMPONENT wrapped_ram_dp_1024x8
+  PORT (
+    clka : IN STD_LOGIC;
+    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addra : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
+    dina : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    douta : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
+    clkb : IN STD_LOGIC;
+    web : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addrb : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
+    dinb : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    doutb : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
+  );
+END COMPONENT;
+
+-- Configuration specification
+  FOR ALL : wrapped_ram_dp_1024x8 USE ENTITY XilinxCoreLib.blk_mem_gen_v7_3(behavioral)
+    GENERIC MAP (
+      c_addra_width => 10,
+      c_addrb_width => 10,
+      c_algorithm => 1,
+      c_axi_id_width => 4,
+      c_axi_slave_type => 0,
+      c_axi_type => 1,
+      c_byte_size => 9,
+      c_common_clk => 0,
+      c_default_data => "0",
+      c_disable_warn_bhv_coll => 0,
+      c_disable_warn_bhv_range => 0,
+      c_enable_32bit_address => 0,
+      c_family => "spartan6",
+      c_has_axi_id => 0,
+      c_has_ena => 0,
+      c_has_enb => 0,
+      c_has_injecterr => 0,
+      c_has_mem_output_regs_a => 0,
+      c_has_mem_output_regs_b => 0,
+      c_has_mux_output_regs_a => 0,
+      c_has_mux_output_regs_b => 0,
+      c_has_regcea => 0,
+      c_has_regceb => 0,
+      c_has_rsta => 0,
+      c_has_rstb => 0,
+      c_has_softecc_input_regs_a => 0,
+      c_has_softecc_output_regs_b => 0,
+      c_init_file => "BlankString",
+      c_init_file_name => "no_coe_file_loaded",
+      c_inita_val => "0",
+      c_initb_val => "0",
+      c_interface_type => 0,
+      c_load_init_file => 0,
+      c_mem_type => 2,
+      c_mux_pipeline_stages => 0,
+      c_prim_type => 1,
+      c_read_depth_a => 1024,
+      c_read_depth_b => 1024,
+      c_read_width_a => 8,
+      c_read_width_b => 8,
+      c_rst_priority_a => "CE",
+      c_rst_priority_b => "CE",
+      c_rst_type => "SYNC",
+      c_rstram_a => 0,
+      c_rstram_b => 0,
+      c_sim_collision_check => "ALL",
+      c_use_bram_block => 0,
+      c_use_byte_wea => 0,
+      c_use_byte_web => 0,
+      c_use_default_data => 1,
+      c_use_ecc => 0,
+      c_use_softecc => 0,
+      c_wea_width => 1,
+      c_web_width => 1,
+      c_write_depth_a => 1024,
+      c_write_depth_b => 1024,
+      c_write_mode_a => "WRITE_FIRST",
+      c_write_mode_b => "WRITE_FIRST",
+      c_write_width_a => 8,
+      c_write_width_b => 8,
+      c_xdevicefamily => "spartan6"
+    );
+-- synthesis translate_on
+BEGIN
+-- synthesis translate_off
+U0 : wrapped_ram_dp_1024x8
+  PORT MAP (
+    clka => clka,
+    wea => wea,
+    addra => addra,
+    dina => dina,
+    douta => douta,
+    clkb => clkb,
+    web => web,
+    addrb => addrb,
+    dinb => dinb,
+    doutb => doutb
+  );
+-- synthesis translate_on
+
+END ram_dp_1024x8_a;
diff --git a/lib/sources/ram_dp_2048x8.ngc b/lib/sources/ram_dp_2048x8.ngc
new file mode 100644 (file)
index 0000000..d9c70a4
--- /dev/null
@@ -0,0 +1,3 @@
+XILINX-XDB 0.1 STUB 0.1 ASCII
+XILINX-XDM V1.6e
+$0af\7f44<,[o}e~g`n;"2*73>(-80!<74012345678=:0<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;=95>1;KMTPR=imnym1??:1<20>762@D[YY4ndepa846=87;?7<:5IORVP?GCL[K7=>4?>06851<NFY__6LJKRC>27?69991:6D@_UU8tad:7294:<6?5IORVP?qbj5:1<3?=;209MKVR\3NBM1=>:1<26>552@D[YY4KIC>05?699:18>7AZTQWW>AIF4:;1<3?<;209KPRW]]0OCO2<1;2=54=32@D[YY4KIQC?7?69981?6D@_UU8GMUD;;3:5==5;:HLSQQ<PMH686=0>0:69MKVR\3]NN1=50?31?1<H]]Z^X7J@P@>0>586:2>1CXZ_UU8GKUD;;3:5j68|ly334ca`<1>&?<?48;KMTPR=l`dj0:4?>038<?OIX\^1hd`m<683:45<03E^X][[:emvpd:0294:?665OTVSQQ<cg|~i0:4?>99B@ATF49427LJKR@>24;?<IMNYM1?>>89B@ATF4885n6OKDSC?56<7601JHI\N<01=<>GCL[K7=364AEFQE94902KOH_O33?:8EABUI5>546OKDSC?1;><IMNYM1818:CG@WG;?720MIJ]A=:=<>GCL[K75364AEFQF96912KOH_L311<:?DBCZK6:=374AEFQF9756k1JHI\M<0194;?<IMNYN1?<>99B@ATE48437LJKRC>1:==FLMXI0>07;@FGVG:3611JHI\M<4<;?DBCZK6=255NDEPA828?3HNO^O27>99B@ATE40487LBC8:@VWZOINF80OH?=;BJFGNYKAJOE_HQ[YQG7?FJL8?1H@F?7079@HN408<1H@F<W8:AOO7^609?0OAE6059@HNG23JF@M<94CMIB5A403JF@M<J;7:AOOD7C0=1H@FL:;BNHF43<KEAH=85LLJF21>EKCM\h7NBDDW]GMSOCM<1H@FHW8:AOOC^60930OBCBIUVF@42<KFXNSJKAESCWMJHXAGLD;6M]E@VF@f=CI]KT[DJ[H^C`?AGSIV]BHYFPB79GMD:76>1OEL2>0?58@LG;984<7IGN<00=3>BNI5;82:5KI@>20;1<L@K7=808;EKB8409?2NBM1?8>69GMD:607=0HDO318<5?AOF484<7IGN<32=3>BNI58:2:5KI@>16;1<L@K7>>08;EKB8729?2NBM1<:>69GMD:5>7=0HDO326<4?AOF4;25;6JFA=0::3=CAH692:5KI@>04;?<L@K7?<4?>69GMD:497<0HDO33?48@LG;<7<0HDO35?48@LG;>7<0HDO37?48@LG;07<0HDO39?48@LD;87=0HDL311<4?AOE48;5;6JFB=31:2=CAK6:?394DH@?51803MCI0<;17:FJF9716>1OEO2>7?58@LD;914<7IGM<0;=2>BNJ5;5;6JFB=03:2=CAK69=394DH@?67803MCI0?=17:FJF9436>1OEO2=5?58@LD;:?4<7IGM<35=3>BNJ5832:5KIC>1=;0<L@H7>394DH@?758>3MCI0>?50?58@LD;;84=7IGM<2<5?AOE4=4=7IGM<4<5?AOE4?4=7IGM<6<5?AOE414=7IGM<8<4?AOWI5:5;6JFP@>2:2=CAYK7>374DHRB86<76>1OE]O33?58@LVE494<7IG_B=3=3>BNXK69245KIQ@?7?69?2NB\O2<>79GKD:76>1OCL2>0?58@JG;984<7IAN<00=3>BHI5;82:5KO@>20;1<LFK7=808;EMB8409?2NDM1?8>69GKD:607=0HBO318<5?AIF484<7IAN<32=3>BHI58:2:5KO@>16;1<LFK7>>08;EMB8729?2NDM1<:>69GKD:5>7=0HBO326<4?AIF4;25;6J@A=0::3=CGH692:5KO@>04;?<LFK7?<4?>69GKD:497<0HBO33?48@JG;<7<0HBO35?48@JG;>7<0HBO37?48@JG;07<0HBO39?58@JGXZLM=7IAM<1<4?AIE48:5;6J@B=32:2=CGK6:>394DN@?56803MEI0<:17:FLF9726>1OCO2>6?58@JD;9>4<7IAM<0:=3>BHJ5;22;5KOC>2:2=CGK69<394DN@?64803MEI0?<17:FLF9446>1OCO2=4?58@JD;:<4<7IAM<34=3>BHJ58<2:5KOC>1<;1<LFH7>409;EMA87803MEI0>>19:FLF956294<7IAM<23=2>BHJ595:6J@B=6=2>BHJ5?5:6J@B=4=2>BHJ5=5:6J@B=:=2>BHJ535;6J@B^PFC2=CGYK7<394DNRB84803ME[M1<19:FLTD:4294<7IA_A=1=3>BHXK6;2:5KOQ@?5;1<LFZI0?06;EMSF95=87=0HB^M<2<0?@HF;2OENo5JN^PPPWGJWHh0ICQ]SUPBIZD23OKG_H?4G29DJA><AGC_\R>?8:KMMQVX8820ECG[P^21<>OIA]ZT<>64IOKWTZ6302CEEY^P04:8MKOSXV:=46GAIUR\421<AGC_S=>8;HLJPZ66?2CEEYQ?269JJLRX8:=0ECG[_164?LHN\V:>;6GAIU]322=NF@^T<:94IOKW[5>03@DBXR>67:KMMQY7I>1BBDZP0C58MKOSW9I<7D@FT^2G3>OIA]U;I:5FNHV\4C1<AGC_S<>8;HLJPZ76?2CEEYQ>269JJLRX9:=0ECG[_064?LHN\V;>;6GAIU]222=NF@^T=:94IOKW[4>03@DBXR?67:KMMQY6I>1BBDZP1C58MKOSW8I<7D@FT^3G3>OIA]U:I:5FNHV\5C1<AGC_S?>8;HLJPZ46?2CEEYQ=269JJLRX::=0ECG[_364?LHN\V8>;6GAIU]122=NF@^T>:94IOKW[7>03@DBXR<67:KMMQY5I>1BBDZP2C58MKOSW;I<7D@FT^0G3>OIA]U9I:5FNHV\6C1<AGC_S>>8;HLJPZ56?2CEEYQ<269JJLRX;:=0ECG[_264?LHN\V9>;6GAIU]022=NF@^T?:94IOKW[6>03@DBXR=67:KMMQY4I>1BBDZP3C58MKOSW:I<7D@FT^1G3>OIA]U8I:5FNHV\7C0<AGC_SL84IOKW[G?<AGC_SKGCE79OKDBBL?1GCNEJD69OKBODIEi0Ald`rWgqwliik2Gbbb|Yesqjkk4<F980B<94NDVTKWM33GEEI<94OQVJIL\BWYXBADZFVDQ\JBE63Y=0\#;7f^N7?UGU\h1[ECQMURKG\g=WAGUIY^@NMD48TVBHFLk0^LCM17@TAW0<ZLMHIL84RDE@AG2<ZZ^J86\\TC58VVRSQYOn7_][_QPJKWOSQVKn7_][_QPJKWOSQVH:=6]GRDE\A]RUIJ^TBJMj;RJQABYJAGUXEWK>3:QJIZEHDECXEB@PCIG@Od=TADUOI[GLE79PKPTDM11X\L\[AO44?VTQIEUJ;6]]V@N\F3=T\H^^_95\YOA7?Q_WM>;0Y=!wsu]ahnYjmdUlick}aumq+bhf|`|nn`i!n`vjr`YedbUfi`Qheo-ueioc&jy\7f~"|nmmmlt^6Z&{kf"\7f!|6^kmmq(uid%_^XKPDQ,SVLK60'xjan5ZSDP\RLUNJEO87[ML9:TJARYSQYO=7ZKN<1<5?RCF484=7ZKN<3<;?RCF4:0;2;5XE@>0:3=PMK6;2;5XEC>2:3=PMK69255XEC>0>5813^OI0>0m;VPJP@YAA[Y_o6Y]IUG\IJBBWHi0[_G[E^OL@@YE9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON>2RXXAGM7:ZPPZAIL>1S_YQYCB`8\ZEHZLUBBKA9;Yfa[Lba3QncS]|fmWgqwlii991Sh`QBakmqR`ttafd:<6Vkm^OjjjtQm{ybcc=4Xrv0?\ct02koh\7fo30?`8eabui5;;6=06;`fgvd:68720mij}a=3=<>gcl{k7>364aefqe95902koh\7fo34?:8eabui5?546okdsc?2;><imnym1918:cg`wg;0720mij}a=;=<>gcl{h7<3l4aefqf97729427ljkrc>24;><imnyn1?18:cg`wd;:720mij}b=1=<>gcl{h78364aefqf93902koh\7fl36?:8eabuj5=546okds`?<;><imnyn171199ahnYjmdUlicQheogqmfYd{}x::6lck^ofiZabfVzye`Qxievk65=edbUfi`Qheo]svlkX\7f{k{|h|Ps7]jjlra3kf`S`kb_fgm[qiw991i`fQbel]dakYq?V99o6lck^ofiZabfV|<S>"/Xhnjj}&DG[O+Kh`jr`vlv%73&<;?7obd_lgn[bciW\7f=T?Rv|t018fimXelgTec~zt^`okfm6<2hggRcjm^mvpussWkfdof:4cmib0>ekck=0hd`n<1<4?aoii5;5;6jfn`>1:2=cagk7?394dhlb81803mcem1;17:fjjd:1601oeco37;2=3>bnfh6<2:5kio`?4;1<l`di0<08;ekmf949?2nbbo2<>69gmkd;<7=0hd`m<4<4?aoij5<556jfnc>4>5803mcen1918:flqqg;8720hb{{a=3=<>bh}}k7>364dnwwe95902ndyyo34?:8`jssi5?546j`uuc?2;g<lf\7f\7fm1950?:8`jssi5=546j`uu`?4;><lf\7f\7fn1?18:flqqd;:720hb{{b=1=<>bh}}h78364dnwwf93902ndyyl36?c8`jssj5=1<364dnwwf91902dloo{fle08jjb<zhgTh}Q=05:{<1`33{kfSi~P216;|=*edbUfi`Qheo]u3Z5+sjUjhi|n_vkgpm;69%iTmij}b^uj`qn:98&hSlbhoskwlh;6$jUjtdQfd^uj`qn:<%iTmugPsmcuaZr~xl7; nQnxh]w}uc:9%iTntzj_rkya8?+kVida`aa_bnh94*dWmommxb{_ecwe86+kVnb\7fllce^ubvkYe`\7fUhcab20-a\`lufjeoT{l|a_cju[wgiol7; nQjl``lvdrnggUoe\7f3 hnof+vbhehy$objj/WJGH*dkiz~&iu? irg,muehzlUoe\7f!{mq-\gb)+kVoemobj_20amqYflmxn\7f~3?,b]eehokq4y{m\7fznn7.`[mgtWhrbSdj20-a\lduXmgk6<!mPh`q\akd:8%iTdl}Piohfgqcuz4:'oRfns^ofiZir|y\7f\7fS\7fkhs^c>4)eX`hyTahcPotvsqqYumnyTn0>#c^jbwZkrpVe~x}{{_sgdwZg:8%iTdl}Pmtz\kprw}}Uyij}Pb<2/gZnf{Vxnknkn=1.`[mgtW{olohl20-a\lduXzz~j1="l_icp[wusj4:'oRfns^qlbqcdkVce|xzPrdep[d;7$jUcm~Q|ogvfgfYh}}z~xR|jgr]a95*dW`dbxRhfld?Ahdhl[}xbbj"l_hljpZ`ndlUem`k2nn]`k`YaaeoT`bokee.`[lhn|hU}ma3?,b]jjlreW\7fkg1="l_hlwaw`fklU\7fu}k20-a\hjgcW`dbxRhfld?3(fYjmdU\7fu}k22-a\ip~Xx`zn`d`j_rvbc`u:8%iT|\7fgb_u{sa87+kVxnmiQkeqvk[d;58=2'oR|jae]gauroWk79<96#c^pfeaYpam~cSl37,b]qadbX\7f`n\7fdRl28-a\vvrXx{cd~dzv_`?@A)eXzz~T|\7fg`rhvz[g;DM%iT~~zPtxrf9V_IK%iT~~z}al]b95*dW{y\7f~lcPb<2/gZuneVid`ag|inl\gmcdc4KG@!mPurg\fwgjWkfdof3?,b]vw`Yeq}oT{ho20-a\qvcXjp~nSzkm=1.`[pubWmommxb{_ecwe87+kV\7fxiRklc<2/gZstmVydjyklc<2/gZqbiV}bhyf21-a\s`dX\7f`n\7fd0?#c^uqmqcXllz\7fdRo2216;(fYpz`~nSik\7fti]a97630%iT{\7fg{e^ol``Yf5^XBXHQIISQW(fYpz`~nS`ake^`>SWOSMVLB^^Z#c^uqmqcX\7f`n\7fdRo28-a\swosmV}bhyfPb<:/gZ~cm\7fchikobim{>wugu|hd=q??4r`o\`uY58=2s4!lck^ofiZabfV|<S>"t}99tad:7294=7zkn<1<;?rce490;2;5xec>3:xFGx8=n7MNw1b59B?2=9rY><7?8c;37e?74;j3<=7?j296xj41f281e=:l56:&23=<6?:1v_9k516a951g=9:9h5:?51d0;=>U6;o0:o84?:010g<1628o94i5\4d82g0<72898o49>:0g1<`=c9j=1<7?51zQ64?70k3;?m7?<3b;45?7b:120zY?:b;295?7=;jqX9=4>7b820d<6;:i2;<4>e3:;?!71=3;?=6X>7881\7fp73:3;0y<:<:19~ 42e28>0n<m8:180e?5=;jqC=;=4$042>4e03S9365u7:5821??==3;=6<95198~ 410283i7)=n:0a:?!2a28i37)?:8;38 43028=o7d?lb;29 42c28ij7c?;c;28?l7?83:1(<:k:05e?k73k3:07d?79;29 42c28=m7c?;c;38?l7?03:1(<:k:05e?k73k3807d?77;29 42c28=m7c?;c;18?l7?>3:1(<:k:05e?k73k3>07d?75;29 42c28=m7c?;c;78?l7?<3:1(<:k:05e?k73k3<07d?73;29 42c28=m7c?;c;58?l7?:3:1(<:k:05e?k73k3207d?71;29 42c28=m7c?;c;;8?l70m3:1(<:k:05e?k73k3k07d?n9;29 42c28k37c?;c;28?l7f?3:1(<:k:0c;?k73k3;07d?n6;29 42c28k37c?;c;08?l7f=3:1(<:k:0c;?k73k3907d?n4;29 42c28k37c?;c;68?l7f;3:1(<:k:0c;?k73k3?07d?n2;29 42c28k37c?;c;48?l7f93:1(<:k:0c;?k73k3=07d?ld;29 42c28ih7c?;c;28?l7?k3:1(<:k:0:a?k73k3:07d?65;29 42c282i7c?;c;38?l7><3:1(<:k:0:a?k73k3807d?63;29 42c282i7c?;c;18?l7>:3:1(<:k:0:a?k73k3>07d?61;29 42c282i7c?;c;78?l7>83:1(<:k:0:a?k73k3<07d?7f;29 42c282i7c?;c;58?l7?m3:1(<:k:0:a?k73k3207d?7d;29 42c282i7c?;c;;8?l7?i3:1(<:k:0:a?k73k3k07d?m2;29 42c28h:7c?;c;28?l7e83:1(<:k:0`2?k73k3;07d?nf;29 42c28h:7c?;c;08?l7fm3:1(<:k:0`2?k73k3907d?nd;29 42c28h:7c?;c;68?l7fk3:1(<:k:0`2?k73k3?07d?nb;29 42c28h:7c?;c;48?l7fi3:1(<:k:0`2?k73k3=07d?6f;29?l7f83:17b?mb;29 42c28hj7c?;c;28?j7e13:1(<:k:0`b?k73k3;07b?m8;29 42c28hj7c?;c;08?j7e?3:1(<:k:0`b?k73k3907b?m6;29 42c28hj7c?;c;68?j7e=3:1(<:k:0`b?k73k3?07b?m4;29 42c28hj7c?;c;48?j7e;3:1(<:k:0`b?k73k3=07b?l4;29 42c28i87c?;c;28?j7d:3:1(<:k:0a0?k73k3;07b?l1;29 42c28i87c?;c;08?j7d83:1(<:k:0a0?k73k3907b?mf;29 42c28i87c?;c;68?j7em3:1(<:k:0a0?k73k3?07b?md;29 42c28i87c?;c;48?j7ek3:1(<:k:0a0?k73k3=07o?86;295?6=8r.::<4>659K522<@8<87b?;9;29?xd6?<0;6<4?:1y'537=n:1C=::4H040?j`52900qo?92;29ff<729q/=;?515d8L4133A;=?6T<8;ax2?1=m3;96k4>3;33>f<e2m0:=7o5}%37<?7d>2d>=774n409=>hd83:0bh<50:&fb?`63-l;6k?4$g697>"a=390(k853:&e3?5<,o21?6*i9;18 cg=;2.mn7=4$ga97>"al390(kk53:&eb?5<,8:;6>5+11397>"68;087)??3;18 4632:1/==;53:&243<43-;;;7=4$02;>6=#9931?6*>0`80?!77j390(<>l:29'55b=;2.:<h4<;%33b?5<,8;;6>5+10397>"69;087)?>3;18 4732:1/=<;53:&253<43-;:;7=4$03;>6=#9831?6*>1`80?!76j390(<?l:29'54b=;2.:=h4<;%32b?5<,88;6>5+13397>"6:;087)?=3;18 4432:1/=?;53:&263<43-;9;7=4$00;>6=#9;31?6*>2`80?!75j390(<<l:29'57b=;2.:>h4<;%31b?5<,89;6>5+12397>"6;;087)?<3;18 4532:1/=>;53:&273<43-;8;7=4$01;>6=#9:31?6*>3`80?!74j390(<=l:39'56b=:2.:?h4>469'502=9?:0(<;::2;8 4312:30(<;6:258 43f28?h7)?:d;08 43b2;1/=:?51628 41528=;7d?:0;29?l262900ehk50;9j505=831b8;4?::k214<722c:9?4?::kf`?6=3`326=4+15f9===i9=i1<65f9683>!73l3337c?;c;38?l?1290/=9j5999m51e=:21b584?:%37`???3g;?o7=4;h35e?6=,8>o6<86;o37g?6<3`;=47>5$06g>40>3g;?o7?4;h353?6=,8>o6<86;o37g?4<3`;=:7>5$06g>40>3g;?o7=4;n`;>5<#9=n1n:5a15a94>=hj?0;6)?;d;`4?k73k3;07bl;:18'51b=j>1e=9m52:9lf6<72-;?h7l8;o37g?5<3fh96=4+15f9f2=i9=i1865`b083>!73l3h<7c?;c;78?jd7290/=9j5b69m51e=>21dmk4?:%37`?d03g;?o794;ncf>5<#9=n1n:5a15a9<>=him0;6)?;d;`4?k73k3307bol:18'51b=j>1e=9m5a:9leg<72-;?h7l8;o37g?d<3fk26=4+15f9f2=i9=i1o65`a983>!73l3h<7c?;c;f8?jg0290/=9j5b69m51e=m21dm;4?:%37`?d03g;?o7h4;nc6>5<#9=n1n:5a15a955=<gh>1<7*>4e8a3>h6<j0:=65`a283>!73l3h<7c?;c;31?>if:3:1(<:k:c58j42d28907bo>:18'51b=j>1e=9m51598kd6=83.:8i4m7:l20f<6=21dnk4?:%37`?d03g;?o7?9;:maa?6=,8>o6o94n06`>41<3fho6=4+15f9f2=i9=i1=554oca94?"6<m0i;6`>4b82=>=hjk0;6)?;d;`4?k73k3;j76ama;29 42c2k=0b<:l:0`8?jd>290/=9j5b69m51e=9j10co;50;&20a<e?2d:8n4>d:9led<72-;?h7l8;o37g?7b32e2j7>5$06g>g1<f8>h6<h4;h3f>5<#9=n1=i5a15a94>=n9j0;6)?;d;3g?k73k3;07d?m:18'51b=9m1e=9m52:9j5d<72-;?h7?k;o37g?5<3`8<6=4+15f95a=i9=i1865f2783>!73l3;o7c?;c;78?l42290/=9j51e9m51e=>21b>94?:%37`?7c3g;?o794;h00>5<#9=n1=i5a15a9<>=n:;0;6)?;d;3g?k73k3307d<>:18'51b=9m1e=9m5a:9j65<72-;?h7?k;o37g?d<3`;m6=4+15f95a=i9=i1o65f1883>!73l3;o7c?;c;f8?l4c290/=9j52b9m51e=821b>o4?:%37`?4d3g;?o7?4;h0b>5<#9=n1>n5a15a96>=n:00;6)?;d;0`?k73k3907d=9:18'51b=:j1e=9m54:9j70<72-;?h7<l;o37g?3<3`9?6=4+15f96f=i9=i1:65f3283>!73l38h7c?;c;58?l55290/=9j52b9m51e=021b?<4?:%37`?4d3g;?o774;h13>5<#9=n1>n5a15a9e>=n:o0;6)?;d;0`?k73k3h07d<j:18'51b=:j1e=9m5c:9j6=<72-;?h7<l;o37g?b<3`2o6=4+15f9<f=i9=i1<65f8c83>!73l32h7c?;c;38?l>>290/=9j58b9m51e=:21b454?:%37`?>d3g;?o7=4;h:4>5<#9=n14n5a15a90>=n0?0;6)?;d;:`?k73k3?07d6::18'51b=0j1e=9m56:9j<1<72-;?h76l;o37g?1<3`286=4+15f9<f=i9=i1465f8383>!73l32h7c?;c;;8?l>6290/=9j58b9m51e=i21b4=4?:%37`?>d3g;?o7l4;h5f>5<#9=n14n5a15a9g>=n?m0;6)?;d;:`?k73k3n07d9l:18'51b=0j1e=9m5e:9j3g<72-;?h76l;o37g?`<3`=j6=4+15f9<f=i9=i1==54i6;94?"6<m03o6`>4b825>=n?10;6)?;d;:`?k73k3;976g87;29 42c21i0b<:l:018?l11290/=9j58b9m51e=9=10e:;50;&20a<?k2d:8n4>5:9j=1<72-;?h76l;o37g?7132c2?7>5$06g>=e<f8>h6<94;h;1>5<#9=n14n5a15a95==<a0;1<7*>4e8;g>h6<j0:565f9183>!73l32h7c?;c;3b?>o?n3:1(<:k:9a8j42d28h07d6j:18'51b=0j1e=9m51b98m=g=83.:8i47c:l20f<6l21b;k4?:%37`?>d3g;?o7?j;:k40?6=,8>o65m4n06`>4`<3fo<6=4+15f9a3=i9=i1<65`e483>!73l3o=7c?;c;38?jc3290/=9j5e79m51e=:21di>4?:%37`?c13g;?o7=4;h;f>5<#9=n15i5a15a94>=n1j0;6)?;d;;g?k73k3;07d7m:18'51b=1m1e=9m52:9j=d<72-;?h77k;o37g?5<3foh6=4+15f9ag=i9=i1<65`e`83>!73l3oi7c?;c;38?jc>290/=9j5ec9m51e=:21di54?:%37`?ce3g;?o7=4;nfb>5<#9=n1h45a15a94>=hl10;6)?;d;f:?k73k3;07bj9:18'51b=l01e=9m52:9l`0<72-;?h7j6;o37g?5<3fn?6=4+15f9`<=i9=i1865`d283>!73l3n27c?;c;78?jb5290/=9j5d89m51e=>21dh<4?:%37`?b>3g;?o794;nf3>5<#9=n1h45a15a9<>=hko0;6)?;d;f:?k73k3307bmj:18'51b=l01e=9m5a:9lga<72-;?h7j6;o37g?d<3fii6=4+15f9`<=i9=i1o65`c`83>!73l3n27c?;c;f8?je>290/=9j5d89m51e=m21do54?:%37`?b>3g;?o7h4;na4>5<#9=n1h45a15a955=<gj<1<7*>4e8g=>h6<j0:=65`c483>!73l3n27c?;c;31?>id<3:1(<:k:e;8j42d28907bm<:18'51b=l01e=9m51598kf4=83.:8i4k9:l20f<6=21di<4?:%37`?b>3g;?o7?9;:mf4?6=,8>o6i74n06`>41<3fnm6=4+15f9`<=i9=i1=554oeg94?"6<m0o56`>4b82=>=hlm0;6)?;d;f:?k73k3;j76akc;29 42c2m30b<:l:0`8?jbe290/=9j5d89m51e=9j10ci950;&20a<c12d:8n4>d:9lgf<72-;?h7j6;o37g?7b32eh=7>5$06g>a?<f8>h6<h4;h35b?6=,8>o6<8j;o37g?6<3`;=h7>5$06g>40b3g;?o7?4;h35g?6=,8>o6<8j;o37g?4<3`;=n7>5$06g>40b3g;?o7=4;h4`>5<#9=n1:o5a15a94>=n>h0;6)?;d;4a?k73k3;07d87:18'51b=>k1e=9m52:9j22<72-;?h78m;o37g?5<3`<=6=4+15f92g=i9=i1865f6483>!73l3<i7c?;c;78?l03290/=9j56c9m51e=>21b:>4?:%37`?0e3g;?o794;h41>5<#9=n1:o5a15a9<>=n>80;6)?;d;4a?k73k3307d8?:18'51b=>k1e=9m5a:9j1c<72-;?h78m;o37g?d<3`?o6=4+15f92g=i9=i1o65f5b83>!73l3<i7c?;c;f8?l3e290/=9j56c9m51e=m21b9l4?:%37`?0e3g;?o7h4;h7:>5<#9=n1:o5a15a955=<a<21<7*>4e85f>h6<j0:=65f5683>!73l3<i7c?;c;31?>o2>3:1(<:k:7`8j42d28907d;::18'51b=>k1e=9m51598m02=83.:8i49b:l20f<6=21b;>4?:%37`?0e3g;?o7?9;:k46?6=,8>o6;l4n06`>41<3`=:6=4+15f92g=i9=i1=554i6294?"6<m0=n6`>4b82=>=n>o0;6)?;d;4a?k73k3;j76g9e;29 42c2?h0b<:l:0`8?l0c290/=9j56c9m51e=9j10e;750;&20a<1j2d:8n4>d:9j1`<72-;?h78m;o37g?7b32c>?7>5$06g>3d<f8>h6<h4;|q201<72:q6=:8515;894052ln01<8=:dg8yv73=3:18>u21679b7=:9?81>=5217095c=:9?81=45217096c=:9?81>h5217096==:9?81:n5217092d=:9?81:552170922=:9?81:;52170920=:9?81:952170926=:9?81:?52170924=:9?81:=5217091c=:9?819i5217091f=:9?819o5217091d=:9?81945217091==:9?819:52170913=:9?819852170911=:9?81;>52170937=:9?814i521709<g=:9?8144521709<==:9?814:521709<3=:9?8148521709<1=:9?814>521709<7=:9?814<521709<5=:9?81;h5217093a=:9?81;n5217093g=:9?81;l5217093<=:9?81;552170932=:9?81;;52170930=:9?8159521709=6=:9?8154521709=2=:9?815;521709=0=:9?815h521709=f=:9?815o521709=d=:9?81=8>4=041>43634;=>7?:2:?227<6=:1v\7f<ll:181\7f[7ek27::?4l1:\7fp5gb=838pR<lk;<356?ed3ty:nh4?:3y]5gc<58<96i94}r3ab?6=:rT:nk521709`g=z{8i;6=4={_3`4>;6>;0oo6s|1b394?4|V8i:70?92;fg?xu6k;0;6?uQ1b0894052mo0q~?l4;296~X6k=16=;<5dg9~w4d42909wS?m3:?227<>n2wx=o:50;0xZ4d334;=>7on;|q2f0<72;qU=o;4=041>g3<uz;i:7>52z\2f3=:9?81n45rs0`4>5<5sW;i;63>638ae>{t9k21<7<t^0`;?871:3hi7p}>b883>7}Y9k301<8=:ca8yv7ej3:1>vP>bc9>534=jm1v\7f<o?:181\7f[7f827::?4;6:\7fp5<`=838pR<7i;<356?263ty:ml4?:3y]5dg<58<96::4}r3bf?6=:rT:mo5217093c=z{8kh6=4={_3bg>;6>;03m6s|1`f94?4|V8ko70?92;:f?xu6il0;6?uQ1`g8940521l0q~?nf;296~X6io16=;<5919~w4d72909wS?m0:?227<>92wx=o<50;0xZ4d534;=>77=;|q2<d<72;qU=5o4=041>66<uz;3h7>52z\2<a=:9?81?<5rs0:f>5<5sW;3i63>63806>{t91l1<7<t^0:e?871:3987p}>9183>7}Y90:01<8=:268yv7>93:1>vP>909>534=;<1v\7f<7=:181\7f[7>:27::?4<6:\7fp5<5=838pR<7<;<356?4>3ty:594?:3y]5<2<58<96?o4}r3:1?6=:rT:585217096g=z{82h6=4={_3;g>;6>;09h6s|1bf94?3|V8io70?92;35b>;6>;0::i52170953e<58<96<8m;|q2e4<72;qU=l?4=041>05<uz;j>7>52z\2e7=:9?819h5rs0c0>5<5sW;j?63>6385=>{t9h>1<7<t^0c7?871:3<o7p}>a483>7}Y9h?01<8=:7g8yv7f>3:1>vP>a79>534=>o1v\7f<o8:181\7f[7f?27::?480:\7fp5d?=838pR<o6;<356?163ty:;h4?:3y]52c<58<96??4}r3;5?6=:rT:4<52170967=z{8296=4={_3;6>;6>;09?6s|19194?4|V82870?92;07?xu60=0;6?uQ196894052;?0q~?75;296~X60<16=;<5279~w4>12909wS?76:?227<5?2wx=5950;0xZ4>034;=>7?n;|q2<=<72;qU=564=041>4d<uz;357>52z\2<<=:9?81=n5rs0:3>5<5sW;3<63>6382a>{t9jh1<7;t^0aa?871:3;=m63>63822==:9?81=;94=041>4013twe==850;3xL4043td:<:4?:0yK535<ug;;47>51zJ226=zf8:26=4>{I357>{i99k1<7?tH040?xh68k0;6<uG1718yk77k3:1=vF>629~j46c290:wE?93:\7fm55c=83;pD<8<;|l24c<728qC=;=4}o324?6=9rB::>5rn032>5<6sA;=?6sa10094?7|@8<87p`>1283>4}O9?90qc?>4;295~N6>:1vb<?::182\7fM71;2we=<850;3xL4043td:=:4?:0yK535<ug;:47>51zJ226=zf8;26=4>{I357>{i98k1<7?tH040?xh69k0;6<uG1718yk76k3:1=vF>629~j47c290:wE?93:\7fm54c=83;pD<8<;|l25c<728qC=;=4}o314?6=9rB::>5rn002>5<6sA;=?6sa13094?7|@8<87p`>2283>4}O9?90qc?=4;295~N6>:1vb<<::182\7fM71;2we=?850;3xL4043td:>:4?:0yK535<ug;947>51zJ226=zf8826=4>{I357>{i9;k1<7?tH040?xh6:k0;6<uG1718yk75k3:1=vF>629~j44c290:wE?93:\7fm57c=83;pD<8<;|l26c<728qC=;=4}o304?6=9rB::>5rn012>5<6sA;=?6sa12094?7|@8<87p`>3283>4}O9?90qc?<4;295~N6>:1vb<=::182\7fM71;2we=>850;3xL4043td:?:4?:0yK535<ug;847>51zJ226=zf8926=4>{I357>{i9:k1<7?tH040?xh6;k0;6<uG1718yk74k3:1=vF>629~j45c290:wE?93:\7fm56c=83;pD<8<;|l27c<728qC=;=4}o374?6=9rB::>5rn062>5<6sA;=?6sr}|BCG~70m3>onhm=a`\7fCDG}7uIJ[wpNO
\ No newline at end of file
diff --git a/lib/sources/ram_dp_2048x8.vhd b/lib/sources/ram_dp_2048x8.vhd
new file mode 100644 (file)
index 0000000..72c9294
--- /dev/null
@@ -0,0 +1,158 @@
+--------------------------------------------------------------------------------
+--    This file is owned and controlled by Xilinx and must be used solely     --
+--    for design, simulation, implementation and creation of design files     --
+--    limited to Xilinx devices or technologies. Use with non-Xilinx          --
+--    devices or technologies is expressly prohibited and immediately         --
+--    terminates your license.                                                --
+--                                                                            --
+--    XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" SOLELY    --
+--    FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR XILINX DEVICES.  BY    --
+--    PROVIDING THIS DESIGN, CODE, OR INFORMATION AS ONE POSSIBLE             --
+--    IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD, XILINX IS      --
+--    MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE FROM ANY      --
+--    CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING ANY       --
+--    RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY       --
+--    DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE   --
+--    IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR          --
+--    REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF         --
+--    INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A   --
+--    PARTICULAR PURPOSE.                                                     --
+--                                                                            --
+--    Xilinx products are not intended for use in life support appliances,    --
+--    devices, or systems.  Use in such applications are expressly            --
+--    prohibited.                                                             --
+--                                                                            --
+--    (c) Copyright 1995-2017 Xilinx, Inc.                                    --
+--    All rights reserved.                                                    --
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+-- You must compile the wrapper file ram_dp_2048x8.vhd when simulating
+-- the core, ram_dp_2048x8. When compiling the wrapper file, be sure to
+-- reference the XilinxCoreLib VHDL simulation library. For detailed
+-- instructions, please refer to the "CORE Generator Help".
+
+-- The synthesis directives "translate_off/translate_on" specified
+-- below are supported by Xilinx, Mentor Graphics and Synplicity
+-- synthesis tools. Ensure they are correct for your synthesis tool(s).
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+-- synthesis translate_off
+LIBRARY XilinxCoreLib;
+-- synthesis translate_on
+ENTITY ram_dp_2048x8 IS
+  PORT (
+    clka : IN STD_LOGIC;
+    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addra : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
+    dina : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    douta : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
+    clkb : IN STD_LOGIC;
+    web : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addrb : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
+    dinb : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    doutb : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
+  );
+END ram_dp_2048x8;
+
+ARCHITECTURE ram_dp_2048x8_a OF ram_dp_2048x8 IS
+-- synthesis translate_off
+COMPONENT wrapped_ram_dp_2048x8
+  PORT (
+    clka : IN STD_LOGIC;
+    wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addra : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
+    dina : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    douta : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
+    clkb : IN STD_LOGIC;
+    web : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
+    addrb : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
+    dinb : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
+    doutb : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
+  );
+END COMPONENT;
+
+-- Configuration specification
+  FOR ALL : wrapped_ram_dp_2048x8 USE ENTITY XilinxCoreLib.blk_mem_gen_v7_3(behavioral)
+    GENERIC MAP (
+      c_addra_width => 11,
+      c_addrb_width => 11,
+      c_algorithm => 1,
+      c_axi_id_width => 4,
+      c_axi_slave_type => 0,
+      c_axi_type => 1,
+      c_byte_size => 9,
+      c_common_clk => 1,
+      c_default_data => "0",
+      c_disable_warn_bhv_coll => 0,
+      c_disable_warn_bhv_range => 0,
+      c_enable_32bit_address => 0,
+      c_family => "spartan6",
+      c_has_axi_id => 0,
+      c_has_ena => 0,
+      c_has_enb => 0,
+      c_has_injecterr => 0,
+      c_has_mem_output_regs_a => 0,
+      c_has_mem_output_regs_b => 0,
+      c_has_mux_output_regs_a => 0,
+      c_has_mux_output_regs_b => 0,
+      c_has_regcea => 0,
+      c_has_regceb => 0,
+      c_has_rsta => 0,
+      c_has_rstb => 0,
+      c_has_softecc_input_regs_a => 0,
+      c_has_softecc_output_regs_b => 0,
+      c_init_file => "BlankString",
+      c_init_file_name => "no_coe_file_loaded",
+      c_inita_val => "0",
+      c_initb_val => "0",
+      c_interface_type => 0,
+      c_load_init_file => 0,
+      c_mem_type => 2,
+      c_mux_pipeline_stages => 0,
+      c_prim_type => 1,
+      c_read_depth_a => 2048,
+      c_read_depth_b => 2048,
+      c_read_width_a => 8,
+      c_read_width_b => 8,
+      c_rst_priority_a => "CE",
+      c_rst_priority_b => "CE",
+      c_rst_type => "SYNC",
+      c_rstram_a => 0,
+      c_rstram_b => 0,
+      c_sim_collision_check => "ALL",
+      c_use_bram_block => 0,
+      c_use_byte_wea => 0,
+      c_use_byte_web => 0,
+      c_use_default_data => 1,
+      c_use_ecc => 0,
+      c_use_softecc => 0,
+      c_wea_width => 1,
+      c_web_width => 1,
+      c_write_depth_a => 2048,
+      c_write_depth_b => 2048,
+      c_write_mode_a => "WRITE_FIRST",
+      c_write_mode_b => "WRITE_FIRST",
+      c_write_width_a => 8,
+      c_write_width_b => 8,
+      c_xdevicefamily => "spartan6"
+    );
+-- synthesis translate_on
+BEGIN
+-- synthesis translate_off
+U0 : wrapped_ram_dp_2048x8
+  PORT MAP (
+    clka => clka,
+    wea => wea,
+    addra => addra,
+    dina => dina,
+    douta => douta,
+    clkb => clkb,
+    web => web,
+    addrb => addrb,
+    dinb => dinb,
+    doutb => doutb
+  );
+-- synthesis translate_on
+
+END ram_dp_2048x8_a;
diff --git a/lib/sources/tools_pkg.vhd b/lib/sources/tools_pkg.vhd
new file mode 100644 (file)
index 0000000..c32ddce
--- /dev/null
@@ -0,0 +1,11 @@
+library IEEE;
+use IEEE.std_logic_1164.all;
+use IEEE.numeric_std.all;
+
+package tools_pkg is
+  type vector_of_std_logic_vector18 is array (natural range <>) of std_logic_vector(17 downto 0);
+  type vector_of_std_logic_vector8 is array (natural range <>) of std_logic_vector(7 downto 0);
+  type vector_of_std_logic is array (natural range <>) of std_logic;
+  type vector_of_unsigned8 is array (natural range <>) of unsigned(7 downto 0);
+  type vector_of_std_logic_vector4 is array (natural range <>) of std_logic_vector(3 downto 0);
+end tools_pkg;
index 4df5ed741545c8678eb071b448033e2450b26eca..3ced8a924d9f5a1af8ea17c629e8068f702d8261 100644 (file)
@@ -10,6 +10,7 @@ COMMON-OBJ = $(BUILDPATH)/AbstractBlock.o \
           $(BUILDPATH)/AbstractInputModifier.o \
           $(BUILDPATH)/DelayInputModifier.o \
           $(BUILDPATH)/BlockImplementation.o \
           $(BUILDPATH)/AbstractInputModifier.o \
           $(BUILDPATH)/DelayInputModifier.o \
           $(BUILDPATH)/BlockImplementation.o \
+          $(BUILDPATH)/ExternalSource.o \
           $(BUILDPATH)/Graph.o \
           $(BUILDPATH)/AbstractBoxItem.o \
           $(BUILDPATH)/BoxItem.o \
           $(BUILDPATH)/Graph.o \
           $(BUILDPATH)/AbstractBoxItem.o \
           $(BUILDPATH)/BoxItem.o \