Процесс в хронометраже

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity equation_tb is
end equation_tb;

architecture Behavioral of equation_tb is
    signal x, y, z, t, w : std_logic;
    signal F             : std_logic;
    
begin
    UUT : entity work.equation port map (x, y, z, t, w, F);
    process
    begin
    x <= '0', '1' after 160 ns;
    y <= '0', '1' after 80 ns, '0' after 160 ns, '1' after 240 ns; 
    z <= '0', '1' after 40 ns, '0' after 80 ns, '1' after 120 ns, '0' after 160 ns, '1' after 200 ns, '0' after 240 ns, '1' after 280 ns; 
    t <= '0', '1' after 20 ns, '0' after 40 ns, '1' after 60 ns, '0' after 80 ns, '1' after 100 ns, '0' after 120 ns, '1' after 140 ns, '0' after 160 ns, '0' after 180 ns, '1' after 200 ns, '0' after 220 ns, '1' after 240 ns, '0' after 260 ns, '1' after 280 ns, '0' after 300 ns;
    end process;

end Behavioral;

Добрый день, а можно как-то проще написать. После «t» я должен написать это для «w», и оно будет меняться каждые 10 нс, поэтому строка будет очень длинной.

Я думал об использовании цикла for или if, но не знал, что делать.

Похоже, цикл for может помочь - похоже, что каждая итерация ждет еще один кусок времени? vhdlwhiz.com/for-loop

Julian Kemmerer 22.11.2022 17:04

Здесь не нужен процесс. Если вы используете процесс, добавьте wait ; перед end process;, иначе получится бесконечный цикл.

Jim Lewis 23.11.2022 03:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

architecture Behavioral of equation_tb is
    signal x : std_logic := '0';
    signal y : std_logic := '0';
    signal z : std_logic := '0';
    signal t : std_logic := '0';
    signal w : std_logic := '0';
    signal F : std_logic;
    
begin
    UUT : entity work.equation port map (x, y, z, t, w, F);

    process
    begin
        wait for 160 ns;
        x <= not x;
    end process;

    process
    begin
        wait for 80 ns;
        y <= not y;
    end process;

    process
    begin
        wait for 40 ns;
        z <= not z;
    end process;

    process
    begin
        wait for 20 ns;
        t <= not t;
    end process;

    process
    begin
        wait for 10 ns;
        w <= not w;
    end process;

end Behavioral;

У вас, вероятно, была опечатка в вашей последовательности для t, поскольку вы написали '0' after 160 ns, '0' after 180 ns. Я проигнорировал это.

Вы могли бы упростить свой код, если бы просто использовали присваивания, чтобы делать то же самое: w <= not w after 10 ns; и так далее.

Jim Lewis 23.11.2022 03:32

Если бы не дополнительное назначение «0» на t на 180 нс, вы могли бы использовать совокупное назначение из счетчика. Я не могу придумать никакой причины, по которой при дополнительном присвоении 0 представлены все 16 двоичных значений совокупных входов.

architecture foo of equation_tb is
    signal x, y, z, t   : std_logic := '0';
    signal w, F         : std_logic;
    use ieee.numeric_std.all;
    signal counter: unsigned (3 downto 0) := (others => '0');
begin
UUT: entity work.equation port map (x, y, z, t, w, F);

STIMULI:
    process
    begin
        for i in 0 to 15 loop
            (x, y, z, t) <= std_logic_vector(counter);
            counter <= counter + 1;
            wait for 20 ns;
        end loop;
        wait;
    end process;
end architecture;

Который дает:

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

Другие вопросы по теме