Parece que o mundo decidiu que std_logic
(e std_logic_vector
) é a maneira padrão de representar bits em VHDL. A alternativa seria std_ulogic
, o que não está resolvido.
Isso me surpreende porque, normalmente, você não está descrevendo um ônibus , então você não quer vários drivers e não precisa resolver um sinal. A vantagem std_ulogic
seria que o compilador avisa desde o início se você tiver vários drivers.
Pergunta: isso é apenas uma coisa cultural / histórica, ou ainda existem razões técnicas para usar std_logic?
Respostas:
Std_logic é um subtipo de std_ulogic e possui exatamente uma propriedade extra: é resolvida se houver vários drivers.
Independentemente da prática comum, std_ulogic é o tipo correto a ser usado para sinais não resolvidos que precisam de lógica com 9 valores. (Geralmente, o uso de "bit" é ainda mais correto - por exemplo, em algumas arquiteturas FPGA que não possuem algo como 'X' ou 'U').
Basicamente, a melhor coisa a fazer é usar o tipo correto para o trabalho. Muitas vezes, as más práticas são propagadas por pessoas que apenas repetem o estilo que elas veem outros usam, sem entender o porquê.
fonte
Minha história é esta:
Comecei (por volta de 1999 IIRC) usando
std_ulogic*
o tempo todo - como é a coisa certa a fazer, pelas razões que você descreve.Então eu tive que fazer interface com um monte de IP de fornecedor gerado pelo assistente, todos eles
std_logic
espalhados por toda a interface. O que significava conversões nos mapeamentos de portas (para os_vector
elementos), e fiquei preguiçoso e passei a usarstd_logic*
.No entanto, pareço cometer muito poucos erros de "motorista duplo", por isso não perdi
std_ulogic
tanto quanto pensaria. E odrivers
comando do Modelsim torna muito fácil encontrar "quem está dirigindo o quê" quando ocasionalmente preciso ...fonte
*vector
partes de porta ainda precisa de conversõesO IIRC recomenda o famoso Manual de Metodologia de Reutilização
std_logic(_vector)
, portanto, talvez grupos de metodologia em empresas etc. se espalhem ainda mais na forma de guias de codificação (obrigatórios). Pessoalmente, +1 para usarstd_ulogic
quando possível.fonte
Eu sei que é uma apresentação de slides horrivelmente colorida, mas explica a diferença muito bem:
http://web.archive.org/web/20151026150828/http://www.cs.auckland.ac.nz/~jmor159/reconfig/ppt/ResolutionFunctions.ppt
fonte