Spring 2025

ECE380L.12: Embedded and Real-Time Systems / Real-Time Operating Systems -- Dr. Andreas Gerstlauer Explore real-time operating systems; implementation of context switching, threads, multitasking, real-time scheduling, synchronization, communication, storage, file systems, memory management, process linking and loading, hardware interfacing, and networking; debugging and testing; operating system performance, including latency, jitter, deadlines, deadlocks, and starvation; real-time systems, including data acquisition, sensing, actuating, digital control, signal processing, and robotics.
ECE360P: Concurrent and Distributed Systems (dropped early) -- Dr. Vijay Garg Investigate concurrency, lock-based and lock-free synchronization, resource allocation, multi-threaded programming, distributed systems programming, mutual exclusion, global snapshots, global property evaluation, message ordering, consensus, Byzantine agreement, and commit protocols.
ECE381C: Verification and Validation -- Dr. Sarfraz Khurshid This course studies analytical techniques and tools for verification and validation, which are two key activities in developing higher quality software systems. Conceptually, verification addresses the problem of determining if we are building the system right, and validation addresses the problem of determining if we are building the right system. The course is or- ganized as a series of research/tool paper presentations and discussions. The selected papers will cover traditional and state-of-the-art techniques. The course content will cover some topics from specification languages and tool-sets, techniques for dynamic analysis, such as white box and black box testing, equivalence partitioning, test criteria and automation, regression testing and debugging, techniques for static analysis, such as shape analysis, techniques for systematic software testing, such as symbolic execution and model checking, including explicit-state, stateless, and bounded model checking, as well as heuristics-driven techniques, such as those that employ genetic algorithms or other artificial intelligence based heuristics. Parallel and incremental techniques may also be covered depending on the specific papers chosen.
ECE464H: Honors Senior Design Project -- Dr. Leonard Register Designed a processor simulator validation toolset aimed at capturing the limitations of gem5, a widely used architectural simulator, in accurately modeling real processors. While gem5 provides a cost-effective solution for exploring architectural designs, its architectural simplifications make some of its simulated behaviors deviate from real world performance. In order to help researchers and architects in the industry better understand whether the changes they make in gem5 can be extrapolated to hardware, our proposed tool collected performance data from both gem5 simulations and real processors and provides a framework for users to compare these results through performance curves.

Fall 2024

ECE364D: Intro to Engineering Design -- Dr. Leonard Register Introduction to the engineering design process. Explore the assessment and documentation of engineering problems and customer needs, such as acquiring, documenting, and verifying requirements; high-level system design principles; effects of economic, environmental, ethical, safety, and social issues in design; writing and presenting design specifications; and effective teamwork.
ECE382N: Machine Learning Hardware-Algorithm Codesign -- Dr. Mattan Erez Explore co-design of machine learning (ML) algorithms and hardware; foundations of ML, compute-intensive ML architectures, high-performance matrix multiplication, spatial computing, roofline modeling, and scheduling and dataflows; ML-specific numerics, compression, quantization, and architectures for edge and mobile; codesign for scaling and system considerations; and circuit-level techniques for ultra-low-power ML, analog, and processing-in-memory techniques.
ECE460N: Computer Architecture -- Dr. Yale Patt Examine characteristics of instruction set architecture and microarchitecture; physical and virtual memory; caches and cache design; interrupts and exceptions; integer and floating-point arithmetic; I/O processing; buses; pipelining, out-of-order execution, branch prediction, and other performance enhancements; design trade-offs; and case studies of commercial microprocessors. Explore behavioral-level design of a microarchitecture in a laboratory setting.

Summer 2024

Tesla: Body Controls Firmware Intern -- Palo Alto, CA

Spring 2024

ECE381V: Unconventional Computation -- Dr. David Soloveichik Learned about and exposed to new perspectives on computation: models of highly distributed and unstructured computation such as that occurring in chemical reactions, models in which building is equivalent to computing, models that address the ultimate limits of low energy computation, and models that compute by relaxing to the lowest energy state. Topics included cellular automata, chemical reaction computing, analog computing, thermodynamic computing, reversible computing, and quantum computing.
ECE445L: Embedded Systems Design Lab -- Dr. Jonathan Valvano In Embedded Systems Design Lab, I took a more in-depth look at interfacing with a microcontroller from both a hardware and software perspective. This includes topics like board-level communication protocols (SPI, CAN, UART), data acquisition systems, PCB design in KiCAD, protocols for IoT Wi-Fi communication (TCP, UDP), and PID control. Our final project was a design competition with the TM4C123GH6PM microcontroller, for which my group designed a functional GameBoy emulator that could parse GameBoy assembly and run an interactive game on a TFT LCD with functional audio & control. This involved QSPI communication between three microprocessors (a CPU, Audio Processing Unit, and Pixel Processing Unit) as well as 16-bit parallel communication with the TFT display and interfacing with a speaker. My lab group was awarded third place in the competition.
ECE479K: Compilers -- Dr. Mattan Erez Learned about programming language representation, common transformations, analyses, and optimizations, intermediate languages, and design choices in lecture and learned about the software engineering challenges of implementing a compiler and simple runtime support for an imperative, object-oriented language in programming labs. Used LLVM framework to create a front-end and back-end for "Classroom Object Oriented Language" (COOL).

Fall 2023

ECE316: Digital Logic Design -- Dr. Nur Touba In Digital Logic Design, I was introduced to Verilog for an FPGA on the design tool Xilinx Vivado. I worked with logic simulation, synthesis, and FPGA configuration. The course also covered Boolean algebra, combinational and sequential logic components, storage elements, timing and timing-related non-idealities (setup/hold constraints, hazards), finite state machines, datapath components, RTL design, and FSM optimization.
ECE460J: Data Science Lab -- Dr. Alex Dimakis In Data Science Lab, I learned and applied data science basics such as regression, classification, decision trees, bagging and boosting. I also experimented with model tuning, performance, practical issues, and challenges. I participated in the class Kaggle competition and worked with a group on a final project to denoise and restore old images for the UT History department.
ECE461S: Operating Systems -- Dr. Neeraja Yadwadkar In Operating Systems, I worked with a group and wrote C for Stanford’s PintOS operating system through a series of projects designed to teach the basics of a kernel. This included running user programs, implementing virtual memory, and designing our own file system. We also designed a basic shell called YASH (Yet Another Shell).
M362M: Introduction to Stochastic Processes -- Dr. Stephen Walker In Introduction to Stochastic Processes, I discussed generating functions and their utility in analyzing random processes, then random processes starting in the discrete-time domain (simple random walk, branching process & probability of extinction of branching process), then moving to the continuous time domain (continuous time Markov process, Poisson process, Brownian motion), and also analyzing rate matrices & generator matrices.

Summer 2023

Garmin: Flight Control Systems Software Engineer Intern -- Olathe, KS

Spring 2023

ECE313: Linear Systems + Signals -- Dr. Aryan Mokhtari In Linear Systems and Signals, I gained a foundation in convolution, sampling, Fourier transform and Laplace Transform in both Continuous and Discrete Time domains.
ECE351K: Probability + Random Processes -- Dr. Hyeji Kim In Probability, I learned the basic properties of probability and discrete + continuous random variables, conditional probability, Bayes rule, independence of probability, PMF, PDF, and CDF, joint random variables, expected value & conditional expectation, inequalities and limit theorems, and some random processes.
ECE360C: Algorithms -- Dr. Christine Julien In Algorithms, I learned proof-based reasoning about algorithms, asymptotic complexity analysis (Big O, Big Omega, Big Theta), algorithm design principles, common types of algorithms (greedy, div class="semester"ide & conquer, dynamic programming, graph algorithms, stable matching), and NP completeness.
ECE422C: Software Design + Implementation II -- Dr. August Shi In Software Design and Implementation II, I learned about object-oriented programming, the four pillars of OOP (encapsulation, polymorphism, abstraction, inheritance), design & implementation of Java programs, JavaFX usage, and some multithreading & network communication. I applied these skills through several projects and one final project.

Fall 2022

ECE333T: Engineering Communications -- Dr. Niveen Abi Ghannam In Engineering Communication, I explored advanced engineering communication skills, with emphasis on technical documents, oral reports, and graphics. Several aspects of both technical and persuasive writing were covered. I also participated in collaborative work involving online communication and research. The final project for the course involved writing an IEEE style, full-length research paper detailing several legal and technical solutions to mitigate the spread of deepfake technologies.
ECE411: Circuit Theory -- Dr. Earl Swartzlander In Circuit Theory, I learned about capacitance and inductance; first- and second-order transient circuit response, including operational amplifier circuits; sinusoidal steady state analysis; Bode plots; complex power in single and balanced three-phase systems; transformers; two-port networks (Z-parameters and Y-parameters); and computer-aided analysis and design.
M325K: Discrete Mathematics -- Dr. Kanthimanthi Sathasivan In Discrete Mathematics, I explored logic, set theory, relations and functions, combinatorics, and graph theory and graph algorithms. The class involved writing proofs in a variety of topics, building upwards from basic logical expressions.
M340L: Matrices and Matrix Calculations -- Dr. Arie Israel In Matrices and Matrix Calculations, I gained basic knowledge of techniques of matrix calculations and applications of linear algebra. This includes basic matrix operations and row reduction, linear regression, vector projection in any number of dimensions, Fourier Series, Complex Fourier Series, sampling, and Discrete Fourier Series.

Summer 2022

EnergyX: Automation and Controls Intern -- Austin, TX
Machine Learning: Stanford Online w/ Coursera -- Dr. Andrew Ng In Stanford Online’s Machine Learning course on Coursera, I learned a basic overview of several ML techniques including Supervised Learning (linear regression, logistic regression, neural networks, SVMs), Unsupervised Learning (k-means clustering, PCA for dimensionality reduction, anomaly detection), Special ML Applications (recommender systems, large scale machine learning), and general advice on building a machine learning system (bias/variance, regularization, evaluation of learning algorithms, learning curves, error analysis, ceiling analysis). You can find my programming assignments and course certificate here.

Spring 2022

ECE312H: Software Design + Implementation I -- Dr. Milos Gligoric In Software Design and Implementation I, I took an in-depth look at C and C++, exploring fundamental software engineering principles including the stack and the heap, memory allocation, pass by value/pointer/reference, algorithm complexity analysis (Big-O), sorting, recursion, and object-oriented programming. I also learned about basic data structures such as linked data structures, binary search trees, hash tables, and maps. Finally, I gained hands-on experience debugging and testing C/C++ code in a Linux environment through 8 different programming assignments involving concepts learned through lecture.
ECE319H: Introduction to Embedded Systems -- Dr. Jonathan Valvano In Introduction to Embedded Systems, I worked with assembly and C/C++ programming to cover many facets of embedded systems, including but not limited to: general-purpose I/O, interrupts and timers, debugging strategies, creating a DAC, reading an ADC, and serial communication through UART/SPI. Throughout the course we worked with the Tiva Launchpad TM4C123G Evaluation Board, an ARM Cortex-M4 based microcontroller, ARM Assembly Language, and C/C++. Our final project was a design competition for implementing a basic game on the board (for which you can watch this video and view our GitHub repository). My lab group was awarded first place in the competition.
M427J: Differential Equations with Linear Algebra -- Dr. Mary Vaughan In Differential Equations with Linear Algebra, I studied ordinary differential equations, basic vector and matrix operations, linear operators and eigenvalues, systems of differential equations, partial differentiation, Fourier series and the heat equation.

Fall 2021

ECE302: Introduction to Electrical Engineering -- Dr. Ruochen Lu In Introduction to Electrical Engineering, I gained a basic understanding of analog circuit analysis. This includes concepts such as voltage, resistance, current and power, and their relation to one another. I also learned more advanced methods of analysis, including Nodal/Mesh analysis and Thevenin/Norton equivalent circuits. Finally, I studied the basics of operational amplifiers.
ECE306: Introduction to Computing -- Dr. Nina Telang In Introduction to Computing, I explored the fundamentals of computer engineering from the bottom-up: starting with transistors and simple boolean logic and working up to an implementation of memory and the Von Neumann Model of Computation. Then, I utilized a simplified and simulated version of a modern computer Yale Patt’s LC-3 to understand the basics of assembly language, subroutines, interrupts, and rudimentary applications.
M408D: Sequences, Series, and Multivariable Calculus -- Dr. Kiryl Tsishchanka In Sequences, Series, and Multivariable Calculus, I studied methods of integration, parametric equations, sequences, Taylor and Maclaurin series, and derivatives of functions with several variables.