2015-07-29 1 views
2

Я хочу вернуть значения A, B и Y в моменты времени 7.5 нс, 15 нс, 22,5 нс и т. Д. Во время моего моделирования. Ниже приведен код, который я реализовал до сих пор (для цикла for). Математически это имеет смысл, но оно возвращает значения в раз 7,5 нс, 30 нс, 67,5 нс, 120 нс, .... Я не могу понять, где мой код ошибочен. Знаете ли вы, как лучше это реализовать?Для цикла генерирует неправильные значения в процессе тестирования?

constant InputPeriod : time := 15 ns; 

---------------------------------- 
TEST:process 

variable n : integer range 1 to 9; 

begin 

     for I in 0 to 4 loop 
      wait for (n * (InputPeriod/2)); 
      report "A: " & std_logic'image(A); 
      report "B: " & std_logic'image(B); 
      report "Y: " & std_logic'image(Y); 

      n := n + 2; 
     end loop; 

    report "Test Completed"; 
    wait; 
end process TEST; 
+1

Это то, что вы просите. Сначала он ждет 1 * 7,5 нс. Затем вы добавляете 2 в n, чтобы он ожидал 3 * 7,5 нс (22,5 нс) и выводил при 30 нс. Затем он ждет 5 * 7,5 нс и так далее. Если вы хотите вывести на 7.5, 15, 22.5 нс, просто установите для него 7,5 нс каждый раз. –

+0

«Затем вы добавляете 2 в n, чтобы дождаться 3 * 7,5 нс (22,5 нс) и выходов при 30 нс». Почему он вдруг добавляет 7.5 нс, а затем выводит через 30 нс? – user5153260

+1

Он не «неожиданно добавляет 7.5 нс». Он уже дождался 7.5ns в первый раз вокруг цикла. –

ответ

0

Возможное решение:

constant InputPeriod : time := 15 ns; 
---------------------------------- 
TEST:process 

variable n : integer range 1 to 9 := 1; -- it's good thing initialize your variable 

begin 

    for I in 0 to 4 loop 
     wait for (n * (InputPeriod/2)); 
     report "A: " & std_logic'image(A); 
     report "B: " & std_logic'image(B); 
     report "Y: " & std_logic'image(Y); 

     n := n + 1; 
    end loop; 

    report "Test Completed"; 
    wait; 
end process TEST; 

Итак, я просто инициализируется переменная и увеличивается на 1 счетчик н.

Вы также можете написать цикл, как:

for I in 1 to 5 loop 
    wait for (I * (InputPeriod/2)); 
    report "A: " & std_logic'image(A); 
    report "B: " & std_logic'image(B); 
    report "Y: " & std_logic'image(Y); 
end loop; 

без п переменной.

Смежные вопросы