2013-09-24 44 views
0

是否可以在作业的左侧指定一个位范围?VHDL分配片没有实现?

例如。 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;

+0

也许你会愿意告诉我们哪个(谁的)分析仪告诉你这个?切片名称在VHDL中作为信号赋值语句的目标是合法的。格式看起来像PICA VHDL工具,其中722代表行号。 – user1155120

+0

因疏忽我的环境细节而抱歉。在Windows 7上使用DesignWorks Professional 5. 722是错误代码。行号分别表示。 – cbrad

回答

0

答案涉及到我的环境,特别是专业设计工作室5,在Windows 7

不能值分配到信号变量位向量的一个切片。 例如。

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位变量。

+1

如果第二个编译,而第一个不编译,我强烈要求你得到一个更好的综合工具。第一个应该编译,第二个应该只在使用'D(15 downto 0):= X“00”;'时编译。 – zennehoy

+0

也许第一个不会编译,因为您将一个8位向量X“00”分配给一个16位信号。尝试: R(15 downto 0)<= X“0000”;这应该绝对编译。 zennehoy是正确的,当分配变量使用:=赋值而不是<=。 – Russell

+0

@Russell:你是对的矢量大小。这在我的上面的答案中是不正确的,在我的代码中是正确的。现在编辑。 – cbrad

1

分配到片是允许的。你使用什么工具? D的大小是多少?注意结果大小。

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

如果这样分配的工作,那么你还需要切片d:如果d的尺寸大于R,则结果大小D.

的大小

在下面的分配会发生什么情况相匹配:

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

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

+0

我正在使用DesignWorks Professional 5.它不是尺寸问题。我应该提到这个任务是在一个信号变量上,而不是一个普通的变量,这显然是非法的。 – cbrad