Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz9_record.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.16 Mб
Скачать

3. Примеры vhdl проектов на базе данных типа record

Пример 3.1

library IEEE;

use IEEE.STD_LOGIC_1164.all;

Library Work;

use Work.rec_package1.all;

entity rec is

port( A: in my_rec;

B : out yo_rec);

end rec;

architecture rec_ar of rec is

begin

proc0 : process(A)

begin

if A.my_bit = '0' and A.my_int /= 2 then

B.yo_bit <= '1';

B.yo_char <= 'H';

B.yo_int <= 5;

elsif A.my_bit = '1' and A.my_int = 2 then

B.yo_bit <= '0';

B.yo_char <= 'S';

B.yo_int <= 3;

end if;

end process;

end rec_ar; Рис.3.1

Этот проект (проект Рис.3.1) иллюстрирует возможность использования объектов типа запись в качестве входных и выходных портов и вариант инициализации значений элементов записи. Возможность использования объектов типа запись в качестве входных и выходных портов может быть достигнута, если объявление типа record разместить в пакете. Поэтому в заголовке проекта имеется объявление об использовании библиотеки (Library Work;) и пакета use Work.rec_package1.all;

Определение пакета rec_package1 показано на Рис.3.2.

package rec_package1 is

type my_rec is record

my_bit : bit;

my_char : character;

my_int : integer range 0 to 15;

end record;

type yo_rec is record

yo_bit : bit;

yo_char : character;

yo_int : integer range 0 to 15;

end record;

end rec_package1; Рис.3.2

Т.к. в проекте рис.3.1. порты имеют составной тип, то возникает вопрос: «Как промоделировать работу такого проекта?» Такой вопрос возникает вследствие того, что САПР Active HDL 5.1 ДО Stimulators позволяет создавать стимулирующие воздействия только для скалярных портов и портов вида одномерный массив. Для разрешения проблем моделирования проектов с сложными комплексными портами следует использовать возможности Active HDL 5.1 по автоматическому созданию из описания исследуемого проекта испытательного стенда (TestBench). Испытательный стенд (TestBench) конструктору помогает создавать позволяет специальный Мастер Испытательного Стенда (Test Bench Wizard ). Для вызова ДО Test Bench Wizard, после того как проверяемый проект успешно откомпилирован, следует щелкнуть в ДО Design Browser ПКМ по файлу с проектом и из появившегося локального меню выбрать команду !!!!!!!!!!!!. Этой командой будет открыто 1-е ДО Мастер Испытательного Стенда. Заполняя боксы в ДО нужной информацией нажимайте кнопку Next. На конечной стадии Test Bench Wizard создаст VHDL шаблон испытательного стенда.

Для исследуемого нами проекта (entity rec) VHDL шаблон имеет вид Рис.3.3. В этом шаблоне следует дописать только строки с требуемыми стимулирующими воздействиями (эти строки на Рис.3.3 прокомментированы словом пользователь)

library IEEE;

use work.rec_package1.all;

use ieee.std_logic_1164.all;

entity rec_tb is

end rec_tb;

architecture TB_ARCHITECTURE of rec_tb is

-- Component declaration of the tested unit

component rec

port(

A : in my_rec;

B : out yo_rec );

end component;

-- Stimulus signals - signals mapped to the input and inout ports of

--tested entity

signal A : my_rec;

Observed signals - signals mapped to the output ports of tested

--entity

signal B : yo_rec;

-- Add your code here ...

begin

-- Unit Under Test port map

UUT : rec

port map (

A => A,

B => B

);

-- Add your stimulus here ...

A.my_bit <= '0', '1' after 50 ns, '0' after 100 ns; -- пользователь

A.my_int <= 12, 2 after 50 ns, 9 after 100 ns; -- пользователь

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_rec of rec_tb is

for TB_ARCHITECTURE

for UUT : rec

use entity work.rec(rec_ar);

end for;

end for;

end TESTBENCH_FOR_rec;

Рис.3.3

После введения пользовательских строк с требуемыми стимулирующими воздействиями сохраните проект испытательного стенда в файле (например, в файле rec_tb.vhd) и откомпилируйте его. После успешной компиляции файла испытательного стенда вызовите редактор временных диаграмм. При активной закладке Structure ДО Design Browser перетащите сигналы в зону имен сигналов редактора временных диаграмм. Запустите процесс моделирования.

Результаты моделирования работы проекта rec.vhd посредством испытательного стенда (rec_tb.vhd) показаны на Рис.3.4. Результаты моделирования сохранены в файле rec_test.awf.

Рис.3.4

Общая структура проекта, когда для моделирования использовался испытательный стенд, показана на рис.3.5 и рис.3.6.

рис.3.5

Рис.3.6

Приложение 1. Некоторые дополнительные замечания о записях

Записи, как и массивы, принадлежат к составным типам. Однако они имеют два различия: элементы записи могут иметь различные типы, и они обозначаются именами вместо индексов. Имена элементов всегда пишутся без круглых скобок и отделяются от общего имени записи точкой. Ссылка на элемент записи имеет следующий вид:

record_name.element_name

Первичное назначение записей состоит в том, что они должна группировать вместе различные параметры отдельных объектов. Каждый такой объект обозначается отдельным именем, которое делает код более компактным и читаемым.

Не каждая запись может быть синтезирована, но большинство САПР способны справиться с записями, состоящими из типов bit, bit_vector, boolean и integer.

!!!!!!!!!!!!!!!!!!!!!!!!Добавить в описание конечкых!!!!!!!!!!!!!!!!!!!!!!!!!!!

Enumeration Type - Тип Перечисления

Формальное Определение:

Тип Перечня - тип, чьи значения определены в списке (перечислении) их явно. Эти значения типа представляются литералами перечисления (или идентификаторы или символьные литералы).

Syntax:

type type_name is (type_element, type_element, ...);

Описание:

Тип перечня - тип с упорядоченным набором значений, называемых литералами перечня и состоящий из идентификаторов и символьных литералов. Каждый из литералов перечня должен быть уникален внутри данного типа объявления, но различные типы перечня могут использовать те же самые литералы (пример 1). В этом случае, упоминается, что такие литералы перегружены. Когда такой литерал вызван в исходном тексте, его определение следует из контекста, перечня из которого он произошел.

Все перечислимые значения упорядочиваются и каждый из них имеет числовое (целочисленное) значение, назначенное ему. Номер указывает позицию литерала. Самый первый литерал в определении имеет нулевую позицию и каждый последующий увеличивается на единицу от его предшественника (пример 2).

Пакет Стандарт содержит объявления отдельных предопределенных типов перечня: BIT, BOOLEAN, CHARACTER, SEVERITY_LEVEL, FILE_OPEN_KIND and FILE_OPEN_STATUS. Кроме этого пакет Std_Logic_1164 определяет другой тип перечня, STD_ULOGIC.

Примеры:

Example 1

type NotGood is (X, '0', '1', X); -- illegal

type MyBit is (L, H);

type Test is ('0', '1', L, H);

Тип NotGood - запрещенное объявление, поскольку литерал X появляется дважды в том же самом объявлении. С другой стороны не имеется ничего неправильного в использовании L (LOW) и H (HIGH) дважды, потому что они используются в двух различных объявлениях.

Example 2

type FSM_States is (Init, Read, Decode, Execute, Write);

Тип FSM_States определяет пять возможных значений, которые пронумерованы от 0 до 4: номер позиции Init - 0, позиция Read - 1, Decode- 2, Execute - 3, и Write - 4.

Важные примечания:

  • Запрещенно определить тип перечня с диапазоном.

  • Принимается, что значения определены в порядке возрастания. По этой причине рекомендует упорядочить литералы таким способом, что значение по умолчанию является первым (это упоминается через атрибут 'left').

  • Объекты типов перечня - обычно synthesizeable.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]