Этот код VHDL создает конфликт присваивания? - PullRequest
1 голос
/ 10 апреля 2019

В VHDL и других аппаратных языках, насколько я понимаю, все условия истинной логики в процессе происходят одновременно.У меня есть переменная std_logic FLAG, которая кажется мне конфликтующей.Я видел этот код в публикации, и я не понимаю его.Похоже, переменной FLAG можно присвоить два значения.Это плохой код или я что-то упустил?(У процесса есть несколько триггеров ввода, но нет CLK.) Имена переменных были изменены, чтобы защитить невинных.

... 

process(op_state, ...)
begin
    FLAG <= '0';

    case op_state is
        when STATE_SLEEP =>
            FLAG <= '1';

    when    some other cases not containing FLAG

    end case;
end process;

1 Ответ

2 голосов
/ 10 апреля 2019

Я предполагаю, что оба назначения выполняются в одном и том же процессе.

Этот стиль кодирования разрешен.Если в процессе есть несколько назначений, последнее «выигрывает» от предыдущего.Это даже на части вектора.

Я часто использую это, чтобы установить значение по умолчанию:

  -- Default set all read bits to zero 
  axil_rdata<= (others => '0');

  case (radrs) is                                     
  when X"00" => axil_rdata( 7 downto 0) <= control;   
  when X"04" => axil_rdata(15 downto 0) <= status;
  when X"08" => axil_rdata              <= counter;
  ... 

Таким образом, все биты axil_rdata сначала устанавливаются в ноль.Затем некоторым битам присваивается новое значение.

...