Altifigence Academy

18 / 63 · Conceito

Comparadores e especificação dos limites

Distinga comparações unsigned e signed dos mesmos bits e verifique condições de fronteira.

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 ei=ai⊕bi‾e_i=\overline{a_i\oplus b_i}, em quatro bits:

gt⁡(a,b)=a3b‾3+e3a2b‾2+e3e2a1b‾1+e3e2e1a0b‾0\operatorname{gt}(a,b)=a_3\overline b_3+e_3a_2\overline b_2+e_3e_2a_1\overline b_1+e_3e_2e_1a_0\overline b_0

gt⁡(a,b)\operatorname{gt}(a,b) é o resultado booleano da comparação. Uma posição inferior só influi quando todas as superiores coincidem. A igualdade é a AND de todos os eie_i.

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.

SystemVerilog
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.

Defina a interpretação antes de comparar bits
  1. 1111 versus 0001: As mesmas entradas de quatro bits
  2. Sem sinal: 15 é maior que 1
  3. 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 TT, teste primeiro T−1,T,T+1T-1,T,T+1, 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.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.