aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2017-11-23 19:45:27 +0000
committerDavid Shah <davey1576@gmail.com>2017-11-23 19:45:27 +0000
commitbd6cf518f3e584446fa1c9f4085705bd36cd4a0c (patch)
treecedd14d2264beb33186a871d05584f7679963af1
parent9184fbdf404c0e94326919c92a27d3292994cdf1 (diff)
downloadicestorm-bd6cf518f3e584446fa1c9f4085705bd36cd4a0c.tar.gz
icestorm-bd6cf518f3e584446fa1c9f4085705bd36cd4a0c.tar.bz2
icestorm-bd6cf518f3e584446fa1c9f4085705bd36cd4a0c.zip
Begin I2C/SPI IP reverse engineering
-rw-r--r--icebox/icebox.py8
-rw-r--r--icefuzz/tests/sb_i2c.pcf21
-rw-r--r--icefuzz/tests/sb_i2c.v48
-rw-r--r--icefuzz/tests/sb_i2c_io.pcf18
-rw-r--r--icefuzz/tests/sb_i2c_io.v66
5 files changed, 161 insertions, 0 deletions
diff --git a/icebox/icebox.py b/icebox/icebox.py
index 5e94f31..12d7fe1 100644
--- a/icebox/icebox.py
+++ b/icebox/icebox.py
@@ -4816,6 +4816,10 @@ iotile_t_5k_db.append([["B13[10]"], "IoCtrl", "cf_bit_36"])
iotile_t_5k_db.append([["B12[10]"], "IoCtrl", "cf_bit_37"])
iotile_t_5k_db.append([["B13[15]"], "IoCtrl", "cf_bit_38"])
iotile_t_5k_db.append([["B12[15]"], "IoCtrl", "cf_bit_39"])
+iotile_t_5k_db.append([["B10[3]"], "IpConfig", "cbit2usealt_in_0"])
+iotile_t_5k_db.append([["B12[2]"], "IpConfig", "cbit2usealt_in_1"])
+iotile_t_5k_db.append([["B12[3]"], "IpConfig", "SDA_input_delay"])
+iotile_t_5k_db.append([["B15[3]"], "IpConfig", "SDA_output_delay"])
iotile_b_5k_db = list(iotile_b_db)
iotile_b_5k_db.append([["B14[15]"], "IoCtrl", "padeb_test_1"])
@@ -4828,6 +4832,10 @@ iotile_b_5k_db.append([["B13[10]"], "IoCtrl", "cf_bit_36"])
iotile_b_5k_db.append([["B12[10]"], "IoCtrl", "cf_bit_37"])
iotile_b_5k_db.append([["B13[15]"], "IoCtrl", "cf_bit_38"])
iotile_b_5k_db.append([["B12[15]"], "IoCtrl", "cf_bit_39"])
+iotile_t_5k_db.append([["B10[3]"], "IpConfig", "cbit2usealt_in_0"])
+iotile_t_5k_db.append([["B12[2]"], "IpConfig", "cbit2usealt_in_1"])
+iotile_t_5k_db.append([["B12[3]"], "IpConfig", "SDA_input_delay"])
+iotile_t_5k_db.append([["B15[3]"], "IpConfig", "SDA_output_delay"])
for db in [iotile_l_db, iotile_r_db, iotile_t_db, iotile_b_db, iotile_t_5k_db, iotile_b_5k_db, logictile_db, logictile_5k_db, logictile_8k_db, logictile_384_db, rambtile_db, ramttile_db, rambtile_5k_db, ramttile_5k_db, rambtile_8k_db, ramttile_8k_db, dsp0_5k_db, dsp1_5k_db, dsp2_5k_db, dsp3_5k_db, ipcon_5k_db]:
for entry in db:
diff --git a/icefuzz/tests/sb_i2c.pcf b/icefuzz/tests/sb_i2c.pcf
new file mode 100644
index 0000000..32aad48
--- /dev/null
+++ b/icefuzz/tests/sb_i2c.pcf
@@ -0,0 +1,21 @@
+set_io sbclki 2
+set_io sbrwi 3
+set_io sbstbi 4
+set_io sbadri0 6
+set_io sbadri1 9
+set_io sbadri7 10
+set_io sbdati0 11
+set_io sbdati1 12
+set_io sbdati7 13
+set_io sbdato0 14
+set_io sbdato1 15
+set_io sbdato7 16
+set_io sbacko 17
+set_io i2cirq 18
+set_io i2cwkup 19
+set_io scli 20
+set_io sdai 21
+set_io sclo 23
+set_io scloe 25
+set_io sdao 26
+set_io sdaoe 27
diff --git a/icefuzz/tests/sb_i2c.v b/icefuzz/tests/sb_i2c.v
new file mode 100644
index 0000000..cd5e46a
--- /dev/null
+++ b/icefuzz/tests/sb_i2c.v
@@ -0,0 +1,48 @@
+module top (
+ input sbclki, sbrwi, sbstbi,
+ input sbadri0, sbadri1, sbadri7,
+ input sbdati0, sbdati1, sbdati7,
+ output sbdato0, sbdato1, sbdato7,
+ output sbacko, i2cirq, i2cwkup,
+ input scli, sdai,
+ output sclo, scloe, sdao, sdaoe
+);
+
+SB_I2C #(
+ .I2C_SLAVE_INIT_ADDR("0b1111100010"),
+ .BUS_ADDR74("0b0011")
+) i2c_ip (
+ .SBCLKI(sbclki),
+ .SBRWI(sbrwi),
+ .SBSTBI(sbstbi),
+
+ .SBADRI0(sbadri0),
+ .SBADRI1(sbadri1),
+ .SBADRI7(sbadri7),
+
+ .SBDATI0(sbdati0),
+ .SBDATI1(sbdati1),
+ .SBDATI7(sbdati7),
+
+ .SBDATO0(sbdato0),
+ .SBDATO1(sbdato1),
+ .SBDATO7(sbdato7),
+
+ .SBACKO(sbacko),
+ .I2CIRQ(i2cirq),
+ .I2CWKUP(i2cwkup),
+
+ .SCLI(scli),
+ .SCLO(sclo),
+ .SCLOE(scloe),
+
+ .SDAI(sdai),
+ .SDAO(sdao),
+ .SDAOE(sdaoe)
+)
+/* synthesis SDA_INPUT_DELAYED=1 */
+/* synthesis SDA_OUTPUT_DELAYED=1 */
+/* synthesis SCL_INPUT_FILTERED=1 */
+;
+
+endmodule \ No newline at end of file
diff --git a/icefuzz/tests/sb_i2c_io.pcf b/icefuzz/tests/sb_i2c_io.pcf
new file mode 100644
index 0000000..6d8e890
--- /dev/null
+++ b/icefuzz/tests/sb_i2c_io.pcf
@@ -0,0 +1,18 @@
+set_io sbclki 2
+set_io sbrwi 3
+set_io sbstbi 4
+set_io sbadri0 6
+set_io sbadri1 9
+set_io sbadri7 10
+set_io sbdati0 11
+set_io sbdati1 12
+set_io sbdati7 13
+set_io sbdato0 14
+set_io sbdato1 15
+set_io sbdato7 16
+set_io sbacko 17
+set_io i2cirq 18
+set_io i2cwkup 19
+set_io scl 20
+set_io sda 21
+
diff --git a/icefuzz/tests/sb_i2c_io.v b/icefuzz/tests/sb_i2c_io.v
new file mode 100644
index 0000000..f339df9
--- /dev/null
+++ b/icefuzz/tests/sb_i2c_io.v
@@ -0,0 +1,66 @@
+module top (
+ input sbclki, sbrwi, sbstbi,
+ input sbadri0, sbadri1, sbadri7,
+ input sbdati0, sbdati1, sbdati7,
+ output sbdato0, sbdato1, sbdato7,
+ output sbacko, i2cirq, i2cwkup,
+ inout scl, sda
+);
+
+wire scli, sclo, scloe, sdai, sdao, sdaoe;
+
+SB_I2C #(
+ .I2C_SLAVE_INIT_ADDR("0b1111100010"),
+ .BUS_ADDR74("0b0011")
+) i2c_ip (
+ .SBCLKI(sbclki),
+ .SBRWI(sbrwi),
+ .SBSTBI(sbstbi),
+
+ .SBADRI0(sbadri0),
+ .SBADRI1(sbadri1),
+ .SBADRI7(sbadri7),
+
+ .SBDATI0(sbdati0),
+ .SBDATI1(sbdati1),
+ .SBDATI7(sbdati7),
+
+ .SBDATO0(sbdato0),
+ .SBDATO1(sbdato1),
+ .SBDATO7(sbdato7),
+
+ .SBACKO(sbacko),
+ .I2CIRQ(i2cirq),
+ .I2CWKUP(i2cwkup),
+
+ .SCLI(scli),
+ .SCLO(sclo),
+ .SCLOE(scloe),
+
+ .SDAI(sdai),
+ .SDAO(sdao),
+ .SDAOE(sdaoe)
+);
+
+SB_IO #(
+ .PIN_TYPE(6'b101001),
+ .PULLUP(1'b1)
+) scl_io (
+ .PACKAGE_PIN(scl),
+ .OUTPUT_ENABLE(scloe),
+ .D_OUT_0(sclo),
+ .D_IN_0(scli)
+);
+
+
+SB_IO #(
+ .PIN_TYPE(6'b101001),
+ .PULLUP(1'b1)
+) sda_io (
+ .PACKAGE_PIN(sda),
+ .OUTPUT_ENABLE(sdaoe),
+ .D_OUT_0(sdao),
+ .D_IN_0(sdai)
+);
+
+endmodule \ No newline at end of file