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"
+ ],
"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"
+ ],
+ "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"
+ ],
+ "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}'