Added support for placeholders with empty values through specifying "NULL" as value.
Signed-off-by: Maciej Kurc <mkurc@antmicro.com>
diff --git a/utils/fasm/src/fasm.cpp b/utils/fasm/src/fasm.cpp
index 03189cf..361abdb 100644
--- a/utils/fasm/src/fasm.cpp
+++ b/utils/fasm/src/fasm.cpp
@@ -77,7 +77,14 @@
VTR_ASSERT(parts.size() == 2);
VTR_ASSERT(tags_.count(parts.at(0)) == 0);
- tags_[parts.at(0)] = parts.at(1);
+
+ // When the value is "NULL" then substitute empty string
+ if (!parts.at(1).compare("NULL")) {
+ tags_[parts.at(0)] = "";
+ }
+ else {
+ tags_[parts.at(0)] = parts.at(1);
+ }
}
}
diff --git a/utils/fasm/test/test_fasm.cpp b/utils/fasm/test/test_fasm.cpp
index 8faf630..f1a94a5 100644
--- a/utils/fasm/test/test_fasm.cpp
+++ b/utils/fasm/test/test_fasm.cpp
@@ -344,6 +344,14 @@
CHECK_THAT(line, MatchesRegex(".*ALUT_[LR]{1}.*"));
}
+ // Check correct substitution of "" and "_SING"
+ if (loc_y == 1) {
+ CHECK_THAT(line, Contains("_SING"));
+ }
+ else {
+ CHECK_THAT(line, !Contains("_SING"));
+ }
+
// Check that all tags were substituted
CHECK_THAT(line, !Contains("{") && !Contains("}"));
diff --git a/utils/fasm/test/test_fasm_arch.xml b/utils/fasm/test/test_fasm_arch.xml
index d95321b..14bbe14 100644
--- a/utils/fasm/test/test_fasm_arch.xml
+++ b/utils/fasm/test/test_fasm_arch.xml
@@ -40,24 +40,28 @@
<metadata> <meta name="fasm_placeholders">
LOC=X1Y1
LR=L
+ SING=_SING
</meta> <meta name="fasm_prefix">CLB</meta> </metadata>
</single>
<single type="clb" priority="10" x="1" y="2">
<metadata> <meta name="fasm_placeholders">
LOC=X1Y2
LR=R
+ SING=NULL
</meta> <meta name="fasm_prefix">CLB</meta> </metadata>
</single>
<single type="clb" priority="10" x="1" y="3">
<metadata> <meta name="fasm_placeholders">
LOC=X1Y3
LR=L
+ SING=NULL
</meta> <meta name="fasm_prefix">CLB</meta> </metadata>
</single>
<single type="clb" priority="10" x="1" y="4">
<metadata> <meta name="fasm_placeholders">
LOC=X1Y4
LR=R
+ SING=NULL
</meta> <meta name="fasm_prefix">CLB</meta> </metadata>
</single>
@@ -65,24 +69,28 @@
<metadata> <meta name="fasm_placeholders">
LOC=X2Y1
LR=L
+ SING=_SING
</meta> <meta name="fasm_prefix">PLB</meta> </metadata>
</single>
<single type="clb" priority="10" x="2" y="2">
<metadata> <meta name="fasm_placeholders">
LOC=X2Y2
LR=R
+ SING=NULL
</meta> <meta name="fasm_prefix">PLB</meta> </metadata>
</single>
<single type="clb" priority="10" x="2" y="3">
<metadata> <meta name="fasm_placeholders">
LOC=X2Y3
LR=L
+ SING=NULL
</meta> <meta name="fasm_prefix">PLB</meta> </metadata>
</single>
<single type="clb" priority="10" x="2" y="4">
<metadata> <meta name="fasm_placeholders">
LOC=X2Y4
LR=R
+ SING=NULL
</meta> <meta name="fasm_prefix">PLB</meta> </metadata>
</single>
@@ -90,24 +98,28 @@
<metadata> <meta name="fasm_placeholders">
LOC=X3Y1
LR=L
+ SING=_SING
</meta> </metadata>
</single>
<single type="clb" priority="10" x="3" y="2">
<metadata> <meta name="fasm_placeholders">
LOC=X3Y2
LR=R
+ SING=NULL
</meta> </metadata>
</single>
<single type="clb" priority="10" x="3" y="3">
<metadata> <meta name="fasm_placeholders">
LOC=X3Y3
LR=L
+ SING=NULL
</meta> </metadata>
</single>
<single type="clb" priority="10" x="3" y="4">
<metadata> <meta name="fasm_placeholders">
LOC=X3Y4
LR=R
+ SING=NULL
</meta> </metadata>
</single>
@@ -115,24 +127,28 @@
<metadata> <meta name="fasm_placeholders">
LOC=X4Y1
LR=L
+ SING=_SING
</meta> <meta name="fasm_prefix">SLICE</meta> </metadata>
</single>
<single type="clb" priority="10" x="4" y="2">
<metadata> <meta name="fasm_placeholders">
LOC=X4Y2
LR=R
+ SING=NULL
</meta> <meta name="fasm_prefix">SLICE</meta> </metadata>
</single>
<single type="clb" priority="10" x="4" y="3">
<metadata> <meta name="fasm_placeholders">
LOC=X4Y3
LR=L
+ SING=NULL
</meta> <meta name="fasm_prefix">SLICE</meta> </metadata>
</single>
<single type="clb" priority="10" x="4" y="4">
<metadata> <meta name="fasm_placeholders">
LOC=X4Y4
LR=R
+ SING=NULL
</meta> <meta name="fasm_prefix">SLICE</meta> </metadata>
</single>
@@ -363,7 +379,7 @@
</mode>
<metadata>
<meta name="fasm_prefix">
- FLE0_{LOC} FLE1_{LOC}
+ FLE0{SING}_{LOC} FLE1{SING}_{LOC}
</meta>
</metadata>
</pb_type>