6 / 37 · Conceito
Índices de vetor, ordem de bits e sinal
Distinga índices, ordem de transmissão serial e interpretação aritmética ao ler caminhos de dados.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
O índice é um nome; a declaração define o sentido
Em logic [7:0] a;, a[7] é a posição à esquerda. Em logic [0:7] b;, é b[0]. Ao atribuir 8'h96, ambos mostram 10010110 da esquerda para a direita, mas com índices diferentes. Só se pode pressupor «bit 0 é o LSBLSB Bit de menor peso. É preciso conferir em conjunto o sentido da notação e as regras de indexação.» depois de conferir a declaração.
Manter um sentido consistente em toda a interface facilita revisões. Especifique também a ordem exibida pela ferramenta de ondas e a dos vetores do arquivo. O JSON do curso enumera bits a partir do LSB; os vetores RTL geralmente são lidos 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..
Confira a direção pelas conexões
Em q <= {q[1:0], din};, o próximo q[2] recebe o antigo q[1], q[1] recebe o antigo q[0] e q[0] recebe din.
A especificação precisa diz qual índice recebe qual sinal, não para que lado a seta foi desenhada.
As setas indicam as posições de armazenamento percorridas. Todos os registradoresRegistrador Circuito que armazena vários bits de estado. Os registradores síncronos deste curso capturam a entrada especificada na borda de clock. Saiba mais leem valores anteriores na mesma borda; din não atravessa até q2 numa única borda.
- din: Bit aceito nesta borda
- q0: Capture din
- q1: Capture o q0 anterior
- q2: Capture o q1 anterior
Deslocamento aritmético e lógico
>> desloca logicamente à direita e preenche com 0 as posições vagas da esquerda, as mais significativas. >>> permite deslocamento aritmético com extensão de sinal quando o operando esquerdo é signed. Os mesmos bits podem produzir resultados diferentes conforme essa declaração.
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;Com x=8'b11111000 (-8), os resultados são 01111100 e 11111100. O deslocamento aritmético de negativos nem sempre coincide com o arredondamento de uma divisão inteira negativa: confira isso ao projetar algoritmos numéricos.
Experimente
Para q=101 de três bits e din=0, calcule o próximo valor de q<={q[1:0],din} e q<={din,q[2:1]}.
Ler a explicação
Ambas dão 010: para essa entrada, as direções coincidem por acaso. Com q=001 e din=0, dão 010 e 000, distinguindo o erro de direção.