vhdl - 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。你对这种奇怪的行为有解释吗?
仅单独模拟处理元件时,不会出现这种奇怪的行为。它使用相同的输入计算正确的符号和幅度。但是在整个设计中实现(这样的处理元素的数组),它在这个时钟周期中以这种方式运行,从而搞砸了以下计算。但即使在模拟具有相同输入的处理元素数组时,处理元素也会发挥应有的作用。因此很难给你一个最小的可重现的例子。
谢谢你的帮助!
解决方案
推荐阅读
- php - 如何将带有查找字段的潜在客户发送到动态 CRM(使用 PHP 和 AlexaCRM 工具包)?
- android - 将服务器图像下载到安卓内存卡
- lua - Lua 函数:如何使用表作为函数参数和自记录代码
- tensorflow - 为什么 deeplab v3+ 模型对图像边界外的像素感到困惑?
- asp.net-core - 从客户端清空多项选择
- sql - 关于 CockroachDB 上表创建错误的说明
- javascript - 当其 id 具有特殊字符时,jqGrid 寻呼机不显示
- ruby-on-rails - 局部形式的当地人-rails 5
- java - 如何将数据与文件一起发送?
- c# - 将文件从一个 API 端点流式传输到另一个 API 端点