สถาปัตยกรรม Harvard มีประโยชน์อย่างไร


13

ฉันอ่านเกี่ยวกับ arduino และสถาปัตยกรรม AVR และติดอยู่ที่จุดที่ว่าไปป์ไลน์หรือ bubbling ได้รับการแก้ไขโดยการแนะนำสถาปัตยกรรม Harvard ใน AVR.I หมายความว่า Harvard ทำหน้าที่จัดเก็บข้อมูลหน่วยความจำข้อมูลและหน่วยความจำของโปรแกรมที่แตกต่างกันอย่างไร ทำให้สามารถโหลดโปรแกรมโดยไม่มีโอเปอเรเตอร์ แต่มันช่วยแก้ปัญหาข้างต้นได้อย่างไร


2
นี่เป็นเพียงการเดาดังนั้นฉันจะไม่โพสต์เป็นคำตอบ แต่ฉันเดาว่าสถาปัตยกรรมของ Harvard ช่วยได้เพราะไม่มีความเป็นไปได้ในการแก้ไขโค้ดด้วยตนเองโดยคำสั่งก่อนหน้านี้ในท่อ
PeterJ

1
ฉันไม่แน่ใจว่าฉันได้รับคุณ ... หมายความว่าจะบอกว่าเมื่อคำสั่งได้รับ "เรียก" มันไม่สามารถแก้ไขหรือโยนกลับ?
Ayush

1
ใช่ถูกต้องสำหรับผู้ที่ไม่ใช่ฮาร์วาร์ดเพราะรหัสสามารถเปลี่ยนแปลงตัวเองได้มีความเป็นไปได้ที่คำสั่งก่อนหน้านี้จะสามารถแก้ไขคำสั่งที่ตามมาได้ แต่รอสักครู่บางคนอาจจะได้คำตอบที่ชัดเจนและชัดเจนมากขึ้น
PeterJJ

คำตอบ:


9

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

ในระดับที่ง่ายที่สุดสถาปัตยกรรมฮาร์วาร์ดมีข้อ จำกัด โดยทั่วไปไม่สามารถใส่รหัสโปรแกรมลงในหน่วยความจำข้อมูลและเรียกใช้จากที่นั่นได้

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


ขอบคุณมาก .... ช่วยฉันได้จริงๆ แต่อีกอย่างหนึ่ง ... ไม่สามารถมีรถบัสที่แตกต่างกัน แต่มีความทรงจำและการทำงานในเวลาเดียวกันได้หรือไม่?
Ayush

@Ayush - ถ้าคุณมีรถบัสสองคันไปยังพื้นที่หน่วยความจำเดียวกันดังนั้นคำขอธุรกรรมหน่วยความจำสองใบที่มาถึงหน่วยความจำในเวลาเดียวกันก็ยังคงต้องต่อกรกับการเข้าถึงหน่วยความจำ เราต้องรอให้อีกฝ่ายให้เสร็จ !! ขณะนี้ที่กล่าวว่านักออกแบบบางคน "แก้ไข" ปัญหานั้นโดยการออกแบบหน่วยความจำให้ทำงานที่ความเร็วปกติเป็นสองเท่าจากนั้นให้รถบัสคันหนึ่งเข้าถึงหน่วยความจำที่สลับกับการเข้าถึงจากบัสอื่น Ie Things ถูกออกแบบมาเพื่อให้รถคันแรกซิงค์กับช่องทางเข้าถึงหน่วยความจำและ (ต่อไปแสดงความคิดเห็น)
Michael Karas

(ต่อจากความคิดเห็นก่อนหน้า) รถบัสที่สองที่ซิงค์กับช่องทางเข้าถึงคู่ของหน่วยความจำจากนั้นรถบัสทั้งสองสามารถทำงานต่อได้ที่ความเร็วโดยไม่ต้องมีการเข้าถึงหน่วยความจำ
Michael Karas

@MichaelKaras: ใคร ๆ ก็ทำได้ ในกรณีส่วนใหญ่ปัจจัย จำกัด หลักสำหรับความเร็วของระบบโดยรวมคือความเร็วหน่วยความจำ ถ้าใครมีหน่วยความจำที่สามารถรันได้เร็วเป็นสองเท่าตามที่ต้องการเพียงแค่สำหรับข้อมูลหรือสำหรับรหัสการแบ่งระบบหน่วยความจำออกเป็นหนึ่งสำหรับข้อมูลและรหัสจะช่วยให้สิ่งต่าง ๆ เร็วขึ้นเป็นสองเท่า
supercat

4

หมายเหตุบางส่วนเพิ่มเติมจากคำตอบของ Michaels:

1) สถาปัตยกรรมฮาร์วาร์ไม่จำเป็นต้องให้มีสองแยกช่องว่างสำหรับข้อมูลและรหัสเพียงว่าพวกเขา (ส่วนใหญ่) เรียกที่แตกต่างกันกว่าสองบัส

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

โปรดทราบว่าการแคชเป็นอีกวิธีหนึ่งในการแก้ปัญหานี้ บ่อยครั้งที่ฮาร์วาร์ดและแคชใช้ในชุดค่าผสมที่น่าสนใจ

Harvard ใช้รถบัสสองคัน ไม่มีเหตุผลโดยธรรมชาติที่จะยึดติดกับสองอย่างในกรณีพิเศษมากมีการใช้มากกว่าสองตัวส่วนใหญ่ใน DSP (ตัวประมวลผลสัญญาณดิจิตอล)

Memory Banking (ในแง่ของการกระจายการเข้าถึงหน่วยความจำไปยังชุดชิปที่แตกต่างกัน) สามารถถูกมองว่าเป็น Harvarding ภายในระบบหน่วยความจำนั้นไม่ได้ขึ้นอยู่กับความแตกต่างของข้อมูล / รหัส แต่อยู่ที่บิตบางส่วน


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

ธนาคารหน่วยความจำไม่ได้ช่วยเว้นแต่จะมีสอง (หรือมากกว่า) บัสระหว่าง CPU และแต่ละธนาคารหน่วยความจำ
Dave Tweed

@Dave 2: การธนาคารช่วยในบางสถานการณ์เช่นหากปัญหาคือช่วงเวลาของหน่วยความจำและบัสไปยังหน่วยความจำนั้นไม่ได้ปิดกั้น (การทำธุรกรรมหลายรายการอาจมีความโดดเด่น)
Wouter van Ooijen

@ Dave1: คุณสามารถให้การอ้างอิงได้หรือไม่?
Wouter van Ooijen

WikipediaและPrinceton University (ซึ่งเป็นเพียงสำเนาของหน้า Wikipedia) นอกจากนี้ไมโครคอนโทรลเลอร์ชิปตัวเดียวส่วนใหญ่คือสถาปัตยกรรมฮาร์วาร์ดและเอกสารข้อมูลจำนวนมากพูดถึงวิธีการให้กลไกในการเขียนหน่วยความจำแฟลชโค้ดด้วยตนเองสร้างสถาปัตยกรรมฮาร์วาร์ดที่ปรับเปลี่ยนเอง
Dave Tweed

2

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

สถาปัตยกรรมฮาร์วาร์ด "บริสุทธิ์" จะถูก จำกัด ให้ใช้งานโค้ดซึ่งมีการใส่หน่วยความจำโดยกลไกบางอย่างนอกเหนือจากโปรเซสเซอร์ที่จะรันโค้ด สิ่งนี้เป็นการ จำกัด ยูทิลิตี้ของสถาปัตยกรรมดังกล่าวสำหรับอุปกรณ์ที่ไม่ได้ถูกกำหนดโดยโรงงาน (หรือผู้ที่มีอุปกรณ์การเขียนโปรแกรมพิเศษ) อาจใช้วิธีการสองวิธีในการบรรเทาปัญหานี้:

บางระบบมีรหัสแยกต่างหากและพื้นที่หน่วยความจำ แต่ให้ฮาร์ดแวร์พิเศษที่สามารถขอให้ใช้เวลาสั้น ๆ ในการบัสโค้ดดำเนินการบางอย่างและกลับไปควบคุม CPU เมื่อการดำเนินการดังกล่าวเสร็จสมบูรณ์ ระบบดังกล่าวบางระบบต้องการโปรโตคอลที่มีความละเอียดพอสมควรในการดำเนินการดังกล่าวบางระบบมีคำแนะนำพิเศษในการปฏิบัติงานดังกล่าวและบางคนถึงกับมองหาที่อยู่ "หน่วยความจำข้อมูล" บางอย่างและเรียกการรัฐประหาร . ลักษณะสำคัญของระบบดังกล่าวคือมีพื้นที่หน่วยความจำที่กำหนดไว้อย่างชัดเจนสำหรับ "code" และ "data"; แม้ว่า CPU จะสามารถอ่านและเขียนพื้นที่ "รหัส" ได้ แต่ก็ยังจำได้ว่าแตกต่างจากพื้นที่ข้อมูล '

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

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

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


2

แง่มุมหนึ่งที่ไม่ได้กล่าวถึงคือสำหรับไมโครคอนโทรลเลอร์ขนาดเล็กซึ่งโดยปกติจะมีบัสแอดเดรส 16 บิตเท่านั้นสถาปัตยกรรมฮาร์วาร์ดทำให้พื้นที่แอดเดรสมีประสิทธิภาพเป็นสองเท่า (หรืออเนกประสงค์) คุณสามารถมีรหัส 64K, 64K of RAM และ 64k ของหน่วยความจำที่แมป I / O (หากระบบใช้หน่วยความจำ I / O ที่แมปหน่วยความจำแทนหมายเลขพอร์ต พื้นที่ RAM)

มิฉะนั้นคุณต้องยัดเยียดรหัส RAM และที่อยู่ I / O แบบเลือกได้ภายในพื้นที่ที่อยู่ 64K เดียวกัน

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