2017-06-23 76 views
0

我有以下代码(简化):转换和调整矢量

library IEEE; 
use IEEE.std_logic_1164.all; 
use IEEE.numeric_std.all; 
use ieee.std_logic_arith.all; 

entity foo is 
end entity; 

architecture fum of foo is 

    signal slv16 : STD_LOGIC_VECTOR(15 DOWNTO 0); 
    signal slv5 : STD_LOGIC_VECTOR(7 DOWNTO 0);  

begin 

    slv16 <= std_logic_vector(resize(unsigned(slv5), slv16'length)); 

end architecture; 

我得到的错误消息“调整大小”无法被匹配到一个子程序。为什么?

+0

我不知道。我没有看到任何错误。我已经在3种不同的模拟器上试过了,他们也认为它也可以:https://www.edaplayground.com/x/pRr。你在用什么模拟器? –

+0

显示完整的错误信息和任何警告,这些警告也会指示该工具。调整大小[无符号,自然返回无符号]在程序包numeric_std中声明。 – user1155120

+0

GHDL('ghdl -a --std = 08 --ieee = standard')或Mentor Graphics Modelsim('vcom -2008')没有错误。 –

回答

0

我想我发现了这个问题。我用这个两个libraies:

USE ieee.numeric_std.all; 
USE ieee.std_logic_arith.all; 

而两者具有相同的实行无符号如下:删除简介库中的错误消息走后

type UNSIGNED is array (NATURAL range <>) of STD_LOGIC; 

。虽然我在这里理解了这个问题,但是上面的错误信息给了我一个错误的方向来看待。

谢谢!

+0

您问题中的代码不会'使用ieee.std_logic_arith.all;';你可能想编辑它来显示这个。错误信息是你所期望的,因为在VHDL中,当你对同一个子程序有多个定义时,所有的都将被忽略,以提醒你冲突。 –

+0

好的 - 这就解释了为什么我在这种情况下忽略了所有的库都会出现这样的错误信息。 – Norick