Применение языка VHDL при проектировании специализированных СБИС. Ивченко В.Г. - 14 стр.

UptoLike

Составители: 

15
Объявления массивов
В объявлении типа для неограниченного массива (unconstrained) задается число индексов, тип и позиция
каждого индекса, а также тип элементов массива. В нем не определяется число элементов в каждом измерении
массива. Неограниченные массивные типы в следующем списке являются предопределенными:
type bit_vector is array(natural range <>) of bit;
type string is array( positive range <>) of character;
Каждый из этих типов имеет одно измерение. Тип bit_vector индексирован значениями предопределенного
типа natural и имеет элементы типа bit. Тип string индексируется предопределенным типом positive и имеет
элементы типа character. Запись range<> (читается как "ящик диапазона" - range box) означает, что
определение границ индекса было отложено. Границы подставляются в момент, когда создается объект
данного типа.
Замечание. Как видно, в отличие от большинства языков программирования (Си, Паскаль, Фортран и др.), в
VHDL можно задавать тип индексов массива.
Индексы массива могут быть целого или перечислительного типа. Элементы могут быть любого типа.
Например:
type matrix is array(integer range <>,integer range<>)of real;
type color_accumulator is array(color range <>) of natural;
type color_match is array(natural range<>) of color;
type bit6_data is array(positive range<>) of bit6;
type bit6_address is array(positive range<>) of bit6;
type transition_delay is array(bit6 range<>,bit6 range<>)of time;
type conversion_vector is array(bit6 range<>) of bit;
Объявление объекта типа массив определяет имя типа и ограничения на индекс (index constraint):
variable square: matrix(1 to 10,1 to 10);
signal A_register,B_register: bit6_data(63 downto 0);
signal parts_per_color:color_accumulator(green to indigo);
constrant part_id:string := "M00368";
variable bit_equivalence: conversion_vector(bit6);
Каждая индексная позиция в объявлении объекта типа массив, который использует неограниченный тип,
должна быть ограничена. Диапазон может быть ограничен:
1) при помощи to или downto (первые три примера);
2) он может также заменяться диапазоном начального значения (как в part_id);
3) диапазон может быть назван именем индекса соответствующего перечислительного типа (как в
bit_equivalence).
В последнем случае диапазон является полным диапазоном перечислительного типа.
В случае, когда необходимо большое число объектов некоторого типа с одинаковыми ограничениями на
индексы, может быть удобным объявить для этой цели подтип. Имя подтипа может быть использовано в
качестве сокращения для полного обозначения подтипа:
subtype data_store is bit6_data(63 downto 0);
signal A_reg,B_reg: data_store;
subtype transform is matrix (1 to 4, 1 to 4);
variable X,Y:transform;
signal unit: transform;
Имеется также другая сокращенная запись, которая часто полезна при создании массивов. Рассмотрим
следующую пару объявлений:
type transition_delay is array(bit6 range<>,bit6 range<>)of time;
subtype cmos_transition is transition_delay(bit6,bit6);
Эти объявления можно записать в следующем виде:
type cmos_transition is array(bit6,bit6) of time;
Отличие заключается в том, что неограниченный массивный тип transition_delay никогда явно не
определяется. Это объявление создает анонимный тип (anonymous type) с объявлением, которое похоже на
объявление для transition_delay, за которым непосредственно следует объявление подтипа для cmos_transition c
данным ограничением на индекс.
Строки, битовые строки и агрегаты
Строки, битовые строки, агрегаты (strings, bit strings, aggregates) используются для конструирования
значений для объектов массивных типов. Они могут использоваться в любом месте, где допускается значение
типа массив, например, как начальное значение константы или операнд в выражении.
Строковая запись может быть использована для массивных значений любого одномерного массива,
элементы которого имеют тип character; например: