שְׁאֵלָה:
כיצד מעבד 8 סיביות יכול לתמוך ביותר מ- 256 בתים של זיכרון RAM?
ZaqueoAlejandro
2013-02-14 04:21:48 UTC
view on stackexchange narkive permalink

אם מעבד 32 ביט יכול להתמודד עם כ -4 GiB של זיכרון RAM (כלומר \ $ 2 ^ {32} = 4 294 967 296 \ $ span>) בתים, מדוע ל- Arduino Mega 2560 שלי יש 8 KiB של SRAM, אם היותו מעבד 8 ביט מאפשר לו להתמודד עם 256 בתים בלבד ( \ $ 2 ^ 8 \ $ )? או שאני קורא את הדף הבא שגוי?

http://www.atmel.com/devices/atmega2560.aspx?tab=parameters

אין ספק שכל מכונה שלמה תורית מסוגלת לתת מענה כמעט לכל גודל של איל, בהינתן מספיק זמן.
למעשה, ניתן להשתמש במספר הביטים בשם המעבד להערכה מקדימה של רוחב הנתונים הפנימי.ה- 8088 הוא מעבד של 16 סיביות בגלל הרישומים שלו של 16 סיביות, אך יש לו אוטובוס נתונים של 8 סיביות ואוטובוס כתובות של 20 סיביות.68000 הוא מעבד 32 סיביות הנקרא ברובו 16/32 סיביות בגלל רושמי 32 סיביות שלו, אך יש לו אוטובוס נתונים של 16 סיביות ואוטובוס כתובות של 24 סיביות.יישומי ARM קטנים הם מעבדי 32 סיביות (רושמים 32 סיביות ואפיק נתונים), אך גם אם הם משתמשים ב 32 סיביות לכתובות הם אינם יכולים לטפל בסך הכל 4 ג'יגה.
הוספתי את קידומות ה- SI הנכונות עבור יחידות אלה.\ $ 2 ^ {30} \ $ הוא gibi (Gi) ו- $ 2 ^ {10} \ $ הוא kibi (Ki).
ראוי להזכיר כי 8 ביטרים רבים (בעיקר נגזרות של מוטורולה) תומכים במה שמכונה _zero-page_, שהיה תמיכה בהגדרת הוראות לטיפול ב -225 הבתים הראשונים הניתנים לניהול במפת הזיכרון מעט מהר יותר.אז רושמי החומרה החשובים ביותר בזמן וכו 'ימופו ל 256 הבתים הראשונים מסיבה זו של ביצועים.זו הסיבה מדוע תמצאו רישומי חומרה הממופים מכתובת אפס בהמון ארכיטקטורות.
לקרוא למשהו 8 סיביות, 16 סיביות, 32 סיביות וכו 'זה נגיד מונח שיווקי, מהנדסים משתמשים בו כדי להבין אבל זה לא אומר שהכל במעבד הזה הוא כל כך רחב.יש אנשים שמשתמשים בגודל ההוראה, לעתים קרובות משתמשים בגודל הרשמים למטרות כלליות, לפעמים באוטובוס.יש לך את דלפק התוכנית שאינו תמיד נגיש או שמיש בהוראות כך שהוא יכול להיות רחב ככל שהם רוצים.אז כמו אצל רבים ממעבדי ה- AVR, קיימת תכנית רישום רב או החלפה או שניהם כדי לקבל כתובת עומס / אחסון רחבה יותר עבור עסקאות נתונים.
תֵשַׁע תשובות:
Brian Drummond
2013-02-14 05:00:47 UTC
view on stackexchange narkive permalink

לרוב המעבדים של 8 סיביות יש אוטובוסים של 16 סיביות המאפשרים להם כתובת 64 קילו-בתים, בדיוק מכיוון ש- 256 בתים באמת לא מספיקים לעשות הרבה מאוד! זה רק אומר שהם צריכים לטעון שני בתים במקום אחד, בכל פעם שהם צריכים לטעון כתובת. מעט איטי יותר אך נסבל בהתחשב בגודלם.

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

למעשה לרוב המיקרו-בקרים של 8 סיביות שנתקלתי בהם אין כתובת של 16 סיביות
@Brian Drummond האם אני צודק: הבקר יכתוב 8 סיביות תחתונות ואז 8 סיביות עליונות ואז תפס את אוטובוס הכתובות.כך היא תיכנס לאוטובוס כתובות 16 ביט!
או 8 ביטים עליונים ואז 8 ביטים נמוכים יותר, אבל בעצם כן, זה הרעיון.
לחלק מהבקרים המיקרו כמו ה- PIC18 יש רישום קטעים שמאפשר להם להרחיב את שטח הכתובת שלהם מעבר למה שניתן לקודד בערכת ההוראות של 16 סיביות.בנוסף ניתן להשתמש בסיכות IO כבחירת שבב בבנקים של זיכרון RAM חיצוני להרחבת הזיכרון.
phuclv
2014-05-07 07:32:10 UTC
view on stackexchange narkive permalink

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

  • הדרך הנפוצה ביותר היא הגדלת אוטובוס הכתובות רוחב איכשהו על ידי

    • באמצעות מספר רושמים לכתובת

      • AVR יש R26. .R31 שניתן להתאים לרישומי כתובת 16-bit X , Y ו- Z כדי לאפשר זיכרון RAM מרבי של 64KB. אלה בתורם יכולים להיות משויכים עם RAMPX , RAMPY , RAMPZ כדי לגשת לכתובות RAM גבוהות יותר בגרסאות גדולות עוד יותר. יש לו גם SPH עבור הבייטים הגבוהים של מצביע הערימה בנוסף ל SPL בגרסאות עם יותר מ 256 בתים של זיכרון RAM 1
      • Intel 8080 ו- Zilog Z80 הם מעבדי 8 סיביות, אך יש להם זוגות רישום כמו H & L קוד>, B & C , D & E שיכול לשמש יחד כרישום כתובות של 16 סיביות
    • באמצעות מרשם מיוחד יחיד גדול יותר מהגודל הטבעי לטיפול

      • אינטל 8051 הוא מיקרו-בקר של 8 סיביות, כלומר יש לו כתובת נתונים של 8 סיביות. עם זאת, היא משתמשת בכתובת הוראות של 16 סיביות ויש לה שני רושמים של 16 סיביות: PC ו- DPTR לצורך התייחסות במרחב ההוראות.
      • AVR יש רישום מחשב 16 או 22 סיביות
    • באמצעות מרשם מיוחד לחלק הגבוה של הכתובת . כאשר פונים לזיכרון כלשהו, ​​כברירת מחדל 8 הסיביות הנמוכות של הכתובת יילקחו מהרישום המיידי של 8 סיביות או 8 סיביות במיקרו-בקר של 8 סיביות, ואילו הסיביות הגבוהות יוחלפו בערך רישום הכתובות האחר. / p>

      • מקרה מיוחד לכך הוא זיכרון מפולח , המשמש את 16 סיביות x86 . בטכניקה זו הזיכרון מחולק ל מגזרים מרובים בגודל 64KB (2 16 בתים). גישה רגילה היא בתוך פלח יחיד כברירת מחדל, כך שהם יכולים להשתמש בכתובת 16 סיביות עבור ליד נתונים . יש לטפל בנתונים ש רחוקים יותר זה מזה לפי ערך פלח, ולכן יש להשתמש ב -2 רישומים לצורך התייחסות רחוקה. וסדרות אמצע טווח עשויות להכיל כתובת 13 או 14 סיביות, היא דוגמה נוספת. בעת שימוש בהוראות call או goto , 8 או 9 סיביות נמוכות של הכתובת מסומנות על ידי המיידית והנותרים נלקחים מדלפק התוכנית הנוכחי. אז גישה לכל דבר לא רחוק בסגמנט הנוכחי משתמשת רק בהוראה אחת, בעוד שכתובות נוספות יזדקקו לשתי הוראות (כדי להגדיר את הסיביות הגבוהות).
      • דוגמה נוספת היא ארכיטקטורת MIPS אשר משלב גם את הכתובת המיידית התחתונה של 26 סיביות עם 6 הסיביות הגבוהות מ- PC תוך כדי קפיצה ללא תנאי.
  • דרך נוספת להשיג זאת היא בנק זיכרון . זוהי שיטה שימושית שעדיין נמצאת בשימוש בחלק מהארכיטקטורות בימינו. במודל זה הזיכרון מחולק למספר בנקים . בכל פעם אתה יכול לפנות רק לבנק ספציפי. לעיתים קרובות יש בנק גלובלי או טווח כתובות הנראה תמיד בכל עת, אך עבור חלקים אחרים עליך להחליף בנק בעת הצורך.

    • Intel 8051 משתמש בבנק זיכרון עבור הרושמים. יש לו 32 רושמים אך רק 8 מהם נראים בכל פעם.
    • x86 PAE ו- ARM LPAE , עם שטח כתובת פיזי גדול יותר הממופה ל שטח כתובות וירטואלי קטן
    • יישום נוסף לכך הוא כתובות הרחבה לכתובת ב- Windows אשר יכולות לשמש אפליקציות x86 של 32 סיביות במצב PAE על מנת לגשת ליותר מ 2 / 3GB של זיכרון. זה לא בדיוק כמו בנק זיכרון במיקרו-בקרים, אך ניתן לראותו ככזה, מכיוון שטווח הכתובות הגדול יכול להיות לחשוב על חלונות / בנקים קטנים שהינם קטנים מספיק בכדי להתאים למרחב הכתובות של האפליקציה. אם האפליקציה צריכה להשתמש בנתונים בחלון כלשהו היא תמפה חלון זה למרחב הכתובות הנוכחי שלה.
    • ל- DOS יש גם סוגים מסוימים של החלפת בנקים כמו זיכרון מורחב או זיכרון מורחב עקב הטווח המוגבל של זיכרון שניתן להתייחס אליו.
  • קיימת גם טכניקה לא ממש נפוצה, אך ניתן למצוא אותה ב אינטל 8051 . כמיקרו-בקר עם כתובת נתונים של 8 סיביות, הוא יכול לכלול לכל היותר 256 כתובות. מחצית מהשטח (החלק הגבוה) משמש לרישומי פונקציות מיוחדים ( SFR ), מה שמגביל את ה- RAM האמיתי הניתן לכתובת ל 128 בייטים בלבד. עם זאת יצרני סדרות 8051 מודרניות מצאו דרך חכמה להתגבר על כך על ידי הפרדת גישה לזיכרון . כתובת ישירה תיכנס ל SFR בעוד ש כתובת עקיפה אף שהרשמים ייגשו לחלק הגבוה של זיכרון RAM כלומר עכשיו יש לך 256 + 128 = 384 בתים ניתנים לכתובת.


1 https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set#Memory_addressing_instructions

הליבות הקטנות ביותר כוללות ≤256 בתים של שטח כתובת נתונים (כלומר ≤128 בתים של RAM לאחר הוצאת יציאות קלט / פלט וכתובות שמורות אחרות) ו- ≤8192 בתים (8 KiB) של תוכנית ROM. אלה כוללים רק מצביע ערימה של 8 סיביות (ב- SPL), ותומכים רק בהוראות קפיצה / שיחה יחסית של 12 סיביות RJMP / RCALL. (מכיוון שמונה תוכנית ה- AVR סופר מילים של 16 סיביות, ולא בתים, מספיק קיזוז של 12 סיביות בכדי לטפל ב 213 בתים של ROM.)

יכולות כתובת זיכרון נוספות קיימות כנדרש לגישה למשאבים זמינים:

  1. דגמים עם> 256 בתים של שטח כתובת נתונים (≥256 בתים של RAM) כוללים מצביע מחסנית של 16 סיביות, עם המחצית הגבוהה במרשם ה- SPH.
  2. דגמים עם> 8 KiB של ROM מוסיפים את הוראות JUMP ו- CALL של 2 מילים (22 סיביות). (חלק מהדגמים המוקדמים סובלים מתופעה אם הוראת דילוג ואחריה הוראה בת 2 מילים.)
  3. מודלים עם> 64 KiB של ROM מוסיפים את הוראות ELPM ואת רישום ה- RAMPZ המתאים. הוראות LPM מאריכות אפס את כתובת ה- ROM ב- Z; הוראות ELPM תלויים ברישום RAMPZ עבור סיביות גבוהות. זה לא אותו דבר כמו ההוראה הכללית יותר של LPM; קיימים דגמים "קלאסיים" עם צורת האפס בלבד של ELPM (ATmega103 ו- at43usb320). כאשר תוספת אוטומטית זמינה (ברוב הדגמים), היא מעדכנת את כל כתובת 24 הסיביות כולל RAMPZ.
  4. (נדירים) מודלים עם> 128 KiB של ROM כוללים מונה תוכנית בת 3 בתים. שיחות והחזרות תת-שיטות משתמשות בבייט נוסף של שטח מחסנית, יש מרשם EIND חדש המספק סיביות גבוהות נוספות עבור קפיצות ושיחות indireect, ויש הוראות מורחבות חדשות EIJMP ו- EICALL המשתמשות ב- EIND: Z ככתובת היעד. (ההוראות הקודמות של IJMP ו- ICALL משתמשות באפס Z המורחב.)
  5. (נדיר) עם> 64 KiB של שטח כתובת RAM מאריכים את גבולות ההתייחסות ל- RAM של 16 סיביות עם RAMPX, RAMPY, RAMPZ ו- RAMPD . אלה מספקים סיביות גבוהות נוספות עבור מצבי כתובת המשתמשים בזוגי הרישום X, Y או Z, בהתאמה, או בהוראות הטיפול הישירות LDS / STS. שלא כמו גישה ל- ROM, אין הוראות "מורחבות" מובחנות; במקום זאת, נעשה שימוש ללא תנאי ברשומות ה- RAMP.
dprogrammer
2013-02-14 04:41:18 UTC
view on stackexchange narkive permalink

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

זה היה בעיקר דבר שיווקי שמעבדי x86 של 32 סיביות לא יכלו לתת מענה ליותר מ -4 גיגה זיכרון RAM. אני זוכר איפשהו שהיו סיכות A33-34 במעבדי Pentium 4.

אתה צודק - PAE אפשרה להשתמש בזיכרון RAM רב יותר, אך מכיוון שהוא לא היה זמין בחלונות שולחן העבודה לא הרבה אנשים השתמשו בו מעולם.
[PAE] (http://en.wikipedia.org/wiki/Physical_Address_Extension) הוא שם התכונה. כמו כן, מעבדי 64 סיביות אינם יכולים לטפל ב -64 exabytes, כפי שמציע \ $ 2 ^ {64} \ $.
מעבד x86 של מעבד אינו יכול לטפל ביותר מ -4 ג'יגה-בתים ללא סיבוכים משמעותיים במערכת ההפעלה שאינם עוברים לאדריכלות אחרות.
ל- @Kaz ARM 32 סיביות יש תכונה דומה הנקראת LPAE, המאפשרת למערכת ההפעלה לטפל ביותר מ- 32 סיביות כתובת.
supercat
2013-02-14 05:31:39 UTC
view on stackexchange narkive permalink

כמעט לכל מעבדי 8 הסיביות יש יכולת מסוימת ליצור כתובת של 16 סיביות מחלק מסדר נמוך ומחלק מסדר גבוה. בחלק מהמעבדים, כולל 8080 המקורי, ישנם רושמים המוקדשים להחזקת החלק העליון והתחתון של כתובת (אם כי מנקודת מבט של מתכנת יתכנו כמה רושמים כמו מצביע הערימה של 8080 שאינם מציעים הוראות לטפל בהם בנפרד). בחלק מהמעבדים האחרים אין רישומים המוקדשים למחצית העליונה או התחתונה של הכתובת, אך כתובות מורכבות "על הסף". לדוגמא, ב- 6502, ההוראה "LDA $ 1234, X" טוענת את המצבר עם הכתובת שנוצרה על ידי הוספת 1234 $ לרישום ה- X של 8 סיביות [נניח שהוא מכיל $ F0]. ביצוע ההוראה תימשך בארבע או חמישה שלבים:

  1. סיים את ההרשמה כתוב מההוראה הקודמת (אם בכלל) וטען את קוד ה- opcode ($ BD)
  2. הבא את התו הראשון של האופנד הבא בעקבות קוד הקוד. ($ 34) בעת הוראת פענוח
  3. אחזר בתים אופרנדיים שניים ($ 12) תוך הוספת בתים שנאספו בעבר לרישום X
  4. קרא זיכרון בכתובת שנוצר על ידי שרשור בתים אופרנד שני לתוצאת ALU [כלומר 1224 דולר]. הזן בית אופרנד שני ל- ALU כדי להוסיף אפס או אחד תלוי אם תוספת קודמת יצרה נשיאה
  5. זיכרון קריאה בכתובת שנוצרה על ידי החלפת המחצית העליונה בתוצאת ALU [$ 1334] o>

    העברת בית הקריאה אל המצבר יחפוף את הבאת ההוראה הבאה. בנוסף, עבור פעולות רבות, אם שלב 3 לא ייצר נשיאה, שלב 4 היה קורא את הכתובת הנכונה והביצוע יכול לדלג ישירות משלב 4 להוראות הבאות, תוך עקיפת שלב 5.

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

אני זוכר שראיתי כמה מודעות למחשבים עם מעבדי 8 סיביות וזיכרון של 1 מגה.זה נעשה על ידי שימוש בשני רושמים של 8 סיביות במעבד בתוספת רישום אחד של 8 סיביות שלא במעבד כדי ליצור את כל הכתובת.
@user6030: ישנן דרכים רבות להשיג דברים כאלה.בדרך כלל חלקים משטח הכתובות יהיו "קבועים" ואחרים ייבחרו בבנק.חלק מהמכשירים מסתדרים יפה עבור מתכנתים;רבים אחרים, לא כל כך הרבה.
Gus Mueller
2013-02-14 05:05:30 UTC
view on stackexchange narkive permalink

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

במעבדים הראשונים של 16 ו -32 סיביות, לא תמיד היו מספיק סיכות במכשיר כדי להגיע לכל השטח שאליהם רשומות הכתובות הפנימיות יכולות לתת מענה. לדוגמה, במוטורולה 68000 היו מספיק סיכות כתובת (24) בכדי לטפל ב- 16 מגה-בייט של זיכרון RAM, אם כי רושמי הכתובות הפנימיים היו ברוחב 32 סיביות.

GNA
2018-07-05 15:39:42 UTC
view on stackexchange narkive permalink

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

AVRs הם ליבות של 8 סיביות. זה אומר שיש להם 8 סיביות. עם זאת, 8 ביטים אינם מספיקים לגישה לכמות זיכרון שמישה. לכן ליבת ה- AVR מסוגלת להשתמש במערך ספציפי של רושמים המשולבים כרישומי מצביע של 16 סיביות. הרושמים r30 ו- r31 (המכונים גם ZL ו- ZH) הם דוגמה לכך. יחד הם יוצרים את מצביע ה- Z.

במכלול קריאת בתים בכתובת 0x1234 תיראה כך:

  ldi ZL, 0x34; טען r30 (ZL) עם בית כתובת נמוך
ldi ZH, 0x12; טען r31 (ZH) עם כתובת גבוהה של כתובת
ld r16, Z; טען בתים ל- r16
 

למשפחת ה- AVR ישנם 3 זוגות רישומים בהם ניתן להשתמש. הם תוכננו במיוחד בחומרה כדי לאפשר פעולות כאלה.

בעת תכנות בשפה ברמה גבוהה יותר כמו C, המהדר מטפל בחומר זה.


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

רישום פונקציות מיוחד (בדרך כלל משתמשים רק בסיבית אחת), ZH (8bit), ZL (8bit). התוצאה היא כתובת כוללת של 17 סיביות ומאפשרת גישה ל 128 קילו-בייט של זיכרון RAM.

Kamil
2014-05-07 08:00:18 UTC
view on stackexchange narkive permalink

ויקיפדיה מסבירה את זה די טוב:

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

Garrett Fogerlie
2013-02-14 05:04:44 UTC
view on stackexchange narkive permalink

ה- AVR של 8 סיביות של Atmel למעשה משתמש בכתובת נתונים של 16 סיביות. יש להם מספר רב יותר של 16 סיביות ואפילו כמה טיימרים של 16 סיביות. מכיוון שמדובר במעבד 8 סיביות בלבד, הוא בדרך כלל משתמש בשני מחזורי שעון כדי לטעון רישום של 16 סיביות.

Jamie Hanrahan
2017-06-20 16:17:00 UTC
view on stackexchange narkive permalink

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

HP 21MX, HP 1000: מעבד 16 סיביות, זיכרון עד 16 מגהבייט

PDP-11: מעבד 16 סיביות, זיכרון ל -4 מגהבייט

VAX-11/780: מעבד 32 סיביות, זיכרון ל -512 מגהבייט

וכו 'וכו'



שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...