Мультиплексор:
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
PACKAGE mux2to1_package IS
COMPONENT mux2to1
PORT ( s, w0, w1: IN STD_LOGIC ;
f : OUT STD_LOGIC ) ;
END COMPONENT ;
END mux2to1_package ;
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY mux2to1 IS
PORT ( s, w0, w1 : IN STD_LOGIC ;
f : OUT STD_LOGIC ) ;
END mux2to1;
ARCHITECTURE Behavior OF mux2to1 IS
BEGIN
PROCESS(s,w0,w1)
BEGIN
IF s='0' THEN
f <= w0;
ELSE
f <= w1;
END IF;
END PROCESS;
END Behavior ;
Код тестового стенда:
library ieee;
use ieee.std_logic_1164.all;
use work.mux2to1_package.all;
ENTITY tb IS
END tb;
ARCHITECTURE arch OF tb IS
SIGNAL s : std_logic := '0';
SIGNAL w0, w1 : std_logic := '0';
SIGNAL f : std_logic := '0';
BEGIN
UUT : ENTITY work.mux2to1 port map(s => s, w0 => w0, w1 => w1, f => f);
PROCESS
BEGIN
s <= 'X';
w0 <= 'X';
w1 <= 'X';
wait for 1 ns;
s <= '0';
w0 <= '1';
w1 <= '0';
wait for 1 ns;
s <= '1';
w0 <= '0';
w1 <= '1';
wait for 1 ns;
s <= '0';
w0 <= '0';
w1 <= '1';
wait for 1 ns;
assert false report "End of test";
wait;
END PROCESS;
END arch;
Как упомянуто user1155120, вы не были осторожныво время ассоциации сигналов в карте портов для mapping
.В сущности mux2to1 вы перечислили s, w0, w1 и f в указанном порядке.В карте портов вы использовали позиционную ассоциацию, но вы не сделали ассоциацию должным образом.Способ user1155120 сделал это правильно, если вы хотите использовать позиционную связь.Если вы хотите сделать это, используя сопоставление имен, как я делал в коде выше, нет необходимости перечислять сигналы в том же порядке, в котором они перечислены в сущности (перечислены в том же порядке в том смысле, что вы смотрите, чтоделается по какому сигналу).При использовании ассоциации имен вы можете сделать следующее:
UUT : ENTITY work.mux2to1 port map( f => f, w0 => w0, w1 => w1, s => s,);
Вы можете перепутать их порядок.
Также в разделе Код во время сопоставления портов онкажется, вы пытаетесь использовать векторы, но они нигде не установлены, поэтому вы не можете их использовать.
Как упоминал Юрген, вы используете операторы if без процесса , который был исправлен в приведенном выше коде.
Краткое примечание об использовании пакета: при написании testbench, как я делал, или при использовании этого пакета в любом другом VHDL-дизайне, необходима следующая строка:
use work.mux2to1_package.all;
Также похвально, что выиспользуя пакет структуру, но на этом уровне я не думаю, что это необходимо.Вы могли бы просто объявить ENTITY .