在端口映射中使用 when...else 语句
using when...else statment in port map
我找不到任何有关在端口映射中使用 when...else 语句的信息。这似乎是一种正确的形式,但是当我编译时,我看到这样的错误:
Error (10500): VHDL syntax error at Device.vhd(68) near text "when";
expecting ")", or ","
这可能是一个愚蠢的错误,因为我对 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
);
一方面,您的箭头指向错误的方向。对于端口关联,无论输入或输出端口如何,始终使用 =>
。
其次: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
);
取一个信号temp<= SDA when RD='1' else 'Z';
然后分配 sda_read_data <= temp;
我找不到任何有关在端口映射中使用 when...else 语句的信息。这似乎是一种正确的形式,但是当我编译时,我看到这样的错误:
Error (10500): VHDL syntax error at Device.vhd(68) near text "when"; expecting ")", or ","
这可能是一个愚蠢的错误,因为我对 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
);
一方面,您的箭头指向错误的方向。对于端口关联,无论输入或输出端口如何,始终使用 =>
。
其次: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
);
取一个信号temp<= SDA when RD='1' else 'Z'; 然后分配 sda_read_data <= temp;