ทำไมความทรงจำที่ไม่ลบเลือนส่วนใหญ่จึงมีลอจิก 1 เป็นสถานะเริ่มต้น


14

ฉันใช้หน่วยความจำแบบไม่ลบเลือนเช่นหน่วยความจำ EEPROM และ FLASH ในแอปพลิเคชันแบบฝังตัวและฉันพบเสมอว่าตำแหน่งบิตหน่วยความจำที่ไม่ได้ใช้ (EEPROM / FLASH) ถูกตั้งค่าเป็น1ค่าเริ่มต้นเสมอ ทำไมเรื่องนี้จึงถูกนำมาใช้แทน0?

ยกตัวอย่างเช่นที่อยู่พูดอยู่ 0 (ไบต์แรกของหน่วยความจำ) หากไม่ได้เขียนไปโดยผู้ใช้ร้านค้าเสมอและไม่0xff 0x00ทำไมคนที่สร้างชิปหน่วยความจำจึงเป็นเช่นนั้น? ฉันแน่ใจว่าการรักษาตำแหน่งหน่วยความจำเริ่มต้นตามที่0xffจะให้ประโยชน์หรือสิ่งที่สำคัญสำหรับผู้ผลิต

อะไรคือเหตุผลที่อยู่เบื้องหลังโครงสร้างนี้ในชิปหน่วยความจำ

คำตอบ:


20

ฉันจะพูดคุยเกี่ยวกับการเขียนโปรแกรมหน่วยความจำแฟลช แต่วัสดุจำนวนมากจะคล้ายกับ EEPROMs (ROM ที่สามารถลบด้วยระบบไฟฟ้าได้) เนื่องจากหน่วยความจำแฟลชมาจาก EEPROM ในช่วงกลางปี ​​1980 ตามที่อธิบายไว้ด้านล่างจากสถานะทางกายภาพสถานะเริ่มต้นคือ 1 แต่ที่สำคัญกว่าฉันจะอธิบายว่าทำไมมีเป็นรัฐเริ่มต้น - คุณสามารถไม่เพียง แต่พลโปรแกรมด้านบนของสิ่งที่เป็นโปรแกรมที่มีอยู่แล้วจากครั้งสุดท้าย

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

อย่างไรก็ตามการเขียนโปรแกรมทำให้ซับซ้อนขึ้นเล็กน้อย สถานะเริ่มต้นสำหรับแฟลช NOR และหน่วยความจำที่ไม่ลบเลือนอื่น ๆ เช่นแฟลช NAND, EEPROM และแม้แต่ EPROM เป็นตรรกะ 1 คุณไม่สามารถตั้งโปรแกรม 1 ลงในอุปกรณ์เหล่านี้ได้คุณสามารถตั้งโปรแกรมเฉพาะ 0 เท่านั้น ตัวอย่างเช่นถ้าคุณมีไบต์ที่มี 0x0123 และคุณต้องการเปลี่ยนเป็น 0x3210 คุณไม่สามารถทำได้โดยตรงเช่นเขียนทับไบต์ใน RAM

แต่จะต้องลบบิตในหน่วยความจำแทนซึ่งทำให้พวกมันอยู่ในสถานะ 1 ที่เป็นค่าเริ่มต้น สิ่งนี้สามารถทำได้ในบล็อกไม่ใช่คำพูด ใน Microchip PIC32 ซึ่งฉันได้ทำงานด้วยเมื่อเร็ว ๆ นี้ขนาดบล็อกขั้นต่ำที่สามารถลบได้คือ 4096 ไบต์ ดังนั้นหากคุณต้องการเปลี่ยนเพียงหนึ่งคำ (32 บิต) คุณจะต้องอ่านหน่วยความจำ 4K ลบบล็อกจากนั้นเขียนหน่วยความจำ 4K กลับสู่แฟลช แต่รวมถึงค่า 32 บิตใหม่ตามต้องการ การลบนี้อาจใช้เวลาสักครู่ - ส่วนที่ดีของวินาที

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

ป้อนคำอธิบายรูปภาพที่นี่

ลบการดำเนินการ สถานะเริ่มต้นของเซลล์หน่วยความจำแฟลช (เซลล์แฟลช NOR ระดับเดียว) คือ 1 เพราะประตูลอยไม่มีค่าใช้จ่ายติดลบ การลบเซลล์หน่วยความจำแฟลช (รีเซ็ตเป็น 1) สามารถทำได้โดยการใช้แรงดันไฟฟ้าข้ามแหล่งจ่ายและประตูควบคุม (บรรทัดคำ) แรงดันไฟฟ้าสามารถอยู่ในช่วง -9V ถึง -12V และยังใช้ประมาณ 6V กับแหล่งที่มา อิเล็กตรอนในประตูลอยจะถูกดึงออกมาและโอนไปยังแหล่งที่มาโดยควอนตัมอุโมงค์ กล่าวอีกนัยหนึ่งอุโมงค์อิเล็กตรอนจากประตูเลื่อนไปยังแหล่งกำเนิดและสารตั้งต้น

เนื่องจากการลบจะใช้แรงดันไฟฟ้าสูงดังนั้นการลบในบล็อกจึงต้องใช้พื้นที่ตายน้อยกว่า ดังนั้นแรงดันไฟฟ้าสามารถใช้ได้กับทรานซิสเตอร์ทั้งแถวในแต่ละครั้งเท่านั้น

สำหรับการเขียนเซลล์แฟลช NOR สามารถตั้งโปรแกรมหรือตั้งค่าเป็น 0 ตามขั้นตอนต่อไปนี้ ในขณะที่เขียนแรงดันไฟฟ้าสูงประมาณ 12V จะถูกนำไปใช้กับประตูควบคุม (บรรทัดคำ) หากแรงดันสูงประมาณ 7V ถูกนำไปใช้กับบิต Line (เทอร์มินัลระบาย), 0 จะถูกเก็บไว้ในเซลล์ ตอนนี้ช่องเปิดแล้วดังนั้นอิเล็กตรอนสามารถไหลจากแหล่งที่มาถึงท่อระบายน้ำ กระแสไฟฟ้าที่ระบายออกมานั้นสูงพอที่จะทำให้อิเล็กตรอนพลังงานสูงบางส่วนกระโดดผ่านชั้นฉนวนไปยังประตูลอยผ่านกระบวนการที่เรียกว่าการฉีดอิเล็กตรอนร้อน

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

อายุการใช้งานของหน่วยความจำแบบไม่ลบเลือนนั้นวัดจากการลบรอบ ข้อเสียของ NOR คือจำนวนรอบการลบประมาณ 1/10 ของหน่วยความจำ NAND PIC32 หลายรุ่นอนุญาตให้อัปเดตหน่วยความจำแฟลชได้ 1,000 ครั้งลดน้อยลงจากนั้นลบ 100,000 รอบการทำงานปกติสำหรับ EEPROM

ดังนั้นจึงไม่สำคัญนักหากผู้ออกแบบทำให้สถานะเริ่มต้นคือ 1 หรือ 0 (พวกเขาเลือกค่าที่อนุญาตให้ใช้งานได้ง่ายที่สุด) สิ่งสำคัญคือต้องลบบล็อกของแฟลชก่อน (ซึ่งต้องใช้เวลา) จากนั้นทำการ reprogram บล็อกทั้งหมด (แม้ว่าจะมีการเปลี่ยนแปลงคำเดียว (ซึ่งต้องใช้แรมจำนวนมาก)

การลบบล็อกนี้ของอุปกรณ์จะกลับไปที่ EPROMs แรก (ROM ที่ลบข้อมูลได้แบบโปรแกรมได้) ซึ่งดำเนินการ EEPROMs รหัสถูกตั้งโปรแกรมไว้ในชิป (เช่น 16KB 27128) และวางไว้ในซ็อกเก็ต ชิปเหล่านี้มีหน้าต่างเล็ก ๆ น้อย ๆ อยู่ด้านบนซึ่งอนุญาตให้แสงส่องไปที่แม่พิมพ์ เมื่อต้องเปลี่ยนโปรแกรมชิปจะถูกนำไปวางไว้ในยางลบ UV เป็นเวลา 20 นาทีหรือมากกว่านั้นซึ่งจะลบชิปทั้งหมด จากนั้นชิปจะถูกโปรแกรมด้วยโปรแกรมใหม่

EEPROM บางตัวต้องการการลบบล็อกหน่วยความจำก่อนการโปรแกรม อื่น ๆ อนุญาตให้เขียนไบต์ได้ครั้งละหนึ่งตัว (ตัวควบคุม EEPROM จะลบไบต์ก่อนแล้วจึงโปรแกรม)


2
นี่เป็นภาพรวมที่ยอดเยี่ยมของวิธีการเข้าถึงความทรงจำที่ไม่ลบเลือน แต่จริงๆแล้วมันไม่ได้ระบุว่าทำไมสถานะที่ถูกลบคือ '1' และไม่ใช่ '0'
akohlsmith

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

1
ฉันไม่เห็นด้วยคำถามดูเหมือนค่อนข้างเฉพาะเกี่ยวกับสาเหตุที่รัฐถูกลบเป็น 'ชุด' แทนที่จะ 'ชัดเจน' - อย่างไรก็ตามฉันรักคำตอบของคุณและ +1 จากฉัน (ไม่ใช่ว่าฉันเป็นใครทุกคนเป็นคนแปลกหน้าอินเทอร์เน็ตแบบสุ่มที่ชอบ คำตอบของคุณ)
akohlsmith

1
@akohlsmith ฉันเห็นด้วยกับคุณว่าโดยทั่วไปแล้วรัฐกำหนดมักเป็น 1 และในความเป็นจริงแล้วเซลล์แต่ละตัวทำงานอย่างไร จะต้องใช้ฮาร์ดแวร์เพิ่มเติม (ไม่มาก) เพื่อย้อนกลับและไม่จำเป็นต้องทำเช่นนั้น: 1 เนื่องจากค่าเริ่มต้นนั้นใช้ได้
tcrosley

นี่คือคำตอบที่ดี แต่ฉันคิดว่ามันจะง่ายต่อการเข้าใจถ้าพูดว่า: คุณไม่สามารถโปรแกรม 1 ลงในอุปกรณ์เหล่านี้คุณสามารถโปรแกรม 0 เท่านั้น หากคุณต้องการโปรแกรม 1 คุณจะต้องลบอุปกรณ์และคืนค่าบล็อกทั้งหมดกลับสู่สถานะ 1 เริ่มต้นจากนั้นโปรแกรม 0 ตามความจำเป็น . ยกตัวอย่างเช่นในการเขียนโปรแกรม0101เพื่อ1010คุณต้องทำในลำดับนี้: 0101-> (ลบ) -> 1111-> (โปรแกรม 0) 1010-> หรือเป็นหลักมันหมายถึงการเขียนที่ 1 และการเขียนของ 0 จะทำที่ละเอียดที่แตกต่างกัน
smwikipedia

4

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

มีเป็นเหตุผลที่ดีที่จะไม่เพิ่มอินเวอร์เตอร์พิเศษ - มันจะเพิ่มความล่าช้าการขยายพันธุ์จากหน่วยความจำที่ซีพียู ในไมโครคอนโทรลเลอร์คอนโทรลเลอร์แฟลชไปยัง CPU datapath มีผลกระทบอย่างมากต่อประสิทธิภาพของระบบโดยรวมเนื่องจากเป็นตัวกำหนดระยะเวลาในการเรียกคำสั่งใหม่

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

เวอร์ชั่นสั้น: นักฟิสิกส์เซมิคอนดักเตอร์และนักออกแบบวงจรอะนาล็อกไม่สนเรื่องสัญชาติญาณดิจิตอลของคุณ :-)


1

ฉันไม่แน่ใจว่าคุณอ้างจากอะไร แต่ไปที่หน้า Wikipediaสำหรับหน่วยความจำแฟลชดูเหมือนว่าเป็นผลมาจากฮาร์ดแวร์ที่อยู่เบื้องหลังหน่วยความจำแฟลช:

เซลล์แฟลช NOR ระดับเดียวในสถานะเริ่มต้นของมันเทียบเท่ากับค่าไบนารี "1" เนื่องจากกระแสจะไหลผ่านช่องทางภายใต้การประยุกต์ใช้แรงดันไฟฟ้าที่เหมาะสมกับประตูควบคุมเพื่อให้แรงดันบิตไลน์ถูกดึงลง "

หากคุณใช้แฟลชประเภทอื่นเช่น NAND สถานะเริ่มต้นจะเป็น 1 เนื่องจากเอาต์พุตของ NAND คือ 1 เมื่อเอาต์พุตของทรานซิสเตอร์ใด ๆ ต่ำกว่าแรงดันไฟฟ้าเกณฑ์สูง / ต่ำ

ขออภัยถ้าฉันพลาดเรือทั้งหมดในสิ่งที่คุณขอฉันก็ค่อนข้างใหม่สำหรับสิ่งนี้ทั้งหมด


1
แต่เนื่องจากมีวงจรระหว่างเซลล์และพินเช่นเดียวกับการสร้างแบบลอจิกส่วนใหญ่ที่อาจจะดำเนินการโดยปริยายจำนวนมากทำไมสถานะลบจึงจำเป็นต้องใช้เป็น "0" และไม่ใช่ "1"?
Chris Stratton

ฉันไม่ค่อยเข้าใจคำถามของคุณ - สถานะการลบไม่ได้ใช้เป็น "1" หรือไม่ ฉันถามด้วยความเคารพนี้ (ใต้ "EEPROM หน่วยความจำการทำงานของเซลล์และลักษณะ")
llee94

สถานะทางไฟฟ้าของเซลล์เองนั้นสอดคล้องกับสถานะลอจิคัลของอินเทอร์เฟซภายนอกที่ดูเหมือนว่าจะมีข้อ จำกัด เนื่องจากอาจมีความหลากหลายที่อาจทำให้เกิดการสลับองค์ประกอบของวงจรระหว่างทั้งสอง
Chris Stratton

1
@ChrisStratton ฉันเชื่อว่า Ilee94 กล่าวว่าสถานะการลบจริง ๆ แล้วเป็น 1 แต่มันก็เป็นเรื่องที่ไม่แน่นอน - ถ้าคุณใส่อินเวอร์เตอร์ลงในสายข้อมูลมันจะเป็นไปตามที่คุณอธิบาย 1 เนื่องจากสถานะเริ่มต้นนั้นต้องการฮาร์ดแวร์น้อยกว่าเล็กน้อย
tcrosley

หรือฮาร์ดแวร์อีกเล็กน้อย- มันขึ้นอยู่กับว่ามีจำนวนคี่หรือคู่ของการสลับองค์ประกอบของวงจรระหว่างเซลล์และเอาท์พุทโดยปริยาย
Chris Stratton

1

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

มันได้กลายเป็นรูปแบบเพราะการเพิ่มอินเวอร์เตอร์ในบางจุดในเส้นทางข้อมูลวันนี้จะเป็นไปได้

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

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