операция std_logic: = 'X' - PullRequest
       11

операция std_logic: = 'X'

2 голосов
/ 08 июля 2019

Суммированный вопрос внизу.

Я анализирую и изучаю существующий код VHDL. В этом коде port reset_i был инициализирован как 'X' , как вы можете видеть в приведенном ниже коде.

entity ADC_fsm is
Port ( clk_i                :   in  std_logic := 'X';
       reset_i              :   in  std_logic := 'X';
       di_req_i             :   in  std_logic := 'X';
       wr_ack_i             :   in  std_logic := 'X';
       spi_ssel_i           :   in  std_logic := 'X';
       reg_enable_i         :   in  std_logic := 'X';
       reg_data_i           :   in  std_logic_vector(23 downto 0);
       adc_data_i           :   in  std_logic_vector(11 downto 0);
       bitslip_o            :   out std_logic;
       sync_done_o          :   out std_logic; 
       wr_en_o              :   out std_logic;
       spi_data_o           :   out std_logic_vector(23 downto 0) := (others => '0')
      );
end ADC_fsm;

Этот порт (reset_i) не был подключен к другому внешнему порту или сигналу.

И в следующем коде,

begin
process(clk_i, reset_i)
    begin
        if (reset_i = '1') then
            wr_en_o       <= '0';
            sync_done_o   <= '0';
            bitslip_o     <= '0';
            spi_data_o    <= (others => '0');

        s_delay_count     <= 0;
        s_write_indicator <= 0;

            state       <= ready;

        elsif rising_edge(clk_i) then

        wr_en_o       <= '0';
            sync_done_o   <= '0';
            bitslip_o     <= '0';

Я знаю, что «Х» не является ни 1, ни 0. Итак, сначала, если оператор в приведенном выше коде не будет работать.

Мой вопрос, как насчет Эльсифа.

«Х» - это не «1», поэтому «Х» входит в ситуацию с эльсифом?

Короче.

if (reset_i ='1') then
(A)
elsif(rising_edge(clk_i)) then
(B)
end if;

Код (B) работает только тогда, когда reset_i = '0'? или также работает, когда reset_i = 'X'?

1028 * БЛАГОДАРЯ *

1 Ответ

5 голосов
/ 08 июля 2019

Тип std_logic является типом перечисления с 9 значениями и имеет следующие 9 значений:

'U','X','0','1','Z','W','L','H','-'

Каждое значение - это просто отдельный произвольный символ. Итак, линия

if reset_i ='1' then            -- the brackets are not required

будет истинным, если и только если reset_i равно '1'. Вот и все. 'X' это просто другой, произвольный символ.

...