ทำไมทุกที่อยู่ในไมโครคอนโทรลเลอร์มีขนาดเพียง 8 บิต?


18

ฉันได้เห็นว่าในไมโครคอนโทรลเลอร์ 32 บิตที่อยู่หน่วยความจำแต่ละแห่งมีข้อมูลเพียง 8 บิตเท่านั้น มันก็เหมือนกันสำหรับ MC 16 บิตเช่นกัน สำหรับข้อมูล 32 บิตนั้นจะใช้การรวมกันของที่อยู่ 4 ทำไมที่อยู่ไม่สามารถเก็บข้อมูล 32- บิตโดยตรงได้ (ทำให้เป็น 32 บิตหรือ 16 อันแทน 8)


2
มันขึ้นอยู่กับ Data บัสของไมโครคอนโทรลเลอร์ ไมโครคอนโทรลเลอร์ขนาด 32 บิตตัวใดมีหน่วยความจำแบบไบท์? คุณมีตัวอย่างหรือไม่?
Swanand

4
ไม่ใช่เรื่องจริงซึ่งเป็นเหตุผลว่าทำไมภาษาการเขียนโปรแกรมเช่น C และ C ++ รวมความเป็นไปได้ที่ไบต์จะมากกว่า 8 บิต เพียงว่าส่วนใหญ่ทำงานได้ดีที่สุดกับ 8 บิตไบต์ แต่ 9 บิตหรือ 18 บิตอยู่ที่นั่น
PlasmaHH

6
มันเหมือนลูกกวาด พวกเขาทำให้พวกเขาเล็กลงในราคาเดียวกัน
Olin Lathrop

4
คำถามนี้สามารถใช้ถ้อยคำใหม่ได้หรือไม่ "เพราะเหตุใดที่อยู่ทั้งหมดถูกจัดตำแหน่งเป็น 8 บิต"
Florian Castellane

2
@ FlorianCastellane นี้ ที่อยู่ไม่ได้มีขนาด 8 บิต (เว้นแต่ว่าคุณจะพบอุปกรณ์ที่มีหน่วยความจำ <256 บิตจากนั้นอาจเป็น)
jayjay

คำตอบ:


11

นี่คือตัวเลือกการออกแบบที่มีประสิทธิภาพไม่มีเหตุผลที่ยากว่าทำไมต้องเป็นเช่นนั้น ย้อนกลับไปในสมัยก่อนเมื่อตัวประมวลผลของสินค้าโภคภัณฑ์ที่มีปริมาณสูงดำเนินการกับค่า 8 บิตการทำแผนที่นั้นมีความสม่ำเสมอมากกว่า 1: 1 เพื่อความสอดคล้องในขณะที่การออกแบบพัฒนาไปสู่โปรเซสเซอร์ 32 และ 64 บิตที่ทันสมัยมันทำให้รู้สึกถึงการทำแผนที่เก่าของการกำหนดแอดเดรสไบต์แม้ว่าบัสข้อมูลจะเพิ่มขึ้น (ด้วยต้นทุนการเปลี่ยนแปลงที่ไม่เปลี่ยนแปลง) MCU 32 บิตบางตัวอาจยังคงใช้บัสข้อมูลเพียง 16 บิตกับหน่วยความจำบางตัวโปรเซสเซอร์ระดับสูงจะมี 256 บิตขึ้นไปและสามารถโหลดการลงทะเบียนหลายคอร์ในการทำธุรกรรมหน่วยความจำเดี่ยว อินเทอร์เฟซแบบ Wide นั้นดีสำหรับการทำงานแบบ burst หรือสตรีมมิ่ง

ขนาดหน่วยความจำที่กำหนดแอดเดรสขนาดเล็กมีประโยชน์ไม่เพียง แต่ในกรณีของการจัดการค่าไบต์ในรหัส แต่จะทำงานกับโครงสร้างในหน่วยความจำเช่นแพ็คเก็ตอีเธอร์เน็ตที่ไบต์ที่เฉพาะเจาะจงจะต้องอ่านหรือแก้ไข บ่อยครั้งการดำเนินการแบบนี้ต้องสามารถดำเนินการเล็ก ๆ แต่มีประสิทธิภาพมาก

นอกจากนี้ยังมีสถานการณ์ที่จำเป็นต่อการใช้งานกับข้อมูล endian ขนาดใหญ่ end-endian หรือ little endian ขณะนี้มีการสนับสนุนฮาร์ดแวร์โดยเฉพาะสำหรับสิ่งนี้ แต่อีกครั้งการกำหนดแอดเดรสไบต์ของหน่วยความจำจะทำให้การทำงานประเภทนี้มีประสิทธิภาพมากขึ้นในบางสถานการณ์

ค่อนข้างเร็วที่จำนวนบิตที่อยู่ในการลงทะเบียนเป็นปัจจัย จำกัด สำหรับพื้นที่ที่อยู่ดังนั้นการสูญเสียบิต 2 บิตไปยังที่อยู่ไบต์มากกว่า 32 บิตคำจะไม่ได้รับความกังวลมาก 10-15 ปีที่ผ่านมา (และ ขณะนี้มีพอยน์เตอร์ 64 บิตเป็นเรื่องปกติที่จะติดตั้งที่อยู่ไบต์ที่กว้าง 48 หรือ 56 บิต) การสอนวิทยาศาสตร์คอมพิวเตอร์เบื้องต้นยังคงติดอยู่เล็กน้อยในยุคเมนเฟรมเพิ่งโพสต์และไม่ได้อยู่ที่ด้านการวิวัฒนาการอย่างชัดเจนเสมอไป คำศัพท์จำนวนมากเข้ามาใช้ (และคำจำกัดความ) ในช่วงเวลาที่สถาปัตยกรรมราคาสูงปริมาณต่ำ (ในความหมายทั่วไป) เริ่มได้รับการเสริมโดยข้อ จำกัด ด้านทรัพยากรและการออกแบบตัวประมวลผลที่เน้นสินค้ามากขึ้น

ฉันไม่ได้ตอบเฉพาะสำหรับ MCUs ขอบเขตของสถาปัตยกรรมไม่ชัดเจนเท่าที่คุณคิด แม้แต่การออกแบบ MCU ภาคพื้นดินที่ทันสมัยก็มีโอกาสที่จะถูกรวมเข้ากับโปรเซสเซอร์เซิร์ฟเวอร์หลายคอร์หรือมีอยู่เพียงจุดเดียวในชุดผลิตภัณฑ์ที่ปรับขนาดได้ วิธีใดวิธีหนึ่งที่สอดคล้องกันในการเข้าถึงหน่วยความจำจะเป็นประโยชน์ต่อผู้ใช้ปลายทางที่ต้องการเขียนหรือรหัสพอร์ต

ฉันถามคำถามเกี่ยวกับการแก้ปัญหา SEเกี่ยวกับขนาดการลงทะเบียนเพื่อติดตามด้านประวัติศาสตร์ของคำถามนี้


2
ฉันคิดว่าตัวประมวลผลที่มีขนาดตัวอักษรยาวกว่าตัวประมวลผล 8 บิต ตัวประมวลผล 8 บิตนั้นไร้ประโยชน์เลยหากไม่มีวิธีเพิ่มจำนวนหลายไบต์สองตัวอย่างมีประสิทธิภาพและโปรเซสเซอร์รุ่นแรกไม่สามารถจัดการตัวเลขที่มีขนาดใหญ่กว่าคำเครื่องเพียงคำเดียวได้อย่างมีประสิทธิภาพ
supercat

1
ฉันทำงานกับโปรเซสเซอร์ 8 บิตพอที่จะรู้ว่าพวกเขาสามารถเพิ่มหมายเลขหลายไบต์ได้อย่างง่ายดาย แต่ไม่ใช่ด้วยคำสั่ง CPU เดียว ขั้นแรกให้เพิ่มสองไบต์ที่ต่ำที่สุดและรับไบต์ผลลัพธ์ที่ต่ำที่สุดและบิตการแยกต่างหาก สำหรับจำนวนไบต์อื่น ๆ ที่มีอยู่ให้เพิ่มไบต์อินพุตถัดไปและบิตนำพาจากขั้นตอนก่อนหน้านี้ให้ไบต์ถัดไปออกและบิตนำหน้าถัดไป เมื่อไม่มีอินพุตไบต์เหลือให้แปลงบิตนำสุดท้ายเป็นหนึ่งไบต์เอาต์พุตเพิ่มเติม
user6030

@ user6030: มันเป็นเรื่องธรรมดาหรือไม่ที่จะมีคำสั่ง ADC? AVR ทำ (ไมโครคอนโทรลเลอร์ RISC แบบ 8 บิตดังนั้น gcc ต้องใช้ ADC สำหรับintและlong ), เช่นเดียวกับ x86, เช่น ARM ฉันถือว่าซีพียู 8 บิตส่วนใหญ่จะเนื่องจากมีความต้องการมากขึ้นกว่าในระบบที่มี regs ที่กว้างขึ้น โอ้ supercat กำลังบอกว่าโปรเซสเซอร์รุ่นแรกขาด ADC ที่มีประสิทธิภาพหรือไม่
Peter Cordes

ฉันคิดว่ามันเป็นจุดที่ถูกต้องเกี่ยวกับวิวัฒนาการของขนาดการลงทะเบียน (แม้ว่าฉันจะไม่มีข้อมูล)
Sean Houlihane

25

มี DSP บางตัว (เช่น TI C54x) ที่ไม่สามารถระบุค่าที่เล็กกว่า 16 บิตและ DSP เสียงบางตัวใช้ 24 บิต อย่างไรก็ตามมีการใช้ค่า 8 บิตในรหัสวัตถุประสงค์ทั่วไปเกือบทั้งหมดดังนั้น CPU ที่ใช้งานทั่วไปทั้งหมดจึงรองรับ

และเนื่องจากยูนิตขนาดเล็กที่ใช้สำหรับที่อยู่หน่วยความจำคือไบต์ 8 บิตไม่ได้หมายความว่านี่จะเป็นหน่วยที่ใหญ่ที่สุดที่ใช้งานจริงบนบัส ซีพียูส่วนใหญ่ใช้ขนาดคำดั้งเดิม (16/32 บิต) หรือแม้กระทั่งขนาดที่ใหญ่กว่าเพื่อระบุหน่วยความจำและเมื่อใช้การเข้าถึงแบบไบต์ให้แยกไบต์ออกจากคำที่ใหญ่กว่าโดยอัตโนมัติ

ตัวอย่างเช่นบัส PCI ใช้ธุรกรรมแบบ 32 บิตเสมอ แต่มีไบต์เปิดใช้งานสัญญาณสำหรับการเข้าถึงที่ต้องมีขนาดเล็กลง


ขอขอบคุณ. มี MC ที่กว้าง ๆ แทนที่จะเป็นไบต์ในหน่วยความจำหรือไม่?
อรุณโจเชริยัน

4
บางที Intel 4004?
pjc50

6
@ArunCheriyan ตัวอย่างของซีพียูที่ทำงานกับปลายปากกาเป็นคำที่เล็กที่สุดที่เรียกว่าSaturn : CPU ที่ออกแบบโดย HP และใช้ในเครื่องคิดเลขระดับไฮเอนด์ในศตวรรษที่ผ่านมา (โดยเฉพาะ HP48 ที่รู้จักกันดี) มันมีสถาปัตยกรรมที่ผิดปกติมาก (การลงทะเบียน 64 บิต, 4 บิต ALU, ที่อยู่ 20 บิต, ... )
สลัว

อีกตัวอย่างหนึ่ง: หน่วยที่เล็กที่สุดที่สามารถกำหนดแอดเดรสได้สำหรับ TMS320C3x ของ TI คือ 32- บิต
kkrambo

1
@davidcary โอ้ดี ... วันที่และเวลาไม่เคยเป็นชุดสูทที่แข็งแกร่งของฉันมาก่อน ถามภรรยาเกี่ยวกับของขวัญวันเกิดของเธอและเจ้านายของฉันเกี่ยวกับกำหนดส่ง ...
สลัว

18

ไมโครคอนโทรลเลอร์ขนาด 16 บิตหรือ 32 บิตมักต้องการจัดการกับข้อมูลที่มีความกว้างเพียง 8 บิต (ไบต์) ตัวอย่างเช่นสตริงข้อความมักจะถูกจัดเก็บด้วยอักขระเดียวต่อไบต์ โดยมีรูปแบบการกำหนดแอดเดรสของหน่วยความจำซึ่งช่วยให้แต่ละไบต์ของแต่ละบุคคลสามารถส่งไมโครคอนโทรลเลอร์ได้อย่างมีประสิทธิภาพสามารถประมวลผลข้อมูลที่กว้าง 8 บิต สิ่งนี้หมายความว่าข้อมูล 32- บิตมักจะอยู่ในที่อยู่ที่เป็นทวีคูณของ 4 ไบต์เช่น 04, 08, 0C เป็นต้น แต่ถ้าหน่วยความจำกว้าง 32 บิตไมโครคอนโทรลเลอร์สามารถอ่าน 32 บิตในรอบการอ่านหนึ่งรอบ . Micro มักมีคำแนะนำเครื่องที่สามารถทำงานกับข้อมูลความยาวที่แตกต่างกันดังนั้นคุณจะพบว่าคำสั่งย้ายข้อมูล (MOV) สามารถมี 3 รูปแบบคือ MOV.B, MOV.W และ MOV.L เพื่อย้าย 8, 16 และ 32 บิตของ ข้อมูลในหนึ่งคำสั่ง


7

คำตอบพื้นฐานคือ "เพราะนั่นเป็นระยะเวลาหนึ่งไบต์" ด้วยส่วนของโค้ดที่มีขนาดใหญ่ซึ่งทำให้ข้อสันนิษฐานนั้นแตกทำให้มันเกิดปัญหาทุกประเภท

ย้อนกลับไปในสมัยแรก ๆ ไม่มีรหัสที่แน่นอน โปรเซสเซอร์มักจะใช้สถาปัตยกรรมแปลก ๆ ทุกแบบดังที่แสดงโดยคำตอบอื่น ๆ เมื่อถึงเวลาที่ตัวประมวลผล 16 บิตออกมามีรหัสเพียงพอที่สมมติว่ามีความพร้อมใช้งานของข้อมูล 8 บิตที่ล้มเหลวในการทำให้ง่ายนั้นจะเป็นอุปสรรคในการนำไปใช้จริง

การมีหนึ่งคำ 32 บิตต่อที่อยู่หนึ่ง ๆ จะไม่ส่งผลเสียต่อความเร็วหน่วยความจำ บนระบบ 32 บิตบิตที่อยู่ที่ต่ำกว่า 2 บิตมักจะไม่ไปที่หน่วยความจำ โปรเซสเซอร์มักจะอ่านทั้งคำ 32- บิตและเลือก (หรือปิดบัง) ไบต์ 8 บิตที่ต้องการภายในคำนั้น ตราบใดที่พื้นที่ที่อยู่ของคุณสามารถเก็บข้อมูลได้เพียงพอ (จำกัด ที่ 2 ^ 32 ไบต์ด้วยระบบ 32 บิต) ไม่ต้องกังวล อันที่จริงแล้วโปรเซสเซอร์ 16 บิต / 32 บิตจำนวนมากนั้นใช้เวลานานกว่าในการประมวลผลด้วยค่าไบต์มากกว่าค่าความยาวดั้งเดิม - การอ่านคำ 32- บิตและการละทิ้งส่วนของคำนั้นจะดำเนินการพิเศษอย่างชัดเจน เมื่อเทียบกับการอ่านคำ 32- บิต

ในทางกลับกันถ้าคุณมีระบบที่คุณจำเป็นต้องใช้หน่วยความจำอย่างมีประสิทธิภาพคุณจะต้องสามารถเข้าถึงแต่ละไบต์ได้ ถ้าคุณทำไม่ได้คุณจะมีหน่วยความจำไม่เพียงพอ โดยที่ในใจความสามารถในการอ้างอิงแต่ละไบต์มีความจำเป็นอย่างชัดเจนดังนั้นจึงเหมาะสมที่จะมีหน่วยความจำของคุณมีหน่วยเป็นไบต์


3
จริง และมีคำถามเพิ่มเติมว่าตัวประมวลผลสามารถจัดการการเข้าถึงที่แตกต่างกันสองรายการที่จำเป็นในการโหลดหรือเก็บค่า32 บิตที่ไม่ได้จัดแนวโดยอัตโนมัติในฮาร์ดแวร์หรือถ้าต้องจัดการในซอฟต์แวร์อย่างชัดเจน
Chris Stratton

5

นี่คือสิ่งที่เรียกว่ามีหน่วยความจำที่แอดเดรสไบต์ โดยปกติแล้วจะเป็นสิ่งที่ดีเว้นแต่คุณจะมีพื้นที่ว่างเหลืออยู่ (เช่น 4GB ที่มีตัวชี้ 32- บิตแทนที่จะเป็น 16GB ที่มีตัวชี้ 32- บิตที่ที่อยู่ทั้งหมดเป็นคำ 32 บิตแยกต่างหาก)


โปรดทราบว่าพื้นที่ที่อยู่สามารถผ่านขีด จำกัด ดังกล่าวได้หากคุณแบ่งที่อยู่ออกเป็นส่วนต่างๆซึ่งจะพอดีกับการลงทะเบียนหนึ่งรายการ ฉันเคยมีคอมพิวเตอร์ 8 บิตที่ถึง 64 KB ของหน่วยความจำโดยแยกที่อยู่ออกเป็นสองส่วนที่เก็บไว้ในทะเบียนแยกต่างหากและเห็นโฆษณาสำหรับคอมพิวเตอร์ด้วยโปรเซสเซอร์ 8 บิตที่สามารถเข้าถึงหน่วยความจำ 1 MB โดยแยกที่อยู่ออกเป็นสาม ชิ้นส่วน
user6030

AVR (8-bit RISC ไมโครคอนโทรลเลอร์)ทำอย่างนั้น: คู่ที่ 32 คู่ของการลงทะเบียน 8 บิตที่มีวัตถุประสงค์ทั่วไป 32 คู่สามารถถูกยกเลิกการลงทะเบียนเป็นตัวชี้ 16 บิต นอกจากนี้ยังมีระบบอำนวยความสะดวกในการรวมเข้ากับส่วนอื่น 8 บิตเพื่อรับที่อยู่ 24 บิต
Peter Cordes

4

Analog Devices Shark 32 บิต DSP มี 32 บิตเป็นหน่วยที่เล็กที่สุดของหน่วยความจำที่อยู่ดังนั้น sizeof (int) == sizeof (สั้น) == sizeof (char) == 1 (ใช่พวกเขามีตัวอักษร 32 บิตสมบูรณ์ต่อ มาตรฐาน C)

นอกจากนี้ยังมีสิ่งต่าง ๆ เช่น int_8, int_16 และเช่นนั้นไม่ได้ถูกกำหนดไว้เป็นความประหลาดใจที่น่ารังเกียจเมื่อทำการย้ายรหัสจากแพลตฟอร์มอื่น ๆ


1

ขนาดของหน่วยความจำที่กำหนดแอดเดรสได้นั้นจะลดลงระหว่างหน่วยความจำที่คุณสามารถจัดการกับหน่วยความจำที่คุณจะเสียไป

หน่วยความจำแอดเดรส พิจารณา CPU 32 บิต: หากคุณระบุจำนวนไบต์คุณสามารถระบุหน่วยความจำได้สูงสุด 4GB หากคุณระบุแต่ละบิตจำนวนเงินนั้นจะลดลงเป็น 512MB และหากคุณพูดถึงคำ 32- บิตคุณจะมี 16GB (คำถามของคุณดูเหมือนจะแนะนำอย่างหลัง)

ความจำที่สูญเปล่าไป หากคุณมีตัวแปรที่สามารถแสดงด้วยบิต X และคุณสามารถจัดสรรหน่วยของบิต N สำหรับมันคุณจะเสีย (N-1) / 2 บิตโดยเฉลี่ยโดยสมมติว่า X> N ถ้าคุณอยู่แต่ละบิต คุณจะใช้หน่วยความจำอย่างมีประสิทธิภาพ 100% (อย่างน้อยจากมุมมองที่อยู่) ด้วยไบต์คุณจะเสีย 3.5 บิตต่อตัวแปร (ประสิทธิภาพ 56%) และด้วยคำ 32- บิตคุณจะเสีย 15.5 บิต (ประสิทธิภาพ 52%) แต่มันแย่กว่านี้: หากตัวแปรส่วนใหญ่ของคุณมีขนาดเล็ก (คิดว่าตัวละครบูลีนสถานะธง) คุณจะสูญเสียความทรงจำส่วนใหญ่หากหน่วยที่แอดเดรสของคุณใหญ่เกินไป

ตัวอย่างเช่นสมมติว่าขนาดเฉลี่ยของตัวแปรคือ 8 บิต

  • บนคอมพิวเตอร์ที่ใช้บิตได้คุณจะสามารถจัดสรรได้อย่างมีประสิทธิภาพ 100% ซึ่งจะให้512*1024*1024*100%ตัวแปร = 0.54 พันล้านตัวแปร
  • บนคอมพิวเตอร์ที่ใช้แอดเดรสได้คุณจะจัดสรรด้วยประสิทธิภาพ 56% ซึ่งจะทำให้คุณมี4096*1024*1024*56%ตัวแปร 2.4 พันล้านตัว นั่นเกือบ 5 เท่าเมื่อเทียบกับคอมพิวเตอร์ที่สามารถระบุแอดเดรสได้! แน่นอนคุณจะต้องซื้อหน่วยความจำเพิ่มขึ้น 8 เท่า
  • บนคอมพิวเตอร์แบบ 32 บิตที่อยู่ได้เนื่องจากอย่างน้อยครึ่งหนึ่งของตัวแปรของคุณจะใช้พื้นที่น้อยกว่า 8 บิตพวกเขาจะได้รับการจัดสรรด้วยประสิทธิภาพที่ต่ำกว่า 7% (ใช้ 4.5 บิตจาก 32) ไม่ว่าในกรณีใดคุณจะไม่ได้รับตัวแปรมากกว่า 4.3 พันล้านตัวแปร (เนื่องจากคุณมีที่อยู่ที่แตกต่างกันจำนวนมาก) และน้อยกว่าในความเป็นจริง หลีกเลี่ยงการคำนวณที่ซับซ้อนฉันเดาว่าอาจได้รับพื้นที่เก็บข้อมูลที่มีประโยชน์มากกว่า 20-30% เมื่อเทียบกับคอมพิวเตอร์ที่ใช้แอดเดรสได้โดยจ่าย 4 เท่าของราคา RAM

1

อาจกล่าวได้หลายวิธีแล้วในคำตอบอื่น ๆ โดยทั่วไปในวันนี้ แต่ไม่จำเป็นต้องเป็นในอดีตไบต์คือ 8 บิต เวลาส่วนใหญ่ที่เราจัดการกับ "หน่วยความจำที่แอดเดรสไบต์" หมายถึงสิ่งที่เล็กที่สุดที่เราสามารถเข้าถึงได้ด้วยที่อยู่เดียวคือไบต์ แต่นั่นไม่ได้หมายความว่าเป็นสิ่งเดียวที่เราสามารถจัดการได้ ขึ้นอยู่กับแพลตฟอร์มที่อยู่เดียวสามารถใช้ในการเข้าถึงไบต์ครึ่งคำ / (16 บิต) คำ / doubleword (32 บิต) และอื่น ๆ 64 บิต คำสั่งนั้นกำหนดขนาดของการเข้าถึงที่ต้องการ (8,16,32,64 และอื่น ๆ ) ตามปกติในหน่วย 8, 16, 32, 64 แต่นั่นไม่ใช่เรื่องยากและรวดเร็ว "ขึ้นอยู่กับ"

นอกจากนี้ยังขึ้นอยู่กับการออกแบบโปรเซสเซอร์และ / หรือระบบไม่มีเหตุผลที่จะถือว่าขนาดของการเข้าถึงคือขนาดของหน่วยความจำหรือขนาดของการเข้าถึงที่เล็กที่สุด ด้วยความต้องการที่มากขึ้นและมากขึ้นทำให้ใช้เวลาน้อยลงในการใช้งานระบบหน่วยความจำจริงโดยใช้ขนาดที่เล็กที่สุดคอมพิวเตอร์ที่คุณกำลังอ่านอยู่มักใช้บัสข้อมูล 32 บิตหรือบัสข้อมูลกว้าง 64 บิตสำหรับการเข้าถึงทั้งหมดคุณ ต้องการอ่านหนึ่งไบต์จะอ่าน 64 บิตและโยนส่วนที่เหลือของเหตุผลทำไมมันไม่เสียค่าใช้จ่ายเพิ่มเติมอะไรให้รถบัสที่กว้างตลอดทางใกล้กับหน่วยประมวลผลหลักและหน่วยประมวลผลเลือกเลนขวา ค่าใช้จ่ายตรรกะและนาฬิกามากขึ้นเพื่อให้รถบัสแคบลงหรือย้ายไบต์รอบ ๆ ในเลนไบต์ (บางครั้งก็ทำ) ดังนั้นภายในแรมส์ในไมโครคอนโทรลเลอร์อาจมีความกว้าง 32 บิตเช่นหากเหมาะสมสำหรับระบบ อาจเป็น 16 ใช่สำหรับการเขียนที่คุณเขียนรอบมากขึ้นคุณต้องอ่าน - แก้ไข - เขียนที่ไหนสักแห่งตามบรรทัด ต้องการเขียนหนึ่งไบต์บนพีซีของคุณมีการอ่าน 64 บิตเกิดขึ้นและที่ใดที่หนึ่งไบต์ของ 64 บิตนั้นได้รับการแก้ไขขึ้นอยู่กับสิ่งที่คุณทำหลังจากนั้น 64 บิตอาจกลับไปที่ DRAM ด้วย 8 บิตเท่านั้น แตกต่างจากที่เคยมีมาก่อนแคชและรหัสของคุณทำให้สิ่งนี้ไม่ใช่กฎทั่วไป Writes เป็นไฟและลืมแม้ว่าตัวควบคุมหน่วยความจำสามารถรวบรวมที่อยู่และข้อมูลจากโปรเซสเซอร์และอนุญาตให้ตัวประมวลผลยังคงทำงานในขณะที่มันทำในที่สุดนาฬิกาบันทึกการเขียนอาจนาฬิกาเพิ่มเติมที่เขียนในการอ่าน - แก้ไข - เขียน (ถ้า ในแคชแล้ว)

มีข้อยกเว้นแม้กระทั่งทุกวันนี้สิ่งเหล่านี้อาจมีคำแนะนำหรือประเภทการเข้าถึงในบางระบบที่สามารถกำหนดแอดเดรสบิตได้มีระบบบางระบบที่มีที่อยู่ในหน่วยของสิ่งอื่นที่ไม่ใช่ไบต์ ไบต์ไม่ได้เป็น 8 บิตเสมอและอาจมีระบบที่ยังใช้งานอยู่นั่นเป็นความจริง (เราเคยใช้เลขฐานแปดและคำ 9 ไบต์ 18 หรือ 36 บิตให้ความรู้สึกกับโปรแกรมเมอร์มนุษย์และนักออกแบบชิปที่คิดว่าเลขฐานแปด 8 บิตมีความหมายต่อนักคิดเลขฐานสิบหกมาก)

ตอนนี้คอมพิวเตอร์ที่คุณกำลังอ่านอยู่ถึงแม้ว่า data บัสสำหรับตัวควบคุม dram นั้นอาจมีความกว้าง 32 หรือ 64 บิต แต่โมดูล dram ตัวจริงนั้นน่าจะประกอบด้วยชิ้นส่วนขนาดกว้าง 8 บิตหลายตัวซึ่งคุณสามารถมองเห็นได้ง่าย หากมี 8 หรือ 9 ชิปในด้านหนึ่งอาจเป็นบัสแบบกว้าง 64 บิตหรือ 72 บิต (64 บิตบวก 8 บิตของ ECC) ที่ใช้กับชิ้นส่วนที่กว้าง 8 บิต หากคุณมีชิป 4 หรือ 5 ชิปด้านใดด้านหนึ่งของโมดูล แต่ยังมีหมุดจำนวนมากแสดงว่ามีความกว้าง 32 บิต (ไม่น่าจะเป็นวันนี้) หรือ 4 ชิปมีความกว้าง 16 บิตและหากมีอันดับที่ 5 ก็อาจ มีความกว้าง 16 บิตและใช้เพียง 8 บิตเท่านั้นหรือเป็นส่วนที่มีความกว้าง 8 บิต มีชิ้นส่วนความกว้าง 32 บิตด้วย แต่ความกว้าง 8 บิตเป็นเรื่องธรรมดาที่สุด การปฏิบัติทั่วไปที่ย้อนกลับไป

เราต้องรู้ว่าไมโครคอนโทรลเลอร์คืออะไร เนื่องจากคุณพูดถึง 32 บิตเป็นไปได้ค่อนข้าง (ไม่มีข้อมูลโดยละเอียด แต่เราไม่สามารถบอกได้) ว่าหน่วยความจำในส่วนนั้นมีความกว้าง 32 บิตและการเข้าถึงทั้งหมดนั้นกว้าง 32 บิต คำแนะนำน่าจะเป็นตัวกำหนดสิ่งที่โปรแกรมต้องการซึ่งอาจมีประเภทการเข้าถึง 8 บิต, 16 บิตและ 32 บิต, เล็กกว่าในการเขียนจะต้องอ่าน - แก้ไข - เขียนที่ไหนสักแห่งอ่านคุณเพียงแค่ละเว้นเลนไบต์ กันไปสำหรับแฟลชแม้ว่าแฟลชเขียนเป็นหัวข้ออื่น แต่แฟลชภายในมีความกว้างมากที่สุด 32 บิตและการอ่านทั้งหมดอยู่ในหน่วย 32 บิต แม้ว่าแฟลชภายนอกนั้นเป็นอีกเรื่องหนึ่งส่วนใหญ่มีความกว้างเพียงหนึ่งบิต (spi หรือ i2c) แม้ว่าบางครั้งส่วน spi สามารถรองรับ 1, 2 หรือ 4 บิตได้ ภายในพวกเขาถูกจัดระเบียบในหน่วยไบต์ อาจเป็น 8 บิตกว้างหรือ 16 หรือ 32 หรือใครจะรู้ว่าคุณเลื่อนออกและอยู่ในหน่วยไบต์ ด้วย spi คุณสามารถเลื่อนตำแหน่งใดก็ได้ระหว่างหนึ่งไบต์และหน่วยความจำทั้งหมดในการทำธุรกรรมครั้งเดียวขึ้นอยู่กับการออกแบบส่วนแฟลช


0

คุณสามารถรับโปรเซสเซอร์ 1 บิตได้เช่นกัน!

ความกว้างของข้อมูลจะเป็นไปตามความกว้างของรีจิสเตอร์ (ตัวสะสม) นี่คือ 'ความกว้างของตัวประมวลผล' โดยทั่วไปในขณะที่ที่อยู่บัสอาจแตกต่างกัน (โดยทั่วไปจะกว้างกว่า) แต่ในทางเทคนิคอาจแคบลงขึ้นอยู่กับการใช้งาน

8 แน่นอนคือพลังของสองจำนวน เรามีประวัติที่จะขอบคุณสำหรับการใช้งานอย่างแพร่หลายของ 8 บิต - และต้นทุน / ความสามารถของเทคโนโลยี เป็นเวลานาน 8 บิตที่ปกครองส่วนหนึ่งของเหตุผลที่เป็นความกว้างของบัสและความยากในการลงทะเบียน (และ RAM) กว้างกว่า 8 บิต (ไม่มีจุดในข้อมูล 16 บิตหากรีจิสเตอร์ของคุณทั้งหมด 8 บิต) 8 บิตค่อนข้างดีและทำให้เข้าใจได้ดีใน Hex 8 บิตสามารถเก็บตัวอักษรตัวเลขรูปวาดและอักขระควบคุม (ASCII) หรือ 0 ถึง 255 หรือ +127 การเข้าถึงข้อมูลมากกว่า 256 ไบต์ (บัส 8 บิตที่อยู่) เป็นเรื่องง่ายด้วยเพจจิ้งเลือกเพจจากนั้นไบต์เช่น 256 หน้าจาก 256 นำคุณสู่ 64K (65536) โดยทั่วไปแล้วหน้าศูนย์จะเป็นรอยขีดข่วนเนื่องจากจะเข้าถึงได้เร็วกว่าเนื่องจากไม่ต้องตั้งค่าหน้ากระดาษ คอมพิวเตอร์เครื่องแรกของฉันมี ram คงที่ 1k x 8 บิต! (ไดนามิกแรมราคาถูกกว่า แต่ต้องการฮาร์ดแวร์เพิ่มเติมเพื่อรีเฟรช) ด้วยการตั้งค่าสถานะไม่กี่ (c, nc, z, nz), เพิ่ม, ลบ, หมุนไปทางซ้ายและขวาคุณสามารถทำคณิตศาสตร์ที่ซับซ้อนได้ในเครื่อง 8 บิต คุณไม่จำเป็นต้องมีหน่วยคำนวณเลขทศนิยม! ไม่เร็วมาก แต่ทำได้! โปรเซสเซอร์รุ่นแรกจำนวนมากสามารถก้าวเดียวและใช้กับ RAM แบบคงที่ง่ายทำให้การดีบักง่ายมาก การเพิ่มบัฟเฟอร์ฐานแปดและไฟ LED สีแดงในช่วงต้นคุณสามารถดูที่อยู่และบัสข้อมูลเปลี่ยนแปลงได้ :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.