diff --git a/src/python/calculation.ipynb b/src/python/calculation.ipynb new file mode 100644 index 0000000..817bfc7 --- /dev/null +++ b/src/python/calculation.ipynb @@ -0,0 +1,119 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "import pandas as pd\n", + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "with open('/homes/hyu3/Documents/12024/525/ee477-designs-module0/clk_gen/build/sim-syn-rundir/run.log', 'r') as f:\n", + " text = f.read()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['1996' ':']\n" + ] + } + ], + "source": [ + "splited = text.split('ps')\n", + "num = []\n", + "for element in splited:\n", + " num.append(element.split(')')[-1])\n", + "num1 = []\n", + "for element in num:\n", + " num1.append(element.split(' ')[1])\n", + "num1 = num1[1:-1]\n", + "print(np.array(num1))\n", + "# # Create an array with sample data\n", + "# data = np.array(num1).reshape(-1, 3)\n", + "\n", + "# new = data[:,0:2]\n", + "# # Convert the array to a DataFrame\n", + "# df = pd.DataFrame(data, columns=['pos', 'neg', 'Age'])\n", + "\n", + "# # Write the DataFrame to an Excel file\n", + "# df.to_excel('result.xlsx', index=False)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'new' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_32355/4269454735.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0msum\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mduty\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0melement\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mnew\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0melement\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'new' is not defined" + ] + } + ], + "source": [ + "sum = []\n", + "duty = []\n", + "for element in new:\n", + " result = sum(element)\n", + " sum.append(result)\n", + " duty.append(element[0]/result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "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.9.7" + }, + "vscode": { + "interpreter": { + "hash": "697073d1a6d86fc2b43096c19ba8b1d0f2263c5609f8b095efe5b6511829db6d" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/python/calculation_fo4.py b/src/python/calculation_fo4.py new file mode 100644 index 0000000..a451cfc --- /dev/null +++ b/src/python/calculation_fo4.py @@ -0,0 +1,26 @@ +import re +import pandas as pd +import numpy as np + + +with open('/homes/hyu3/Documents/12024/525/ee477-designs-module0/clk_gen/build/sim-syn-rundir/run.log', 'r') as f: + text = f.read() + +splited = text.split('ps') +num = [] +for element in splited: + num.append(element.split(')')[-1]) +num1 = [] +for element in num: + num1.append(element.split(' ')[1]) +num1 = num1[1:-2] +print(num1) +# Create an array with sample data +data = np.array(num1).reshape(-1, 3) + +# Convert the array to a DataFrame +df = pd.DataFrame(data, columns=['pos', 'neg', 'Age']) + +# Write the DataFrame to an Excel file +df.to_excel('data.xlsx', index=False) + diff --git a/src/python/forward.py b/src/python/forward.py new file mode 100755 index 0000000..0d8b186 --- /dev/null +++ b/src/python/forward.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 + +# Copyright (C) 2003-2007 Robey Pointer +# +# This file is part of paramiko. +# +# Paramiko is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 2.1 of the License, or (at your option) +# any later version. +# +# Paramiko is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Paramiko; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +""" +Sample script showing how to do local port forwarding over paramiko. + +This script connects to the requested SSH server and sets up local port +forwarding (the openssh -L option) from a local port through a tunneled +connection to a destination reachable from the SSH server machine. +""" + +import getpass +import os +import socket +import select +import json + +try: + import SocketServer +except ImportError: + import socketserver as SocketServer + +import sys +from optparse import OptionParser + +import paramiko + + +SERVER = "linuxsrv01.ece.uw.edu" # Modify this line for different server +SSH_PORT = 22 +DEFAULT_PORT = 5901 + +g_verbose = True + + +class ForwardServer(SocketServer.ThreadingTCPServer): + daemon_threads = True + allow_reuse_address = True + + +class Handler(SocketServer.BaseRequestHandler): + def handle(self): + try: + chan = self.ssh_transport.open_channel( + "direct-tcpip", + (self.chain_host, self.chain_port), + self.request.getpeername(), + ) + except (ConnectionResetError): + print("ConnectionResetError") + sys.exit(1) + except Exception as e: + verbose( + "Incoming request to %s:%d failed: %s" + % (self.chain_host, self.chain_port, repr(e)) + ) + return + if chan is None: + verbose( + "Incoming request to %s:%d was rejected by the SSH server." + % (self.chain_host, self.chain_port) + ) + return + + verbose( + "Connected! Tunnel open %r -> %r -> %r" + % ( + self.request.getpeername(), + chan.getpeername(), + (self.chain_host, self.chain_port), + ) + ) + while True: + r, w, x = select.select([self.request, chan], [], []) + if self.request in r: + data = self.request.recv(1024) + if len(data) == 0: + break + chan.send(data) + if chan in r: + data = chan.recv(1024) + if len(data) == 0: + break + self.request.send(data) + + peername = self.request.getpeername() + chan.close() + self.request.close() + verbose("Tunnel closed from %r" % (peername,)) + + +def forward_tunnel(local_host, local_port, remote_host, remote_port, transport): + # this is a little convoluted, but lets me configure things for the Handler + # object. (SocketServer doesn't give Handlers any way to access the outer + # server normally.) + class SubHander(Handler): + chain_host = remote_host + chain_port = remote_port + ssh_transport = transport + + ForwardServer((local_host, local_port), SubHander).serve_forever() + + +def verbose(s): + if g_verbose: + print(s) + + +HELP = """\ +Set up a forward tunnel across an SSH server, using paramiko. A local port +(given with -p) is forwarded across an SSH session to an address:port from +the SSH server. This is similar to the openssh -L option. +""" + + +def get_host_port(spec, default_port): + "parse 'hostname:22' into a host and port, with the port optional" + args = (spec.split(":", 1) + [default_port])[:2] + args[1] = int(args[1]) + return args[0], args[1] + +def parse_options(): + global g_verbose + + parser = OptionParser( + usage="usage: %prog [options] ", + version="%prog 1.0", + description=HELP, + ) + + parser.add_option( + "-q", + "--quiet", + action="store_false", + dest="verbose", + default=True, + help="squelch all informational output", + ) + parser.add_option( + "-p", + "--local-port", + action="store", + type="int", + dest="port", + default=DEFAULT_PORT, + help="local port to forward (default: %d)" % DEFAULT_PORT, + ) + parser.add_option( + "-u", + "--user", + action="store", + type="string", + dest="user", + default=getpass.getuser(), + help="username for SSH authentication (default: %s)" + % getpass.getuser(), + ) + parser.add_option( + "-K", + "--key", + action="store", + type="string", + dest="keyfile", + default=None, + help="private key file to use for SSH authentication", + ) + parser.add_option( + "", + "--no-key", + action="store_false", + dest="look_for_keys", + default=True, + help="don't look for or use a private key file", + ) + parser.add_option( + "-P", + "--password", + action="store", + dest="readpass", + default=None, + help="read password (for key or password auth) from stdin", + ) + parser.add_option( + "-r", + "--remote", + action="store", + type="string", + dest="remote", + default="localhost", + metavar="host", + help="remote host to forward to", + ) + + parser.add_option( + "-c", + "--config", + action="store", + type="string", + dest="config", + default=None, + help="config file to use", + ) + + options, args = parser.parse_args() + # If a config file is provided, load it and overwrite the options + if options.config: + with open(options.config, 'r') as f: + config_options = json.load(f) + for key, value in config_options.items(): + setattr(options, key, value) + + if len(args) != 1: + parser.error("Incorrect number of arguments.") + if options.user is None: + parser.error("User and Password required (-u).") + + g_verbose = options.verbose + return options, args[0] + + +def main(): + options, server = parse_options() + if not options.readpass: + password = getpass.getpass("Enter SSH password: ") + else: + password = options.readpass + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.WarningPolicy()) + + verbose("Connecting to ssh host ...") + try: + client.connect(server, username=options.user, password=password) + client.get_transport().set_keepalive(60) + except Exception as e: + print("*** Failed to connect to host: %r" % (e)) + sys.exit(1) + + ssh_stdin, ssh_stdout, ssh_stderr = client.exec_command("vncserver -list") + + xdisplay = ssh_stdout.readlines()[-1] + if "DISPLAY" in xdisplay: + print("setting up vncserver") + ssh_stdin, ssh_stdout, ssh_stderr = client.exec_command('vncserver -interface 0.0.0.0 && vncserver -list') + xdisplay = ssh_stdout.readlines()[-1] + + port = 5900 + int(xdisplay.split()[0][1:]) + verbose( + "Now forwarding port " + str(port) + " ... " + + ) + + try: + forward_tunnel("0.0.0.0", options.port, options.remote, int(port), client.get_transport()) + except KeyboardInterrupt: + print("C-c: Port forwarding stopped.") + sys.exit(0) + + +if __name__ == "__main__": + main() + diff --git a/src/python/parse_pdk.py b/src/python/parse_pdk.py new file mode 100644 index 0000000..ed1c524 --- /dev/null +++ b/src/python/parse_pdk.py @@ -0,0 +1,6 @@ +import os +from skywater_pdk import base, corners, liberty + +lib = "sky130_fd_sc_hd__tt_025C_1v80" +c = base.Cell(name=lib) +print(corners.CornerType.parse('tt')) \ No newline at end of file diff --git a/src/reports/module0.txt b/src/reports/module0.txt deleted file mode 100644 index 6da9822..0000000 --- a/src/reports/module0.txt +++ /dev/null @@ -1 +0,0 @@ -/home/projects/ee477.2023wtr/cad/pdk/sky130A/libs.ref/sky130_fd_sc_hd/lib/sky130_fd_sc_hd__tt_025C_1v80.lib \ No newline at end of file