6502.org Forum  Projects  Code  Documents  Tools  Forum
It is currently Sat Nov 23, 2024 3:05 am

All times are UTC




Post new topic Reply to topic  [ 10 posts ] 
Author Message
PostPosted: Mon Dec 12, 2011 9:03 pm 
Offline

Joined: Sat Dec 26, 2009 2:15 am
Posts: 39
I just watched Jeri JeriEllsworth's video on Homebrew NMOS Transistor Step by Step
http://www.youtube.com/watch?v=w_znRopGtbE

I know next to nothing about NMOS, but I've been looking for everything on it.

How .. if at all, do the layers she describes correspond to the layers on
the visual6502 simulation ?

Mike
---------------
Jeri's Video :

- etch gate area
4 - intermediate oxide layer & drive In (oxide layer covers source & drain regsions)
- etch phosporosilica from drain, source
3 - phosporosilica film (predeposition) high concentration of phosporus into wafer
- etch source and drain (active layer) (back down to p-type)
2 = 5,000 angstrom oxide
1- p type wafer
-------------------

Simulator :

diffusion
grounded diffusion
powered diffusion
polysilicon
metal
protection


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Thu Dec 15, 2011 6:08 pm 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10986
Location: England
Note that there are always rather more processing steps than there are photo masks. (There may be a few more photo masks than there are designed layers, because sometimes a pair of photo masks are inverses of one another)

As a chip designer/layout engineer, you care about the number of designed layers, but as a process engineer, you might care about the number of process steps.

The first interesting geometry she describes is an etch of the 'active layer'. That's the same as our 'diffusion' - I use the two terms interchangeably. In visual6502 we subdivide diffusion into three classes depending on their electrical proximity to the power rails, but from a photolithography perspective, all three are the same thing.

The second mask mentioned (about 4m30) is the gate oxide. In a self-aligned-gate process, we'd have a poly mask. But this seems to be a metal-gate process, which is simpler but less robust at fine geometries. Historically, PMOS processes were often metal gate - by the time we got to NMOS, I think self-aligned poly-gate was more common. I ought to check really.

The third and final mask mentioned by Jeri (about 6m10) is the contact cut. We don't mention this in visual6502 because we don't show the contacts, but it's crucial because metal must connect to active and to poly only at specific points.

Jeri has no metal mask because she hand-draws the metal.

Hope I got those notes right, and I hope that helps.

Cheers
Ed


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Fri Dec 16, 2011 5:04 am 
Offline

Joined: Sat Dec 26, 2009 2:15 am
Posts: 39
Ok, thx Ed.

So there's some similarities, but there's some differences as well.

Off to do more reading / research.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Dec 17, 2011 5:46 pm 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10986
Location: England
A couple of points: the 'layers' of visual6502 are display layers - I was thinking of the typical user interface of CAD tools - not mask layers.

Also, you might be interested in John McMaster's blog, his wiki*, and in Peter Monta's reverse-engineering toolset and dataset - he's reversed some PMOS chips from HP calculators and tried to simulate them in a visual6502 approach, but without complete success.

Cheers
Ed

* the wiki has a new home, but it isn't responding for me at present, so that's the old location, which contains a link to the new.


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Dec 18, 2011 5:06 am 
Offline

Joined: Sat Dec 26, 2009 2:15 am
Posts: 39
Thanks for the links Ed !


I'm trying to figure out which of the layers to turn on when single stepping, e.g. to see the A register contents change

Here's a modifed version of the sim, which I've added some u.i. elements.

http://mstram.webfactional.com/webb/6502/visual6502/

I added the "showboxes" thing (which is calling the 'boxLabel' function), but the drawn boxes are getting cleared when I use the 'forward' button. I'm working on keeping those visible while single stepping

Mike


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Dec 18, 2011 10:18 am 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10986
Location: England
Ah, good thinking. It would be great to have an overlay which puts hex values over the registers, and starts to look like an annotated block diagram!

Edit: these nodes constitute A, so you could show either poly or diffusion to show those up.

Edit: with just poly visible, and those nodes highlighted, and zoomed out to show the whole chip, the effect isn't too bad.

Attachment:
visual6502polyregisters.png
visual6502polyregisters.png [ 174.69 KiB | Viewed 642 times ]

(There's no URL capability to go direct to selected layers, I think.)


Cheers
Ed


Last edited by BigEd on Fri Dec 13, 2013 3:59 pm, edited 1 time in total.

Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Dec 18, 2011 12:27 pm 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10986
Location: England
To tackle the clearing of annotations, I'd probably adjust the refresh() function, to add a re-annotation function after clearing down:

Code:
function refresh(){
   if(!chipLayoutIsVisible) return;
   ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
   drawBoxes();
   for(i in nodes){
      if(isNodeHigh(i)) overlayNode(nodes[i].segs);
   }
   hiliteNode(hilited);
}

We'd initialise that function to do nothing:
Code:
drawBoxes=function(){}

and then take advantage of JavaScript being a dynamic language to use eval to adjust the function on the fly, to rewrite it, for example
Code:
drawBoxes=function(){boxLabel(['X',    50, 2317, 8820, 2490, 5689])}


Possibly I'd use the existing structure labelThese which can be populated by the URL, for example like this

http://visual6502.org/JSSim/expert.html ... ,3333,4083
which gives us
Code:
labelThese[0]
["PLA", "100", "1169", "2328", "8393", "934"]
labelThese[1]
["Datapath", "100", "2143", "8820", "7676", "5689"]
labelThese[2]
["Control", "100", "3333", "4083"]

The function setupChipLayoutGraphics() could do the messy string manipulation to construct the drawBoxes function, or call a helper function to do it.

Hope this helps!

Cheers
Ed


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Dec 18, 2011 1:26 pm 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10986
Location: England
On second thoughts, probably no need to construct a function on the fly, just a quick test to see if the structure is empty should be fine, and then interpret it. If graphical animation is enabled then performance isn't going to be so crucial.

Cheers
Ed


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Dec 18, 2011 9:24 pm 
Offline

Joined: Sat Dec 26, 2009 2:15 am
Posts: 39
Hi Ed,

The update to the refresh() function works great !

Thanks ! ... That saved me a lot of "digging through code" time :)

I also didn't realize that a "find" / highlight signal is needed to see anything useful.

I.e. with nothing found / highlighted, what is flashing on/ off (the clock ?)

Also, is there a way to display memory beyond 0x1f0 ?

Mike


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Dec 18, 2011 9:48 pm 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10986
Location: England
Glad it helped!

It looks like the memtable.js routines are somewhat hardcoded to show the bottom of memory. It would be good to generalise them a bit, but I can't see a single-line fix. (We'd also need a user interface to set the base address)

Probably I'd start with
Code:
function setupTable(base){
   table = document.getElementById('memtable');
   for(var r=base;r<base+32;r++){

(and also remove some of the limit checking with 0x200 and 0x1ff)

The general animation, with slightly muted colours, is every signal at logic 1. The selected set of signals - which is the ones clicked on, or the set in the Find box - are highlighted with white for logic 0 or with red for logic 1. Mostly you do see the clock nodes oscillating, but also many other signals will be changing. You'll see mostly the dull magenta colour for metal and poly, and also the orange colour for active (diffusion).

Cheers
Ed


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 42 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron