{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sizing of clock meshes\n", "\n", "Original by Lieven Vanderberghe.
\n", "Adapted to CVX by Argyris Zymnis, 12/4/2005.
\n", "Modified by Michael Grant, 3/8/2006.
\n", "Adapted to CVXPY, with cosmetic modifications, by Judson Wilson, 5/26/2014.
\n", "\n", "Topic References:\n", "\n", "* Section 4, L. Vandenberghe, S. Boyd, and A. El Gamal
\n", " \"Optimal Wire and Transistor Sizing for Circuits with Non-Tree Topology\"\n", "\n", "## Introduction\n", "\n", "We consider the problem of sizing a clock mesh, so as to minimize the\n", "total dissipated power under a constraint on the dominant time constant.\n", "The numbers of nodes in the mesh is $N$ per row or column (thus $n=(N+1)^2$\n", "in total). We divide the wire into m segments of width $x_i$, $i = 1,\\dots,m$\n", "which is constrained as $0 \\le x_i \\le W_{\\mbox{max}}$. We use a pi-model of each wire\n", "segment, with capacitance $\\beta_i x_i$ and conductance $\\alpha_i x_i$.\n", "Defining $C(x) = C_0+x_1 C_1 + x_2 C_ 2 + \\cdots + x_m C_m$ we have that the dissipated\n", "power is equal to $\\mathbf{1}^T C(x) \\mathbf{1}$. Thus to minimize the\n", "dissipated power subject to a constraint in the widths and a constraint\n", "in the dominant time constant, we solve the SDP\n", " \\begin{array}{ll}\n", " \\mbox{minimize} & \\mathbf{1}^T C(x) \\mathbf{1} \\\\\n", " \\mbox{subject to} & T_{\\mbox{max}} G(x) - C(x) \\succeq 0 \\\\\n", " & 0 \\le x_i \\le W_{\\mbox{max}}.\n", " \\end{array}\n", "\n", "## Import and setup packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import cvxpy as cp\n", "import numpy as np\n", "import scipy as scipy\n", "import matplotlib.pyplot as plt\n", "\n", "# Show plots inline in ipython.\n", "%matplotlib inline\n", "\n", "# Plot properties.\n", "plt.rc('text', usetex=True)\n", "plt.rc('font', family='serif')\n", "font = {'weight' : 'normal',\n", " 'size' : 16}\n", "plt.rc('font', **font)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Helper functions" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Computes the step response of a linear system.\n", "def simple_step(A, B, DT, N):\n", " n = A.shape[0]\n", " Ad = scipy.linalg.expm((A * DT))\n", " Bd = (Ad - np.eye(n)).dot(B)\n", " Bd = np.linalg.solve(A, Bd)\n", " X = np.zeros((n, N))\n", " for k in range(1, N):\n", " X[:, k] = Ad.dot(X[:, k-1]) + Bd;\n", " return X" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate problem data" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#\n", "# Circuit parameters.\n", "#\n", "\n", "dim=4 # Grid is dimxdim (assume dim is even).\n", "n=(dim+1)**2 # Number of nodes.\n", "m=2*dim*(dim+1) # Number of wires.\n", " # 0 ... dim(dim+1)-1 are horizontal segments\n", " # (numbered rowwise);\n", " # dim(dim+1) ... 2*dim(dim+1)-1 are vertical\n", " # (numbered columnwise)\n", "beta = 0.5 # Capacitance per segment is twice beta times xi.\n", "alpha = 1 # Conductance per segment is alpha times xi.\n", "G0 = 1 # Source conductance.\n", "C0 = np.array([ ( 10, 2, 7, 5, 3),\n", " ( 8, 3, 9, 5, 5),\n", " ( 1, 8, 4, 9, 3),\n", " ( 7, 3, 6, 8, 2),\n", " ( 5, 2, 1, 9, 10) ])\n", "wmax = 1 # Upper bound on x.\n", "\n", "#\n", "# Build capacitance and conductance matrices.\n", "#\n", "\n", "CC = np.zeros((dim+1, dim+1, dim+1, dim+1, m+1))\n", "GG = np.zeros((dim+1, dim+1, dim+1, dim+1, m+1))\n", "\n", "# Constant terms.\n", "# - Reshape order='F' is fortran order to match original\n", "# version in MATLAB code.\n", "CC[:, :, :, :, 0] = np.diag(C0.flatten(order='F')).reshape(dim+1, dim+1,\n", " dim+1, dim+1, order='F').copy()\n", "zo13 = np.zeros((2, 1, 2, 1))\n", "zo13[:,0,:,0] = np.array([(1, 0), (0, 1)])\n", "zo24 = np.zeros((1, 2, 1, 2))\n", "zo24[0,:,0,:] = zo13[:, 0, :, 0]\n", "pn13 = np.zeros((2, 1, 2, 1))\n", "pn13[:,0,:,0] = np.array([[1, -1], [-1, 1]])\n", "pn24 = np.zeros((1, 2, 1, 2))\n", "pn24[0, :, 0, :] = pn13[:, 0, :, 0]\n", "\n", "for i in range(dim+1):\n", " # Source conductance.\n", " # First driver in the middle of row 1.\n", " GG[int(dim/2), i, int(dim/2), i, 0] = G0\n", " for j in range(dim):\n", " # Horizontal segments.\n", " node = 1 + j + i * dim\n", " CC[j:j+2, i, j:j+2, i, node] = beta * zo13[:, 0, :, 0]\n", " GG[j:j+2, i, j:j+2, i, node] = alpha * pn13[:, 0, :, 0]\n", " # Vertical segments.\n", " node = node + dim * ( dim + 1 )\n", " CC[i, j:j+2, i, j:j+2, node] = beta * zo24[0, :, 0, :]\n", " GG[i, j:j+2, i, j:j+2, node] = alpha * pn24[0, :, 0, :]\n", "\n", "# Reshape for ease of use.\n", "CC = CC.reshape((n*n, m+1), order='F').copy()\n", "GG = GG.reshape((n*n, m+1), order='F').copy()\n", "\n", "#\n", "# Compute points the tradeoff curve, and the three sample points.\n", "#\n", "\n", "npts = 50\n", "delays = np.linspace(50, 150, npts)\n", "xdelays = [50, 100]\n", "xnpts = len(xdelays)\n", "areas = np.zeros(npts)\n", "xareas = dict()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solve problem and display results" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point 1 of 50 on the tradeoff curve (Tmax = 50.0)\n", "CVXOPT failed, trying robust KKT\n", "Point 2 of 50 on the tradeoff curve (Tmax = 52.04081632653061)\n", "Point 3 of 50 on the tradeoff curve (Tmax = 54.08163265306123)\n", "Point 4 of 50 on the tradeoff curve (Tmax = 56.12244897959184)\n", "Point 5 of 50 on the tradeoff curve (Tmax = 58.16326530612245)\n", "Point 6 of 50 on the tradeoff curve (Tmax = 60.20408163265306)\n", "Point 7 of 50 on the tradeoff curve (Tmax = 62.244897959183675)\n", "Point 8 of 50 on the tradeoff curve (Tmax = 64.28571428571429)\n", "Point 9 of 50 on the tradeoff curve (Tmax = 66.3265306122449)\n", "Point 10 of 50 on the tradeoff curve (Tmax = 68.36734693877551)\n", "Point 11 of 50 on the tradeoff curve (Tmax = 70.40816326530611)\n", "Point 12 of 50 on the tradeoff curve (Tmax = 72.44897959183673)\n", "Point 13 of 50 on the tradeoff curve (Tmax = 74.48979591836735)\n", "Point 14 of 50 on the tradeoff curve (Tmax = 76.53061224489795)\n", "Point 15 of 50 on the tradeoff curve (Tmax = 78.57142857142857)\n", "Point 16 of 50 on the tradeoff curve (Tmax = 80.61224489795919)\n", "Point 17 of 50 on the tradeoff curve (Tmax = 82.65306122448979)\n", "Point 18 of 50 on the tradeoff curve (Tmax = 84.6938775510204)\n", "Point 19 of 50 on the tradeoff curve (Tmax = 86.73469387755102)\n", "Point 20 of 50 on the tradeoff curve (Tmax = 88.77551020408163)\n", "Point 21 of 50 on the tradeoff curve (Tmax = 90.81632653061224)\n", "Point 22 of 50 on the tradeoff curve (Tmax = 92.85714285714286)\n", "Point 23 of 50 on the tradeoff curve (Tmax = 94.89795918367346)\n", "Point 24 of 50 on the tradeoff curve (Tmax = 96.93877551020408)\n", "Point 25 of 50 on the tradeoff curve (Tmax = 98.9795918367347)\n", "Point 26 of 50 on the tradeoff curve (Tmax = 101.0204081632653)\n", "Point 27 of 50 on the tradeoff curve (Tmax = 103.06122448979592)\n", "Point 28 of 50 on the tradeoff curve (Tmax = 105.10204081632654)\n", "Point 29 of 50 on the tradeoff curve (Tmax = 107.14285714285714)\n", "Point 30 of 50 on the tradeoff curve (Tmax = 109.18367346938776)\n", "Point 31 of 50 on the tradeoff curve (Tmax = 111.22448979591837)\n", "Point 32 of 50 on the tradeoff curve (Tmax = 113.26530612244898)\n", "Point 33 of 50 on the tradeoff curve (Tmax = 115.3061224489796)\n", "Point 34 of 50 on the tradeoff curve (Tmax = 117.34693877551021)\n", "Point 35 of 50 on the tradeoff curve (Tmax = 119.38775510204081)\n", "Point 36 of 50 on the tradeoff curve (Tmax = 121.42857142857143)\n", "Point 37 of 50 on the tradeoff curve (Tmax = 123.46938775510205)\n", "Point 38 of 50 on the tradeoff curve (Tmax = 125.51020408163265)\n", "Point 39 of 50 on the tradeoff curve (Tmax = 127.55102040816327)\n", "Point 40 of 50 on the tradeoff curve (Tmax = 129.59183673469389)\n", "Point 41 of 50 on the tradeoff curve (Tmax = 131.6326530612245)\n", "Point 42 of 50 on the tradeoff curve (Tmax = 133.67346938775512)\n", "Point 43 of 50 on the tradeoff curve (Tmax = 135.71428571428572)\n", "Point 44 of 50 on the tradeoff curve (Tmax = 137.75510204081633)\n", "Point 45 of 50 on the tradeoff curve (Tmax = 139.79591836734693)\n", "Point 46 of 50 on the tradeoff curve (Tmax = 141.83673469387756)\n", "Point 47 of 50 on the tradeoff curve (Tmax = 143.87755102040816)\n", "Point 48 of 50 on the tradeoff curve (Tmax = 145.9183673469388)\n", "Point 49 of 50 on the tradeoff curve (Tmax = 147.9591836734694)\n", "Point 50 of 50 on the tradeoff curve (Tmax = 150.0)\n", "Particular solution 1 of 2 (Tmax = 50)\n", "CVXOPT failed, trying robust KKT\n", "Solution 1:\n", "Vertical segments:\n", "[[0.65284441 0.4391586 0.52378143 0.47092764 0.2363529 ]\n", " [0.99999993 0.85353862 0.99999992 0.93601078 0.56994586]\n", " [0.92325575 0.29557654 0.80041338 0.99999998 0.99999997]\n", " [0.41300012 0.13553757 0.26699524 0.67049218 0.88916807]]\n", "Horizontal segments:\n", "[[1.96487539e-01 1.40591789e-01 9.70591442e-08 7.79376843e-08\n", " 5.27429285e-08]\n", " [7.07446433e-02 6.38430105e-02 1.02136471e-07 8.59913722e-08\n", " 6.28906472e-08]\n", " [6.05807467e-09 1.16285450e-08 3.91561390e-08 9.48052913e-02\n", " 1.58096913e-01]\n", " [3.82528741e-07 4.85708568e-07 5.75578696e-07 8.39862772e-02\n", " 5.38639181e-02]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Particular solution 2 of 2 (Tmax = 100)\n", "Solution 2:\n", "Vertical segments:\n", "[[0.2687881 0.04368684 0.17122095 0.133796 0.07360396]\n", " [0.41346231 0.08016135 0.30642705 0.2224136 0.1484946 ]\n", " [0.25755998 0.08016077 0.11200259 0.38352317 0.28159768]\n", " [0.13439419 0.04368697 0.02445701 0.24083502 0.24534599]]\n", "Horizontal segments:\n", "[[ 1.53896782e-09 -5.18600578e-10 -9.75218556e-10 -5.19196383e-10\n", " 1.57176577e-09]\n", " [ 9.30752726e-10 -9.56673760e-10 -1.35065528e-09 -9.96797753e-10\n", " 1.03852376e-09]\n", " [ 9.35404466e-10 -9.12219313e-10 -2.22938358e-10 -7.91865186e-10\n", " 1.51304362e-09]\n", " [ 1.31975762e-09 -8.50790152e-10 -1.39421076e-09 -8.33247519e-10\n", " 1.27680128e-09]]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Iterate over all points, and revisit specific points\n", "for i in range(npts + xnpts):\n", " # First pass, only gather minimal data from all cases.\n", " if i < npts:\n", " delay = delays[i]\n", " print( ('Point {} of {} on the tradeoff curve ' \\\n", " + '(Tmax = {})').format(i+1, npts, delay))\n", " # Second pass, gather more data for specific cases,\n", " # and make plots (later).\n", " else:\n", " xi = i - npts\n", " delay = xdelays[xi]\n", " print( ('Particular solution {} of {} ' \\\n", " + '(Tmax = {})').format(xi+1, xnpts, delay))\n", "\n", " #\n", " # Construct and solve the convex model.\n", " #\n", "\n", " # Variables.\n", " xt = cp.Variable(shape=(m+1)) # Element 1 of xt == 1 below.\n", " G = cp.Variable((n,n), symmetric=True) # Symmetric constraint below.\n", " C = cp.Variable((n,n), symmetric=True) # Symmetric constraint below.\n", " \n", " # Objective.\n", " obj = cp.Minimize(cp.sum(C))\n", "\n", " # Constraints.\n", " constraints = [ xt[0] == 1,\n", " G == G.T,\n", " C == C.T,\n", " G == cp.reshape(GG*xt, (n,n)),\n", " C == cp.reshape(CC*xt, (n,n)),\n", " delay * G - C == cp.Variable(shape=(n,n), PSD=True),\n", " 0 <= xt[1:],\n", " xt[1:] <= wmax,\n", " ]\n", "\n", " # Solve problem (use CVXOPT instead of SCS to match original results;\n", " # cvxopt produces lower objective values as well, but is much slower)\n", " prob = cp.Problem(obj, constraints)\n", " try:\n", " prob.solve(solver=cp.CVXOPT)\n", " except cp.SolverError:\n", " print(\"CVXOPT failed, trying robust KKT\")\n", " prob.solve(solver=cp.CVXOPT, kktsolver='robust')\n", " \n", " if prob.status not in [cp.OPTIMAL, cp.OPTIMAL_INACCURATE]:\n", " raise Exception('CVXPY Error')\n", " \n", " # Chop off the first element of x, which is \n", " # constrainted to be 1\n", " x = xt.value[1:] \n", "\n", " # First pass, only gather minimal data from all cases.\n", " if i < npts:\n", " areas[i] = sum(x)\n", " # Second pass, gather more data for specific cases,\n", " # and make plots.\n", " else:\n", " xareas[xi] = sum(x)\n", "\n", " #\n", " # Print display sizes.\n", " #\n", "\n", " print('Solution {}:'.format(xi+1))\n", " print('Vertical segments:')\n", " print(x[0:dim*(dim+1)].reshape(dim, dim+1, order='F').copy())\n", " print('Horizontal segments:')\n", " print(x[dim*(dim+1):].reshape(dim, dim+1, order='F').copy())\n", "\n", " #\n", " # Determine and plot the step responses.\n", " #\n", "\n", " A = -np.linalg.inv(C.value).dot(G.value)\n", " B = -A.dot(np.ones(n))\n", " T = np.linspace(0, 500, 2000)\n", " Y = simple_step(A, B, T[1], len(T))\n", " indmax = -1\n", " indmin = np.inf\n", " for j in range(Y.shape[0]):\n", " inds = np.amin(np.nonzero(Y[j, :] >= 0.5)[0])\n", " if ( inds > indmax ):\n", " indmax = inds\n", " jmax = j\n", " if ( inds < indmin ):\n", " indmin = inds\n", " jmin = j\n", "\n", " tthres = T[indmax]\n", " GinvC = np.linalg.solve(G.value, C.value)\n", " tdom = max(np.linalg.eig(GinvC)[0])\n", " elmore = np.amax(np.sum(GinvC.T, 0))\n", " plt.figure(figsize=(8, 8))\n", " plt.plot( T, np.asarray(Y[jmax,:]).flatten(), '-',\n", " T, np.asarray(Y[jmin,:]).flatten() )\n", " plt.plot( tdom * np.array([1, 1]), [0, 1], '--',\n", " elmore * np.array([1, 1]), [0, 1], '--',\n", " tthres * np.array([1, 1]), [0, 1], '--' )\n", " plt.xlim([0, 500])\n", " plt.ylim([0, 1])\n", " plt.text(tdom, 0.92, 'd')\n", " plt.text(elmore, 0.88, 'e')\n", " plt.text(tthres, 0.96, 't')\n", " plt.text( T[600], Y[jmax, 600], 'v{}'.format(jmax+1))\n", " plt.text( T[600], Y[jmin, 600], 'v{}'.format(jmin+1))\n", " plt.title(('Solution {} (Tmax={}), fastest ' \\\n", " + 'and slowest step responses').format(xi+1, delay), fontsize=16)\n", " plt.show()\n", "\n", "#\n", "# Plot the tradeoff curve.\n", "#\n", "\n", "plt.figure(figsize=(8, 8))\n", "ind = np.isfinite(areas)\n", "plt.plot(areas[ind], delays[ind])\n", "plt.xlabel('Area')\n", "plt.ylabel('Tdom')\n", "plt.title('Area-delay tradeoff curve')\n", "# Label the specific cases.\n", "for k in range(xnpts):\n", " plt.text(xareas[k], xdelays[k], '({})'.format(k+1))\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 1 }