VHDL - Xilinx ISE在合成期间崩溃

时间:2014-08-09 23:01:28

标签: vhdl

我是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给予进程中的变量,则编译

1 个答案:

答案 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设计规范,这也说明了在合成之前验证设计的效用。

如果ssegDigitenteredDigit1中每个元素的匹配元素都没有声明,也没有在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)。