ОПЕРАЦИИ НАД МАССИВАМИ НА ЯЗЫКЕ VHDL . ФРАГМЕНТЫ МАССИВОВ
Массив — это набор данных, объединенных общим именем и различаемых по порядковым номерам (индексам). Для того чтобы вводить объект типа массив, необходимо предварительно объявить соответствующий тип на основе следующих синтаксических правил:
ARRAY ( <диапазон> «, <диапазон> ») OF <тип элемента массива>
Диапазон задает множество допустимых значений индекса. Если диапазон задан конструкцией RANGE<>, то это является объявлением неограниченного массива. В этом случае определяется не диапазон значений индекса, а только тип индексной переменной.
Для одномерных массивов определено несколько групповых операций, в которых массив рассматривается как единое целое. Это, прежде всего, операция конкатенации & (объединение строк).
а=”1001”;
b= “1101” & а; в результате получим: b=”11011001”
Операции сдвига определены для одномерных массивов типа BIT или BOOLEAN и записываются следующим образом:
<имя массива> <символ операции сдвига> <целое>
В VHDL определены следующие операции сдвига: логические сдвиги влево и вправо sll и srl, арифметические сдвиги влево и вправо slа и sra, циклические сдвиги влево и вправо rol и ror.
Целое в записи выражения для сдвига определяет число разрядов, на которые осуществляется сдвиг кода.
Логические операции (and, or, nor, nand, xor, xnor) применимы к двум одномерным массивам одинаковой длины и типа bit и boolean.
Операции отношения (>, <, =) применяются к одномерным массивам, элементы которых имеют дискретный тип.
|
|
a<c может быть true и false в зависимости от значений a и c.
Фрагменты массива( slire ).
Нередко возникает необходимость работы не со всем массивом, а с некоторым его фрагментом — набором элементов с индексами, лежащими в заданном интервале. При этом порядок следования индексов во фрагменте может быть обратным порядку следования индексов в массиве.
Type array_1 is array(1 to 100) of integer
Variable a1:array_1;
a1(20 to 50) фрагмент 1 из 31 элемента
a1(60 downto 40) фрагмент 2 из 21 элемента
К фрагментам применимы все операции, как и к массиву в целом.
ЗАПИСИ, ИХ ОПИСАНИЕ, ПРИСВОЕНИЕ ЗНАЧЕНИЙ НА ЯЗЫКЕ VHDL .
Запись (record) - совокупность объектов, принадлежащих одному клaccy (кoнcтaнты, пepeмeнныe или cигнaлы), нo вoзмoжнo, имeющиx paзличныe типы и cгpуппированныx вмecтe пoд oдним имeнeм. Элeмeнты зaпиcи мoгyт имeть любoй пpeдoпpeдeлeнный или oпpeдeлeнный пoльзoвaтeлeм тип, включaя oгpaничeнныe мaccивы и дpyгиe влoжeнныe зaпиcи. Тип record дoлжeн вceгдa oбьявлятьcя дo тoгo, кaк coздaютcя oбьeкты этoгo типa;
Примeры:
Type bigtime is record
Second:integer range 0 to 59;
Minutes: integer range 0 to 59;
Houres: integer range 0 to 23;
Поля:
Constant time1: bigtime:=(2,2,12);
Constant time2:bigtime:=(hours=>12, minutes=>2, second=>2)
В обьявлении записи привoдитcя ee имя и cпиcoк имeн и типoв кaждoгo пoля (field) зaпиcи. Мoжнo ccылaтьcя нa вcю зaпиcь, иcпoльзyя ee пpocтoe имя, a тaкжe мoжнo ccылaтьcя нa oтдeльнoe пoлe, синтаксис которого:
|
|
Имя записи.имя поля:=значение:
Пример
Time1.minutes:=20;
Выбраннoe имя пoля зaпиcи мoжeт быть иcпoльзoвaнo вeздe, гдe мoжeт быть иcпoльзoвaн oбьeкт, имeющий тип, coвпaдaющий c типoм дaннoгo пoля.
УКАЗАННЫЕ ТИПЫ ДАННЫХ ЯЗЫКА VHDL .
Назначение указательных типов
Скалярные и составные типы данных позволяют представлять как отдельные элементы данных, так и регулярные структуры, из них состоящие. Однако в некоторых приложениях возникает необходимость в создании набора данных, размер которых заранее не известен, или организации сложной структуры отношений между индивидуальными объектами данных. В этих случаях используются указательные типы.
Указательные типы позволяют создавать сложные структуры данных в процессе моделирования. Они имеют много общего с указательными типами в других языках программирования.
Описание указательного типа имеет следующий синтаксис:
type имя указательного типа is access тип на который ссылается;
Например:
type natural_ptr is access natural;
Объект, принадлежащий типу natural_ptr, может содержать значение-ссылку на объект данных типа natural, но не на объекты других типов.
|
|
Ссылки могут быть организованы на объекты любых типов, кроме файлового.
Когда переменная описана как объект указательного типа, её начальное значение по умолчанию – null. Переменную можно связать с конкретным объектом данных, размещённым в памяти. Для работы с объектом, на который ссылается переменная-указатель, используется ключевое слово all. Например:
variable count: natural_ptr;
count:=new natural;
count.all:=10;
При создании указателя ему может присваиваться значение:
Count:=new natural’(10);
Пример 1:
type stimulus_record is record
stimulus_time:time;
stimulus_value: bit_vector (0 to 3);
end record stimulus_record;
type stimulus_ptr is access stimulus_record;
variable bus_stimulus: stimulus_ptr;
bus_stimulus:=new stimulus_record (20 ns, B’0011’);
deallocate(count).
Дата добавления: 2020-04-08; просмотров: 609; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!