Конечный автомат VHDL

Как я могу реализовать код VHDL, который проектирует конечный автомат, не сообщая компилятору, что это конечный автомат. В приведенном коде вы увидите, как мы реализовали FSM в классе, но он показал диаграмму состояний в программе просмотра RTL, как я могу не дать компилятору знать, что это FSM, и не нарисовать диаграмму состояний. Более того, мой профессор сказал, что дизайн будет быстрее, если компилятор не распознает FSM.

library IEEE;  
use IEEE.std_logic_1164.all; 

entity fsm is  
  port ( clk, reset, x1 : IN std_logic;  
                    outp : OUT std_logic);  
end entity;  
architecture beh1 of fsm is  
  type state_type is (s1,s2,s3,s4);  
  signal state, next_state: state_type ;  
begin 
  process1: process (clk,reset)  
  begin  
    if (reset ='1') then  
      state <=s1;  
    elsif (clk='1' and clk'Event) then  
      state <= next_state;  
    end if;  
  end process process1; 

  process2 : process (state, x1)  
  begin  
    case state is  
          when s1 => if x1='1' then   
                        next_state <= s2;  
                      else  
                        next_state <= s3;  
                      end if;  
          when s2 => next_state <= s4;  
          when s3 => next_state <= s4;  
          when s4 => next_state <= s1;  
    end case;  
end process process2; 

process3 : process (state)  
  begin  
      case state is  
          when s1 => outp <= '1';  
          when s2 => outp <= '1';  
          when s3 => outp <= '0';  
          when s4 => outp <= '0';  
      end case;  
end process process3;  
end beh1; 

person user3159792    schedule 24.04.2016    source источник
comment
Почему возникает проблема, что компилятор может распознать структуру кода как FSM?   -  person Morten Zilmer    schedule 24.04.2016
comment
Зачем кому-то это делать? Подсказка 1: многие инструменты распознают автоматы по используемому сигналу. Поэтому не используйте перечисляемый тип для своих состояний. Подсказка 2: Вы можете отключить извлечение FSM в большинстве инструментов. Подсказка 3: автоматы распознаются путем сопоставления с образцом. Поэтому используйте неподдерживаемый шаблон или не используйте форму процесса 2/3. Является ли цель видеть RTL-представление FSM в средстве просмотра RTL вместо диаграммы состояний?   -  person Paebbels    schedule 24.04.2016
comment
мой профессор сказал, что это быстрее, когда компилятор не распознает, что это FSM   -  person user3159792    schedule 27.04.2016


Ответы (1)


Синтезированный проект не обязательно будет быстрее или меньше, если извлечение конечного автомата отключено, потому что синтезирующий компилятор может выбирать из нескольких кодировок при синтезе конечного автомата. Вы можете отключить извлечение конечного автомата через меню «Назначения» -> «Настройки» -> «Настройки анализа и синтеза» -> «Дополнительные настройки» -> «Извлечь конечные автоматы VHDL».

Начнем с настройки по умолчанию, при которой извлечение включено. Например, если мы используем FPGA Cyclone IV, компилятор синтеза выберет однократное кодирование для конечного автомата. Вы увидите его в отчете о компиляции в разделе «Анализ и синтез» -> «Конечные автоматы». Требуются 4 комбинационные функции (LUT) и 3 логических регистра. Первую оценку скорости проектирования можно получить из синтезированного списка соединений, доступного через меню «Инструменты» -> «Просмотрщики списка соединений» -> «Просмотрщик технологических карт (пост-картографирование)»:

Список соединений с извлечением FSM (кликабельно)

Как видим, максимум:

  • 1 уровень логики между любыми двумя регистрами
  • 1 уровень логики между входом и регистром
  • 1 уровень логики между выходом и регистром

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

Если мы отключим извлечение FSM, то потребуются только 2 LUT и 2 регистра, потому что state теперь закодировано двоично. Нетлист будет выглядеть так:

Список соединений без извлечения FSM (кликабельно)

Произошло небольшое улучшение: вывод теперь может напрямую управляться регистром state[1]. Таким образом, ваш дизайн теперь, вероятно, будет иметь меньшее время вывода.

Здесь улучшение стало возможным после отключения извлечения конечного автомата. Но, как правило, это не так, потому что все зависит от фактической кодировки типа state_type. Если мы оставим извлечение FSM отключенным и изменим объявление state_type на:

  type state_type is (s3,s1,s2,s4);  

Тогда результат синтеза опять хуже: требуется 3 LUT и 2 регистра, и 1 уровень логики между регистром и выходом.

person Martin Zabel    schedule 28.04.2016