חדשות היום

מדוע LTspice טוב יותר בהפקת תוצאות נכונות מיישומי SPICE אחרים – חלק א’

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

לצורך סימולציה של מעגלים אנלוגיים נעשה שימוש ב-SPICE מכיוון של-SPICE יכולת לחשב את התנהגות האות הגדול במלואו של מעגלים שרירותיים. ב-SPICE נעשה שימוש בשלוש שיטות נומריות והן נחשבות לסיבת הצלחת ה-SPICE בסימולציה של מעגלים אנלוגיים, והן:

איטרציית ניוטון, למציאת פתרון למעגלים עם אלמנטים שאינם לינאריים

Sparse Matrix (מטריצה מדוללת) שיטות להקטנת מטריצות גדולות בכדי שיתאימו לגודל מעשי של זיכרון מחשב

אינטגרציה ברורה של המשוואות הדיפרנציאליות המתקבלות מההיגבים הקיימים במעגלים

היכולת של סימולטור SPICE להפיק תוצאות מהימנות מסתמכות על יישום נכון והוצאה לפועל מדויקת של שיטות אלו.

איטרציית ניוטון

איטרציית ניוטון כוללת הרחבה של עקומת I-V לכל מעגל שאינו לינארי, לטור טיילור תוך כדי שמירה של שני הביטויים הראשונים של הטור ולאחר מכן פתרון של כלל המערכת על ידי שימוש במשוואות לינאריות בו זמנית. אם פתרון המערכת הלינארית הוא אכן אותה נקודה אשר טור הטיילור הורחב אליה, אזי, מכיוון שהקירוב הטיילורי הוא באותה נקודה או מדויק סביב הנקודה, הפתרון של מערכת לינארית זו הוא אמנם הפתרון הנכון למעגל המקורי הלא לינארי (1). הצלחת ההתכנסות של איטרציית ניוטון מביאה למציאת הוכחה מספרית שהפתרון הנכון למעגל נמצא.

חוסנה של איטרציית ניוטון תלויה ב:

1. עקומת ה-I-V של כל האלמנטים במעגל רציפה בערכה ובשיפועה

2. כל האלמנטים שאינם ליניאריים מצומדים עם קיבול כך שפתרונם הקודם בזמן הוא נקודת פתיחה טובה לאיטרציית ניוטון לנקודת הזמן הנוכחית.

תנאים 1 ו-2 מתקבלים בכל  מעגל פיזי, אך תוכנות מבוססות SPICE לא תמיד מסוגלות לפתור זאת נכון מכיוון שבאלמנטים מוליכים למחצה ב-Berkeley SPICE (עליו מסתמכים סימולטורים) קיימת אי רציפות בעקומת ה I-V ומכך שגיאות ביישומם מה שהביא לתשלום עבור יישומי SPICE לאלמנטים אלו. לעומת זאת, תופעות אי רציפות אלו אינן מתרחשות

ב- LTspice. בכדי להמחיש זאת נשתמש בדוגמה, איור 1 מראה את עקומת ה I-V של דיודה

ב-PSpice  לעומת ה-LTspice. ה-Netlist אשר נעשה בה שימוש בכל מקרה היא:

* I-V discontinuity in PSpice diode

V1 N001 0 0

D1 N001 0 D

.dc V1 -.3 -.2 2u

.probe

.model D D(Is=10n)

.end

עקומת ה-I-V של הדיודה ב-PSpice אינה רציפה בערכה ובשיפועה. אי רציפות מסוגים אלו קיימים ברוב האלמנטים המוליכים למחצה הקיימים ב-PSpice אך אינן קיימות באלמנטים המוליכים למחצה ב-LTspice.

שיטת Sparse Matrix

טור טיילור הוא רב ממדי, ממד אחד לכל מתח צומת לא ידוע במעגל. רכיב משולב אנלוגי יכול להיות בעל 100,000 צמתי מתח ייחודיים, דבר המביא למטריצה הולכה של 100,000 על 100,000 או שמונים ביליון בתים למטריצה למקדמי מטריצת דיוק כפול. גם למעבדים החדשים כיום בעלי 64 ביטים אין מספיק קווי כתובת לגשת לכמות גבוהה כזו של זיכרון. למרבה המזל כמעט כל המקדמים במטריצה הם אפסים ואינם צריכים להיות שמורים בזיכרון. שיטת Sparse Matrix של דילול מטריצות עוקבת אחר האלמנטים במטריצה ששונים מאפס. דבר זה מאפשר פתרון מטריצות גדולות מאד בשטח זיכרון קטן יחסית.

דלילות המטריצה נובעת מהאופי הפיזי של מעגלים מעשיים. רוב הצמתים מחוברים רק למספר קטן של צמתים אחרים. לדוגמה, אפילו אם נרשום את מטריצת המוליכות של מעגל שנראה כמו רשת דייגים של נגדים, המטריצה היא כמעט אופקית מכיוון שכל צומת מחוברת רק לצמתים הקרובים אליו. מעגלים מעשיים אינם צפופים בחיבורים כפי שרשת דייגים צפופה עם קשרים. הדילול של מעגלים אנלוגיים גדולים היא בטווח של חלקים למיליונים (Parts Per Milion). הדילול הוא שמאפשר את פתרון המטריצה במחשבים של היום. איטרציות ניוטון אינן אפשריות ללא שיטת דילול המטריצות. הדמיון הגדול ביישומי SPICE למיניהם הוא השימוש בשיטת דילול המטריצות. בכל תוכנות ה-SPICE נעשה שימוש בפרוק לגורמים מסוג  (Lower Upper Factorization), לחישוב מטריצות. רוב יישומי ה-SPICE משתמשים בדילול מטריצות מהקוד (הפתוח) האקדמי של Berkeley SPICE, אך כמה מיישומי ה-SPICE, אשר בד”כ משווקים כסימולטורי SPICE מהירים, מנסים לשפר את הקוד האקדמי על ידי שימוש בספריית דילול מטריצות מתקדמת כגון  (3).

גישה טובה יותר היא לאפשר ל-CPU לחשב את המתמטיקה בקצב ה- (Floating Point Operation per Second) התיאורטי של החומרה הקיימת. ה- (Floating Point Unit) של המעבד בד”כ ריקה מעיבודים וזאת מכיוון שמערכות ההפעלה משתמשות בהקצאת זיכרון דינאמית. בזמן שהסימולטור כותב ומקמפל, מיקום הזיכרון ששומר את מידע המטריצה לא ידוע. בזמן אמת הסימולטור מבקש זיכרון בעזרת פונקציית malloc, אשר מחזירה את הכתובת אשר בה ולסימולטור מתאפשר בבטחה לשמור את מידע המטריצה. מכיוון שזה לא אנושי לספק שם לכל אלמנט במטריצה, נעשה שימוש במערכים. זה אומר שהסימולטור מבקש פחות, אך חלקים גדולים של זיכרון והמקדמים האינדיבידואלים מסודרים באינדקס מהכתובת של הזיכרון המוחזר על ידי פונקציית malloc. כל מה שידוע בזמן הרצת הסימולטור הוא הכתובת של הכתובת של כתובת הבסיס אשר בה מצוי האינדקס של האלמנטים של המטריצה. לפתור את נושא כתובת הבסיס בזמן אמת והבאת הנתונים מהמצביעים על אותה כתובת לתוך ה-FPU לוקח יותר זמן מאשר ה-FLOP עצמו (4). באופן אידאלי, כתובות המידע הנדרש לחישוב יהיה ידוע לפני זמן החישוב כך שהבאת המידע ל-FPU תהיה נצילה וכך ה-FPU לא תצטרך לחכות למידע להגיע אליה.

LTspice מבטל את התקורות הקיימות בהבאת המידע אל ה-FPU באמצעות עריכה עצמית של קוד בשפת אסמבלר הנכתב בזמן אמת, לאחר שהוקצה מקום בזיכרון למטריצה וכל הכתובות אשר הוחזרו מפונקציית malloc ידועות אף הן. קוד זה שנכתב בזמן מאוחר יכול לפתור כתובות קונקרטיות של אלמנטים במטריצה אשר בקנה אחד עם הקוד כך שמידע יכול להיות מועבר בצורה יעילה ומאפשר ל-FPU לעבוד כאשר החוצצים שלה מלאים כאשר הקוד עובר תהליכי סינתזה וקישור על ידי המסנתז והמקשר הבנויים ב-LTspice. ה-LTspice ייחודי בגישה של כתיבת קוד האסמבלר הסנתוז והקישור העצמי של פתירת דילול המטריצה. ביצועי שיטה זו טובים להפליא מכל טכניקה אחרת.

אינטגרציה עקיפה

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

אינטגרציה נומרית כוללת שגיאה. סימולציות מעגלים אנלוגיים כרוכה באינטגרציית ההתנהגות של קבועי זמן רבים. טבעה של אינטגרציית משוואות דיפרנציאליות שלהן פתרונים שנראים כ- (-const*time) היא שהשגיאה תצטבר לאינסוף, אלא אם כן נעשה שימוש בשיטה הנקראת אינטגרציה עקיפה

() (5). ללא אינטגרציה עקיפה, ניתוח סימולציה מסוג Transient, לא הייתה אפשרית ב-SPICE.

ב-SPICE נעשה שימוש באינטגרציה מסדר שני. רוב האימפלמנטציות של SPICE נעשות לפי ה-Berkeley SPICE ומספקות שתי דרכים ליישום אינטגרציה עקיפה מסדר שני והן: תשלובת (Gear) ו-טרפז (Trapezoidal או בקיצור Trap) . האינטגרציה מסוג Trap היא מהירה יותר וכמו כן מדויקת יותר מאינטגרציית Gear. אף על פי כן, אינטגרציית Trap יכולה לתת ביטוי לממצא שווא שבו פתרון האינטגרציה של נקודות הזמן הדיסקרטיות מראה התנהגות של תנודות (Oscillations) מנקודת זמן לנקודת זמן, מנקודת מבט על הזמן הרציף. דבר זה יכול לגרום למשתמש להיות חשדן בהקשר לתקינות של הסימולטור למרות שכל טרפז מכיל בצורה נכונה את שטח האינטגרציה.

עקב הפחד מצלצולים (Ringing) הקשורים לאינטגרציית Trap היא הפכה להיות ללא מקובלת על מתכנני מעגלים אנלוגיים (7), עד כדי כך שתוכנת SPICE מסחרית, PSpice, בחרה להסיר אינטגרציית Trap לחלוטין ובכך השאירה רק את אינטגרציית ה-Gear שהיא האיטית והפחות מדויקת כאופציה הקיימת היחידה. אך אינטגרציית ה-Gear לא רק מדכאת את הצלצולים הנומריים, היא מדכאת את כל הצלצולים, אפילו צלצולים פיזיים וגורמת בכך לאפשרות שמעגל שיכשל בתפקוד בחיים האמתיים עקב תנודות לא רצוניות (אוסילציות), להראות בסימולציה כמעגל יציב ומתפקד לחלוטין מכיוון שאי היציבות דוכאה מקיום נומרי. זה מוביל למצבים הרסניים שבהם תכנון של רכיב מעגל משולב עובר סימולציה ב-PSpice, נערך ומיוצר ולאחר מכן מתגלה כי המעגל לא מתפקד כפי שנדרש עקב בעיות של אי-יציבות מכיוון שאינטגרציית ה-Gear ב-PSpice החמיצה את הפתרון. כעת ייווספו עלויות של זמן וכסף לתקון לגרסת Mask ובכדי לתקן את אי היציבות ולהשיג את הפונקציונאליות המקורית.

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

1. גודל צעדים קטנים מביא למהירות סימולציה נמוכה מאד

2. אין דרך להבטיח שגודל הצעד הוא קטן מספיק בכל מקרה

בתעוד של PSpice נטען כי התוכנה עשה שימוש במודיפיקציה של שיטת Gear ואכן נראה כי הסימולציה נראית טוב יותר בבחירה של גודל צעד קטן מספיק בכדי למזער את שגיאות אינטגרציית ה-Gear המיושמות ב-Berkeley SPICE.

למרות זאת, השיטה הקיימת ב-PSpice נכשלת לעיתים קרובות. קל לתכנן מעגל טריוויאלי ולראות כיצד תוצאת האינטגרציה הנומרית סוטה באופן דרמטי מהפתרון האמיתי אשר ניתן למצוא על ידי בדיקה.  לדוגמה, איור 2, אשר מראה מעגל בו מחוברים סליל וקבל במקביל ולהם מחובר מקור זרם הניתן לשינוי מסוג Piecewise Linear. מקור הזרם מייצר ספייק של זרם ב-0.2 מילי שניות הראשונות ועובר לאפס זרם לאחר מכן. הפתרון שאמור להיות הוא שמעגל התהודה מקבל דרבון ממקור הזרם ולאחר מכן הוא מצלצל באמפליטודה קבועה. ה-Netlist של המעגל ניתן לפי:

* Gear (PSpice) integration error

L1 N001 0 50m

I1 0 N001 PWL(0 0 .1m .1 .2m 0)

C1 N001 0 .1u

.tran 1 1 0 50u

.probe

.end

איור 3 מראה שהשינוי באינטגרציית ה-Gear של PSpice מדכאה את הצלצולים בעוד ש-LTspice מניבה באופן מיידי את הפתרון הנכון. השגיאה ב-Pspice יכולה להיות מופחתת על ידי ציון גודל צעד זמן מקסימאלי קטן יותר (המספר הרביעי בהצהרת .tran). המעגל באיור 2 אמור להוות מעגל פשוט ל-PSpice ולאינטגרציית ה-Gear ששונתה בו והוא אמור להבין את הפתרון. אך, מעגל עם יותר מדי קבועי זמן הוא באופן בסיסי בלתי ניתן לפתירה ב-PSpice באופן מהימן, מבלי שהמהנדס יבדוק באופן ידני איך “הפתרון” מתכנס כאשר מציינים גודל צעד בזמן מקסימאלי קטן יותר. איור 3 מראה כיצד אינטגרציה-Gear ב-PSpice באופן ברור לא עושה אינטגרציה נכונה של שני ההיגבים במעגל טריוויאלי שלו רק צומת אחת. הטבע של אינטגרציה מסוג Gear היא לגרום למעגלים להראות יציבים יותר בסימולציה מאשר שהם באמת בחיים האמיתיים.

בכדי להבין את השלכות השגיאה הזו בפרספקטיבה של דוגמת תכנון מעשי, איור 4 מראה דוגמה למגבר הספק לאודיו שאינו יציב מכיוון שקבל הפיצוי C2, קטן מדי. סימולציה של מעגל זה ב-PSpice מראה באופן לא נכון שהמעגל יציב, בעוד שסימולציה ב-LTSpice מספקת את התוצאה הנכונה. ה-Netlist שנעשה בה שימוש בשני התוכנות היא:

* Unstable Power Amplifier

Q5 N001 N006 N007 0 Q3904

Q7 N001 N007 OUT 0 Q2219A

Q8 OUT N013 N014 0 Q2219A

Q6 N013 N012 OUT 0 Q3906

V1 N001 0 10

V2 N014 0 -10

R11 N012 N014 5K

R14 OUT 0 8

R9 N006 N008 2K

R10 N008 N012 1K

Q4 N006 N008 N012 0 Q3904

Q1 N005 N009 N011 0 Q3904

Q2 N002 N010 N011 0 Q3904

R3 N011 N014 1K

Q3 N006 N004 N003 0 Q3906

R6 N010 0 20K

R7 OUT N010 200K

V3 IN 0 pulse(0 .1 0+ 5u 5u 50u 100u)

R8 N001 N003 100

R4 N004 N005 10K

C2 N006 N004 10p

R13 N013 N014 1K

R12 N007 OUT 1K

C3 N006 N012 .001u

Q9 N005 N002 N001 0 Q3906

Q10 N002 N002 N001 0 Q3906

R2 IN N009 9.09K

.tran 100u 100u

.model Q3904 NPN(Is=1E-14 Vaf=100 + Bf=300 Ikf=0.4 Xtb=1.5 + Br=4 Cjc=4p Cje=8p Rb=20 Rc=0.1 + Re=0.1 Tr=250n Tf=.35n + Itf=1 Vtf=2 Xtf=3)

.model Q3906 PNP(Is=1E-14 Vaf=100 + Bf=200 Ikf=0.4 Xtb=1.5 + Br=4 Cjc=4.5p Cje=10p Rb=20 + Rc=0.1 Re=0.1 Tr=250n + Tf=.35n Itf=1 Vtf=2 Xtf=3)

.model Q2219A NPN(Is=14.34f + Xti=3 Eg=1.11 Vaf=74.03 + Bf=255.9 Ne=1.307 Ise=14.34f + Ikf=.2847 Xtb=1.5 + Br=6.092 Nc=2 Isc=0 Ikr=0 + Rc=1 Cjc=7.306p Mjc=.3416 + Vjc=.75 Fc=.5 Cje=22.01p + Mje=.377 Vje=.75 Tr=46.91n + Tf=411.1p Itf=.6 Vtf=1.7 + Xtf=3 Rb=10)

.probe

.end

איור 5 משווה בין התוצאה היציבה והמוטעית שהתקבלה מתוכנת-PSpice (שמאל) עם התוצאה, בעלת התנודות והנכונה מתוכנת ה-LTspice (ימין). הסימולציה היא ניתוח מסוג transient לתגובת מדרגה לאות גדול. אם נציין גודל צעד בזמן קטן מספיק בתוכנת PSpice, אפשר לאלץ את התוכנה להתקרב לפתרון הנכון, PSpice פשוט לא עושה אינטגרציה מדויקת מספקי למשוואות הדיפרנציאליות.

הערות שוליים

(1) אחרת הפתרון של המערכת הלינארית משמש כצעד איטרציה: המעגל הלא לינארי המקורי מורחב מחדש כטור טיילור חדש לפתרון זה, שוב כאשר רק שני הביטויים הראשונים נשמרים ואחר כך פתרון לשאר המערכת של המשוואות הלינאריות הסימולטניות. התהליך חוזר על עצמו עד אשר הוכח בהצלחה שהפתרון שנמצא מוצלח.

(2) PSpice הוא סימן מסחרי של Cadance. נעשה שימוש בגרסה 9.2 בשביל התמונות במאמר.

(3) ככל שמדללים יותר את המטריצה כך היא יכולה יותר להיות רשומה כאלכסון. כלומר, מטריצה פתורה. מכיוון שמטריצות מעגלים אנלוגיים דלילות מאד, שיפור פירוק לגורמים LU עם SuperLU לא מוסיף יתרון מהירות משמעותי.

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

(5) ספרות בנושא זה מציינת כי הפתרון הנומרי אינו יחיד אם גודל צעד הזמן קטן מספיק מובטח, אבל למעשה גישה עם אינטגרציה מפורשת וגודל צעד זמן מוגבל לא עובד אלא אם כן אפשר לשלב אותו נומרית עם דיוק אינסופי. השגיאה לא מתווספת לאינסוף מכיוון שהנגזרת מקורבת עם הבדלי דגימה סופיים. אין סימולאטורים מוצלחים למעגלים אנלוגים כלליים אשר משתמשים ב-Explicit Integration.

(6) SPICE לעיתים עובר לאינטגרציה מסדר ראשון וזאת אם אירוע ידוע שאינו רציף ולו נגזרת מסדר ראשון, לדוגמה מעבר בין שני סגמנטים ישרים אשר נוצרו ע”י Piecewise Linear או פונקציית פולס של מקור זרם עצמאי, רוב יישומי ה-SPICE יעברו לאינטגרציה מסדר ראשון של היגבי אותו מעגל במעבר.

(7) למשתמשים יש נטייה להיות חשדנים בהקשר ל-SPICE מכיוון שספרות פופולארית מורידה בערכם של סימולאטורי ה-SPICE.

חלק ב’ של הכתבה בגיליון יוני 2015

 

 

מייק אנגלהארט

תגובות סגורות