산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog Inter 및 Intra 할당 지연

Verilog 지연 문은 할당 연산자의 왼쪽 또는 오른쪽에 지연을 지정할 수 있습니다.

과제 간 지연

  
  
	// Delay is specified on the left side
	#<delay> <LHS> = <RHS>

  

간 과제 지연 문에는 할당 연산자의 LHS에 지연 값이 있습니다. 이는 명령문 자체가 이후 실행되었음을 나타냅니다. 지연이 만료되며 가장 일반적으로 사용되는 지연 제어 형식입니다.

  
  
module tb;
  reg  a, b, c, q;
  
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
    
    // Initialize all signals to 0 at time 0
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign 'q' with whatever value RHS gets
    // evaluated to
    #5 q <= a & b | c;

    #20;
  end
  
endmodule

  

명령문이 10시간 단위로 평가되고, b, c의 조합인 RHS가 1로 평가되기 때문에 q는 10시간 단위에서 1이 됩니다.

시뮬레이션 로그
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.

과제 내 지연

  
  
	// Delay is specified on the right side
	<LHS> = #<delay> <RHS>

  

과제 내 지연은 할당 연산자의 RHS에 지연이 있는 경우입니다. 이는 명령문이 평가되고 RHS의 모든 신호 값이 먼저 캡처됨을 나타냅니다. 그런 다음 이후 결과 신호에 할당됩니다. 지연이 만료됩니다.

  
  
module tb;
  reg  a, b, c, q;
  
  initial begin
    $monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);
  
	// Initialize all signals to 0 at time 0  
    a <= 0;
    b <= 0;
    c <= 0;
    q <= 0;
    
    // Inter-assignment delay: Wait for #5 time units
    // and then assign a and c to 1. Note that 'a' and 'c'
    // gets updated at the end of current timestep
    #5  a <= 1;
    	c <= 1;

    // Intra-assignment delay: First execute the statement
    // then wait for 5 time units and then assign the evaluated
    // value to q
    q <= #5 a & b | c;
    
    #20;
  end
endmodule

  

로그에서 q에 대한 할당이 누락되었음을 유의하십시오!

시뮬레이션 로그
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
xmsim: *W,RNQUIE: Simulation is complete.

5개의 시간 단위에서 논블로킹 문을 사용하여 a와 c를 할당하기 때문이다. 그리고 비차단의 동작 문은 RHS가 평가되지만 해당 시간 단계가 끝날 때만 변수에 할당되는 것과 같습니다.

따라서 a와 c의 값은 1로 평가되지만 q의 다음 논블로킹 문이 실행될 때 아직 할당되지 않습니다. 따라서 q의 RHS가 평가될 때 및 c는 여전히 0의 이전 값을 가지므로 $monitor 명령문을 표시하기 위한 변경 사항을 감지하지 못합니다.

변경 사항을 관찰하기 위해 할당 문을 비차단에서 차단으로 및 c로 변경합니다.

  
  
	...
	
	// Non-blocking changed to blocking and rest of the
	// code remains the same
    #5  a = 1;
    	c = 1;
    
    q <= #5 a & b | c;
    
   	...

  
시뮬레이션 로그
xcelium> run
[0] a=0 b=0 c=0 q=0
[5] a=1 b=0 c=1 q=0
[10] a=1 b=0 c=1 q=1
xmsim: *W,RNQUIE: Simulation is complete.


verilog

  1. Verilog 소개
  2. Verilog 튜토리얼
  3. Verilog 연결
  4. Verilog 할당
  5. Verilog 차단 및 비 차단
  6. Verilog 기능
  7. Verilog 작업
  8. Verilog 지연 제어
  9. Verilog 게이트 지연
  10. Verilog 클록 생성기