В VHDL я могу написать это в своем тестовом стенде:
signal clk : std_logic := '0';
signal count_in : std_logic_vector(3 downto 0) := "0000";
signal load : std_logic := '0';
signal reset : std_logic := '0';
signal count_out : std_logic_vector(3 downto 0) := "0000";
...
clk <= not clk after 50 ns;
reset <= '1' after 1400 ns, '0' after 1900 ns;
count_in <= "1010" after 2500 ns;
load <= '1' after 2700 ns, '0' after 3000 ns;
Объявления сигналов находятся перед "началом" архитектуры тестовой среды, в то время как часть после elipse находится в теле архитектуры тестовой среды. Намного лучший способ - использовать процесс, который заканчивается оператором ожидания при написании тестовых программ. Я понимаю, как это сделать в Verilog, а также в VHDL.
В Verilog у нас может быть начальный блок, который присваивает значение один раз. Также возможно иметь несколько начальных блоков. Я не пробовал этого, но я не думаю, что разумно использовать один и тот же сигнал из нескольких начальных блоков.
Теперь мой вопрос: как мне перевести приведенный выше код для стимула DUT в Verilog? Я ожидаю, что буду использовать оператор assign с несколькими значениями #delay. Это правильно? Как это сделать?
join_any
иjoin_none
. Обратите внимание, что fork-join - очень мощная конструкция, но она не синтезируется и может усложнить отладку. 02.06.2014