что означает символ трубы «|» перед переменной

10

Я анализирую некоторый код verilog и нашел что-то вроде

wire z = |a & b;

в то время как симуляция код ведет себя так же, как

wire z = a & b;

так что мне было интересно, что означает |символ (труба)? Влияет ли это на симуляцию / синтез?

Улли
источник

Ответы:

17

Это побитовый оператор сокращения . |a & bозначает, что вы применяете логическое ИЛИ ко всем битам a(производя один бит), а затем делаете логическое И для этого бита и b. |aне имеет никакого эффекта, когда aодин бит.

Тем не менее, довольно часто можно увидеть побитовое уменьшение, применяемое к значениям одного бита. Одним типичным случаем является автоматически сгенерированный код, где фактическая ширина aможет зависеть от конфигурации. Другая возможность - это устаревший код, в котором aкогда-то было несколько битов. Когда значение aстало единичным битом, эта строка была технически правильной, так что теперь ненужный оператор сокращения остался в.

Дмитрий Григорьев
источник