Quartus®II8.1软件存在一个问题,可能导致VHDL三态信号被错误地推断为多路复用器。如果信号连接到器件输出引脚,则编译结果可能导致引脚驱动到电路板而不是充当三态输出。
仅当VHDL设计实体包含未使用的输出端口且默认值包含'Z'
(即,输出端口在实体声明中具有'Z'
三态分配但未明确赋值给设计中的信号)。当问题发生时,封闭架构中的行为语句描述的任何推断的三态逻辑将被错误地推断为多路复用器。问题仅限于体系结构中的单个层次结构,而不是任何实例化的层次结构,除非其他实体具有相同类型的未使用输出端口,其默认值包含'Z'
。有关说明此问题的小型设计,请参阅本解决方案末尾的示例。
如果受影响的三态信号是内部三态连接,则需要推断多路复用器,因为Altera器件中没有内部三态逻辑。但是,如果三态实体端口为器件上的I / O引脚供电,则此软件行为可能导致未使用的输出引脚驱动到电路板而不是充当三态输出,这可能导致系统中的信号争用。
要解决此问题并推断定义的三态行为,请使用设计中的信号分配将未使用的输出引脚显式分配为三态值,而不是依赖于默认语句。例如,使用unused_output <= 'Z';
类的语句unused_output <= 'Z';
或unused_output <= (others => 'Z');
有一个补丁可以解决Quartus II软件8.1中的这个问题。下载Windows补丁0.34或Linux补丁0.34 ,然后安装补丁并重新编译设计。
此软件问题也将在Quartus II软件的未来版本中修复。
以下是受此问题影响的示例设计:
library ieee;
use ieee.std_logic_1164.all;
entity example is
port (
en : in std_logic;
data : in std_logic;
unused_output: out std_logic := 'Z';
other_output : out std_logic);
end example;
architecture rtl of example is
begin
-- other_output should be tri-state but won't be tri-state due to this problem
other_output <= data when en = '1' else 'Z';
end rtl;
要使用Quartus II软件8.1在上面的设计示例中推断出两个输出引脚的正确三态行为,请在架构中添加以下语句:
unused_output <= 'Z';
没有回复内容