היבטים אלגוריתמיים בתכנון VLSI
נערך ע"י ישראל וגנר – כל הזכויות שמורות
פרק 1. מבוא למעגלי CMOS
תוכן
§
התקני CMOS
§
מימוש לוגיקה
בשיטת CMOS
§
עריכה: מיפוי
מתיאור סכמטי לתיאור פיסיקלי
§
מימוש
טרנזיסטורים בחומרה
§
חיבורים: קוי
מתכת ומגעים
§
פורמט שתי השורות
התקני CMOS

איור 1 טרנזיסטור NMOS במבט על (משמאל) מבט צד (אמצע) וסימון סכמטי
(מימין).

איור 2 אופן הפעולה של טרנזיסטור NMOS במצב קיטעון (למעלה) ובמצב
הולכה (למטה)

איור 3 מודל חשמלי לטרנזיסטור בשלושת מצביו: קיטעון CUTOFF)), לינארי, ורויה SATURATION) ).

איור 4 איפיון טרנזיסטור ע"י היחס בין הזרם Id לבין המתח Vds

איור 5 מהפך CMOS וגרפים של מתח הכניסה, מתח היציאה והזרם, הזורם כמעט אך ורק בזמן שינוי
המצב.

איור 6 תמונה תלת-מימדית של מהפך, כולל שלושת שכבות המתכת שמעליו וחיבורים
ביניהן
מימוש לוגיקה בשיטת CMOS
בשיטה זו נתייחס לרכיבים מסוג PFET כמתגים עם הדק שלילי (מוליכים כשהשער במצב "0"), ולרכיבים
מסוג NFET כמתגים עם הדק חיובי (מוליכים כשהשער במצב
"1" (. ").
בהינתן פונקציה בולאנית F נבנה שני מעגלים: האחד עם רכיבים מסוג PFET יממש את הפונקציה F , והשני
עם רכיבים מסוג NFET יממש את הפונקציה not(F) . כך
נבטיח שלכל ערך אפשרי של הכניסות, יימצא מסלול מוליר לספק (VDD) או לאדמה (GND).
באופן כזה ניתן לממש מהפך :
את
טבלת האמת ניתן לפתח מתוך התנהגותם של הטרנזיסטורים:
|
x |
Tp |
Tn |
y |
|
0 |
on |
off |
1 |
|
1 |
off |
on |
0 |
באופן
דומה נממש NAND :

אילו
פונקציות ניתן לממש כך ?
הגדרה: פונקציה F(x) היא מונוטונית יורדת אם: [X -> Y] -> [F(Y)
-> F(X)]
טענה: אם פונקציה ניתנת למימוש בשיטת CMOS הנ"ל אזי היא מונוטונית יורדת.
הוכחה: לפי ההנחה אם X(i)=1 אזי גם Y(i)=1.
לכן, אם עבור הכניסה X
ישנו מסלול מהיציאה לאדמה, המסלול הזה קיים גם עבור הכניסה Y. כלומר: אם F(X)=0 אזי גם F(Y)=0,
ומכאן נובע שאם F(Y)=1 אזי
גם F(X)=1 , כלומר: F(Y)->F(X). ٱ
יצוג פולני
מעגל מסוג CMOS
ניתן ליצג
(טופולוגית) ע"י "ביטוי פולני" (או POSTFIX ) .
לצורך זה נסמן חיבורים מקבילים באות P
וחיבורים טוריים
באות S. לדוגמא, צד ה-N של הNAND הנ"ל יסומן כך:
X1,X2,S
ואילו
שער מסוג AOI (And-Or-Invert)
שהפונקציה שלו היא: F(a,b,c,d)=not(ab
+ cd) יירשם כך:
A,b,S,c,d,S,P
תכנית
ה MATLAB הבאה יוצרת טבלת אמת מתוך
ביטוי פולני:
function
[TT] = truth(pexp)
%
TT = TruthTable induced by
%
the polish expression 'pexp' for the N-tree
%
part of a CMOS circuit
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TT=zeros(16,5);
row=0;
global STACK
STACK= [0];
% main loop
for a=0:1
for b=0:1
for c=0:1
for d=0:1
row = row + 1;
TT(row,1:5)=[a b c d
value(pexp, a,b,c,d)];
end
end
end
end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
functions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
[v] = value(pexp,a,b,c,d)
global STACK;
n=length(pexp);
for i=1:n
z=pexp(i);
if (z=='P')
x1 = pop;
x2 = pop;
push(x1 | x2);
elseif (z=='S')
x1 = pop;
x2 = pop;
push(x1 &
x2);
else
switch z
case 'a'
push(a);
case 'b'
push(b);
case 'c'
push(c);
case 'd'
push(d);
otherwise
printf('error in switch !!!\n');
end
end
end
v = ~pop;
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
[] = push(a)
global STACK;
STACK = [a STACK];
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function
a = pop
global STACK;
h=length(STACK);
a=STACK(1);
STACK = STACK(2:h);
return
עריכה:
מיפוי מתיאור סכמטי לתיאור פיסיקלי
כדי
לממש מעגל אלקטרוני בחומרה, יש ליצור מיפוי מעולם המעגלים (כלומר הרכיבים
והחיבורים ביניהם) אל עולם האוביקטים הפיסיקליים (כלומר פוליגונים המוטבעים
בשכבות הייצור השונות בתהליך של VLSI), מיפוי כזה, אם ייעשה בהתאם
לחוקי הטכנולוגיה (ground rules) ,
יאפשר לייצר שבב המבצע את הפונקציה הנדרשת. להלן נעסוק בשלבי העריכה של מעגל מסוג CMOS.
מימוש
טרנזיסטורים בחומרה
כזכור
(מהרצאה מס. 1) ניתן להשיג את תופעת השדה הנדרשת ליצירת מתג MOS ע"י יצירת שכבת דיפוזיה (כלומר סימום יתר של הסיליקון
ביונים) ומעליה שער מפוליסיליקון, כשביניהם חוצצת שכבת בידוד דקה של תחמוצת. במקרה
של טרנזיסטור מסוג PMOS,
מוטבעת לפני הדיפוזיה גם שכבה מסוג N-well,
שתפקידה לאפשר לטרנזיסטור מסוג זה לשהות בפוטנציאל גבוה (בניגוד ל- NMOS השרוי בפוטנציאל אדמה כמו המצע (=bulk)).
חיבורים:
קווי מתכת ומגעים
כדי לממש
חיבורים בין הטרנזיסטורים, יש ליצור קוים מוליכים. קוים אלו עשויים בדרך כלל מחוטי
מתכת (אלומיניום או נחושת) וממגעים –
היוצרים קשר ושמלי בין מתכת לטרנזיסטור או בין מתכות בשכבות שונות. למעשה מגעים
אינם אלא חורים הנוצרים בכוונה בשכבת התחמוצת שבין השכבות האפקטיביות כך שאם
יצרנו, למשל, חור בתחמוצת שמעל שכבת Metal-2, הרי שכאשר ניצור את שכבת המתכת
הבאה (Metal-3)
היא תזלוג פנימה לתוך החור וכך ייוצר מגע חשמלי בין השכבות. מאחר שתהליך זה של
זליגה איננו איכותי כמו המתכת עצמה, קיימת אי-ודאות באשר למוליכותם של מגעים, ולכן
רצוי למעט בהם ככל האפשר.
לדוגמא,
כדי למש מהפך ניצור את הפוליגונים הבאים:

שימו
לב כי החיבור בין השערים נוצר בפוליסיליקון, ללא צורך במתכת, וכן לכך שניתן לחייט
את התא בשכבה אחת של מתכת (בניגוד לתאים מורכבים יותר שעלולים להצריך שכבה נוספת).
פורמט
שתי השורות
באינטגרציה
של מערכות גדולות, יש להקפיד על מימשק אחיד – אחרת לא יוכלו החלקים השונים להתחבר
יחד. במערכות VLSI
נהוג להקפיד על פורמט עריכה (layout style)
קבוע כדי לאפשר הרכבת יחידות באופן פשוט ונוח. הפורמט הנפוץ ביותר הוא זה שהוצע
לראשונה ע"י Uehara &
vanCleemput בשנת 1981, ומבוסס על שתי שורות של טרנזיסטורים, האחת מסוג P והשנייה מסוג N. החיוט נעשה מעל הטרנזיסטורים וגם
ביניהם, וקווי הספק עוברים גם הם מעל הטרנזיסטורים: קו ה- VDD מעל שורת ה- P, וקו האדמה (GND) מעל
שורת ה- N.
פורמט
זה מתאים ביותר לאינטגרציה משום שניתן להצמיד שני תאים לשורה אופקית ללא צורך
בשינויים (כל עוד מקפידים על גובה אחיד של קווי הספק). פורמט זה גם מאפשר חיסכון
בשטח הודות לצירופי דיפוזיות (abutment) כלומר שיתןף שני חלקי
דיפוזיה בין טרנזיסטורים שכנים, כמו בדוגמא הבאה:
דוגמא לעריכת מעגל מורכב: