diff --git a/database b/database
index 2cf058e..1320be7 160000
--- a/database
+++ b/database
@@ -1 +1 @@
-Subproject commit 2cf058e7a3ba36134d21e34823e9b2ecaaceac2c
+Subproject commit 1320be79e0f1e526ea4f9d454a80745cb5639eec
diff --git a/examples/tinyfpga_ax/blinky_ext.lpf b/examples/tinyfpga_ax/blinky_ext.lpf
new file mode 100644
index 0000000..6bc4413
--- /dev/null
+++ b/examples/tinyfpga_ax/blinky_ext.lpf
@@ -0,0 +1,4 @@
+BLOCK RESETPATHS ;
+BLOCK ASYNCPATHS ;
+LOCATE COMP "pin1" SITE "13" ;
+LOCATE COMP "clk" SITE "21" ;
diff --git a/examples/tinyfpga_ax/blinky_ext.v b/examples/tinyfpga_ax/blinky_ext.v
new file mode 100644
index 0000000..b05e409
--- /dev/null
+++ b/examples/tinyfpga_ax/blinky_ext.v
@@ -0,0 +1,17 @@
+// Modified from:
+// https://github.com/tinyfpga/TinyFPGA-A-Series/tree/master/template_a2
+
+module TinyFPGA_A2 (
+  inout pin1,
+  input clk
+);
+
+  reg [23:0] led_timer;
+
+  always @(posedge clk) begin
+    led_timer <= led_timer + 1;
+  end
+
+  // left side of board
+  assign pin1 = led_timer[23];
+endmodule
diff --git a/libtrellis/src/Chip.cpp b/libtrellis/src/Chip.cpp
index 339da74..ce51a52 100644
--- a/libtrellis/src/Chip.cpp
+++ b/libtrellis/src/Chip.cpp
@@ -291,13 +291,19 @@
                 MachXO2Bels::add_lc(*rg, x, y, z);
 
         // PIO Bels
-        if (tile->info.type.find("PIC_L0") != string::npos || tile->info.type.find("PIC_LS0") != string::npos ||
-            tile->info.type.find("PIC_T") != string::npos ||
-            tile->info.type.find("PIC_R0") != string::npos || tile->info.type.find("PIC_RS0") != string::npos ||
-            tile->info.type.find("PIC_B") != string::npos)
+        // DUMMY and CIB tiles can have the below strings and can possibly
+        // have BELs. But they will not have PIO BELs.
+        if (tile->info.type.find("DUMMY") == string::npos && tile->info.type.find("CIB") == string::npos &&
+            (tile->info.type.find("PIC_L0") != string::npos || tile->info.type.find("PIC_T") != string::npos ||
+             tile->info.type.find("PIC_R0") != string::npos || tile->info.type.find("PIC_B") != string::npos))
             for (int z = 0; z < 4; z++)
                 MachXO2Bels::add_pio(*rg, x, y, z);
 
+        // Single I/O pair.
+        if (tile->info.type.find("PIC_LS0") != string::npos || tile->info.type.find("PIC_RS0") != string::npos)
+            for (int z = 0; z < 2; z++)
+                MachXO2Bels::add_pio(*rg, x, y, z);
+
         // DCC/DCM Bels
         if (tile->info.type.find("CENTER_EBR_CIB") != string::npos) {
           for (int z = 0; z < 8; z++)
diff --git a/minitests/reg/async_gsr.v b/minitests/reg/async_gsr.v
new file mode 100644
index 0000000..d0899e4
--- /dev/null
+++ b/minitests/reg/async_gsr.v
@@ -0,0 +1,8 @@
+module top(input clk, d, set, r, output reg q);
+    GSR gsr(.GSR(r));
+    always @(posedge clk or posedge set)
+           if (set)
+                q <= 1'b1;
+           else
+                q <= d;
+endmodule
diff --git a/minitests/reg/async_sr.v b/minitests/reg/async_sr.v
new file mode 100644
index 0000000..b56235f
--- /dev/null
+++ b/minitests/reg/async_sr.v
@@ -0,0 +1,9 @@
+module top(input clk, d, set, reset, cen, output reg q);
+    always @(posedge clk or posedge set or posedge reset)
+           if (set)
+              q <= 1'b1;
+           else if(reset)
+              q <= 1'b0;
+           else if(cen)
+                q <= d;
+endmodule
diff --git a/minitests/reg/lsr_over_ce.v b/minitests/reg/lsr_over_ce.v
new file mode 100644
index 0000000..5161010
--- /dev/null
+++ b/minitests/reg/lsr_over_ce.v
@@ -0,0 +1,8 @@
+module top(input clk, d, set, cen, output reg q);
+    always @(posedge clk)
+         if (set)
+            q <= 1'b1;
+         else
+             if (cen)
+                  q <= d;
+endmodule
diff --git a/tools/read_pinout.py b/tools/read_pinout.py
index 95096d0..199fdc7 100644
--- a/tools/read_pinout.py
+++ b/tools/read_pinout.py
@@ -33,7 +33,7 @@
     max_col = chip.get_max_col()
 
     if chip.info.family == "MachXO2":
-        # I/O Grouping
+        # I/O Grouping is present in MachXO2 pinouts but not ECP5.
         pkg_index_start = 8
     else:
         pkg_index_start = 7
@@ -69,9 +69,9 @@
                 else:
                     metadata[bel] = bank, function, dqs
                 for i in range(len(package_indicies)):
-                    if splitline[7+i] == "-":
+                    if splitline[pkg_index_start+i] == "-":
                         continue
-                    package_data[package_indicies[i]][splitline[7+i]] = bel
+                    package_data[package_indicies[i]][splitline[pkg_index_start+i]] = bel
     json_data = {"packages": {}, "pio_metadata": []}
     for pkg, pins in package_data.items():
         json_data["packages"][pkg] = {}
