Verilog 디자인 설명
실제 시나리오에서 Verilog는 세 가지 종류의 코딩 설명으로 분류됩니다. 코딩 설명의 다른 스타일은 구조적, 행동적 및 RTL 디자인입니다.
1) 구조 설계
이름에서 알 수 있듯이 구조 설계는 설계의 전체 구조를 설명하는 데 사용됩니다. 주요 의도는 net 연결을 사용하여 게이트 또는 블록 수준 설계의 형태로 논리를 설명하는 것입니다. 구조 설계는 주로 서로 다른 작은 복잡성 디지털 기능 블록의 인스턴스화입니다. 보통의 복잡한 로직을 구현하기 위해 기본적으로 작은 모듈을 연결하는 설계입니다.
다음 예제는 'half_adder'를 유추하는 구조적 코드 스타일을 설명합니다.
module half_adder( input wire A, B, output wire S,C);
// design funconality
xor_gate U1 ( .A, .B, .S);
and_gate U2 ( .A, .B, .C);
endmodule
module xor_gate( input wire A, B, output wire S);
// design funconality
assign S= A ^ B;
endmodule
module and_gate( input wire A, B, output wire C);
// design funconality
assign C= A & B;
endmodule
half_adder에 대한 설명은 xor_gate와 and_gate라는 다른 두 모듈의 인스턴스를 사용합니다. 개략도는 다음 그림과 같습니다.
2) 행동 디자인(Behavior Design)
이름 자체는 코딩 스타일의 특성이 추가를 수행하는 동작을 설명하는 것임을 나타냅니다. Verilog 코드의 동작 스타일에서 기능은 의도한 디자인 기능을 얻기 위해 입력과 출력 간의 관계를 사용하여 코딩됩니다. 디자인은 입력과 출력이 있는 블랙박스라고 가정합니다. 디자이너의 주요 의도는 필요한 입력 집합에 따라 출력의 기능을 매핑하는 것입니다.
module half_adder( input wire A, B, output reg S,C);
// design functionality to generate sum (S) output
always@*
begin
if ( A==B)
S= 0;
else
S=1;
end
// design functionality to generate carry(C) output
always@*
begin
if ( A==1 && B==1)
C= 1;
else
C=0;
end
endmodule
half_adder에 대한 설명은 여러 절차 블록 내에서 if-else 구성을 사용합니다. 여러 절차 블록의 동시 실행으로 인해 비교기 AND 게이트를 유추합니다.
3) 합성 디자인(Synthesizable Design)
Verilog를 사용하여 디자인의 기능을 설명하는 실제 환경에서는 항상 합성 가능한 구조를 사용합니다. RTL 코드 스타일은 합성 가능한 Verilog 구성을 사용하는 기능에 대한 상위 수준 설명입니다. 많은 경우 RTL 코딩 스타일은 구조적 또는 행동적 모델과 유사할 수 있습니다. 디자이너의 주요 의도는 합성 가능한 Verilog 구성을 사용하여 의도한 논리를 추론하는 것입니다. 합성 중에 게이트 수준 구조를 유추하는 모든 Verilog 코드는 RTL 디자인으로 취급할 수 있습니다.
module half_adder( input wire A, B, output reg S,C);
// design functionality
always@*
begin
S= A ^ B;
C= A & B;
end
endmodule
몇 가지 중요한 Verilog 용어
• Verilog는 하드웨어를 설명하는 데 사용되는 소프트웨어 언어와 다릅니다. Verilog는 시간 구성 및 지연을 지원합니다.
• Verilog는 명령문의 동시(병렬) 실행과 명령문의 순차 실행을 지원합니다.
• Verilog는 blocking(=) 할당과 non-blocking 할당(<=)을 지원합니다.
블로킹 할당은 조합 논리를 설명하는 데 사용되며 논블로킹 할당은 순차 논리를 설명하는 데 사용됩니다.
• Verilog는 입력, 출력 및 양방향(inout) 포트 선언을 지원합니다.
• Verilog는 상수 및 매개변수 정의를 지원합니다. Verilog는 파일 처리를 지원합니다.
• Verilog는 논리값 논리 '0', 논리값 '1', 하이임피던스 'z' 및 알 수 없는 'X'의 4가지 값을 지원합니다.
• Verilog에는 'always'와 'initial'이라는 procedural 블록이 있습니다. 'always' 키워드가 있는 procedural 블록은 자유 실행 프로세스를 나타내며 항상 실행되고 'initial' 키워드가 있는 procedural 블록은 블록이 한 번만 실행됨을 나타냅니다. 두 절차 블록 모두 시뮬레이터 시간 '0'에서 실행됩니다.
• Verilog는 합성 가능한 구조와 합성할 수 없는 구조를 모두 지원합니다.
• 합성 가능한 구조는 RTL 설계 중에 사용됩니다.
• 합성 불가능한 구조는 RTL 검증 중에 사용됩니다.
• Verilog는 재귀적 사용을 위한 작업 및 기능 사용을 지원합니다.
• Verilog는 'C' 언어로 작성된 기능에 Verilog의 제어를 전송하기 위해 PLI(Program Language Interface)를 지원합니다.
'프로그래밍 언어 > Verilog' 카테고리의 다른 글
[Verilog 학습] Verilog에서 동시 기능 모델링 (0) | 2022.03.28 |
---|---|
[Verilog 학습] Verilog 모듈 구조 (0) | 2022.03.27 |
[Verilog 학습] Verilog 구성 (0) | 2022.03.26 |
[Verilog 학습] Verilog란 (0) | 2022.03.22 |
[Verilog 학습] 개념 (0) | 2022.03.21 |