VHDL: Почему '0' XOR '0' = '1' в моем дизайне - PullRequest
0 голосов
/ 21 апреля 2020

Я разработал элемент обработки, который должен иметь возможность вычислять две разные функции, в которых L_a, L_b и u_s являются операндами. B_l_i выбирает, будет ли вычислена та или иная функция. Реализованный в моем окончательном проекте, он действует не так, как предполагается: проблемная часть c связана с вычислением функции (L_a) (- 1) ^ (u_s) + (L_b), что приводит к вычислению 1 + 1 = -2. Для определения знака выхода используется sign_g в этом случае.

entity pe is
GENERIC (
    q: integer := 8 );
PORT(
    L_a_abs: IN std_logic_vector (q-2 DOWNTO 0);    --Input LLR: magnitude
    L_b_abs: IN std_logic_vector(q-2 DOWNTO 0);     --Input LLR: magnitude
    L_a_sign: IN Std_logic;                         --Input LLR: Sign
    L_b_sign: IN Std_logic;                         --Input LLR: SIGN
    u_s: IN std_logic;                              --Partial SUM
    B_l_i: IN std_logic;                            --Select f or g
    L_out_abs: OUT std_logic_vector(q-2 DOWNTO 0);  --Output LLR: magnitude
    L_out_sign: OUT STD_logic                       --Output LLR: sign
);
end pe;

...




--G-Function:
comp <= (L_a_abs >= L_b_abs);
sign_g <= L_b_sign when (comp = FALSE) else
          dbg_xor;

dbg_xor <= L_a_sign XOR u_s; 

Я ожидаю, что sign_g и dbg_xor будут равны '0', когда L_a_sign = '0' и u_s = '0'. Но во время симуляции, показанной на рисунке ниже, dbg_xor = '1'. Поэтому знак вывода неверен. В схеме c это простой XOR с входами L_a_sign и u_s и выходом dbg_xor. У вас есть объяснение этому странному поведению?

During Simulation

При моделировании только одного элемента обработки это странное поведение не отображается. Он вычисляет правильный знак и величину с теми же входными данными. Но реализованный во всей конструкции (массив таких элементов обработки), он действует таким образом в этом цикле тактовой частоты, что приводит к ошибкам в следующих вычислениях. Но даже при моделировании массива элементов обработки с одними и теми же входными данными, элемент обработки действует как следует. Поэтому трудно привести минимальный воспроизводимый пример.

Спасибо за помощь!

...