Как написать это в общем виде (конечный автомат, который использует счетчик, который может увеличиваться для каждого проекта) - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь написать этот код в общем виде. Есть ли способ заменить числа общими выражениями. (1,2,3..max) «max» будет меняться в зависимости от проекта и во время проекта. Каждый раз, когда появляется новая переменная, я добавляю еще одну строку в конец кода, меняю номер самостоятельно.

Я пытался написать max, max -1, max-2, max-3 .. Но этоне хорошо, когда Макс является универсальным.

 case state_counter is
                when max-6 => block_output  <= variable_a;
                when max-5 => block_output  <= variable_b
                when max-4 => block_output  <= variable_c;
                when max-3 => block_output  <= variable_d;
                .....
                when max-1  => block_output  <= something;
                when max    => block_output  <= something_else;
 case state_counter is
                when 1 => block_output  <= variable_a;
                when 2 => block_output  <= variable_b
                when 3 => block_output  <= variable_c;
                when 4 => block_output  <= variable_d;
                .....
                when max-1  => block_output  <= something;
                when max    => block_output  <= something_else;

1 Ответ

0 голосов
/ 04 ноября 2019

Немного обойдемся, но можете ли вы поместить все свои переменные в массив, а затем просто выбрать переменную из этого массива? Вам нужно будет поместить переменные в массив. Я не пытался скомпилировать его, но он должен выглядеть примерно так.

Предполагается, что на выходе получится значение slv (от 7 до 0), и у вас есть общий MAX для установки размера

architecture A1 of example is
 type t_output_array is array (INTEGER range <>) of std_logic_vector(7 downto 0);
 signal output_array : t_output_array(1 to MAX);
 signal I : integer range 0 to MAX; -- To select in the array
begin
 process( CLK )
  begin
   if Rising_edge( CLK ) then
      block_output  <= output_array(I);
    end if;
  end process;
end architecture A1;

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

G1: for I in 0 to N generate
  -- Component instances and/or process
end generate G1;
...