VHDL: помогает понять временные шаги / состояния и параллелизм

#vhdl #clock #flip-flop

#vhdl #часы #триггер

Вопрос:

Обычно я программист на C # / Java, и у меня все еще возникают проблемы с полным описанием аппаратного обеспечения.

У меня есть регистр, который загружает значение. После этого компаратор сравнивает выходные данные регистра со значением ’16’. Если значение меньше или равно, я перехожу к State_0, если оно больше, я перехожу к State_3.

У меня есть процесс ‘controlsignals’, запущенный одновременно с моим процессом с таблицей состояний. Для моих управляющих сигналов я знаю, что мне нужно установить значение enable для регистра на high, когда я нахожусь в State_2, поэтому:

 controlsignals: PROCESS (Tstep_Q)
BEGIN
    .... initialisation ...
    CASE Tstep_Q IS
    .... other states ....
    WHEN T2 => --define signals in time step T2
        enRegister = '1';
  

Для моей таблицы состояний:

 statetable: PROCESS (Tstep_Q, regOutput)
BEGIN
    CASE Tstep_Q IS
        .... other states ....
        WHEN T2 => 
            IF ((regOutput - 16) > 0) 
                THEN Tstep_D <= T3;
            ELSE Tstep_D <= T0;
            END IF;
  

И ближе к концу моего кода у меня есть:

 fsmflipflops: PROCESS (Clock)
BEGIN
    IF Clock'EVENT AND Clock = '1' THEN
        Tstep_Q <= Tstep_D;
    END IF;
END PROCESS;

reg: regn PORT MAP (somevalue, enReg, Clock, regOutput);
  

Поскольку моя таблица состояний и мои управляющие сигналы являются параллельными блоками, я в замешательстве… должен ли я сначала включить регистр, а затем запустить компаратор для определения моего следующего состояния, как я хочу, чтобы моя схема работала (поскольку таблица состояний чувствительна к regOutput)? Или было бы безопаснее создать новое состояние после T2, где у меня есть мой компаратор? Заранее благодарю вас.

Комментарии:

1. Вы не показали никаких объявлений, не указали тактовую частоту или предполагаемую цель вашего кода. Все это влияет на то, сколько вы можете сделать за один такт, начиная с переднего фронта синхронизации и заканчивая Tstep_Q и регулируя задержку вывода для вычитания 16 и проверки знака результата, выбирая значение для Tstep_D для настройки Tstep_D. Не зная тактовой частоты, целевой платформы реализации и ширины, вы получите мнения, и вы сможете найти ответы путем пробного синтеза на целевой платформе. Какая часть пути задержки имеет весь тактовый период с отдельным состоянием?

Ответ №1:

Параллелизм компаратора

Представьте, что сразу после начала синхронизации сигнал состояния был обновлен. У вас есть один тактовый период, чтобы выполнить сравнение и установить следующее состояние.

Ваша ‘statetable’ постоянно оценивается.

Время регистрации

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

Список чувствительности таблицы состояний

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

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