
- •Введение
- •Классы и объекты
- •Constant - константа.
- •Variable - переменная;
- •Signal - сигнал;
- •Комментарии
- •Типы данных
- •Подробно о std_logic
- •О массивах в языке vhdl
- •Операции в языке vhdl
- •Операторы vhdl
- •Интерфейс
- •Inout - двунаправленный порт (чтение и запись);
- •Архитектура
- •Часть, содержащую описания (декларации);
- •Часть, содержащую исполняемые операторы.
- •Процессы
- •Атрибуты
- •Подпрограммы vhdl
- •Библиотеки vhdl
- •Тестирование
- •Im_cpu(res, '0', ale, wr, oe, cs, X"0000", addr, X"00", data); -- Вызываем имитатор
- •Im_cpu(res, '0', ale, wr, oe, cs, X"0021", addr, X"3", data); -- Разрешаем индикацию
- •Заключение
- •Приложение а
Тестирование
...
Ну вот мы и подошли к заключительной фазе - тестирование проекта. В принципе у нас для этого все готово и остается только соединить все ранее написаное на 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-код могла закрасться ошибка. Автор будет очень признателен если Вы сообщите об этом по адресу inbox@allhdl.ru.