qual é o significado do símbolo de barra vertical "|" na frente de uma variável

10

Estou analisando algum código verilog e encontrei algo como

wire z = |a & b;

enquanto a simultaneidade o código se comporta exatamente como

wire z = a & b;

então eu queria saber qual é o significado do |símbolo (pipe)? Isso tem algum impacto na simulação / síntese?

Ulli
fonte

Respostas:

17

Este é um operador de redução pouco a pouco . |a & bsignifica que você aplica um OR lógico a todos os bits de a(produzindo um único bit) e, em seguida, executa um AND lógico desse bit e b. |anão tem efeito quando aé um único bit.

No entanto, é bastante comum ver a redução bit a bit aplicada a valores de bit único. Um caso típico é o código gerado automaticamente, em que a largura real apode depender da configuração. Outra possibilidade é que este seja um código legado, que ajá teve vários bits. Quando ase tornou um valor de bit único, essa linha ainda estava tecnicamente correta, então o operador de redução agora desnecessário foi deixado em.

Dmitry Grigoryev
fonte