Memory VHDL运行时:无效内存访问(悬空访问或堆栈大小太小)

Memory VHDL运行时:无效内存访问(悬空访问或堆栈大小太小),memory,stack,vhdl,dangling-pointer,ghdl,Memory,Stack,Vhdl,Dangling Pointer,Ghdl,运行测试台时出现奇怪的错误,我以前从未见过这种情况。我试图模拟一个有4个寄存器的8位计算器。计算器有8位指令用于加法、减法、等分、立即加载和打印到监视器。我已经检查过,以确保我不在任何无限循环中。我在网上做过调查,似乎没有任何具体的原因来解释我为什么会犯这个错误 我已经三次检查了循环、内存泄漏,还尝试增加堆栈帧。到目前为止,还没有人成功。使用命令ghdl-a、-e和-r来分析、编译和运行 ''' 计算器的结构是 组件计算器是 港口( I:标准逻辑向量(7到0);--指令输入 时钟:在标准逻辑中

运行测试台时出现奇怪的错误,我以前从未见过这种情况。我试图模拟一个有4个寄存器的8位计算器。计算器有8位指令用于加法、减法、等分、立即加载和打印到监视器。我已经检查过,以确保我不在任何无限循环中。我在网上做过调查,似乎没有任何具体的原因来解释我为什么会犯这个错误

我已经三次检查了循环、内存泄漏,还尝试增加堆栈帧。到目前为止,还没有人成功。使用命令ghdl-a、-e和-r来分析、编译和运行

'''

计算器的结构是 组件计算器是 港口( I:标准逻辑向量(7到0);--指令输入 时钟:在标准逻辑中 ); 端部元件计算器; 信号I:标准逻辑向量(7到0); 信号时钟:标准逻辑; 开始 计算器0:计算器端口图(I,clk); 过程 文件说明\文件:文本在“instructions.txt”中--文本(ASCII)文件中的说明。 可变指令行:行; 变量指令向量:位向量(7到0); 开始 while(not(endfile(instruction_file)))循环——循环到文本文件的末尾。 等待1ns;
clk添加缺少的上下文子句和实体声明,您的设计将进行分析和阐述(计算器未绑定)。创建一个带有少量8位二进制值的instructions.txt文件,每行一个,您的设计模拟测试结束。您编写的示例不会像在
结束过程之前的最后一次
等待“
那样再现您的问题等待可防止您一次又一次地重复“测试”。什么版本的ghdl?什么平台?在windows命令提示符下运行的0.29.1版,是的,我想包括“等待”,但不管怎样,我收到的是相同的运行时错误。也许您可以更详细地了解未绑定实体声明。升级到新版本,将有一个二进制版本。我能找到您症状的唯一地方是使用0.29。您的问题中没有提供计算器。只是测试台。组件实例计算器_0未绑定。这是合法的,但会在较新的ghdl中生成警告。添加缺少的上下文子句和实体声明,您的设计将进行分析和阐述(使用未绑定的计算器)。创建一个带有少量8位二进制值的instructions.txt文件,每行一个,您的设计模拟测试结束。您编写的示例不会像在
结束过程之前的最后一次
等待“
那样再现您的问题等待可防止您一次又一次地重复“测试”。什么版本的ghdl?什么平台?在windows命令提示符下运行的0.29.1版,是的,我想包括“等待”,但不管怎样,我收到的是相同的运行时错误。也许您可以更详细地了解未绑定实体声明。升级到新版本,将有一个二进制版本。我能找到您症状的唯一地方是使用0.29。您的问题中没有提供计算器。只是测试台。组件实例计算器_0未绑定。这是合法的,但会在较新的ghdl中生成警告。
architecture structural of calculator_tb is
component calculator is
  port(
    I : in std_logic_vector(7 downto 0); --instruction input
    clk : in std_logic
  );
end component calculator;


signal I : std_logic_vector(7 downto 0);
signal clk : std_logic;


begin
  calculator_0 : calculator port map(I, clk);
    process
      file instruction_file : text is in "instructions.txt"; --Instructions in text(ASCII) file.
      variable instruction_line : line;
      variable intruction_vector : bit_vector(7 downto 0);
    begin
      while (not(endfile(instruction_file))) loop --Loop to the end of the text file.
        wait for 1 ns;
        clk <= '0';
        readline(instruction_file, instruction_line); --Read in instruction line
        read(instruction_line, intruction_vector); --merge instruction to bit vector
        I <= to_stdlogicvector(intruction_vector); --Convert bit vector to std_logic_vector and pass instruction to the calculator input.

        --Create a rising edge for the clock.
        wait for 1 ns;
        clk <= '1';
      end loop;
      assert false report "end of test" severity note;
    end process;
end architecture structural;
''''
The runtime error I receive is: