我是VHDL的新手,当我的代码中有某些内容(在Xilinx ISE中开发)时,我遇到了一个合成工具崩溃的问题。
以下是导致程序崩溃的主要内容。
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
如果我在该过程之外执行ssegDigit&lt; = enteredDigit1,那很好。但是由于我需要编写一个异步的代码,我认为在一个过程中跟踪状态等会更容易。
任何想法为什么会崩溃?我从程序控制台得不到任何指示。
编辑:它似乎崩溃了,因为我正在为ssegDigit分配一个新值。如果我将enterDigit1给予进程中的变量,则编译答案 0 :(得分:0)
如果没有看到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
中每个元素的匹配元素都没有声明,也没有在entryDigit1的声明中修复保留字downto
,那么根据定义你没有&#39 ;提供了足够的信息。另请注意在流程中的赋值语句之后和end process
之后的分号。
请告诉我们,并在必要时详细说明问题。
注意到您更正了示例中的downto
,但没有更正丢失的分号。
发表评论后:
... sseg数字按预期声明,端口映射到相同范围。我想也许是合成器翻转的一个例子,因为输入的Digig1信号在几个地方被修改了。知道为什么它会在这个过程之外工作吗?同步问题?
似乎ssegDigit
被声明为信号并连接到端口。这表明在评论中播放二十个问题是徒劳的,每次都会显示更多的信息(我们最终会得到一条消息,建议将对话框移动到维基聊天,如果没有别的话)。
也许您可以显示端口声明,包括模式,涉及元素的信号声明以及特别是enteredDigit1
信号的任何赋值语句。
您可能还有助于展示导致您完成综合工具“崩溃”的指示。
请参阅How do I ask a good question?,帮助其他人重现问题,&#34;包含足够的代码以允许其他人重现问题。有关此方面的帮助,请阅读如何创建最小,完整,有效的示例&#34; (How to create a Minimal, Complete, and Verifiable example)。