Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Escopo da escala de tempo da Verilog

Prazo padrão


Embora se espere que os módulos Verilog tenham uma escala de tempo definida antes do módulo, os simuladores podem inserir uma escala de tempo padrão. A escala de tempo real que é aplicada em qualquer escopo em uma hierarquia elaborada em Verilog pode ser impressa usando a tarefa do sistema $printtimescale que aceita o escopo como um argumento.
  
  
module tb;
	initial begin
		// Print timescale of this module
		$printtimescale(tb);
		// $printtimescale($root);
	end
endmodule

  

Veja que mesmo que uma diretiva de escala de tempo não tenha sido colocada antes deste módulo, o simulador acabou aplicando um valor de escala de tempo de 1ns/1ns.
Registro de simulação
xcelium> run
Time scale of (tb) is  1ns /  1ns
xmsim: *W,RNQUIE: Simulation is complete.

Escopo de escala de tempo padrão


Por padrão, uma diretiva de escala de tempo colocada em um arquivo é aplicada a todos os módulos que seguem a diretiva até a definição de outra diretiva de escala de tempo.
  
  
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

module alu;
  
endmodule

`timescale 1ns/10ps

module des;
  
endmodule

  

No exemplo acima, tb e alu terminam com uma escala de tempo de 1ns/1ns enquanto des obtém uma escala de tempo de 1ns/10ps por causa da colocação da diretiva antes da definição do módulo des
Registro de simulação
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  1ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

Escopo entre arquivos Verilog


Outros arquivos podem ser incluídos no arquivo atual usando um `include diretiva que é uma diretiva de pré-processador e faz com que o compilador coloque o conteúdo do arquivo incluído antes da compilação. Portanto, isso equivale a simplesmente colar todo o conteúdo do outro arquivo neste arquivo principal.
  
  
// main.v
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

`include "file_alu.v"
`include "file_des.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

Veja que os resultados são exatamente os mesmos do exemplo anterior. alu obtém uma escala de tempo de 1ns/1ps porque foi a última diretiva que permaneceu válida até que o compilador encontrou a definição de alu apesar de colocá-la em um arquivo diferente. des recebe uma escala de tempo de 1ns/10ps porque a diretiva foi substituída antes de sua definição.
Registro de simulação
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  1ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.

A troca de arquivos pode alterar a escala de tempo


A ordem de inclusão dos arquivos desempenha um papel importante na redefinição das diretrizes de escala de tempo, o que fica evidente no exemplo abaixo.
  
  
// main.v
`timescale 1ns/1ps

module tb;
  des m_des();
  alu m_alu();
  
  initial begin
    $printtimescale(tb);
    $printtimescale(tb.m_alu);
	$printtimescale(tb.m_des);
  end
endmodule

// NOTE! Swapped order of inclusion
`include "file_des.v"
`include "file_alu.v"

// file_alu.v
module alu;
endmodule

// file_des.v
`timescale 1ns/10ps

module des;
  
endmodule

  

Veja que o módulo alu agora recebe uma escala de tempo de 1ns/10ps.
Registro de simulação
xcelium> run
Time scale of (tb) is  1ns /  1ps
Time scale of (tb.m_alu) is  1ns /  10ps
Time scale of (tb.m_des) is  1ns /  10ps
xmsim: *W,RNQUIE: Simulation is complete.


Esta é uma das razões para ter uma diretiva de escala de tempo na parte superior dos arquivos para que todos os módulos nesse arquivo assumam a escala de tempo correta, independentemente da inclusão do arquivo.

No entanto, essa abordagem pode dificultar a compilação com uma precisão de escala de tempo diferente (valor após o oblíquo) sem alterar cada arquivo. Muitos compiladores e simuladores também oferecem uma opção para substituir os valores de escala de tempo padrão que serão aplicados a todos os módulos.

Verilog

  1. Tutorial Verilog
  2. Concatenação Verilog
  3. Atribuições Verilog
  4. Verilog Blocking &Non-Blocking
  5. Funções Verilog
  6. Tarefa Verilog
  7. Escopo de Referência Hierárquica Verilog
  8. Gerador de Relógio Verilog
  9. Funções matemáticas Verilog
  10. Formato de hora Verilog