diff --git a/examples/Introduction.ipynb b/examples/Introduction.ipynb index 8811b5b..88e61ed 100644 --- a/examples/Introduction.ipynb +++ b/examples/Introduction.ipynb @@ -25,22 +25,21 @@ "outputs": [], "source": [ "from kyupy import bench, verilog\n", - "from kyupy.techlib import SAED32\n", + "from kyupy.techlib import SAED32, GSC180\n", "\n", "# load a file\n", "b15 = verilog.load('../tests/b15_2ig.v.gz', tlib=SAED32)\n", "\n", "# ... or specify the circuit as string \n", - "adder = bench.parse('''\n", - "INPUT(a, b)\n", - "OUTPUT(s)\n", - "cin = DFF(cout)\n", - "axb = XOR(a, b)\n", - "s = XOR(axb, cin)\n", - "aab = AND(a, b)\n", - "axbacin = AND(axb, cin)\n", - "cout = OR(aab, axbacin)\n", - "''', name='adder')" + "adder = verilog.parse('''\n", + "module adder(clk, a, b, s);\n", + " input clk, a, b;\n", + " output s;\n", + " wire cin, cout;\n", + " DFFX1 carry (.D(cout), .CK(clk), .Q(cin));\n", + " ADDFX1 adder (.A(a), .B(b), .CI(cin), .CO(cout), .S(s));\n", + "endmodule\n", + "''', tlib=GSC180)" ] }, { @@ -98,7 +97,7 @@ { "data": { "text/plain": [ - "{name: \"adder\", cells: 6, forks: 8, lines: 17, io_nodes: 3}" + "{name: \"adder\", cells: 6, forks: 6, lines: 12, io_nodes: 4}" ] }, "execution_count": 4, @@ -125,17 +124,17 @@ { "data": { "text/plain": [ - "{'__node__': 14,\n", + "{'__node__': 12,\n", " '__cell__': 6,\n", - " '__fork__': 8,\n", - " '__io__': 3,\n", - " '__line__': 17,\n", - " 'DFF': 1,\n", + " '__fork__': 6,\n", + " '__io__': 4,\n", + " '__line__': 12,\n", + " 'DFFX1': 1,\n", " '__dff__': 1,\n", - " 'XOR': 2,\n", - " '__comb__': 5,\n", - " 'AND': 2,\n", - " 'OR': 1,\n", + " 'ADDFX1': 1,\n", + " '__comb__': 1,\n", + " 'input': 3,\n", + " 'output': 1,\n", " '__latch__': 0,\n", " '__seq__': 1}" ] @@ -209,7 +208,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Kyupy's simulator supports a certain set of 1, 2, 3, and 4-input gates. To map a circuit to these gates, we create a copy and resolve the SAED32 library cells." + "The `.dot()` function shows the graph structure for small circuits. This requires the `graphviz` package." ] }, { @@ -219,27 +218,235 @@ "outputs": [ { "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "0\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "0 [4]\n", + "DFFX1\n", + "carry\n", + "\n", + "0\n", + "\n", + "\n", + "1\n", + "\n", + "0\n", + "\n", + "1\n", + "__fork__\n", + "cin\n", + "\n", + "0\n", + "\n", + "\n", + "0:o0->1:i0\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "5\n", + "\n", + " \n", + "\n", + "5 [0]\n", + "input\n", + "clk\n", + "\n", + "0\n", + "\n", + "\n", + "6\n", + "\n", + "0\n", + "\n", + "6\n", + "__fork__\n", + "clk\n", + "\n", + "0\n", + "\n", + "\n", + "5:o0->6:i0\n", + "\n", + "\n", + "3\n", + "\n", + "\n", + "7\n", + "\n", + " \n", + "\n", + "7 [1]\n", + "input\n", + "a\n", + "\n", + "0\n", + "\n", + "\n", + "8\n", + "\n", + "0\n", + "\n", + "8\n", + "__fork__\n", + "a\n", + "\n", + "0\n", + "\n", + "\n", + "7:o0->8:i0\n", + "\n", + "\n", + "4\n", + "\n", + "\n", + "9\n", + "\n", + " \n", + "\n", + "9 [2]\n", + "input\n", + "b\n", + "\n", + "0\n", + "\n", + "\n", + "10\n", + "\n", + "0\n", + "\n", + "10\n", + "__fork__\n", + "b\n", + "\n", + "0\n", + "\n", + "\n", + "9:o0->10:i0\n", + "\n", + "\n", + "5\n", + "\n", + "\n", + "2\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "2\n", + "\n", + "2\n", + "ADDFX1\n", + "adder\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "1:o0->2:i2\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "6:o0->0:i0\n", + "\n", + "\n", + "7\n", + "\n", + "\n", + "8:o0->2:i0\n", + "\n", + "\n", + "8\n", + "\n", + "\n", + "10:o0->2:i1\n", + "\n", + "\n", + "9\n", + "\n", + "\n", + "3\n", + "\n", + "0\n", + "\n", + "3\n", + "__fork__\n", + "cout\n", + "\n", + "0\n", + "\n", + "\n", + "2:o0->3:i0\n", + "\n", + "\n", + "1\n", + "\n", + "\n", + "4\n", + "\n", + "0\n", + "\n", + "4\n", + "__fork__\n", + "s\n", + "\n", + "0\n", + "\n", + "\n", + "2:o1->4:i0\n", + "\n", + "\n", + "2\n", + "\n", + "\n", + "3:o0->0:i1\n", + "\n", + "\n", + "6\n", + "\n", + "\n", + "11\n", + "\n", + "0\n", + "\n", + "11 [3]\n", + "output\n", + "s\n", + "\n", + " \n", + "\n", + "\n", + "4:o0->11:i0\n", + "\n", + "\n", + "11\n", + "\n", + "\n", + "\n" + ], "text/plain": [ - "{'__node__': 22819,\n", - " '__cell__': 11653,\n", - " '__fork__': 11166,\n", - " '__io__': 111,\n", - " '__line__': 33313,\n", - " 'output': 71,\n", - " 'input': 40,\n", - " '__const1__': 1,\n", - " '__comb__': 11125,\n", - " 'BUF1': 526,\n", - " 'INV1': 897,\n", - " 'AND2': 1464,\n", - " 'OR2': 1095,\n", - " 'NOR2': 114,\n", - " 'MUX21': 417,\n", - " 'DFF': 417,\n", - " '__dff__': 417,\n", - " 'NAND2': 6611,\n", - " '__latch__': 0,\n", - " '__seq__': 417}" + "" ] }, "execution_count": 7, @@ -248,20 +455,30 @@ } ], "source": [ - "b15_prim = b15.copy()\n", - "b15_prim.resolve_tlib_cells(SAED32)\n", - "b15_prim.stats" + "adder.dot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Circuits contain `cells`, `forks`, `lines`, and `io_nodes`. Let's explore these...\n", + "The rectangles are called _nodes_.\n", + "Every node has an _index_ (top-middle number), a _kind_ or type (string in the middle), and a _name_ (bottom-most string).\n", + "Nodes have numeric input pins on the left and numeric output pins on the right.\n", + "The pins are connected by directional _lines_.\n", + "Lines are 1-to-1 connections and also have an _index_.\n", + "\n", + "Some nodes have an additional number in brackets. These are primary inputs, primary outputs (_io_nodes_) or sequential nodes (flip-flops, _s_nodes_).\n", + "The number is the position of their corresponding data in test vectors.\n", + "\n", + "The graph above is topologically sorted with primary inputs and flip-flops on the left.\n", + "Lines that follow the sorting are shown as solid, lines back to the flip-flops are shown as dotted.\n", + "\n", + "Let's explore the components in more detail:\n", "\n", "### Cells and Forks\n", "\n", - "`cells` and `forks` are dictionaries that map names to `Node`-objects." + "Circuits contain `cells` and `forks` dictionaries that map names to `Node`-objects." ] }, { @@ -272,12 +489,12 @@ { "data": { "text/plain": [ - "{'cin': 4:DFF\"cin\" <1 >0,\n", - " 'axb': 6:XOR\"axb\" <3 <4 >2,\n", - " 's': 8:XOR\"s\" <6 <7 >5,\n", - " 'aab': 9:AND\"aab\" <9 <10 >8,\n", - " 'axbacin': 11:AND\"axbacin\" <12 <13 >11,\n", - " 'cout': 13:OR\"cout\" <15 <16 >14}" + "{'carry': 0:DFFX1\"carry\" <7 <6 >0,\n", + " 'adder': 2:ADDFX1\"adder\" <8 <9 <10 >1 >2,\n", + " 'clk': 5:input\"clk\" >3,\n", + " 'a': 7:input\"a\" >4,\n", + " 'b': 9:input\"b\" >5,\n", + " 's': 11:output\"s\" <11}" ] }, "execution_count": 8, @@ -297,14 +514,12 @@ { "data": { "text/plain": [ - "{'a': 0:__fork__\"a\" >3 >9,\n", - " 'b': 1:__fork__\"b\" >4 >10,\n", - " 's': 2:__fork__\"s\" <5,\n", - " 'cout': 3:__fork__\"cout\" <14 >1,\n", - " 'cin': 5:__fork__\"cin\" <0 >7 >13,\n", - " 'axb': 7:__fork__\"axb\" <2 >6 >12,\n", - " 'aab': 10:__fork__\"aab\" <8 >15,\n", - " 'axbacin': 12:__fork__\"axbacin\" <11 >16}" + "{'cin': 1:__fork__\"cin\" <0 >10,\n", + " 'cout': 3:__fork__\"cout\" <1 >6,\n", + " 's': 4:__fork__\"s\" <2 >11,\n", + " 'clk': 6:__fork__\"clk\" <3 >7,\n", + " 'a': 8:__fork__\"a\" <4 >8,\n", + " 'b': 10:__fork__\"b\" <5 >9}" ] }, "execution_count": 9, @@ -331,7 +546,7 @@ { "data": { "text/plain": [ - "6:XOR\"axb\" <3 <4 >2" + "2:ADDFX1\"adder\" <8 <9 <10 >1 >2" ] }, "execution_count": 10, @@ -340,7 +555,7 @@ } ], "source": [ - "adder.cells['axb']" + "adder.cells['adder']" ] }, { @@ -351,7 +566,7 @@ { "data": { "text/plain": [ - "7:__fork__\"axb\" <2 >6 >12" + "3:__fork__\"cout\" <1 >6" ] }, "execution_count": 11, @@ -360,7 +575,7 @@ } ], "source": [ - "adder.forks['axb']" + "adder.forks['cout']" ] }, { @@ -383,7 +598,7 @@ { "data": { "text/plain": [ - "(6, 'XOR', 'axb')" + "(11, 'output', 's')" ] }, "execution_count": 12, @@ -392,7 +607,7 @@ } ], "source": [ - "adder.cells['axb'].index, adder.cells['axb'].kind, adder.cells['axb'].name" + "adder.cells['s'].index, adder.cells['s'].kind, adder.cells['s'].name" ] }, { @@ -416,7 +631,7 @@ { "data": { "text/plain": [ - "(7, '__fork__', 'axb')" + "(4, '__fork__', 's')" ] }, "execution_count": 13, @@ -425,7 +640,7 @@ } ], "source": [ - "adder.forks['axb'].index, adder.forks['axb'].kind, adder.forks['axb'].name" + "adder.forks['s'].index, adder.forks['s'].kind, adder.forks['s'].name" ] }, { @@ -447,20 +662,18 @@ { "data": { "text/plain": [ - "[0:__fork__\"a\" >3 >9,\n", - " 1:__fork__\"b\" >4 >10,\n", - " 2:__fork__\"s\" <5,\n", - " 3:__fork__\"cout\" <14 >1,\n", - " 4:DFF\"cin\" <1 >0,\n", - " 5:__fork__\"cin\" <0 >7 >13,\n", - " 6:XOR\"axb\" <3 <4 >2,\n", - " 7:__fork__\"axb\" <2 >6 >12,\n", - " 8:XOR\"s\" <6 <7 >5,\n", - " 9:AND\"aab\" <9 <10 >8,\n", - " 10:__fork__\"aab\" <8 >15,\n", - " 11:AND\"axbacin\" <12 <13 >11,\n", - " 12:__fork__\"axbacin\" <11 >16,\n", - " 13:OR\"cout\" <15 <16 >14]" + "[0:DFFX1\"carry\" <7 <6 >0,\n", + " 1:__fork__\"cin\" <0 >10,\n", + " 2:ADDFX1\"adder\" <8 <9 <10 >1 >2,\n", + " 3:__fork__\"cout\" <1 >6,\n", + " 4:__fork__\"s\" <2 >11,\n", + " 5:input\"clk\" >3,\n", + " 6:__fork__\"clk\" <3 >7,\n", + " 7:input\"a\" >4,\n", + " 8:__fork__\"a\" <4 >8,\n", + " 9:input\"b\" >5,\n", + " 10:__fork__\"b\" <5 >9,\n", + " 11:output\"s\" <11]" ] }, "execution_count": 14, @@ -480,7 +693,7 @@ { "data": { "text/plain": [ - "(6:XOR\"axb\" <3 <4 >2, 7:__fork__\"axb\" <2 >6 >12)" + "(4:__fork__\"s\" <2 >11, 11:output\"s\" <11)" ] }, "execution_count": 15, @@ -489,7 +702,7 @@ } ], "source": [ - "adder.nodes[6], adder.nodes[7]" + "adder.nodes[4], adder.nodes[11]" ] }, { @@ -525,7 +738,7 @@ }, "outputs": [], "source": [ - "weights[adder.cells['axb']] = 5" + "weights[adder.cells['s']] = 5" ] }, { @@ -536,7 +749,7 @@ { "data": { "text/plain": [ - "[0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0]" + "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]" ] }, "execution_count": 18, @@ -571,7 +784,7 @@ { "data": { "text/plain": [ - "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]" + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]" ] }, "execution_count": 19, @@ -598,7 +811,7 @@ { "data": { "text/plain": [ - "(6:XOR\"axb\" <3 <4 >2, 7:__fork__\"axb\" <2 >6 >12)" + "(2:ADDFX1\"adder\" <8 <9 <10 >1 >2, 4:__fork__\"s\" <2 >11)" ] }, "execution_count": 20, @@ -629,7 +842,7 @@ { "data": { "text/plain": [ - "([3, 4], [2])" + "([8, 9, 10], [1, 2])" ] }, "execution_count": 21, @@ -638,7 +851,7 @@ } ], "source": [ - "adder.cells['axb'].ins, adder.cells['axb'].outs" + "adder.cells['adder'].ins, adder.cells['adder'].outs" ] }, { @@ -656,7 +869,7 @@ { "data": { "text/plain": [ - "(0, 0, 1)" + "(0, 1)" ] }, "execution_count": 22, @@ -665,7 +878,7 @@ } ], "source": [ - "adder.lines[2].driver_pin, adder.lines[2].reader_pin, adder.lines[4].reader_pin" + "adder.lines[9].driver_pin, adder.lines[9].reader_pin" ] }, { @@ -685,7 +898,7 @@ { "data": { "text/plain": [ - "[0:__fork__\"a\" >3 >9, 1:__fork__\"b\" >4 >10, 2:__fork__\"s\" <5]" + "[5:input\"clk\" >3, 7:input\"a\" >4, 9:input\"b\" >5, 11:output\"s\" <11]" ] }, "execution_count": 23, @@ -716,7 +929,11 @@ { "data": { "text/plain": [ - "[0:__fork__\"a\" >3 >9, 1:__fork__\"b\" >4 >10, 2:__fork__\"s\" <5, 4:DFF\"cin\" <1 >0]" + "[5:input\"clk\" >3,\n", + " 7:input\"a\" >4,\n", + " 9:input\"b\" >5,\n", + " 11:output\"s\" <11,\n", + " 0:DFFX1\"carry\" <7 <6 >0]" ] }, "execution_count": 24, @@ -745,7 +962,7 @@ { "data": { "text/plain": [ - "6:XOR\"axb\" <3 <4 >2" + "8:__fork__\"a\" <4 >8" ] }, "execution_count": 25, @@ -754,7 +971,7 @@ } ], "source": [ - "adder.io_nodes[0].outs[0].reader" + "adder.io_nodes[1].outs[0].reader" ] }, { @@ -766,13 +983,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "6:XOR\"axb\" <3 <4 >2\n", - "9:AND\"aab\" <9 <10 >8\n" + "3:__fork__\"cout\" <1 >6\n", + "4:__fork__\"s\" <2 >11\n" ] } ], "source": [ - "for line in adder.io_nodes[0].outs:\n", + "for line in adder.cells['adder'].outs:\n", " print(line.reader)" ] }, @@ -784,7 +1001,7 @@ { "data": { "text/plain": [ - "'cout'" + "'adder'" ] }, "execution_count": 27, @@ -793,7 +1010,7 @@ } ], "source": [ - "adder.cells['cin'].ins[0].driver.name" + "adder.forks['cout'].ins[0].driver.name" ] }, { @@ -1151,176 +1368,6 @@ " print(b15.s_nodes[i])" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The resolved circuit `b15_prim` contains primitive DFF and no scan-cells." - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------------\n", - "22272:DFF\"InstQueue_reg_0__0_\" <32766 <12707 >32767\n", - "22269:DFF\"InstQueue_reg_0__1_\" <32763 <12702 >32764\n", - "22275:DFF\"InstQueue_reg_0__2_\" <32769 <12712 >32770\n", - "22266:DFF\"InstQueue_reg_0__3_\" <32760 <12697 >32761\n", - "22278:DFF\"InstQueue_reg_0__4_\" <32772 <12717 >32773\n", - "22263:DFF\"InstQueue_reg_0__5_\" <32757 <12692 >32758\n", - "22281:DFF\"InstQueue_reg_0__6_\" <32775 <12722 >32776\n", - "22260:DFF\"InstQueue_reg_0__7_\" <32754 <12687 >32755\n", - "---------------\n", - "22296:DFF\"InstQueue_reg_1__0_\" <32790 <12747 >32791\n", - "22293:DFF\"InstQueue_reg_1__1_\" <32787 <12742 >32788\n", - "22299:DFF\"InstQueue_reg_1__2_\" <32793 <12752 >32794\n", - "22290:DFF\"InstQueue_reg_1__3_\" <32784 <12737 >32785\n", - "22302:DFF\"InstQueue_reg_1__4_\" <32796 <12757 >32797\n", - "22287:DFF\"InstQueue_reg_1__5_\" <32781 <12732 >32782\n", - "22305:DFF\"InstQueue_reg_1__6_\" <32799 <12762 >32800\n", - "22284:DFF\"InstQueue_reg_1__7_\" <32778 <12727 >32779\n", - "---------------\n", - "22320:DFF\"InstQueue_reg_2__0_\" <32814 <12787 >32815\n", - "22317:DFF\"InstQueue_reg_2__1_\" <32811 <12782 >32812\n", - "22323:DFF\"InstQueue_reg_2__2_\" <32817 <12792 >32818\n", - "22314:DFF\"InstQueue_reg_2__3_\" <32808 <12777 >32809\n", - "22326:DFF\"InstQueue_reg_2__4_\" <32820 <12797 >32821\n", - "22311:DFF\"InstQueue_reg_2__5_\" <32805 <12772 >32806\n", - "22329:DFF\"InstQueue_reg_2__6_\" <32823 <12802 >32824\n", - "22308:DFF\"InstQueue_reg_2__7_\" <32802 <12767 >32803\n", - "---------------\n", - "22344:DFF\"InstQueue_reg_3__0_\" <32838 <12827 >32839\n", - "22341:DFF\"InstQueue_reg_3__1_\" <32835 <12822 >32836\n", - "22347:DFF\"InstQueue_reg_3__2_\" <32841 <12832 >32842\n", - "22338:DFF\"InstQueue_reg_3__3_\" <32832 <12817 >32833\n", - "22350:DFF\"InstQueue_reg_3__4_\" <32844 <12837 >32845\n", - "22335:DFF\"InstQueue_reg_3__5_\" <32829 <12812 >32830\n", - "22353:DFF\"InstQueue_reg_3__6_\" <32847 <12842 >32848\n", - "22332:DFF\"InstQueue_reg_3__7_\" <32826 <12807 >32827\n", - "---------------\n", - "22368:DFF\"InstQueue_reg_4__0_\" <32862 <12867 >32863\n", - "22365:DFF\"InstQueue_reg_4__1_\" <32859 <12862 >32860\n", - "22371:DFF\"InstQueue_reg_4__2_\" <32865 <12872 >32866\n", - "22362:DFF\"InstQueue_reg_4__3_\" <32856 <12857 >32857\n", - "22374:DFF\"InstQueue_reg_4__4_\" <32868 <12877 >32869\n", - "22359:DFF\"InstQueue_reg_4__5_\" <32853 <12852 >32854\n", - "22377:DFF\"InstQueue_reg_4__6_\" <32871 <12882 >32872\n", - "22356:DFF\"InstQueue_reg_4__7_\" <32850 <12847 >32851\n", - "---------------\n", - "22392:DFF\"InstQueue_reg_5__0_\" <32886 <12907 >32887\n", - "22389:DFF\"InstQueue_reg_5__1_\" <32883 <12902 >32884\n", - "22395:DFF\"InstQueue_reg_5__2_\" <32889 <12912 >32890\n", - "22386:DFF\"InstQueue_reg_5__3_\" <32880 <12897 >32881\n", - "22398:DFF\"InstQueue_reg_5__4_\" <32892 <12917 >32893\n", - "22383:DFF\"InstQueue_reg_5__5_\" <32877 <12892 >32878\n", - "22401:DFF\"InstQueue_reg_5__6_\" <32895 <12922 >32896\n", - "22380:DFF\"InstQueue_reg_5__7_\" <32874 <12887 >32875\n", - "---------------\n", - "22416:DFF\"InstQueue_reg_6__0_\" <32910 <12947 >32911\n", - "22413:DFF\"InstQueue_reg_6__1_\" <32907 <12942 >32908\n", - "22419:DFF\"InstQueue_reg_6__2_\" <32913 <12952 >32914\n", - "22410:DFF\"InstQueue_reg_6__3_\" <32904 <12937 >32905\n", - "22422:DFF\"InstQueue_reg_6__4_\" <32916 <12957 >32917\n", - "22407:DFF\"InstQueue_reg_6__5_\" <32901 <12932 >32902\n", - "22425:DFF\"InstQueue_reg_6__6_\" <32919 <12962 >32920\n", - "22404:DFF\"InstQueue_reg_6__7_\" <32898 <12927 >32899\n", - "---------------\n", - "22440:DFF\"InstQueue_reg_7__0_\" <32934 <12987 >32935\n", - "22437:DFF\"InstQueue_reg_7__1_\" <32931 <12982 >32932\n", - "22443:DFF\"InstQueue_reg_7__2_\" <32937 <12992 >32938\n", - "22434:DFF\"InstQueue_reg_7__3_\" <32928 <12977 >32929\n", - "22446:DFF\"InstQueue_reg_7__4_\" <32940 <12997 >32941\n", - "22431:DFF\"InstQueue_reg_7__5_\" <32925 <12972 >32926\n", - "22449:DFF\"InstQueue_reg_7__6_\" <32943 <13002 >32944\n", - "22428:DFF\"InstQueue_reg_7__7_\" <32922 <12967 >32923\n", - "---------------\n", - "22464:DFF\"InstQueue_reg_8__0_\" <32958 <13027 >32959\n", - "22461:DFF\"InstQueue_reg_8__1_\" <32955 <13022 >32956\n", - "1518:DFF\"InstQueue_reg_8__2_\" <32961 <13032 >32963\n", - "22458:DFF\"InstQueue_reg_8__3_\" <32952 <13017 >32953\n", - "22471:DFF\"InstQueue_reg_8__4_\" <32965 <13037 >32966\n", - "22455:DFF\"InstQueue_reg_8__5_\" <32949 <13012 >32950\n", - "22474:DFF\"InstQueue_reg_8__6_\" <32968 <13042 >32969\n", - "22452:DFF\"InstQueue_reg_8__7_\" <32946 <13007 >32947\n", - "---------------\n", - "22489:DFF\"InstQueue_reg_9__0_\" <32983 <13067 >32984\n", - "22486:DFF\"InstQueue_reg_9__1_\" <32980 <13062 >32981\n", - "22492:DFF\"InstQueue_reg_9__2_\" <32986 <13072 >32987\n", - "22483:DFF\"InstQueue_reg_9__3_\" <32977 <13057 >32978\n", - "22495:DFF\"InstQueue_reg_9__4_\" <32989 <13077 >32990\n", - "22480:DFF\"InstQueue_reg_9__5_\" <32974 <13052 >32975\n", - "22498:DFF\"InstQueue_reg_9__6_\" <32992 <13082 >32993\n", - "22477:DFF\"InstQueue_reg_9__7_\" <32971 <13047 >32972\n", - "---------------\n", - "22513:DFF\"InstQueue_reg_10__0_\" <33007 <13107 >33008\n", - "22510:DFF\"InstQueue_reg_10__1_\" <33004 <13102 >33005\n", - "22516:DFF\"InstQueue_reg_10__2_\" <33010 <13112 >33011\n", - "22507:DFF\"InstQueue_reg_10__3_\" <33001 <13097 >33002\n", - "1553:DFF\"InstQueue_reg_10__4_\" <33013 <13117 >33015\n", - "22504:DFF\"InstQueue_reg_10__5_\" <32998 <13092 >32999\n", - "22523:DFF\"InstQueue_reg_10__6_\" <33017 <13122 >33018\n", - "22501:DFF\"InstQueue_reg_10__7_\" <32995 <13087 >32996\n", - "---------------\n", - "22538:DFF\"InstQueue_reg_11__0_\" <33032 <13147 >33033\n", - "22535:DFF\"InstQueue_reg_11__1_\" <33029 <13142 >33030\n", - "22541:DFF\"InstQueue_reg_11__2_\" <33035 <13152 >33036\n", - "22532:DFF\"InstQueue_reg_11__3_\" <33026 <13137 >33027\n", - "22544:DFF\"InstQueue_reg_11__4_\" <33038 <13157 >33039\n", - "22529:DFF\"InstQueue_reg_11__5_\" <33023 <13132 >33024\n", - "22547:DFF\"InstQueue_reg_11__6_\" <33041 <13162 >33042\n", - "22526:DFF\"InstQueue_reg_11__7_\" <33020 <13127 >33021\n", - "---------------\n", - "22562:DFF\"InstQueue_reg_12__0_\" <33056 <13187 >33057\n", - "22559:DFF\"InstQueue_reg_12__1_\" <33053 <13182 >33054\n", - "22565:DFF\"InstQueue_reg_12__2_\" <33059 <13192 >33060\n", - "22556:DFF\"InstQueue_reg_12__3_\" <33050 <13177 >33051\n", - "22568:DFF\"InstQueue_reg_12__4_\" <33062 <13197 >33063\n", - "22553:DFF\"InstQueue_reg_12__5_\" <33047 <13172 >33048\n", - "22571:DFF\"InstQueue_reg_12__6_\" <33065 <13202 >33066\n", - "22550:DFF\"InstQueue_reg_12__7_\" <33044 <13167 >33045\n", - "---------------\n", - "22586:DFF\"InstQueue_reg_13__0_\" <33080 <13227 >33081\n", - "22583:DFF\"InstQueue_reg_13__1_\" <33077 <13222 >33078\n", - "22589:DFF\"InstQueue_reg_13__2_\" <33083 <13232 >33084\n", - "22580:DFF\"InstQueue_reg_13__3_\" <33074 <13217 >33075\n", - "22592:DFF\"InstQueue_reg_13__4_\" <33086 <13237 >33087\n", - "22577:DFF\"InstQueue_reg_13__5_\" <33071 <13212 >33072\n", - "22595:DFF\"InstQueue_reg_13__6_\" <33089 <13242 >33090\n", - "22574:DFF\"InstQueue_reg_13__7_\" <33068 <13207 >33069\n", - "---------------\n", - "22610:DFF\"InstQueue_reg_14__0_\" <33104 <13267 >33105\n", - "22607:DFF\"InstQueue_reg_14__1_\" <33101 <13262 >33102\n", - "22613:DFF\"InstQueue_reg_14__2_\" <33107 <13272 >33108\n", - "22604:DFF\"InstQueue_reg_14__3_\" <33098 <13257 >33099\n", - "22616:DFF\"InstQueue_reg_14__4_\" <33110 <13277 >33111\n", - "22601:DFF\"InstQueue_reg_14__5_\" <33095 <13252 >33096\n", - "22619:DFF\"InstQueue_reg_14__6_\" <33113 <13282 >33114\n", - "22598:DFF\"InstQueue_reg_14__7_\" <33092 <13247 >33093\n", - "---------------\n", - "22634:DFF\"InstQueue_reg_15__0_\" <33128 <13307 >33129\n", - "22631:DFF\"InstQueue_reg_15__1_\" <33125 <13302 >33126\n", - "22637:DFF\"InstQueue_reg_15__2_\" <33131 <13312 >33132\n", - "22628:DFF\"InstQueue_reg_15__3_\" <33122 <13297 >33123\n", - "22640:DFF\"InstQueue_reg_15__4_\" <33134 <13317 >33135\n", - "22625:DFF\"InstQueue_reg_15__5_\" <33119 <13292 >33120\n", - "22643:DFF\"InstQueue_reg_15__6_\" <33137 <13322 >33138\n", - "22622:DFF\"InstQueue_reg_15__7_\" <33116 <13287 >33117\n" - ] - } - ], - "source": [ - "for l in b15_prim.s_locs('InstQueue_reg'):\n", - " print('---------------')\n", - " for i in l:\n", - " print(b15_prim.s_nodes[i])" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1336,7 +1383,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": {}, "outputs": [ { @@ -1378,27 +1425,25 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0:__fork__\"a\" >3 >9\n", - "1:__fork__\"b\" >4 >10\n", - "4:DFF\"cin\" <1 >0\n", - "6:XOR\"axb\" <3 <4 >2\n", - "9:AND\"aab\" <9 <10 >8\n", - "5:__fork__\"cin\" <0 >7 >13\n", - "7:__fork__\"axb\" <2 >6 >12\n", - "10:__fork__\"aab\" <8 >15\n", - "8:XOR\"s\" <6 <7 >5\n", - "11:AND\"axbacin\" <12 <13 >11\n", - "2:__fork__\"s\" <5\n", - "12:__fork__\"axbacin\" <11 >16\n", - "13:OR\"cout\" <15 <16 >14\n", - "3:__fork__\"cout\" <14 >1\n" + "0:DFFX1\"carry\" <7 <6 >0\n", + "5:input\"clk\" >3\n", + "7:input\"a\" >4\n", + "9:input\"b\" >5\n", + "1:__fork__\"cin\" <0 >10\n", + "6:__fork__\"clk\" <3 >7\n", + "8:__fork__\"a\" <4 >8\n", + "10:__fork__\"b\" <5 >9\n", + "2:ADDFX1\"adder\" <8 <9 <10 >1 >2\n", + "3:__fork__\"cout\" <1 >6\n", + "4:__fork__\"s\" <2 >11\n", + "11:output\"s\" <11\n" ] } ], @@ -1421,7 +1466,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "metadata": {}, "outputs": [ { @@ -1457,7 +1502,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1496,6 +1541,925 @@ " print(f'depth: {levels[n_idx]} node: {n.kind:12s} {n.name:6s} driving: {readers}')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working With Technology Libraries\n", + "\n", + "Kyupy's simulators only supports cells with at most 4 inputs and exactly 1 output.\n", + "To map a circuit to the supported simulation primitives, we use `.resolve_tlib_cells()` with the corresponding library." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "adder.resolve_tlib_cells(GSC180)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "0\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "0 [4]\n", + "DFF\n", + "carry\n", + "\n", + "0\n", + "\n", + "\n", + "12\n", + "\n", + "0\n", + "\n", + "12\n", + "__fork__\n", + "carry~Q\n", + "\n", + "0\n", + "\n", + "\n", + "0:o0->12:i0\n", + "\n", + "\n", + "12\n", + "\n", + "\n", + "5\n", + "\n", + " \n", + "\n", + "5 [0]\n", + "input\n", + "clk\n", + "\n", + "0\n", + "\n", + "\n", + "6\n", + "\n", + "0\n", + "\n", + "6\n", + "__fork__\n", + "clk\n", + "\n", + "0\n", + "\n", + "\n", + "5:o0->6:i0\n", + "\n", + "\n", + "3\n", + "\n", + "\n", + "7\n", + "\n", + " \n", + "\n", + "7 [1]\n", + "input\n", + "a\n", + "\n", + "0\n", + "\n", + "\n", + "8\n", + "\n", + "0\n", + "\n", + "8\n", + "__fork__\n", + "a\n", + "\n", + "0\n", + "\n", + "\n", + "7:o0->8:i0\n", + "\n", + "\n", + "4\n", + "\n", + "\n", + "9\n", + "\n", + " \n", + "\n", + "9 [2]\n", + "input\n", + "b\n", + "\n", + "0\n", + "\n", + "\n", + "10\n", + "\n", + "0\n", + "\n", + "10\n", + "__fork__\n", + "b\n", + "\n", + "0\n", + "\n", + "\n", + "9:o0->10:i0\n", + "\n", + "\n", + "5\n", + "\n", + "\n", + "1\n", + "\n", + "0\n", + "\n", + "1\n", + "__fork__\n", + "cin\n", + "\n", + "0\n", + "\n", + "\n", + "12:o0->1:i0\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "6:o0->0:i1\n", + "\n", + "\n", + "7\n", + "\n", + "\n", + "13\n", + "\n", + "0\n", + "\n", + "13\n", + "__fork__\n", + "adder~A\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "8:o0->13:i0\n", + "\n", + "\n", + "8\n", + "\n", + "\n", + "14\n", + "\n", + "0\n", + "\n", + "14\n", + "__fork__\n", + "adder~B\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "10:o0->14:i0\n", + "\n", + "\n", + "9\n", + "\n", + "\n", + "15\n", + "\n", + "0\n", + "\n", + "15\n", + "__fork__\n", + "adder~CI\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "1:o0->15:i0\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "16\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "16\n", + "XOR2\n", + "adder~AB\n", + "\n", + "0\n", + "\n", + "\n", + "13:o0->16:i0\n", + "\n", + "\n", + "14\n", + "\n", + "\n", + "18\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "2\n", + "\n", + "3\n", + "\n", + "18\n", + "AO22\n", + "adder~S\n", + "\n", + "0\n", + "\n", + "\n", + "13:o1->18:i2\n", + "\n", + "\n", + "20\n", + "\n", + "\n", + "14:o0->16:i1\n", + "\n", + "\n", + "15\n", + "\n", + "\n", + "14:o1->18:i3\n", + "\n", + "\n", + "21\n", + "\n", + "\n", + "2\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "2\n", + "XOR2\n", + "adder\n", + "\n", + "0\n", + "\n", + "\n", + "15:o0->2:i1\n", + "\n", + "\n", + "17\n", + "\n", + "\n", + "15:o1->18:i1\n", + "\n", + "\n", + "19\n", + "\n", + "\n", + "17\n", + "\n", + "0\n", + "\n", + "17\n", + "__fork__\n", + "adder~AB\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "16:o0->17:i0\n", + "\n", + "\n", + "13\n", + "\n", + "\n", + "17:o0->2:i0\n", + "\n", + "\n", + "16\n", + "\n", + "\n", + "17:o1->18:i0\n", + "\n", + "\n", + "18\n", + "\n", + "\n", + "3\n", + "\n", + "0\n", + "\n", + "3\n", + "__fork__\n", + "cout\n", + "\n", + "0\n", + "\n", + "\n", + "2:o0->3:i0\n", + "\n", + "\n", + "1\n", + "\n", + "\n", + "4\n", + "\n", + "0\n", + "\n", + "4\n", + "__fork__\n", + "s\n", + "\n", + "0\n", + "\n", + "\n", + "18:o0->4:i0\n", + "\n", + "\n", + "2\n", + "\n", + "\n", + "3:o0->0:i0\n", + "\n", + "\n", + "6\n", + "\n", + "\n", + "11\n", + "\n", + "0\n", + "\n", + "11 [3]\n", + "output\n", + "s\n", + "\n", + " \n", + "\n", + "\n", + "4:o0->11:i0\n", + "\n", + "\n", + "11\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "adder.dot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The graph is getting quite big due to all the forks. If we don't need the signal names anymore, we can remove all forks that only connect to one successor node." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "%3\n", + "\n", + "\n", + "0\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "0 [4]\n", + "DFF\n", + "carry\n", + "\n", + "0\n", + "\n", + "\n", + "6\n", + "\n", + "0\n", + "\n", + "6\n", + "__fork__\n", + "adder~CI\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "0:o0->6:i0\n", + "\n", + "\n", + "12\n", + "\n", + "\n", + "5\n", + "\n", + " \n", + "\n", + "5 [0]\n", + "input\n", + "clk\n", + "\n", + "0\n", + "\n", + "\n", + "5:o0->0:i1\n", + "\n", + "\n", + "3\n", + "\n", + "\n", + "7\n", + "\n", + " \n", + "\n", + "7 [1]\n", + "input\n", + "a\n", + "\n", + "0\n", + "\n", + "\n", + "10\n", + "\n", + "0\n", + "\n", + "10\n", + "__fork__\n", + "adder~A\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "7:o0->10:i0\n", + "\n", + "\n", + "4\n", + "\n", + "\n", + "9\n", + "\n", + " \n", + "\n", + "9 [2]\n", + "input\n", + "b\n", + "\n", + "0\n", + "\n", + "\n", + "8\n", + "\n", + "0\n", + "\n", + "8\n", + "__fork__\n", + "adder~B\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "9:o0->8:i0\n", + "\n", + "\n", + "5\n", + "\n", + "\n", + "2\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "2\n", + "XOR2\n", + "adder\n", + "\n", + "0\n", + "\n", + "\n", + "6:o0->2:i1\n", + "\n", + "\n", + "8\n", + "\n", + "\n", + "1\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "2\n", + "\n", + "3\n", + "\n", + "1\n", + "AO22\n", + "adder~S\n", + "\n", + "0\n", + "\n", + "\n", + "6:o1->1:i1\n", + "\n", + "\n", + "11\n", + "\n", + "\n", + "10:o1->1:i2\n", + "\n", + "\n", + "6\n", + "\n", + "\n", + "4\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "4\n", + "XOR2\n", + "adder~AB\n", + "\n", + "0\n", + "\n", + "\n", + "10:o0->4:i0\n", + "\n", + "\n", + "14\n", + "\n", + "\n", + "8:o0->4:i1\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "8:o1->1:i3\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "3\n", + "\n", + "0\n", + "\n", + "3\n", + "__fork__\n", + "adder~AB\n", + "\n", + "0\n", + "\n", + "1\n", + "\n", + "\n", + "4:o0->3:i0\n", + "\n", + "\n", + "13\n", + "\n", + "\n", + "3:o1->1:i0\n", + "\n", + "\n", + "7\n", + "\n", + "\n", + "3:o0->2:i0\n", + "\n", + "\n", + "9\n", + "\n", + "\n", + "2:o0->0:i0\n", + "\n", + "\n", + "1\n", + "\n", + "\n", + "11\n", + "\n", + "0\n", + "\n", + "11 [3]\n", + "output\n", + "s\n", + "\n", + " \n", + "\n", + "\n", + "1:o0->11:i0\n", + "\n", + "\n", + "2\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "adder.eliminate_1to1_forks()\n", + "adder.dot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's resolve the b15 circuit as well." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'__node__': 22819,\n", + " '__cell__': 11653,\n", + " '__fork__': 11166,\n", + " '__io__': 111,\n", + " '__line__': 33313,\n", + " '__const1__': 1,\n", + " '__comb__': 11125,\n", + " 'BUF1': 526,\n", + " 'INV1': 897,\n", + " 'AND2': 1464,\n", + " 'OR2': 1095,\n", + " 'NOR2': 114,\n", + " 'DFF': 417,\n", + " '__dff__': 417,\n", + " 'NAND2': 6611,\n", + " 'output': 71,\n", + " 'input': 40,\n", + " 'MUX21': 417,\n", + " '__latch__': 0,\n", + " '__seq__': 417}" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b15_prim = b15.copy()\n", + "b15_prim.resolve_tlib_cells(SAED32)\n", + "b15_prim.stats" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The resolved circuit `b15_prim` contains primitive DFF and no scan-cells.\n", + "The scan-chain is still present but it now contains ordinary multiplexers and flip-flops." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------------\n", + "1385:DFF\"InstQueue_reg_0__0_\" <32766 <12707 >32767\n", + "1383:DFF\"InstQueue_reg_0__1_\" <32763 <12702 >32764\n", + "1387:DFF\"InstQueue_reg_0__2_\" <32769 <12712 >32770\n", + "1381:DFF\"InstQueue_reg_0__3_\" <32760 <12697 >32761\n", + "1389:DFF\"InstQueue_reg_0__4_\" <32772 <12717 >32773\n", + "1379:DFF\"InstQueue_reg_0__5_\" <32757 <12692 >32758\n", + "1391:DFF\"InstQueue_reg_0__6_\" <32775 <12722 >32776\n", + "1377:DFF\"InstQueue_reg_0__7_\" <32754 <12687 >32755\n", + "---------------\n", + "1401:DFF\"InstQueue_reg_1__0_\" <32790 <12747 >32791\n", + "1399:DFF\"InstQueue_reg_1__1_\" <32787 <12742 >32788\n", + "1403:DFF\"InstQueue_reg_1__2_\" <32793 <12752 >32794\n", + "1397:DFF\"InstQueue_reg_1__3_\" <32784 <12737 >32785\n", + "1405:DFF\"InstQueue_reg_1__4_\" <32796 <12757 >32797\n", + "1395:DFF\"InstQueue_reg_1__5_\" <32781 <12732 >32782\n", + "1407:DFF\"InstQueue_reg_1__6_\" <32799 <12762 >32800\n", + "1393:DFF\"InstQueue_reg_1__7_\" <32778 <12727 >32779\n", + "---------------\n", + "1417:DFF\"InstQueue_reg_2__0_\" <32814 <12787 >32815\n", + "1415:DFF\"InstQueue_reg_2__1_\" <32811 <12782 >32812\n", + "1419:DFF\"InstQueue_reg_2__2_\" <32817 <12792 >32818\n", + "1413:DFF\"InstQueue_reg_2__3_\" <32808 <12777 >32809\n", + "1421:DFF\"InstQueue_reg_2__4_\" <32820 <12797 >32821\n", + "1411:DFF\"InstQueue_reg_2__5_\" <32805 <12772 >32806\n", + "1423:DFF\"InstQueue_reg_2__6_\" <32823 <12802 >32824\n", + "1409:DFF\"InstQueue_reg_2__7_\" <32802 <12767 >32803\n", + "---------------\n", + "1433:DFF\"InstQueue_reg_3__0_\" <32838 <12827 >32839\n", + "1431:DFF\"InstQueue_reg_3__1_\" <32835 <12822 >32836\n", + "1435:DFF\"InstQueue_reg_3__2_\" <32841 <12832 >32842\n", + "1429:DFF\"InstQueue_reg_3__3_\" <32832 <12817 >32833\n", + "1437:DFF\"InstQueue_reg_3__4_\" <32844 <12837 >32845\n", + "1427:DFF\"InstQueue_reg_3__5_\" <32829 <12812 >32830\n", + "1439:DFF\"InstQueue_reg_3__6_\" <32847 <12842 >32848\n", + "1425:DFF\"InstQueue_reg_3__7_\" <32826 <12807 >32827\n", + "---------------\n", + "1449:DFF\"InstQueue_reg_4__0_\" <32862 <12867 >32863\n", + "1447:DFF\"InstQueue_reg_4__1_\" <32859 <12862 >32860\n", + "1451:DFF\"InstQueue_reg_4__2_\" <32865 <12872 >32866\n", + "1445:DFF\"InstQueue_reg_4__3_\" <32856 <12857 >32857\n", + "1453:DFF\"InstQueue_reg_4__4_\" <32868 <12877 >32869\n", + "1443:DFF\"InstQueue_reg_4__5_\" <32853 <12852 >32854\n", + "1455:DFF\"InstQueue_reg_4__6_\" <32871 <12882 >32872\n", + "1441:DFF\"InstQueue_reg_4__7_\" <32850 <12847 >32851\n", + "---------------\n", + "1465:DFF\"InstQueue_reg_5__0_\" <32886 <12907 >32887\n", + "1463:DFF\"InstQueue_reg_5__1_\" <32883 <12902 >32884\n", + "1467:DFF\"InstQueue_reg_5__2_\" <32889 <12912 >32890\n", + "1461:DFF\"InstQueue_reg_5__3_\" <32880 <12897 >32881\n", + "1469:DFF\"InstQueue_reg_5__4_\" <32892 <12917 >32893\n", + "1459:DFF\"InstQueue_reg_5__5_\" <32877 <12892 >32878\n", + "1471:DFF\"InstQueue_reg_5__6_\" <32895 <12922 >32896\n", + "1457:DFF\"InstQueue_reg_5__7_\" <32874 <12887 >32875\n", + "---------------\n", + "1481:DFF\"InstQueue_reg_6__0_\" <32910 <12947 >32911\n", + "1479:DFF\"InstQueue_reg_6__1_\" <32907 <12942 >32908\n", + "1483:DFF\"InstQueue_reg_6__2_\" <32913 <12952 >32914\n", + "1477:DFF\"InstQueue_reg_6__3_\" <32904 <12937 >32905\n", + "1485:DFF\"InstQueue_reg_6__4_\" <32916 <12957 >32917\n", + "1475:DFF\"InstQueue_reg_6__5_\" <32901 <12932 >32902\n", + "1487:DFF\"InstQueue_reg_6__6_\" <32919 <12962 >32920\n", + "1473:DFF\"InstQueue_reg_6__7_\" <32898 <12927 >32899\n", + "---------------\n", + "1497:DFF\"InstQueue_reg_7__0_\" <32934 <12987 >32935\n", + "1495:DFF\"InstQueue_reg_7__1_\" <32931 <12982 >32932\n", + "1499:DFF\"InstQueue_reg_7__2_\" <32937 <12992 >32938\n", + "1493:DFF\"InstQueue_reg_7__3_\" <32928 <12977 >32929\n", + "1501:DFF\"InstQueue_reg_7__4_\" <32940 <12997 >32941\n", + "1491:DFF\"InstQueue_reg_7__5_\" <32925 <12972 >32926\n", + "1503:DFF\"InstQueue_reg_7__6_\" <32943 <13002 >32944\n", + "1489:DFF\"InstQueue_reg_7__7_\" <32922 <12967 >32923\n", + "---------------\n", + "1513:DFF\"InstQueue_reg_8__0_\" <32958 <13027 >32959\n", + "1511:DFF\"InstQueue_reg_8__1_\" <32955 <13022 >32956\n", + "1515:DFF\"InstQueue_reg_8__2_\" <32961 <13032 >32963\n", + "1509:DFF\"InstQueue_reg_8__3_\" <32952 <13017 >32953\n", + "1518:DFF\"InstQueue_reg_8__4_\" <32965 <13037 >32966\n", + "1507:DFF\"InstQueue_reg_8__5_\" <32949 <13012 >32950\n", + "1520:DFF\"InstQueue_reg_8__6_\" <32968 <13042 >32969\n", + "1505:DFF\"InstQueue_reg_8__7_\" <32946 <13007 >32947\n", + "---------------\n", + "1530:DFF\"InstQueue_reg_9__0_\" <32983 <13067 >32984\n", + "1528:DFF\"InstQueue_reg_9__1_\" <32980 <13062 >32981\n", + "1532:DFF\"InstQueue_reg_9__2_\" <32986 <13072 >32987\n", + "1526:DFF\"InstQueue_reg_9__3_\" <32977 <13057 >32978\n", + "1534:DFF\"InstQueue_reg_9__4_\" <32989 <13077 >32990\n", + "1524:DFF\"InstQueue_reg_9__5_\" <32974 <13052 >32975\n", + "1536:DFF\"InstQueue_reg_9__6_\" <32992 <13082 >32993\n", + "1522:DFF\"InstQueue_reg_9__7_\" <32971 <13047 >32972\n", + "---------------\n", + "1546:DFF\"InstQueue_reg_10__0_\" <33007 <13107 >33008\n", + "1544:DFF\"InstQueue_reg_10__1_\" <33004 <13102 >33005\n", + "1548:DFF\"InstQueue_reg_10__2_\" <33010 <13112 >33011\n", + "1542:DFF\"InstQueue_reg_10__3_\" <33001 <13097 >33002\n", + "1550:DFF\"InstQueue_reg_10__4_\" <33013 <13117 >33015\n", + "1540:DFF\"InstQueue_reg_10__5_\" <32998 <13092 >32999\n", + "1553:DFF\"InstQueue_reg_10__6_\" <33017 <13122 >33018\n", + "1538:DFF\"InstQueue_reg_10__7_\" <32995 <13087 >32996\n", + "---------------\n", + "1563:DFF\"InstQueue_reg_11__0_\" <33032 <13147 >33033\n", + "1561:DFF\"InstQueue_reg_11__1_\" <33029 <13142 >33030\n", + "1565:DFF\"InstQueue_reg_11__2_\" <33035 <13152 >33036\n", + "1559:DFF\"InstQueue_reg_11__3_\" <33026 <13137 >33027\n", + "1567:DFF\"InstQueue_reg_11__4_\" <33038 <13157 >33039\n", + "1557:DFF\"InstQueue_reg_11__5_\" <33023 <13132 >33024\n", + "1569:DFF\"InstQueue_reg_11__6_\" <33041 <13162 >33042\n", + "1555:DFF\"InstQueue_reg_11__7_\" <33020 <13127 >33021\n", + "---------------\n", + "1579:DFF\"InstQueue_reg_12__0_\" <33056 <13187 >33057\n", + "1577:DFF\"InstQueue_reg_12__1_\" <33053 <13182 >33054\n", + "1581:DFF\"InstQueue_reg_12__2_\" <33059 <13192 >33060\n", + "1575:DFF\"InstQueue_reg_12__3_\" <33050 <13177 >33051\n", + "1583:DFF\"InstQueue_reg_12__4_\" <33062 <13197 >33063\n", + "1573:DFF\"InstQueue_reg_12__5_\" <33047 <13172 >33048\n", + "1585:DFF\"InstQueue_reg_12__6_\" <33065 <13202 >33066\n", + "1571:DFF\"InstQueue_reg_12__7_\" <33044 <13167 >33045\n", + "---------------\n", + "1595:DFF\"InstQueue_reg_13__0_\" <33080 <13227 >33081\n", + "1593:DFF\"InstQueue_reg_13__1_\" <33077 <13222 >33078\n", + "1597:DFF\"InstQueue_reg_13__2_\" <33083 <13232 >33084\n", + "1591:DFF\"InstQueue_reg_13__3_\" <33074 <13217 >33075\n", + "1599:DFF\"InstQueue_reg_13__4_\" <33086 <13237 >33087\n", + "1589:DFF\"InstQueue_reg_13__5_\" <33071 <13212 >33072\n", + "1601:DFF\"InstQueue_reg_13__6_\" <33089 <13242 >33090\n", + "1587:DFF\"InstQueue_reg_13__7_\" <33068 <13207 >33069\n", + "---------------\n", + "1611:DFF\"InstQueue_reg_14__0_\" <33104 <13267 >33105\n", + "1609:DFF\"InstQueue_reg_14__1_\" <33101 <13262 >33102\n", + "1613:DFF\"InstQueue_reg_14__2_\" <33107 <13272 >33108\n", + "1607:DFF\"InstQueue_reg_14__3_\" <33098 <13257 >33099\n", + "1615:DFF\"InstQueue_reg_14__4_\" <33110 <13277 >33111\n", + "1605:DFF\"InstQueue_reg_14__5_\" <33095 <13252 >33096\n", + "1617:DFF\"InstQueue_reg_14__6_\" <33113 <13282 >33114\n", + "1603:DFF\"InstQueue_reg_14__7_\" <33092 <13247 >33093\n", + "---------------\n", + "1627:DFF\"InstQueue_reg_15__0_\" <33128 <13307 >33129\n", + "1625:DFF\"InstQueue_reg_15__1_\" <33125 <13302 >33126\n", + "1629:DFF\"InstQueue_reg_15__2_\" <33131 <13312 >33132\n", + "1623:DFF\"InstQueue_reg_15__3_\" <33122 <13297 >33123\n", + "1631:DFF\"InstQueue_reg_15__4_\" <33134 <13317 >33135\n", + "1621:DFF\"InstQueue_reg_15__5_\" <33119 <13292 >33120\n", + "1633:DFF\"InstQueue_reg_15__6_\" <33137 <13322 >33138\n", + "1619:DFF\"InstQueue_reg_15__7_\" <33116 <13287 >33117\n" + ] + } + ], + "source": [ + "for l in b15_prim.s_locs('InstQueue_reg'):\n", + " print('---------------')\n", + " for i in l:\n", + " print(b15_prim.s_nodes[i])" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1524,16 +2488,20 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[0:__fork__\"a\" >3 >9, 1:__fork__\"b\" >4 >10, 2:__fork__\"s\" <5, 4:DFF\"cin\" <1 >0]" + "[5:input\"clk\" >3,\n", + " 7:input\"a\" >4,\n", + " 9:input\"b\" >5,\n", + " 11:output\"s\" <2,\n", + " 0:DFF\"carry\" <1 <3 >12]" ] }, - "execution_count": 39, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1555,19 +2523,20 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[0, 3, 0, 3, 0, 3, 0, 3],\n", + "array([[0, 0, 0, 0, 0, 0, 0, 0],\n", + " [0, 3, 0, 3, 0, 3, 0, 3],\n", " [0, 0, 3, 3, 0, 0, 3, 3],\n", " [2, 2, 2, 2, 2, 2, 2, 2],\n", " [0, 0, 0, 0, 3, 3, 3, 3]], dtype=uint8)" ] }, - "execution_count": 40, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -1575,7 +2544,7 @@ "source": [ "from kyupy import logic\n", "\n", - "inputs = logic.mvarray('00-0', '10-0', '01-0', '11-0', '00-1', '10-1', '01-1', '11-1')\n", + "inputs = logic.mvarray('000-0', '010-0', '001-0', '011-0', '000-1', '010-1', '001-1', '011-1')\n", "inputs" ] }, @@ -1593,16 +2562,16 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(4, 8)" + "(5, 8)" ] }, - "execution_count": 41, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1620,21 +2589,21 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "00-0\n", - "10-0\n", - "01-0\n", - "11-0\n", - "00-1\n", - "10-1\n", - "01-1\n", - "11-1\n" + "000-0\n", + "010-0\n", + "001-0\n", + "011-0\n", + "000-1\n", + "010-1\n", + "001-1\n", + "011-1\n" ] } ], @@ -1651,7 +2620,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -1664,7 +2633,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -1673,7 +2642,7 @@ "528" ] }, - "execution_count": 44, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1684,7 +2653,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -1693,7 +2662,7 @@ "(528, 678)" ] }, - "execution_count": 45, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1704,7 +2673,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -1713,7 +2682,7 @@ "(528, 678)" ] }, - "execution_count": 46, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -1724,18 +2693,18 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "------------------------------------------------------------------------------------------------------0----00--000111100110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "--------------------------------------1100011011011111--------10111110--------------------------------P-00000--0101110000110100101100010011111-01----110---110-110---110-11001100110-11101010011010-10-1010-1010101010-10-10-1010-10-10-10-101-10101010101010-10-10100-0101011011-01-1110110111011101-101-111011101-111011101-11101010100-10-1010-101010010-1001--0100-100110000111100001-111111-000011100000-101-01000011110-11-00100001111111-000101010010001000----1----1-----1---11------------101010101010-1010-1010101010101--10-110111111\n", - "---------------------------------------1-1--1--1---1--1000100000000011--------------------------------P-10-00--11000011011110101101101110011001---0--01-1111111111111111--1111110-111011111-111---11--11-1--1--------------------------------000000001---1----1--010-1-1---101011001111110101001-0-0-0-1-0-1-0-011-0-1-000-1-001-10001011111111111111111110111101101----1----------1------------------------------------------------------1101110001111111-----111-----1-111-0-1-1----------------------1------1-1-------------1--011-0101111111\n", - "------------------------------------------------------------------------------------------------------P111100--110110110000-100-1---0000000-0---0-----0--0-0-1-0-1-0-0-1---1-0-1-------0-01-11---0-0--00-0-00--------------------------------00110011000001100011111001100010--0011------------1---------------------0-1-----1---1-1-1-111111111111111101000100-001000011001-----1--111111--1--11--111--011--------------------------------0-------0-0----------------------------------------------------------------------------10-110-1111010\n", - "--------------------------------------1011011111010000--------00101101--------------------------------P001100--1000110001111101010010101100-100-1-10101-1-1-1-1-1-1-1-1-101-1-1-100-000----0--00--1-0---------------------------------------------1--------------------------10-0--00001-011001-001-0011001-0-0-010-001-1-0110101-1-1-0-00000000000011--1-11-111-1----1--------------0--00---00-01---00-0----00-00---11-00--00000001011-001-00-01---00100--11100---00-00---00-00---------1100------------------0---------------0--11------000---\n" + "------------------------------------------------------------------------------------------------------0----00--000110110011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "--------------------------------------1100011011011111--------10111110--------------------------------P-00000--0101111000011010-01----110---110-110---110-11001100110-11101010011010-10-1010-1010101010-10-10-1010-10-10-10-101-10101010101010-10-10100-01010101011-01-11101110111011101-101-111011101-111011101-111010101000-10-1010-101010010-10011--0100-100110000111100001-111111-000011100000-101-01000011110-11-001000011111111-0001010100010001000----1----1-----1---11-----------00-101010101010-1010-1010101010101--10-1101010111111111\n", + "---------------------------------------1-1--1--1---1--1000100000000011--------------------------------P-10-00--11000001101111011---0--01-1111111111111111--1111110-111011111-111---11--11-1--1--------------------------------000000001---1----1--010-1-1---10010110011111110101001-0-0-0-1-0-1-0-011-0-1-000-1-001-1000101111111111111111111101111001101----1----------1-----------------------------------------------------1-11011100011111111-----111-----1-111-0-1-1----------------01------1------1-1-------------1--011-01011110011101111\n", + "------------------------------------------------------------------------------------------------------P111100--11011-0110000-10--0-----0--0-0-1-0-1-0-0-1---1-0-1-------0-01-11---0-0--00-0-00--------------------------------001100110000011000111110011000100--0011-------------1---------------------0-1-----1---1-1-1-1111111111111111101000100--001000011001-----1--111111--1--11--111--011---------------------------------0-------0-0---------------------------------------------00--------------------------------10-110-10010010-01010\n", + "--------------------------------------1011011111010000--------00101101--------------------------------P001100--10001010001111100-1-10101-1-1-1-1-1-1-1-1-101-1-1-100-000----0--00--1-0---------------------------------------------1--------------------------110-0--00001-0011001-001-0011001-0-0-010-001-1-0110101-1-1-0-100000000000011--1-11-1110-1----1--------------0--00---00-01---00-0----00-00---11-00--00000001011-0001-00-01---001001--11100---00-00---00-00---------1100-----01-------------0---------------0--11------0101000-10---\n" ] } ], @@ -1745,18 +2714,18 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0000111100110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "X0101010101010101X0101X01010101010XX11--------------------------------001X01X01X01X0101X01X01X01010101--------X0001001100000100001100110011111X01XXXX110XXX110X110XXX110X11001100110X11101010011010X10X1010X1010101010X10X10X1010X10X10X10X101X10101010101010X10X10100X0101011110X00X0100100010001000X000X010001000X010001000X01000000000X10X1010X101010010X1000XX0100X100110000111100001X111111X000011100000X101X01000011110X11X00100001111111X00010101001000100011110110111101101100000110011101X101010101010X1010X10101010101011X100110111111\n", - "1X11XX1XXXXXXXXXXXXX1X1XXXXXX1XXXX1X1X--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------101010011011100111001101110011100011111100000000000000000011000000110000000001000110000000001000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000001XXX1XXXX1XX010X1X1XXX101011001111110101001X0X0X0X1X0X1X0X011X0X1X000X1X001X10001010000000000000000001111101010XXXX1XXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1101110001111111XXXXX111XXXXX1X111X0X1X1XXXXXXXXXXXXXXXX1000010010001010010100101101100110010010000101\n", - "0101XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0X0X--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------01101111100000000X1XXX1001010X0X0X0XXXXX0XX0X0X1X0X1X0X0X1XXX1X0X1XXXXXXX0X01X11XXX0X0XX00X0X00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01110011000001100011111001100010XX0011XXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXX0X1XXXXX1XXX1X1X1X111111111111111101000100X001000011001XXXXX1XX111111XX1XX11XX111XX011XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XXXXXXX0X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX10111001111010\n", - "1XXXXX0XXXXXXXXXXXXXXX0XXXXXXXXXXX1XXX--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------10001101101001101010011001100X100X1X10101X1X1X1X1X1X1X1X1X101X1X1X100X000XXXX0XX00XX1X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXX10X0XX00101X011001X001X0011001X0X0X010X001X1X0110101X1X1X0X00000000000011XX1X11X111X1XX1000101111100010X0XX00XXX00X01XXX00X0XXXX00X00XXX11X00XX00000001011X001X00X01XXX00100XX11100XXX00X00XXX00X00XX011011000110110011XXXXXXXXXXX0XXXXXXXXXXXXXXX0XX010X1X1X000XXX\n" + "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0000110110011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "X0101010101010101X0101X01010101010XX11--------------------------------001X01X01X01X0101X01X01X01010101--------X0001010110000010X01XXXX110XXX110X110XXX110X11001100110X11101010011010X10X1010X1010101010X10X10X1010X10X10X10X101X10101010101010X10X10100X01010101110X00X01000100010001000X000X010001000X010001000X010000000000X10X1010X101010010X10001XX0100X100110000111100001X111111X000011100000X101X01000011110X11X001000011111111X00010101000100010001111011011110110110000011001110101X101010101010X1010X10101010101011X1001101010111111111\n", + "1X11XX1XXXXXXXXXXXXX1X1XXXXXX1XXXX1X1X--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------101010001101110010011111100000000000000000011000000110000000001000110000000001000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000001XXX1XXXX1XX010X1X1XXX10110110011111110101001X0X0X0X1X0X1X0X011X0X1X000X1X001X1000101000000000000000000011111001010XXXX1XXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X11011100011111111XXXXX111XXXXX1X111X0X1X1XXXXXXXXXXXXXXXX0110000100100010100101001011011001100100101100001110101\n", + "0101XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0X0X--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------011011X11100000000X0XXXXX0XX0X0X1X0X1X0X0X1XXX1X0X1XXXXXXX0X01X11XXX0X0XX00X0X00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX011100110000011000111110011000100XX0011XXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXX0X1XXXXX1XXX1X1X1X1111111111111111101000100XX001000011001XXXXX1XX111111XX1XX11XX111XX011XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XXXXXXX0X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX10X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX101110010110110X01010\n", + "1XXXXX0XXXXXXXXXXXXXXX0XXXXXXXXXXX1XXX--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------100011001101001100X1X10101X1X1X1X1X1X1X1X1X101X1X1X100X000XXXX0XX00XX1X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXX110X0XX00101X0011001X001X0011001X0X0X010X001X1X0110101X1X1X0X100000000000011XX1X11X1110X1XX1000101111100010X0XX00XXX00X01XXX00X0XXXX00X00XXX11X00XX00000001011X0001X00X01XXX001001XX11100XXX00X00XXX00X00XX01101100011011001011XXXXXXXXXXX0XXXXXXXXXXXXXXX0XX010X1X1X0101000X10XXX\n" ] } ], @@ -1780,7 +2749,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 53, "metadata": {}, "outputs": [], "source": [ @@ -1799,18 +2768,18 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "------------------------------------------------------------------------------------------------------X----XX--000111100110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "--------------------------------------RFRRRRFRRFRRRR1R--------RXXRXRRR--------------------------------00F0F00--RR1RRRF00011010011RXXRFXXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11X00XXX101XX1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRXRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000000000000111111000001001XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n", - "--------------------------------------1X111XX11X1XX1X11XX11XX111X11X11--------------------------------0-XXR00--F1FF10110011X01FX1F0X0001R10FFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XFFX1XFXFFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFX0XFXFXFXF1110XX1XX1XXXXXXX1XXXX1XR1F1XXXXXXXXXXXXXXXXX01110111100010110111011111000100100010001010101101101110111000X1XX11XXXXXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0X011111111111111111111111111111R0F1R0R0R01XXX\n", - "--------------------------------------------------------------XXXXXXXX--------------------------------0--FX00--F11F1FRR00R01110X10XX110001111X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXRX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11111111111111111111110XXX10XXXXXXXXXRXXXRXRF1FFFRFRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01100101111111\n", - "--------------------------------------------------------------FFXFFFFF--------------------------------0XXRR00--RF01FRF00001XX101XXX10RXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX10X01011111111X111111111111111X11100XX0101XXXXXX01XXXX01XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X1111X11011111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" + "------------------------------------------------------------------------------------------------------X----XX--000110110011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "--------------------------------------RFRRRRFRRFRRRR1R--------RXXRXRRR--------------------------------00F0F00--RR1RRXRF00011010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX011X00XXX101X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X1X0XXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXRRXRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000000000000111111000001001RFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11XXXXX\n", + "--------------------------------------1X111XX11X1XX1X11XX11XX111X11X11--------------------------------0-XXR00--F1FF1X0110011X01XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFXX1XFFX1XFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFXFX0XFXFXFXF11110XX1XX1XXXXXXX1XXXX1XFR1F1XXXXXXXXXXXXXXXXX011101111000101101110111110001001000100010101011011001110111000X1XX11XXXXXXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000X011111111111111111111111111111R0F1R0R001RR100FF1XXX\n", + "--------------------------------------------------------------XXXXXXXX--------------------------------0--FX00--F11F1XFRR00R01111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XX1XXXXXRX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX111111111111111111111110X0XX10XXXXXXXXXRXXXRXRF1FFFRFRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX011001010010111111111\n", + "--------------------------------------------------------------FFXFFFFF--------------------------------0XXRR00--RF01FXRF00001XX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010X010111111111X111111111111111X11100XX0101XXXXXX01XXXX01XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X1111X110111111XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0RXRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXX\n" ] } ], @@ -1820,18 +2789,18 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0000111100110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------X0100101100000100011XX10XXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11X00XXX000XX0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11111111111111111000000111110110X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0X0X0X1XXXXXXX\n", - "0100111111111111111111111111111110101X--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------10101101100110010X000X001000001X000X0X0X1X0X0X1X0X0X0X1X1X0X0X1X1X010110100110001XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X00X1X0X00X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X00001XX1XX1XXXXXXX1XXXX1X1000XXXXXXXXXXXXXXXXX01110111100010110111011111000100100010001010101101101110111000X1XX11XXXXXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1010000000000000000000000000000011101101000XXX\n", - "1011XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------X0010101100100010X00XX110100111X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXX1X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00000000000000000000001XXX11XXXXXXXX0100010101000101XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX101XXXXXXXXXXXXXXXXXXXXXXXXXXXXX00110000000100\n", - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------X010001100101XX100X1X001XXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00X001100000000000000000000000000011XX1111XXXXXX11XXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXX1X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX010000000100000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X0X0X1XXXXXXX\n" + "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0000110110011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------X01001X0110000010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX011X00XXX000X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X1XXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXX11X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1111111111111111100000011111011010X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0X0X0X1XXXXXXX11XXXXX\n", + "0100111111111111111111111111111110101X--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------101011X0110011001000X0X0X1X0X0X1X0X0X0X1X1X0X0X1X1X010110100110001XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XX1X00X1X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X0X000001XX1XX1XXXXXXX1XXXX1X01000XXXXXXXXXXXXXXXXX011101111000101101110111110001001000100010101011011001110111000X1XX11XXXXXXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0010100000000000000000000000000000111011011000000010XXX\n", + "1011XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------X00101X01100100010XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XX1XXXXX1X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000000000000000000001X0XX11XXXXXXXX0100010101000101XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX11101XXXXXXXXXXXXXXXXXXXXXXXXXXXXX001100000100001110100\n", + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1--------------------------------0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------X01000X1100101XX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000X0011000000000000000000000000000011XX1111XXXXXX11XXXX11XXXXXXXXXXXXXXXXXXXXXXXXXXXX11X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0100000001000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X0X0X1XXXXXXXX0XXXXX\n" ] } ], @@ -1848,10 +2817,12 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 56, "metadata": {}, "outputs": [], "source": [ + "import numpy as np\n", + "\n", "def zero_fill(mva):\n", " return np.choose(mva, logic.mvarray('0X01PRFN')) # maps '0X-1PRFN' -> '0X01PRFN'\n", "\n", @@ -1860,18 +2831,18 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111100110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "00000000000000000000000000000000000000RFRRRRFRRFRRRR1R00000000RRRRRRRR0000000000000000000000000000000000F0F0000RR1RRRF00011010011R00RF00001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000101001010101010101010101010101010101010101000000000000000000000000000000000R0R00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111110000010010R000000000000000000000000000000R00000R0000000\n", - "00000000000000000000000000000000000000101110011010010110011001110110110000000000000000000000000000000000R0R0000F1FF10110011001F01F000001R10FF00RR0R0R000R0R000R0R0R00000R0R00000R0R00R0RR00RRR00000000000000000000000000000000000000000000000000000000000000000000000000000000010FF010F0FF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000F0F0F0F111000100100000001000010R1F100000000000000000011101111000101101110111110001001000100010101011011011101110000100110000000110000000000000000000000000000000000011111111111111111111111111111R0F1R0R0R01000\n", - "000000000000000000000000000000000000000000000000000000000000000FF00F0000000000000000000000000000000000000F00000F11F1FRR00R01110010001100011110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000R010000000000000000000000000000000000000000000000001111111111111111111111000010000000000R000R0RF1FFFRFR0000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000001100101111111\n", - "00000000000000000000000000000000000000000000000000000000000000FFRFFFFF00000000000000000000000000000000000RR0000RF01FRF00001001010R010R00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011111111011111111111111101110000010100000001000001000000000000000000000000000R0R00000000000000000000000000000000000000000000000000000000000000000000000010111101101111100000000000000000000000000000000000000000R000000000000000000000000000000R0R000R0000000\n" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110110011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "00000000000000000000000000000000000000RFRRRRFRRFRRRR1R00000000RRRRRRRR0000000000000000000000000000000000F0F0000RR1RR0RF00011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000010101010101010101010101010101010101010101010000000001000000000000000000000000RR0R000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111000001001RF0R000000000000000000000000000000R00000R00000001100000\n", + "00000000000000000000000000000000000000101110011010010110011001110110110000000000000000000000000000000000R0R0000F1FF1001100110010RR0R0R000R0R000R0R0R00000R0R00000R0R00R0RR00RRR0000000000000000000000000000000000000000000000000000000000000000000000000000000F0010FF010F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F000F0F0F0F1111000100100000001000010FR1F1000000000000000000111011110001011011101111100010010001000101010110110011101110000100110000000011000000000000000000000000000000000000011111111111111111111111111111R0F1R0R001RR100FF1000\n", + "000000000000000000000000000000000000000000000000000000000000000FF00F0000000000000000000000000000000000000F00000F11F10FRR00R01111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000R010000000000000000000000000000000000000000000000000111111111111111111111110000010000000000R000R0RF1FFFRFR000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001101000000000000000000000000000000011001010010111111111\n", + "00000000000000000000000000000000000000000000000000000000000000FFRFFFFF00000000000000000000000000000000000RR0000RF01F0RF00001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000101111111110111111111111111011100000101000000010000010000000000000000000000000000RR0R0000000000000000000000000000000000000000000000000000000000000000000000000101111011011111100000000000000000000000000000000000000000R0R000000000000000000000000000000R0R000R00000001000000\n" ] } ], @@ -1893,7 +2864,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -1902,7 +2873,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -1911,7 +2882,7 @@ "(528, 3, 85)" ] }, - "execution_count": 55, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -1931,7 +2902,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 60, "metadata": {}, "outputs": [ { @@ -1940,7 +2911,7 @@ "(528, 680)" ] }, - "execution_count": 56, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } @@ -1960,7 +2931,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ @@ -1976,18 +2947,18 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------010X11XXX0110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "-0101010101010101-0101-01010101010--11--------------------------------001-01-01X01-0101-01-01-01010101---------0001001100000100001100110011111X01XXXX110XXX110X110XXX110X11001100110X11101010011010X10X1010X1010101010X10X10X1010X10X10X10X101X10101010101010X10X10100X0101011110X00X0100100010001000X000X010001000X010001000X01000000000X10X1010X101010010X1000XX0100X100110000111100001X111111X000011100000X101X01000011110X11X00100001111111X00010101001000100011110110111101101100000110011101X101010101010X1010X10101010101011X100110111111\n", - "1-11--1-------------1-1------1----1-1---------------------------------0--------X------------------------------101010011011100111001101110011100011111100000000000000000011000000110000000001000110000000001000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000001XXX1XXXX1XX010X1X1XXX101011001111110101001X0X0X0X1X0X1X0X011X0X1X000X1X001X10001010000000000000000001111101010XXXX1XXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1101110001111111XXXXX111XXXXX1X111X0X1X1XXXXXXXXXXXXXXXX1000010010001010010100101101100110010010000101\n", - "0101------------------------------0-0---------------------------------0--------X------------------------------01101111100000000X1XXX1001010X0X0X0XXXXX0XX0X0X1X0X1X0X0X1XXX1X0X1XXXXXXX0X01X11XXX0X0XX00X0X00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01110011000001100011111001100010XX0011XXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXX0X1XXXXX1XXX1X1X1X111111111111111101000100X001000011001XXXXX1XX111111XX1XX11XX111XX011XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XXXXXXX0X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX10111001111010\n", - "1-----0---------------0-----------1-----------------------------------0--------X------------------------------10001101101001101010011001100X100X1X10101X1X1X1X1X1X1X1X1X101X1X1X100X000XXXX0XX00XX1X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXX10X0XX00101X011001X001X0011001X0X0X010X001X1X0110101X1X1X0X00000000000011XX1X11X111X1XX1000101111100010X0XX00XXX00X01XXX00X0XXXX00X00XXX11X00XX00000001011X001X00X01XXX00100XX11100XXX00X00XXX00X00XX011011000110110011XXXXXXXXXXX0XXXXXXXXXXXXXXX0XX010X1X1X000XXX\n" + "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------010X110XXX011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "-0101010101010101-0101-01010101010--11--------------------------------001-01-01X01-0101-01-01-01010101---------0001010110000010X01XXXX110XXX110X110XXX110X11001100110X11101010011010X10X1010X1010101010X10X10X1010X10X10X10X101X10101010101010X10X10100X01010101110X00X01000100010001000X000X010001000X010001000X010000000000X10X1010X101010010X10001XX0100X100110000111100001X111111X000011100000X101X01000011110X11X001000011111111X00010101000100010001111011011110110110000011001110101X101010101010X1010X10101010101011X1001101010111111111\n", + "1-11--1-------------1-1------1----1-1---------------------------------0--------X------------------------------101010001101110010011111100000000000000000011000000110000000001000110000000001000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX000000001XXX1XXXX1XX010X1X1XXX10110110011111110101001X0X0X0X1X0X1X0X011X0X1X000X1X001X1000101000000000000000000011111001010XXXX1XXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1X11011100011111111XXXXX111XXXXX1X111X0X1X1XXXXXXXXXXXXXXXX0110000100100010100101001011011001100100101100001110101\n", + "0101------------------------------0-0---------------------------------0--------X------------------------------011011X11100000000X0XXXXX0XX0X0X1X0X1X0X0X1XXX1X0X1XXXXXXX0X01X11XXX0X0XX00X0X00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX011100110000011000111110011000100XX0011XXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXX0X1XXXXX1XXX1X1X1X1111111111111111101000100XX001000011001XXXXX1XX111111XX1XX11XX111XX011XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XXXXXXX0X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX10X1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX101110010110110X01010\n", + "1-----0---------------0-----------1-----------------------------------0--------X------------------------------100011001101001100X1X10101X1X1X1X1X1X1X1X1X101X1X1X100X000XXXX0XX00XX1X0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXXXXXXXXXXXXXXXXXXXXXXXX110X0XX00101X0011001X001X0011001X0X0X010X001X1X0110101X1X1X0X100000000000011XX1X11X1110X1XX1000101111100010X0XX00XXX00X01XXX00X0XXXX00X00XXX11X00XX00000001011X0001X00X01XXX001001XX11100XXX00X00XXX00X00XX01101100011011001011XXXXXXXXXXX0XXXXXXXXXXXXXXX0XX010X1X1X0101000X10XXX\n" ] } ], @@ -2010,7 +2981,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 63, "metadata": {}, "outputs": [ { @@ -2019,7 +2990,7 @@ "677" ] }, - "execution_count": 59, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" } @@ -2039,7 +3010,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ @@ -2053,18 +3024,18 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0100110010110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "0000000000000000000000000000000000000R--------------------------------00000000000000000000000000000000--------0FNFFNFRR0PFF0100FNN00NP000PNN0P0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000NNP0PP00F0FPPFPFPFPFPFPFPFPFPFPFPFPFPFPFPF0F0F0F0FPRP0P0P0P000000000000000000000000NPNP0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000RRRRRRRRRRRRRRRRRFFFFFFRRRRRFRRFPNP00000000000000000000000000000FPP000NP000000\n", - "01001111111111111111111111111111101010--------------------------------00000000000000000000000000000000--------1PNPRNPNN0011001P0FP00PPRFFF0PR0PFF0F0F0R0F0F0R0F0F0F0R0R0F0F0R0R0FRFRRFRFFRRFFFR000000000000000PP0PP0PPP00PP00P0000000000000000000000000000000000000000000000000N0PP0N0P0PP0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P000P0P0P0PFFFR00N00N0000000N0000N0NFPF000000000000000000111011110001011011101111100010010001000101010110110111011100001001100000001100000000000000000000000000000000RPRFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNRRFNRFRFPF000\n", - "10110000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0PFNP1PNNPPNPFFNPPFPP0110RPFNNNPF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000PPNP00PPNPNPP0P0P0P0P0P0P0P0P0P0P0P0P0P0P000000000000000000FFFFFFFFFFFFFFFFFFFFFFR0PRNR000000000N000N0NPNPPPNPN0P000P0P0P000P0P0P000P0P0P000P0P0P000P0P0PN000P0000000000000000000000000000000000000000000000000000000RFR000000000000000000000000000000F1R0F0FFFFNFF\n", - "0000000000000000000000000000000000000R--------------------------------00000000000000000000000000000000--------0FRPFPNRP0RPN00N0FPN0F0N000PF00P0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00PFRNFFFFFFFPFFFFFFFFFFFFFFFPFFFRRP0RNRN000000RN0000RN000P0PPPPPPP0P0000000000000N0N000000000000000000000000000000000000000000000000000000000000000000000000FRFFFFPFFRFFFFFPPPPPPPPPPPPPPPP0000000000000000000000000N000000000000000000000000000000N0F000N00PPP00\n" + "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0100110001011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "0000000000000000000000000000000000000R--------------------------------00000000000000000000000000000000--------0FNFFNPFRR0PFF01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000NNP0PP00F0FPFPFPFPFPFPFPFPFPFPFPFPFPFPFPFPF0F0F0F0FPRP0P0P0PN000000000000000000000000NNPNP000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000RRRRRRRRRRRRRRRRRFFFFFFRRRRRFRRFNPPNP00000000000000000000000000000FPP000NP0000P0NN00000\n", + "01001111111111111111111111111111101010--------------------------------00000000000000000000000000000000--------1PNPRN0PNN0011001PFF0F0F0R0F0F0R0F0F0F0R0R0F0F0R0R0FRFRRFRFFRRFFFR000000000000000PP0PP0PPP00PP00P00000000000000000000000000000000000000000000000P00N0PP0N0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P0P000P0P0P0PFFFFR00N00N0000000N0000N0PNFPF00000000000000000011101111000101101110111110001001000100010101011011001110111000010011000000001100000000000000000000000000000000PPRPRFFFFFFFFFFFFFFFFFFFFFFFFFFFFFNRRFNRFRRFFFFP0PRF000\n", + "10110000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0PFNP1PPNNPPNPFFNF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000PPPNP00PPNPNPPP0P0P0P0P0P0P0P0P0P0P0P0P0P0P000000000000000000FFFFFFFFFFFFFFFFFFFFFFFR0PPRNR000000000N000N0NPNPPPNPN0P000P0P0P000P0P0P000P0P0P000P0P0P000P0P0PN00P0P0000000000000000000000000000000000000000000000000000000011RFR000000000000000000000000000000F1R0F0F0RFPFFNNNFNFF\n", + "0000000000000000000000000000000000000R--------------------------------00000000000000000000000000000000--------0FRPFPPNRP0RPN00N00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00PFRNFFFFFFFFPFFFFFFFFFFFFFFFPFFFRRP0RNRN000000RN0000RN000PP0PPPPPPP0P0000000000000NN0N0000000000000000000000000000000000000000000000000000000000000000000000000FRFFFFPFFRFFFFFFPPPPPPPPPPPPPPPP0000000000000000000000000N0N000000000000000000000000000000N0F000N00000PPF00PP00\n" ] } ], @@ -2083,18 +3054,18 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0100110010110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "00000000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0010010110000010001100100000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000001000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111110000001111101100100000000000000000000000000000000000010000000\n", - "01001111111111111111111111111111101010--------------------------------00000000000000000000000000000000--------1010110110011001000000001000001000000000100000100000001010000010100101101001100010000000000000000000000000000000000000000000000000000000000000000000000000000000010000100000000000000000000000000000000000000000000000000000010010010000000100001010000000000000000000001110111100010110111011111000100100010001010101101101110111000010011000000011000000000000000000000000000000001010000000000000000000000000000011101101000000\n", - "10110000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0001010110010001000000110100111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010100000000000000000000000000000000000000000000000000000000000000000000001001110000000001000101010001010000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000110000000100\n", - "00000000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0010001100101001000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000110011110000001100001100000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000100000000000000000000000000000010000010000000\n" + "11001100110011001100110011001100110000--------------------------------01001100110011001100110011001100--------0100110001011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "00000000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0010010011000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000010000000100000000000000000000000011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111110000001111101101001000000000000000000000000000000000000100000001100000\n", + "01001111111111111111111111111111101010--------------------------------00000000000000000000000000000000--------1010110011001100100000000100000100000001010000010100101101001100010000000000000000000000000000000000000000000000000000000000000000000000000000000001000010000000000000000000000000000000000000000000000000000000010010010000000100001001000000000000000000000111011110001011011101111100010010001000101010110110011101110000100110000000011000000000000000000000000000000000010100000000000000000000000000000111011011000000010000\n", + "10110000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0001010011001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001010000000000000000000000000000000000000000000000000000000000000000000000001000111000000000100010101000101000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001110100000000000000000000000000000001100000100001110100\n", + "00000000000000000000000000000000000001--------------------------------00000000000000000000000000000000--------0010000110010100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000001100111100000011000011000000000000000000000000000011010000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000101000000000000000000000000000000100000100000000000000\n" ] } ], @@ -2116,7 +3087,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 67, "metadata": {}, "outputs": [ { @@ -2125,7 +3096,7 @@ "1146" ] }, - "execution_count": 63, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -2156,14 +3127,14 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "from kyupy import sdf\n", "\n", "df = sdf.load('../tests/b15_2ig.sdf.gz')\n", - "delays = df.iopaths(b15)[0]" + "delays = df.iopaths(b15, tlib=SAED32)[0]" ] }, { @@ -2175,7 +3146,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 69, "metadata": {}, "outputs": [ { @@ -2184,7 +3155,7 @@ "(32032, 2, 2)" ] }, - "execution_count": 65, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -2202,7 +3173,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 70, "metadata": {}, "outputs": [ { @@ -2211,7 +3182,7 @@ "79010" ] }, - "execution_count": 66, + "execution_count": 70, "metadata": {}, "output_type": "execute_result" } @@ -2239,7 +3210,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 71, "metadata": {}, "outputs": [], "source": [ @@ -2257,7 +3228,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 72, "metadata": {}, "outputs": [ { @@ -2294,7 +3265,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ @@ -2337,7 +3308,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 74, "metadata": {}, "outputs": [ { @@ -2346,7 +3317,7 @@ "(11, 528, 128)" ] }, - "execution_count": 70, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -2364,18 +3335,18 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "110011001100110011001100110011001100000000000000000000000000000000000001001100110011001100110011001100000000000100110010110100101010111010100011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011000111010010111001011010010110100101101001011010010110100101101100110011001101100110000100101010101010101010101010101010101010101010101010101010101010101010100101010101010101101010101010101010101010101010101010101010011001100110011001100110011001111110000010100\n", - "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010010110000010001100100000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000001000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111110000001111101100100000000000000000000000000000000000010000000\n", - "010011111111111111111111111111111010100000000000000000000000000000000000000000000000000000000000000000000000001010110110011001000000001000001000000000100000100000001010000010100101101001100010000000000000000000000000000000000000000000000000000000000000000000000000000000010000100000000000000000000000000000000000000000000000000000010010010000000100001010000000000000000000001110111100010110111011111000100100010001010101101101110111000010011000000011000000000000000000000000000000001010000000000000000000000000000011101101000000\n", - "101100000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000001010110010001000000110100111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010100000000000000000000000000000000000000000000000000000000000000000000001001110000000001000101010001010000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000110000000100\n", - "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010001100101001000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000110011110000001100001100000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000100000000000000000000000000000010000010000000\n" + "110011001100110011001100110011001100000000000000000000000000000000000001001100110011001100110011001100000000000100110001011010011101101001011010010110100101101001001100110011001100110011001100011001100110011001100110011001110011001100110011001100110011001011101001011010010110100101101001011010010110100101101001011101100110011001101100110000010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011100110011001100110011001100110011111100001001011000100\n", + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010010011000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000010000000100000000000000000000000011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111110000001111101101001000000000000000000000000000000000000100000001100000\n", + "010011111111111111111111111111111010100000000000000000000000000000000000000000000000000000000000000000000000001010110011001100100000000100000100000001010000010100101101001100010000000000000000000000000000000000000000000000000000000000000000000000000000000001000010000000000000000000000000000000000000000000000000000000010010010000000100001001000000000000000000000111011110001011011101111100010010001000101010110110011101110000100110000000011000000000000000000000000000000000010100000000000000000000000000000111011011000000010000\n", + "101100000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000001010011001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001010000000000000000000000000000000000000000000000000000000000000000000000001000111000000000100010101000101000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001110100000000000000000000000000000001100000100001110100\n", + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010000110010100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000001100111100000011000011000000000000000000000000000011010000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000101000000000000000000000000000000100000100000000000000\n" ] } ], @@ -2393,7 +3364,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 76, "metadata": {}, "outputs": [ { @@ -2402,7 +3373,7 @@ "127" ] }, - "execution_count": 72, + "execution_count": 76, "metadata": {}, "output_type": "execute_result" } @@ -2422,7 +3393,7 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 77, "metadata": {}, "outputs": [ { @@ -2431,7 +3402,7 @@ "1.0424000024795532" ] }, - "execution_count": 73, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } @@ -2449,7 +3420,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 78, "metadata": {}, "outputs": [ { @@ -2458,7 +3429,7 @@ "0.0" ] }, - "execution_count": 74, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -2476,7 +3447,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 79, "metadata": {}, "outputs": [ { @@ -2485,7 +3456,7 @@ "0" ] }, - "execution_count": 75, + "execution_count": 79, "metadata": {}, "output_type": "execute_result" } diff --git a/src/kyupy/circuit.py b/src/kyupy/circuit.py index 65ebfbb..409088b 100644 --- a/src/kyupy/circuit.py +++ b/src/kyupy/circuit.py @@ -176,7 +176,11 @@ class Line: To keep the indices consecutive, the line with the highest index within the circuit will be assigned the index of the removed line. """ - if self.driver is not None: self.driver.outs[self.driver_pin] = None + if self.driver is not None: + self.driver.outs[self.driver_pin] = None + if self.driver.kind == '__fork__': # squeeze outputs + del self.driver.outs[self.driver_pin] + for i, l in enumerate(self.driver.outs): l.driver_pin = i if self.reader is not None: self.reader.ins[self.reader_pin] = None if self.circuit is not None: del self.circuit.lines[self.index] self.driver = None @@ -564,6 +568,7 @@ class Circuit: from graphviz import Digraph dot = Digraph(format=format, graph_attr={'rankdir': 'LR', 'splines': 'true'}) + s_dict = dict((n, i) for i, n in enumerate(self.s_nodes)) node_level = np.zeros(len(self.nodes), dtype=np.uint32) level_nodes = defaultdict(list) for n, lv in self.topological_order_with_level(): @@ -576,7 +581,8 @@ class Circuit: for n in level_nodes[lv]: ins = '|'.join([f'{i}' for i in range(len(n.ins))]) outs = '|'.join([f'{i}' for i in range(len(n.outs))]) - s.node(name=str(n.index), label = f'{{{{{ins}}}|{n.index}\n{n.kind}\n{n.name}|{{{outs}}}}}', shape='record') + io = f' [{s_dict[n]}]' if n in s_dict else '' + s.node(name=str(n.index), label = f'{{{{{ins}}}|{n.index}{io}\n{n.kind}\n{n.name}|{{{outs}}}}}', shape='record') for l in self.lines: driver, reader = f'{l.driver.index}:o{l.driver_pin}', f'{l.reader.index}:i{l.reader_pin}'