설계 흐름은 다음 그림과 같으며 넷리스트를 얻기 위한 세 가지 주요 단계로 구성됩니다.
1) RTL 설계
Verilog를 사용한 RTL 설계는 설계를 코딩하기 위한 참조로 마이크로 아키텍처 문서를 사용합니다. 엔지니어는 블록 및 최상위 수준에서 RTL 설계를 완료하는 데 더 많은 시간을 할애해야 합니다. RTL 설계자는 RTL 설계를 구현하는 동안 권장 설계 및 코딩 지침을 사용합니다. 효율적인 RTL 설계는 구현 주기 동안 항상 중요한 역할을 합니다. 이 동안 디자이너는 합성 가능한 Verilog 구성을 사용하여 블록 수준 및 최상위 기능을 설명합니다.
2) 기능 검증
합성 가능한 Verilog 구조를 사용하여 효율적인 RTL 설계를 완료한 후 시뮬레이터를 사용하여 설계 기능을 검증해야 합니다. 의도는 디자인의 기능적 정확성을 확인하는 것입니다. 기능적 시뮬레이션은 어떠한 지연도 고려하지 않고 이 단계에서 설계의 기능성을 검증하는 것이 주 목적입니다. 그러나 업계의 일반적인 관행은 테스트 벤치를 사용하여 기능을 검증하는 것입니다. 간단히 말해서 테스트벤치는 테스트 중인 디자인으로 신호를 구동하고 테스트 중인 디자인의 출력을 모니터링하는 데 사용되는 드라이버를 사용합니다. 현재 시나리오에서는 검증 흐름의 자동화와 새로운 검증 방법론이 발전했으며 전용 리소스를 사용하여 더 짧은 시간 동안 복잡한 설계 기능을 검증하는 데 사용됩니다. 검증 팀의 역할은 예상 출력과 실제 출력 간의 기능적 불일치를 테스트하는 것입니다. 시뮬레이션 중에 기능 불일치가 발견되면 합성 단계로 이동하기 전에 해결해야 합니다.
3) 합성
디자인의 기능적 요구 사항이 충족되면 다음 단계는 디자인 합성입니다. 합성 도구는 RTL 디자인, 디자인 제약 조건 및 라이브러리를 입력으로 사용하며 목표는 게이트 수준 넷리스트를 출력으로 얻는 것입니다. 합성은 설계 및 최적화 제약 조건이 충족될 때까지 반복적인 프로세스입니다. 주요 최적화 제약 조건은 면적, 속도 및 전력입니다. 설계 및 최적화 제약 조건이 충족되지 않으면 합성 도구를 사용하여 RTL 또는 아키텍처 조정 후 설계 최적화를 수행해야 합니다. 다시 말하지만, 최적화 후 제약 조건이 충족되지 않으면 RTL 또는 마이크로 아키텍처를 조정해야 합니다. 합성 도구는 게이트 레벨 넷리스트로 면적, 속도 및 전력 보고서를 생성하는 데에도 사용됩니다.
4) 물리적 설계
물리적 설계 단계에는 설계의 평면도, 전력 계획, 클록 트리 합성, 위치 및 경로, 레이아웃 후 검증, 정적 타이밍 분석이 포함되며 최종 결과는 모든 종류의 ASIC 설계에 대한 GDSII입니다.
하드웨어 기술 언어로서의 Verilog
Verilog는 IEEE 1364로 표준화되었으며 디지털 전자 회로를 설명하는 데 사용됩니다. Verilog는 주로 하드웨어 설명 언어로 사용되며 검증 중에도 널리 사용됩니다. Verilog는 1983-1984년에 게이트웨이 설계 자동화에서 Prabhu Goel, Phil Moorby, Chi-Lai Huang 및 Douglas Warmke에 의해 만들어졌습니다. 이 언어는 합성 가능 및 합성 불가 구성을 지원하며 디지털 설계의 설계 및 검증에 유용합니다. Verilog IEEE 표준은 Verilog-95(IEEE 1364-1995), Verilog-2001(IEEE 1364-2001) 및 Verilog-2005(IEEE 1364-2005)입니다.
Verilog에 대해 이해해야 할 몇 가지 중요한 사항은 다음과 같습니다.
1. Verilog는 대소문자를 구분하는 언어이므로 RTL과 테스트벤치를 코딩할 때 소문자를 사용하는 것이 좋습니다.
2. 한 줄 주석의 경우 //를 사용할 수 있습니다.
예) // 프로세서용 Verilog RTL
3. 블록 주석의 경우 /* … */를 사용할 수 있습니다.
예) /* 블록 주석
assignment 1;
assignment 2; */
4. Verilog는 입출력 포트의 선언을 지원하며, 키워드는 각각 입출력입니다.
5. Verilog는 양방향 포트 선언을 지원하며 선언할 키워드는 inout입니다.
6. Verilog에는 wire 및 reg와 같은 주요 네트 데이터 유형이 있습니다.
7. Verilog는 동시 구성과 순차 구성을 포함합니다.
8. Verilog에는 각각 설계 및 검증 중에 유용한 합성 및 합성 불가 구조가 포함됩니다.
9. Verilog는 디자인을 모델링하는 데 유용한 다양한 산술, 논리, 비트 단위, 쉬프트, 등식 및 조건부 연산자를 지원합니다.
10. Verilog는 다양한 시간 제약, blonking과 non-blocking 할당, 에지 감지 구성 및 기타 다양한 지연 구성을 지원합니다.
11. Verilog에는 기능, 작업, 루프 및 기타 컴파일러 지시문이 포함되어 있습니다.
Verilog 코드 구조 템플릿
// Verilog code starts with keyword module
// Each assignment ends with semicolon (;)
module < name of module > ( input <port_name>, input <size> <port_name>,
output <port_name>, output<size> <port_name>);
// list all the temporary variables and net
reg <temporary_variable_name>;
wire <temporary_variable_name>;
// for example for multibit variable declaration
reg <size> <variable_names>;
wire <size> <port_names>;
// continuous assignments. Use wire as net type
assign <Expression>;
assign <expression>
always @ *
begin
<group of blocking assignments>
end
always @(posedge clk)
begin
<group of non-blocking assignments>
end
endmodule
// 주석 줄을 나타냅니다.
< module_name > 은 모듈의 이름입니다. 선언할 때 의미 있는 이름을 사용하는 것이 좋습니다.
< port_name >은 input 또는 output 또는 inout 포트의 이름입니다.
<size>는 입력 포트, 출력 포트 또는 네트
wire와 reg는 네트 유형이며 wire는 데이터를 보유하지 않으며 연속 할당에 사용됩니다. reg는 데이터를 보유하는 데 사용되며 절차 할당에 사용됩니다.
<net_name>은 선언된 net의 이름이며
always와 assign은 키워드로 디자인 기능을 설명하는 데 사용됩니다.
assign 문은 연속 할당이며 동시에 실행됩니다.
always 블록은 절차적 블록이며 always 블록 내의 모든 명령문이 begin ...end 내에 있으면 순차적으로 실행됩니다. 여러 개의 always procedural 블록이 동시에 실행됩니다.
endmodule은 키워드이며 디자인 모듈의 끝을 나타냅니다!
모든 Verilog 코드는 'module' 키워드로 시작하고 'endmodule'로 끝납니다. 모듈은 포트 선언, 네트 선언 및 디자인 기능으로 구성됩니다.
'프로그래밍 언어 > Verilog' 카테고리의 다른 글
[Verilog 학습] Verilog에서 동시 기능 모델링 (0) | 2022.03.28 |
---|---|
[Verilog 학습] Verilog 모듈 구조 (0) | 2022.03.27 |
[Verilog 학습] Verilog 구성 (0) | 2022.03.26 |
[Verilog 학습] 디자인 설명 (0) | 2022.03.25 |
[Verilog 학습] 개념 (0) | 2022.03.21 |