无法解析多个常量驱动程序VHDL错误

时间:2013-03-27 13:26:39

标签: vhdl

我在VHDL中遇到与多个常量驱动程序有关的错误,这里我正在上传代码的图像............ 在我的代码中,cmp是一个组件,我想在a = Nx-Ny到a = 0 .............的生成语句中使用它。但是在

  

a = Nx-Ny => tempx = ipx(Nx-1 downto Nx-Ny)
  否则tempx = tempz(Ny-2 downto 0)& IPX(a)中

为此我曾经使用过 - else语句,但我有错误......

enter image description here

  

错误:错误(10028):无法解析ArrayDivider.vhd(44)中net“tempx [0]”的多个常量驱动程序(在图像中选定的行上)
  错误:无法详细说明顶级用户层次结构

请告诉我解决方案是什么??????

3 个答案:

答案 0 :(得分:2)

错误告诉您在tempx [0]上有多个驱动程序。

在你发布的代码中,对tempx只有一个条件赋值。

但它嵌入在for ... generate声明中。

这意味着您可能会生成多个副本,具体取决于nx,ny的值。因此错误。

修改

发布一个不可读的小图片而不是实际的VHDL代码没有任何帮助。请使用您的代码编辑问题。

同时我我可以看到你正在生成一组不同的模块(Cmp?)并为每个模块提供不同的输入信号。

然而,您无法同时在同一信号上驱动所有这些信号!这就是工具告诉你的。 你需要的是一个数组信号,由generate变量a。

索引
subtype temp is std_logic_vector(N downto 0);
signal Tempx : array(Nx-Ny downto 0) of temp;
...

for a in ... generate
   tempx(a) <= (whatever expression you have now);
   Cmpa : generic map (...) port map (tempx(a), ...);
end generate;

现在,显然,阵列的每个成员只有一个驱动程序,消除了多个驱动程序错误。

答案 1 :(得分:1)

请注意,你的for / generate结构不是循环!这个陈述导致你在for / generate结构中描述的逻辑的多个实现((Nx-Ny)+1)。因此你有多个tempx驱动程序。 这已在评论中提到: enter link description here

答案 2 :(得分:0)

对tempx的赋值,对每个循环使用相同的tempx。这导致对同一信号的多个分配。 如果将信号声明移动到生成块(生成和开始之间),则每个循环都有一个专用的tempx信号。

for a in ... generate
   signal tempx : std_logic_vector(Ny-1 downto 0);
begin
   tempx <= (whatever expression you have now);
   Cmpa : generic map (...) port map (tempx, ...);
end generate;

结果类似于使用数组的方法。