자일링스 툴에는 익숙하지 않지만 Altera 툴에 익숙하므로 툴라에 대해 알려 드리겠습니다. 자일링스와 다른 사람들은 그렇게 다르지 않아야한다.
Verilog
가장 먼저해야 할 일은 Verilog를 배우는 것 입니다. Verilog (및 다소 유사한 VHDL)가 처음으로 시뮬레이션 언어로 설계 되었기 때문에 많은 구조 (예 : #5
"5 단계 대기", 일반적으로 나노초)를 의미합니다. 따라서 Verilog 코드를 합성 할 수 있도록 ( 즉, FPGA의 비트 스트림으로 컴파일 할 수 있도록) 명심해야 할 많은 제한 사항이 있습니다 .
그러나 가장 큰 충격은 Verilog (및 VHDL)로 작성하는 것이 시스템에서 예상되는 동작 이며 컴파일러가 설명에서 적절한 논리를 유추 한다는 것입니다. 조심하지 않으면 이것으로부터 많은 버그를 얻을 수 있습니다.
예를 들어 D 플립 플롭은 다음과 같습니다.
always @(posedge RESET or posedge CLK)
begin
if(RESET)
Q <= 1'b0;
else if(CLK_ENA)
Q <= D;
end
이것은 DFF의 작동 방식을 설명하며, 컴파일러는 DFF를 분석하고 DFF를 원하는지 파악해야합니다. 는 @(...)
착신되는 감도에서 코드 블록의 재평가를 트리거 신호의리스트이다; 따라서이 블록 Q
에서 RESET
또는 상승 에지가있는 경우에만 변경됩니다 CLK
(액티브 하이 리셋의 경우). 당신은 (어떤없이 모든 오른쪽 측 변수를 포함해야 감도 목록에 뭔가 잊어 버린 경우 posedge
또는 negedge
조합 논리 블록에 대한 수정을) 호출 오류보다는 필요에 따라 컴파일러는 래치를 합성한다. Verilog는 원래 구현 세부 사항을 숨기고 (필요하지 않은) 시뮬레이션 언어 였기 때문에 미친 짓입니다. VHDL은 동일하지만 훨씬 더 장황합니다.
마지막으로 몇 년 전에 SystemVerilog 라는 Verilog의 새 버전 이 출시되어 합성 가능한 코드 작성이 훨씬 쉬워 졌습니다. Xilinx ISE와 Altera Quartus II가 모두 지원하므로 가능하면이 언어를 배우십시오. 주요 문제는 좋은 참고 자료가 전혀 없다는 것입니다.
DFF의 SystemVerilog 버전은 몇 가지 작은 것을 정리합니다.
always_ff @(posedge RESET, posedge CLK)
begin
if(RESET)
Q <= '0;
else if(CLK_ENA)
Q <= D;
end
감도 목록의 신호는 쉼표로 구분됩니다. 거기서 일할 수 없었기 때문에 or
혼란 스러웠 기 때문 and
입니다. 또한 1'b0
(단일 0
비트)를 '0
( 하나의 비트 에 확장되는 심볼 0
이 할당되는 것에 따라 필요합니다. 매개 변수화 된 모듈에서는 훨씬 더 유연합니다)로 대체하십시오 . 마지막으로, 콘텐츠를 플립 플롭으로 합성해야하는 대체 always
로직 (래치, 래치 및 플립 플롭에 사용될 수 있음 )을 주목하십시오 always_ff
. always_comb
입력에서 블록까지의 감도를 계산하기 때문에 감도 목록을 제거하는 것도 있습니다 .
Altera의 설계 소프트웨어는 Quartus II라고하며 Web Edition을 찾고 있습니다 . (Subscription 에디션은 다소 비싸며 가장 빠르거나 가장 최근의 FPGA 모델에만 필요합니다.)
슬픈 부분은 그 주제에 관한 좋은 책을 찾지 못했다는 것입니다. 내가 배운 것은 합성 가능한 것과 그렇지 않은 것, 예제 코드를 잘 설명하지 못하는 Verilog 서적과 같은 여러 출처에서 여러 가지 것들을 하나로 묶어 얻은 것입니다. Quartus II에는 D 플립 플롭에서 상태 머신에 이르기까지 몇 가지 일반적인 구조에 대한 템플릿 코드를 삽입하는 "템플릿 삽입"명령이 있습니다.
데모 하드웨어
Verilog에서 프로세서를 구현 한 후에는 프로세서를 빌드해야합니다. 당분간 Quartus가 칩을 선택하게하십시오 (패밀리를 선택해야합니다. Cyclone IV를 추천합니다)와 핀아웃. 일단 울리면 필요한 칩의 양을 알 수 있습니다. 얼마나 많은 로직 요소, 플립 플롭, RAM 비트 등을 사용했는지 알려줍니다. 그 중 50 %를 넘지 않아야합니다. 만약 그렇다면, 컴파일러가 선택한 칩을보고 최소한 핀이 많은 다음으로 큰 (논리 요소로) 칩을 수동으로 선택하고 50 % 미만으로 활용 될 때까지 반복하십시오.
그런 다음 최소한 마지막으로 만든 칩만큼 큰 칩이있는 데모 보드를 구입하십시오. 주변 장치 및 / 또는 I / O 커넥터가 필요한지 확인하십시오. 빠진 하드웨어를 제공하기 위해 확장 커넥터에 꽂는 도터 카드를 만드는 것은 드문 일이 아닙니다.
하드웨어를 선택 했으므로 실제 핀아웃을 파악하고 핀 플래너를 사용하여 올바른 신호를 올바른 핀에 배치하십시오. 데모 보드에는 데모 보드의 어떤 장치 또는 커넥터 핀에 어떤 핀이 연결되어 있는지 알려주는 사용 설명서가 있습니다.
핀 배치가 설정되면 원하는 핀을 사용하도록 다시 빌드하십시오. 시스템 클럭과 같은 일부 신호에는 전용 입력 핀이 필요하므로 내부 PLL로 바로 라우팅됩니다.
프로그래머를 사용하여 디자인을 FPGA로 직접 다운로드하십시오 (이전에 언급 한 시프트 레지스터). 이제 익숙한 edit-compile-run 디버깅주기에 있습니다. 작동 할 때까지 치십시오.
작동하면 프로그래머가 코드를 온보드 구성 장치 에 다운로드 하여 프로그램 전원을 켜고 실행할 수 있습니다.
꽤 길어서 도움이 되었기를 바랍니다. 배울 것이 많다 . 절차 적 언어에서 기능적 언어로 이동하는 것과 같이 새로운 프로그래밍 패러다임을 배우는 것만큼이나 새로운 프로그래밍 언어를 배우는 것과는 다릅니다. Verilog는 동시 언어입니다. 대부분의 코드는 항상 실행됩니다.
행운을 빕니다!