Я анализирую некоторый код verilog и нашел что-то вроде
wire z = |a & b;
в то время как симуляция код ведет себя так же, как
wire z = a & b;
так что мне было интересно, что означает |
символ (труба)? Влияет ли это на симуляцию / синтез?
Это побитовый оператор сокращения . |a & b
означает, что вы применяете логическое ИЛИ ко всем битам a
(производя один бит), а затем делаете логическое И для этого бита и b
. |a
не имеет никакого эффекта, когда a
один бит.
Тем не менее, довольно часто можно увидеть побитовое уменьшение, применяемое к значениям одного бита. Одним типичным случаем является автоматически сгенерированный код, где фактическая ширина a
может зависеть от конфигурации. Другая возможность - это устаревший код, в котором a
когда-то было несколько битов. Когда значение a
стало единичным битом, эта строка была технически правильной, так что теперь ненужный оператор сокращения остался в.