Fixed fasm output for top-level blocks without prefixes.

Signed-off-by: Maciej Kurc <mkurc@antmicro.com>
diff --git a/utils/fasm/src/fasm.cpp b/utils/fasm/src/fasm.cpp
index d5a3552..0b9844c 100644
--- a/utils/fasm/src/fasm.cpp
+++ b/utils/fasm/src/fasm.cpp
@@ -56,7 +56,8 @@
     auto &grid_loc = device_ctx.grid[x][y];
     blk_type_ = grid_loc.type;
 
-    current_blk_has_prefix_ = true;
+    blk_prefix_ = "";
+    clb_prefix_ = "";
     clb_prefix_map_.clear();
 
     // Get placeholder list (if provided)
@@ -93,13 +94,11 @@
                   prefix_unsplit.c_str(), fasm_prefixes.size(), blk_type_->name, blk_type_->capacity);
       }
       grid_prefix = fasm_prefixes[z];
-    } else {
-      current_blk_has_prefix_= false;
-    }
-
-    if(current_blk_has_prefix_) {
       blk_prefix_ = grid_prefix + ".";
     }
+    else {
+      blk_prefix_ = "";
+    }
 }
 
 void FasmWriterVisitor::check_interconnect(const t_pb_routes &pb_routes, int inode) {
@@ -614,8 +613,7 @@
     for (t_linked_rt_edge* edge = root->u.child_list; edge != nullptr; edge = edge->next) {
         auto *meta = vpr::rr_edge_metadata(root->inode, edge->child->inode, edge->iswitch, "fasm_features");
         if(meta != nullptr) {
-            current_blk_has_prefix_ = false;
-            output_fasm_features(meta->as_string());
+            output_fasm_features(meta->as_string(), "", "");
         }
 
         walk_route_tree(edge->child);
@@ -646,6 +644,13 @@
 
 void FasmWriterVisitor::find_clb_prefix(const t_pb_graph_node *node,
         bool *have_prefix, std::string *clb_prefix) const {
+<<<<<<< HEAD
+=======
+
+    *have_prefix = false;
+    *clb_prefix  = "";
+
+>>>>>>> Fixed fasm output for top-level blocks without prefixes.
     while(node != nullptr) {
         auto clb_prefix_itr = clb_prefix_map_.find(node);
         *have_prefix = clb_prefix_itr != clb_prefix_map_.end();
@@ -710,7 +715,11 @@
         // pb_type_prefixes_, not on the mux input.
         if(mux_pb_name == pb_name && mux_port_name == port_name && mux_pin_index == pin_index) {
           if(mux_parts[1] != "NULL") {
+<<<<<<< HEAD
             output_fasm_features(have_prefix, clb_prefix, fasm_features);
+=======
+            output_fasm_features(fasm_features, clb_prefix, blk_prefix_);
+>>>>>>> Fixed fasm output for top-level blocks without prefixes.
           }
           return;
         }
@@ -719,7 +728,7 @@
                 mux_port_name == port_name &&
                 mux_pin_index == pin_index) {
         if(mux_parts[1] != "NULL") {
-          output_fasm_features(have_prefix, clb_prefix, fasm_features);
+          output_fasm_features(fasm_features, clb_prefix, blk_prefix_);
         }
         return;
       }
@@ -730,11 +739,11 @@
         pb_name, pb_index, port_name, pin_index, fasm_mux.c_str());
 }
 
-void FasmWriterVisitor::output_fasm_features(std::string features) const {
-  output_fasm_features(current_blk_has_prefix_, clb_prefix_, features);
+void FasmWriterVisitor::output_fasm_features(const std::string features) const {
+  output_fasm_features(features, clb_prefix_, blk_prefix_);
 }
 
-void FasmWriterVisitor::output_fasm_features(bool have_clb_prefix, std::string clb_prefix, std::string features) const {
+void FasmWriterVisitor::output_fasm_features(const std::string features, const std::string clb_prefix, const std::string blk_prefix) const {
   std::stringstream os(features);
 
   while(os) {
@@ -742,10 +751,8 @@
     os >> feature;
     if(os) {
       std::string out_feature;
-      if(have_clb_prefix) {
-        out_feature += blk_prefix_;
-        out_feature += clb_prefix;
-      }
+      out_feature += blk_prefix;
+      out_feature += clb_prefix;
       out_feature += feature;
       // Substitute tags
       os_ << substitute_tags(out_feature, tags_) << std::endl;
diff --git a/utils/fasm/src/fasm.h b/utils/fasm/src/fasm.h
index 1326c4c..3e92a5f 100644
--- a/utils/fasm/src/fasm.h
+++ b/utils/fasm/src/fasm.h
@@ -66,8 +66,8 @@
       void finish_impl() override;
 
   private:
-      void output_fasm_features(std::string features) const;
-      void output_fasm_features(bool have_clb_prefix, std::string clb_prefix, std::string features) const;
+      void output_fasm_features(const std::string features) const;
+      void output_fasm_features(const std::string features, const std::string clb_prefix, const std::string blk_prefix) const;
       void check_features(const t_metadata_dict *meta) const;
       void check_interconnect(const t_pb_routes &pb_route, int inode);
       void check_for_lut(const t_pb* atom);
@@ -85,7 +85,6 @@
       std::ostream& os_;
 
       t_pb_graph_node *root_clb_;
-      bool current_blk_has_prefix_;
       t_physical_tile_type_ptr blk_type_;
       std::string blk_prefix_;
       std::string clb_prefix_;
diff --git a/utils/fasm/test/test_fasm.cpp b/utils/fasm/test/test_fasm.cpp
index 6ec278d..36fbe09 100644
--- a/utils/fasm/test/test_fasm.cpp
+++ b/utils/fasm/test/test_fasm.cpp
@@ -120,7 +120,7 @@
             found_mux3 = true;
         }
 
-        if(line.find("CLB") != std::string::npos) {
+        if(line.find("CLB") != std::string::npos || line.find("FLE") != std::string::npos) {
             auto pos = line.find("LUT[");
             if(pos != std::string::npos) {
                 CHECK_THAT(line.substr(pos), Equals(
diff --git a/utils/fasm/test/test_fasm_arch.xml b/utils/fasm/test/test_fasm_arch.xml
index 6f6cf2a..c45ec19 100644
--- a/utils/fasm/test/test_fasm_arch.xml
+++ b/utils/fasm/test/test_fasm_arch.xml
@@ -96,7 +96,7 @@
       <single type="clb" priority="10" x="3" y="4">
       <metadata> <meta name="fasm_placeholders">
         LOC=X3Y4
-      </meta>  <meta name="fasm_prefix">CLB</meta> </metadata>
+      </meta> <meta name="fasm_prefix">CLB</meta> </metadata>
       </single>
 
       <single type="clb" priority="10" x="4" y="1">