From bd6cf518f3e584446fa1c9f4085705bd36cd4a0c Mon Sep 17 00:00:00 2001
From: David Shah
Date: Thu, 23 Nov 2017 19:45:27 +0000
Subject: Begin I2C/SPI IP reverse engineering
---
icefuzz/tests/sb_i2c.pcf | 21 +++++++++++++++
icefuzz/tests/sb_i2c.v | 48 +++++++++++++++++++++++++++++++++
icefuzz/tests/sb_i2c_io.pcf | 18 +++++++++++++
icefuzz/tests/sb_i2c_io.v | 66 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 153 insertions(+)
create mode 100644 icefuzz/tests/sb_i2c.pcf
create mode 100644 icefuzz/tests/sb_i2c.v
create mode 100644 icefuzz/tests/sb_i2c_io.pcf
create mode 100644 icefuzz/tests/sb_i2c_io.v
(limited to 'icefuzz/tests')
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
--
cgit v1.2.3
From 39b08012bb26c7dc5464a28ec6abb6dccf30a40f Mon Sep 17 00:00:00 2001
From: David Shah
Date: Fri, 24 Nov 2017 14:53:39 +0000
Subject: Work on UltraPlus IP tracing
---
icefuzz/tests/ip/.gitignore | 1 +
icefuzz/tests/ip/trace_ip.py | 283 +++++++++++++++++++++++++++++++++++++
icefuzz/tests/ip/up5k_I2C_data.txt | 82 +++++++++++
3 files changed, 366 insertions(+)
create mode 100644 icefuzz/tests/ip/.gitignore
create mode 100755 icefuzz/tests/ip/trace_ip.py
create mode 100644 icefuzz/tests/ip/up5k_I2C_data.txt
(limited to 'icefuzz/tests')
diff --git a/icefuzz/tests/ip/.gitignore b/icefuzz/tests/ip/.gitignore
new file mode 100644
index 0000000..c1313c3
--- /dev/null
+++ b/icefuzz/tests/ip/.gitignore
@@ -0,0 +1 @@
+work_ip/
\ No newline at end of file
diff --git a/icefuzz/tests/ip/trace_ip.py b/icefuzz/tests/ip/trace_ip.py
new file mode 100755
index 0000000..a6a5197
--- /dev/null
+++ b/icefuzz/tests/ip/trace_ip.py
@@ -0,0 +1,283 @@
+#!/usr/bin/env python3
+
+import os, sys, re
+
+device = "up5k"
+
+pins = "2 3 4 6 9 10 11 12 13 18 19 20 21 25 26 27 28 31 32 34 35 36 37 38 42 43 44 45 46 47 48".split()
+
+# This is the master IP reverse engineering script for three similar IPs: I2C, SPI and LEDDA_IP
+ip_types = ["I2C", "SPI", "LEDDA_IP"]
+ip_locs = { }
+ip_locs["I2C"] = [(0, 31, 0), (25, 31, 0)]
+ip_locs["SPI"] = [(0, 0, 0), (25, 0, 1)]
+ip_locs["LEDDA_IP"] = [(0, 31, 2)]
+#spram_locs = [(0, 0, 1)]
+ip_data = { }
+
+#signals[x][0] -> inputs, signals[x][1] ->outputs
+ip_signals = {}
+ip_signals["I2C"] = [["SBCLKI", "SBRWI", "SBSTBI", "SCLI", "SDAI"],
+ ["SBACKO", "I2CIRQ", "I2CWKUP", "SCLO", "SCLOE", "SDAO", "SDAOE"]]
+ip_signals["SPI"] = [["SBCLKI", "SBRWI", "SBSTBI", "MI", "SI", "SCKI", "SCSNI"],
+ ["SBACKO", "SPIIRQ", "SPIWKUP", "SO", "SOE", "MO", "MOE", "SCKO", "SCKOE"]]
+
+ip_signals["LEDDA_IP"] = [["LEDDCS", "LEDDCLK", "LEDDDEN", "LEDDEXE", "LEDDRST"], ["PWMOUT0", "PWMOUT1", "PWMOUT2", "LEDDON"]]
+
+fixed_cbits = {}
+
+fixed_cbits[("I2C", (0, 31, 0))] = ["BUS_ADDR74_0", "I2C_SLAVE_INIT_ADDR_0"]
+fixed_cbits[("I2C", (25, 31, 0))] = ["BUS_ADDR74_0", "BUS_ADDR74_1", "I2C_SLAVE_INIT_ADDR_1"]
+
+fixed_cbits[("SPI", (0, 0, 0))] = []
+fixed_cbits[("SPI", (25, 0, 1))] = ["BUS_ADDR74_1"] # WARNING: this is documented as BUS_ADDR74_0, but this is wrong and will cause icecube to fail. May be the same across devices
+
+fuzz_cbits = {}
+fuzz_cbits["I2C"] = ["SDA_INPUT_DELAYED", "SDA_OUTPUT_DELAYED"]
+
+# Don't add slave address to the list, despite confusing primitive declaration,
+# it's only set in registers not the bitstream
+
+#for i in range(2, 10):
+ #fuzz_cbits["I2C"].append("I2C_SLAVE_INIT_ADDR_%d" % i)
+
+for i in range(8):
+ ip_signals["I2C"][0].append("SBADRI%d" % i)
+ ip_signals["SPI"][0].append("SBADRI%d" % i)
+for i in range(4):
+ ip_signals["LEDDA_IP"][0].append("LEDDADDR%d" % i)
+
+for i in range(8):
+ ip_signals["I2C"][0].append("SBDATI%d" % i)
+ ip_signals["SPI"][0].append("SBDATI%d" % i)
+ ip_signals["LEDDA_IP"][0].append("LEDDDAT%d" % i)
+
+for i in range(8):
+ ip_signals["I2C"][1].append("SBDATO%d" % i)
+ ip_signals["SPI"][1].append("SBDATO%d" % i)
+
+for i in range(4):
+ ip_signals["SPI"][1].append("MCSNO%d" % i)
+ ip_signals["SPI"][1].append("MCSNOE%d" % i)
+
+fuzz_net_options = {}
+fuzz_net_options["I2C"] = ["SBADRI", "SBDATI", "SBDATO"]
+fuzz_net_options["SPI"] = ["SBADRI", "SBDATI", "SBDATO", "MCSN"]
+fuzz_net_options["LEDDA_IP"] = ["LEDDADDR", "LEDDDAT"]
+
+
+available_cbits = {}
+available_cbits["I2C"] = [("BUS_ADDR74", 4), ("I2C_SLAVE_INIT_ADDR", 10)]
+available_cbits["SPI"] = [("BUS_ADDR74", 4)]
+
+# Return a param value in "Lattice style"
+def get_param_value(param_size, param_name, set_cbits):
+ val = "\"0b"
+ for i in range(param_size):
+ if param_name + "_" + str((param_size - 1) - i) in set_cbits:
+ val += "1"
+ else:
+ val += "0"
+ val += "\""
+ return val
+
+# Build the output files for a given IP and config, returning
+# the pin2net map
+def make_ip(ip_type, ip_loc, fuzz_opt, set_cbits):
+ used_inputs = [ ]
+ used_outputs = [ ]
+ for insig in ip_signals[ip_type][0]:
+ ignore = False
+ for o in fuzz_net_options[ip_type]:
+ if o != fuzz_opt and insig.startswith(o):
+ ignore = True
+ if not ignore:
+ used_inputs.append(insig)
+ for outsig in ip_signals[ip_type][1]:
+ ignore = False
+ for o in fuzz_net_options[ip_type]:
+ if o != fuzz_opt and outsig.startswith(o):
+ ignore = True
+ if not ignore:
+ used_outputs.append(outsig)
+ all_sigs = used_inputs + used_outputs
+ all_cbits = set()
+ all_cbits.update(set_cbits)
+ if (ip_type, ip_loc) in fixed_cbits:
+ all_cbits.update(fixed_cbits[(ip_type, ip_loc)])
+ with open("./work_ip/ip.v", "w") as f:
+ print("module top(", file=f)
+ for s in used_inputs:
+ print("input %s," % s, file=f)
+ for s in used_outputs[:-1]:
+ print("output %s," % s, file=f)
+ print("output %s);" % used_outputs[-1], file=f)
+ print("SB_%s" % ip_type, file=f)
+ if ip_type in available_cbits:
+ print("\t#(", file=f)
+ for p in available_cbits[ip_type]:
+ name, width = p
+ comma = "," if p != available_cbits[ip_type][-1] else ""
+ print("\t\t.%s(%s)%s" % (name, get_param_value(width, name, all_cbits), comma), file=f)
+ print("\t)", file=f)
+ print("\tip_inst (",file=f)
+ for sig in all_sigs[:-1]:
+ print("\t\t.%s(%s)," % (sig, sig), file=f)
+ print("\t\t.%s(%s)" % (all_sigs[-1], all_sigs[-1]), file=f)
+ print("\t)", file=f)
+ if "SDA_INPUT_DELAYED" in all_cbits:
+ print("\t/* synthesis SDA_INPUT_DELAYED=1 */", file=f)
+ else:
+ print("\t/* synthesis SDA_INPUT_DELAYED=0 */", file=f)
+ if "SDA_OUTPUT_DELAYED" in all_cbits:
+ print("\t/* synthesis SDA_OUTPUT_DELAYED=1 */", file=f)
+ else:
+ print("\t/* synthesis SDA_OUTPUT_DELAYED=0 */", file=f)
+ print(";", file=f)
+ print("endmodule", file=f)
+ pin2net = {}
+ with open("./work_ip/ip.pcf","w") as f:
+ temp_pins = list(pins)
+ for sig in all_sigs:
+ if len(temp_pins) == 0:
+ sys.stderr.write("ERROR: no remaining pins to alloc")
+ sys.exit(1)
+ pin = temp_pins.pop()
+ pin2net[pin] = sig
+ print("set_io %s %s" % (sig, pin), file=f)
+ print("set_location ip_inst %d %d %d" % ip_loc, file=f)
+ return pin2net
+#Parse the output of an icebox vlog file to determine connectivity
+def parse_vlog(f, pin2net, net_map):
+ current_net = None
+
+ for line in f:
+ m = re.match(r"wire ([a-zA-Z0-9_]+);", line)
+ if m:
+ net = m.group(1)
+ mp = re.match(r"pin_([a-zA-Z0-9]+)", net)
+ if mp:
+ pin = mp.group(1)
+ if pin in pin2net:
+ current_net = pin2net[pin]
+ else:
+ current_net = None
+ else:
+ current_net = None
+ elif current_net is not None:
+ m = re.match(r"// \((\d+), (\d+), '([a-zA-Z0-9_/]+)'\)", line)
+ if m:
+ x = int(m.group(1))
+ y = int(m.group(2))
+ net = m.group(3)
+ if not (net.startswith("sp") or net.startswith("glb") or net.startswith("neigh") or net.startswith("io") or net.startswith("local") or net.startswith("fabout")):
+ net_map[current_net].add((x, y, net))
+def parse_exp(f):
+ current_x = 0
+ current_y = 0
+ bits = set()
+ for line in f:
+ splitline = line.split(' ')
+ if splitline[0].endswith("_tile"):
+ current_x = int(splitline[1])
+ current_y = int(splitline[2])
+ elif splitline[0] == "IpConfig":
+ bits.add((current_x, current_y, splitline[1].strip()))
+ return bits
+
+if not os.path.exists("./work_ip"):
+ os.mkdir("./work_ip")
+for ip in ip_types:
+ ip_data[ip] = {}
+ for loc in ip_locs[ip]:
+ x, y, z = loc
+ net_cbit_map = {}
+ init_cbits = []
+ for sig in ip_signals[ip][0]:
+ net_cbit_map[sig] = set()
+ for sig in ip_signals[ip][1]:
+ net_cbit_map[sig] = set()
+ first = True
+ for state in ["FUZZ_NETS", "FUZZ_CBITS"]:
+ fuzz_options = None
+ if state == "FUZZ_NETS":
+ fuzz_options = fuzz_net_options[ip]
+ else:
+ if ip in fuzz_cbits:
+ fuzz_options = fuzz_cbits[ip]
+ else:
+ fuzz_options = []
+ for n in fuzz_options:
+ print("Fuzzing %s (%d, %d, %d) %s" % (ip, x, y, z, n))
+ fuzz_nets = fuzz_net_options[ip][0]
+ if state == "FUZZ_NETS":
+ fuzz_nets = n
+ set_cbits = set()
+ if state == "FUZZ_CBITS":
+ set_cbits.add(n)
+ pin2net = make_ip(ip, loc, fuzz_nets, set_cbits)
+ retval = os.system("bash ../../icecube.sh -" + device + " ./work_ip/ip.v > ./work_ip/icecube.log 2>&1")
+ if retval != 0:
+ sys.stderr.write('ERROR: icecube returned non-zero error code\n')
+ sys.exit(1)
+ retval = os.system("../../../icebox/icebox_explain.py ./work_ip/ip.asc > ./work_ip/ip.exp")
+ if retval != 0:
+ sys.stderr.write('ERROR: icebox_explain returned non-zero error code\n')
+ sys.exit(1)
+ retval = os.system("../../../icebox/icebox_vlog.py -l ./work_ip/ip.asc > ./work_ip/ip.vlog")
+ if retval != 0:
+ sys.stderr.write('ERROR: icebox_vlog returned non-zero error code\n')
+ sys.exit(1)
+ with open("./work_ip/ip.vlog", "r") as f:
+ parse_vlog(f, pin2net, net_cbit_map)
+ bits = []
+ with open("./work_ip/ip.exp", "r") as f:
+ bits = parse_exp(f)
+ if first:
+ idx = 0
+ for bit in bits:
+ init_cbits.append(bit)
+ if len(bits) == 1:
+ net_cbit_map[ip + "_ENABLE"] = [bit]
+ else:
+ net_cbit_map[ip + "_ENABLE_" + str(idx)] = [bit]
+ idx += 1
+ for bit in init_cbits:
+ if bit not in bits:
+ bx, by, bn = bit
+ print('WARNING: while fuzzing %s (%d, %d, %d) bit (%d, %d, %s) has unknown function (not always set)' %
+ (ip, x, y, z, bx, by, bn))
+ new_bits = []
+ for bit in bits:
+ if bit not in init_cbits:
+ new_bits.append(bit)
+ if state == "FUZZ_NETS" and len(new_bits) != 0:
+ for bit in new_bits:
+ bx, by, bn = bit
+ print('WARNING: while fuzzing %s (%d, %d, %d) bit (%d, %d, %s) has unknown function (not always set)' %
+ (ip, x, y, z, bx, by, bn))
+ elif state == "FUZZ_CBITS":
+ if len(new_bits) == 0:
+ print('WARNING: while fuzzing %s (%d, %d, %d) param %s causes no change' %
+ (ip, x, y, z, n))
+ else:
+ idx = 0
+ for bit in new_bits:
+ if len(new_bits) == 1:
+ net_cbit_map[n] = [bit]
+ else:
+ net_cbit_map[n + "_" + str(idx)] = [bit]
+ idx += 1
+ first = False
+ ip_data[ip][loc] = net_cbit_map
+
+ with open(device + "_" + ip + "_data.txt", "w") as f:
+ for loc in ip_data[ip]:
+ x, y, z = loc
+ data = ip_data[ip][loc]
+ for net in sorted(data):
+ cnets = []
+ for cnet in data[net]:
+ cnets.append("(%d, %d, \"%s\")" % cnet)
+ print("\t\t%s %s, " % (("\"" + net.replace("[","_").replace("]","") + "\":").ljust(24), " ".join(cnets)), file=f)
+ print("\t},", file=f)
diff --git a/icefuzz/tests/ip/up5k_I2C_data.txt b/icefuzz/tests/ip/up5k_I2C_data.txt
new file mode 100644
index 0000000..79b9c13
--- /dev/null
+++ b/icefuzz/tests/ip/up5k_I2C_data.txt
@@ -0,0 +1,82 @@
+ "I2CIRQ": (0, 30, "slf_op_7"),
+ "I2CWKUP": (0, 29, "slf_op_5"),
+ "I2C_ENABLE_0": (13, 31, "cbit2usealt_in_0"),
+ "I2C_ENABLE_1": (12, 31, "cbit2usealt_in_1"),
+ "SBACKO": (0, 30, "slf_op_6"),
+ "SBADRI0": (0, 30, "lutff_1/in_0"),
+ "SBADRI1": (0, 30, "lutff_2/in_0"),
+ "SBADRI2": (0, 30, "lutff_3/in_0"),
+ "SBADRI3": (0, 30, "lutff_4/in_0"),
+ "SBADRI4": (0, 30, "lutff_5/in_0"),
+ "SBADRI5": (0, 30, "lutff_6/in_0"),
+ "SBADRI6": (0, 30, "lutff_7/in_0"),
+ "SBADRI7": (0, 29, "lutff_2/in_0"),
+ "SBCLKI": (0, 30, "clk"),
+ "SBDATI0": (0, 29, "lutff_5/in_0"),
+ "SBDATI1": (0, 29, "lutff_6/in_0"),
+ "SBDATI2": (0, 29, "lutff_7/in_0"),
+ "SBDATI3": (0, 30, "lutff_0/in_3"),
+ "SBDATI4": (0, 30, "lutff_5/in_1"),
+ "SBDATI5": (0, 30, "lutff_6/in_1"),
+ "SBDATI6": (0, 30, "lutff_7/in_1"),
+ "SBDATI7": (0, 30, "lutff_0/in_0"),
+ "SBDATO0": (0, 29, "slf_op_6"),
+ "SBDATO1": (0, 29, "slf_op_7"),
+ "SBDATO2": (0, 30, "slf_op_0"),
+ "SBDATO3": (0, 30, "slf_op_1"),
+ "SBDATO4": (0, 30, "slf_op_2"),
+ "SBDATO5": (0, 30, "slf_op_3"),
+ "SBDATO6": (0, 30, "slf_op_4"),
+ "SBDATO7": (0, 30, "slf_op_5"),
+ "SBRWI": (0, 29, "lutff_4/in_0"),
+ "SBSTBI": (0, 29, "lutff_3/in_0"),
+ "SCLI": (0, 29, "lutff_2/in_1"),
+ "SCLO": (0, 29, "slf_op_3"),
+ "SCLOE": (0, 29, "slf_op_4"),
+ "SDAI": (0, 29, "lutff_1/in_1"),
+ "SDAO": (0, 29, "slf_op_1"),
+ "SDAOE": (0, 29, "slf_op_2"),
+ "SDA_INPUT_DELAYED": (12, 31, "SDA_input_delay"),
+ "SDA_OUTPUT_DELAYED": (12, 31, "SDA_output_delay"),
+ },
+ "I2CIRQ": (25, 30, "slf_op_7"),
+ "I2CWKUP": (25, 29, "slf_op_5"),
+ "I2C_ENABLE_0": (19, 31, "cbit2usealt_in_1"),
+ "I2C_ENABLE_1": (19, 31, "cbit2usealt_in_0"),
+ "SBACKO": (25, 30, "slf_op_6"),
+ "SBADRI0": (25, 30, "lutff_1/in_0"),
+ "SBADRI1": (25, 30, "lutff_2/in_0"),
+ "SBADRI2": (25, 30, "lutff_3/in_0"),
+ "SBADRI3": (25, 30, "lutff_4/in_0"),
+ "SBADRI4": (25, 30, "lutff_5/in_0"),
+ "SBADRI5": (25, 30, "lutff_6/in_0"),
+ "SBADRI6": (25, 30, "lutff_7/in_0"),
+ "SBADRI7": (25, 29, "lutff_2/in_0"),
+ "SBCLKI": (25, 30, "clk"),
+ "SBDATI0": (25, 29, "lutff_5/in_0"),
+ "SBDATI1": (25, 29, "lutff_6/in_0"),
+ "SBDATI2": (25, 29, "lutff_7/in_0"),
+ "SBDATI3": (25, 30, "lutff_0/in_3"),
+ "SBDATI4": (25, 30, "lutff_5/in_1"),
+ "SBDATI5": (25, 30, "lutff_6/in_1"),
+ "SBDATI6": (25, 30, "lutff_7/in_1"),
+ "SBDATI7": (25, 30, "lutff_0/in_0"),
+ "SBDATO0": (25, 29, "slf_op_6"),
+ "SBDATO1": (25, 29, "slf_op_7"),
+ "SBDATO2": (25, 30, "slf_op_0"),
+ "SBDATO3": (25, 30, "slf_op_1"),
+ "SBDATO4": (25, 30, "slf_op_2"),
+ "SBDATO5": (25, 30, "slf_op_3"),
+ "SBDATO6": (25, 30, "slf_op_4"),
+ "SBDATO7": (25, 30, "slf_op_5"),
+ "SBRWI": (25, 29, "lutff_4/in_0"),
+ "SBSTBI": (25, 29, "lutff_3/in_0"),
+ "SCLI": (25, 29, "lutff_2/in_1"),
+ "SCLO": (25, 29, "slf_op_3"),
+ "SCLOE": (25, 29, "slf_op_4"),
+ "SDAI": (25, 29, "lutff_1/in_1"),
+ "SDAO": (25, 29, "slf_op_1"),
+ "SDAOE": (25, 29, "slf_op_2"),
+ "SDA_INPUT_DELAYED": (19, 31, "SDA_input_delay"),
+ "SDA_OUTPUT_DELAYED": (19, 31, "SDA_output_delay"),
+ },
--
cgit v1.2.3
From 6b2d196cb1b871eb333a7491fe725442a923bd13 Mon Sep 17 00:00:00 2001
From: David Shah
Date: Fri, 24 Nov 2017 15:10:40 +0000
Subject: All 5k IP traced
---
icefuzz/tests/ip/trace_ip.py | 4 +-
icefuzz/tests/ip/up5k_I2C_data.txt | 6 +-
icefuzz/tests/ip/up5k_LEDDA_IP_data.txt | 22 +++++++
icefuzz/tests/ip/up5k_SPI_data.txt | 100 ++++++++++++++++++++++++++++++++
4 files changed, 129 insertions(+), 3 deletions(-)
create mode 100644 icefuzz/tests/ip/up5k_LEDDA_IP_data.txt
create mode 100644 icefuzz/tests/ip/up5k_SPI_data.txt
(limited to 'icefuzz/tests')
diff --git a/icefuzz/tests/ip/trace_ip.py b/icefuzz/tests/ip/trace_ip.py
index a6a5197..f61bcfe 100755
--- a/icefuzz/tests/ip/trace_ip.py
+++ b/icefuzz/tests/ip/trace_ip.py
@@ -22,7 +22,8 @@ ip_signals["I2C"] = [["SBCLKI", "SBRWI", "SBSTBI", "SCLI", "SDAI"],
ip_signals["SPI"] = [["SBCLKI", "SBRWI", "SBSTBI", "MI", "SI", "SCKI", "SCSNI"],
["SBACKO", "SPIIRQ", "SPIWKUP", "SO", "SOE", "MO", "MOE", "SCKO", "SCKOE"]]
-ip_signals["LEDDA_IP"] = [["LEDDCS", "LEDDCLK", "LEDDDEN", "LEDDEXE", "LEDDRST"], ["PWMOUT0", "PWMOUT1", "PWMOUT2", "LEDDON"]]
+# LEDDRST is missing because it doesn't really exist...
+ip_signals["LEDDA_IP"] = [["LEDDCS", "LEDDCLK", "LEDDDEN", "LEDDEXE"], ["PWMOUT0", "PWMOUT1", "PWMOUT2", "LEDDON"]]
fixed_cbits = {}
@@ -274,6 +275,7 @@ for ip in ip_types:
with open(device + "_" + ip + "_data.txt", "w") as f:
for loc in ip_data[ip]:
x, y, z = loc
+ print("\t(\"%s\", (%d, %d, %d)): {" % (ip, x, y, z), file=f)
data = ip_data[ip][loc]
for net in sorted(data):
cnets = []
diff --git a/icefuzz/tests/ip/up5k_I2C_data.txt b/icefuzz/tests/ip/up5k_I2C_data.txt
index 79b9c13..a891b0c 100644
--- a/icefuzz/tests/ip/up5k_I2C_data.txt
+++ b/icefuzz/tests/ip/up5k_I2C_data.txt
@@ -1,3 +1,4 @@
+ ("I2C", (0, 31, 0)): {
"I2CIRQ": (0, 30, "slf_op_7"),
"I2CWKUP": (0, 29, "slf_op_5"),
"I2C_ENABLE_0": (13, 31, "cbit2usealt_in_0"),
@@ -39,10 +40,11 @@
"SDA_INPUT_DELAYED": (12, 31, "SDA_input_delay"),
"SDA_OUTPUT_DELAYED": (12, 31, "SDA_output_delay"),
},
+ ("I2C", (25, 31, 0)): {
"I2CIRQ": (25, 30, "slf_op_7"),
"I2CWKUP": (25, 29, "slf_op_5"),
- "I2C_ENABLE_0": (19, 31, "cbit2usealt_in_1"),
- "I2C_ENABLE_1": (19, 31, "cbit2usealt_in_0"),
+ "I2C_ENABLE_0": (19, 31, "cbit2usealt_in_0"),
+ "I2C_ENABLE_1": (19, 31, "cbit2usealt_in_1"),
"SBACKO": (25, 30, "slf_op_6"),
"SBADRI0": (25, 30, "lutff_1/in_0"),
"SBADRI1": (25, 30, "lutff_2/in_0"),
diff --git a/icefuzz/tests/ip/up5k_LEDDA_IP_data.txt b/icefuzz/tests/ip/up5k_LEDDA_IP_data.txt
new file mode 100644
index 0000000..4e130d1
--- /dev/null
+++ b/icefuzz/tests/ip/up5k_LEDDA_IP_data.txt
@@ -0,0 +1,22 @@
+ ("LEDDA_IP", (0, 31, 2)): {
+ "LEDDADDR0": (0, 28, "lutff_4/in_0"),
+ "LEDDADDR1": (0, 28, "lutff_5/in_0"),
+ "LEDDADDR2": (0, 28, "lutff_6/in_0"),
+ "LEDDADDR3": (0, 28, "lutff_7/in_0"),
+ "LEDDCLK": (0, 29, "clk"),
+ "LEDDCS": (0, 28, "lutff_2/in_0"),
+ "LEDDDAT0": (0, 28, "lutff_2/in_1"),
+ "LEDDDAT1": (0, 28, "lutff_3/in_1"),
+ "LEDDDAT2": (0, 28, "lutff_4/in_1"),
+ "LEDDDAT3": (0, 28, "lutff_5/in_1"),
+ "LEDDDAT4": (0, 28, "lutff_6/in_1"),
+ "LEDDDAT5": (0, 28, "lutff_7/in_1"),
+ "LEDDDAT6": (0, 28, "lutff_0/in_0"),
+ "LEDDDAT7": (0, 28, "lutff_1/in_0"),
+ "LEDDDEN": (0, 28, "lutff_1/in_1"),
+ "LEDDEXE": (0, 28, "lutff_0/in_1"),
+ "LEDDON": (0, 29, "slf_op_0"),
+ "PWMOUT0": (0, 28, "slf_op_4"),
+ "PWMOUT1": (0, 28, "slf_op_5"),
+ "PWMOUT2": (0, 28, "slf_op_6"),
+ },
diff --git a/icefuzz/tests/ip/up5k_SPI_data.txt b/icefuzz/tests/ip/up5k_SPI_data.txt
new file mode 100644
index 0000000..149c93a
--- /dev/null
+++ b/icefuzz/tests/ip/up5k_SPI_data.txt
@@ -0,0 +1,100 @@
+ ("SPI", (0, 0, 0)): {
+ "MCSNO0": (0, 21, "slf_op_2"),
+ "MCSNO1": (0, 21, "slf_op_4"),
+ "MCSNO2": (0, 21, "slf_op_7"),
+ "MCSNO3": (0, 22, "slf_op_1"),
+ "MCSNOE0": (0, 21, "slf_op_3"),
+ "MCSNOE1": (0, 21, "slf_op_5"),
+ "MCSNOE2": (0, 22, "slf_op_0"),
+ "MCSNOE3": (0, 22, "slf_op_2"),
+ "MI": (0, 22, "lutff_0/in_1"),
+ "MO": (0, 20, "slf_op_6"),
+ "MOE": (0, 20, "slf_op_7"),
+ "SBACKO": (0, 20, "slf_op_1"),
+ "SBADRI0": (0, 19, "lutff_1/in_1"),
+ "SBADRI1": (0, 19, "lutff_2/in_1"),
+ "SBADRI2": (0, 20, "lutff_0/in_3"),
+ "SBADRI3": (0, 20, "lutff_1/in_3"),
+ "SBADRI4": (0, 20, "lutff_2/in_3"),
+ "SBADRI5": (0, 20, "lutff_3/in_3"),
+ "SBADRI6": (0, 20, "lutff_4/in_3"),
+ "SBADRI7": (0, 20, "lutff_5/in_3"),
+ "SBCLKI": (0, 20, "clk"),
+ "SBDATI0": (0, 19, "lutff_1/in_3"),
+ "SBDATI1": (0, 19, "lutff_2/in_3"),
+ "SBDATI2": (0, 19, "lutff_3/in_3"),
+ "SBDATI3": (0, 19, "lutff_4/in_3"),
+ "SBDATI4": (0, 19, "lutff_5/in_3"),
+ "SBDATI5": (0, 19, "lutff_6/in_3"),
+ "SBDATI6": (0, 19, "lutff_7/in_3"),
+ "SBDATI7": (0, 19, "lutff_0/in_1"),
+ "SBDATO0": (0, 19, "slf_op_1"),
+ "SBDATO1": (0, 19, "slf_op_2"),
+ "SBDATO2": (0, 19, "slf_op_3"),
+ "SBDATO3": (0, 19, "slf_op_4"),
+ "SBDATO4": (0, 19, "slf_op_5"),
+ "SBDATO5": (0, 19, "slf_op_6"),
+ "SBDATO6": (0, 19, "slf_op_7"),
+ "SBDATO7": (0, 20, "slf_op_0"),
+ "SBRWI": (0, 19, "lutff_0/in_3"),
+ "SBSTBI": (0, 20, "lutff_6/in_3"),
+ "SCKI": (0, 22, "lutff_1/in_1"),
+ "SCKO": (0, 21, "slf_op_0"),
+ "SCKOE": (0, 21, "slf_op_1"),
+ "SCSNI": (0, 22, "lutff_2/in_1"),
+ "SI": (0, 22, "lutff_7/in_3"),
+ "SO": (0, 20, "slf_op_4"),
+ "SOE": (0, 20, "slf_op_5"),
+ "SPIIRQ": (0, 20, "slf_op_2"),
+ "SPIWKUP": (0, 20, "slf_op_3"),
+ },
+ ("SPI", (25, 0, 1)): {
+ "MCSNO0": (25, 21, "slf_op_2"),
+ "MCSNO1": (25, 21, "slf_op_4"),
+ "MCSNO2": (25, 21, "slf_op_7"),
+ "MCSNO3": (25, 22, "slf_op_1"),
+ "MCSNOE0": (25, 21, "slf_op_3"),
+ "MCSNOE1": (25, 21, "slf_op_5"),
+ "MCSNOE2": (25, 22, "slf_op_0"),
+ "MCSNOE3": (25, 22, "slf_op_2"),
+ "MI": (25, 22, "lutff_0/in_1"),
+ "MO": (25, 20, "slf_op_6"),
+ "MOE": (25, 20, "slf_op_7"),
+ "SBACKO": (25, 20, "slf_op_1"),
+ "SBADRI0": (25, 19, "lutff_1/in_1"),
+ "SBADRI1": (25, 19, "lutff_2/in_1"),
+ "SBADRI2": (25, 20, "lutff_0/in_3"),
+ "SBADRI3": (25, 20, "lutff_1/in_3"),
+ "SBADRI4": (25, 20, "lutff_2/in_3"),
+ "SBADRI5": (25, 20, "lutff_3/in_3"),
+ "SBADRI6": (25, 20, "lutff_4/in_3"),
+ "SBADRI7": (25, 20, "lutff_5/in_3"),
+ "SBCLKI": (25, 20, "clk"),
+ "SBDATI0": (25, 19, "lutff_1/in_3"),
+ "SBDATI1": (25, 19, "lutff_2/in_3"),
+ "SBDATI2": (25, 19, "lutff_3/in_3"),
+ "SBDATI3": (25, 19, "lutff_4/in_3"),
+ "SBDATI4": (25, 19, "lutff_5/in_3"),
+ "SBDATI5": (25, 19, "lutff_6/in_3"),
+ "SBDATI6": (25, 19, "lutff_7/in_3"),
+ "SBDATI7": (25, 19, "lutff_0/in_1"),
+ "SBDATO0": (25, 19, "slf_op_1"),
+ "SBDATO1": (25, 19, "slf_op_2"),
+ "SBDATO2": (25, 19, "slf_op_3"),
+ "SBDATO3": (25, 19, "slf_op_4"),
+ "SBDATO4": (25, 19, "slf_op_5"),
+ "SBDATO5": (25, 19, "slf_op_6"),
+ "SBDATO6": (25, 19, "slf_op_7"),
+ "SBDATO7": (25, 20, "slf_op_0"),
+ "SBRWI": (25, 19, "lutff_0/in_3"),
+ "SBSTBI": (25, 20, "lutff_6/in_3"),
+ "SCKI": (25, 22, "lutff_1/in_1"),
+ "SCKO": (25, 21, "slf_op_0"),
+ "SCKOE": (25, 21, "slf_op_1"),
+ "SCSNI": (25, 22, "lutff_2/in_1"),
+ "SI": (25, 22, "lutff_7/in_3"),
+ "SO": (25, 20, "slf_op_4"),
+ "SOE": (25, 20, "slf_op_5"),
+ "SPIIRQ": (25, 20, "slf_op_2"),
+ "SPIWKUP": (25, 20, "slf_op_3"),
+ },
--
cgit v1.2.3
From db87f484660dab833ea534e7d37c9c55417d5239 Mon Sep 17 00:00:00 2001
From: David Shah
Date: Fri, 24 Nov 2017 15:50:16 +0000
Subject: Documented I2C/SPI/LEDDA_IP
---
docs/ultraplus.html | 152 +++++++++++++++++++++++++++++++++++-
icefuzz/tests/ip/make_html_table.py | 46 +++++++++++
2 files changed, 196 insertions(+), 2 deletions(-)
create mode 100755 icefuzz/tests/ip/make_html_table.py
(limited to 'icefuzz/tests')
diff --git a/docs/ultraplus.html b/docs/ultraplus.html
index da109b5..e01d038 100644
--- a/docs/ultraplus.html
+++ b/docs/ultraplus.html
@@ -1,19 +1,36 @@
Project IceStorm – UltraPlus Features Documentation
@@ -264,4 +281,135 @@ can be used as an open-drain IO using the standard IO cell.
100kΩ (default) | !cf_bit_35 !B6[15] | !cf_bit_39 !B12[15] |
+
+Hard IP
+
+The UltraPlus devices contain three types of Hard IP: I2C (SB_I2C), SPI (SB_SPI), and LED PWM generation
+(SB_LEDDA_IP). The connections and configurations for each of these blocks are documented below.
+
+
+ | Signal | I2C (0, 31, 0) | I2C (25, 31, 0) |
+ | SBACKO | (0, 30, slf_op_6) | (25, 30, slf_op_6) |
+ | SBADRI0 | (0, 30, lutff_1/in_0) | (25, 30, lutff_1/in_0) |
+ | SBADRI1 | (0, 30, lutff_2/in_0) | (25, 30, lutff_2/in_0) |
+ | SBADRI2 | (0, 30, lutff_3/in_0) | (25, 30, lutff_3/in_0) |
+ | SBADRI3 | (0, 30, lutff_4/in_0) | (25, 30, lutff_4/in_0) |
+ | SBADRI4 | (0, 30, lutff_5/in_0) | (25, 30, lutff_5/in_0) |
+ | SBADRI5 | (0, 30, lutff_6/in_0) | (25, 30, lutff_6/in_0) |
+ | SBADRI6 | (0, 30, lutff_7/in_0) | (25, 30, lutff_7/in_0) |
+ | SBADRI7 | (0, 29, lutff_2/in_0) | (25, 29, lutff_2/in_0) |
+ | SBCLKI | (0, 30, clk) | (25, 30, clk) |
+ | SBDATI0 | (0, 29, lutff_5/in_0) | (25, 29, lutff_5/in_0) |
+ | SBDATI1 | (0, 29, lutff_6/in_0) | (25, 29, lutff_6/in_0) |
+ | SBDATI2 | (0, 29, lutff_7/in_0) | (25, 29, lutff_7/in_0) |
+ | SBDATI3 | (0, 30, lutff_0/in_3) | (25, 30, lutff_0/in_3) |
+ | SBDATI4 | (0, 30, lutff_5/in_1) | (25, 30, lutff_5/in_1) |
+ | SBDATI5 | (0, 30, lutff_6/in_1) | (25, 30, lutff_6/in_1) |
+ | SBDATI6 | (0, 30, lutff_7/in_1) | (25, 30, lutff_7/in_1) |
+ | SBDATI7 | (0, 30, lutff_0/in_0) | (25, 30, lutff_0/in_0) |
+ | SBDATO0 | (0, 29, slf_op_6) | (25, 29, slf_op_6) |
+ | SBDATO1 | (0, 29, slf_op_7) | (25, 29, slf_op_7) |
+ | SBDATO2 | (0, 30, slf_op_0) | (25, 30, slf_op_0) |
+ | SBDATO3 | (0, 30, slf_op_1) | (25, 30, slf_op_1) |
+ | SBDATO4 | (0, 30, slf_op_2) | (25, 30, slf_op_2) |
+ | SBDATO5 | (0, 30, slf_op_3) | (25, 30, slf_op_3) |
+ | SBDATO6 | (0, 30, slf_op_4) | (25, 30, slf_op_4) |
+ | SBDATO7 | (0, 30, slf_op_5) | (25, 30, slf_op_5) |
+ | SBRWI | (0, 29, lutff_4/in_0) | (25, 29, lutff_4/in_0) |
+ | SBSTBI | (0, 29, lutff_3/in_0) | (25, 29, lutff_3/in_0) |
+ | I2CIRQ | (0, 30, slf_op_7) | (25, 30, slf_op_7) |
+ | I2CWKUP | (0, 29, slf_op_5) | (25, 29, slf_op_5) |
+ | SCLI | (0, 29, lutff_2/in_1) | (25, 29, lutff_2/in_1) |
+ | SCLO | (0, 29, slf_op_3) | (25, 29, slf_op_3) |
+ | SCLOE | (0, 29, slf_op_4) | (25, 29, slf_op_4) |
+ | SDAI | (0, 29, lutff_1/in_1) | (25, 29, lutff_1/in_1) |
+ | SDAO | (0, 29, slf_op_1) | (25, 29, slf_op_1) |
+ | SDAOE | (0, 29, slf_op_2) | (25, 29, slf_op_2) |
+ | I2C_ENABLE_0 | (13, 31, cbit2usealt_in_0) | (19, 31, cbit2usealt_in_0) |
+ | I2C_ENABLE_1 | (12, 31, cbit2usealt_in_1) | (19, 31, cbit2usealt_in_1) |
+ | SDA_INPUT_DELAYED | (12, 31, SDA_input_delay) | (19, 31, SDA_input_delay) |
+ | SDA_OUTPUT_DELAYED | (12, 31, SDA_output_delay) | (19, 31, SDA_output_delay) |
+
+
+ |
+
+ | Signal | SPI (0, 0, 0) | SPI (25, 0, 1) |
+ | SBACKO | (0, 20, slf_op_1) | (25, 20, slf_op_1) |
+ | SBADRI0 | (0, 19, lutff_1/in_1) | (25, 19, lutff_1/in_1) |
+ | SBADRI1 | (0, 19, lutff_2/in_1) | (25, 19, lutff_2/in_1) |
+ | SBADRI2 | (0, 20, lutff_0/in_3) | (25, 20, lutff_0/in_3) |
+ | SBADRI3 | (0, 20, lutff_1/in_3) | (25, 20, lutff_1/in_3) |
+ | SBADRI4 | (0, 20, lutff_2/in_3) | (25, 20, lutff_2/in_3) |
+ | SBADRI5 | (0, 20, lutff_3/in_3) | (25, 20, lutff_3/in_3) |
+ | SBADRI6 | (0, 20, lutff_4/in_3) | (25, 20, lutff_4/in_3) |
+ | SBADRI7 | (0, 20, lutff_5/in_3) | (25, 20, lutff_5/in_3) |
+ | SBCLKI | (0, 20, clk) | (25, 20, clk) |
+ | SBDATI0 | (0, 19, lutff_1/in_3) | (25, 19, lutff_1/in_3) |
+ | SBDATI1 | (0, 19, lutff_2/in_3) | (25, 19, lutff_2/in_3) |
+ | SBDATI2 | (0, 19, lutff_3/in_3) | (25, 19, lutff_3/in_3) |
+ | SBDATI3 | (0, 19, lutff_4/in_3) | (25, 19, lutff_4/in_3) |
+ | SBDATI4 | (0, 19, lutff_5/in_3) | (25, 19, lutff_5/in_3) |
+ | SBDATI5 | (0, 19, lutff_6/in_3) | (25, 19, lutff_6/in_3) |
+ | SBDATI6 | (0, 19, lutff_7/in_3) | (25, 19, lutff_7/in_3) |
+ | SBDATI7 | (0, 19, lutff_0/in_1) | (25, 19, lutff_0/in_1) |
+ | SBDATO0 | (0, 19, slf_op_1) | (25, 19, slf_op_1) |
+ | SBDATO1 | (0, 19, slf_op_2) | (25, 19, slf_op_2) |
+ | SBDATO2 | (0, 19, slf_op_3) | (25, 19, slf_op_3) |
+ | SBDATO3 | (0, 19, slf_op_4) | (25, 19, slf_op_4) |
+ | SBDATO4 | (0, 19, slf_op_5) | (25, 19, slf_op_5) |
+ | SBDATO5 | (0, 19, slf_op_6) | (25, 19, slf_op_6) |
+ | SBDATO6 | (0, 19, slf_op_7) | (25, 19, slf_op_7) |
+ | SBDATO7 | (0, 20, slf_op_0) | (25, 20, slf_op_0) |
+ | SBRWI | (0, 19, lutff_0/in_3) | (25, 19, lutff_0/in_3) |
+ | SBSTBI | (0, 20, lutff_6/in_3) | (25, 20, lutff_6/in_3) |
+ | MCSNO0 | (0, 21, slf_op_2) | (25, 21, slf_op_2) |
+ | MCSNO1 | (0, 21, slf_op_4) | (25, 21, slf_op_4) |
+ | MCSNO2 | (0, 21, slf_op_7) | (25, 21, slf_op_7) |
+ | MCSNO3 | (0, 22, slf_op_1) | (25, 22, slf_op_1) |
+ | MCSNOE0 | (0, 21, slf_op_3) | (25, 21, slf_op_3) |
+ | MCSNOE1 | (0, 21, slf_op_5) | (25, 21, slf_op_5) |
+ | MCSNOE2 | (0, 22, slf_op_0) | (25, 22, slf_op_0) |
+ | MCSNOE3 | (0, 22, slf_op_2) | (25, 22, slf_op_2) |
+ | MI | (0, 22, lutff_0/in_1) | (25, 22, lutff_0/in_1) |
+ | MO | (0, 20, slf_op_6) | (25, 20, slf_op_6) |
+ | MOE | (0, 20, slf_op_7) | (25, 20, slf_op_7) |
+ | SCKI | (0, 22, lutff_1/in_1) | (25, 22, lutff_1/in_1) |
+ | SCKO | (0, 21, slf_op_0) | (25, 21, slf_op_0) |
+ | SCKOE | (0, 21, slf_op_1) | (25, 21, slf_op_1) |
+ | SCSNI | (0, 22, lutff_2/in_1) | (25, 22, lutff_2/in_1) |
+ | SI | (0, 22, lutff_7/in_3) | (25, 22, lutff_7/in_3) |
+ | SO | (0, 20, slf_op_4) | (25, 20, slf_op_4) |
+ | SOE | (0, 20, slf_op_5) | (25, 20, slf_op_5) |
+ | SPIIRQ | (0, 20, slf_op_2) | (25, 20, slf_op_2) |
+ | SPIWKUP | (0, 20, slf_op_3) | (25, 20, slf_op_3) |
+
+ |
+
+ | Signal | LEDDA_IP (0, 31, 2) |
+ | LEDDADDR0 | (0, 28, lutff_4/in_0) |
+ | LEDDADDR1 | (0, 28, lutff_5/in_0) |
+ | LEDDADDR2 | (0, 28, lutff_6/in_0) |
+ | LEDDADDR3 | (0, 28, lutff_7/in_0) |
+ | LEDDCLK | (0, 29, clk) |
+ | LEDDCS | (0, 28, lutff_2/in_0) |
+ | LEDDDAT0 | (0, 28, lutff_2/in_1) |
+ | LEDDDAT1 | (0, 28, lutff_3/in_1) |
+ | LEDDDAT2 | (0, 28, lutff_4/in_1) |
+ | LEDDDAT3 | (0, 28, lutff_5/in_1) |
+ | LEDDDAT4 | (0, 28, lutff_6/in_1) |
+ | LEDDDAT5 | (0, 28, lutff_7/in_1) |
+ | LEDDDAT6 | (0, 28, lutff_0/in_0) |
+ | LEDDDAT7 | (0, 28, lutff_1/in_0) |
+ | LEDDDEN | (0, 28, lutff_1/in_1) |
+ | LEDDEXE | (0, 28, lutff_0/in_1) |
+ | LEDDON | (0, 29, slf_op_0) |
+ | PWMOUT0 | (0, 28, slf_op_4) |
+ | PWMOUT1 | (0, 28, slf_op_5) |
+ | PWMOUT2 | (0, 28, slf_op_6) |
+
+ |
+
+
+The I2C "glitch filter" is a seperate module from the I2C interface IP and needs to be reverse engineered seperately.
+
diff --git a/icefuzz/tests/ip/make_html_table.py b/icefuzz/tests/ip/make_html_table.py
new file mode 100755
index 0000000..3d8cb70
--- /dev/null
+++ b/icefuzz/tests/ip/make_html_table.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+import ast, sys
+
+data = ""
+with open(sys.argv[1], 'r') as f:
+ data = f.read()
+
+ip_dat = ast.literal_eval("{\n" + data + "}")
+
+def is_cbit(ident):
+ if "_ENABLE" in ident or "DELAYED" in ident:
+ return True
+ else:
+ return False
+
+def is_bus(ident):
+ return ident.startswith("SB")
+
+ips = sorted(ip_dat)
+print ("
\n| Signal | ", end='')
+for ip in ips:
+ t, loc = ip
+ x, y, z = loc
+ print("%s (%d, %d, %d) | " % (t, x, y, z), end='')
+print ("
")
+
+# TODO: could group busses?
+for print_t in ["SB", "G", "CBIT"]:
+ for n in sorted(ip_dat[ips[0]]):
+ if is_bus(n) != (print_t == "SB"):
+ continue
+ if is_cbit(n) != (print_t == "CBIT"):
+ continue
+ print("", end='')
+ em_o = ""
+ em_c = ""
+ if is_cbit(n):
+ em_o = ""
+ em_c = ""
+ print("| %s%s%s | " % (em_o, n, em_c), end='')
+ for ip in ips:
+ entry = ip_dat[ip][n]
+ x, y, name = entry
+ print("%s(%d, %d, %s)%s | " % (em_o, x, y, name, em_c), end='')
+ print("
")
+print ("
")
\ No newline at end of file
--
cgit v1.2.3
From f1025dbd887f5e8068833393cea8d8c036936396 Mon Sep 17 00:00:00 2001
From: David Shah
Date: Tue, 28 Nov 2017 11:00:51 +0000
Subject: Add uncommitted changes and tidy up some files
---
icefuzz/tests/ip/.gitignore | 3 +-
icefuzz/tests/ip/make_html_table.py | 2 +-
icefuzz/tmedges.txt | 250 ++++++++++++++++++++++++++++++++++++
3 files changed, 253 insertions(+), 2 deletions(-)
(limited to 'icefuzz/tests')
diff --git a/icefuzz/tests/ip/.gitignore b/icefuzz/tests/ip/.gitignore
index c1313c3..bd3c0cf 100644
--- a/icefuzz/tests/ip/.gitignore
+++ b/icefuzz/tests/ip/.gitignore
@@ -1 +1,2 @@
-work_ip/
\ No newline at end of file
+work_ip/
+*.html
diff --git a/icefuzz/tests/ip/make_html_table.py b/icefuzz/tests/ip/make_html_table.py
index 3d8cb70..0bea73d 100755
--- a/icefuzz/tests/ip/make_html_table.py
+++ b/icefuzz/tests/ip/make_html_table.py
@@ -43,4 +43,4 @@ for print_t in ["SB", "G", "CBIT"]:
x, y, name = entry
print("%s(%d, %d, %s)%s | " % (em_o, x, y, name, em_c), end='')
print("")
-print ("")
\ No newline at end of file
+print ("")
diff --git a/icefuzz/tmedges.txt b/icefuzz/tmedges.txt
index a844df4..1949507 100644
--- a/icefuzz/tmedges.txt
+++ b/icefuzz/tmedges.txt
@@ -1,5 +1,6 @@
CEMux.O LogicCell40.ce
CEMux.O PRE_IO.CLOCKENABLE
+CEMux.O SB_MAC16.CE
CEMux.O SB_RAM40_4K.RCLKE
CEMux.O SB_RAM40_4K.WCLKE
CascadeBuf.O CascadeMux.I
@@ -27,12 +28,32 @@ CascadeMux.O SB_RAM40_4K.WADDR[6]
CascadeMux.O SB_RAM40_4K.WADDR[7]
CascadeMux.O SB_RAM40_4K.WADDR[8]
CascadeMux.O SB_RAM40_4K.WADDR[9]
+ClkMux.O DummyBuf.I
ClkMux.O INV.I
ClkMux.O LogicCell40.clk
ClkMux.O PRE_IO.INPUTCLK
ClkMux.O PRE_IO.OUTPUTCLK
+ClkMux.O SB_MAC16.CLK
ClkMux.O SB_RAM40_4K.RCLK
ClkMux.O SB_RAM40_4K.WCLK
+ClkMux.O SB_SPRAM256KA.CLOCK
+DummyBuf.O Odrv4.I
+DummyBuf.O SB_LEDDA_IP.LEDDADDR0
+DummyBuf.O SB_LEDDA_IP.LEDDADDR1
+DummyBuf.O SB_LEDDA_IP.LEDDADDR2
+DummyBuf.O SB_LEDDA_IP.LEDDADDR3
+DummyBuf.O SB_LEDDA_IP.LEDDCLK
+DummyBuf.O SB_LEDDA_IP.LEDDCS
+DummyBuf.O SB_LEDDA_IP.LEDDDAT0
+DummyBuf.O SB_LEDDA_IP.LEDDDAT1
+DummyBuf.O SB_LEDDA_IP.LEDDDAT2
+DummyBuf.O SB_LEDDA_IP.LEDDDAT3
+DummyBuf.O SB_LEDDA_IP.LEDDDAT4
+DummyBuf.O SB_LEDDA_IP.LEDDDAT5
+DummyBuf.O SB_LEDDA_IP.LEDDDAT6
+DummyBuf.O SB_LEDDA_IP.LEDDDAT7
+DummyBuf.O SB_LEDDA_IP.LEDDDEN
+DummyBuf.O SB_LEDDA_IP.LEDDEXE
GND.Y LogicCell40.carryin
GND.Y LogicCell40.clk
GND.Y LogicCell40.in0
@@ -41,6 +62,7 @@ GND.Y LogicCell40.in2
GND.Y LogicCell40.in3
GND.Y LogicCell40.sr
GND.Y PRE_IO.DOUT0
+GND.Y SB_MAC16.CLK
GND.Y SB_RAM40_4K.WCLK
Glb2LocalMux.O LocalMux.I
GlobalMux.O CEMux.I
@@ -60,9 +82,89 @@ IO_PAD.DOUT PRE_IO.PADIN
IO_PAD.DOUT PRE_IO_GBUF.PADSIGNALTOGLOBALBUFFER
IO_PAD.PACKAGEPIN IO_PAD.PACKAGEPIN
InMux.O CascadeMux.I
+InMux.O DummyBuf.I
InMux.O LogicCell40.in0
InMux.O LogicCell40.in1
InMux.O LogicCell40.in3
+InMux.O SB_HFOSC.CLKHFEN
+InMux.O SB_HFOSC.CLKHFPU
+InMux.O SB_LFOSC.CLKLFEN
+InMux.O SB_LFOSC.CLKLFPU
+InMux.O SB_MAC16.ADDSUBBOT
+InMux.O SB_MAC16.ADDSUBTOP
+InMux.O SB_MAC16.AHOLD
+InMux.O SB_MAC16.A[0]
+InMux.O SB_MAC16.A[10]
+InMux.O SB_MAC16.A[11]
+InMux.O SB_MAC16.A[12]
+InMux.O SB_MAC16.A[13]
+InMux.O SB_MAC16.A[14]
+InMux.O SB_MAC16.A[15]
+InMux.O SB_MAC16.A[1]
+InMux.O SB_MAC16.A[2]
+InMux.O SB_MAC16.A[3]
+InMux.O SB_MAC16.A[4]
+InMux.O SB_MAC16.A[5]
+InMux.O SB_MAC16.A[6]
+InMux.O SB_MAC16.A[7]
+InMux.O SB_MAC16.A[8]
+InMux.O SB_MAC16.A[9]
+InMux.O SB_MAC16.BHOLD
+InMux.O SB_MAC16.B[0]
+InMux.O SB_MAC16.B[10]
+InMux.O SB_MAC16.B[11]
+InMux.O SB_MAC16.B[12]
+InMux.O SB_MAC16.B[13]
+InMux.O SB_MAC16.B[14]
+InMux.O SB_MAC16.B[15]
+InMux.O SB_MAC16.B[1]
+InMux.O SB_MAC16.B[2]
+InMux.O SB_MAC16.B[3]
+InMux.O SB_MAC16.B[4]
+InMux.O SB_MAC16.B[5]
+InMux.O SB_MAC16.B[6]
+InMux.O SB_MAC16.B[7]
+InMux.O SB_MAC16.B[8]
+InMux.O SB_MAC16.B[9]
+InMux.O SB_MAC16.CHOLD
+InMux.O SB_MAC16.CI
+InMux.O SB_MAC16.C[0]
+InMux.O SB_MAC16.C[10]
+InMux.O SB_MAC16.C[11]
+InMux.O SB_MAC16.C[12]
+InMux.O SB_MAC16.C[13]
+InMux.O SB_MAC16.C[14]
+InMux.O SB_MAC16.C[15]
+InMux.O SB_MAC16.C[1]
+InMux.O SB_MAC16.C[2]
+InMux.O SB_MAC16.C[3]
+InMux.O SB_MAC16.C[4]
+InMux.O SB_MAC16.C[5]
+InMux.O SB_MAC16.C[6]
+InMux.O SB_MAC16.C[7]
+InMux.O SB_MAC16.C[8]
+InMux.O SB_MAC16.C[9]
+InMux.O SB_MAC16.DHOLD
+InMux.O SB_MAC16.D[0]
+InMux.O SB_MAC16.D[10]
+InMux.O SB_MAC16.D[11]
+InMux.O SB_MAC16.D[12]
+InMux.O SB_MAC16.D[13]
+InMux.O SB_MAC16.D[14]
+InMux.O SB_MAC16.D[15]
+InMux.O SB_MAC16.D[1]
+InMux.O SB_MAC16.D[2]
+InMux.O SB_MAC16.D[3]
+InMux.O SB_MAC16.D[4]
+InMux.O SB_MAC16.D[5]
+InMux.O SB_MAC16.D[6]
+InMux.O SB_MAC16.D[7]
+InMux.O SB_MAC16.D[8]
+InMux.O SB_MAC16.D[9]
+InMux.O SB_MAC16.OHOLDBOT
+InMux.O SB_MAC16.OHOLDTOP
+InMux.O SB_MAC16.OLOADBOT
+InMux.O SB_MAC16.OLOADTOP
InMux.O SB_RAM40_4K.MASK[0]
InMux.O SB_RAM40_4K.MASK[10]
InMux.O SB_RAM40_4K.MASK[11]
@@ -95,6 +197,50 @@ InMux.O SB_RAM40_4K.WDATA[6]
InMux.O SB_RAM40_4K.WDATA[7]
InMux.O SB_RAM40_4K.WDATA[8]
InMux.O SB_RAM40_4K.WDATA[9]
+InMux.O SB_RGBA_DRV.CURREN
+InMux.O SB_RGBA_DRV.RGB0PWM
+InMux.O SB_RGBA_DRV.RGB1PWM
+InMux.O SB_RGBA_DRV.RGB2PWM
+InMux.O SB_RGBA_DRV.RGBLEDEN
+InMux.O SB_SPRAM256KA.ADDRESS[0]
+InMux.O SB_SPRAM256KA.ADDRESS[10]
+InMux.O SB_SPRAM256KA.ADDRESS[11]
+InMux.O SB_SPRAM256KA.ADDRESS[12]
+InMux.O SB_SPRAM256KA.ADDRESS[13]
+InMux.O SB_SPRAM256KA.ADDRESS[1]
+InMux.O SB_SPRAM256KA.ADDRESS[2]
+InMux.O SB_SPRAM256KA.ADDRESS[3]
+InMux.O SB_SPRAM256KA.ADDRESS[4]
+InMux.O SB_SPRAM256KA.ADDRESS[5]
+InMux.O SB_SPRAM256KA.ADDRESS[6]
+InMux.O SB_SPRAM256KA.ADDRESS[7]
+InMux.O SB_SPRAM256KA.ADDRESS[8]
+InMux.O SB_SPRAM256KA.ADDRESS[9]
+InMux.O SB_SPRAM256KA.CHIPSELECT
+InMux.O SB_SPRAM256KA.DATAIN[0]
+InMux.O SB_SPRAM256KA.DATAIN[10]
+InMux.O SB_SPRAM256KA.DATAIN[11]
+InMux.O SB_SPRAM256KA.DATAIN[12]
+InMux.O SB_SPRAM256KA.DATAIN[13]
+InMux.O SB_SPRAM256KA.DATAIN[14]
+InMux.O SB_SPRAM256KA.DATAIN[15]
+InMux.O SB_SPRAM256KA.DATAIN[1]
+InMux.O SB_SPRAM256KA.DATAIN[2]
+InMux.O SB_SPRAM256KA.DATAIN[3]
+InMux.O SB_SPRAM256KA.DATAIN[4]
+InMux.O SB_SPRAM256KA.DATAIN[5]
+InMux.O SB_SPRAM256KA.DATAIN[6]
+InMux.O SB_SPRAM256KA.DATAIN[7]
+InMux.O SB_SPRAM256KA.DATAIN[8]
+InMux.O SB_SPRAM256KA.DATAIN[9]
+InMux.O SB_SPRAM256KA.MASKWREN[0]
+InMux.O SB_SPRAM256KA.MASKWREN[1]
+InMux.O SB_SPRAM256KA.MASKWREN[2]
+InMux.O SB_SPRAM256KA.MASKWREN[3]
+InMux.O SB_SPRAM256KA.POWEROFF
+InMux.O SB_SPRAM256KA.SLEEP
+InMux.O SB_SPRAM256KA.STANDBY
+InMux.O SB_SPRAM256KA.WREN
IoInMux.O ICE_GB.USERSIGNALTOGLOBALBUFFER
IoInMux.O PLL40.BYPASS
IoInMux.O PLL40.DYNAMICDELAY[0]
@@ -271,6 +417,105 @@ PRE_IO.DIN1 Odrv4.I
PRE_IO.PADOEN IO_PAD.OE
PRE_IO.PADOUT IO_PAD.DIN
PRE_IO_GBUF.GLOBALBUFFEROUTPUT gio2CtrlBuf.I
+SB_HFOSC.CLKHF GlobalMux.I
+SB_HFOSC.CLKHF Odrv12.I
+SB_HFOSC.CLKHF Odrv4.I
+SB_LEDDA_IP.PWMOUT0 DummyBuf.I
+SB_LEDDA_IP.PWMOUT1 DummyBuf.I
+SB_LEDDA_IP.PWMOUT2 DummyBuf.I
+SB_LFOSC.CLKLF GlobalMux.I
+SB_LFOSC.CLKLF Odrv12.I
+SB_MAC16.ACCUMCO SB_MAC16.ACCUMCI
+SB_MAC16.CO Odrv12.I
+SB_MAC16.CO Odrv4.I
+SB_MAC16.O[0] LocalMux.I
+SB_MAC16.O[0] Odrv12.I
+SB_MAC16.O[0] Odrv4.I
+SB_MAC16.O[10] LocalMux.I
+SB_MAC16.O[10] Odrv12.I
+SB_MAC16.O[10] Odrv4.I
+SB_MAC16.O[11] LocalMux.I
+SB_MAC16.O[11] Odrv12.I
+SB_MAC16.O[11] Odrv4.I
+SB_MAC16.O[12] LocalMux.I
+SB_MAC16.O[12] Odrv12.I
+SB_MAC16.O[12] Odrv4.I
+SB_MAC16.O[13] LocalMux.I
+SB_MAC16.O[13] Odrv12.I
+SB_MAC16.O[13] Odrv4.I
+SB_MAC16.O[14] LocalMux.I
+SB_MAC16.O[14] Odrv12.I
+SB_MAC16.O[14] Odrv4.I
+SB_MAC16.O[15] LocalMux.I
+SB_MAC16.O[15] Odrv12.I
+SB_MAC16.O[15] Odrv4.I
+SB_MAC16.O[16] LocalMux.I
+SB_MAC16.O[16] Odrv12.I
+SB_MAC16.O[16] Odrv4.I
+SB_MAC16.O[17] LocalMux.I
+SB_MAC16.O[17] Odrv12.I
+SB_MAC16.O[17] Odrv4.I
+SB_MAC16.O[18] Odrv12.I
+SB_MAC16.O[18] Odrv4.I
+SB_MAC16.O[19] Odrv12.I
+SB_MAC16.O[19] Odrv4.I
+SB_MAC16.O[1] LocalMux.I
+SB_MAC16.O[1] Odrv12.I
+SB_MAC16.O[1] Odrv4.I
+SB_MAC16.O[20] Odrv12.I
+SB_MAC16.O[20] Odrv4.I
+SB_MAC16.O[21] LocalMux.I
+SB_MAC16.O[21] Odrv12.I
+SB_MAC16.O[21] Odrv4.I
+SB_MAC16.O[22] Odrv12.I
+SB_MAC16.O[22] Odrv4.I
+SB_MAC16.O[23] LocalMux.I
+SB_MAC16.O[23] Odrv12.I
+SB_MAC16.O[23] Odrv4.I
+SB_MAC16.O[24] LocalMux.I
+SB_MAC16.O[24] Odrv12.I
+SB_MAC16.O[24] Odrv4.I
+SB_MAC16.O[25] LocalMux.I
+SB_MAC16.O[25] Odrv12.I
+SB_MAC16.O[25] Odrv4.I
+SB_MAC16.O[26] Odrv12.I
+SB_MAC16.O[26] Odrv4.I
+SB_MAC16.O[27] Odrv12.I
+SB_MAC16.O[27] Odrv4.I
+SB_MAC16.O[28] Odrv12.I
+SB_MAC16.O[28] Odrv4.I
+SB_MAC16.O[29] Odrv12.I
+SB_MAC16.O[29] Odrv4.I
+SB_MAC16.O[2] LocalMux.I
+SB_MAC16.O[2] Odrv12.I
+SB_MAC16.O[2] Odrv4.I
+SB_MAC16.O[30] Odrv12.I
+SB_MAC16.O[30] Odrv4.I
+SB_MAC16.O[31] LocalMux.I
+SB_MAC16.O[31] Odrv12.I
+SB_MAC16.O[31] Odrv4.I
+SB_MAC16.O[3] LocalMux.I
+SB_MAC16.O[3] Odrv12.I
+SB_MAC16.O[3] Odrv4.I
+SB_MAC16.O[4] LocalMux.I
+SB_MAC16.O[4] Odrv12.I
+SB_MAC16.O[4] Odrv4.I
+SB_MAC16.O[5] LocalMux.I
+SB_MAC16.O[5] Odrv12.I
+SB_MAC16.O[5] Odrv4.I
+SB_MAC16.O[6] LocalMux.I
+SB_MAC16.O[6] Odrv12.I
+SB_MAC16.O[6] Odrv4.I
+SB_MAC16.O[7] LocalMux.I
+SB_MAC16.O[7] Odrv12.I
+SB_MAC16.O[7] Odrv4.I
+SB_MAC16.O[8] LocalMux.I
+SB_MAC16.O[8] Odrv12.I
+SB_MAC16.O[8] Odrv4.I
+SB_MAC16.O[9] LocalMux.I
+SB_MAC16.O[9] Odrv12.I
+SB_MAC16.O[9] Odrv4.I
+SB_MAC16.SIGNEXTOUT SB_MAC16.SIGNEXTIN
SB_PLL40_2F_CORE.LOCK LocalMux.I
SB_PLL40_2F_CORE.PLLOUTCOREA LocalMux.I
SB_PLL40_2F_CORE.PLLOUTCOREA Odrv12.I
@@ -336,6 +581,10 @@ SB_RAM40_4K.RDATA[9] LocalMux.I
SB_RAM40_4K.RDATA[9] Odrv12.I
SB_RAM40_4K.RDATA[9] Odrv4.I
SRMux.O LogicCell40.sr
+SRMux.O SB_MAC16.IRSTBOT
+SRMux.O SB_MAC16.IRSTTOP
+SRMux.O SB_MAC16.ORSTBOT
+SRMux.O SB_MAC16.ORSTTOP
SRMux.O SB_RAM40_4K.RE
SRMux.O SB_RAM40_4K.WE
Sp12to4.O IoSpan4Mux.I
@@ -610,6 +859,7 @@ Span12Mux_s9_v.O Span12Mux_s11_h.I
Span12Mux_s9_v.O Span12Mux_s5_h.I
Span12Mux_s9_v.O Span12Mux_s6_v.I
Span12Mux_s9_v.O Span12Mux_s7_h.I
+Span12Mux_s9_v.O Span12Mux_s9_h.I
Span12Mux_s9_v.O Span12Mux_v.I
Span12Mux_v.O LocalMux.I
Span12Mux_v.O Sp12to4.I
--
cgit v1.2.3
From 411bcc53ffc095379f20494cce2da9424e4c5465 Mon Sep 17 00:00:00 2001
From: David Shah
Date: Tue, 28 Nov 2017 11:03:47 +0000
Subject: Whitespace fixes
---
icefuzz/tests/sb_i2c.pcf | 1 +
icefuzz/tests/sb_i2c.v | 40 +++++++++++++++++++++++++++++++++-------
icefuzz/tests/sb_i2c_io.v | 4 ++--
3 files changed, 36 insertions(+), 9 deletions(-)
(limited to 'icefuzz/tests')
diff --git a/icefuzz/tests/sb_i2c.pcf b/icefuzz/tests/sb_i2c.pcf
index 32aad48..def0303 100644
--- a/icefuzz/tests/sb_i2c.pcf
+++ b/icefuzz/tests/sb_i2c.pcf
@@ -19,3 +19,4 @@ set_io sclo 23
set_io scloe 25
set_io sdao 26
set_io sdaoe 27
+set_io scli2 28
diff --git a/icefuzz/tests/sb_i2c.v b/icefuzz/tests/sb_i2c.v
index cd5e46a..987f476 100644
--- a/icefuzz/tests/sb_i2c.v
+++ b/icefuzz/tests/sb_i2c.v
@@ -4,13 +4,13 @@ module top (
input sbdati0, sbdati1, sbdati7,
output sbdato0, sbdato1, sbdato7,
output sbacko, i2cirq, i2cwkup,
- input scli, sdai,
+ input scli, sdai, scli2,
output sclo, scloe, sdao, sdaoe
);
SB_I2C #(
- .I2C_SLAVE_INIT_ADDR("0b1111100010"),
- .BUS_ADDR74("0b0011")
+ .I2C_SLAVE_INIT_ADDR("0b1111100001"),
+ .BUS_ADDR74("0b0001")
) i2c_ip (
.SBCLKI(sbclki),
.SBRWI(sbrwi),
@@ -26,7 +26,6 @@ SB_I2C #(
.SBDATO0(sbdato0),
.SBDATO1(sbdato1),
- .SBDATO7(sbdato7),
.SBACKO(sbacko),
.I2CIRQ(i2cirq),
@@ -40,9 +39,36 @@ SB_I2C #(
.SDAO(sdao),
.SDAOE(sdaoe)
)
-/* synthesis SDA_INPUT_DELAYED=1 */
-/* synthesis SDA_OUTPUT_DELAYED=1 */
+/* synthesis SDA_INPUT_DELAYED=0 */
+/* synthesis SDA_OUTPUT_DELAYED=0 */
/* synthesis SCL_INPUT_FILTERED=1 */
;
-endmodule
\ No newline at end of file
+
+
+SB_I2C #(
+ .I2C_SLAVE_INIT_ADDR("0b1111100010"),
+ .BUS_ADDR74("0b0011")
+) i2c_ip2 (
+ .SBCLKI(sbclki),
+ .SBRWI(sbrwi),
+ .SBSTBI(sbstbi),
+
+ .SBADRI0(sbadri0),
+ .SBADRI1(sbadri1),
+ .SBADRI7(sbadri7),
+
+ .SBDATI0(sbdati0),
+ .SBDATI1(sbdati1),
+ .SBDATI7(sbdati7),
+
+ .SBDATO7(sbdato7),
+
+ .SCLI(scli2)
+
+)
+/* synthesis SDA_INPUT_DELAYED=0 */
+/* synthesis SDA_OUTPUT_DELAYED=0 */
+/* synthesis SCL_INPUT_FILTERED=1 */
+;
+endmodule
diff --git a/icefuzz/tests/sb_i2c_io.v b/icefuzz/tests/sb_i2c_io.v
index f339df9..9611129 100644
--- a/icefuzz/tests/sb_i2c_io.v
+++ b/icefuzz/tests/sb_i2c_io.v
@@ -40,7 +40,7 @@ SB_I2C #(
.SDAI(sdai),
.SDAO(sdao),
.SDAOE(sdaoe)
-);
+) /* synthesis SCL_INPUT_FILTERED=1 */;
SB_IO #(
.PIN_TYPE(6'b101001),
@@ -63,4 +63,4 @@ SB_IO #(
.D_IN_0(sdai)
);
-endmodule
\ No newline at end of file
+endmodule
--
cgit v1.2.3