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

Tugas Verilog

Sebuah function dimaksudkan untuk melakukan beberapa pemrosesan pada input dan mengembalikan nilai tunggal, sedangkan task lebih umum dan dapat menghitung beberapa nilai hasil dan mengembalikannya menggunakan keluaran dan keluar ketik argumen. Tugas dapat berisi elemen simulasi yang memakan waktu seperti @ , berpose dan lain-lain.

Sintaks

Tugas tidak perlu memiliki serangkaian argumen dalam daftar port, dalam hal ini tugas dapat dibiarkan kosong.

  
  
	// Style 1
	task [name];
		input  [port_list];
		inout  [port_list];
		output [port_list];
		begin
			[statements]
		end
	endtask

	// Style 2
	task [name] (input [port_list], inout [port_list], output [port_list]);
		begin
			[statements]
		end
	endtask
	
	// Empty port list
	task [name] ();
		begin
			[statements]
		end
	endtask

  

Tugas Statis

Jika tugas bersifat statis, maka semua variabel anggotanya akan dibagikan ke seluruh pemanggilan berbeda dari tugas yang sama yang telah diluncurkan untuk dijalankan secara bersamaan

  
  
	task sum (input [7:0] a, b, output [7:0] c);
		begin
			c = a + b;
		end
	endtask
// or 	
	task sum;
		input  [7:0] a, b;
		output [7:0] c;
		begin
			c = a + b;
		end
	endtask
	
	initial begin
		reg [7:0] x, y , z;
		sum (x, y, z);          
	end

  

Argumen yang mengaktifkan tugas (x, y, z) sesuai dengan argumen (a, b, c) yang ditentukan oleh tugas. Sejak a dan b adalah input, nilai x dan y akan ditempatkan di a dan b masing-masing. Karena c dideklarasikan sebagai output dan dihubungkan dengan z selama pemanggilan, jumlah akan secara otomatis diteruskan ke variabel z dari c .

Tugas Otomatis

Kata kunci automatic akan membuat tugas masuk kembali, jika tidak maka akan statis secara default. Semua item di dalam otomatis tugas dialokasikan secara dinamis untuk setiap pemanggilan dan tidak dibagi antara pemanggilan tugas yang sama yang berjalan secara bersamaan. Perhatikan bahwa automatic item tugas tidak dapat diakses dengan referensi hierarkis.

Sebagai ilustrasi, pertimbangkan statis tampilan tugas yang dipanggil dari initial yang berbeda blok yang berjalan secara bersamaan. Dalam hal ini, variabel integer yang dideklarasikan dalam tugas dibagi di antara semua pemanggilan tugas dan karenanya nilai yang ditampilkan harus bertambah untuk setiap pemanggilan.

  
  
module tb;
  
  initial display();
  initial display();
  initial display();
  initial display();
  
  // This is a static task
  task display();
    integer i = 0;
    i = i + 1;
    $display("i=%0d", i);
  endtask
endmodule

  
Log Simulasi
xcelium> run
i=1
i=2
i=3
i=4
xmsim: *W,RNQUIE: Simulation is complete.

Jika tugas dibuat otomatis, setiap pemanggilan tugas dialokasikan ruang yang berbeda dalam memori simulasi dan berperilaku berbeda.

  
  
module tb;
  
  initial display();
  initial display();
  initial display();
  initial display();
  
  // Note that the task is now automatic
  task automatic display();
    integer i = 0;
    i = i + 1;
    $display("i=%0d", i);
  endtask
endmodule

  
Log Simulasi
xcelium> run
i=1
i=1
i=1
i=1
xmsim: *W,RNQUIE: Simulation is complete.

Tugas global

Tugas yang dideklarasikan di luar semua modul disebut global tugas karena memiliki cakupan global dan dapat dipanggil dalam modul apa pun.

  
  
// This task is outside all modules
task display();
  $display("Hello World !");
endtask

module des;
  initial begin
    display();
  end
endmodule

  
Log Simulasi
xcelium> run
Hello World !
xmsim: *W,RNQUIE: Simulation is complete.

Jika tugas dideklarasikan dalam modul des, tugas itu harus dipanggil dengan mengacu pada nama instance modul.

  
  
module tb;
	des u0();
	
	initial begin
		u0.display();  // Task is not visible in the module 'tb'
	end
endmodule

module des;
	initial begin
		display(); 	// Task definition is local to the module
	end

	task display();
		$display("Hello World");
	endtask
endmodule

  
Log Simulasi
xcelium> run
Hello World
Hello World
xmsim: *W,RNQUIE: Simulation is complete.

Perbedaan antara function dan task

Meskipun fungsi dan tugas Verilog memiliki tujuan yang sama, ada beberapa perbedaan mencolok di antara keduanya.

Fungsi Tugas Tidak dapat memiliki pernyataan/penundaan pengontrol waktu, dan karenanya dijalankan dalam unit waktu simulasi yang sama Dapat berisi pernyataan/penundaan pengontrol waktu dan hanya dapat diselesaikan di lain waktu Tidak dapat mengaktifkan tugas, karena aturan di atas Dapat mengaktifkan tugas dan fungsi lain Harus memiliki setidaknya satu argumen input dan tidak dapat memiliki argumen output atau inout Dapat memiliki nol atau lebih argumen dari jenis apa pun Hanya dapat mengembalikan satu nilai Tidak dapat mengembalikan nilai, tetapi dapat mencapai efek yang sama menggunakan argumen keluaran

Saat suatu fungsi mencoba memanggil task atau berisi pernyataan yang memakan waktu, kompilator melaporkan kesalahan.

  
  
module tb;
  reg signal;
  
  initial wait_for_1(signal);
  
  function wait_for_1(reg signal);
    #10;
  endfunction
endmodule

  
Log Simulasi
    #10;
    |
xmvlog: *E,BADFCN (testbench.sv,7|4): illegal time/event control statement within a function or final block or analog initial block [10.3.4(IEEE)].

Nonaktifkan Tugas

Tugas dapat dinonaktifkan menggunakan disable kata kunci.

  
  
module tb;
  
  initial display();
  
  initial begin
  	// After 50 time units, disable a particular named
  	// block T_DISPLAY inside the task called 'display'
    #50 disable display.T_DISPLAY;
  end
  
  task display();
    begin : T_DISPLAY
      $display("[%0t] T_Task started", $time);
      #100;
      $display("[%0t] T_Task ended", $time);
    end
    
    begin : S_DISPLAY
      #10;
      $display("[%0t] S_Task started", $time);
      #20;
      $display("[%0t] S_Task ended", $time);
    end
  endtask
endmodule

  

Saat tampilkan tugas diluncurkan oleh initial pertama blok, T_DISPLAY dimulai dan dinonaktifkan ketika waktu mencapai 50 unit. Segera blok berikutnya S_DISPLAY dimulai dan berlari hingga selesai sebanyak 80 unit.

Log Simulasi
xcelium> run
[0] T_Task started
[60] S_Task started
[80] S_Task ended
xmsim: *W,RNQUIE: Simulation is complete.


Verilog

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