aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-01-13 18:51:27 +0000
committerDavid Shah <davey1576@gmail.com>2018-01-16 15:17:20 +0000
commit4b16c3735c0c183837994a4b4b07296f0bbba57c (patch)
tree66cbbc2684cb933891e0c4a009db6d66f13a28c8
parent7e587c9b6b62057f7e9258ac93c7fec77e994fa1 (diff)
downloadicestorm-4b16c3735c0c183837994a4b4b07296f0bbba57c.tar.gz
icestorm-4b16c3735c0c183837994a4b4b07296f0bbba57c.tar.bz2
icestorm-4b16c3735c0c183837994a4b4b07296f0bbba57c.zip
I³C IO reverse engineered and documented
-rw-r--r--docs/ultraplus.html13
-rw-r--r--icefuzz/tests/sb_io_i3c.pcf8
-rw-r--r--icefuzz/tests/sb_io_i3c.v35
3 files changed, 56 insertions, 0 deletions
diff --git a/docs/ultraplus.html b/docs/ultraplus.html
index b5dda62..11e249d 100644
--- a/docs/ultraplus.html
+++ b/docs/ultraplus.html
@@ -290,6 +290,19 @@ can be used as an open-drain IO using the standard IO cell.</p>
</table>
+<h3>I<sup>3</sup>C capable IO</h3>
+<p>The UltraPlus devices have two IO pins designed for the new MIPI I<sup>3</sup>C standard (pins 23 and 25 in the SG48 package),
+compared to normal IO pins they have two switchable pullups each. One of these pullups, the weak pullup, is fixed at 100k and the
+other can be set to 3.3k, 6.8k or 10k using the mechanism above. The pullup control signals do not
+connect directly to the IO tile, but instead connect through an IPConnect tile.</p>
+
+<p>The connections are listed below:</p>
+<table class="ctab">
+<tr><th>Signal</th><th>Pin 23<br/>(19, 31, 0)</th><th>Pin 25<br/>(19, 31, 1)</th></tr>
+<tr><td>PU_ENB</td><td>(25, 27, lutff_6/in_0)</td><td>(25, 27, lutff_7/in_0)</td></tr>
+<tr><td>WEAK_PU_ENB</td><td>(25, 27, lutff_4/in_0)</td><td>(25, 27, lutff_5/in_0)</td></tr>
+</table>
+
<h2>Hard IP</h2>
<p>The UltraPlus devices contain three types of Hard IP: I<sup>2</sup>C (<span style="font-family:monospace">SB_I2C</span>), SPI (<span style="font-family:monospace">SB_SPI</span>), and LED PWM generation
diff --git a/icefuzz/tests/sb_io_i3c.pcf b/icefuzz/tests/sb_io_i3c.pcf
new file mode 100644
index 0000000..cb3cd30
--- /dev/null
+++ b/icefuzz/tests/sb_io_i3c.pcf
@@ -0,0 +1,8 @@
+set_io pin_23 23
+set_io pin_25 25
+
+set_io pin_23_puen 2
+set_io pin_23_wkpuen 3
+
+set_io pin_25_puen 4
+set_io pin_25_wkpuen 6
diff --git a/icefuzz/tests/sb_io_i3c.v b/icefuzz/tests/sb_io_i3c.v
new file mode 100644
index 0000000..5237283
--- /dev/null
+++ b/icefuzz/tests/sb_io_i3c.v
@@ -0,0 +1,35 @@
+
+module top (
+ inout pin_23,
+ inout pin_25,
+ input pin_23_puen,
+ input pin_23_wkpuen,
+ input pin_25_puen,
+ input pin_25_wkpuen);
+
+ (* PULLUP_RESISTOR = "3P3K" *)
+ SB_IO_I3C #(
+ .PIN_TYPE(6'b000001),
+ .PULLUP(1'b1),
+ .WEAK_PULLUP(1'b1),
+
+ .NEG_TRIGGER(1'b0)
+ ) IO_PIN_0 (
+ .PACKAGE_PIN(pin_23),
+ .PU_ENB(pin_23_puen),
+ .WEAK_PU_ENB(pin_23_wkpuen)
+ ) ;
+
+ (* PULLUP_RESISTOR = "3P3K" *)
+ SB_IO_I3C #(
+ .PIN_TYPE(6'b000001),
+ .PULLUP(1'b1),
+ .WEAK_PULLUP(1'b1),
+
+ .NEG_TRIGGER(1'b0)
+ ) IO_PIN_1 (
+ .PACKAGE_PIN(pin_25),
+ .PU_ENB(pin_25_puen),
+ .WEAK_PU_ENB(pin_25_wkpuen)
+ );
+endmodule