自从我编写任何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了一下头,我找不到任何帮助我的路。我希望你们中的一些人可以帮助我理解这里发生了什么。如果需要更多信息,我很乐意提供更多代码。
非常感谢!
答案 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。