Merge pull request #1004 from litghost/ioi3_oclkm

Solve OCLKM pips in IOI3
This commit is contained in:
Karol Gugala 2019-08-01 11:12:15 +02:00 committed by GitHub
commit c0bb3f5c0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 13 deletions

View File

@ -2,15 +2,15 @@ export FUZDIR=$(shell pwd)
PIP_TYPE?=ioi3
PIPLIST_TCL=$(FUZDIR)/ioi3_pip_list.tcl
TODO_RE="[LR]IOI3\.(IOI_([IO]LOGIC[01]_CLK(DIV|B)?)|(IOI_OCLK_[01]))\..*"
EXCLUDE_RE=".*\..*\.(?=IOI_((PHASER)|(OCLK)|(IMUX22_1))).*"
TODO_RE=".*"
EXCLUDE_RE=".*((PHASER)|(CLKDIVF)|(CLKDIVP)|(CLKDIVB)|(IOI_ILOGIC[01]_O)|(IOI_OLOGIC[01]_CLKB?\.)|(IOI_IMUX_RC)|(IOI_OLOGIC[01]_[OT]FB)).*"
MAKETODO_FLAGS=--pip-type ${PIP_TYPE} --seg-type $(PIP_TYPE) --re $(TODO_RE) --sides "xr,xl" --exclude-re $(EXCLUDE_RE)
N = 40
A_PIPLIST=lioi3.txt
SEGMATCH_FLAGS=-c -1 -m 20 -M 50
SEGMATCH_FLAGS=-c 6 -m 20 -M 50
SPECIMENS_DEPS=build/cmt_regions.csv
include ../pip_loop.mk

View File

@ -69,10 +69,6 @@ def main():
tiledata[tile]["srcs"].add(dst)
tiledata[tile]["dsts"].add(src)
if pnum == 1 or pdir == 0:
print("Ignoring pip: {}".format(pip), file=log)
ignpip.add((src, dst))
for tile, pips_srcs_dsts in tiledata.items():
tile_type = pips_srcs_dsts["type"]
@ -81,8 +77,6 @@ def main():
elif tile_type.startswith('RIOI3'):
tile_type = 'RIOI3'
pips = pips_srcs_dsts["pips"]
for src, dst in pipdata[tile_type]:
if (src, dst) in ignpip:
pass
@ -92,9 +86,18 @@ def main():
elif (src, dst) in tiledata[tile]["pips"]:
segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 1)
elif dst not in tiledata[tile]["dsts"]:
segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0)
disable_pip = True
internal_feedback = False
if dst == 'IOI_OCLKM_0' and 'IOI_OCLK_0' in tiledata[tile][
"dsts"]:
disable_pip = False
if dst == 'IOI_OCLKM_1' and 'IOI_OCLK_1' in tiledata[tile][
"dsts"]:
disable_pip = False
if disable_pip:
segmk.add_tile_tag(tile, "%s.%s" % (dst, src), 0)
segmk.compile(bitfilter=bitfilter)
segmk.write()

View File

@ -2,7 +2,6 @@ proc print_tile_pips {tile_type filename} {
set fp [open $filename w]
set pips [dict create]
foreach tile [get_tiles -filter "TYPE == $tile_type"] {
puts "Dumping PIPs for tile $tile ($tile_type) to $filename."
foreach pip [lsort [get_pips -of_objects $tile]] {
set src [get_wires -uphill -of_objects $pip]
set dst [get_wires -downhill -of_objects $pip]
@ -19,7 +18,10 @@ proc print_tile_pips {tile_type filename} {
continue
}
if {[llength [get_nodes -uphill -of_objects [get_nodes -of_objects $dst]]] != 1} {
set src_wire [regsub {.*/} $src ""]
set src_match [regexp {IOI_OCLKM?_[01]} $src_wire]
if { [llength [get_nodes -uphill -of_objects [get_nodes -of_objects $dst]]] != 1 || $src_match } {
set pip_string "$tile_type.[regsub {.*/} $dst ""].[regsub {.*/} $src ""]"
if ![dict exists $pips $pip_string] {
puts $fp $pip_string

View File

@ -259,6 +259,8 @@ def run():
.INTERFACE_TYPE({INTERFACE_TYPE}),
.IS_CLK_INVERTED({IS_CLK_INVERTED}),
.IS_CLKB_INVERTED({IS_CLKB_INVERTED}),
.IS_OCLK_INVERTED({IS_OCLK_INVERTED}),
.IS_OCLKB_INVERTED({IS_OCLKB_INVERTED}),
.INIT_Q1({INIT_Q1}),
.INIT_Q2({INIT_Q2}),
.INIT_Q3({INIT_Q3}),
@ -275,6 +277,8 @@ def run():
INTERFACE_TYPE=verilog.quote(INTERFACE_TYPE),
IS_CLK_INVERTED=random.randint(0, 1),
IS_CLKB_INVERTED=random.randint(0, 1),
IS_OCLK_INVERTED=random.randint(0, 1),
IS_OCLKB_INVERTED=random.randint(0, 1),
INIT_Q1=random.randint(0, 1),
INIT_Q2=random.randint(0, 1),
INIT_Q3=random.randint(0, 1),
@ -324,10 +328,12 @@ def run():
"""
(* KEEP, DONT_TOUCH, LOC = "{site}" *)
OSERDESE2 #(
.IS_CLK_INVERTED({IS_CLK_INVERTED}),
.DATA_RATE_OQ("SDR"),
.DATA_RATE_TQ("SDR")
) oserdes_{site} (
{ports});""".format(
IS_CLK_INVERTED=random.randint(0, 1),
site=ologic_site,
ports=',\n'.join(ports),
))