在程序中为信号分配常数值时,模拟致命错误

时间:2016-07-06 16:04:37

标签: vhdl modelsim

自从我编写任何VHDL以来已有多年,所以答案可能很明显。

我正在为我所制作的模块制作一个测试平台,并使用此过程写入UUT上的寄存器:

procedure write_data_proc (
 constant data_value : in std_logic_vector;
 signal  write_en : out std_logic;
 signal data_in : out std_logic_vector;
 signal clk : in std_logic
  ) is
begin
  wait until falling_edge(clk);
  write_en <= '1';
  data_in <= data_value;
  wait until falling_edge(clk);
  write_en <= '0';
end procedure;

从这个主要刺激过程调用:

stim_process: process
begin
 mask <= "0000000011111111";
 reset <= '1';
 wait for 2 ns;
 reset <= '0';
 wait for 3 ns;
 write_data_proc("0000000011110000",write_en,data_in,clk);
 write_data_proc("0000000011001100",write_en, data_in,clk);
 write_data_proc("0000000010001001",write_en,data_in,clk);
 read_bytes(3,8,data_read, data_read_master, clk);
end process;

Modelsim给了我一个&#34;致命错误&#34;在程序的以下一行:

 data_in <= data_value;

我已经google了一下头,我找不到任何帮助我的路。我希望你们中的一些人可以帮助我理解这里发生了什么。如果需要更多信息,我很乐意提供更多代码。

非常感谢!

1 个答案:

答案 0 :(得分:0)

那不是MCVE。

它只是几个代码片段,缺少很多极其重要的东西。

与声明一样。

这是一个MCVE。

library ieee;
use ieee.std_logic_1164.all;

entity const_value is
end const_value;

architecture test of const_value is

signal mask,data_in : std_logic_vector(15 downto 0);
signal reset, clk, write_en : std_logic;

   procedure write_data_proc (
     constant data_value : in std_logic_vector;
     signal  write_en : out std_logic;
     signal data_in : out std_logic_vector;
     signal clk : in std_logic
  ) is
  begin
    wait until falling_edge(clk);
    write_en <= '1';
    data_in <= data_value;
    wait until falling_edge(clk);
    write_en <= '0';
  end procedure;

begin

stim_process: process
begin
  mask <= "0000000011111111";
  reset <= '1';
  wait for 2 ns;
  reset <= '0';
  wait for 3 ns;
  write_data_proc("0000000011110000",write_en,data_in,clk);
  write_data_proc("0000000011001100",write_en, data_in,clk);
  write_data_proc("0000000010001001",write_en,data_in,clk);
 -- read_bytes(3,8,data_read, data_read_master, clk);
end process;

end test;

现在,当我测试它时,它会编译,详细说明和模拟而不会出现致命错误。

ghdl -a const_value.vhd
ghdl -e const_value
ghdl -r const_value

或者确实没有任何输出。通过在激励过程(或另一个过程)中添加断言语句来测试输出是否达到预期值,使测试平台自检是一个好主意。

考虑到上面完全相同的MCVE,你在Modelsim中得到了什么?

如果你得到与我相同的结果,那就告诉我们你的真正问题:这一次,制作它的MCVE。