7 / 37 · Conceito
Larguras de fatias, concatenação e repetição de bits
Calcule largura total e preservação do valor ao construir caminhos de dados.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Concatenar não é somar
{a,b} coloca os bits de b depois dos de a. Com larguras M e N, o resultado mede M+N. Para sequências 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:
Se a=2'b10 e b=3'b101, resulta 5'b10101, 21. É diferente da soma aritmética 7.
Os bits de a sobem tantas posições quanto a largura de b. A concatenaçãoConcatenação Operação que une sequências de bits lado a lado. A largura resultante é a soma de suas larguras; não é uma soma numérica. é interpretada como a×2³+b, não a+b.
- a = 10: Largura de dois bits, inteiro 2
- b = 101: Largura de três bits, inteiro 5
- {a,b} = 10101: Largura de cinco bits, 2×8+5=21
Anote as larguras junto a cada expressão
logic [7:0] word;
logic [3:0] upper, lower;
logic [7:0] swapped;
assign upper = word[7:4];
assign lower = word[3:0];
assign swapped = {lower, upper};Com entrada 8'hA3, swapped vale 8'h3A. Errar uma extremidade da fatiaFatia de bits Operação que seleciona um intervalo contíguo de um vetor. O intervalo determina a largura e a ordem dos bits do resultado. muda largura ou valor. Uma seleção parcial pode ser tratada como unsigned mesmo que o vetor original seja signed; confira seu significado antes de operar com sinal.
Extensão de sinal por repetição
logic signed [3:0] small;
logic signed [7:0] extended;
assign extended = {{4{small[3]}}, small};Concatenam-se quatro cópias do sinal e os quatro bits originais: oito bits no total. Estender sinal não é somar 1 porque o 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 vale 1; amplia-se a representação para preservar o valor interpretado.
O intervalo q[N-2:0] de um deslocador genérico não é válido para N=1. Restrinja o mínimo suportado ou trate N=1 num ramo generate. Parametrizar exige mais do que substituir números por variáveis.
Experimente
a tem três bits 101 e b dois bits 11. Qual é a largura e o valor de {a,b}? O que resta ao armazená-lo em quatro bits?
Ler a explicação
São cinco bits, 10111, com valor . Em quatro bits, o superior é descartado: resta 0111, ou seja, 7.