Вам необходимо изменить карту портов uut
, чтобы вместо R_in
она имела отдельные порты in0 - in7
в соответствии с определением компонента mux8_1
.Затем сопоставьте in0 - in7
сигналы тестового стенда непосредственно с этими портами:
uut: mux8_1 port map(
...
in0 => in0,
in1 => in1,
...
);
Или, если вы хотите сохранить сигнал R_in
, карта портов выглядит следующим образом:
uut: mux8_1 port map(
...
in0 => R_in(0),
in1 => R_in(1),
...
);
Это назначениезначение R_in
в вашем тестовом стенде равно неверно:
R_in<="01010101";
R_in
определено как тип t_array_mux
, поэтому ему нельзя присвоить значение битового вектора.Он должен быть присвоен массиву из 32-битного std_logic_vector
.Эта строка действительно должна быть полностью удалена, так как вы уже назначаете R_in
в другом месте вне процесса.Несколько назначений вызовут конфликт сигналов.
Вы инициализируете R_in
в своем тестовом стенде следующим образом:
signal R_in:t_array_mux:=(others=>'0');
Ключевое слово others
, так как вы использовали, оно будет работать только нафизическое лицо std_logic_vector
.Вам нужно вложить others
для вашего массива std_logic_vector
:
signal R_in:t_array_mux:=(others=>(others=>'0'));
Вы захотите присвоить значения своим 32-битным in0 - in7
сигналам, чтобы вы могли видеть выходные данные вашего изменения мультиплексорав сим.Они могут быть назначены вне процесса стимулирования.Вы можете назначить их, используя шестнадцатеричное обозначение (x перед "") или просто двоичное:
in0 <= x"12345678"; --hex
или
in0 <= "00010010001101000101011001111000"; --binary
Ваш процесс стимуляции выглядит хорошо.При изменении Rs
вы ожидаете увидеть различные входные значения на R_out
.Вы можете добавить один wait;
в конце процесса, или процесс будет повторяться до конца sim.
Компонентные порты с пользовательскими типами
В качестве альтернативы, вы можете port map
ваш R_in
сигнал тестового стенда напрямую к порту R_in
на вашем компоненте, как вы сделали, но это займет немного больше работы.Ваше определение компонента mux8_1
не имеет порта R_in
.Вы можете добавить порт типа t_array_mux
с именем R_in
, если вы определите тип t_array_mux
в пакете , который затем включите в файлы компонентов и тестового набора
library work;
use work.your_package_name.all;
в дополнение к library IEEE
и т. д. Затем вы можете использовать тип t_array_mux
в определении порта вашего компонента:
ENTITY mux8_1 IS
PORT(Rs : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
R_in : IN T_ARRAY_MUX; --User-defined port type
R_out : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
);
END mux8_1;
Это позволит вам сделать сопоставление портов вашего uut
так, как выв настоящее время есть это.Вам нужно будет добавить пакет в список проекта или компиляции в любом используемом вами инструменте.