18 / 63 · Conceito
Comparadores e especificação dos limites
Distinga comparações unsigned e signed dos mesmos bits e verifique condições de fronteira.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
A posição mais alta que difere decide
Compare dois vetores unsignedunsigned Interpretação de uma sequência de bits como inteiro não negativo. Com n bits, o intervalo é de 0 a 2^n−1; pode diferir da interpretação signed dos mesmos bits. Saiba mais a partir do MSBMSB Bit de maior peso. Seu índice depende do sentido de declaração do vetor; não se deve supor que sempre tenha o maior número. Saiba mais. No primeiro bit diferente, o que tem 1 é maior. Definindo , em quatro bits:
é o resultado booleano da comparação. Uma posição inferior só influi quando todas as superiores coincidem. A igualdade é a AND de todos os .
A comparação signed interpreta primeiro o sinal
4'b1111 e 4'b0001 são 15 e 1 em unsigned, mas -1 e 1 em signed. Com sinais diferentes, o negativo é menor. logic [3:0] e logic signed [3:0] armazenam a mesma quantidade de bits; muda a interpretação dos operadores.
logic [3:0] a, b;
logic unsigned_lt, signed_lt;
assign unsigned_lt = a < b;
assign signed_lt = $signed(a) < $signed(b);Este código pressupõe larguras iguais. Se forem diferentes, decida primeiro para qual largura estender antes de aplicar um cast.
A ordem entre os mesmos bits pode se inverter conforme o contrato de sinal. Não aplique diretamente a signed a regra unsigned de comparação a partir do bit superior.
- 1111 versus 0001: As mesmas entradas de quatro bits
- Sem sinal: 15 é maior que 1
- Com sinal: −1 é menor que 1
Fixe os limites em palavras
Um buffer de 16 elementos está cheio com count==16 e aceita mais um com count<16. Se count tiver quatro bits, não representa 16 e a própria condição de cheio falha. Revise em conjunto o comparador e o intervalo de seus operandos.
Para um limite , teste primeiro , tratando separadamente os valores fora do intervalo. Projete testes que distingam deliberadamente < de <=. Comparar apenas o valor após o retorno modular unsigned não recupera um carry já perdido.
Experimente
Quantos bits são necessários para a ocupação de uma FIFO de 0 a 16? Uma comparação, sozinha, pode decidir se pop e push simultâneos são permitidos quando ela está cheia?
Ler a explicação
São 17 valores: cinco bits são necessários. Aceitar push enquanto um elemento é retirado depende da política de interface. count < 16 sozinho pode impedir a troca com a FIFO cheia; para permiti-la, deve-se considerar a aceitação real do pop.