我的綜合工具完全不支持VHDL2008,我想使用類型爲「a < = and bit_vector;」的代碼行。這基本上意味着如果bit_vector中的所有位都是'1',則a ='1',否則就是'0'。 (a是std_logic,bit_vector是std_logic_vector)。vhdl operator「and」is ambigous
所以我創建了一個小包裝我自己「和」功能來添加這個到我的VHDL:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package common_pkg is
function "and" (L: std_logic_vector) return std_logic; -- And all bits in a vector
end package common_pkg;
package body common_pkg is
function "and" (L: std_logic_vector) return std_logic is
variable result : std_logic := '1';
begin
for i in 0 to L'length - 1 loop
result := result and L(i);
end loop;
return result;
end function;
end package body;
然而,編譯這個時候,我得到了以下錯誤:
** Error: c:\Repo\src\My_test.vhd(127): Operator "and" is ambiguous.
Feasible operators are:
(explicit) std_logic_1164."and"[STD_ULOGIC_VECTOR return STD_ULOGIC] at vhdl_src/ieee/stdlogic.vhd(140)
(explicit) common_pkg."and"[STD_LOGIC_VECTOR return STD_LOGIC] at c:\Repo\src\common_pkg.vhd(23)
** Error: c:\Repo\src\My_test.vhd(127): Type error resolving prefix expression "and" as type ieee.std_logic_1164.STD_ULOGIC.
我無法弄清楚如何解決這個問題。我可以將我的函數重命名爲「my_and」,但這並不是我真正想要的東西......有沒有人曾經做過類似的事情,並且能夠解釋問題,並且可能會指出我朝着正確的方向發展?
除非我失去了一些東西,第一是可行的運營商(在std_logic_1164)似乎是你試圖重寫2008兼容的。 – fru1tbat 2015-03-02 14:33:51
綜合工具可能支持一元'和',因此就是錯誤。另外,如果在具有不同VHDL-2008支持級別的工具中使用相同的代碼(如模擬器和綜合工具),則可能會與現有函數發生衝突的功能可能會導致問題。順便說一句。考慮編寫循環,比如在'範圍循環中爲'我支持任意範圍的L。 – 2015-03-02 17:08:24
如果你不能讓一元''和'工作,考慮從'ieee.reduce_pack'回落到VHDL-2002'and_reduce()'函數,它執行相同的操作。 – 2015-03-02 17:27:53