반응형

아키텍처

VHDL 프로그램의 아키텍처 부분은 전자 회로의 내부 동작을 설명합니다. 전자 회로의 포트에서 수신된 데이터는 아키텍처 부분 내부에서 처리되고 출력 데이터를 얻습니다. 생성된 출력 데이터는 전자 회로의 출력 포트로 전송됩니다.

 

architecture architecture_name of entity_name is
Declarations

begin
Statements

end [architecture] [architecture_name];

 

아키텍처의 마지막 줄은 "end architecture" 또는 "end architecture_name" 또는 "end architecture architecture_name" 또는 "end"일 수 있습니다.

다음 그림은 디지털 회로의 블랙박스 표현하였습니다.

 

 

위의 회로를 구현하기 위한 VHDL 프로그램을 작성하면 다음과 같습니다.

주어진 블랙박스의 엔터티 부분은 다음과 같이 쓸 수 있습니다.

entity example_1_5 is
port
( a, b, c: in bit;
      f1, f2: out bit );
end entity;

 

다음으로 아키텍쳐 부분에서 부울 함수 f1 = ab’+c f2 = abc’ VHDL 구현을 추가합니다.

architecture example_arc of example_1_5 is
begin
    f1<= (a and not (b)) or c;
    f2<= a and b and (not(c));
end example_arc;

 

전체 코딩은 다음과 같습니다.

entity example_1_5 is
port
( a, b, c: in bit;
      f1, f2: out bit );
end entity;

 

architecture example_arc of example_1_5 is
begin
    f1<= (a and not (b)) or c;
    f2<= a and b and (not(c));
end example_arc;

 

아래 디지털 회로를 엔터티와 아키텍쳐를 구현하면 다음과 같습니다.

 

library IEEE;
use IEEE.std_logic_1164.all;
entity
logic_circuit is
port
( x: in std_logic;
     y: in std_logic;
     z: in std_logic;
     f: out std_logic );
end logic_circuit;

 

architecture logic_flow of logic_circuit is
signal
g, h: std_logic;
begin
    g<=x and y;
    h<=not(y) and z;
    f<=g or h;
end logic_flow;

 

데이터 객체

VHDL 프로그래밍에는 값을 보유하는 데이터 개체가 있습니다. 데이터 개체에는 이름과 데이터 유형이 있습니다. 데이터 객체를 사용하기 위한 일반적인 구문은 데이터 객체 이름과 같습니다.

 

data object object name : data type := initial value;

 

여기서 데이터 개체는 신호, 변수 또는 상수일 수 있습니다. 개체 이름은 사용자에게 달려 있습니다. 데이터 유형은 bit, std_logic, integer, unsigned, signed, std_logic_vector, bit_vector 등과 같이 VHDL 프로그래밍에서 사용할 수 있는 모든 데이터 유형일 수 있습니다.

 

signal 객체는 아키텍처의 선언적 부분에서 선언할 수 있습니다. 반면에, 변수 객체는 프로세스, 프로시저, 함수와 같은 순차적인 프로그램 세그먼트 내부에서 선언될 수 있습니다.

상수 개체는 일반적으로 아키텍처, 엔터티, 패키지, 프로세스, 프로시저 및 함수의 선언적 부분에서 선언됩니다. 그러나 패키지 본문, 블록, 생성에서도 선언할 수 있습니다.

 

상수 객체

상수 개체의 값은 프로그램을 통해 변경할 수 없습니다. 구문은 다음과 같습니다

 

constant name : data type := initial value;

 

다음은 상수객체의 선언 예제입니다.

constant my_constant: integer:=32;
constant my_flag: std_logic:=’1’;
constant my_vector : std_logic_vector(3 downto 0):= "1010";

 

signal 객체

신호 객체 선언은 초기 값을 포함하거나 포함하지 않을 수 있습니다. 신호 객체는 일반적으로 아키텍처 및 패키지의 선언적 부분에 사용됩니다.

함수, 프로시저 및 프로세스와 같은 순차적인 프로그램 세그먼트 내에서는 신호 선언이 허용되지 않습니다. 그 구문은 다음과 같습니다

 

signal name : data type := initial value;

 

다음 예제는 signal 객체의 선언을 보여주고 있습니다.

 

signal my_number: integer;
signal my_bit: bit:=’1’;
signal my_vector : std_logic_vector(3 downto 0):= "1010";

 

variable 객체

변수 객체 선언은 초기 값을 포함하거나 포함하지 않을 수 있습니다. 변수 객체는 기능, 절차, 프로세스와 같은 순차적인 프로그램 단위에서 사용됩니다. 그 구문은 다음과 같습니다

 

variable name : data type := initial value;

 

다음 에제는 variable 객체의 선언을 보여주고 있습니다.

 

variable my_number: natural;
variable my_logic: std_logic:=’1’;
variable my_vector : std_logic_vector(3 downto 0):= "1110";

반응형

+ Recent posts