Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Verilog

Penundaan Penugasan Inter dan Intra Verilog

Pernyataan penundaan Verilog dapat memiliki penundaan yang ditentukan baik di sisi kiri atau sisi kanan operator penugasan.

Penundaan Antar-tugas

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

  

Sebuah antar-tugas pernyataan delay memiliki nilai delay pada LHS dari operator penugasan. Ini menunjukkan bahwa pernyataan itu sendiri dieksekusi setelah penundaan berakhir, dan merupakan bentuk kontrol penundaan yang paling umum digunakan.

  
  
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

  

Perhatikan bahwa q menjadi 1 pada waktu 10 unit karena pernyataan dievaluasi pada 10 unit waktu dan RHS yang merupakan kombinasi dari a, b dan c bernilai 1.

Log Simulasi
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.

Penundaan Intra-tugas

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

  

Sebuah tugas intra delay adalah salah satu dimana ada delay pada RHS dari operator penugasan. Ini menunjukkan bahwa pernyataan dievaluasi dan nilai semua sinyal pada RHS ditangkap terlebih dahulu. Kemudian ditugaskan ke sinyal yang dihasilkan hanya setelah penundaan berakhir.

  
  
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

  

Perhatikan bahwa tugas ke q tidak ada di log !

Log Simulasi
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.

Ini karena pada 5 unit waktu, a dan c ditugaskan menggunakan pernyataan non-blocking. Dan perilaku non-blocking pernyataan sedemikian rupa sehingga RHS dievaluasi, tetapi ditugaskan ke variabel hanya pada akhir langkah waktu itu.

Jadi nilai a dan c dievaluasi ke 1 tetapi belum ditetapkan ketika pernyataan non-blocking berikutnya yaitu q dijalankan. Jadi ketika RHS dari q dievaluasi, a dan c masih memiliki nilai lama 0 dan karenanya $monitor tidak mendeteksi perubahan untuk menampilkan pernyataan.

Untuk mengamati perubahannya, mari kita ubah pernyataan penugasan ke a dan c dari non-blocking ke blocking.

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

  
Log Simulasi
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. Pengantar Verilog
  2. Tutorial Verilog
  3. Rangkaian Verilog
  4. Tugas Verilog
  5. Pemblokiran &Non-Pemblokiran Verilog
  6. Fungsi Verilog
  7. Tugas Verilog
  8. Kontrol Penundaan Verilog
  9. Penundaan Gerbang Verilog
  10. Generator Jam Verilog