From a02f5aa9083974f87f55b2f43dcd8b7a03ecc2e0 Mon Sep 17 00:00:00 2001 From: Nick Downing Date: Sat, 19 Jul 2025 16:40:38 +1000 Subject: [PATCH] In /8085 adopt new nomenclature "nodes" instead of "nets", because channels and blocks are not technically nets, rename data files and scripts as follows: /8085/net_names.txt -> /8085/node_names.txt /8085/sizes.txt -> /8085/node_sizes.txt (generated file) /scripts/net_channels.py -> /scripts/channels.py /scripts/net_image.py -> /scripts/node_image.py /scripts/net_sizes.py -> /scripts/node_sizes.py /scripts/image_nets.py -> /scripts/nodes.py Note: Breaks the other directories, will port over latest scripts to them later --- .gitignore | 14 ++--- 8085/Makefile | 52 +++++++-------- 8085/{net_names.txt => node_names.txt} | 0 scripts/{net_channels.py => channels.py} | 56 ++++++++--------- scripts/{net_image.py => node_image.py} | 28 ++++----- scripts/{net_sizes.py => node_sizes.py} | 18 +++--- scripts/{image_nets.py => nodes.py} | 80 ++++++++++++------------ 7 files changed, 124 insertions(+), 124 deletions(-) rename 8085/{net_names.txt => node_names.txt} (100%) rename scripts/{net_channels.py => channels.py} (81%) rename scripts/{net_image.py => node_image.py} (80%) rename scripts/{net_sizes.py => node_sizes.py} (60%) rename scripts/{image_nets.py => nodes.py} (81%) diff --git a/.gitignore b/.gitignore index 8d92249..23e43a5 100644 --- a/.gitignore +++ b/.gitignore @@ -11,21 +11,21 @@ /8080/nets.txt /8080/sizes.txt /8085/buried.png +/8085/channels.txt /8085/diff.png /8085/layers.png /8085/layers_rev.png /8085/metal.png -/8085/net_gnd.png -/8085/net_phi0.png -/8085/net_phi1.png -/8085/net_vcc.png +/8085/node_gnd.png +/8085/node_phi0.png +/8085/node_phi1.png +/8085/node_sizes.txt +/8085/node_vcc.png +/8085/nodes.txt /8085/pads.png /8085/poly.png /8085/split_diff.png /8085/vias.png -/8085/channels.txt -/8085/nets.txt -/8085/sizes.txt /z80/*.png /z80/channels.txt /z80/nets.txt diff --git a/8085/Makefile b/8085/Makefile index 6a02df0..fb6dc00 100644 --- a/8085/Makefile +++ b/8085/Makefile @@ -11,11 +11,11 @@ COLOURS=0,0,5,1,2,4,6,3,7 all: \ channels.txt \ -sizes.txt \ -net_gnd.png \ -net_vcc.png \ -net_phi0.png \ -net_phi1.png \ +node_sizes.txt \ +node_gnd.png \ +node_vcc.png \ +node_phi0.png \ +node_phi1.png \ layers.png \ layers_rev.png #buried2.png \ @@ -25,25 +25,25 @@ layers_rev.png #poly2.png \ #vias2.png -channels.txt: nets.txt - ../scripts/net_channels.py nets.txt 4,5,6,7 >$@ +channels.txt: nodes.txt + ../scripts/channels.py nodes.txt 4,5,6,7 >$@ -sizes.txt: nets.txt - ../scripts/net_sizes.py nets.txt >$@ +node_sizes.txt: nodes.txt + ../scripts/node_sizes.py nodes.txt >$@ -net_gnd.png: nets.txt - ../scripts/net_image.py --adjacency nets.txt 1_2507_0147 $@ ${COLOURS} +node_gnd.png: nodes.txt + ../scripts/node_image.py --adjacency nodes.txt 1_2507_0147 $@ ${COLOURS} -net_vcc.png: nets.txt - ../scripts/net_image.py --adjacency nets.txt 1_3232_6986 $@ ${COLOURS} +node_vcc.png: nodes.txt + ../scripts/node_image.py --adjacency nodes.txt 1_3232_6986 $@ ${COLOURS} -net_phi0.png: nets.txt - ../scripts/net_image.py --adjacency nets.txt 3_0455_4632 $@ ${COLOURS} +node_phi0.png: nodes.txt + ../scripts/node_image.py --adjacency nodes.txt 3_0455_4632 $@ ${COLOURS} -net_phi1.png: nets.txt - ../scripts/net_image.py --adjacency nets.txt 3_0304_3500 $@ ${COLOURS} +node_phi1.png: nodes.txt + ../scripts/node_image.py --adjacency nodes.txt 3_0304_3500 $@ ${COLOURS} -nets.txt: \ +nodes.txt: \ pads.png \ blocks.png \ metal.png \ @@ -51,9 +51,9 @@ poly.png \ split_diff.png \ vias.png \ conn_matrix.txt - ../scripts/image_nets.py pads.png,blocks.png,metal.png,poly.png,split_diff.png,vias.png conn_matrix.txt $@ + ../scripts/nodes.py pads.png,blocks.png,metal.png,poly.png,split_diff.png,vias.png conn_matrix.txt $@ -# this one follows same layering as nets.txt and we can't see pads layer +# this one follows same layering as nodes.txt and we can't see pads layer layers.png: \ pads.png \ blocks.png \ @@ -137,14 +137,14 @@ diff.png \ layers.png \ layers_rev.png \ metal.png \ -net_gnd.png \ -net_phi0.png \ -net_phi1.png \ -net_vcc.png \ +node_gnd.png \ +node_phi0.png \ +node_phi1.png \ +node_vcc.png \ pads.png \ poly.png \ split_diff.png \ vias.png \ channels.txt \ -sizes.txt \ -nets.txt +node_sizes.txt \ +nodes.txt diff --git a/8085/net_names.txt b/8085/node_names.txt similarity index 100% rename from 8085/net_names.txt rename to 8085/node_names.txt diff --git a/scripts/net_channels.py b/scripts/channels.py similarity index 81% rename from scripts/net_channels.py rename to scripts/channels.py index 659c699..d293345 100755 --- a/scripts/net_channels.py +++ b/scripts/channels.py @@ -19,15 +19,15 @@ import sys if len(sys.argv) < 3: print( - f'usage: {sys.argv[0]:s} nets.txt poly_colour,diff_colour,buried_colour,channel_colour' + f'usage: {sys.argv[0]:s} nodes.txt poly_colour,diff_colour,buried_colour,channel_colour' ) sys.exit(1) -nets_txt = sys.argv[1] +nodes_txt = sys.argv[1] poly_colour, diff_colour, buried_colour, channel_colour = \ [int(i) for i in sys.argv[2].split(',')] diff_colours = {diff_colour, buried_colour} -with open(nets_txt) as fin: +with open(nodes_txt) as fin: line = fin.readline() assert len(line) _, ys, xs = [int(i) for i in line.split()] @@ -42,16 +42,16 @@ with open(nets_txt) as fin: line = fin.readline() assert len(line) fields = line.split() - net = fields[0] + node = fields[0] colour = int(fields[1]) y = int(fields[2]) x0 = int(fields[3]) x1 = int(fields[4]) if colour == channel_colour: - if net not in channel_items: - channel_items[net] = ([], []) # items, reports (report may be swapped) - channel_items[net][0].append(len(items)) - items.append((net, colour, y, x0, x1)) + if node not in channel_items: + channel_items[node] = ([], []) # items, reports (report may be swapped) + channel_items[node][0].append(len(items)) + items.append((node, colour, y, x0, x1)) line = fin.readline() assert len(line) @@ -61,12 +61,12 @@ with open(nets_txt) as fin: line = fin.readline() assert len(line) item0, item1 = [int(i) for i in line.split()] - net0 = items[item0][0] - net1 = items[item1][0] - if net0 in channel_items: - channel_items[net0][1].append((item0, item1)) - if net1 in channel_items: - channel_items[net1][1].append((item1, item0)) + node0 = items[item0][0] + node1 = items[item1][0] + if node0 in channel_items: + channel_items[node0][1].append((item0, item1)) + if node1 in channel_items: + channel_items[node1][1].append((item1, item0)) def resistor_solver(image): ys, xs = image.shape @@ -81,7 +81,7 @@ def resistor_solver(image): image_vert[:-1, :] = numpy.logical_and(image_nz[:-1, :], image_nz[1:, :]) # KCL is enforced as follows: - # A V = I where V = voltage at node, I = net current out of node + # A V = I where V = voltage at node, I = node current out of node # (when node is electrode, positive I means current is entering the array) # resistor R connected n1 -> n2: # causes a current of (V(n1) - V(n2)) / R, positive when V(n1) > V(n2) @@ -167,28 +167,28 @@ def resistor_solver(image): image = numpy.zeros((ys, xs), numpy.uint8) for ( - channel_net, + channel_node, (channel_items, channel_reports) ) in sorted(channel_items.items()): - #adjacent_nets = set([items[item1][0] for _, item1 in channel_reports]) + #adjacent_nodes = set([items[item1][0] for _, item1 in channel_reports]) #adjacent_colours = set([items[item1][1] for _, item1 in channel_reports]) - #print('channel_net', channel_net, 'adjacent_nets', adjacent_nets, 'adjacent_colours', adjacent_colours) + #print('channel_node', channel_node, 'adjacent_nodes', adjacent_nodes, 'adjacent_colours', adjacent_colours) - poly_nets = set( + poly_nodes = set( [ items[item1][0] for _, item1 in channel_reports if items[item1][1] == poly_colour ] ) - diff_nets = set( + diff_nodes = set( [ items[item1][0] for _, item1 in channel_reports if items[item1][1] in diff_colours ] ) - if len(poly_nets) == 1 and len(diff_nets) == 2: + if len(poly_nodes) == 1 and len(diff_nodes) == 2: # find channel resistance by creating image for resistor solver # conductor is filled in colour 3, then electrodes in colours 1 and 2 # bounding box is tracked in order to pass the smallest possible image @@ -208,10 +208,10 @@ for ( if y + 1 > max_y: max_y = y + 1 image[y, x0:x1] = 3 # white (conductor) - sink_net, source_net = tuple(diff_nets) - electrodes = {sink_net: 1, source_net: 2} + sink_node, source_node = tuple(diff_nodes) + electrodes = {sink_node: 1, source_node: 2} for item0, item1 in channel_reports: - net, colour, y1, x2, x3 = items[item1] + node, colour, y1, x2, x3 = items[item1] if colour in diff_colours: # trim neighbouring item to only include direct neighbouring pixels _, _, y0, x0, x1 = items[item0] @@ -228,17 +228,17 @@ for ( min_y = y1 if y1 + 1 > max_y: max_y = y1 + 1 - image[y1, x2:x3] = electrodes[net] + image[y1, x2:x3] = electrodes[node] # diagnostics (usually commented), need to make directory first #image_pil = PIL.Image.new('P', (max_x - min_x, max_y - min_y), None) #image_pil.frombytes(image[min_y:max_y, min_x:max_x].tobytes()) #image_pil.putpalette(list(PALETTE.reshape((12,)))) - #image_pil.save(f'channels/{channel_net:d}.png') + #image_pil.save(f'channels/{channel_node:d}.png') R = resistor_solver(image[min_y:max_y, min_x:max_x]) image[min_y:max_y, min_x:max_x] = 0 - print('channel_net', channel_net, 'poly_nets', poly_nets, 'diff_nets', diff_nets, 'R', R) + print('channel_node', channel_node, 'poly_nodes', poly_nodes, 'diff_nodes', diff_nodes, 'R', R) else: - print('channel_net', channel_net, 'poly_nets', poly_nets, 'diff_nets', diff_nets) + print('channel_node', channel_node, 'poly_nodes', poly_nodes, 'diff_nodes', diff_nodes) diff --git a/scripts/net_image.py b/scripts/node_image.py similarity index 80% rename from scripts/net_image.py rename to scripts/node_image.py index e450391..9f2aba1 100755 --- a/scripts/net_image.py +++ b/scripts/node_image.py @@ -26,11 +26,11 @@ if len(sys.argv) >= 2 and sys.argv[1] == '--adjacency': del sys.argv[1] if len(sys.argv) < 4: print( - f'usage: {sys.argv[0]:s} [--adjacency] nets.txt net image_out [colour,...]' + f'usage: {sys.argv[0]:s} [--adjacency] nodes.txt node image_out [colour,...]' ) sys.exit(1) -nets_txt = sys.argv[1] -net = sys.argv[2] +nodes_txt = sys.argv[1] +node = sys.argv[2] image_out = sys.argv[3] colours = ( numpy.array([int(i) for i in sys.argv[4].split(',')], numpy.uint8) @@ -38,7 +38,7 @@ if len(sys.argv) >= 5 else None ) -with open(nets_txt) as fin: +with open(nodes_txt) as fin: line = fin.readline() assert len(line) n_colours, ys, xs = [int(i) for i in line.split()] @@ -53,13 +53,13 @@ with open(nets_txt) as fin: line = fin.readline() assert len(line) fields = line.split() - net1 = fields[0] + node1 = fields[0] colour = int(fields[1]) y = int(fields[2]) x0 = int(fields[3]) x1 = int(fields[4]) - items.append((net1, colour, y, x0, x1)) - if net1 == net: + items.append((node1, colour, y, x0, x1)) + if node1 == node: image[y, x0:x1] = colour if adjacency: @@ -67,30 +67,30 @@ with open(nets_txt) as fin: assert len(line) n_reports = int(line.rstrip()) - adjacent_nets = set() + adjacent_nodes = set() adjacent_colours = set() for i in range(n_reports): line = fin.readline() assert len(line) item0, item1 = [int(i) for i in line.split()] - if items[item0][0] == net: - if items[item1][0] == net: + if items[item0][0] == node: + if items[item1][0] == node: continue - elif items[item1][0] == net: + elif items[item1][0] == node: item0, item1 = item1, item0 else: continue _, _, _, x0, x1 = items[item0] - net1, colour, y, x2, x3 = items[item1] - adjacent_nets.add(net1) + node1, colour, y, x2, x3 = items[item1] + adjacent_nodes.add(node1) adjacent_colours.add(colour) if x2 < x0 - 1: x2 = x0 - 1 if x3 > x1 + 1: x3 = x1 + 1 image[y, x2:x3] = colour - print('adjacent_nets', adjacent_nets) + print('adjacent_nodes', adjacent_nodes) print('adjacent_colours', adjacent_colours) if colours is not None: assert n_colours <= len(colours) diff --git a/scripts/net_sizes.py b/scripts/node_sizes.py similarity index 60% rename from scripts/net_sizes.py rename to scripts/node_sizes.py index b5af893..aac213b 100755 --- a/scripts/net_sizes.py +++ b/scripts/node_sizes.py @@ -5,13 +5,13 @@ import sys if len(sys.argv) < 2: print( - f'usage: {sys.argv[0]:s} nets.txt' + f'usage: {sys.argv[0]:s} nodes.txt' ) sys.exit(1) -nets_txt = sys.argv[1] +nodes_txt = sys.argv[1] -net_sizes = {} -with open(nets_txt) as fin: +node_sizes = {} +with open(nodes_txt) as fin: line = fin.readline() assert len(line) @@ -23,13 +23,13 @@ with open(nets_txt) as fin: line = fin.readline() assert len(line) fields = line.split() - net = fields[0] + node = fields[0] colour = int(fields[1]) y = int(fields[2]) x0 = int(fields[3]) x1 = int(fields[4]) - if net not in net_sizes: - net_sizes[net] = 0 - net_sizes[net] += x1 - x0 -for v, k in sorted([(-v, k) for k, v in net_sizes.items()]): + if node not in node_sizes: + node_sizes[node] = 0 + node_sizes[node] += x1 - x0 +for v, k in sorted([(-v, k) for k, v in node_sizes.items()]): print(k, -v) diff --git a/scripts/image_nets.py b/scripts/nodes.py similarity index 81% rename from scripts/image_nets.py rename to scripts/nodes.py index 1b4577d..f4f4af7 100755 --- a/scripts/image_nets.py +++ b/scripts/nodes.py @@ -13,12 +13,12 @@ PIL.Image.warnings.simplefilter('ignore', PIL.Image.DecompressionBombWarning) if len(sys.argv) < 4: print( - f'usage: {sys.argv[0]:s} image_in,... conn_matrix.txt nets.txt' + f'usage: {sys.argv[0]:s} image_in,... conn_matrix.txt nodes.txt' ) sys.exit(1) images_in = sys.argv[1].split(',') conn_matrix_txt = sys.argv[2] -nets_txt = sys.argv[3] +nodes_txt = sys.argv[3] images = [] colours = [1] @@ -94,33 +94,33 @@ while len(ptrs) <= len(images) * ys: reports = [] def merge(item0, item1): - net_item0 = item0 - i = items[net_item0][0] - while i != net_item0: - net_item0 = i - i = items[net_item0][0] - - net_item1 = item1 - i = items[net_item1][0] - while i != net_item1: - net_item1 = i - i = items[net_item1][0] - - net_item = min(net_item0, net_item1) - items[net_item0][0] = net_item - items[net_item1][0] = net_item - - net_item0 = item0 - while net_item0 != net_item: - i = items[net_item0][0] - items[net_item0][0] = net_item - net_item0 = i - - net_item1 = item1 - while net_item1 != net_item: - i = items[net_item1][0] - items[net_item1][0] = net_item - net_item1 = i + node_item0 = item0 + i = items[node_item0][0] + while i != node_item0: + node_item0 = i + i = items[node_item0][0] + + node_item1 = item1 + i = items[node_item1][0] + while i != node_item1: + node_item1 = i + i = items[node_item1][0] + + node_item = min(node_item0, node_item1) + items[node_item0][0] = node_item + items[node_item1][0] = node_item + + node_item0 = item0 + while node_item0 != node_item: + i = items[node_item0][0] + items[node_item0][0] = node_item + node_item0 = i + + node_item1 = item1 + while node_item1 != node_item: + i = items[node_item1][0] + items[node_item1][0] = node_item + node_item1 = i def end_to_end(p, q): if q > p + 1: i = p @@ -214,27 +214,27 @@ for i in range(len(images)): ) print('output') -with open(nets_txt, 'w') as fout: +with open(nodes_txt, 'w') as fout: print(colours[-1], ys, xs, file = fout) print(len(items), file = fout) for i in range(len(items)): - net_item, colour0, y0, x0, x1 = items[i] + node_item, colour0, y0, x0, x1 = items[i] - j = items[net_item][0] - while j != net_item: - net_item = j - j = items[net_item][0] + j = items[node_item][0] + while j != node_item: + node_item = j + j = items[node_item][0] j = i - while j != net_item: + while j != node_item: k = items[j][0] - items[j][0] = net_item + items[j][0] = node_item j = k - _, colour1, y1, x2, _ = items[net_item] - net = f'{colour1:d}_{y1:04d}_{x2:04d}' + _, colour1, y1, x2, _ = items[node_item] + node = f'{colour1:d}_{y1:04d}_{x2:04d}' - print(net, colour0, y0, x0, x1, file = fout) + print(node, colour0, y0, x0, x1, file = fout) print(len(reports), file = fout) for item0, item1 in reports: -- 2.34.1