Используя когда... остальное в карте портов
Я не могу найти что-либо об использовании когда... остальное в карте портов. Кажется, это правильная форма, но когда я компилирую, я вижу такую ошибку:
Ошибка (10500): синтаксическая ошибка VHDL в Device.vhd(68) рядом с текстом "когда"; ожидая ")" или ","
Это, вероятно, глупая ошибка, потому что я все еще свеж в VHDL. Не могли бы вы дать мне подсказку об этом? Я был бы очень благодарен за любую помощь. Вот код и порт SDA типа inout:
com : I2C_com port map (
reset_en => reset_en,
I2C_clock_port => SCL,
clk => clk,
sda_read_data <= SDA when RD ='1' else 'Z',
sda_write_data => SDA
);
2 ответа
Во-первых, ваша стрелка указывает в неправильном направлении. Для ассоциаций портов всегда используйте =>
независимо от портов ввода или вывода.
Второе: конструкция when / else не является выражением типа a?x:y
находится в C. Это относится к назначению сигнала когда / еще: http://www.sigasi.com/content/signal-assignments-vhdl-withselect-whenelse-and-case
Вам нужно либо использовать промежуточный сигнал, либо использовать функцию адаптера:
com : I2C_com port map(
reset_en => reset_en,
I2C_clock_port => SCL,
clk => clk,
sda_read_data => SDA_or_z,
sda_write_data => SDA
);
SDA_or_z <= SDA when RD = '1' else 'Z';
или же:
com : I2C_com port map(
reset_en => reset_en,
I2C_clock_port => SCL,
clk => clk,
sda_read_data => myFunction(SDA,RD),
sda_write_data => SDA
);
Возьмите один сигнал temp<= SDA, когда RD='1', иначе 'Z'; затем назначьте sda_read_data <= temp;