Перейти к содержанию
    

Логическое И с операндами-векторами

Здравствуйте, коллеги
Пытаюсь удостовериться в правильности ответа данного поста: https://stackoverflow.com/questions/17327680/what-is-the-difference-between-single-and-double-ampersand-binary-opera
А именно: в случае если операнд оператора && (логическое И) является вектором, то этот операнд сначала сравнивается с 0 (нулём), и результат этого сравнения уже идёт на вход &&. Как ни шерстил стандарт - ничего подобного не нашёл.

Теоретически можно сравнивать вектор с нулём, или приводить его к одному биту. Т.е. возможны два подхода, и они по разному работают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При логических операциях целые неявно приводятся к булевому типу и потом выполняется операция. Та же логика действует в обычном:

int x = ...;
...
if(x) begin
   ...
end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, kirill70674 сказал:

если операнд оператора && (логическое И) является вектором

что значит "вектором"? Вы говорите о указателе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, kirill70674 said:

Пытаюсь удостовериться в правильности ответа данного поста: https://stackoverflow.com/questions/17327680/what-is-the-difference-between-single-and-double-ampersand-binary-opera

да простейший код скидать и покрутить

module pipa_popa ;

  int pipa;
  int popa;

  initial begin
    popa = 4;
    pipa = 2;
    //
    if (popa) begin
      $display("popa if pass");
    end
    if (pipa) begin
      $display("pipa if pass");
    end
    //
    if (popa & pipa) begin
      $display("pipa & popa if pass");
    end
    if (popa && pipa) begin
      $display("pipa && popa if pass");
    end
    $stop;
  end
endmodule

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 26.10.2023 в 10:55, AlexRayne сказал:

что значит "вектором"? Вы говорите о указателе?

Какие указатели в SystemVerilog?

Вектор - синтезируемый тип в SV.

В 26.10.2023 в 05:44, dxp сказал:

При логических операциях целые неявно приводятся к булевому типу и потом выполняется операция. Та же логика действует в обычном:

int x = ...;
...
if(x) begin
   ...
end

 

А где это написано?

В стандарте есть запись: "числа не равные нулю интерпретируются как логическая единица".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 часов назад, kirill70674 сказал:

Вектор - синтезируемый тип в SV

Вектор -- синтезируемый тип в V. В SV это называется пакованный массив (packed array). (если уж наводить строгость).

12 часов назад, kirill70674 сказал:

А где это написано?

В стандарте есть запись: "числа не равные нулю интерпретируются как логическая единица".

Ну, отдельного встроенного булевого типа в V/SV нет, имелось в виду, что автоматически приводится к однобитному значению, пригодному для анализа на true/false.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...