Atraso do Portão Verilog
Os elementos digitais são entidades binárias e só podem conter um dos dois valores - 0 e 1. No entanto, a transição de 0 para 1 e 1 para 0 tem um atraso de transição e também cada elemento de porta para propagar o valor da entrada para a saída.
Por exemplo, uma porta AND de duas entradas tem que mudar a saída para 1 se ambas as entradas se tornarem 1 e voltar para 0 quando qualquer uma de suas entradas se tornar 0. Esses atrasos de porta e pino a pino podem ser especificados em Verilog ao instanciar primitivas lógicas.
Atrasos de subida, descida e desligamento
O tempo necessário para a saída de uma porta mudar de algum valor para 1 é chamado de aumento atraso. O tempo necessário para a saída de uma porta mudar de algum valor para 0 é chamado de queda atraso. O tempo necessário para a saída de uma porta mudar de algum valor para alta impedância é chamado de desligar atraso.
Esses atrasos são realmente aplicáveis a qualquer sinal, pois todos eles podem subir ou descer a qualquer momento em circuitos reais e não estão restritos apenas às saídas dos portões. Existem três maneiras de representar atrasos de porta e o formato de dois atrasos pode ser aplicado à maioria das primitivas cujas saídas não transitam para alta impedância. Como um formato de três atrasos não pode ser aplicado a uma porta AND porque a saída não irá para Z para qualquer combinação de entrada.
// Single delay specified - used for all three types of transition delays
or #(<delay>) o1 (out, a, b);
// Two delays specified - used for Rise and Fall transitions
or #(<rise>, <fall>) o1 (out, a, b);
// Three delays specified - used for Rise, Fall and Turn-off transitions
or #(<rise>, <fall>, <turn_off>) o1 (out, a, b);
Se apenas um único atraso for especificado, todos os três tipos de atrasos usarão o mesmo valor fornecido. Se houver dois atrasos especificados, o primeiro representa aumento e o segundo representa queda atraso. Se houver três atrasos especificados, eles representam aumento , cair e desligar atrasos respectivamente.
Formato de um atraso
module des ( input a, b,
output out1, out2);
// AND gate has 2 time unit gate delay
and #(2) o1 (out1, a, b);
// BUFIF0 gate has 3 time unit gate delay
bufif0 #(3) b1 (out2, a, b);
endmodule
module tb;
reg a, b;
wire out1, out2;
des d0 (.out1(out1), .out2(out2), .a(a), .b(b));
initial begin
{a, b} <= 0;
$monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2);
#10 a <= 1;
#10 b <= 1;
#10 a <= 0;
#10 b <= 0;
end
endmodule
Veja que a saída de AND as portas mudam 2 unidades de tempo depois que uma de suas entradas muda. Por exemplo, b se torna 1 enquanto a já é 1 em T=20. Mas a saída se torna 1 somente em T=22. Da mesma forma, a volta a zero em T=30 e a saída obtém o novo valor em T=32.
O atraso do portão é especificado como 3 unidades de tempo para BUFIF0 e, portanto, quando b muda de 0 para 1 enquanto a já está em 1, a saída leva 3 unidades de tempo para ser atualizada para Z e finalmente o faz em T=23.
Registro de simulação
ncsim> run T=0 a=0 b=0 and=x bufif0=x T=2 a=0 b=0 and=0 bufif0=x T=3 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=13 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=23 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=32 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=43 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Formato de dois atrasos
Vamos aplicar o mesmo testbench mostrado acima a um modelo Verilog diferente mostrado abaixo onde rise e caem atrasos são explicitamente mencionados.
module des ( input a, b,
output out1, out2);
and #(2, 3) o1 (out1, a, b);
bufif0 #(4, 5) b1 (out2, a, b);
endmodule
Registro de simulação ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=5 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=14 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=24 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=45 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Formato de três atrasos
module des ( input a, b,
output out1, out2);
and #(2, 3) o1 (out1, a, b);
bufif0 #(5, 6, 7) b1 (out2, a, b);
endmodule
Registro de simulação ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=6 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=15 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=27 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=46 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Atrasos Min/Typ/Max
Os atrasos não são os mesmos em diferentes partes do chip fabricado nem são os mesmos para diferentes temperaturas e outras variações. Portanto, o Verilog também fornece um nível extra de controle para cada um dos tipos de atraso mencionados acima. Cada porta digital e célula de transistor tem um atraso mínimo, típico e máximo especificado com base no nó do processo e é normalmente fornecido por bibliotecas de fundição de fabricação.
Para cada tipo de atraso - subida, descida e desligamento - três valores min , tipo e máximo pode ser especificado e significar atrasos mínimos, típicos e máximos.
module des ( input a, b,
output out1, out2);
and #(2:3:4, 3:4:5) o1 (out1, a, b);
bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b);
endmodule
Registro de simulação ncsim> run T=0 a=0 b=0 and=x bufif0=x T=4 a=0 b=0 and=0 bufif0=x T=7 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=16 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=23 a=1 b=1 and=1 bufif0=1 T=28 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=34 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=47 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete.
Verilog