반응형

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는 명령문의 동시(병렬) 실행과 명령문의 순차 실행을 지원합니다.

Verilogblocking(=) 할당과 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)를 지원합니다.

 

반응형
반응형

설계 흐름은 다음 그림과 같으며 넷리스트를 얻기 위한 세 가지 주요 단계로 구성됩니다.

 

 

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는 다양한 시간 제약, blonkingnon-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>는 입력 포트, 출력 포트 또는 네트

 

wirereg는 네트 유형이며 wire는 데이터를 보유하지 않으며 연속 할당에 사용됩니다. reg는 데이터를 보유하는 데 사용되며 절차 할당에 사용됩니다.

 

<net_name>은 선언된 net의 이름이며

alwaysassign은 키워드로 디자인 기능을 설명하는 데 사용됩니다.

assign 문은 연속 할당이며 동시에 실행됩니다.

always 블록은 절차적 블록이며 always 블록 내의 모든 명령문이 begin ...end 내에 있으면 순차적으로 실행됩니다. 여러 개의 always procedural 블록이 동시에 실행됩니다.

 

endmodule은 키워드이며 디자인 모듈의 끝을 나타냅니다!

모든 Verilog 코드는 'module' 키워드로 시작하고 'endmodule'로 끝납니다. 모듈은 포트 선언, 네트 선언 및 디자인 기능으로 구성됩니다.

반응형
반응형

Verilog는 강력한 하드웨어 설명 언어 중 하나이며 동시 및 순차 구성을 지원합니다. 이 언어는 합성 가능 및 합성 불가 구성의 사용을 지원하므로 업계에서 널리 사용됩니다. 설계 및 검증 맥락에서 기본 설계 흐름을 이해하는 것은 필수적입니다. Verilog-2005 코딩 스타일인 IEEE 1364-2005 Verilog의 안정적인 릴리스를 사용합니다.

 

로직 디자인의 진화

William Shockley, John Bardeen Walter Brattain Bell 연구소에서 1946~1947년에 프로토타입 트랜지스터 모델을 실제로 발명한 것은 스위칭 이론과 칩 설계에서 반도체 사용에 혁명을 일으켰습니다. 설계에 사용된 작동 트랜지스터는 1954-1956년 동안 Tanenbaum이 가장 크게 기여한 것입니다.

1958년에 Texas Instrument의 젊은 전기 엔지니어 Jack Kilby는 작은 게르마늄 조각에 회로 요소 트랜지스터, 저항기 및 커패시터를 배치하는 방법을 알아냈습니다. 그러나 1958년 이전에 훨씬 더 혁신적인 아이디어가 출판되고 개념화되었습니다.

1963 CMOS 로직의 발명으로 로직 셀의 통합이 매우 쉬워졌으며 Intel의 공동 설립자인 Gordon Moore '밀도 집적 회로(IC)의 트랜지스터 수가 2년마다 2배씩 증가한다'고 예측했습니다. 무어의 법칙처럼! 무어의 법칙은 단지 관찰일 뿐이며 트랜지스터의 배율을 고려하여 칩 설계의 전반적인 계획에 사용됩니다. 무어의 법칙과 록의 법칙(2무어의 법칙), '반도체 칩 제조 비용은 4년마다 두 배로 증가한다'는 칩 설계 및 제조 과정에서 필요한 전체 설계 주기와 투자를 계획하는 데 사용됩니다.

두 법칙 모두 칩 설계 주기 동안 재무를 포함한 전반적인 계획에 사용됩니다. 업계는 거의 2014년까지 무어의 법칙에 따라 트랜지스터가 두 배로 증가하는 것을 목격했습니다. 10nm 미만에서는 2년 동안 트랜지스터를 두 배로 늘리는 데 실패했으며 이제 더 낮은 프로세스 노드에서 트랜지스터를 두 배로 늘리기 위해 필요하다고 말할 수 있습니다. 거의 30~36개월이 소요됩니다.

그러나 경험 엔지니어가 복잡한 VLSI 기반 ASIC 칩 설계를 통해 얻을 수 있다는 무어의 예측이 얼마나 옳았는지. 현재 10년 동안 칩 영역은 충분히 줄어들었고 파운드리가 작동하는 공정 기술 노드는 10nm 미만이며 칩에는 작은 실리콘 다이 크기를 가진 수십억 개의 트랜지스터가 있습니다. 알고리즘 설계 및 제조 프로세스의 발전으로 대부분의 설계는 VHSICHDL(Very High Speed ​​Integrated Circuit Hardware Description Language) 또는 Verilog를 사용하여 구현됩니다. 지난 10년 동안 SystemVerilog는 하드웨어 설명 및 하드웨어 검증에 널리 사용되었습니다.

 

 

 

시스템과 로직 설계 추상화

대부분의 디자인은 다양한 추상화 수준을 가지고 있습니다. 디자인 접근 방식은 하향식 또는 상향식일 수 있습니다. 구현 팀은 설계 복잡성과 설계 리소스의 가용성에 따라 올바른 접근 방식을 결정합니다. 복잡한 칩의 대부분은 또한 상향식 접근 방식 대신 하향식 접근 방식을 사용하여 설계됩니다.

 

아키텍처 설계

디자인은 초기에 기능적 모델로 기술되고, 디자인의 아키텍처와 마이크로 아키텍처는 기능적 디자인 사양을 이해함으로써 기술됩니다. 아키텍처 설계에는 기능 설계 요구 사항을 참조하여 연관글루 로직을 사용한 기능 블록, 메모리, 프로세서 논리 및 처리량의 추정 및 역할이 포함됩니다. 아키텍처 설계는 기능 블록의 형태로 설계의 기능을 블록 다이어그램 형태로 나타냅니다. 간단히 말해서 아키텍처 디자인은 기능적 디자인 사양에서 발전된 블록 수준의 표현이라고 볼 수 있습니다.

 

마이크로 아키텍처 설계

마이크로 아키텍처는 아키텍처 문서에 지정된 모든 기능 블록의 세부 표현입니다. 인터페이스, 핀 연결, 계층적 설계 세부 사항과 같은 블록 및 하위 블록 수준 세부 사항을 설명합니다. 동기 또는 비동기 설계와 클록 및 재설정 트리에 대한 정보는 마이크로 아키텍처 문서에 설명되어야 합니다. 세부 타이밍 정보와 전체 데이터 흐름도 마이크로 아키텍처 문서에 포함될 수 있습니다.

 

RTL 설계 및 합성

RTL은 레지스터 전송 레벨을 나타냅니다. RTL 설계는 마이크로 아키텍처를 참조 설계 문서로 사용하며 주요 전략은 필요한 설계 기능을 충족하기 위해 합성 가능한 Verilog 구성을 사용하여 설계를 코딩하는 것입니다. 이 단계에서 효율적인 설계 및 코딩 지침이 중요한 역할을 하며 효율적인 RTL은 구현 단계에서 전체 시간 요구 사항을 줄입니다.

RTL 디자인은 게이트 레벨 넷리스트를 얻기 위해 합성 도구에 의한 입력 중 하나로 사용됩니다. 게이트 레벨 넷리스트는 조합 및 순차 논리 셀의 형태로 기능 설계를 나타냅니다.

 

스위치 레벨 설계

마지막으로 스위치 레벨 설계는 ASIC의 표준 셀 및 매크로 형태로 설계를 표현하기 위해 레이아웃에서 사용되는 추상화입니다. 또는 FPGA 기반 설계의 경우 스위치 수준 설계는 전용 FPGA 아키텍처 리소스를 사용하여 FPGA 패브릭에서 설계 구현을 나타낼 수 있습니다.

 

집적회로 설계 및 방법론

VLSI 설계 알고리즘의 발전과 프로세스 노드의 축소로 설계는 더욱 복잡해지고 SOC 기반 설계는 더 짧은 시간에 실현 가능합니다. 프론트엔드와 백엔드 디자인에서 사용되는 효율적인 디자인 플로우를 이용하여 보다 짧은 시간 안에 제품을 배송하고자 하는 고객의 요구가 가능합니다. 설계는 사양 단계에서 최종 레이아웃까지 진화해야 합니다. 적합한 기능이 있는 EDA 도구를 사용하면 기능이 입증된 버그 없는 설계가 가능해졌습니다.

반응형

+ Recent posts