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

Declarações Verilog Block


Existem maneiras de agrupar um conjunto de instruções que são sintaticamente equivalentes a uma única instrução e são conhecidas como instruções de bloco . Existem dois tipos de instruções de bloco:sequenciais e paralelas.

Sequencial


As instruções são encapsuladas usando begin e end palavras-chave e serão executados sequencialmente na ordem dada, um após o outro. Os valores de atraso são tratados em relação ao tempo de execução da instrução anterior. Depois que todas as instruções dentro do bloco forem executadas, o controle pode ser passado para outro lugar.
  
  
module design0;
	bit [31:0] data;
  
	// "initial" block starts at time 0
	initial begin
      
		// After 10 time units, data becomes 0xfe 
		#10   data = 8'hfe;
		$display ("[Time=%0t] data=0x%0h", $time, data);
      
		// After 20 time units, data becomes 0x11
		#20   data = 8'h11;
		$display ("[Time=%0t] data=0x%0h", $time, data);
	end
endmodule

  

No exemplo acima, primeira instrução no begin-end bloco será executado em 10 unidades de tempo e a segunda instrução em 30 unidades de tempo devido à natureza relativa. São 20 unidades de tempo após a execução da instrução anterior.
Registro de simulação
ncsim> run
[Time=10] data=0xfe
[Time=30] data=0x11
ncsim: *W,RNQUIE: Simulation is complete.

Paralelo


Um paralelo bloco pode executar instruções concorrentemente e controle de atraso pode ser usado para fornecer ordenação de tempo das atribuições. As instruções são iniciadas em paralelo, envolvendo-as no fork e join palavras-chave.
  
  
	initial begin
		#10   data = 8'hfe;
		fork
		   #20 data = 8'h11;
		   #10 data = 8'h00;
		join
	end

  

No exemplo acima, fork-join bloco será lançado após a execução da instrução em 10 unidades de tempo. As instruções dentro deste bloco serão executadas em paralelo e a primeira instrução que será lançada será aquela em que for atribuído um valor de 8'h00 aos dados, pois o atraso para isso é de 10 unidades de tempo após o lançamento do fork-join. Após mais 10 unidades de tempo, a primeira instrução será lançada e os dados terão o valor 8'h11.
  
  
	initial begin
		#10 data = 8'hfe;
		fork
			#10 data = 8'h11;
			begin
				#20 data = 8'h00;
				#30 data = 8'haa;
			end
		join
	end

  

Há um begin-end bloco no exemplo acima, e todas as instruções dentro do bloco begin-end serão executadas sequencialmente, mas o próprio bloco será lançado em paralelo junto com as outras instruções. Assim, os dados terão 8'h11 em 20 unidades de tempo, 8'h00 em 30 unidades de tempo e 8'haa em 60 unidades de tempo.

Nomeação de blocos


Blocos sequenciais e paralelos podem ser nomeados adicionando : name_of_block após as palavras-chave begin e fork . Ao fazer isso, o bloco pode ser referenciado em um disable declaração.
  
  
	begin : name_seq
		[statements]
	end
	
	fork : name_fork
		[statements]
	join

  

Verilog

  1. Como a automação da preparação de dados acelera o tempo para insights?
  2. Tutorial Verilog
  3. Concatenação Verilog
  4. Verilog - Em uma casca de noz
  5. Atribuições Verilog
  6. Verilog Blocking &Non-Blocking
  7. Blocos de controle Verilog
  8. Funções Verilog
  9. Semântica de agendamento Verilog
  10. É hora de avançar seu S&OP, dados e sistemas de planejamento