Vhdl 在端口映射中使用when…else语句
我在港口地图上找不到关于使用when…else Station的任何信息。这似乎是一个正确的形式,但当我编译时,我看到如下错误: 错误(10500):设备上的VHDL语法错误。vhd(68)靠近文本“when”; 应为“),或“,” 这可能是一个愚蠢的错误,因为我对vhdl还不熟悉。你能给我一个提示吗?我将非常感谢任何帮助。 以下是代码,SDA端口为inout类型:Vhdl 在端口映射中使用when…else语句,vhdl,fpga,Vhdl,Fpga,我在港口地图上找不到关于使用when…else Station的任何信息。这似乎是一个正确的形式,但当我编译时,我看到如下错误: 错误(10500):设备上的VHDL语法错误。vhd(68)靠近文本“when”; 应为“),或“,” 这可能是一个愚蠢的错误,因为我对vhdl还不熟悉。你能给我一个提示吗?我将非常感谢任何帮助。 以下是代码,SDA端口为inout类型: com : I2C_com port map ( reset_en => reset_en,
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
);
com:I2C\u com端口映射(
重置\u en=>重置\u en,
I2C_时钟_端口=>SCL,
时钟=>clk,
sda\u读取数据sda
);
首先,你的箭头指向错误的方向。对于端口关联,无论输入或输出端口如何,始终使用=>
第二:when/else构造不是一个类似于a?x:y
的表达式,它是特定于when/else信号赋值的:
您需要使用中间信号或适配器功能:
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';
首先,你的箭头指向错误的方向。对于端口关联,无论输入或输出端口如何,始终使用
=>
第二:when/else构造不是一个类似于a?x:y
的表达式,它是特定于when/else信号赋值的:
您需要使用中间信号或适配器功能:
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';
使用一个信号温度使用一个信号温度使用一个中间信号。@Brian Drummond谢谢!使用中间信号。@Brian Drummond谢谢!谢谢你的帮助!谢谢你的帮助!