5 / 37 · Conceito
logic, wire, X/Z e larguras explícitas
Separe tipo e armazenamento e verifique literais, comparações, extensões e valores desconhecidos.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Tipo, acionamento e armazenamento são perguntas distintas
logic é tipo de quatro estados; wire descreve uma conexão de rede, também capaz de carregar quatro estados. Uma variável logic pode ser resultado combinacional ou estado com clock conforme regras de acionamento. Nenhum nome garante flip-flop: encontre atribuição contínua, processo combinacional ou de borda. Use uma fonte prevista por sinal comum. Redes com múltiplos acionamentos resolvidos e interfaces bidirecionais exigem outro contrato elétrico e de ferramenta e não fazem parte destes exemplos.
Defina largura e interpretação
logic [7:0] u tem oito bits sem sinal; logic signed [7:0] s interpreta os mesmos em complemento de dois. 8'hFF vale 255 para u e −1 para s. Vetor packed leva bits juntos, não uma sequência temporal de oito valores.
module typed_examples (
input logic [3:0] a, b,
input logic signed [7:0] s,
output logic [4:0] full_sum,
output logic signed [8:0] extended_s,
output logic negative,
output logic any_bit, all_bits, parity
);
assign full_sum = {1'b0, a} + {1'b0, b};
assign extended_s = {s[7], s};
assign negative = s < 8'sd0;
assign any_bit = |a;
assign all_bits = &a;
assign parity = ^a;
endmoduleextended_s repete o bit de sinal; acrescentar zero transforma −1 em +255. Concatenação é expressão sem sinal, então aritmética assinada precisa interpretação explícita ou intermediário adequado. Aqui o padrão desejado vai ao destino com sinal. Use 4'd15,8'hFF,8'sd0 quando a largura importa. Inteiro sem tamanho pode ampliar expressão: examine os dois operandos e contexto de atribuição, não só o esquerdo.
Três famílias de operadores
a & b atua por bit; a && b verifica se os dois vetores são verdadeiros e retorna um bit; &a reduz exigindo todos 1. a=0011, b=0101 produzem 0001,1,0. ^a calcula paridade, 0 para 0011. Separe expressões ambíguas em intermediários para registrar o intervalo de cada sinal.
Desconhecido não é terceira tensão
X representa desconhecido e Z alta impedância, não tensões exatas. Modelo de dois estados não prova quatro estados. Faça reset explícito em vez de esconder X como zero. == pode retornar X quando não há decisão; actual !== expected no banco acusa X/Z diante de expectativa conhecida. Case equality não significa detectar X físico em hardware comum.
Prática: estender, somar e comparar
a=15, b=1 dá full_sum=10000. s=8'h80 dá extended_s=110000000, negative=1; s=8'h7F dá 001111111, negative=0. Teste zero, máximo positivo, mínimo negativo,−1. Troque para {1'b0, s} e confirme falhas negativas. Troque !== por != e injete X em actual: condição desconhecida pode não relatar a falha pretendida.