【问题标题】:VHDL assignment slice not implemented?VHDL分配片未实现?
【发布时间】:2013-09-30 00:56:10
【问题描述】:

是否可以在分配的左侧指定要分配的位范围?

例如。 R(15 downto 8) <= R(15 downto 8) -D;

上面给了我编译器错误:Error 722: Assignment to a signal slice is not implemented.我试过谷歌搜索错误无济于事。

但这是可行的:

R <= R(15 downto 8) - D;

【问题讨论】:

  • 也许您愿意告诉我们是哪个(谁的)分析器告诉您的?切片名称作为 VHDL 中信号分配语句的目标是合法的。该格式类似于 PICA VHDL 工具的格式,其中 722 表示行号。
  • 抱歉遗漏了我的环境细节。在 Windows 7 上使用 DesignWorks Professional 5。722 是错误代码。行号单独表示。

标签: vhdl slice


【解决方案1】:

允许分配给切片。你用的是什么工具? D的尺寸是多少?注意结果大小。如果 D 的大小大于 R,则结果大小与 D 的大小匹配。

以下作业会发生什么:

R(15 downto 0) <= R(15 downto 8) - D ;

如果这个分配有效,那么你还需要对 D 进行切片:

R(15 downto 8) <= R(15 downto 8) - D(7 downto 0);

如果这没有得到它,其余的代码是什么样的?

【讨论】:

  • 我使用的是 DesignWorks Professional 5。这不是尺寸问题。我应该提到,赋值是在一个信号变量上,而不是一个普通变量上,这显然是非法的。
【解决方案2】:

答案与我的环境有关,特别是 Windows 7 上的 DesignWorks Professional 5。

不能信号变量位向量的切片赋值。 例如。

signal R: std_logic_vector(15 downto 0);
R(15 downto 0) <= X"0000"; -- will not compile

可以普通变量位向量的切片赋值。 例如。

variable D: std_logic_vector(15 downto 0);
D(15 downto 0) := X"0000"; -- will compile

每个案例都尝试将 16 位分配给一个 16 位变量。

【讨论】:

  • 如果第二个编译成功,而第一个编译失败,我强烈建议您使用更好的综合工具。第一个应该编译,第二个应该只在你使用D(15 downto 0) := X"00";时编译。
  • 也许第一个无法编译,因为您将 8 位向量 X"00" 分配给 16 位信号。试试:R(15 downto 0)
  • @Russell:关于矢量大小,您是对的。我上面的答案不正确,在我的代码中是正确的。现已编辑。
  • @zennehoy:我希望我能,不幸的是我被这个编译器困住了(原因被隐瞒)。另外,您对我不正确的普通变量赋值是正确的,它应该是“:=”而不是“
  • @cbrad 这几乎可以肯定是一个工具问题——它显然没有完全实现 VHDL 标准。如果您无法使用该工具,恐怕您将不得不以其他方式解决该问题。例如,您可以为 R 的上部和下部创建两个信号,然后在架构级别分配给 R:R &lt;= R_top &amp; R_bot;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
相关资源
最近更新 更多