Gate Delays
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 68 de 90.
Na lição anterior, abordamos atrasos gerais usados como #10 a = b;. Eles aguardam antes de executar uma instrução.
Nesta lição, abordaremos atrasos de portas, que são específicos de primitivas de portas integradas, como and, or e not. Um atraso de porta modela quanto tempo uma porta de hardware leva para produzir uma saída após suas entradas mudarem.
Em um hardware real, as portas não respondem instantaneamente. Há um pequeno atraso. Ao usar primitivas de portas integradas, você pode adicionar um atraso para simular o tempo de propagação da porta. A saída muda somente após o atraso especificado.
Diferença entre atraso geral e atraso de gate
| Atraso geral | Atraso de gate | |
|---|---|---|
| Sintaxe | #10 a = b; | and #5 (out, a, b); |
| Posição | # antes de uma instrução | # dentro da primitiva de gate |
| Finalidade | Esperar antes de executar | Modelar o tempo de propagação do gate |
Sintaxe:
gate_type #(delay) (output, input1, input2, ...);#(delay) especifica quantas unidades de time o gate leva para responder.
Exemplo simples
and #5 (out, a, b);Esta porta AND leva 5 unidades de tempo para alterar sua saída depois que a ou b muda.
Atraso de gate com múltiplas entradas
nand #8 (out, a, b, c, d); // NAND de 4 entradas com atraso de 8 unidades de tempoRegras importantes
| Regra | Explicação |
|---|---|
| O delay vem depois do nome do gate | and #5 (out, a, b) |
| O valor do delay está em unidades de time | Baseado na diretiva timescale |
| Todas as inputs afetam o output | Qualquer alteração na input aciona o delay |
| Não sintetizável | Os delays dos gates servem apenas para simulação |
Desafio
Add os delay de gate ausentes neste module. Use delay diferentes para cada gate.
O que fazer:
- AND gate: delay de 5 time unit
- OR gate: delay de 3 time unit
- NOT gate: delay de 2 time unit
Experimente você mesmo
module gate_delay_challenge;
reg a, b;
wire and_out, or_out, not_out;
// TODO: Adicione porta AND com atraso de 5 unidades de tempo (entradas a, b)
// TODO: Adicione porta OR com atraso de 3 unidades de tempo (entradas a, b)
// TODO: Adicione porta NOT com atraso de 2 unidades de tempo (entrada a)
initial begin
$monitor("Time %0t: a=%b, b=%b | and=%b, or=%b, not=%b",
$time, a, b, and_out, or_out, not_out);
a = 1; b = 1;
#10 $finish;
end
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online