Если нет необходимости определять функции, процедуры и компоненты, то можно обойтись без package body. — КиберПедия 

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Если нет необходимости определять функции, процедуры и компоненты, то можно обойтись без package body.

2022-11-27 27
Если нет необходимости определять функции, процедуры и компоненты, то можно обойтись без package body. 0.00 из 5.00 0 оценок
Заказать работу

Итак, давайте напишем на VHDL библиотеку, в которую поместим имитатор процессора и модель ОЗУ. При этом, для упрощения кода воспользуемся библиотекой переопределений GLOBAL EASY.

· library ieee, EASY;

· use ieee.std_logic_1164.all;

· use ieee.std_logic_unsigned.all;

· use EASY.GLOBAL.all;

· entity mem is

· port(addr: in std5;

· cs, wr, oe: in std1;

· data: inout std8);

· end mem;

· ----------------------------------------

· architecture behave of mem is

· begin

· memproc: process(addr, cs, wr)

· type t_mem is array(0 to 31) of std8;

· variable mem_data: t_mem;

· begin

· data <= TRI8;

· if (cs = '1') then

· if (wr = '0' and oe = '1') then

· data <= mem_data(CONV_INTEGER(addr)) after 1 ns;

· elsif (wr = '1') then

· mem_data(CONV_INTEGER(addr)):= data;

· end if;

· else

· data <= TRI8 after 1 ns;

· end if;

· end process;

· end behave;

· ----------------------------------------

· library ieee, EASY;

· use ieee.std_logic_1164.all;

· use EASY.GLOBAL.all;

· package my_package is

· procedure IM_CPU(res: in std1; constant w: in std1; signal ale, wr, oe, cs: out std1; constant A: in std16; signal addr: out std16; constant D: in std8; signal data: out std8);

· component mem is

· port(addr: in std5;

· cs, wr, oe: in std1;

· data: inout std8);

· end component;

· ----------------------------------------

· component ERR_LED is

· port (

· res, wr, oe, cs, ale: in std1;

· addr: in std16;

· data: in std8;

· cs_ram, wr_ram, oe_ram: out std1;

· ERR1, ERR2: in std1;

· LED: out std1

· );

· end component;

· end my_package;

· ----------------------------------------

· package body my_package is

· procedure IM_CPU(res, w: in std1; signal ale, wr, oe, cs: out std1; constant A: in std16; signal addr: out std16; constant D: in std8; signal data: out std8) is

· begin

· if (res = '1') then -- Инициализация

· ale <= '0'; cs <= '0'; wr <= '0'; oe <= '0';

· addr <= GND16;

· data <= TRI8;

· elsif (w = '0') then -- Цикл чтения

· addr <= A;

· ale <= '0'; wr <= '0'; oe <= '0'; cs <= '0';

· data <= TRI8;

· wait for 10 ns;

· ale <= '1';

· wait for 15 ns;

· ale <= '0';

· wait for 20 ns;

· cs <= '1';

· wait for 10 ns;

· oe <= '1';

· wait for 30 ns;

· oe <= '0';

· wait for 15 ns;

· cs <= '0';

· else -- Цикл записи

· addr <= A;

· ale <= '0'; wr <= '1'; oe <= '0'; cs <= '0';

· data <= TRI8;

· wait for 10 ns;

· ale <= '1';

· wait for 15 ns;

· ale <= '0';

· wait for 30 ns;

· data <= D;

· wait for 10 ns;

· cs <= '1';

· wait for 15 ns;

· cs <= '0';

· wait for 10 ns;

· data <= TRI8;

· end if;

· end;

· end my_package;

Итак, мы написали на VHDL библиотеку, которую можем применить для тестирования нашего проекта, что мы и сделаем в следующем разделе.

ТЕСТИРОВАНИЕ

...

Ну вот мы и подошли к заключительной фазе - тестирование проекта. В принципе у нас для этого все готово и остается только соединить все ранее написаное на VHDL в тестовую модель (test bench). В путь:

· library ieee, EASY, work;

· use ieee.std_logic_1164.all;

· use ieee.std_logic_unsigned.all;

· use EASY.GLOBAL.all;

· use work.my_package.all; -- Присоединили нашу библиотеку

· entity test_bench is

· -- Пустой интерфейс

· end test_bench;

· ------------------

· architecture behave of test_bench is

· -- Тестовые сигналы

· signal res, wr, oe, cs, ale, cs_ram, wr_ram, oe_ram, ERR1, ERR2, LED: std1;

· signal addr: std16;

· signal data: std8;

· begin

· -- Это наша ПЛИС (Unit Unde Test)

· UUT1: ERR_LED port map (

· res => res, wr => wr, oe => oe, cs => cs, ale => ale,

· addr => addr, data => data,

· cs_ram => cs_ram, wr_ram => wr_ram, oe_ram => oe_ram,

· ERR1 => ERR1, ERR2 => ERR2, LED => LED);

· -- Это наша память

· UUT2: mem port map (

· addr => addr(4 downto 0),

· cs => cs_ram, wr => wr_ram, oe => oe_ram,

· data => data);

· process begin -- Лист чувствительности не нужен

· res <= '1'; ERR1 <= '0'; ERR2 <= '0';

· IM_CPU(res, '0', ale, wr, oe, cs, x"0000", addr, x"00", data); -- Вызываем имитатор

· wait for 100 ns;

· res <= '0';

· -- Пишем в память

· IM_CPU(res, '1', ale, wr, oe, cs, x"0000", addr, x"00", data);

· wait for 10 ns;

· ........

· IM_CPU(res, '1', ale, wr, oe, cs, x"001F", addr, x"1F", data);

· wait for 10 ns;

· -- Читаем из памяти

· IM_CPU(res, '0', ale, wr, oe, cs, x"0000", addr, x"00", data);

· wait for 10 ns;

· ........

· IM_CPU(res, '0', ale, wr, oe, cs, x"001F", addr, x"1F", data);

· wait for 10 ns;

· ERR1 <= '1'; -- Выдаем сигнал ошибки

· wait for 100 ns;

· IM_CPU(res, '0', ale, wr, oe, cs, x"0021", addr, x"3", data); -- Разрешаем индикацию

· wait;

· end process; -- Конец теста

· end behave;

Конечно, можно написать более мощный тест, на наша задача была рассмотреть принцип написания VHDL-моделей, и мы это сделали. Следующим шагом надо зарядить весь проект в какой-нибудь симулятор и наблюдать временные диаграмы. Этот шаг Вы можете освоить самостоятельно, т.к. освоение симуляторов не входило в наши планы (может в будущем...).

ЗАКЛЮЧЕНИЕ

...

Вот мы и закончили наш проект. Кому интересно, тот может скачать архив написанного нами VHDL-проекта. Еще раз следует отметить, что все изложенное здесь не является учебником по VHDL, а лишь является пособием. Полученный проект является небольшим кусочком реального большого проекта, который успешно работает на объектах нашей Родины. Но для написания большого проекта, целесообразно разбить его на несколько функциональных узлов. Очень часто такие узлы на VHDL описывают разные люди, а затем эти узлы объединяются в одно устройство.

Следует отметить еще один момент. При написании этой странички, в VHDL-код могла закрасться ошибка. Автор будет очень признателен если Вы сообщите об этом по адресу [email protected].

ПРИЛОЖЕНИЕ А

...


Поделиться с друзьями:

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

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

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.