2016-07-06 2 views
0

Прошло много лет с тех пор, как я написал любой VHDL, поэтому ответ может быть очевиден.Modelsim фатальная ошибка при назначении постоянного значения сигналу в процедуре

Я делаю испытательный стенд для модуля я сделал, и он использует эту процедуру для записи в регистр по тестируемому:

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 дает мне "FATAL ERROR" на следующей строке в порядке:

data_in <= data_value; 

у меня есть сбила с толку мою голову, и я нахожу очень мало, чтобы помочь мне на моем пути. Я надеюсь, что некоторые из вас, ребята, помогут мне понять, что здесь происходит. Если вам нужна дополнительная информация, я был бы рад предоставить больше кода.

Большое спасибо!

+0

В дополнение к [MCVE] (http://stackoverflow.com/help/mcve) может быть полезно фактическое полное сообщение об ошибке и/или указание того, кто является симулятором. Поскольку ответ Брайана демонстрирует, что ваши фрагменты кода выглядят действительными, либо оставляя проблему с реализацией инструмента, либо проблему, внешнюю по отношению к вашим фрагментам кода (последнее, как правило, более вероятно). Создание MCVE для репликации проблемы имеет тенденцию раскрывать проблему. – user1155120

ответ

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 

Или действительно, без какой-либо продукции вообще. Было бы неплохо сделать самопроверку testbench, добавив утверждения assert в процессе стимула (или другого процесса), проверяя, что выходы соответствуют ожидаемым значениям.

Учитывая то же самое MCVE выше, что вы получаете в Modelsim?

Если вы получите тот же результат, что и я, то сообщите нам свою реальную проблему: и на этот раз сделайте MCVE.

+0

И если вы запустите модель задания в процедуре [work] (http://i.stack.imgur.com/DruKU.png). – user1155120