반응형

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

 

 

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'로 끝납니다. 모듈은 포트 선언, 네트 선언 및 디자인 기능으로 구성됩니다.

반응형
반응형

std_logic

포트에 사용되는 데이터 유형은 IEEE 패키지에 정의된 std_logic입니다. std_logic_1164.all.

std_logic 데이터 유형의 경우 8가지 가능한 값이 있으며 이 값은 다음과 같이 정리되어 있습니다.

 

‘X’ Unknown
‘0’ Logic 0
‘1’ Logic 1
‘Z’ High Impedance
‘W’ Weak Unknown
‘L’ Weak Low
‘H’ Weak High
‘-’ Don’t Care

 

std_logic_vector

std_logic_vector 데이터 유형은 IEEE.std_logic_1164.all 라이브러리에 정의되어 있습니다. I/O 포트의 데이터 유형이 std_logic_vector이면 I/O 포트에 여러 std_logic 값이 있음을 의미합니다.

 

entity FourBit_Circuit is
port
( inp1: in std_logic_vector(3 downto 0)
     inp2: in std_logic_vector(3 downto 0)
     outp1: out std_logic_vector(4 downto 0)
     outp2: out std_logic_vector(4 downto 0) );
end FourBit_Circuit;

 

std_ulogic

데이터 유형 std_ulogic IEEE.std_logic_1164.all 패키지에 정의되어 있습니다. std_ulogic 데이터 유형의 경우 9가지 가능한 값이 있으며 이러한 값은 다음과 같이 정리되어 있습니다.

 

‘U’ Uninitialized
‘X’ Unknown
‘0’ Logic 0
‘1’ Logic 1
‘Z’ High Impedance
‘W’ Weak Unknown
‘L’ Weak Low
‘H’ Weak High
‘-’ Don’t Care

 

std_ulogic_vector

std_ulogic_vector 데이터 유형은 IEEE.std_logic_1164.all 라이브러리에 정의되어 있습니다. I/O 포트의 데이터 유형이 std_ulogic_vector이면 I/O 포트에 여러 std_ulogic 값이 있음을 의미합니다.

 

bit

비트 데이터 유형은 표준 패키지에 정의되어 있습니다. , VHDL 프로그램의 헤더에 추가 패키지를 포함할 필요가 없습니다.

 

entity FourBit_Circuit is
port
( inp1: in bit_vector(3 downto 0);
     inp2: in bit_vector(3 downto 0);
     outp1: out bit_vector(4 downto 0);
     outp2: out bit_vector(4 downto 0) );
end entity;

 

bit_vector

bit_vector 데이터 유형은 표준 패키지에 정의되어 있습니다. , VHDL 프로그램의 헤더에 추가 패키지를 포함할 필요가 없습니다. I/O 포트의 데이터 유형이 bit_vector이면 I/O 포트에 여러 비트 값이 있음을 의미합니다.

 

integer, natural, positive

integer, natural, positive 데이터 유형은 표준 패키지에 정의되어 있습니다. , VHDL 프로그램의 헤더에 추가 패키지를 포함할 필요가 없습니다. 정수 데이터 유형은 231에서 231 - 1 범위의 정수를 나타내는 데 사용됩니다.

자연 데이터 형식은 0에서 231 - 1 범위의 정수를 나타내는 데 사용됩니다. 반면 데이터 형식 양수는 1에서 231 - 1 범위의 정수를 나타내는 데 사용됩니다.

 

entity FourBit_Circuit is
port
( inp1: in integer range 0 to 15;
     inp2: in integer range 0 to 15;
     outp1: out integer range 0 to 31;
     outp2: out integer range 0 to 31 );
end entity;

 

entity FourBit_Circuit is
port
( inp1: in natural range 0 to 15;
     inp2: in natural range 0 to 15;
     outp1: out natural range 0 to 31;
     outp2: out natural range 0 to 31 );
end entity;

 

unsigned, signed

unsigned signed 데이터 유형은 numeric_std std_logic_arith 패키지에 정의되어 있습니다. 엔티티 선언에서 이러한 데이터 유형을 사용할 수 있으려면 이러한 패키지 중 하나가 VHDL 프로그램의 헤더에 포함되어야 합니다. unsigned 데이터 형식은 음수가 아닌 정수를 나타내는 데 사용되며, signed 데이터 형식은 부호 있는 숫자, 즉 정수를 나타내는 데 사용됩니다.

다수의 비트로 구성된 다수의 포트를 갖는 전자 회로는 다수의 등가 방식으로 표현될 수 있다. 이 개념을 예를 들어 설명하겠습니다.

 

library IEEE;
use IEEE.numeric_std.all;

entity FourBit_Circuit is
port
( inp1: in unsigned(3 downto 0);
     inp2: in unsigned (3 downto 0);
     outp1: out unsigned (4 downto 0);
     outp2: out unsigned (4 downto 0) );
end entity;

 

library IEEE;
use IEEE.numeric_std.all;

entity FourBit_Circuit is
port
( inp1: in signed (3 downto 0);
     inp2: in signed (3 downto 0);
     outp1: out signed (4 downto 0);
     outp2: out signed (4 downto 0) );
end entity;

반응형

'프로그래밍 언어 > VHDL' 카테고리의 다른 글

[VHDL 학습] when문, select문, generate문  (0) 2022.03.30
[VHDL 학습] VHDL 연산자  (0) 2022.03.24
[VHDL 학습] Architecture  (0) 2022.03.23
[VHDL 학습] Entity  (0) 2022.03.21
반응형

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 도구를 사용하면 기능이 입증된 버그 없는 설계가 가능해졌습니다.

반응형
반응형

VHDL Entity, Architecture, Operators

 

VHDL "초고속 집적 회로 하드웨어 설명 언어"의 약자로 1980년대 미국 국방부에서 처음 개발했습니다. 전자 회로의 동작을 설명하는 데 사용됩니다. VHDL 프로그램은 프로그램 모듈로 구성됩니다. 모듈은 특정 목적을 위해 작성된 프로그램 세그먼트일 뿐입니다. 예를 들어 패키지 모듈, 테스트 모듈, 메인 VHDL 모듈, 즉 메인 프로그램이 있습니다.

 

이 장에서는 VHDL 프로그램의 엔터티 및 아키텍처 부분에 대해 자세히 설명합니다. 엔티티 부분은 전자 회로의 입력 및 출력 포트를 설명하는 데 사용됩니다. , I/O 포트를 설명하는 데 사용됩니다. 반면에 VHDL 모듈의 아키텍처 부분은 전자 회로의 작동을 설명하는 데 사용됩니다.

 

회로 작동 중에 회로는 입력 포트에서 얻은 입력 데이터를 처리하고 출력 포트로 보낼 출력 데이터를 생성합니다. 엔티티 부분에서 사용 가능한 포트에 사용되는 데이터 유형도 논의합니다. 또한 VHDL 연산자에 대해서도 간단히 설명합니다.

 

Entity

 

VHDL 프로그램의 엔터티 부분은 전자 회로의 I/O 포트를 설명합니다. 포트는 입력 포트, 출력 포트, 또는 동시에 입력과 출력 포트가 될 수도 있고 버퍼 포트가 될 수도 있습니다.

 

다음 그림은 포트 유형을 보여주고 있습니다.

 

 

다음은 엔터티의 구조를 보여주고 있습니다.

 

entity entity_name is
port(
port_ID1: I/O option signal_type;
      port_ID2: I/O option signal_type;
);
end [entity] [entity_name];

 

여기서 '[entity] [entity_name]'은 중괄호 안에 단어를 생략하거나 유지할 수 있음을 의미합니다.

엔터티의 사용을 예로 들어 설명하겠습니다.

 

전자 회로의 블랙 박스 표현은 다음과 같습니다.

다음 그림은 VHDL 프로그램, PR로 전자 회로 포트를 설명합니다.

 

다음 단계를 통해 위의 그림과 같은 블랙박스의 엔티티 부분을 작성할 수 있습니다.

(S1) 예약어 엔터티를 작성합니다.

(S2) 엔티티에 이름을 부여합니다.

(S3) 행의 끝에 예약어를 씁니다.

(S4) 엔터티 부분의 닫는 태그를 작성합니다.

(S5) 닫는 태그 끝에 세미콜론을 넣습니다.

(S6) 예약어 포트를 씁니다.

(S7) 포트에 괄호를 추가합니다.

(S8) port() 끝에 세미콜론을 붙입니다.

(S9) 2개의 입력 포트와 3개의 출력 포트에 대해서 포트에 이름을 지정합시다.

(S10) in, out 예약어를 사용하여 포트의 종류를 표시한다.

(S11) 모든 포트 데이터 유형에 대해 std_logic을 사용한 입력 및 출력 포트에서 사용 가능한 데이터 유형을 붙입니다.

(S12) 모든 std_logic의 끝에 세미콜론을 넣습니다.

 

entity my_circuit_name is
port
( inp1: in std_logic
     inp2: in std_logic
     outp1: out std_logic
     outp2: out std_logic
     outp3: out std_logic );
end my circuit name;

 

S12단계에서 VHDL 프로그램에서 데이터 유형 std_logic이 의미를 갖는 데 필요한 헤더 라인을 추가한 최종 엔터티 구문은 다음과 같습니다.

 

library IEEE; -- IEEE library
use IEEE.std_logic_1164.all; -- Necessary to use the std_logic

entity my_circuit_name is
port
( inp1: in std_logic; --Input port
     inp2: in std_logic; --Input port
     outp1: out std_logic; --Output port
     outp2: out std_logic; --Output port
     outp3: out std_logic ); --Output port
end my_circuit_name; -- End of entity

 

반응형

+ Recent posts