【发布时间】:2014-12-31 20:08:03
【问题描述】:
entity address_decoder is
PORT(address : in STD_LOGIC_VECTOR ( 0 to 3 );
decoded_address : out integer range 0 to 15);
end address_decoder;
architecture dataflow of address_decoder is
begin
PROCESS(address)
begin
if address = "0000" then decoded_address <= '0';
elsif address = "0001" then decoded_address <= '1';
elsif address = "0010" then decoded_address <= '2';
elsif address = "0011" then decoded_address <= '3';
elsif address = "0100" then decoded_address <= '4';
这是即将发生的错误
ERROR:HDLParsers:800 decoded_address 类型与“0”类型不兼容。 错误:HDLParsers:800 decoded_address 类型与“1”类型不兼容。 错误:HDLParsers:800 decoded_address 类型与“2”类型不兼容。 错误:HDLParsers:800 decoded_address 类型与“3”类型不兼容。 ERROR:HDLParsers:800 decoded_address 类型与“4”类型不兼容。
是不是因为address和decoded_address是两种不同的数据类型?关于如何摆脱这个错误的任何想法?
【问题讨论】:
-
这不是因为 address 和 decoded_address 是不同的类型,而是因为 decoded_address 和 '1'、'2'、'3' 和 '4' 是不同的类型:你试图将一个字符分配给一个整数信号。
-
去掉'0'、'1'、'2'、'3'和'4'中的单引号。 decoded_address 的类型是整数,您尝试为其分配字符文字。改为分配与 decoded_address 的范围约束兼容的数字文字。一般来说,在 XST 之前在 ISIM 或 Modelsim 中分析设计规范是一种很好的工作实践,其中错误消息有时可能缺乏此条的清晰性。
-
@DavidKoontz:您的评论解决了问题中的确切问题,因此将其发布为答案而不是评论不是更好,这样其他人就可以看到问题有答案,然后它可能会被正确关闭?
-
您的组件正在对二进制编码的数字进行简单的类型转换。这可以重写为一行:
decoded_address <= to_integer(unsigned(address));所以如果你的组件现在只有一行代码,你应该省掉它。 -
删除单引号确实有帮助。谢谢
标签: vhdl xilinx xilinx-ise