При тестировании с помощью тестового стенда в VHDL мы сопоставляем ввод-вывод из тестируемого проекта с вводом-выводом тестового стенда.
Для меня было бы разумно дать вводу нашего проекта некоторые сгенерированные значения из тестового стенда, а затем наблюдать за выводом проекта и проверять, соответствует ли он тому, что мы ожидаем. (Как, например, в модульном тестировании)
Но при определении архитектуры тестового стенда:
architecture behavior of tb is
signal tb_input : std_logic := '0';
signal tb_output: std_logic := '0';
-- Component decl. for the Unit under Test (UUT)
component design_to_test is
port (
input : in std_logic;
output: out std_logic);
end component design_to_test;
begin
-- Here we initiate the UUT
UUT : design_to_test
port map (
input => tb_input
-- this is what I don't understand. Why are we
giving the input of our design to the testbench?
output => tb_output
-- this makes sense to me as we have to observe the
the output of our design.
);
-- main testing
end behavior;
Так что, по сути, я не понимаю, как мы используем входные данные тестового стенда. Почему бы нам не определить некоторые входные данные, а затем передать их дизайну для оценки?
На самом деле вам нужно стимулировать вход вашего UUT.
В настоящее время ваш испытательный стенд не завершен.
Добавьте некоторую последовательность, чтобы присвоить разные значения tb_input
.
А затем добавьте несколько проверок того, что tb_output
несет ожидаемые значения.
port map
просто сообщает симулятору (или синтезатору, если вы синтезируете), какие порты подключены к каким сигналам внешнего уровня.
Итак, input => tb_input
нет означает, что данные передаются от input
к tb_input
. Там написано, что порт input
должен быть подключен к сигналу tb_input
. Направления данных получены из ключевых слов in
и out
.
Посмотрите на это как на гнездо IC и подключенные цепи, которые являются сигналами внешнего уровня, и IC, подключенный к сокету, и его контакты, которые являются портами вашего компонента.
@ stht55 input
является входом из-за ключевого слова in
. tb_input
не имеет направления: это сигнал, провод, дорожка на плате. Если вы подключите его к порту Режимin
, то этот порт является входным и по этому сигналу будет управляемый. Если вы подключите его к порту Режимout
, то этот порт будет выходным и будет водить машину этого сигнала.
Спасибо, это имеет больше смысла. Но что касается «Направления данных получены из ключевых слов входа и выхода». часть:
input => tb_input
оба имеют типin
. Почему тогда у них нет типаin
иout
?