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

Lingkup Referensi Hirarki Verilog

Sebagian besar bahasa pemrograman memiliki fitur karakteristik yang disebut lingkup yang mendefinisikan visibilitas bagian kode tertentu ke variabel dan metode. Lingkup mendefinisikan namespace untuk menghindari tabrakan antara nama objek yang berbeda dalam namespace yang sama.

Verilog mendefinisikan ruang lingkup baru untuk modul, fungsi, tugas, blok bernama dan menghasilkan blok.

  
  
module tb;
	reg signal;
	
	// Another variable cannot be declared with
	// an already existing name in the same scope
	reg signal;
	
	// However, the name 'signal' can be reused inside
	// a task because it belongs to a different scope.
	task display();
		reg signal = 1;
		$display("signal = %0b", signal);
	endtask
	
endmodule

  

Pengidentifikasi, seperti nama sinyal, dapat digunakan untuk mendeklarasikan hanya satu jenis item dalam lingkup tertentu. Ini berarti bahwa dua variabel dengan tipe data yang berbeda atau sama tidak dapat memiliki nama yang sama, atau tugas dan variabel dengan nama yang sama, atau bahkan instance net dan gate dengan nama yang sama dalam lingkup yang sama.

Setiap pengenal di Verilog memiliki nama jalur hierarkis yang unik, di mana setiap contoh modul, tugas, fungsi atau bernama begin end atau fork join blok mendefinisikan level atau cakupan baru.

Contoh Referensi Hirarki

  
  
module tb;

	// Create two instances of different modules
	A uA();
	B uB();
	
	// Create a named block that declares a signal and 
	// prints the value at 10ns from simulation start
	initial begin : TB_INITIAL
		reg signal;
      #10 $display("signal=%0d", signal);      
	end
  
  	// We'll try to access other scopes using hierarchical
  	// references from this initial block
  	initial begin
  	  TB_INITIAL.signal = 0;
      uA.display();
      
      uB.B_INITIAL.B_INITIAL_BLOCK1.b_signal_1 = 1;
      uB.B_INITIAL.B_INITIAL_BLOCK2.b_signal_2 = 0;
    end
endmodule

  
  
  
module A;
	task display();
		$display("Hello, this is A");
	endtask
endmodule

module B;
	initial begin : B_INITIAL
		#50;
		begin : B_INITIAL_BLOCK1
			reg b_signal_1;
          #10 $display("signal_1=%0d", b_signal_1);
          
          
		end
		
		#50;
		begin : B_INITIAL_BLOCK2
			reg b_signal_2;
          #10 $display("signal_2=%0d", b_signal_2);
		end
	end
endmodule

  
Log Simulasi
xcelium> run
Hello, this is A
TB signal=0
signal_1=1
signal_2=0
xmsim: *W,RNQUIE: Simulation is complete.

Referensi Nama Ke Atas

Modul tingkat yang lebih rendah dapat mereferensikan item dalam modul di atasnya dalam hierarki. Misalnya, sinyal di blok TB_INITIAL akan terlihat dari tugas tampilan di A.

  
  
module A;	
	task display();
		$display("Hello, this is A");
      
        // Upward referencing, TB_INITIAL is visible in this module
      	#5 TB_INITIAL.signal = 1;
	endtask
endmodule

  

Perhatikan bahwa sinyal TB sekarang menjadi 1, bukan 0, karena perubahan referensi ke atas yang dilakukan pada sinyal oleh modul A.

Log Simulasi
xcelium> run
Hello, this is A
TB signal=1
signal_1=1
signal_2=0
xmsim: *W,RNQUIE: Simulation is complete.

Berikut adalah contoh lain dengan beberapa modul bersarang dan simpul daun dapat langsung mengakses anggota dari simpul di atas melalui referensi hierarki ke atas.

  
  
module tb;
  A a();
  
  function display();
    $display("Hello, this is TB");
  endfunction
endmodule

module A;
  B b();
  function display();
    $display("Hello, this is A");
  endfunction
endmodule

module B;
  C c();  
  function display();
    $display("Hello, this is B");
  endfunction
endmodule

module C;
  D d();
  
  function display();
    $display("Hello, this is C");
  endfunction
endmodule

module D;
  initial begin
    a.display();  // or A.display()
    b.display();  // or B.display()
    c.display();  // or C.display()
    
    a.b.c.display();
  end
endmodule

  
Log Simulasi
xcelium> run
Hello, this is A
Hello, this is B
Hello, this is C
Hello, this is C
xmsim: *W,RNQUIE: Simulation is complete.

Ketika compiler menemukan b.display(),

  1. Tampak dalam lingkup saat ini dalam modul D untuk melihat apakah b didefinisikan. Jika tidak ada, maka ia mencari nama di lingkup terlampir dan bergerak ke atas hingga lingkup modul tercapai. Jika nama masih belum ditemukan, lanjutkan ke langkah berikutnya.
  2. Ini terlihat di lingkup terluar modul induk dan jika tidak ditemukan, hierarki akan terus naik.

Verilog

  1. Tutorial Verilog
  2. Rangkaian Verilog
  3. Verilog - Dalam kulit kacang
  4. Tugas Verilog
  5. Pemblokiran &Non-Pemblokiran Verilog
  6. Fungsi Verilog
  7. Tugas Verilog
  8. Lingkup Referensi Hirarki Verilog
  9. Generator Jam Verilog
  10. Verilog Menampilkan Tugas