Qual é a diferença entre usar:
ENTITY MyDemo is
PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo;
e
ENTITY MyDemo is
PORT(X: IN BIT; F: OUT BIT );
END MyDemo;
Quais são as limitações do uso do BIT sobre STD_LOGIC e vice-versa? Eles são completamente capazes de intercambiar? Entendo que, se eu definir STD_LOGIC, não posso usá-lo com um BIT_Vector para acessar os elementos na matriz. Mas eu não consigo ver a diferença.
Respostas:
Bit
é um tipo predefinido e só pode ter o valor0
ou1
. OBit
tipo é um valor idealizado.std_logic
faz parte dostd_logic_1164
pacote e fornece modelagem de sinais mais realista em um sistema digital. É capaz de ter nove valores diferentes. Normalmente dentro de seu código você só vai usar0
,1
eZ
(High-Z). MasU
(Não inicializado) eX
(Desconhecido) também são muito úteis ao modelar o sistema em um banco de testes.O
std_logic_1164
pacote também fornece funções de conversão para converterstd_logic
aBit
.fonte
A maioria das pessoas usa
std_logic
. Isso permiteu
(indefinido),x
(desconhecido) ez
(alta impedância), que bit não. Embora você nunca tristate em um chip e, portanto, não precisez
,u
é útil para encontrar redefinições ausentes.x
é útil para encontrar vários drivers.fonte
X
encontrar vários drivers.std_logic
é realmente o tipo padrão do setor para VHDL, mas também é um dos recursos mais mal utilizados do VHDL.std_logic
é um sinal resolvido, o que significa que uma função é usada para resolver o valor do sinal no caso de vários drivers. Mas na grande maioria dos casos, vários drivers são um erro. O uso de um tipo não resolvido comostd_ulogic
esse seria marcado pelo compilador como um erro.std_ulogic
. Mas lembre-se de que muitos núcleos serão gravados,std_logic
portanto você provavelmente verá alguns deles.std_logic
é realmente o tipo mais comum; Estou apenas argumentando que seu uso não está de acordo com a intenção original: modelagem de sinais de vários estados. Para projetos internos, geralmente consideramos apenas1
ou0
um driver. Consulte electronics.stackexchange.com/questions/17524/… para uma discussão completa sobre o tópico.std_logic
tem uma função de resoluçãoNão só
std_logic
têm estados mais úteis além1
e0
, ele também tem uma função de resolução definido.Uma função de resolução é um conceito de linguagem VHDL. É uma função que está associada a um tipo e determina o que acontece quando vários valores desse tipo são aplicados a um único sinal. A sintaxe é:
onde
std_ulogic
está a versão não resolvida (e, portanto, muito menos útil) destd_logic
.Em particular, isso implica coisas boas como
0
e1
leva aX
:Isso faz sentido intuitivo, pois entendemos
X
ser o estado em que vários valores incompatíveis são aplicados a um único fio.std_logic
também sabe como resolver todos os outros possíveis pares de sinais de entrada de acordo com uma tabela presente no LRM.bit
por outro lado, não possui uma função de resolução e, se a tivéssemos usado no exemplo acima, levaria a um erro de simulação no GHDL 0.34.Os possíveis valores de
std_logic
são uma boa opção, pois são padronizados pelo IEEE 1164 e lidam com muitos casos de uso comuns.fonte
O std_logic é mais rico que o bit e deve basicamente ser usado na maioria das vezes.
Há também o tipo booleano , que, como bit , tem dois valores. É o tipo de resultado resultante das comparações, o tipo esperado após um IF [bool] ou um WHEN [bool] , frequentemente usado para constantes de seleção:
constant ENABLE_DEBUG_INTERFACE : boolean := true;
Um lugar onde o bit pode ser preferido em relação ao std_logic é para grandes matrizes, memórias. Ao otimizar simuladores, o bit ocupa menos área na memória do simulador que o std_logic . E pode ser importante se o seu design instancia um GB de RAM.
Também pode ser mais rápido para projetos muito grandes, por exemplo, algo gerado automaticamente a partir da netlist no nível de porta pós-síntese.
Obviamente, esse aspecto do desempenho não faz parte da linguagem e depende da implementação do simulador VHDL.
fonte