Можно ли определить циклические функции на тестовом стенде

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

sig1 <= '1'; sig2 <= '1'; y <= '1'; wait for 20 ns;
y <= '0'; wait for 5 ns;
-- etc.

или с помощью массивов. Мне было интересно, можно ли упростить процесс, настроив циклические функции, которые можно вызывать и запускать одновременно.

-- Some pseudocode
function sig1 is
    sig1 <= '1'; wait for 25 ns;
    sig1 <= '0'; wait for 50 ns;
end sig1;

-- Definition for the other waves goes here

function waveform is
    while n=1 loop
        sig1, sig2, y run;
    end loop;
end waveform;

Я уже покопался в документации для VHDL и здесь, в Stack Overflow, но я должен заранее извиниться, я понятия не имею, как вы могли бы назвать что-то подобное, поэтому мои поиски не дали никаких результатов, близких к что я думаю. Конечно, это просто любопытство, я уже ожидаю, что из-за характера аппаратного обеспечения и рассматриваемого языка это может быть просто невозможно.

Заранее спасибо за любую помощь!


person monotiller    schedule 24.05.2020    source источник


Ответы (2)


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

Часть «y» может быть записана циклом, как показано ниже, а остальные части могут быть выполнены аналогичным образом.

library ieee;
use ieee.std_logic_1164.all;

entity tb is
end entity;


architecture sim of tb is
  signal y : std_logic;
begin
  process is
    constant period : time := 80 ns;
    constant steps  : natural := 8;
  begin
    for i in 0 to steps - 1 loop
      case i is
        when 0 | 1 | 3 => y <= '1';
        when others => y <= '0';
      end case;
      wait for period / steps;
    end loop;
  end process;
end architecture;

В приведенном выше примере используется функция VHDL, согласно которой процесс без списка конфиденциальности будет перезапущен при достижении конца.

Форма волны будет:

введите здесь описание изображения

person Morten Zilmer    schedule 24.05.2020
comment
О, точно. Я понимаю. На самом деле это действительно хороший способ сделать это, я удивлен, что не сталкивался с этим раньше (хотя мне еще не приходилось делать циклический тестовый стенд). Итак, я могу просто добавить sig1 и sig2 аналогичным образом, и все сразу запустится? Я думаю, что вы, возможно, только что полностью изменили мой взгляд на тестовые стенды, если честно, спасибо вам за это. - person monotiller; 24.05.2020
comment
Да, вы можете создать отдельные процессы для sig1 и sig2 и сгенерировать их аналогичным образом. Рад слышать, что вы также узнали об использовании VHDL на тестовых стендах; на самом деле вы можете написать очень эффективные тестовые стенды на VHDL. - person Morten Zilmer; 24.05.2020

Назначение сигналов VHDL позволяет использовать сигналы с несколькими элементами:

Стандарт IEEE 1076-2008

10.5.2 Простые назначения сигналов

10.5.2.1 Общие

simple_signal_assignment ::=
simple_waveform_assignment
| simple_force_assignment
| simple_release_assignment

simple_waveform_assignment ::=
target ‹= [ delay_mechanism ] форма волны ;

delay_mechanism ::=
транспорт
| [отклонить time_expression] инерционный

цель ::=
имя
| агрегат

waveform ::=
waveform_element { , waveform_element }
| не затронут

10.5.2.2 Выполнение простого оператора присваивания

waveform_element ::=
value_выражение [ после time_выражение ]
| null [ после time_expression ]

Оценка элемента сигнала производит одну транзакцию. Временная составляющая транзакции определяется текущим временем, добавленным к значению временного выражения в элементе сигнала. Для первой формы элемента сигнала компонент стоимости транзакции определяется выражением значения в элементе сигнала. Для второй формы элемента сигнала компонент значения не определяется языком, но определяется как тип цели. Транзакция, полученная в результате оценки второй формы элемента сигнала, называется нулевой транзакцией.


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

Спроецированный выходной сигнал – это очередь элементов сигнала, которые должны располагаться в возрастающем порядке времени.

Также операторы процесса по своей сути зацикливаются:

11.3 Заявление о процессе

Выполнение оператора процесса состоит из повторяющегося выполнения его последовательности операторов. После выполнения последнего оператора в последовательности операторов оператора процесса выполнение немедленно продолжится с первого оператора в последовательности операторов.


Эти две функции позволяют писать компактные независимые генераторы шаблонов в тестовых стендах:

library ieee;
use ieee.std_logic_1164.all;

entity sig1sig2y_tb is
end entity;

architecture foo of sig1sig2y_tb is
    signal sig1, sig2, y:   std_ulogic;
begin
sig1_process:
    process
    begin
        sig1 <= '1', '0' after 25 ns;
        wait for 75 ns;
    end process;
sig2_process:
    process
    begin
        sig2 <= '1', '0' after 25 ns, '1' after 75 ns, '0' after 100 ns, 
                '1' after 125 ns, '0' after 175 ns;
        wait for 200 ns;
    end process;
y_process:
    process
    begin
        y <= '1', '0' after 20 ns, '1' after 30 ns, '0' after 40 ns;
        wait for 80 ns;
    end process;
end architecture;

Обратите внимание, что задержка элемента формы сигнала зависит от текущего времени симуляции.

Этот тестовый стенд создает целевые формы сигналов:

sig1sig2sigy_tb.jpg

person Community    schedule 25.05.2020