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

Semântica de agendamento Verilog


O design Verilog e o testbench normalmente têm muitas linhas de código compostas por always ou initial blocos, atribuições contínuas e outras instruções de procedimento que se tornam ativas em momentos diferentes no decorrer de uma simulação.

Cada mudança no valor de um sinal no modelo Verilog é considerada um evento de atualização . E processos como always e assign os blocos que são sensíveis a esses eventos de atualização são avaliados em uma ordem arbitrária e são chamados de evento de avaliação . Como esses eventos podem acontecer em momentos diferentes, eles são melhor gerenciados e garantidos de sua ordem correta de execução agendando-os em filas de eventos que são organizados por tempo de simulação.
  
  
module tb;
	reg a, b, c;
	wire d;
	
	// 'always' is a process that gets evaluated when either 'a' or 'b' is updated. 
	// When 'a' or 'b' changes in value it is called an 'update event'. When 'always'
	// block is triggered because of a change in 'a' or 'b' it is called an evaluation
	// event
	always @ (a or b) begin
		c = a & b;
	end
	
	// Here 'assign' is a process which is evaluated when either 'a' or 'b' or 'c'
	// gets updated
	assign d = a | b ^ c;
endmodule

  

Fila de eventos


Uma etapa de simulação pode ser segmentada em quatro regiões diferentes. Uma fila de eventos ativa é apenas um conjunto de processos que precisam ser executados no momento atual, o que pode resultar em mais processos a serem agendados em filas de eventos ativos ou outras. Os eventos podem ser adicionados a qualquer uma das regiões, mas sempre removidos do ativo região.

Quando todos os eventos na fila ativa para o passo de tempo atual foi executado, o simulador avança o tempo para a próxima etapa de tempo e executa sua fila ativa.
  
  
module tb;
	reg x, y, z
	
	initial begin
		#1 	x = 1;
			y = 1;
		#1 	z = 0;
	end
endmodule

  

A simulação começa no tempo 0, e a primeira instrução é programada para ser executada quando o tempo de simulação atinge 1 unidade de tempo na qual ele atribui x e y a 1. Esta é a fila ativa para o tempo atual que é 1 unidade de tempo. O simulador então agenda a próxima instrução após mais 1 unidade de tempo na qual z é atribuído a 0.

O que torna a simulação não determinística?


Pode haver condições de corrida durante a simulação que acabem dando saídas diferentes para o mesmo projeto e bancada de teste. Uma das razões para o comportamento não determinístico é porque ativo os eventos podem ser removidos da fila e processados ​​em qualquer ordem.

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. Gerador de Relógio Verilog
  8. Funções matemáticas Verilog
  9. Formato de hora Verilog
  10. Escopo da escala de tempo da Verilog