diff options
author | David Shah <davey1576@gmail.com> | 2018-01-13 18:51:27 +0000 |
---|---|---|
committer | David Shah <davey1576@gmail.com> | 2018-01-16 15:17:20 +0000 |
commit | 4b16c3735c0c183837994a4b4b07296f0bbba57c (patch) | |
tree | 66cbbc2684cb933891e0c4a009db6d66f13a28c8 | |
parent | 7e587c9b6b62057f7e9258ac93c7fec77e994fa1 (diff) | |
download | icestorm-4b16c3735c0c183837994a4b4b07296f0bbba57c.tar.gz icestorm-4b16c3735c0c183837994a4b4b07296f0bbba57c.tar.bz2 icestorm-4b16c3735c0c183837994a4b4b07296f0bbba57c.zip |
I³C IO reverse engineered and documented
-rw-r--r-- | docs/ultraplus.html | 13 | ||||
-rw-r--r-- | icefuzz/tests/sb_io_i3c.pcf | 8 | ||||
-rw-r--r-- | icefuzz/tests/sb_io_i3c.v | 35 |
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 |