FPGA 프로그래밍, 어디서부터 시작


29

저는 소프트웨어 개발자 (C, C ++, objective-c, java ...)이며 FPGA 프로그래밍에 관심이 있습니다. 이제 질문이 간단 해 보일 수도 있지만 지금 당장 멈춰서 도와주십시오. 우리 회사는 기술에 익숙해지고 격자 제품에 대한 작업을 요청했습니다. 내 질문은 어디서부터 시작해야합니까? 몇 가지 연구를 한 결과 VHDL과 Verilog 중에서 선택할 수 있음을 발견 한 적이 없었습니다. 어디서부터 시작해야하는지 제안 할 수있는 전문가가 있습니까? 언어를 배우고 하드웨어 구성 요소에 대해 배우고 격자 제품을 배우십시오. 아니면 Lattice 제품으로 직접 시작하십시오 (프로그래밍 방법이 FPGA 공급 업체마다 매우 다르다는 것을 알았습니까?


3
C / C ++ 프로그래밍에 익숙하다면 VHDL 대신 Verilog 를 선택해야합니다 . Verilog의 구문은 C와 유사합니다.
m.Alin

1
@ m.Alin 방금 시작했고 C처럼 보이는 것이 중요하지 않다는 것을 알았습니다. 왜냐하면 가장 어려운 부분은 구문이 아니라 개념의 차이점이라는 것을 알았 기 때문입니다. 시맨틱은 C의 시맨틱과도 비슷하지 않습니다.
Edgar Klerks

C / C ++ / Java / etc에서 찾은 가장 큰 변화. 작성하는 모듈 (번역 단위와 동일하다고 가정)은 순전히 이벤트 중심입니다. C에서 기본 원칙으로 단순화 된 컴파일 된 프로그램은 코드의 1 행, 2 행, 3, 4 등을 수행합니다. Verilog / VHDL에는 그러한 것이 없습니다. 그림을 그리는 것과 같습니다. :이 입력 핀은 module1_input에 연결되고 module1_output은 module1_input이 높아질 때마다 상태를 토글합니다. 대신에 if(condition)그것입니다 when(condition). 대부분의 FPGA IDE에는 마치 종이에 그리는 것처럼 그래픽 디자인 입력이 있습니다.
CharlieHanson 2016 년

답변:


40

디지털 디자인은 소프트웨어 개발과 공통점이 많지 않습니다 (Verilog 구문이 C 언어와 약간 비슷하지만 모양 만 있다는 점을 제외하고). 따라서 이러한 유형의 질문에 적절하게 대답하기는 매우 어렵습니다. 그러나 소프트웨어 개발에서 하드웨어 디자인에 이르는 길을 걷는 사람으로서 나는 그것을 보여줄 것입니다. 나 자신을 되돌아 보면, 내가 지금 알고있는 것을 알고 있다면 다음에 나 자신에게 조언했을 것이다.

처음부터 시작

소프트웨어 개발에 관한 모든 것을 잊어 버리십시오. 특히 프로그래밍 언어. 이러한 원칙은 디지털 디자인에는 적용되지 않습니다. CPU를 설계 한 사람은 어셈블러 나 C로 프로그래밍하기가 쉽지만 어셈블러 프로그래머는 CPU를 설계 할 수 없습니다.

학습 과정에서 소프트웨어의 기존 지식에 쉬운 문제로 보이는 것을 해결하지 마십시오. 고전적인 예 중 하나는 "for loop"입니다. 예를 들어, verilog에 for 루프를 작성할 수 있지만 다른 목적으로 사용됩니다. 주로 코드 생성에 사용됩니다. 소프트웨어 개발자가 보는 것처럼 for 루프 일 수도 있지만 시뮬레이션 이외의 것은 좋지 않습니다 (즉, FPGA를 프로그래밍 할 수는 없습니다).

따라서 과제를 해결하려는 모든 작업에 대해 어떻게해야하는지 생각하지 말고 대신 연구를 수행하십시오. 책, 예제를 확인하고보다 숙련 된 사람들에게 문의하십시오.

하드웨어 및 HDL 언어 배우기

가장 널리 사용되는 HDL 언어는 Verilog 및 VHDL입니다. AHDL (Altera HDL)과 같은 공급 업체별 항목도 있습니다. 이러한 언어는 하드웨어 구성 요소를 설명하는 데 사용되므로, 비슷한 방식으로 다른 구문으로 같은 것을 표현하는 데 거의 모두 사용됩니다.

어떤 사람들은 C처럼 보이기 때문에 Verilog를 배우는 것이 좋습니다. 예, 문법은 C와 Ada의 혼합이지만 소프트웨어 개발자가 쉽게 기댈 수는 없습니다. 사실, 나는 Verilog에 C를 쓰려는 유혹이 있기 때문에 더 나빠질 수도 있다고 생각합니다. 그것은 매우 나쁜 시간을 보내는 좋은 요리법입니다.

이를 염두에두고 VHDL을 응시하는 것이 좋습니다. 위의 내용을 고려하면 Verilog도 괜찮습니다.

명심해야 할 중요한 사항은 해당 언어로 표현하는 내용을 이해해야한다는 것입니다. 어떤 종류의 하드웨어가 "설명"되고 어떻게 작동하는지.

따라서 전자 제품에 관한 책과 HDL 칩 디자인 (블루 북이라고도 함)과 같은 좋은 책을 직접 읽어 보는 것이 좋습니다 .

시뮬레이터 받기

하드웨어에서 작업을 시작하고 공급 업체별 기능 등을 사용하기 전에 시뮬레이터를 구입하십시오. Verilog로 시작해서 GTK Wave와 함께 Icarus Verilog를 사용했습니다. 그것들은 무료 오픈 소스 프로젝트입니다. 책에서 볼 수있는 예제를 실행하고 회로를 맛 보도록 설계하여 연습하십시오.

개발 보드 받기

앞으로 나아갈 때 개발 보드를 얻으십시오. 고용주가 격자와 함께 가고 싶다는 것을 알고 있다면 격자 보드를 얻으십시오.

프로그래밍 방법은 매우 비슷하지만 세부 사항이 다릅니다. 예를 들어, 도구, 옵션, 인터페이스가 다릅니다. 일반적으로 한 공급 업체에 대한 경험이 있으면 전환하기가 어렵지 않습니다. 그러나이 추가 학습 곡선을 피하고 싶을 것입니다.

또한 보드에 사용할 계획이거나 확장 가능한 구성 요소가 포함되어 있는지 확인합니다. 예를 들어, 라우터와 같은 네트워크 장치를 설계하려면 보드에 Ethernet PHY가 있거나 HSMC 커넥터 등을 통해 보드를 확장 할 수 있는지 확인하십시오.

보드는 일반적으로 좋은 참조, 사용자 안내서 및 디자인 예제와 함께 제공됩니다. 그들을 연구하십시오.

책 읽기

책을 읽어야합니다. 제 경우에는 디지털 디자인을 아는 친구가 없었고이 사이트는 한 가지 간단한 점 때문에 그다지 도움이되지 않았습니다. 내 질문을 표현하는 방법조차 몰랐습니다. 내가 생각해 낼 수있는 것은 "음, 얘들 아, dcfifo가 있는데 클럭 도메인 교차 문제, 그게 무엇이고 왜 내 디자인이 작동하지 않는가?"

나는 개인적으로 다음과 같이 시작했다.

FPGA 공급 업체에는 모범 사례가 포함 된 많은 요리 책이 있습니다. 참조 디자인과 함께 연구하십시오. 여기서 예를 들면, 알테라이다.

더 구체적인 질문으로 돌아와

책을 살펴보고 디자인을 시뮬레이션하고 개발 보드에서 일부 LED를 깜박이면 많은 질문이있을 것입니다. 여기에서 질문하기 전에이 책의 다음 페이지 나 온라인 (예 : 격자 관련 포럼)에 답변이 없는지 확인하십시오.


이 자세한 답변을 주셔서 감사합니다. 어떻게 진행할 수 있는지 알게되었습니다. 불행히도 나는 나를 도울 수있는 친구가 없습니다. 그러나 당신은 방금 많은 문제에서 나를 구해 주었고 다시 한번 감사드립니다 !!!!
Anila

5
훌륭한 답변입니다.
Assad Ebrahim

학교로 돌아가서 VHDL을 배우기 전에 C ++을 배웠습니다. 그것을 이해하는 데 많은 어려움을 겪었지만 모든 것이 클릭되는 시점은 모든 것이 실시간으로 동시에 병렬로 발생한다는 것을 이해했을 때입니다 (병렬, 비동기 노드가 아님). 소프트웨어 개발은 ​​순차적 인 흐름을 따르지만 HDL에서는 모든 것이 한 번에 (대부분) 발생합니다. SW에서 "x = 1; y = 2; y = x; x = y"와 같은 것이 있으면, 마지막 y는 1이되고 HDL에서는 x와 y가 모두 동시에 서로 변경하십시오. 이것을 기억하면 삶이 더 쉬울 수 있습니다.
PGT

@PGT 단일 코어 또는 다중 코어에서 실행되는 여러 프로세스에서 'y'에 액세스 할 수있는 경우 y 값이 1이 아닌 다른 값이 될 것으로 예상하여 약한 프로세스에 권한을 부여 할 수 있습니다.
Adithya

1

대안으로 Xilinx의 Vivado HLS 및 Altera의 OpenCL 솔루션과 같은 고급 합성 기술을 사용할 수 있습니다. 아마도 이것은 소프트웨어 배경을 고려하여 하드웨어 설명 언어를 배우는 곡선을 완화시킬 것입니다.


-1

먼저 디지털 디자인 기초를 배웁니다. Mealy / Moore 기계, 조합 논리, 진리표, karnaugh지도 등. 회로도 (7- 세그먼트 카운터)에서 간단한 디자인을 만든 다음 HDL을 배우십시오. 유럽에서는 미국 Verilog에서 VHDL이 사용됩니다. 마지막으로 타이밍이 중요합니다. 신호에는 구성 요소의 순간 및 온도에 따른 지연이 있으며 모든 신호에는 다른 지연이 있습니다.

읽을 책 : http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

완벽한 언어 구문 지식은 나중에 디지털 디자인과 문제를 이해합니다.


유럽에서는 미국 Verilog에서 VHDL이 사용됩니다. 전혀 사실이 아닙니다 ...
Matt Young

사실, 나는 Verilog를 배웠고 영국에서 왔어요. 또한 uni (영국에서도)에서 한 모듈 중 하나에서 가르치는 언어이기도합니다.
Tom Carpenter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.