如果没有看到错误消息和/或ssegDigit 的声明,可能无法提供明确的答案。
这样分析:
library ieee;
use ieee.std_logic_1164.all;
entity module is
port (
signal x: in std_logic_vector (3 downto 0);
signal y: in std_logic_vector (3 downto 0);
signal enteredDigit1: out std_logic_vector (3 downto 0)
);
end entity;
architecture foo of module is
begin
end architecture;
library ieee;
use ieee.std_logic_1164.all;
entity ssegDigit_tb is
end entity;
architecture foo of ssegDigit_tb is
signal asyncClock: std_logic;
signal x: std_logic_vector(3 downto 0);
signal y: std_logic_vector(3 downto 0);
signal ssegDigit: std_logic_vector(3 downto 0);
signal enteredDigit1 : std_logic_vector(3 downto 0);
begin
u3: entity work.module port map (x,y, enteredDigit1);
process(asyncClock, enteredDigit1)
begin
ssegDigit <= enteredDigit1;
end process;
end architecture;
注意ssegDigit 的索引范围与enteredDigit1 相同,我更正了enteredDigit1 的声明:
signal enteredDigit1 : std_logic_vector(3 down 0);
VHDL 保留字downto 不完整的地方应该是:
signal enteredDigit1 : std_logic_vector(3 downto 0);
在不知道导致 ISE 工具崩溃的确切方法的情况下,有一种外部可能性是它的解析器不够健壮。
一般来说,模拟器的分析器会比综合工具中的分析器更强大。编写合成器时预期有效的 VHDL 设计规范,这也指出了在合成之前验证您的设计的实用性。
如果ssegDigit 的声明对于enteredDigit1 中的每个元素都没有一个匹配的元素,或者在为enteredDigit1 的声明中修复保留字downto 都不是您的问题,那么根据定义,您没有提供足够的信息。还要注意过程中赋值语句后面和end process之后的分号。
让我们知道,并在需要时详细说明问题。
注意到您在示例中更正了 downto,但没有更正缺少的分号。
在您发表评论后:
... sseg 数字按照您的预期声明,并且端口映射到相同的范围。我在想可能是合成器发生故障的情况,因为输入的信号在几个地方被修改了Digit1。知道为什么它会在流程之外起作用吗?同步问题?
ssegDigit 似乎被声明为信号并连接到端口。这表明在 cmets 中玩 20 个问题是徒劳的,每次都会显示更多信息(我们最终会收到一条消息,建议将对话移动到 wiki 聊天中,如果没有其他问题的话)。
也许您可以显示端口声明,包括模式、相关元素的信号声明以及信号的任何赋值语句,尤其是enteredDigit1。
展示导致您得出综合工具“崩溃”结论的迹象也可能对您有用。
请参阅How do I ask a good question?,帮助其他人重现问题,“包含足够的代码以允许其他人重现问题。有关此方面的帮助,请阅读如何创建最小、完整、有效的示例”(How to create a Minimal, Complete, and Verifiable example)。