ROM (Read-OnlyMemory)
คือหน่วยความจำชนิดหนึ่ง ที่มีโปรแกรม หรือข้อมูลอยู่แล้ว และพร้อมที่จะนำมาต่อกับ ไมโครโปรเซสเซอร์ได้โดยตรง ซึ่งโปรแกรม หรือข้อมูลนั้นจะไม่สูญหายไป
แม้ว่าจะไม่มีการจ่ายไฟเลี้ยงให้แก่ระบบ ข้อมูลที่เก็บอยู่ใน ROM จะสามารถอ่านออกมาได้ แต่ไม่สามารถเขียนข้อมูลเข้าไปได้ เว้นแต่จะใช้วิธีการพิเศษซึ่งขึ้นกับชนิดของ ROM
ชนิดของROM
o Manual ROM
ROM (READ-ONLY MEMORY)
ข้อมูลทั้งหมดที่อยู่ใน ROM จะถูกโปรแกรม โดยผู้ผลิต (โปรแกรม มาจากโรงงาน) เราจะใช้ ROM ชนิดนี้ เมื่อข้อมูลนั้น ไม่มีการเปลี่ยนแปลง และมีความต้องการใช้งาน เป็นจำนวนมาก ผู้ใช้ไม่สามารถ เปลี่ยนแปลงข้อมูลภายใน ROM ได้
โดย ROM จะมีการใช้ technology ที่แตกต่างกันตัวอย่างเช่น BIPOLAR, CMOS, NMOS, PMOS
o PROM (Programmable ROM)
PROM (PROGRAMMABLE READ-ONLY MEMORY)
ข้อมูลที่ต้องการโปรแกรมจะถูกโปรแกรมโดยผู้ใช้เอง โดยป้อนพัลส์แรงดันสูง (HIGH VOLTAGE PULSED) ทำให้ METAL STRIPS หรือ POLYCRYSTALINE SILICON ที่อยู่ในตัว IC ขาดออกจากกัน ทำให้เกิดเป็นลอจิก “1” หรือ “0” ตามตำแหน่ง ที่กำหนดในหน่วยความจำนั้นๆ เมื่อ PROM ถูกโปรแกรมแล้ว ข้อมูลภายใน จะไม่สามารถเปลี่ยนแปลงได้อีก หน่วยความจำชนิดนี้ จะใช้ในงานที่ใช้ความเร็วสูง ซึ่งความเร็วสูงกว่า หน่วยความจำ ที่โปรแกรมได้ชนิดอื่นๆ
o EPROM (Erasable Programmable ROM)
EPROM (ERASABLE PROGRAMMABLE READ-ONLY MEMORY)
ข้อมูลจะถูกโปรแกรม โดยผู้ใช้โดยการให้สัญญาณ ที่มีแรงดันสูง (HIGH VOLTAGE SIGNAL) ผ่านเข้าไปในตัว EPROM ซึ่งเป็นวิธีเดียวกับที่ใช้ใน PROM แต่ข้อมูลที่อยู่ใน EPROM เปลี่ยนแปลงได้ โดยการลบข้อมูลเดิมที่อยู่ใน EPROM ออกก่อน แล้วค่อยโปรแกรมเข้าไปใหม่ การลบข้อมูลนี้ทำได้ด้วย การฉายแสง อุลตร้าไวโอเลตเข้าไปในตัว IC โดยผ่าน ทางกระจกใส ที่อยู่บนตัว IC เมื่อฉายแสง ครู่หนึ่ง (ประมาณ 5-10 นาที) ข้อมูลที่อยู่ภายใน ก็จะถูกลบทิ้ง ซึ่งช่วงเวลา ที่ฉายแสงนี้ สามารถดูได้จากข้อมูล ที่กำหนด (DATA SHEET) มากับตัว EPROM และ มีความเหมาะสม ที่จะใช้ เมื่องานของระบบ มีโอกาส ที่จะปรับปรุงแก้ไขข้อมูลใหม่
o EAROM (Electrically Alterable ROM)
EAROM (ELECTRICALLY ALTERABLE READ-ONLY MEMORY)
EAROM หรืออีกชื่อหนึ่งว่า EEPROM (ELECTRICAL ERASABLE EPROM) เนื่องจากมีการใช้ไฟฟ้าในการลบข้อมูลใน ROM เพื่อเขียนใหม่ ซึ่งใช้เวลาสั้นกว่าของ EPROM
การลบขึ้นอยู่กับพื้นฐานการใช้เทคโนโลยีที่แตกต่างกัน ดังนั้น EAROM (ELECTRICAL ALTERABLE ROM) จะอยู่บนพื้นฐานของเทคโนโลยีแบบ NMOS ข้อมูลจะถูกโปรแกรมโดยผู้ใช้เหมือนใน EPROM แต่สิ่งที่แตกต่างก็คือ ข้อมูลของ EAROM สามารถลบได้โดยทางไฟฟ้าไม่ใช่โดยการฉายแสงแบบ EPROM
โดยทั่วไปจะใช้ EPROM เพราะเราสามารถหามาใช้ และทดลองได้ง่าย มีราคาถูก วงจรต่อง่าย ไม่ยุ่งยาก และสามารถเปลี่ยนแปลงโปรแกรมได้ นอกจากระบบ ที่ทำเป็นการค้าจำนวนมาก จึงจะใช้ ROM ประเภทโปรแกรมสำเร็จ
จากรูปแสดงให้เห็นส่วนประกอบพื้นฐานของ ROM ซึ่งจะมีสัญญาณต่างๆ ที่เกี่ยวข้องกับ ROM และทุกชิปที่อยู่ใน ROM มักมีการจัดแบ่งแยกหน้าที่เสมอ เช่น ขาแอดเดรสของ ROM เป็นอินพุต ส่วนขาข้อมูลจะเป็นเอาต์พุต โดยหลักการแล้ว ขาข้อมูลจะต่อเข้ากับบัสข้อมูลซึ่งเป็นบัส 2 ทาง ดังนั้นเอาต์พุตของ ROM ในส่วนขาข้อมูลนี้มักจะเป็นลอจิก 3 สถานะ ซึ่งถ้าไม่ใช้ก็จะอยู่ในสถานะ ที่มีอิมพีแดนซ์สูง (High Impedence)
ลักษณะโครงสร้างภายในของข้อมูลในหน่วยความจำ สามารถดูได้จาก Data Sheet ของ ROM นั้นๆ เช่น ROM ที่ระบุเป็น 1024 8 ,2048 8 หรือ 4096 8 ตัวเลขชุดแรก (1024 ,2048 หรือ 4096) จะบอกจำนวนตำแหน่ง ที่ใช้เก็บข้อมูลภายใน ส่วนตัวเลขชุดที่สอง (
เป็นตัวบอกจำนวนบิตของข้อมูลแบบขนาน ที่อ่านจาก ROM
ในการกำหนดจำนวนเส้นของบัสแอดเดรสที่ใช้กับ ROM เราสามารถรู้ได้ด้วยสูตร
2x = จำนวนแอดเดรสที่อ้างถึง
เช่น 2x = 4096 จะได้ x = 12 ซึ่งก็คือ จำนวนเส้นบัสแอดเดรสนั่นเอง
ขั้นตอนการอ่านข้อมูลจาก ROM
1. CPU จะส่งแอดเดรสไปให้ ROM แอดเดรสดังกล่าวจะปรากฏ เป็นแอดเดรสที่ต้องการอ่าน ใน ROM โดยข้อมูลจะถูกอ่านออกมาเพียงครั้งละ 1 ไบต์เท่านั้น
2. CPU จะต้องให้ช่วงเวลาของการส่งแอดเดรสยาวนานพอประมาณ (Wait State) เรียกว่า Access Time โดยปกติต้องประมาณ 100-300 นาโนวินาที ขึ้นกับชนิดของ ROM ซึ่ง ROM จะใช้เวลานั้นในการถอดรหัสแอดเดรส ของข้อมูลที่ต้องการจะอ่านออกมาที่เอาท์พุทของ ROM ซึ่งถ้าใช้เวลาเร็วกว่านั้น ROM จะตอบสนองไม่ทัน
3. CPU จะส่งสัญญาณไปทำการเลือก ROM เรียกว่า สัญญาณ /CS (Chip Select) เพื่อบอกว่าต้องการเลือก ROM ซึ่งเป็นการส่งสัญญาณเพื่อยืนยันการเลือกชิปนั่นเอง
4. ข้อมูลจะผ่านออกทางขาข้อมูลชั่วขณะจังหวะการเลือกชิป และเมื่อขาการเลือกชิปไม่แอคตีฟ ข้อมูลก็จะเข้าสู่ภาวะที่มีอิมพีแดนซ์สูง
ลักษณะดังกล่าว สามารถเขียนเป็นแผนผังเวลาออกมาได้ ดังแสดงในรูป
การต่อกับบัสของ Z-80
ในการต่อกับบัสของ Z-80 นั้น สามารถเชื่อมโยงกันโดยตรงได้ เพราะ Z-80 แยกบัสข้อมูล และบัสแอดเดรสออกจากกัน ดังแสดงในรูป
จากรูป เป็นการนำเอา ROM เบอร์ 2716 มาต่อกับ Z-80 โดยใช้แอดเดรสจาก CPU ต่อกับ ROM โดยตรง และบัสข้อมูลก็ต่อถึงกันโดยตรง ในที่นี้จะยังไม่มีการถอดรหัสแอดเดรส สังเกตว่าในขณะนี้ยังไม่มี การต่อสายสัญญาณ /CE ซึ่งปกติต้องมาจาก CPU แต่จะกล่าวถึงเฉพาะวิธีการถอดรหัสเพื่อต่อกับ สัญญาณ /CE นี้เท่านั้น
การกำหนดแอดเดรส
ปกติ Z-80 จะมีสัญญาณแอดเดรสจำนวน 16 สาย โดยใช้ชื่อสัญญาณเป็นแอดเดรส A0-A15 ซึ่งหมายถึง การอ้างแอดเดรสได้ 216 หรือ 65536 ตำแหน่ง แต่ ROM เบอร์ 2716 มีแอดเดรสเพียง 11 สาย นั่นหมายถึง ความจุของหน่วยความจำ มีเพียง 2 กิโลไบต์ หรือ 2048 ตำแหน่งเท่านั้น ดังนั้นการต่อ 2 กิโลไบต์ ลงใน 64 กิโลไบต์จะต้องกำหนดว่า 2 กิโลไบต์ที่ต่อนี้ อยู่ ณ ที่ใดในส่วนของพื้นที่ทั้งหมด 64 กิโลไบต์ของ Z-80 ซึ่งถ้าจะต่อให้ครบทั้ง 64 กิโลไบต์ ต้องใช้ ROM ถึง 32 ตัว
ในการต่อ ROM นั้น เรามักให้ ROM เริ่มที่แอดเดรส 0000H ทั้งนี้เพราะเมื่อเริ่มทำการรีเซต Z-80จะเริ่มทำงานที่แอดเดรสนี้ ดังนั้นเมื่อเปิดเครื่องจะทำให้ Z-80 มีโปรแกรมและพร้อมที่จะรัน (run) จึงต้องนำ ROM มาใส่ที่แอดเดรสกลุ่มล่างสุดนี้ สำหรับการกำหนดพื้นที่ของหน่วยความจำเพื่อการใช้งานนั้น สามารถแสดงได้ดังรูป
จากรูป เป็นการกำหนดพื้นที่ของหน่วยความจำ RAM และ ROM เพื่อการใช้งาน โดยสมมติให้ ROM ที่จะต่อนี้มีทั้งสิ้น 4 ตัว คือ ROMA, ROMB, ROMC และ ROMD โดยในขั้นแรกจะต่อเฉพาะ ROMA และ ROMB ส่วน RAM ที่ใช้จะต่อเป็น RAMA และ RAMB
การเลือกชิปของ ROM
เมื่อต่อ ROM เข้าสู่ระบบ เราจะต้องหาวิธีในการเลือกชิปของ ROM ให้ถูกต้องตามแอดเดรสที่เรากำหนด ไว้ เช่น ROMA เรากำหนดแอดเดรสไว้ที่แอดเดรส 0000H - 07FFH ดังนั้นเราจำเป็นต้องมีตัวถอดรหัสเพื่อเลือก แอดเดรสให้ถูกต้อง การถอดรหัสนี้เราจะใช้แอดเดรสส่วนบนที่เหลือมาทำการถอดรหัส ในที่นี้เราจะใช้ 74LS138 และทำการเลือกโดยใช้ A11, A12, A13, A14 และ A15 การถอดรหัสของ 74LS138 นี้เป็นการเลือกจาก 3 บิตไปเป็น 8 บิตโดยใช้อินพุต A, B, C วงจรการถอดรหัสนี้แสดงได้ดังรูป
ด้วยวิธีนี้จะเห็นว่า ถ้าเราเลือกแอดเดรสจาก A10 - A15 จะมีสัญญาณจาก A0 - A10 ส่งไปยังแอดเดรสของ ROM โดยตรง ส่วน A11 - A 15 จะผ่านการถอดรหัสก่อน แล้วจึงไปทำการเลือกชิปใน ROM ตามที่เราต้องการ เพื่อให้เห็นขั้นตอนการถอดรหัสชัดเจนขึ้น เราควรพิจารณาขั้นตอนการทำงานของ 74LS138 โดยเขียนออกมาเป็นตารางแอดเดรส ดังแสดงในตาราง
จากตารางนี้ เราจะเน้นเฉพาะส่วนของแอดเดรส A11 - A15 ซึ่งจะส่งค่ารวมของแอดเดรสเพื่อออกไปยังขาเอาต์พุตขาที่ 10-15 เช่น ถ้าแอดเดรส A11 - A15 เป็นลอจิก ‘ 0 ‘ หมด ขาที่ 15 ซึ่งเป็นเอาต์พุตจะแอคตีฟ เพิ่อทำการเลือกชิป และจากตารางจะพบว่า ในช่วงระหว่างแอดเดรส 0000H-07FFH ขาที่ 15 ของ 74LS138 จะแอคตีฟ ดังนั้น 74LS138 จึงเป็นวงจรถอดรหัสที่ใช้ในการเลือกชิป ROM ได้อย่างถูกต้อง
สัญญาณการอ่านข้อมูล
สำหรับการอ่านข้อมูลจากหน่วยความจำนั้น Z-80 จะต้องใช้สัญญาณทีเกี่ยวข้องหลายสัญญาณ เช่น สัญญาณ /MREQ กับสัญญาณ /RD สัญญาณทั้งสองจะต้องเกิดขึ้นพร้อมกัน ดังนั้นเมื่อเป็นเช่นนี้ จึงต้องเอาสัญญาณทั้งสองนี้ออร์ (OR) กันเพื่อให้ได้สัญญาณ /MEMR การกำหนดจังหวะการอ่านหน่วยความจำ แสดงได้ดังรูป
การต่อ Z-80 กับสัญญาณ /CS ของ ROM
การเลือก ROM ในจังหวะการอ่านนี้ ซีพียูต้องกำหนดได้ว่าจะเลือกแอดเดรสกลุ่มใด และจังหวะการเลือกนั้นจะต้องตรงกับการอ่านพอดี ดังนั้นจึงต้องนำเอาสัญญาณ /MEMR และสัญญาณเลือก ROMA มาทำการ OR กันอีกครั้ง เพื่อจะเลือก ROM ได้อย่างถูกต้อง วงจรที่ต่อ ROM แบบสมบูรณ์ในกรณีนี้แสดงได้ดังรูป
จากรูปจะเห็นว่า สัญญาณจากซีพียูที่เข้าไปทำการควบคุม ROM จะประกอบด้วยสัญญาณ จากหลายส่วนซึ่งได้แก่ สัญญาณแอดเดรส A0-A15 โดยสัญญาณ A11-A15 จะสร้างสัญญาณใหม่เป็น สัญญาณ ROMA เพื่อเลือก ROM จากนั้นจะใช้สัญญาณ /MREQ กับสัญญาณ /RD สร้างสัญญาณ /MEMR และสร้างเป็นสัญญาณ /CE ต่อไป โดยประกอบกันเป็นขั้นตอนดังแสดงในรูป
การต่อ Z-80 กับ ROM อีกวิธีหนึ่ง
สังเกตว่า ROM เบอร์ 2716 มีขา /CE และ /OE ซึ่งอาจจะนำขาสัญญาณเลือกเอาต์พุตนี้ มาใช้ประโยชน์ได้ การเลือก ROM เบอร์ 2716 นี้จะใช้ /CE และ /OE ในการเลือก โดยขาทั้งสอง จะเป็นลอจิก“0” ในการเลือกชิป และเลือกเอาต์พุตโดยทำการเปิดเกตลอจิก 3 สถานะนั่นเอง เมื่อเป็นเช่นนี้ เราสามารถลดจำนวนเกตแบบออร์ (or gate) ลงไป 1 ตัวได้ โดยแทนที่จะใช้สัญญาณ /MEMR และสัญญาณ ROMA มา OR กัน เราก็เชื่อมต่อโดยการใช้สัญญาณ /MEMR ต่อกับสัญญาณ /OE และสัญญาณ ROMA ต่อกับสัญญาณ /CE ดังแสดงในรูป
การต่อ ROM หลายๆชิบ
หากต้องการจะต่อ ROM หลายๆชิป เช่น ROMA,ROMB,ROMC และ ROMD ก็สามารถต่อเพิ่มได้ โดยใช้สัญญาณเลือกจาก 74LS138 และ /MEMR มาเลือกโดยผ่านทาง /CE และ /OE ได้ ดังแสดงในรูป
การใช้ ROM ในชิปที่มีความจุเพิ่มขึ้น
ROM ที่ใช้ในปัจจุบันมีความจุสูงขึ้นมาก EPROM บางตัวมีความจุถึง 32 กิโลไบต์ เช่น EPROM ที่ใข้กันมากในขณะนี้ ได้แก่ เบอร์ 2764 (มีความจุ 8 กิโลไบต์) เบอร์ 27128 (มีความจุ 16 กิโลไบต์) ดังนั้นหากต้องการใช้ ROM ในชิปที่มีความจุเพิ่มขึ้นก็ทำได้ โดยใช้หลักการเช่นเดียวกัน ในที่นี้ขอให้ดูการจัดขาของ EPROM เบอร์ 2732 เมื่อเปรียบเทียบกับเบอร์ 2764 ซึ่งสามารถแสดงได้ดังรูป
EPROM เบอร์ 2732 มีจำนวนขาเท่ากับเบอร์ 2764 ดังนั้นการเพิ่มความจุจะกระทำได้โดยง่าย และสามารถใช้ซ็อกเกต (socket) เดิมได้ทันที หรือเพียงแต่แก้ขาแอดเดรสเพียงเส้นเดียว สังเกตว่าขาที่แตกต่างกันในที่นี้คือ EPROM เบอร์ 2764 ได้เพิ่มเติมอีก 4 ขา โดยเพิ่มส่วนบนเป็น A12 และขา PGM มาอยู่ที่ขา 27 ส่วนขา 26 ไม่ใช้ ความแตกต่างนี้เองทำให้การเพิ่มเติมลายวงจรทำได้ง่ายขึ้น โดยการต่อจากขา 26 มาที่ขา 28 เพื่อต่อสาย Vcc ดังแสดงในรูป
เมื่อจะต่อกับ EPROM เบอร์ 2732 เราสามารถขยายระบบโดยใช้ขาแอดเดรสของ EPROM เบอร์ 2732 จากแอดเดรส A0- A11ดังนั้นส่วนที่จะขยายจากซีพียู เราใช้ 74LS42 โดยนำแอดเดรส A12- A15 มาถอดรหัสดังแสดงในรูป
ที่มา:
http://web.ku.ac.th/schoolnet/snet1/hardware/rom.htm บทเรียน Online วิชา 204323 ไมโครโปรเซสเซอร์และการออกแบบไมโครคอมพิวเตอร์ รศ.ยืน ภู่วรวรรณ