# หน่วยความจำอ่านอย่างเดียว
หน่วยความจำอ่านอย่างเดียว (Read-only Memory) หรือเรียกย่อว่า รอม (ROM) เป็นหน่วยความจำแบบสารกึ่งตัวนำชั่วคราวชนิดอ่านได้อย่างเดียว ใช้เป็นสื่อบันทึกในคอมพิวเตอร์ เพราะไม่สามารถบันทึกซ้ำได้ (อย่างง่ายๆ) เป็นหน่วยความจำที่มีซอฟต์แวร์หรือข้อมูลอยู่แล้ว และพร้อมที่จะนำมาต่อกับไมโครโพรเซสเซอร์ได้โดยตรง หน่วยความจำประเภทนี้แม้ไม่มีไฟเลี้ยงต่ออยู่ ข้อมูลก็จะไม่หายไปจากหน่วยความจำ (nonvolatile) โดยทั่วไปจะใช้เก็บข้อมูลที่ไม่ต้องมีการแก้ไขอีกแล้วเช่น

 เก็บโปรแกรมไบออส (Basic Input output System : BIOS) หรือเฟิร์มแวร์ ที่ควบคุมการทำงานของคอมพิวเตอร์
 ใช้เก็บโปรแกรมการทำงานสำหรับเครื่องคิดเลข
 ใช้เก็บโปรแกรมของคอมพิวเตอร์ที่ทำงานเฉพาะด้าน เช่น ในรถยนต์ที่ใช้ระบบคอมพิวเตอร์ควบคุมวงจร ควบคุมในเครื่องซักผ้า เป็นต้น
หน่วยความจำประเภท ROM นี้ยังแบ่งออกเป็นประเภทย่อยๆ ตามลักษณะการใช้งานได้หลายประเภท สำหรับเทคโนโลยีในการผลิตตัวไอซีที่ทำหน้าที่เป็น ROM มีทั้งแบบ MOS และแบบไบโพลาร์  ดังแผนภาพ

 ชนิดของ  ROM 

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

 PROM  (Programmable ROM) 
จากไอซี ROM แบบแรกการโปรแกรมข้อมูลจะต้องโปรแกรมมาจากโรงงาน  และต้องผลิตจำนวนมากจึงจะคุ้มค่ากับต้นทุนในการผลิต   อีกทั้งโรงงานผู้ผลิตไอซีจะรู้ข้อมูลที่เก็บอยู่ด้วย    สำหรับระบบดิจิทัลหรือคอมพิวเตอร์ที่ผลิตออกมาจำนวนไม่มากและต้องการใช้หน่วยความจำ  ROM  สามารถนำหน่วยความจำ  ROM มาโปรมแกรมเองได้   โดยหน่วยความจำนี้จะเรียกว่า   PROM (Programmable Read Only Memory) หน่วยความจำประเภทนี้ เซลล์เก็บข้อมูลแต่ละเซลล์จะมีฟิวส์ (fused)  ต่ออยู่   เป็นหน่วยความจำที่ข้อมูลที่ต้องการโปรแกรมจะถูกโปรแกรมโดยผู้ใช้เอง โดยป้อนพัลส์แรงดันสูง (HIGH VOLTAGE PULSED)  ไอซี PROM ที่ยังไม่ถูกโปรแกรมนั้น ข้อมูลทุกเซลล์หรือทุกบิตจะมีค่าเท่ากันหมด คือ มีลอจิกเป็น 1   แต่เมื่อได้มีการโปรแกรมโดยป้อนแรงดันไฟสูงๆเข้าไปจะทำให้เซลล์บางเซลล์ฟิวส์ขาดไป  ทำให้ตำแหน่งที่เซลล์นั้นต่ออยู่มีลอจิกเป็น 0   เมื่อ PROM ถูกโปรแกรมแล้ว ข้อมูลภายใน จะไม่สามารถเปลี่ยนแปลงได้อีก เนื่องจากฟิวส์ที่ขาดไปแล้วไม่สามารถต่อได้    หน่วยความจำชนิดนี้ จะใช้ในงานที่ใช้ความเร็วสูง ซึ่งความเร็วสูงกว่า หน่วยความจำที่โปรแกรมได้ชนิดอื่นๆ

 EPROM (Erasable Programmable ROM) 
หน่วยความจำประเภท EPROM เป็นหน่วยความจำประเภท PROM ที่สามารถลบข้อมูลหรือโปรแกรมข้อมูลใหม่ได้  เหมาะสำหรับงานสร้างวงจรต้นแบบที่อาจต้องมีการแก้ไขโปรแกรมหรือข้อมูลใหม่  ข้อมูลจะถูกโปรแกรม โดยผู้ใช้โดยการให้สัญญาณ ที่มีแรงดันสูง (HIGH VOLTAGE SIGNAL)  ผ่านเข้าไปในตัว EPROM ซึ่งเป็นวิธีเดียวกับที่ใช้ใน PROM  หน่วยความจำประเภทนี้มี  2  ประเภท คือ ประเภทที่ลบข้อมูลด้วยรังสีอัลตราไวโอเลต หรือที่เรียกกันว่า  UV PROM  ส่วนอีกประเภทหนึ่งเป็นหน่วยความจำที่ลบข้อมูลด้วยไฟฟ้า เรียกว่า   EEPROM  ย่อมาจาก  Electrical Erasable PROM

หน่วยความจำประเภท UV PROM  การโปรแกรมทำได้โดยการป้อนค่าแรงดันไฟฟ้าที่เหมาะสมเข้าไป  และข้อมูลจะถูกบันทึกไว้ตลอดไป   สำหรับการลบข้อมูลทำได้ด้วยการฉายแสงอัลตราไวโอเลตเข้าไปในตัว ไอซี  โดยผ่านทางช่องใสที่ทำด้วยผลึกควอตซ์ที่อยู่บนตัวไอซี   เมื่อฉายแสงครู่หนึ่ง (ประมาณ 5 - 10 นาที) ข้อมูลที่อยู่ภายในก็จะถูกลบทิ้ง   ซึ่งช่วงเวลาที่ฉายแสงนี้สามารถดูได้จากข้อมูลที่กำหนด (DATA SHEET) มากับตัว EPROM   

หน่วยความจำประเภท  EEPROM  แม้ว่าจะลบและโปรแกรมข้อมูลได้ด้วยกระแสไฟฟ้าซึ่งสะดวกในการใช้งาน    แต่ความเร็วในการอ่าน และเขียนข้อมูลจะไม่เร็วเท่าที่ควร

 การอ่านขนาดความจุจาก Data Sheet 
ส่วนประกอบพื้นฐานของ  ROM  จะมีสัญญาณต่างๆ ที่เกี่ยวข้องกับ ROM และทุกชิปที่อยู่ใน ROM มักมีการจัดแบ่งแยกหน้าที่เสมอ  เช่น ขาแอดเดรสของ ROM เป็นอินพุต   ส่วนขาข้อมูลจะเป็นเอาต์พุต   โดยหลักการแล้วขาข้อมูลจะต่อเข้ากับบัสข้อมูลซึ่งเป็นบัส 2 ทาง    
ลักษณะโครงสร้างภายในของข้อมูลในหน่วยความจำสามารถดูได้จาก  Data Sheet  ของ ROM นั้นๆ   เช่น ROM ที่ระบุเป็น 1024 8 หรือ 4096 8 ตัวเลขชุดแรก (1024,4096) จะบอกถึงจำนวนตำแหน่งที่ใช้เก็บข้อมูลภายใน ส่วนตัวเลขชุดที่สอง (8,8) จะเป็นตัวบอกถึงจำนวนบิตของข้อมูลแบบขนานที่อ่านจาก   ROM 

ในการที่จะกำหนดจำนวนเส้นของบัสแอดเดรสที่ใช้กับ  ROM  จะสามารถรู้ได้จาก

2 ยกกำลัง x = จำนวนแอดเดรสที่อ้างถึง

เช่น   2 ยกกำลัง x =  4096  จะได้  x = 12  ซึ่งก็คือ  จำนวนเส้นบัสแอดเดรสนั่นเอง

 การอ่านข้อมูลจาก ROM 
 CPU จะส่งแอดเดรสไปให้ ROM แอดเดรสดังกล่าวจะปรากฏ เป็นแอดเดรสที่ต้องการอ่าน ใน ROMโดยข้อมูลจะถูกอ่านออกมาเพียงครั้งละ 1 ไบต์เท่านั้น
 CPU จะต้องให้ช่วงเวลาของการส่งแอดเดรสยาวนานพอประมาณ (Wait State)  เรียกว่า Access Time โดยปกติแล้วจะต้องใช้เวลาประมาณ 100 - 300 นาโนวินาที ซึ่งขึ้นอยู่กับชนิดของ  ROM ซึ่ง ROM จะใช้เวลานั้นในการถอดรหัสแอดเดรส ของข้อมูลที่ต้องการจะอ่านออกมาที่เอาต์พุตของ ROM ซึ่งถ้าใช้เวลาเร็วกว่านั้น ROM จะตอบสนองไม่ทัน
 CPU จะส่งสัญญาณไปทำการเลือก ROM เรียกว่า สัญญาณ  CS (Chip Select) เพื่อบอกว่าต้องการเลือก ROM ซึ่งเป็นการส่งสัญญาณเพื่อยืนยันการเลือกชิปนั่นเอง
 ข้อมูลจะผ่านออกทางขาข้อมูลชั่วขณะจังหวะการเลือกชิป และเมื่อขาการเลือกชิปไม่แอคทีฟ ข้อมูลก็จะเข้าสู่ภาวะที่มีอิมพีแดนซ์สูง