반응형

VHDL 연산자

VHDL에서 제공하는 연산자는 다음과 같은 주요 범주로 분류할 수 있습니다.

• 할당 연산자

• 논리 연산자

• 관계 연산자

• 산술 연산자

• 연결 연산자

 

할당 연산자

연산자 ":="

초기 값 할당에 연산자 ":="를 사용하거나 상수 또는 일반 변수에 값을 할당합니다.

":="는 초기 값 할당을 위한 신호 개체에만 사용됩니다. 다른 경우에는 신호 개체에 사용되지 않습니다.

 

signal my_signal: integer :=10; -– 초기값 할당

my_signal <=30; -- 값 할당

 

variable my_signal: integer :=10; –- 초기값 할당

my_signal := 40; -- 값 할당

 

constant my_number: natural := 214; -– 초기 값 할당

 

Operator "<="

"<=" 연산자를 사용하여 신호 개체에 값을 할당합니다.

 

signal my_signal: bit_vector(3 downto 0):= “10011”; -– 초기값 할당

my_signal<= “11011”; -- 값 할당

 

Operator “=>” and “others” keyword

"=>" 연산자를 사용하여 벡터 요소에 값을 할당합니다. 연산자 "=>"는 일반적으로 할당되지 않은 벡터 요소의 인덱스 값을 나타내는 예약어 others와 함께 사용됩니다.

 

signal x_vec : std_logic_vector(5 downto 1) := (4|3=> ‘1’, others=> ‘0’);
결과는 x_vec=“01100”

x_vec<=(1 to 3=>‘1’, others=>‘0’);
결과는 x_vec=“00111”

 

variable x_vec : std_logic_vector(0 to 10) := (1|3|5=> ‘1’, 2=> ‘Z’, others=>‘0’);
x_vec= “01Z10100000”

x_vec := (1 to 5=>‘0’, others=>‘Z’);
x_vec=“Z00000ZZZZZ”,

 

논리 연산자와 시프트 연산자

논리 연산자는 데이터 유형 bit, std_logic, std_logic_vector, std_ulogic, std_ulogic_vector Boolean에 사용됩니다. 논리 연산자는 구현 조합 논리 회로에 사용됩니다.

 

다음 표는 논리연산자와 시프트연산자를 나타내고 있습니다.

Logical operators and, or, nand, nor, xor, xnor, not
Shift operators sll, srl, sla, sra, rol, ror

 

논리적 시프트 연산자에 대해 간단히 설명하겠습니다.

시프트 연산자

 

SLL: Shift Left Logical

비트는 왼쪽으로 이동하고 새 위치는 0으로 채워집니다.

 

x <=”10101111”

y <= x sll 2

결과 : y <= “10111100”

 

SLA: Shift Left Arithmetic

비트는 왼쪽으로 이동하고 새 위치는 맨 오른쪽 비트의 값으로 채워집니다.

 

x <=”10101111”

y <= x sla 2

결과 : y <= “10111111”

 

SRL: Shift Right Logical

비트는 오른쪽으로 이동하고 새 위치는 0으로 채워집니다.

 

x <=”10101111”

y <= x srl 2

결과 : y <= “00101011”

 

SRA: Shift Right Arithmetic

비트는 오른쪽으로 이동하고 새 위치는 맨 왼쪽 비트 값으로 채워집니다.

 

x <=”10101111”

y <= x sra 2

결과 : y <= “11101011”

 

ROL: Rotate Left

비트는 왼쪽으로 이동하고 오른쪽의 새 위치는 왼쪽 가장자리에서 떨어진 비트로 채워집니다.

 

ROR: Rotate Right

비트는 오른쪽으로 이동하고 왼쪽의 새 위치는 오른쪽 가장자리에서 떨어진 비트로 채워집니다.

 

관계 연산자

관계 연산자는 비교 목적으로 사용됩니다. VHDL 프로그래밍에서 사용할 수 있는 관계 연산자는 다음과 같습니다.

 

산술 연산자

산술 연산자는 정수 또는 숫자 값에 대한 산술 연산을 수행하는 데 사용됩니다. VHDL 프로그래밍에서 사용할 수 있는 산술 연산자는 다음과 같습니다.

 

 

다음 예제는 z = abs(x) + abs(y)를 코딩하였습니다.

 

library ieee;
use ieee.numeric_std.all;
-- Note that "numeric_std" package includes "std_logic_1164" package in its implementation


entity abs_sum_circuit is
port(
x: in signed(7 downto 0);
     y: in signed(7 downto 0);
     z: out signed(8 downto 0) );
end entity;

architecture logic_flow of abs_sum_circuit is
begin
    z<=abs(x)+abs(y);
end architecture;

 

연결 연산자 "&"

연결 연산자는 논리 또는 비트 벡터를 병합하여 더 긴 논리 벡터를 얻는 데 사용됩니다. 연결 연산자는 bit_vector, std_logic_vector, std_ulogic_vector, signed, unsigned, string, integer vector, boolean-vector 데이터 유형을 병합하는 데 사용할 수 있습니다.

 

entity merger_two_vectors is
port
( x_vec: in bit_vector(4 downto 0);
     y_vec: in bit_vector(6 downto 0);
     z_vec: out bit_vector(11 downto 0) );
end entity;

architecture logic_flow of merger_two_vectors is
begin
    z_vec<=x_vec & y_vec;
end architecture;

 

generic

제네릭 키워드는 VHDL 프로그램을 통해 사용할 수 있는 제네릭 매개변수를 선언하는 데 사용됩니다. 이런 식으로 VHDL 프로그램을 다른 응용 프로그램에 적용하는 것이 더 쉬워집니다. 일반 선언은 포트 섹션 이전의 엔터티 부분에서 수행됩니다. 일반 선언의 구문은 다음과 같습니다.

 

generic(parameter name - 1 : data type - 1 := initial value - 1;
parameter name - 2 : data type - 2 := initial value - 2;
. . .
parameter name - N : data type  N := initial value – N);

 

다음은 generic 선언의 사용 예를 보여주고 있습니다.

 

entity example_generic is
generic (
N : natural:=8;
        M: natural:=16 );
port
( x_vec: in bit_vector(N-1 downto 0);
     y_vec: in bit_vector(M-1 downto 0);
     z_vec: out bit );
end entity;

반응형

+ Recent posts