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">
