首页 > 解决方案 > VHDL:为什么在我的设计中是 '0' XOR '0' = '1'

问题描述

我设计了一个处理元件,它应该能够计算两个不同的函数,它们以 L_a、L_b 和 u_s 作为操作数。B_l_i 选择是否计算一个或另一个函数。在我的最终设计中实现它的行为并不像预期的那样:有问题的部分是在计算函数 (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; 

当 L_a_sign = '0' 和 u_s ='0' 时,我希望 sign_g 和 dbg_xor 为 '0'。但在仿真过程中,如下图所示 dbg_xor = '1'。因此输出的符号是错误的。在原理图中,它是一个简单的 XOR,输入 L_a_sign 和 u_s 以及输出 dbg_xor。你对这种奇怪的行为有解释吗?

模拟期间

仅单独模拟处理元件时,不会出现这种奇怪的行为。它使用相同的输入计算正确的符号和幅度。但是在整个设计中实现(这样的处理元素的数组),它在这个时钟周期中以这种方式运行,从而搞砸了以下计算。但即使在模拟具有相同输入的处理元素数组时,处理元素也会发挥应有的作用。因此很难给你一个最小的可重现的例子。

谢谢你的帮助!

标签: vhdlsimulationxilinxvivado

解决方案


推荐阅读