Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛО САПР / VHDL.PDF
Скачиваний:
43
Добавлен:
17.04.2013
Размер:
5.27 Mб
Скачать

VHDL Reference Guide

function ">=" (L, R: UNSIGNED) return BOOLEAN; function ">=" (L, R: SIGNED) return BOOLEAN;

function ">=" (L: NATURAL; R: UNSIGNED) return BOOLEAN; function ">=" (L: INTEGER; R: SIGNED) return BOOLEAN; function ">=" (L: UNSIGNED; R: NATURAL) return BOOLEAN; function ">=" (L: SIGNED; R: INTEGER) return BOOLEAN;

The following example shows numeric_std equality functions.

function "=" (L, R: UNSIGNED) return BOOLEAN; function "=" (L, R: SIGNED) return BOOLEAN;

function "=" (L: NATURAL; R: UNSIGNED) return BOOLEAN; function "=" (L: INTEGER; R: SIGNED) return BOOLEAN; function "=" (L: UNSIGNED; R: NATURAL) return BOOLEAN; function "=" (L: SIGNED; R: INTEGER) return BOOLEAN;

function "/=" (L, R: UNSIGNED) return BOOLEAN; function "/=" (L, R: SIGNED) return BOOLEAN;

function "/=" (L: NATURAL; R: UNSIGNED) return BOOLEAN; function "/=" (L: INTEGER; R: SIGNED) return BOOLEAN; function "/=" (L: UNSIGNED; R: NATURAL) return BOOLEAN; function "/=" (L: SIGNED; R: INTEGER) return BOOLEAN;

Defining Logical Operators Functions

The numeric_std package provides functions that define all of the logical operators: NOT, AND, OR, NAND, NOR, XOR, and XNOR. These functions work just like similar functions in std_logic_1164, except that they operate on SIGNED and UNSIGNED values rather than on STD_LOGIC_VECTOR values. The following example shows these function declarations.

function "not" (L: UNSIGNED) return UNSIGNED; function "and" (L, R: UNSIGNED) return UNSIGNED; function "or" (L, R: UNSIGNED) return UNSIGNED; function "nand" (L, R: UNSIGNED) return UNSIGNED; function "nor" (L, R: UNSIGNED) return UNSIGNED; function "xor" (L, R: UNSIGNED) return UNSIGNED; function "xnor" (L, R: UNSIGNED) return UNSIGNED;

function "not" (L: SIGNED) return SIGNED; function "and" (L, R: SIGNED) return SIGNED; function "or" (L, R: SIGNED) return SIGNED; function "nand" (L, R: SIGNED) return SIGNED; function "nor" (L, R: SIGNED) return SIGNED; function "xor" (L, R: SIGNED) return SIGNED; function "xnor" (L, R: SIGNED) return SIGNED;

10-20

Xilinx Development System

Foundation Express Packages

Shift Functions

The numeric_std package provides functions for shifting the bits in UNSIGNED and SIGNED numbers. These functions produce shifters. The following example shows the shift function declarations.

function SHIFT_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; function SHIFT_RIGHT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; function SHIFT_LEFT (ARG: SIGNED; COUNT: NATURAL) return SIGNED; function SHIFT_RIGHT (ARG: SIGNED; COUNT: NATURAL) return SIGNED;

function ROTATE_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; function ROTATE_RIGHT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; function ROTATE_LEFT (ARG: SIGNED; COUNT: NATURAL) return SIGNED; function ROTATE_RIGHT (ARG: SIGNED; COUNT: NATURAL) return SIGNED;

The SHIFT_LEFT function shifts the bits of its argument ARG left by COUNT bits. SHIFT_RIGHT shifts the bits of its argument ARG right by COUNT bits.

The SHIFT_LEFT functions work the same for both UNSIGNED and SIGNED values of ARG, shifting in zero bits as necessary. The SHIFT_RIGHT functions treat UNSIGNED and SIGNED values differently.

If ARG is an UNSIGNED number, vacated bits are filled with zeros

If ARG is a SIGNED number, the vacated bits are copied from the ARG sign bit

The example in the “Shift and Rotate Operators” section of this chapter shows some shift functions calls and their return values.

Rotate Functions

ROTATE_LEFT and ROTATE_RIGHT are similar to the shift functions.

The following example shows rotate function declarations.

ROTATE_LEFT (U1, COUNT) = "01011011"

ROTATE_LEFT (S1, COUNT) = "01011011"

ROTATE_LEFT (U2, COUNT) = "01011111"

ROTATE_LEFT (S2, COUNT) = "01011111"

VHDL Reference Guide

10-21

VHDL Reference Guide

ROTATE_RIGHT (U1, COUNT) = "01101101"

ROTATE_RIGHT (S1, COUNT) = "01101101"

ROTATE_RIGHT (U2, COUNT) = "01111101"

ROTATE_RIGHT (S2, COUNT) = "01111101"

Shift and Rotate Operators

The numeric_std package provides shift operators and rotate operators, which work in the same way that shift functions and rotate functions do. The shift operators are sll, srl, sla, and sra.

The following example shows some shift and rotate operator declarations.

function "sll" (ARG: UNSIGNED; COUNT: INTEGER) return UNSIGNED; function "sll" (ARG: SIGNED; COUNT: INTEGER) return SIGNED; function "srl" (ARG: UNSIGNED; COUNT: INTEGER) return UNSIGNED; function "srl" (ARG: SIGNED; COUNT: INTEGER) return SIGNED; function "rol" (ARG: UNSIGNED; COUNT: INTEGER) return UNSIGNED; function "rol" (ARG: SIGNED; COUNT: INTEGER) return SIGNED; function "ror" (ARG: UNSIGNED; COUNT: INTEGER) return UNSIGNED; function "ror" (ARG: SIGNED; COUNT: INTEGER) return SIGNED;

The following example includes some shift and rotate operators.

Variable U1, U2: UNSIGNED (7 downto 0); Variable S1, S2: SIGNED (7 downto 0); Variable COUNT: NATURAL;

...

U1 <= "01101011";

U2 <= "11101011";

S1 <= "01101011";

S2 <= "11101011"; COUNT <= 3;

...

SHIFT_LEFT (U1, COUNT) = "01011000" SHIFT_LEFT (S1, COUNT) = "01011000" SHIFT_LEFT (U2, COUNT) = "01011000" SHIFT_LEFT (S2, COUNT) = "01011000"

SHIFT_RIGHT (U1, COUNT) = "00001101"

SHIFT_RIGHT (S1, COUNT) = "00001101"

SHIFT_RIGHT (U2, COUNT) = "00011101"

SHIFT_RIGHT (S2, COUNT) = "11111101"

U1 sll COUNT = "01011000"

S1 sll COUNT = "01011000"

10-22

Xilinx Development System

Соседние файлы в папке ЛО САПР