VHDL предупреждение "Предупреждение (13024): выходные контакты застряли на VCC или GND" на критически важном выходе

В настоящее время я работаю в проекте, где я должен взять описание высокого уровня алгоритма Фибоначчи (C) и преобразовать его в модуль RTL, написанный на VHDL. Для этого необходимо преобразовать такое высокоуровневое описание в синтезируемый VHDL-код, т. Е. Необходимо написать VHDL-код для канала данных и конечного автомата (FSM), в методологии, широко известной в прототипировании IC.

Я описал путь к данным и FSM в двух отдельных файлах и создал их в третьем как VHDL-КОМПОНЕНТЫ, определяющие модуль Фибоначчи. Используя программное обеспечение Quartus II, "Анализ и синтез" выполняется без ошибок и с очень раздражающим предупреждением "Предупреждение (13024): выходные контакты застряли на VCC или GND". Что делает это предупреждение действительно раздражающим, так это то, что оно появляется для самого важного вывода модуля Фибоначчи, который является его конечным результатом. Этот вывод называется "d_o" в моем коде.

Выходной вывод "data_o" происходит от компонента канала данных, который также описывается с использованием КОМПОНЕНТОВ, таких как сумматоры, вычитатели, регистры и мультиплексоры. Скомпилируя (анализ и системный метод) только путь данных, предупреждение снова появляется для того же вывода.

Я действительно не знаю, что не так с моим кодом, надеюсь, вы, ребята, можете мне помочь. Код представлен ниже:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL; 
USE IEEE.NUMERIC_STD.ALL;

ENTITY datapath IS
GENERIC (NUMBITS    : NATURAL := 32);
PORT (  SIGNAL rst          : IN STD_LOGIC;
        SIGNAL clk          : IN STD_LOGIC;

        ---Sinal de entrada---
        SIGNAL data_in      : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);

        ---Sinais de seleção---
        SIGNAL di_sel       : IN STD_LOGIC;
        SIGNAL nf_sel       : IN STD_LOGIC;
        SIGNAL na1_sel      : IN STD_LOGIC;
        SIGNAL na2_sel      : IN STD_LOGIC;
        SIGNAL io_sel       : IN STD_LOGIC;
        SIGNAL so0_sel      : IN STD_LOGIC;
        SIGNAL so1_sel      : IN STD_LOGIC;

        ---Sinais load---
        SIGNAL nf_ld        : IN STD_LOGIC;
        SIGNAL di_ld        : IN STD_LOGIC;
        SIGNAL na1_ld       : IN STD_LOGIC;
        SIGNAL na2_ld       : IN STD_LOGIC;
        SIGNAL do_ld        : IN STD_LOGIC;

        ---Sinais das comparações---
        SIGNAL di_eq_0      : OUT STD_LOGIC;
        SIGNAL di_eq_1      : OUT STD_LOGIC;

        ---Sinais de saída---
        SIGNAL irq_o        : OUT STD_LOGIC;
        SIGNAL status_o     : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
        SIGNAL d_o          : OUT STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0));
END datapath;


ARCHITECTURE behavior OF datapath IS
---Componentes do datapath---   
COMPONENT somador
    GENERIC (NUMBITS    : NATURAL := 32);
    PORT (  SIGNAL x    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL y    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL XY   : OUT STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0));
END COMPONENT;

COMPONENT subtrator
    GENERIC (NUMBITS    : NATURAL := 32);
    PORT (  SIGNAL x    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL y    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL XY   : OUT STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0));
END COMPONENT;

COMPONENT reg
    GENERIC (NUMBITS    : NATURAL := 32);
    PORT( SIGNAL rst    : IN STD_LOGIC;
          SIGNAL clk    : IN STD_LOGIC;
          SIGNAL load   : IN STD_LOGIC;
          SIGNAL d      : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
          SIGNAL q      : OUT STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0));
END COMPONENT;

COMPONENT multiplexor2a1
    GENERIC (NUMBITS    : NATURAL := 32);
    PORT (  SIGNAL a    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL b    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL sel  : IN STD_LOGIC;
            SIGNAL f    : OUT STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0));
END COMPONENT;

COMPONENT igual
    GENERIC (NUMBITS    : NATURAL := 32);
    PORT (  SIGNAL a    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL b    : IN STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
            SIGNAL eq   : OUT STD_LOGIC);
END COMPONENT;

---Sinais de conexão---
SIGNAL mux2di           : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL mux2nf           : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL mux2na1          : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL mux2na2          : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);

---Saidas dos registradores---  
SIGNAL nf_o             : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL di_o             : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL na1_o            : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL na2_o            : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);

---Saidas do somador e do subtrator---
SIGNAL a_result         : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL s_result         : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);

---Constatntes---   
SIGNAL one              : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);
SIGNAL zero             : STD_LOGIC_VECTOR(NUMBITS-1 DOWNTO 0);

BEGIN
zero <= "00000000000000000000000000000000";
one  <= "00000000000000000000000000000001";

---Lógica para irq_o---
WITH io_sel SELECT
    irq_o <= '0' WHEN '0', '1' WHEN OTHERS;

---Lógica para status_o---
WITH so0_sel SELECT
    status_o(0) <= '0' WHEN '0', '1' WHEN OTHERS;
WITH so1_sel SELECT
    status_o(1) <= '0' WHEN '0', '1' WHEN OTHERS;

---Multiplexadores(4)---
mux1: multiplexor2a1 GENERIC MAP(NUMBITS) PORT MAP (data_in, s_result, di_sel, mux2di);
mux2: multiplexor2a1 GENERIC MAP(NUMBITS) PORT MAP (one, nf_o, nf_sel, mux2nf);
mux3: multiplexor2a1 GENERIC MAP(NUMBITS) PORT MAP (zero, na1_o, na1_sel, mux2na1);
mux4: multiplexor2a1 GENERIC MAP(NUMBITS) PORT MAP (a_result, di_o, na2_sel, mux2na2);

---Registradores(5)---  
d_i: reg GENERIC MAP (NUMBITS) PORT MAP (rst, clk, di_ld, mux2di, di_o);
na1: reg GENERIC MAP (NUMBITS) PORT MAP (rst, clk, na1_ld, mux2na1, na1_o);
na2: reg GENERIC MAP (NUMBITS) PORT MAP (rst, clk, na2_ld, mux2na2, na2_o);
nf:  reg GENERIC MAP (NUMBITS) PORT MAP (rst, clk, nf_ld, mux2nf, nf_o);
do:  reg GENERIC MAP (NUMBITS) PORT MAP (rst, clk, do_ld, nf_o, d_o);

---Somador---
a: somador GENERIC MAP(NUMBITS) PORT MAP (na1_o, na2_o, a_result);

---Subtrator---   
s: subtrator GENERIC MAP(NUMBITS) PORT MAP (di_o, one, s_result);

---Comparadores (2)---
eq0:  igual GENERIC MAP(NUMBITS) PORT MAP (di_o, zero, di_eq_0);
eq1:  igual GENERIC MAP(NUMBITS) PORT MAP (di_o, one, di_eq_1);
END ARCHITECTURE;

И предупреждение:

"Warning (13024): Output pins are stuck at VCC or GND"

2 ответа

Эта ошибка отображается, потому что один или несколько ваших выходов постоянно высокий или низкий во время моделирования. Обычно эта проблема возникает, когда testbench не учитывает все выходные данные, а некоторым назначены значения по умолчанию. Если это так, то это никак не повлияет на ваш дизайн.

Однако, если другой вывод, которому дают допустимый ввод, застрял в 0 или один, то код должен быть проверен на ошибки. В этом случае также отредактируйте свой вопрос, чтобы было ясно, что код должен проверяться на наличие логических ошибок.

Альтера говорит это по этому вопросу;

Другие вопросы по тегам