หน่วยความจำประเภท 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 ถูกโปรแกรมแล้ว ข้อมูลภายใน จะไม่สามารถเปลี่ยนแปลงได้อีก เนื่องจากฟิวส์ที่ขาดไปแล้วไม่สามารถต่อได้ หน่วยความจำชนิดนี้ จะใช้ในงานที่ใช้ความเร็วสูง ซึ่งความเร็วสูงกว่า หน่วยความจำที่โปรแกรมได้ชนิดอื่นๆ
ส่วนประกอบพื้นฐานของ 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 ซึ่งเป็นการส่งสัญญาณเพื่อยืนยันการเลือกชิปนั่นเอง