คุณสามารถทำลาย FPGA ด้วยการตั้งโปรแกรมผิดหรือไม่


26

คุณสามารถทำลาย FPGA ด้วยการเขียนโปรแกรมอย่างไม่ถูกต้องได้หรือไม่

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

(มีคำร่ำลือไม่รู้จบเกี่ยวกับคำสั่ง Halt-And-Catch-Fire หรือความสามารถในการ reflash เฟิร์มแวร์ของระบบให้กับแผงวงจรหลักของเมนบอร์ดหรือการตั้งค่าที่ไม่ถูกต้องในกราฟิกการ์ดเพื่อทอดจอของคุณ : ข่าวลือและฮาร์ดแวร์ที่ล้าสมัยมานานดูเหมือนจะยากจริง ๆ ที่จะทำลายอุปกรณ์คอมพิวเตอร์ที่ทันสมัย

ด้วย FPGA คุณ (อย่างน้อยก็ในนาม) เดินสายแต่ละวงจรเข้าด้วยกัน ดูเหมือนเป็นไปได้อย่างสมบูรณ์ว่าความเสียหายทางกายภาพอาจเกิดขึ้นในกรณีที่มีข้อผิดพลาด

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

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

สำหรับเรื่องนั้นคุณสามารถเชื่อมต่อชิป FPGA กับส่วนที่เหลือของวงจรได้อย่างไม่ถูกต้อง ตัวอย่างเช่นหากคุณทำผิดพลาดหมายเลขพินคุณอาจท้ายด้วยบอร์ดที่พยายามขับหมุด I / O ที่ FPGA เองก็พยายามจะขับด้วยเช่นกัน หมุด I / O มักจะมี "การป้องกัน" กับข้อผิดพลาดดังกล่าวหรือไม่? หรือชิปจะเพิ่งทอด?


3
FPGA บางตัวมีคุณสมบัติความปลอดภัยที่อนุญาตให้โหลดบิตเข้ารหัสและลงนามจากหน่วยความจำภายนอกเท่านั้น ปุ่มถูกเก็บไว้ใน FPGA และตั้งโปรแกรมได้เพียงครั้งเดียว หากคุณเปิดใช้งานคุณสมบัติดังกล่าวโดยไม่ตั้งใจหรือปล่อยกุญแจที่คุณมี "FPGA" แบบเป็น "
filo

2
“ แต่มันเป็นเรื่องยากมากที่จะสร้างความเสียหายทางคอมพิวเตอร์โดยการตั้งโปรแกรม คุณคิดเหมือนกันใช่ไหม? กาลครั้งหนึ่งมันขึ้นอยู่กับไดรเวอร์ที่จะควบคุมหัวฮาร์ดดิสก์ - หมายถึงไวรัสสามารถเล่นสุขสันต์วันเกิดบนฮาร์ดดิสก์ของคุณ BIOS ควบคุมพัดลม - ทำให้เกิดความเสียหายเนื่องจากความร้อนสูงเกินไป (อาจมีการป้องกันในตัว แต่ถ้าคุณให้ความร้อนเร็วพอจะไม่สามารถบันทึกได้) ไบออสสามารถตัดสินใจที่จะลองใส่ 20V ลงในซีพียูของคุณได้ ... ซอฟต์แวร์อาจเป็นสาเหตุให้เกิดความเสียหายกับคอมพิวเตอร์ได้หากคุณรู้ว่าซอฟต์แวร์ตัวไหนที่ต้องใช้
UKMonkey

1
@JoL เกี่ยวข้อง :) retrocomputing.stackexchange.com/questions/6614/…
UKMonkey


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

คำตอบ:


31

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

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

ส่วนที่ตัวเองมักจะปฏิเสธที่จะเริ่มต้นถ้าโปรแกรมที่มีบิตสตรีมที่ไม่ถูกต้องความยาวที่แน่นอน

คุณสามารถเชื่อมต่อชิป FPGA กับส่วนที่เหลือของวงจรไม่ถูกต้อง ตัวอย่างเช่นหากคุณทำผิดพลาดหมายเลขพินคุณอาจท้ายด้วยบอร์ดที่พยายามขับหมุด I / O ที่ FPGA เองก็พยายามจะขับด้วยเช่นกัน

นี่เป็นวิธีที่น่าจะสร้างความเสียหายให้กับ FPGA ด้วยการเขียนโปรแกรมผิด

อีกวิธีหนึ่งคือการออกแบบโปรแกรมที่เน้นการใช้ทรัพยากรอย่างมากและเรียกใช้ด้วยความถี่สูง (เพื่อให้ใช้พลังงานสูง) จากนั้นเรียกใช้งานบน FPGA โดยไม่ต้องใช้แผ่นระบายความร้อนที่เพียงพอ

หมุด I / O มักจะมี "การป้องกัน" กับข้อผิดพลาดดังกล่าวหรือไม่? หรือชิปจะเพิ่งทอด?

ขาออกจะ "มักจะ" อยู่รอดในสภาวะการลัดวงจรไม่กี่วินาทีหรือแม้กระทั่งนาที แต่ไม่มีอะไรรับประกันได้


1
น่าสนใจ เป็นปกติหรือไม่ที่ FPGA ต้องการการระบายความร้อนที่แอคทีฟ โอ้ฉันคิดว่านั่นเป็นคำถามทั้งหมดในสิทธิของตนเอง (และฉันคิดว่าคำตอบนั้นขึ้นอยู่กับหลาย ๆ อย่างเช่นคุณซื้อ FPGA 15 ปอนด์หรือ 15,000 ปอนด์)
MathematicalOrchid

4
@ MathematicalOrchid ไม่จำเป็นต้องมีการระบายความร้อน แต่ heatsinks และ air force นั้นค่อนข้างธรรมดา ผู้ขาย FPGA มักจะมีสเปรดชีตที่ซับซ้อนมากเพื่อช่วยในการพิจารณา (ขึ้นอยู่กับชิ้นส่วนการออกแบบความถี่สัญญาณนาฬิกา ฯลฯ ) ว่าฮีตซิงก์มีขนาดใหญ่แค่ไหนและต้องการพัดลมขนาดไหน
โฟตอน

3
@ MathematicalOrchid ฉันใช้ FPGA เป็นตัวนับความถี่ในการวัดคลื่นสี่เหลี่ยมได้สูงถึง 250 MHz มันต้องการการระบายความร้อนเมื่อฉันวัดนาฬิกา 220 MHz แต่แทนที่จะตั้งค่าการระบายความร้อนที่เหมาะสมฉันเพิ่งแน่ใจว่าจะไม่วัดนานกว่า 5 วินาที ใช้พลังงาน 5 W @ 220Mhz และ IC ประมาณ 2 ซม. ^ 2 มันร้อนมากเร็วมาก
Harry Svensson

@HarrySvensson ดูเหมือนว่าจะมีจำนวนความร้อนที่บ้าคลั่งสำหรับตัวนับความถี่
user253751

1
@HarrySvensson มันยังคงบ้าที่ควรใช้เวลา 5 วัตต์
253751

20

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

FPGAs ที่ใช้ Flash อาจเป็นไปได้ว่าโปรแกรมที่ได้รับความเสียหายอาจเกิดจากการโหลดที่ไม่ถูกต้อง OTP FPGAs โดยปริยายคือ "เสียหาย" โดยแม้โหลดการกำหนดค่าที่ถูกต้องเพราะมันไม่สามารถเปลี่ยนแปลงได้

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

(* มีคลาสที่น่าสนใจของปัญหาไฟฟ้าที่ไม่มีข้อบกพร่องที่คุณสามารถทำให้เกิดได้โดยการโกหกเครื่องมือที่ไม่จำเป็นต้องทำลายร่างกาย แต่ยังคงน่าแปลกใจถ้าคุณป้อนนาฬิกาแตกต่างจากที่คุณบอกว่าคุณจะหรือไม่เสถียร คุณสามารถละเมิดเวลาการตั้งค่าที่อยู่ในเซลล์ RAM บล็อกแบบซิงโครนัสและทำบางสิ่งบางอย่างตามสายของการลัดวงจรและทำให้เนื้อหาของพวกเขาเสียหายดังนั้นคุณสามารถดูเนื้อหาของบางสิ่งที่กำหนด ROM ในการออกแบบจริงได้ที่ เพื่ออ่านมันด้วยนาฬิกาที่ไม่ดี. แต่ผมไม่เชื่อว่านี่คือการทำลายล้างทางร่างกาย)


2
คุณสามารถโยงฟลอพทุกอันพร้อมกับอินเวอร์เตอร์ในระหว่างและสร้างความร้อนจำนวนมาก FPGA ใด ๆ มีวงจรป้องกันเพื่อปรับนาฬิกาหรือไม่ถ้ามันร้อนเกินไป? ต้นไม้นาฬิกามักอยู่นอกเหนือการควบคุม
เบ็คแจ็คสัน

@BenJackson: ต้นไม้สายนาฬิกามีสายแข็งมากหรือน้อยโดยที่แต่ละองค์ประกอบของลอจิกไม่สามารถเลือกระหว่างต้นไม้ที่แตกต่างกันได้หรือไม่? แหล่งสัญญาณนาฬิกาสามารถอยู่นอกการควบคุมของพวกเขา แต่พวกเขาสามารถปิดบัฟเฟอร์ทรีนาฬิกาได้หากมันร้อนเกินไป หรือฉันเดาว่าพวกเขาสามารถปิดการจัดหาได้
ไมเคิล

5

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

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

ที่เดียวที่อาจทำให้เกิดปัญหาได้คือพอร์ตสองทิศทาง แต่คุณควรมีตัวต้านทาน จำกัด ในปัจจุบัน


ตอบ“ เชื่อมต่อสองเอาต์พุตเข้ากับสายเดิม ”: คุณไม่สามารถเชื่อมต่อเอาท์พุทของบัฟเฟอร์สามสถานะสองตัวเข้าด้วยกันได้หรือไม่หากคุณสัญญาว่าเครื่องมือสังเคราะห์จะไม่เปิดใช้งานทั้งสองอย่างในเวลาเดียวกัน? เครื่องมือตรวจสอบว่าคุณสามารถรักษาสัญญาของคุณไว้ได้หรือไม่แม้ว่าตรรกะในการขับเคลื่อน "เปิดใช้งาน" ของบัฟเฟอร์นั้นซับซ้อนมาก
Edgar Bonet

@EdgarBonet yup คุณสามารถทำให้เกิดความขัดแย้งด้วยวิธีนี้ ไม่มีข้อกำหนดที่จะบังคับให้ส่งออกอย่างมีเหตุผลช่วยให้เป็นเอกสิทธิ์เฉพาะบุคคลหากตรรกะบางอย่าง (ซึ่งอาจรวมถึงตรรกะ statefull และ / หรือฮาร์ดแวร์ / ซอฟต์แวร์ภายนอก FPGA) ทำให้ OE ที่ขัดแย้งกันสองรายการทำงานอยู่ไม่มีอะไรจะหยุดจนกว่า ตรรกะสำหรับ OE ได้รับการเข้ารหัสอย่างชัดเจนเพื่อป้องกัน
ร็อดนีย์

@EdgarBonet คุณสามารถทำได้ แต่โดยทั่วไปแล้วสายไฟเหล่านี้จะเชื่อมต่อกับ FPGA เนื่องจากคุณต้องการไดร์เวอร์ / ตัวรับส่งสัญญาณและสามารถพบได้ใน GPIO ฉันไม่เคยออกแบบด้วย FPGA มาก่อนและฉันไม่คิดว่าฮาร์ดแวร์ใน FPGA จะรองรับสามสถานะ คุณสามารถเปิดบัฟเฟอร์สองตัวพร้อมกันการออกแบบทางกายภาพควรป้องกันไม่ให้คุณเผาไหม้ขึ้น
Spike แรงดัน

4

เช่นเดียวกับไมโครคอนโทรลเลอร์คุณสามารถเกินกระแสรวมสูงสุดต่อธนาคาร IO ได้เสมอโดยการวาดกระแสสูงสุด (หรือมากกว่า) จากแต่ละขา เว้นแต่ว่า FPGA จะมีการป้องกันในตัวจากสถานการณ์ดังกล่าวอาจส่งผลให้เกิดความเสียหาย

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

การกำหนดค่าใหม่แบบไดนามิกยังสามารถหลีกเลี่ยงการป้องกันการกำหนดค่าที่ไม่ถูกต้องของ primitives ภายในซึ่งอาจถูกบังคับใช้โดยเครื่องมือการพัฒนาในกรณีของการกำหนดค่าแบบคงที่ ตัวอย่างเช่นคุณสามารถกำหนดค่า PLL ในวิธีที่เกินความถี่สูงสุดภายในหรือป้อนสายเชื่อมต่อเดียวกันโดยสองแหล่งพร้อมกันหรือบังคับขาจากธนาคาร IO แรงดันสูงให้ใช้ตัวรับส่งสัญญาณแรงดันไฟฟ้าต่ำเช่น LVDS .

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