SDRAM, ראשי תיבות של Synchronous Dynamic Random Access Memory, הוא התקן חומרה לזיכרון מחשב. התקן זה משתמש בתושבת דימים (DIMMs). בדרך כלל SDRAM תומך במהירויות מ-66 מגה הרץ ועד 133 מגה הרץ.
לעומת 72 הפינים שהיו בזיכרונות EDO DRAM שקדמו לו, או 30 פינים בזיכרונות מוקדמים יותר, התקן SDRAM משתמש בתושבת בעלת 168 פינים.
זיכרון גישה אקראית (RAM) הוא אמצעי מהיר לאחסון מידע. במחשבים, נעשה שימוש בזיכרון זה על מנת לספק גישה לנתונים ולקוד. הזיכרון נחשב "אקראי", שכן ניתן לגשת לכל פיסת מידע אקראית בזיכרון באותה מהירות.
זיכרון אקראי דינמי (DRAM), מבוסס על יכולתו של קבל לשמור מטען ודורש רק טרנסיסטור אחד לכול סיבית. צפיפותו של ה-DRAM גדולה מזו של SRAM, אך מהירות הפעולה קטנה יותר. בגלל תופעת זרם הזליגה, DRAM דורש רענון. דרישת הרענון היא מקור המילה "דינמי" בשם הזיכרון.
בלבו של תא זיכרון דינמי יש קבל שיכול להיות טעון (ולייצג את הספרה הבינארית 1), או פרוק (0). ניתן לדמות את תא הזיכרון הדינמי לדלי דולף: כמו שרמת המים בדלי הדולף הולכת ויורדת, כן המתח על הקבל הולך ופוחת עקב זרם הזליגה. אם אדם ימתין מספיק זמן, שוב לא יוכל להבדיל בין תא המייצג "0" ובין תא שייצג "1" שרוב מטענו זלג, כשם שלא יוכל להבחין בין דלי שהיה ריק מלכתחילה לבין דלי מלא שמימיו דלפו. כדי להשתמש בזיכרון דינמי, יש לחדש את מטענו של הקבל בתוך פרק זמן הקצר משמעותית מהזמן בו שוב אי אפשר להבחין אם הקבל טעון או לא. לצורך כך, זיכרון דינמי מכיל מעגל חשמלי העובר לארוך כל התאים בזיכרון באופן מחזורי ומחדש את מטענם של התאים המייצגים "1". פעולה זו נקראת "רענון".
זיכרון SDRAM הוא זיכרון DRAM סינכרוני, כלומר מסונכרן עם השעון של אפיק הנתונים של המחשב.
ל-DRAM הקלאסי יש ממשק אסינכרוני, כלומר הוא מגיב במהירות המרבית לשינויים באותות הבקרה. ל-SDRAM יש ממשק סינכרוני, כלומר הוא ממתין לאות שעון לפני שהוא מגיב לאותות בקרה וכך הוא מסונכרן עם אפיק הנתונים של המחשב. שעון זה מניע מכונת מצבים סופית המנהלת צינור עיבוד נתונים (Pipeline) להוראות נכנסות. הדבר מאפשר תבניות פעולה מורכבות יותר מאלה של ה-DRAM האסינכרוני, מה שמאפשר מהירות עבודה גבוהה יותר.
הצנרה[1] (Pipelining) היא שיטה בה ניתן לקבל הוראות חדשות לפני שמסתיים הטיפול בקודמות. בכתיבה בצינור נתונים ניתן לשלוח פקודת כתיבה נוספת מיד לאחר פקודת כתיבה בלא להמתין שהמידע ייכתב למערך הזיכרון. בקריאה בצינור נתונים המידע הנדרש מגיע מספר מחזורים קבוע לאחר פקודת הקריאה ובמהלך מחזורי שעון אלה ניתן לשלוח פקודות נוספות (מספר מחזורי ההמתנה (Latency) מהווה שיקול חשוב בבחירת SDRAM למחשב).
SDR (Single Data Rate) SDRAM – יכול לקבל פקודה אחת ולהעביר מילה אחת של מידע בכל מחזור שעון. תדירויות שעון אופייניות הן 100 ו-133 מגה הרץ. מיוצרים עם מגוון גדלים של אפיקי נתונים (הנפוצים ביותר הם 4,8 ו-16 ביטים) אבל בדרך כלל מורכבים ל-DIMM הקורא או כותב 64 (non-ECC) או 72 (ECC) ביטים בכל פעם.
DDR (Double Data Rate) DRAM – בעוד שזמן ההמתנה לגישה של ה-DRAM מוגבל על ידי מערך ה-DRAM, ל-DRAM יש רוחב פס פוטנציאלי גדול מאוד מפני שכל קריאה פנימית היא שורה של אלפי ביטים. כדי לנצל יותר מרוחב פס זה, פותח ל-DRAM ממשק קריאה בקצב כפול. הוא משתמש באותן הפקודות כ-SDR אך כל קריאה וכתיבה היא של שתי מילות מידע במקום אחת למחזור שעון. הממשק משיג שיפור זה על ידי כך שקריאה וכתיבה מבוצעות גם בירידת שעון בנוסף לעליית שעון. ה-SDRAM המשתמש בממשק זה הוא DDR SDRAM כאשר הגרסה הראשונה שלו היא DDR1. בנוסף לשיפור ממשק זה מתח האספקה של ה-DDR1 ירד מ-3.3 וולט ל-2.5 וולט ועל כן DDR SDRAM אינו תואם SDR SDRAM. קצבי השעון הנפוצים של ה-DDR1 הם 133, 166 ו-200 מגה הרץ (7.5 ,6 ו-5 ננו-שניות למחזור), הידועים כ-DDR333 ,DDR-266 ו-DDR-400 וה-DIMMs הם PC-2700 ,PC-2100 ו-PC-3200. הקצב הגבוה ביותר הוא DDR-550 וה-DIMM שלו הוא PC-4400. יצא בשנת 2000 צורך מתח חשמל של 2.5V מהירות 200-400MHz גודל נפח אחסון 128M-2Gbits.
DDR2 – דומה ל-DDR1 אך מכפיל בשנית את קצב הקריאה וכתיבה המינימלי ל-4 מילים עוקבות. כמו כן פרוטוקול אפיק הנתנים פושט כדי לאפשר פעולות בביצועים גבוהים יותר (בפרט הפקודה burst terminate[2] נמחקה). הדבר מאפשר להכפיל את קצב אפיק הנתונים בלא להגדיל את קצב השעון של פעולות ה-RAM הפנימיות, במקום זאת פעולות פנימיות מבוצעות ביחידות רחבות פי 4 מ-SDRAM. כמו כן נוסף חיבור כתובת בנק נוסף המאפשר תמיכה ב-8 בנקים. קצבי השעון הנפוצים של ה-DDR2 הם 200, 266 ,300 ו-400 מגה הרץ (2.5 ,1.5,1.875 ו1.25 ננו שניות למחזור) הידועים כ-DDR2-667, DDR2-533, DDR2-400 ו-DDR2-800 וה-DIMMs הם PC2-3200 עד PC2-6400. ה-DDR2 המהיר ביותר הניתן לרכישה הוא DDR2-1250 וה-DIMM שלו הוא PC2-10000. מכיוון שקצב השעון לפעולות הפנימיות הוא בחצי מקצב השעון, DDR2-400 הוא בעל זמן המתנה גדול יותר מזה של DDR-400. יצא בשנת 2004 צורך מתח חשמל של 1.8V מהירות 400-800MHz גודל נפח אחסון 256M-4Gbits .
DDR3 – מכפיל גם כן את קצב הקריאה וכתיבה ל-8 מילים עוקבות. הדבר מאפשר הכפלה נוספת של רוחב הפס וקצב אפיק הנתונים החיצוני בלא שינוי לקצב השעון בפעולות פנימיות אלא רק לרוחבן, במטרה לשמור על 800 מגה העברות בשנייה (העלייה והירידה של שעון 400 מגההרץ) ה-RAM הפנימי צריך לבצע 100 מגה בשנייה. גם בהכפלה זו החיסרון הוא זמן ההמתנה המוגבר. קצבי השעון הראשוניים היו 400 ו-533 מגההרץ ב-DDR3-800 ו-DDR3-1066 המתאימים ל-PC3-6400 ו-PC3-8500) אך כעת זמינים גם 667 ו-800 מגההרץ ב-DDR3-1333 ו-DDR3-1600 המתאימים ל-PC3-10600 ו-PC3-12800. יצא בשנת 2007 צורך מתח חשמל של 1.5V/1.35V מהירות 800-2,133MHz גודל נפח אחסון 512M-8Gbits .
DDR4 – יצא בשנת 2012 צורך מתח חשמל של 1.2V/1.0V מהירות 1,600-2,667MHz גודל נפח אחסון 1G-16Gbits.
ה-SDRAM הוא וריאציה של DRAM, על כן גם הוא מאחסן ביטים של מידע תוך שימוש בטרנזיסטור וקבל במקום 6 טרנזיסטורים כפי שישנם ב-RAM סטטי. בהינתן כתובת לקרוא או לכתוב אליה, הטרנזיסטורים הדרושים 'נפתחים' והקבל נטען לערך הביט או לערך הנכתב אליו בהתאם לפעולה. במטרה לצמצם את ההשפעה של דליפת מטען בקבלים כל השורות מרועננות מדי פעם במטרה לרענן את המתח גם כאשר לא מתקבלות בקשות קריאה וכתיבה. מלבד מטבעו הסינכרוני ל-SDRAM יש גם את היכולת לבצע הצנרה של פקודות במטרה לטפל ביותר מבקשת קריאה או כתיבה אחת בכל פעם כתוצאה מהמורכבות הגדולה יותר שלו. ה-SDRAM עצמו לא אחראי לטיפול ברמה גבוהה בבקשות מבחוץ. ניהול ה-SDRAM ווידוא שהוא מטפל בבקשות בצורה נכונה מבוצע על ידי בקר שמתרגם את הבקשות מהמשתמש לאותות בקרה הנשלחים ל-SDRAM תוך כדי מעקב אחר מצבו של ה-SDRAM. הבקר גם מתרגם את הפלט של ה-SDRAM למשתמש. לכן לא ניתן לנתח את ה-SDRAM בלא לנתח גם את הבקר.
Cke (Clock Enable) – אות זה משמש כמסכה (Mask) לאות השעון של ה-SDRAM. כאשר Cke ב-'0', ה-SDRAM לא יזהה עליית שעון וה-SDRAM יעצור עד ש-Cke יקבל '1'.
CS (Chip Select) – כאשר אות זה הוא '1' ה-SDRAM מתעלם מכול האותות המתקבלים מהבקר לבד מ-Cke.
DQM (Data Mask[3]) – כאשר הוא '1' אותות אלה מונעים ביצוע פקודות קריאה וכתיבה, פקודות כתיבה לא מבוצעות בעוד שאם הועלה ל '1' שני מחזורי שעון לפני פקודת כתיבה היא לא מבוצעת.
Ras ו-Cas (Row/Collumn Strobe) – בנוסף ל-WE, שני אותות אלה קובעים איזו פקודה מקבל ה-SDRAM מהבקר. בניגוד לשמם הם אינם אותות Strobe[דרושה הבהרה].
WE (Write Enable) – אות הבקרה השלישי הקובע את הפקודה המתקבלת.
בנוסף לאותות בקרה אלו, ל-SDRAM ישנם גם אפיקי נתונים המשמשים לקבלת מספר שורה או טור ובנק מהבקר, ואפיק נתונים דו כיווני לקבלת ושליחת מידע. בפקודות אשר לא דורשות את כל 12 ביטי מספר השורה או הטור (פעולות טור אשר היות שמספר הטורים הוא בן 11 ביטים בלבד ולכן ניתנות לייצוג בעזרת הביטים A0-A9 ופעולות אשר לא דורשות כתובת) ביט הכתובת A10 משמש כאות בקרה נוסף המאפשר בחירת אפשרות שונה למימוש הפקודה המתקבלת.
Activate (הפעלה) – בפקודה זו ה-SDRAM מקבל מספר בנק (שני ביטים הקובעים לאיזה מ-4 בנקים אפשריים הוא ייגש) ומספר שורה (היות שהשורה היא בת 12 ביטים גם ביט A10 משמש להעברת הכתובת ולכן אין לו שימוש מיוחד בפקודה זו). התוכן של השורה בבנק נקרא למערך טורי המגברי וניתן כעת לגשת אליו, תוצר לוואי של ההפעלה הוא רענון המטען בקבלים של השורה המופעלת אשר עוזר למנוע אובדן מידע. ההפעלה אינה מיידית, ולכן במהלך זמן row to collumn לא ניתן לבצע פעולות קריאה וכתיבה בבנק, אף על פי שעדיין ניתן לגשת לבנקים האחרים, אכיפת מגבלת זמן זו על הבקשות הנשלחות מטופלת על ידי הבקר.
Prechargin (הכנה) – לאחר ששורה הופעלה, יש 'לסגור' אותה לפני שניתן להפעיל שורה חדשה, זאת מכיוון שמגברי החישה של הבנק צריכים לחזור למצב ראשוני כדי שניתן יהיה לקרוא את תוכן השורה הבאה. יש שתי דרכים להורות על הכנה ב-SDRAM. הראשונה היא באמצעות פקודת ה-Precharge אשר בהתאם לערכו של ביט A10 תכין את הבנק הנוכחי או את כל הבנקים. הדרך השנייה היא לצרף לפקודת קריאה או כתיבה פקודת הכנה על ידי שליחת פקודת הקריאה או הכתיבה כאשר A10 גבוה.
Auto Refreash (רענון אוטומטי) – פקודת הרענון האוטומטי מרעננת שורה בכל בנק, הבנקים חייבים להיות לאחר Precharge כדי שניתן יהיה לרענן, ל-SDRAM יש מונה פנימי הגורם לו לרענן שורה אחרת בכל פעם ועל-כן הבקר יכול למנוע אובדן מידע על ידי שליחת פקודות רענון אוטומטי לאחר כל פרק זמן כך שכל השורות ירועננו לפני שהמידע בהן יאבד. אם פקודת הרענון ניתנת ו-Cke מורד ל-'0' ה-SDRAM יעבור למצב חסכון כוח בו יתעלם מפקודות נוספות עד ש-Cke יעלה ל-'1' וימשיך לרענן שורות במטרה למנוע אובדן מידע.
Mode Loading (הגדרת מצב עבודה) – ל-SDRAM יש 10 ביטים (M0-M9) אשר מגדירים את מצב העבודה שלו. כאשר פקודת הגדרת המצב ניתנת כל אחד מביטי M מקבל את הערך של ביט הכתובת בעל אותו מספר.
תפקיד ביטי ה-M:
M9 – קובע האם ה-SDRAM יבצע כתיבה בצרורות (Burst) או לא (קריאה היא תמיד בצרורות).
M8, M7 – ביטים שמורים אשר יש להגדירם כ-'0' כאשר מתבצעת הגדרת המצב.
M6, M5, M4 – קובעים את ה-CAS Latency (אנ'), בדרך כלל היא תהיה 2 (0,1,0) או 3 (0,1,1) .
M3 – קובע האם ה-SDRAM משתמש בתמסורת צרורות סדרתית (Sequential Burst) או בתמסורת צרורות מסורגת (Interleaved Burst).
M2, M1, M0 – קובעים את גודל תמסורת הצרורות בקריאה ואם M9 הוא '1' אז גם בכתיבה, הגדלים האפשריים הם 1 ,2 ,4 ו-8.
מספר מחזורי השעון הנדרש לביצוע כל פקודה תלוי בעיצוב ה-SDRAM ובתדר השעון, על-כן במטרה להימנע ממתן פקודות ל-SDRAM כשעדיין אינו יכול לטפל בהן, הבקר יתוכנת עם ערכי התזמון של ה-SDRAM בו הוא אמור לשלוט.
מהניתוח הטכני של ה-SDRAM ניתן לראות כי אין קשר ישיר בינו לבין המעבד. במקום זאת כל הבקשות מטופלות על ידי הבקר השולח אותות בקרה מתאימים ל-SDRAM ומידע הנקרא מה-SDRAM למעבד.
הבקר הוא החולייה המקשרת בין ה-SDRAM לבין המשתמש (Host) המבקש לקרוא או לכתוב ל-SDRAM. בדרך כלל הוא ממומש בקוד כמכונת מצבים. הבקר מוכרח לעקוב אחר ה-SDRAM במטרה לטפל בבקשות המשתמש, המעקב כולל:
שורה נוכחית המופעלת בבנק ב-SDRAM.
כל הפעולות שה-SDRAM לא סיים ומספר מחזורי השעון שנותר לסיומן.
המצב הנוכחי של ה-SDRAM (בתהליכי אתחול, המתנה להגדרות מצב, רענון שורה ועוד).
כל בקשה של המשתמש מתקבלת בבקר, שקובע האם ה-SDRAM יכול לטפל בבקשה כעת ופועל בהתאם. הבקר מתרגם כל בקשה לפקודות הדרושות כדי שה-SDRAM יטפל בבקשה ושולח את אותות הבקרה המתאימים. במידת הצורך, הבקר ממתין בין פקודות למספר המחזורים הדרוש.