Academic Reflection

Computer Architecture(CSE 590)

Solving complex problems demands strong inter-disciplinary skills, a solid understanding of the fundamentals and an ability to break down the problem and generate original solutions.I believe, Computer Architecture(CSE 590), offered by Professor Sridhar Ramalingam  is a fundamental subject in Computer Science and Electrical Engineering that lies right at the Intersection of both the fields. Knowing how a computer works enables one to create more efficient software programs and make more informed judgments rather than assuming and guessing. However, for Electrical Engineers, who want to advance their career in the Hardware/VLSI Industry, this subject offers  the toolsets to design high performing microprocessors from an architectural perspective. 

The course starts with a brief discussion on quantifying the execution time and performance of general purpose computers which I believe is one of the  most important takeaways from this subject.

The formula is as follows,

CPU Execution Time = Instructions/Program * Clock Cycles /Instruction * Clock Speed. 


CPU Performance = 1/ CPU Execution Time

Although these seem like simple equations, they have some deep implications. Every engineering effort to improve the performance of computing (from improving the switching speed of a transistor to building smarter compilers or designing better adder circuits) is in essence, an effort to find better values for one or more variables involved in the above equations.  The rest of the course is,  infact, a detailed analysis of various techniques used to bring down the execution time of  a processor following a quantitative approach. Some of the techniques covered include pipelining of instructions, caching,instruction level parallelism, data level parallelism and thread level parallelism.However, like other UB courses, the most significant aspect of this course is the projects. In the first project we designed an 8-bit microprocessor based on MIPS instruction set architecture using Verilog HDL and verified our design on an FPGA board.

 Figure 1: Implemented architecture of an 8 bit Microprocessor. 

The processor could run a subset of instructions including load, store, add, subtract and jump. one major takeaway from this project is the revelation that every complex operation that  computers perform is boiled down to a bunch of arithmetic and logical operations at the hardware level.

For the second Project, we analyzed the CPU performance of an x86 architecture using GEM5 Simulator by varying certain parameters such as Cache Size, Associativity and block size. I personally feel that these projects are minimalistic implementations of the actual work that happens in the Industry. This helps in getting a strong background to integrate easily to work on complex projects within a large organization.

Another interesting aspect of this course is that the Homeworks and Assignments are not graded. Rather these are practice questions which are very much representative of the quizzes and exams. These homework questions are well thought out and solving these problems helps crystalize the many theoretical concepts covered in the course.

In short, Computer Architecture was one of the most valuable courses that I took during my graduate program. Professor Sridhar’s lectures are a little unorganized and have scopes for improvement. However, the overall course is well structured with very good projects and carefully picked assignment questions. I’d suggest this course to anyone who wants to work in a Software/Hardware industry to deepen their knowledge of the internal workings of computers and master the fundamentals of designing and architecting high performance integrated circuits.

Microelectronic Device Fabrication(EE 548)

In addition to  transistors, one of the 21st century mind boggling discoveries is the invention of integrated circuits. Every two years, the number of transistors on a chip has been doubling, with modern devices containing millions of transistors on an area the size of a hair follicle. Microelectronic Device Fabrication is the Engineering technology that is used to fabricate nano- scaled transistors on an Integrated chip and EE 548 is an introductory course that helps understand this incredible technology. The course was offered during the fall semester by Professor P.C Cheng. 

While courses such as  Computer Architecture(CSE 590) and Introduction to VLSI Design(CSE 593) offers a top down view on how chips are designed and fabricated, this course gives a bottom up view of the same starting from the chemical and mechanical properties of materials used to manufacture an Integrated Chip. Dr P.C Cheng lectures 3-hours a week. The course is assessed primarily on the final project, which entails developing lithographic layers for NAND gates and detailing the complete manufacturing process from beginning to end. 

Overall the course turned out to be very helpful in understanding the chip manufacturing process from a fabrication perspective. Dr P.C Cheng’s project did not have a concrete description. This encouraged us to be creative and look out for minimalistic solutions.As a result, we ended up designing all the lithographic masks on a PCB design software instead of using  complicated CAD tools that are used in the market for VLSI design. 

 Figure 2: Layout level design of the circuit. 

 Figure 3: Few of the photomasks corresponding to our TTL NAND design.

There were even students who designed the photo masks on MS Paint! I personally feel that a lab component to this course would have made it more interesting. Courses like CSE 590(Computer Architecture),CSE 593(Intro to VLSI design) and EE 548(Microelectronic Device Fabrication) that I took over my three semesters at UB were like dots that finally started connecting backwards. I’d recommend this course to anyone who wants to set foot in the semiconductor industry or even understand the mystery behind manufacturing billions of transistors on a tiny chip.

Introduction to VLSI Electronics(CSE 593)

Fabrication technology existed even before computer aided tools for designing the integrated circuits came into existence. However, it is the confluence of CAD tools and the micro electronic fabrication technology that has enabled scale the number of transistors on a chip exponentially. These specialized CAD tools help abstract the complexity of the design and work independently at various levels of abstraction. This philosophy enables us to design seemingly impossible convoluted circuits. CSE 593 – introduction to vlsi is a course that equips one with the skill of electronic design automation- a skill that is very valuable in the Semiconductor Industry.

The course covers topics such as cmos based digital design, the theory behind design of low power high performance chips, logic synthesis, clock synchronization, placement and routing. This course however is mostly a hands-on course with labs and a  project. In the lab component of the course,one gets to design the schematic and layout of elementary logic blocks like gates and memory devices. The lab exercises give an awareness and hands-on experience in using the professionally adopted tools. These experiences enable us to apply our aptitude towards developing designs that comply with industrial standards. It is this exposure that lays the foundation for candidates to do well when they take up research and development careers in this field.

 Figure 4: Schematic of a NAND circuit.

 Figure 5: Extracted layout of the circuit with parasitic capacitance    values.

The design skills acquired are then used to build a complex project which is the most valuable part of the course.Unlike CSE 590- Computer Architecture, where  the project description was concrete, this course encourages students to come up with a project idea and work on it, ground up.However, Professor Sridhar expects graduate students to work on projects that are fairly difficult with complex circuits. 

Our team is working on designing a chip for autonomous driving- A chip that  takes in lidar sensor data as the input and outputs the steering position. 

Figure 6: Simple self driving car implementation.

To tackle the problem, we are developing our own 2-d simulation software that will be used for training the Neural Network. Once the training is done, the extracted weights and biases will be used to build  the custom hardware implementation of the network. I’m still in my final semester and haven’t completed the course yet. However, doing the labs and frequent brainstorming sessions with my teammates has helped us come up with ingenious solutions to approach the problem. 

In short, I believe this course is very valuable for people who want to work in the VLSI Industry as Design/Layout Engineer. Even otherwise the course is intellectually stimulating and engaging that sometimes I look back and wonder how far we have come in a short span of time since the invention of transistors. I personally feel that the technologies used in the VLSI industry are a bit  ahead of what is being covered in the course. However, the course provides all the necessary background to quickly adapt to the changing technology landscape.

Principles of Networking(EE 534)

I believe that the main factor that has contributed to technological evolution is the concept of abstraction. In simple terms, abstraction is knowing what the functionality of something is, without worrying how it performs the same functionality. This has enabled countless innovations especially in the digital domain building layers of abstractions one on top of the other. The Internet is one such technological innovation that has exploited the power of abstraction by breaking down its functionality to different layers. EE 534- Principles of Networking is the course that does a detailed top to bottom analysis of all these layers that constitutes the internet. The course was offered in the spring semester by Professor Zhangyu Guan.

The course starts with an overview of the internet and then briefly discusses all the layers in the TCP/IP protocol stack starting from application layer to the physical layer. 

Figure 7: TCP/IP Protocol stack

Much of this course is focused on the upper layers of the protocol stack and teaches how software is used to enable reliable data transfer across hardware layers that are inherently non reliable. Another important revelation that I had from the course is that most of the engineering disciplines share a lot of common problem solving philosophies and these are very much adopted from real life.For eg: Pipelining is an approach used in computer networks to reduce the latency of data transfer. The same philosophy is used in Computer Architecture to increase the clock speed of a processor. The philosophy of pipelining was however adopted from factory workers who all perform different tasks in an assembly line.

EE 534: Principles of Networking is an introductory course and can be seen as a prerequisite to many other advanced courses. Professor Guan’s  lectures are fluff-free and all the concepts covered are well-explained. The grading was based on two exams and a couple of homework assignments. I personally feel that this course could have incorporated a final project for students to implement the concepts that were taught in the class.As someone who has worked in the software industry as a full stack web developer, taking this course has helped me crystallize a lot of fundamental concepts that I had a vague understanding of .I believe, regardless of what primary skill a person possess, a proper understanding of internet protocols and computer programming should be a part of every problem solving toolkit.