2013-03-23 163 views
1

我有一个类型不匹配错误,但所有值的类型相同std_logic。 下面是代码Vhdl类型不匹配错误

NX,NY - 泛型

IPX - 的输入端口矢量

tempx,tempz - 信号

ipx : in std_logic_vector(Nx-1 downto 0);
.......
signal tempx : std_logic_vector(Ny-1 downto 0) := ipx(Nx-1 downto Nx-Ny); (Signal initialisation)
signal tempz : std_logic_vector(Ny-1 downto 0);
............
tempx <= (Ny-1 downto 1 => tempz(Ny-2 downto 0), 0 => ipx(a-1));

错误:错误(10381):VHDL类型不匹配ArrayDivider.vhd错误(53):索引名称返回值的类型与“std_ulogic”不匹配,目标表达式的类型 (tempx的最后一个代码行上的错误)

但是ipx和tempz都是std_logic向量,所以这里的类型不匹配? 请给我一些解决方案

我已经在使用连接操作符&也试过,但它给了我与顶级层次结构和“无法解决tempx [0]乘常数司机的另一个错误!!!! !

回答

3

错误消息告诉你到底是什么问题:

error : Error (10381): VHDL Type Mismatch error at ArrayDivider.vhd(53): indexed name returns a value whose type does not match "std_ulogic", the type of the target expression

事实上,tempz(Ny-2 downto 0)不是std_ulogic而是一个载体。

问题是命名关联不能识别向量的切片,而是识别单个元素;您不能用它将一个矢量的一个切片分配给另一个矢量的切片。

相反,使用连接运算符&

tempx <= tempz(Ny-2 downto 0) & ipx(a-1); 

您的文章意味着级联产生其他错误;随时添加这些问题。

编辑:

>Error (10028): Can't resolve multiple constant drivers for net 
>"tempx[0]" at ArrayDivider.vhd(44) (on the line of initialing >tempx) 

这再次告诉你什么是错的。这个错误几乎肯定存在于这两个版本的设计中,但原来的错误只是隐藏了它。找到tempx(0)的两个驱动程序并排除哪个是错误的。你还没有发布足够的代码来清楚发生了什么,所以这取决于你。如果您使用Modelsim,“drivers”命令将识别信号上的所有驱动程序。

如果您需要初始化tempx输入信号,再后来与另一个信号驱动它,你必须在两个信号之间进行选择 - 例如:

tempx <= ipx(Nx-1 downto Nx-Ny) when <some condition> 
     else tempz(Ny-2 downto 0) & ipx(a-1); 

最有可能的,修复这个错误也将消除“层次结构”错误;这基本上是“以前出错了,所以编译不能完成”。

+0

谢谢你的支持和你的兴趣来解决我的错误... :) 我试图拼接也......... 但是,这给了我2个错误.......... 。 >错误(10028):无法解析净> “tempx [0]” 在ArrayDivider.vhd(44)(上草签的线> tempx) >错误多个恒定的驱动:无法阐述顶级用户层次结构 – 2013-03-24 12:08:37

1

这是一个页面,很好地解释了命名关联与位置关联的概念。请注意,该示例显示了使用两种使用bit_vector类型的关联方法。

http://www.ics.uci.edu/~jmoorkan/vhdlref/aggregat.html

正如您已经注意到,VHDL返回,当你执行一个名为上STD_LOGIC矢量关联bit_vector。如果尝试将结果分配给std_logic_vector,这会导致类型不匹配。

一种选择是使用TO_BITVECTOR和TO_STDLOGICVECTOR在bit_vector和std_logic_vector之间进行转换。这些在ieee.std_logic_1164库定义,语法如下描述下:

http://www.seas.upenn.edu/~ese171/vhdl/PackageSTD_1164.html

这样做感觉就像通过不必要的箍跳,但它应该工作。祝你好运!