VHDL计算,不同但仍然相同

时间:2012-05-18 11:14:25

标签: vector vhdl xilinx

很难解释标题中的问题,所以请继续阅读。

我有一个项目,我们正在实施一个索贝尔过滤器。首先,使用索贝尔计算,图像不能正常工作

Gx <= ("000" & p3-p1)+(("00" & p6 & '0')-("00" & p4 & '0'))+("000" & p9-p7);
Gy <= ("000" & p7-p1)+(("00" & p8 & '0')-("00" & p2 & '0'))+("000" & p9-p3);

但是以不同的方式表达相同的计算

Gx <= ("000" & p3)+("00" & p6 & '0')+("000" & p9)-("000" & p1)-("00" & p4 & '0')-("000"
 & p7);
Gy <= ("000" & p7)+("00" & p8 & '0')+("000" & p9)-("000" & p1)-("00" & p2 & '0')-("000"
 & p3);

它完美无缺。尽管如此,仅过滤器的模拟完全相同。 它与我如何在向量之前填充零点有关吗?

1 个答案:

答案 0 :(得分:2)

在不知道数据类型的情况下,我不完全确定这是否是原因,但我的猜测是,如果p1 > p3(以及其他一些)也会得到不同的结果。计算类型。伪代码示例:

p1 = "010";
p3 = "001";

--Method1:
res = "000" & p3-p1 = "000" & "111" = "000111";


--Method2
res = ("000" & p3) - ("000" & p1) = "000001" - "000010" = "111111";