This is entirely optional.

You might want to do the software if you like building code.

You might want to do the software if you want a deeper engagement with

the material.

And you might want to do the software because, hey, you decide you like this

stuff and you might actually want to get a job in this industry.

What sort of background do you need to do a class like this?

You need some fundamental experience with basic digital design,

logic and flip flops.

You need some basic undergraduate kind of math.

Some basic discreet math, some basic calculus, some basic linear algebra.

It's helpful if you've done some software, and you understand algorithms and

data structures,

because this course is about the basic design of the CAD tools themselves.

Their inner workings that like people do these interesting design projects.

Therefore large topics in the first part of our two part sequence.

The first is computational Boolean algebra, which is how do we move from

the vision of Boolean algebra that you have as, say, an undergraduate

student where Boolean algebra is an equation you write like physics.

To Boolean algebra as a computational artifact, a data structure with methods

and operators that let you actually do stuff at scale.

To the second topic which is verification,

how do I actually look at a blob of a million logic gates and ask a question,

is it right to, the last two topics in the course which are the two great

forms of basic synthesis for two level logic and synthesis for multi level logic.

So lets get started with the detailed overview of the mechanics

of the course, and grading in the course, and

the basic topics in the course for VLSI CAD part one logic.

What we are about in this sequence of classes remember this is actually a two

class sequence VLSI CAD part one and part two.

And the answer to this is that we are primaly interested in the design

of the tools themselves that are able to take an abstract idea for a large and

complicated integrated circuit, and actually turn it into a big chip.

So we are not in this course primarily going to use tools.

Although there will actually be some software that we have put on the Coursera

website that lets you use some tools.

We are primarily in this course focused on the design of the algorithms and

foundational data structures that make it possible to build the tools themselves.

So just a little bit of history of how we got here.

There's an original version of the VSLI CAD sequence that we put on

the Coursera MOOCt website in 2013.

And it was one longer MOOC, it was a 10 week long course.

[COUGH] And it emphasized the entire flow of CAD tools from logic topics that focus

on Boolean stuff to layout topics that focus on the geometric arrangement of

the components on the integrated circuit.

And that course had a slightly different and

somewhat longer name, it was called VLSI CAD Logic to Layout.

And it had 8 weeks of lectures and eight problem assignments and

four optional programming tasks.

And what we have done is to take that material and redesign it, so

that it's now two MOOCs in two parts.

You are in the first of these parts, VLSI CAD part 1, Logic.

This leads onto the second part of the course, VLSI CAD part 2, Layout.

Each of the two parts is half of the original longer

single massive open online course.

So it's all of the original material, but

now into more easy to consume parts, we hope.

At the end of this sequence of courses you're going to know a lot about the logic

part of CAD tools and the layout part of CAD tools for

how you actually get to a real live integrated circuit.

A little of an aside, because the material in this new two part,

two course sequence came from the original single MOOC.

This is why the intro slides in every lecture say,

as you can see on the left hand side here, they all say VLSI CAD Logic to Layout.

But we'll label first lecture in each of the series part one or part two.

And this is also why the lectures are numbered continuously.

The lectures in the first part, which is what we are about today,

as we introduce things.

Those are lectures 1, 2, 3, 4, 5, 6, 7, and 8,

those form part one logic of the two course sequence.

And then the lectures 9, 10, 11, and 12 form the second part,

part two, the layout part of our course sequence.

So just so you know as you go through the entire two course sequence,

the lectures are basically numbered from1 to 12.

So what's in a video lecture?

It has a title with some content and description, like we just showed.

This is an example from a little bit further on.

This is lecture 6.4, Logic Synthesis, Multi-Level Logic, Kernels,

and co-Kernels, and factoring.

It tells you in a very detailed kind of a way, what the content is.

This then segways into a talking head intro.

And so this is me.

I'll be doing a little few minutes of introduction that explains exactly what

are we about in this course.

And I'll connect it from the last lecture that you saw on the video Coursera site

to the lecture that you're about to start.

And then we go into some really detailed technical content, and

there will be video of slides as you can see here.

And I will be writing on them extensively, developing the materials,

in particular doing the math kinds of components.

So there will always be something dynamic going on, on many of the slides,

that I think will be easier to understand if you watch me actually developing

the material live.

The class logistics is that overall, it's intended to be about five weeks long.

There are four weeks of video lectures, and

then there is a free week and then a final exam.

There'll be videos every week.

There'll be two or three hours in total of video.

But they're broken down into a lot of little small parts that tend to be on

average about 15 minutes long.

There are four problem sets associated, basically one per week of the lectures.

So these are our homework assignments.

And I'll leave a week open at the end so you can finish up all your work.

In particular, if you're working on the fourth homework assignment after the four

week of lectures, you have another week to get that done.

There are also two software programming assignments and these are optional, and

I'm just going to emphasize that they're optional.

These lead to honors track, honors assignments, so there's some extra

bonus credentialing that will happen as a result of the honors assignments.

It involves some conventional software coding, and

also some scripts that run through the CAD-centric tools that are running

on the servers that live on the Coursera website.

So let's talk a bit about grading.

It's mastery-based, and what that means is that you get multiple submissions,

multiple attempts on the assignments.

Which are each randomly changed each time you retry them.

You need to pass all of the assignments individually to be able to pass this

course.

The problem sets because there's four weeks of lectures and one problem set for

each week.

They're each designed to take bout a week.

The final exam is at the end of the class.

It looks actually basically like a problem set, but

unlike a problem set it is comprehensive.

So it covers material from all four weeks of the technical topics in the class.

And if you go look at the class website on the Coursera site,

there are a lot more details about the specific logistics of

each of these sorts of assignments and deadlines and so on.

There are also programming assignments which again I will emphasize are optional.

These are honors assignments, you can do them if you want to.

One reason to do them would be that you're interested in a deeper engagement

with the technical material; because,

instead of just doing a homework assignment where you try a concept or

an algorithm or a data structure by hand on a little problem, you're going to

build a piece of software that's actually going to do it on a realistic problem.

This will give you, I think, a deeper sense of how this stuff actually works.

And the other reason that you might actually want to do the software

assignments is that you're actually interested in a job in the VLSI CAD and

electronic design automation industry where in the real world,

most people build software.

This is what you do if you're actually part of a CAD group or a cad company,

you spend a lot of time actually designing the basic software here.

So if you're interested in a job in the business, doing some of the programming

would actually be helpful and I can actually confidently tell you that

there are people who have taken this course online on the Coursera site and

gotten jobs in the electronic design automation industry.

Because I've talked to the companies in this domain and

people can actually get jobs from this material.

So mechanically, we are going to provide you realistic inputs that model each

problem and we're going to just give you that as a file.

So this will actually just be an ASCII text file.

It'll be a readable file format in simple ASCII format.

Your software needs to use that and then generate output.

Your output will also be in a simple ASCII file form that you can read.

You're going to upload your output to the Coursera website, and

we will auto-grade it with software that we've written.

And we'll also give some feedback on the quality of your solution.

So as a consequence of this, you can run the code on your own computer, so

you're not going to actually run any of the software you design

on the Coursera website.

You can also use any programming language you like.

So if you like programming in C, or you like programming in C++, or

you like programming in Java, or you like programming in Python or anything,

you can use any language you want as long as you can read an ASCII test file, and

write an ASCII text file.

And you can run it on any platform you like.

All you have to be able to do is generate the right file.

Send it up to the Coursera website and we'll grade it and you can get credit.

Some other important stuff, obviously there's an honor code for the class and

the Coursera website has a lot more information about this.

It's okay to talk with and work with other people in the class, but

what you submit has to be your own work for homework and for any code, and please

don't post any solutions to any of the assignments on the Coursera site or share

these solutions face to face, or in email, or via the web with others in the course.

It just makes it harder for

other people in the course to be able to do their own work.

Please use the Coursera interaction mechanisms.

Coursera supports discussion forums to ask questions.

We're going to make use of these to help connect you with each other and

with the course assistants and so on.

So there will always be someone that you can interact with to help you make

forward progress in the course.

What background material do you need to be able to do this course?

Well, let's say four basic areas.

You need to know some basic computer science,

you need to have some basic programming skills and understand data structures.

Even if it's not your intention to do the software part of the assignments,

the honors part, you need to understand what programming is because we're

going to be describing our algorithms using pseudocode kinds of descriptions.

And so, you need some familiarity and

comfort with what describing something as a program looks like, and

you especially need to understand what data structures are about.

So if I say that something is a stack, or I say that something is a queue, or

I say that something is a graph,

you need to be able to understand how you might build that.

You need also some basic computer engineering skills, and that means,

primarily basic digital design.

So you know what logic gates are.

What flip flops are, what Boolean algebra is, what simple optimization methods like

Kalno maps to minimize a Boolean equation that involves combinational logic, and

you need to understand basic combinational sequential design,

so finite state machines.

This is the sort of material you would get in any introductory

digital logic design sort of class, in an undergraduate college education.