VHDL ที่สามารถสร้างความเสียหาย FPGA


22

ฉันอ่านที่รหัส VHDL ที่ไม่ดีสามารถนำไปสู่ความเสียหาย FPGA

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


2
สถานการณ์เดียวที่ฉันนึกได้คือการออกแบบที่มี FFs จำนวนมากที่มีโอเวอร์คล็อกเพื่อให้ความร้อนแก่ FPGA
Claudio Avi Chami

มันสามารถรวมอยู่ในวงจรที่ออกแบบมาไม่ดีซึ่งจะไหลเวียนของกระแสรอบ ๆ สิ่งที่เผาไหม้หากไม่ได้ตั้งโปรแกรมอย่างเหมาะสม
ยูจีน Sh.

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

คำตอบ:


25

การเพิ่มคำตอบของ @ Anonymous มีการออกแบบที่คุณสามารถสร้างซึ่งสามารถสร้างความเสียหายให้กับโครงสร้างของ FPGA ได้

สำหรับผู้เริ่มต้นหากคุณสร้างการออกแบบที่มีขนาดใหญ่มากประกอบด้วยการลงทะเบียนจำนวนมาก (เช่น 70% ของ FPGA) ทั้งหมดที่มีสัญญาณนาฬิกาใกล้กับความถี่สูงสุดของ FPGA มันเป็นไปได้ที่จะให้ความร้อนซิลิคอนอย่างมาก หากไม่มีการระบายความร้อนที่เพียงพออาจทำให้เกิดความเสียหายทางกายภาพได้ เราสูญเสีย FPGA $ 13k เพราะมันร้อนเกินไปเนื่องจาก dev-kit มีระบบระบายความร้อนที่แย่มาก

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


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

7
ขอบคุณฉันมี 2-3 บอร์ดตอนนี้ไร้ประโยชน์เพราะความผิดพลาดในการออกแบบกับสปาร์ตัน 6 กับพวกเขา ฉันจะลองทำดู: P
AntoineLev

นอกจากนี้ยังเป็นไปได้ที่จะโหลดบิตสตรีมที่ป้องกันการโหลดบิตสตรีมอื่น ๆ หรืออย่างน้อยก็ทำให้ยากที่จะทำ
Vladimir Cravero

8

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

ฉันนึกถึงสองประเภท:

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

4
หัวข้อของความเสียหายทางกายภาพอาจเป็นที่มาของคำพูดของ OP ในฐานะนักพัฒนาซอฟต์แวร์ฉันได้รับแจ้งว่ากฎทั่วไปคือ "ซอฟต์แวร์" ไม่ควรทำอันตรายทางกายภาพกับอุปกรณ์ในขณะที่ "เฟิร์มแวร์" อาจทำให้เกิดความเสียหายเช่นการเชื่อมต่อนักดำน้ำสองคนเข้าด้วยกัน
Cort Ammon - Reinstate Monica

2
@CortAmmon "เช่นการเชื่อมต่อนักดำน้ำสองตัวเข้าหากัน" - อะไรคือสิ่งที่สวิตช์ลมเชื่อมต่อท่อ?
user253751

1
@immibis คุณได้รับฉัน! กฎที่เกิดขึ้นจริงคือ "ไม่ต้องพึ่งพาซอฟแวร์ / squishyware ในหัวของเพื่อนของคุณในขณะที่หายใจเพื่อนแทนมักจะมีบริษัท ที่เข้าใจในการควบคุมของคุณ." ;-)
Cort Ammon - Reinstate Monica

3

การกำหนดบล็อกของอินพุตพินผิดเนื่องจากเอาท์พุทอาจทำได้หากมีสิ่งใดที่ทำให้พวกมันแข็งพอ

ฉันไม่รู้ว่าการกำหนดค่าพินสำหรับ LVDS หรือหนึ่งในมาตรฐาน LVCMOS ในขณะที่ธนาคาร IO ใช้พลังงานจากแรงดันไฟฟ้าสูงเกินไป (พลังงาน 3.3V ที่มีมาตรฐาน 1.8V IO หรือตรงกันข้ามกับอินพุต) มัน?

เห็นได้ชัดว่าปัญหาเรื่องความร้อนอาจเป็นไปได้โดยการทำอะไรที่โง่ ๆ


มาตรฐาน I / O ที่กำหนดไว้เป็นข้อ จำกัด ในการออกแบบนั้นใช้สำหรับการคำนวณเวลา หากธนาคาร I / O เป็นธนาคาร 3.3 V และขับเคลื่อนโดย 3.3V ไม่มีอะไรเกิดขึ้นถ้าคุณเลือกมาตรฐาน 1.8 V
Paebbels

@Paebbels ไม่แน่ใจว่าเครื่องมือใดที่คุณใช้ แต่โดยปกติเมื่อคุณตั้งค่ามาตรฐาน I / O มันจะควบคุมแรงดันไฟฟ้าของตำแหน่ง I / O นั้น หากพินอินพุต FPGA ถูกตั้งค่าไว้ที่แรงดันไฟฟ้าที่ต่ำกว่าสิ่งที่อุปกรณ์ภายนอกขับเข้าไปในพินนั้นแสดงว่าอินพุต FPGA อาจเสียหายได้
Ciano

@Ciano ที่ไม่ถูกต้อง แรงดันพินขึ้นอยู่กับแรงดันไฟฟ้าของธนาคาร I / O ที่ไม่ได้อยู่ในข้อ จำกัด
Paebbels

1

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

คุณสามารถเลือกโหมดการทำงานที่ผิดพลาดสำหรับดั้งเดิมของ FPGA เช่น PLL หรือตัวรับส่งสัญญาณ

การกำหนดค่าใหม่แบบไดนามิกเป็นเหมือนรหัสการแก้ไขด้วยตนเองในซอฟต์แวร์

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