JTAG לטובת בדיקות פונקציונאליות

JTAG לטובת בדיקות פונקציונאליותמאת: עידן רם, RDT

“סריקת גבולות” (או כפי שהיא מוכרת לכולנו כ- Jtag Boundary Scan) היא כנראה שיטת הבדיקה למעגלים חשמליים המוכרת ביותר בעולם הייצור האלקטרוני ובין כלי הבדיקה “המבניים” – המשמשים לבדיקת קישוריות תקינה בין רכיבים תומכי תקן JTAG – IEEE1149.1.
כמו כן ידוע ה- JTAG ביכולתו לתכנת רכיבי PLD, והוא גם בשימוש נרחב עבור תכנות רכיבי זיכרון (Flash) לאחר הרכבתם על המעגל (ISP- In System Programming) ושל בקרים קונטרולרים  בעלי זיכרון פנימי.
אבל, הוא אינו מוכר, לפחות לא באופן נרחב ביכולותיו ושילובו בבדיקות פונקציונאליות.
הסיבה לכך היא מפני שהגישה של “סריקת הגבולות” (במיוחד בבדיקות הייצור) היה מאז ומתמיד מבוסס על וקטורי בדיקה ולא מבוסס שפת תכנות.
עבור בדיקת קישוריות ובדיקת קצר נתק, סריקת הגבולות מספק רק אינדיקציה של עבר/ נכשל, וכמובן יש לו יכולת אבחון ודיאגנוסטיקה, אשר מנתחת את תוצאות הבדיקה והכשלים בכדי לתת למפעיל המערכת, תיאור מדויק של התקלה ואיתור מהיר על גביי המעגל.
למרות זאת, ברור כי הגישה החשמלית שמספקים הרכיבים תומכי JTAG, לרכיבי המעגל ובהם גם רכיבים מעורבים (Mixed Signal)  מאפשר לרתום את יכולותיהם לביצוע בדיקות פונקציונאליות.
לדוגמה, רכיב בעל ממשק I2C או SPI (כגון מד טמפרטורה).
בעוד שניתן להשתמש בגישת ה-JTAG המבוססת וקטורים בכדי לדמות את מחזורי הערוץ הדיגיטאלי, להעביר הוראות ולקבל נתונים על גבי ערוץ ה- I2C  או  SPI, גישה זו מעט קשה לביצוע ומוגבלת ביכולותיה ובגמישות קבלת נתונים.
כדי להתגבר על מגבלות הגישה הוקטורית, הציגה לאחרונה חברת JTAG Technologies
גישה חדשה עבור בדיקות פונקציונאלית בשם JFT אשר מבוססת על קוד פתוח, בשפת PythonTM ומאפשר גישה ישירה לחומרת המעגל הנבדק. כמו כן, בדיקות ה-JFT עובדות בשתי רמות, כלומר, סריקת גבולות ברמת רגל בודדת ורמת “אשכול” (Cluster).
שימוש בבדיקות המבוססות קוד Python שלא כחלק מהכלים של  JTAG Technologies (ככלי בדיקה נפרד), זמינות כחבילת כלים בעלות נמוכה ובשם JTAG Live.
ביצוע בדיקות Boundary Scan ברמת רגל של רכיב (איור מספר 1), ניתן לבצע עם ידע מינימאלי של המעגל הנבדק והחיבור בין רכיבי המעגל כלומר, ללא התייחסות ל- Net-list.
רגלים בודדות של רכיב יכולות להיות מונעות באמצעות הוראות פשוטות כגון: DriveHigh DriveLow ו-HighZ, ולקרוא באמצעות TestHigh ו-TestLow.
בנוסף, ניתן להגדיר קבוצות של רגליים באמצעות DeclareGroup. לדוגמה, רגלי רכיב תואם-JTAG אשר מחוברות לרכיב הממיר אות דיגיטאלי לאנלוגי (DAC) שאינו תואם-JTAG יכול להיות חלק מקבוצה בשם “DACInput” שיוגדר כמשתנה.
המשתנה “DACInput” ישלט אח”כ באמצעות פקודות DriveVar.
באופן דומה, היציאות של רכיב ה- ADC המחזיר את האות הדיגיטאלי לרכיב ה-JTAG, יוגדרו בשם, ויקראו ידי פקודת TestVar.
תוספת של בדיקות פונקציונאלית ברמה זו למעגלים חשמליים, מאפשרת למהנדסי החומרה לבצע את פעולות איתור התקלות (debug) לתכן החשמלי מבלי להזדקק לכתיבת בדיקות משובצות (Embedded) פונקציונאליות דרך רכיבי  FPGA של המעגל או בעזרת ציוד בדיקה חיצוני.
באותה מידה, אנשי הנדסת בדיקות יכולים לפתח תוכניות בדיקה בכדי לכסות אזורים ורכיבים במעגל אשר אינם נבדקים ע”י בדיקות ה-JTAG הרגילות ולהגדיל את כיסוי התקלות.
לאחר שנוצר מודול Python, הבדיקות של רכיבים והתקנים, למשל, רכיבי ממשק I2C, הופך לפשוט. משתמשים של
JTAG Scripts Live יכולים, לבקש מודולים מדגמיים המכילים פקודות עבור ממשקי I2C, בדיקת רכיבי זיכרון וצריבות.
לדוגמא ‘Script’ I2C .
Declare_I2C_Pins(SCL,SDA)
באמצעות רגלי I2C ניתן לתפוס ערכים מרכיבי –  ADCs בעל ממשק מתאים, ולתכנת בזמן אמת ובקלות רכיבי שעונים (RTCs). או להוסיף כמה קבצים של Serial I/O ואפילו לצרוב רכיביSerial PROM  בהתבסס על פרוטוקול I2C.
הדוגמאות למודולים כוללים:
#Set 7-bit address of I2C device
Set_I2C_Address(VarValue)  #VarValue = 7 character string. e.g. “1101000”
#Execute an I2C read operation and compare the byte read back against VarValue
READ(VarValue)   #VarValue = 8 character string. e.g. “00000001”
#Execute an I2C write operation. Write a byte of data VarValue
WRITE(VarValue)  #VarValue = 8 character string. e.g. “00001001”

בדיקות ברמת “אשכול” (Cluster):
ברמת אשכול, בדיקות עוברות לשלב הבא, ע”י כך שהן מאפשרות למשתמש להגדיר ברמת הרגל של הרכיב הנבדק – משתנים, ובעזרתם ומנקודת המבט של הרכיב לבצע בדיקות.
השליטה הפעם היא ברגלים בודדות – אך הפעם באמצעות שימוש בפקודות שונות כגון: InputHigh ו- OutputLow. כמו קודם, ניתן להגדיר רגלים – כשייכות לקבוצות ולמשתנים שהוקצו. לדוגמה, עם התייחסות לאיור 2, רגלי הרכיב 3ICי,2,7,12 ו-20 יכולות להתקבץ ולהיות מוקצות למשתנה “”Vout – שהוא יציאות הרכיב ולהישלט כמספר HEX או מספר עשרוני.
ישנם יתרונות ניכרים לשיטה זו, כאשר נעשה שימוש בכלי פיתוח שהם “מודעי חיבור”
“Nelist-Aware”, כמו JTAG ProVision, ניתן ליצור ולשמור תוכניות בדיקה (Scripts) שלמים של הרכיבים וללא התייחסות אל החיבור עם רגלי סריקת הגבולות
(JTAG Boundary Scan) המשמשים בתור הגישה לגירוי (Drive) ותגובה (Sense) של האותות, זה הופך אותם לניידים וניתנים לשימוש חוזר בתוכניות בדיקה.
אכן, Jtag ProVision כבר תומך במודלים הניתנים לשימוש חוזר לטובת “השבתת רכיבים” בזמן הבדיקה, חיבור של קווים, ובדיקות של רכיבים סטנדרטיים (כגון זיכרונות ומשפחות רכיבים לוגיות), ובכל אופן, רוטינות ה- Python JFT מוסיפות מימד נוסף, פונקציונאלי באופיו ליכולות הפיתוח של הכלי הבדיקה, לדוגמא תכנות התקן RTC עם חותמת זמן הנלכדת מהמחשב בעמדת הבדיקה, בעבר זה היה די מסובך. עכשיו, זה קל באופן יחסי עם ה- JFT.

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