为什么Quartus II软件将我的双向引脚转换为仅输出引脚?-Altera-Intel社区-FPGA CPLD-ChipDebug

为什么Quartus II软件将我的双向引脚转换为仅输出引脚?

Quartus®II6.0及更高版本软件更严格地综合VHDL方向信号。由于它强制执行VHDL规则,Quartus II软件将错误编码的双向缓冲区转换为输出引脚。

例如,如果您实现如下代码所示的双向缓冲器,Quartus II软件将综合一个输出引脚(从6.0版开始)。

process(mdio_out,mdio_oe)
begin
if (mdio_oe = '1') then
mac_mdio <= mdio_out;
else
mac_mdio <= 'Z';
end if
end process;

mdio_oe <= NOT(mdio_oe_n);
test_out <= mac_mdio and test;
mii_mdio <= mac_mdio;

如果mac_mdio是一个信号而mii_mdio是双向端口,则上面的最后一个赋值是方向性的。如上所述,数据不可能 mii_mdio 流向 mac_mdio。从6.0版开始,Quartus II软件通过在mac_mdio和mii_mdio之间插入缓冲区来强制执行此VHDL赋值的方向性。该缓冲区在RTL Viewer中显示为与三态缓冲区串联的方向缓冲区,并且预期的双向引脚(mii_mdio)仅作为输出综合。

早期版本的Quartus II软件不强制执行这些类型的分配的方向性,将上面的代码综合为双向引脚。

要符合VHDL标准,请删除上例中的最后一个信号赋值语句,并按如下方式编写代码:

process(mdio_out,mdio_oe)
begin
if (mdio_oe = '1') then
mii_mdio <= mdio_out;
else
mii_mdio <= 'Z';
end if;
end process;

mdio_oe <= NOT(mdio_oe_n);
test_out <= mii_mdio and test;

请登录后发表评论

    没有回复内容