Я ничего не могу найти об использовании оператора when ... else в карте портов. Кажется, это правильная форма, но когда я компилирую, я вижу такую ошибку:
Ошибка (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. Она специфична для назначения сигнала when / else: 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
);
Возьмите одну температуру сигнала <= SDA, когда RD = '1' иначе 'Z'; затем назначьте sda_read_data <= temp;
Похожие вопросы
Новые вопросы
vhdl
VHDL (язык описания оборудования VHSIC) - это язык, используемый в электронном дизайне для описания цифровых систем, таких как FPGA (программируемые пользователем вентильные матрицы) и IC (интегральные схемы).