FPGA를 잘못 프로그래밍하여 실제로 중단시킬 수 있습니까?


26

FPGA를 잘못 프로그래밍하여 실제로 중단 시킬 수 있습니까 ?

저는 정말 소프트웨어 녀석입니다. 소프트웨어가 잘못되면 모든 종류의 중요한 데이터를 파괴 할 수 있으며 전체 시스템을 손상시킬 수도 있습니다. 그러나 컴퓨터를 프로그래밍하는 것만으로 실제로 컴퓨터를 손상 시키는 것은 매우 어렵 습니다.

(Halt-and-Catch-Fire 명령에 대한 소문이 있거나, 시스템 펌웨어를 다시 플래시하여 마더 보드를 브릭 킹하거나, 잘못된 값을 그래픽 카드에 프로그래밍하여 모니터를 튀길 수 있습니다. 그러나이 모든 것이 정확히 : 소문. 그리고 오래 쓸모없는 하드웨어에 관한 것. 나쁜 프로그래밍으로 현대의 컴퓨터 장비를 깨뜨리는 것은 정말로 어렵다.)

FPGA를 사용하면 개별 회로를 함께 연결합니다 (적어도 명목상). 실수로 인해 물리적 손상이 발생할 수 있다는 것은 완전히 그럴듯 해 보입니다.

예를 들어, 두 개의 출력이 서로 연결되도록 요청하는 VHDL을 작성할 수 있습니다. 그들이 다른 논리 레벨을 출력하면 아마도 무언가를 볶을 것이라고 생각합니다. (나는 당신의 합성 도구가 이것을하지 않기 위해 비명을 지길 바랄 것입니다 ... 그러나 그러한 도구가 실제로 그 수준의 오류 검사를 구현하는지는 모르겠습니다.)

합성 툴에서 실수로 잘못된 FPGA 모델을 선택하는 것이 가능하기 때문에 완전히 다른 모델을위한 비트 스트림으로 칩을 프로그래밍하려고 시도하게됩니다. 나는 그것이 어떻게 될지 모르지만 그것이 "나쁜"것으로 생각됩니다.

그 문제 때문에 FPGA 칩을 나머지 회로에 잘못 연결할 수 있습니다. 예를 들어, 핀 번호를 엉망으로 만들면 보드 자체가 FPGA 자체도 구동하려고하는 I / O 핀을 구동하려고 할 수 있습니다. I / O 핀에는 일반적으로 이러한 실수에 대한 "보호"기능이 있습니까? 아니면 칩이 튀겨 질까요?


3
일부 FPGA에는 외부 메모리에서 암호화되고 서명 된 비트 스트림 만로드 할 수있는 보안 기능이 있습니다. 키는 FPGA에 보관되며 한 번만 프로그래밍 할 수 있습니다. 우연히 이러한 기능을 활성화하거나 키를 느슨하게하면 본질적으로 "차단 된"FPGA입니다.
filo

2
"하지만 컴퓨터를 프로그래밍하는 것만으로 실제로 컴퓨터를 손상시키는 것은 정말 어렵습니다." 그렇게 생각해? 옛날 옛적에 하드 디스크 헤드를 제어하는 ​​것은 드라이버의 몫이었습니다. 즉, 바이러스가 하드 디스크에서 생일을 축하 할 수 있습니다. BIOS는 팬을 제어하여 과열로 손상 될 수 있습니다 (일부 보호 기능이 내장되어 있지만 충분히 빨리 가열하면 저장할 수 없습니다). BIOS는 20V를 CPU에 넣으려고 할 수도 있습니다. 어떤 소프트웨어를 사용하고 있는지 아는 경우 소프트웨어로 인해 컴퓨터가 손상 될 수 있습니다.
UKMonkey



2
@UKMonkey 시스템 설정 방법에 따라 충분한 노력으로 모든 CPU를 녹일 수 있다고 확신합니다. 순전히 수동적으로 냉각되지 않은 대부분의 컴퓨터에는 냉각 시스템을 제어 할 수있는 방법이 있습니다. BIOS를 통해 또 다른 방어선 인 열 조절을 비활성화 할 수 있습니다. 이는 커널에서 프로그래밍 방식으로 수행 할 수 있음을 의미합니다. 이 특정한 경우에는 의도적이어야하지만 매우 확실합니다.
자금 모니카의 소송

답변:


31

합성 툴에서 실수로 잘못된 FPGA 모델을 선택하는 것이 가능하기 때문에 완전히 다른 모델을위한 비트 스트림으로 칩을 프로그래밍하려고 시도하게됩니다.

일반적으로 프로그래밍 소프트웨어는 부품 번호로 프로그래밍 할 부품을 쿼리하고 다른 FPGA 모델을위한 비트 스트림으로 프로그래밍을 거부합니다.

정확하게 정확한 길이가 아닌 비트 스트림으로 프로그래밍 된 경우 부품 자체도 일반적으로 시동을 거부합니다 (다른 칩의 비트 스트림이 동일한 길이 인 경우는 매우 드 common니다).

FPGA 칩을 나머지 회로에 잘못 연결할 수 있습니다. 예를 들어, 핀 번호를 엉망으로 만들면 보드 자체가 FPGA 자체도 구동하려고하는 I / O 핀을 구동하려고 할 수 있습니다.

이것은 잘못된 프로그래밍으로 FPGA를 손상시킬 가능성이 가장 높습니다.

또 다른 방법은 리소스를 많이 사용하는 디자인을 프로그래밍하여 고주파수 (고전력 소비)로 실행 한 다음 적절한 방열판없이 FPGA에서 실행하는 것입니다.

I / O 핀에는 일반적으로 이러한 실수에 대한 "보호"기능이 있습니까? 아니면 칩이 튀겨 질까요?

출력 핀은 몇 초 또는 몇 분 동안 단락 상태에서 "종종"유지됩니다. 그러나 아무것도 보장되지 않습니다.


1
흥미 롭군 FPGA가 능동 냉각을 필요로하는 것이 일반적입니까? 아, 그 자체가 전체 질문이라고 생각합니다. (그리고 답은 15 파운드 또는 15,000 파운드 FPGA를 구입했는지 여부와 같은 많은 것들에 달려 있다고 생각합니다.)
MathematicalOrchid

4
@MathematicalOrchid, 반드시 능동 냉각은 아니지만 방열판과 강제 공기가 일반적입니다. FPGA 공급 업체는 일반적으로 매우 복잡한 스프레드 시트를 제공하여 (부품, 설계, 클럭 주파수 등을 기준으로) 방열판의 크기와 팬의 크기를 결정합니다.
광자

3
@MathematicalOrchid 저는 250 MHz까지 구형파를 측정하기위한 주파수 카운터로 FPGA를 사용했습니다. 220MHz 클럭을 측정 할 때 냉각 이 필요 했지만 적절한 냉각을 설정하는 대신 5 초 이상 측정하지 않도록했습니다. 220Whz에서 5W를 소비했으며 IC는 약 2cm ^ 2입니다. 매우 빨리 뜨거워졌습니다.
해리 스벤손

@HarrySvensson 주파수 카운터에서 열이 많이 나는 것 같습니다.
user253751

1
@HarrySvensson 5 와트가 걸린다는 것은 여전히 ​​미쳤다.
user253751

20

몇 가지 예외가 있지만, 툴은 일반적으로 실제 실리콘 프리미티브에 대한 액세스를 제공하지 않으므로, 최종 사용자 엔지니어가 툴을 실수로 발견하지 않는 한 전기적으로 유효하지 않은 디자인 *을 SRAM 기반 FPGA에로드하기가 어렵습니다. 곤충.

플래시 기반 FPGA는 유효하지 않은 특정로드에 의해 재 프로그래밍 능력이 손상 될 수 있습니다. OTP FPGA 는 절대 변경할 수 없기 때문에 유효한 구성로드로 인해 암시 적으로 "손상"됩니다 .

궁극적으로 귀하가 요청한 것과 가장 근접한 것은 HCF 사례에 견딜 수없는 응력을 발생 시키는 구성입니다 . 전력 소비는 클럭 속도와 활용 된 로직의 볼륨 활동에 의해 직접적으로 결정되므로 툴을 속여 칩의 최대 플립 플롭을 최대 클럭으로 전환 할 수있는 방법을 모색 할 수 있다면 (방법이 있습니다 ...) 일반적인 사용을 위해 대부분의 냉각 시스템을 능가하는 매우 효과적인 히터. 그렇다면 요리하기 전에 무언가를 안전하게 닫으면 문제가됩니다. 물론 도구에는 전력 추정 모델이 있으며, 제공되는 클럭 신호에 대해 거짓말을하지 않으면 합리적으로 예측할 수 있습니다.

(* 도구에 누워서 물리적으로 파괴적이지는 않지만 여전히 놀라운 놀라운 버그가 아닌 전기적 문제가 있습니다. 당신이 말했거나 단순히 불안정한 것과 다른 시계를 먹이면, 동기식 블록 RAM 셀의 주소 설정 타이밍을 위반하고이를 단락시키고 내용을 손상시키는 선을 따라 무언가를 수행 할 수 있습니다. 예를 들어 디자인에서 ROM으로 지정된 내용이 실제로 런타임에 변경되는 것을 볼 수 있습니다 하는 읽기 ) 나쁜 시계와 함께. 그러나 나는 이것이 물리적으로 파괴 믿지 않는다


2
인버터와 함께 모든 플롭을 연결하여 많은 열을 발생시킬 수 있습니다. 클럭이 너무 뜨거워지면 FPGA를 보호하는 보호 회로가있는 FPGA가 있습니까? 클록 트리는 종종 제어 범위를 벗어납니다.
벤 잭슨

@ BenJackson : 클럭 트리가 다소 유선으로 연결되어 있지 않습니까? 각 로직 요소는 몇 가지 다른 트리 중에서 선택할 수 있습니까? 클록 소스 자체는 제어 범위를 벗어날 수 있지만 클록 트리 버퍼가 너무 뜨거워지면 간단히 끌 수 있습니다. 또는 그들이 전원을 끌 수 있다고 생각합니다.
Michael

5

가장 가능성이 높은 것은 이미 구동되고있는 핀을 구동하여 GPIO의 정격 전류를 위반하는 것입니다. 일부 FPGA에는 설정 가능한 전류 제한 또는 변경 가능한 출력 드라이버가 있으므로 포트 맵을 올바르게 수행하지 않으면 도움이 될 수 있습니다. 스와핑 핀과 같은 실수를 해결하는 데 몇 시간이 걸릴 수 있으므로 프로그래밍하기 전에 어쨌든 포트 목록을 다시 확인해야합니다. 실수를 미리 극복하고 펌웨어의 의도를 정확히 아는 것이 가장 좋습니다. (오류를 발견하는 스릴을 좋아하지 않는 한)

HDL 자체는 일반적으로 두 개의 출력을 동일한 와이어에 연결할 수 없으며 합성을 중단하고 코드가있는 경우 실수를 수정하게합니다.

문제를 일으킬 수있는 한 곳은 양방향 포트이지만 전류 제한 저항이 있어야합니다.


두 개의 출력을 동일한 와이어에 연결 ”다시 : 합성 툴이 동시에 두 가지를 모두 활성화하지 않겠다고 약속하면 두 개의 3 상태 버퍼의 출력을 함께 연결할 수 없습니까? 버퍼의 "활성화"를 유도하는 논리가 매우 복잡하더라도 툴이 약속을 확인할 수 있습니까?
Edgar Bonet

@ EdgarBonet yu 이런 식으로 충돌을 일으킬 수 있습니다. 논리적으로 출력이 상호 배타적 일 수 있도록 강제 할 필요는 없습니다. 일부 로직 (FPGA 외부의 상태 풀 로직 및 / 또는 하드웨어 / 소프트웨어를 포함 할 수 있음)으로 인해 충돌하는 두 개의 OE가 활성화되는 경우, OE의 논리는이를 방지하기 위해 명시 적으로 코딩되었습니다.
로드니

@EdgarBonet 가능하지만, 일반적으로 드라이버 / 트랜시버가 필요하고 GPIO에있는 3 개의 상태 와이어는 FPGA 외부에 있습니다. FPGA에서 threestate로 설계 한 적이 없으며 FPGA의 하드웨어가 세 가지 state를 지원한다고 생각하지 않습니다. 두 개의 버퍼를 동시에 켤 수 있습니다. 물리적 디자인으로 인해 버너가 발생하지 않아야합니다.
전압 스파이크

4

마이크로 컨트롤러와 마찬가지로 각 핀에서 최대 전류 (또는 그 이상)를 가져와 IO 뱅크 당 최대 총 전류를 항상 초과 할 수 있습니다. FPGA가 이러한 상황에 대해 내장 된 보호 기능을 제공하지 않으면 손상이 발생할 수 있습니다.

또 다른 가능성은 주기적으로 메타 안정되어 있거나 FPGA 패브릭이 처리하도록 설계된 것 (몇 GHz)보다 훨씬 높은 주파수에서 진동하는 조합 루프를 만드는 것입니다. 칩 전체의 열 보호가 시작되기 전에 물리적으로 손상 될 수있는 매우 국지적 인 과열이 발생할 수 있습니다. 즉, 그러한 보호가 있다고 가정하면 : 과열이 종료되지 않으면 간단히 전력이 너무 많이 소모되는 회로를 구성하고 냉각이 불충분 한 상태로 작동 시키십시오.

동적 재구성은 정적 구성의 경우 개발 도구에 의해 시행 될 수있는 유효하지 않은 내부 프리미티브 구성에 대한 보호 문제를 해결할 수도 있습니다. 예를 들어 최대 내부 주파수를 초과하는 방식으로 PLL을 구성하거나 동일한 상호 연결 회선을 한 번에 두 개의 소스로 공급하거나 고전압 IO 뱅크의 핀이 LVDS와 같은 저전압 트랜시버를 사용하도록 할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.