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

Fungsi Verilog

Sering kali kami menemukan potongan kode tertentu berulang dan dipanggil beberapa kali dalam RTL. Mereka kebanyakan tidak mengkonsumsi waktu simulasi dan mungkin melibatkan perhitungan kompleks yang perlu dilakukan dengan nilai data yang berbeda. Dalam kasus seperti itu, kita dapat mendeklarasikan function dan tempatkan kode berulang di dalam fungsi dan biarkan mengembalikan hasilnya. Ini akan mengurangi jumlah baris di RTL secara drastis karena yang perlu Anda lakukan sekarang adalah melakukan panggilan fungsi dan meneruskan data yang memerlukan komputasi. Sebenarnya, ini sangat mirip dengan fungsi di C.

Tujuan dari fungsi adalah untuk mengembalikan nilai yang akan digunakan dalam ekspresi. Definisi fungsi selalu dimulai dengan kata kunci function diikuti dengan tipe kembalian, nama dan daftar port yang diapit tanda kurung. Verilog mengetahui bahwa definisi fungsi berakhir ketika menemukan endfunction kata kunci. Perhatikan bahwa suatu fungsi harus memiliki setidaknya satu input yang dideklarasikan dan tipe yang dikembalikan adalah void jika fungsi tidak mengembalikan apa pun.

Sintaks

  
  
	function [automatic] [return_type] name ([port_list]);
		[statements]
	endfunction

  

Kata kunci automatic akan membuat fungsi masuk kembali dan item yang dideklarasikan dalam tugas dialokasikan secara dinamis daripada dibagi di antara pemanggilan tugas yang berbeda. Ini akan berguna untuk fungsi rekursif dan ketika fungsi yang sama dieksekusi secara bersamaan oleh N proses saat bercabang.

Deklarasi fungsi

Ada dua cara untuk mendeklarasikan input ke suatu fungsi:

  
  
	function [7:0] sum;
		input [7:0] a, b;
		begin
			sum = a + b;
		end
	endfunction
	
	function [7:0] sum (input [7:0] a, b);
		begin
			sum = a + b;
		end
	endfunction

  

Mengembalikan nilai dari suatu fungsi

Definisi fungsi secara implisit akan membuat variabel internal dengan nama yang sama dengan fungsi tersebut. Oleh karena itu ilegal untuk mendeklarasikan variabel lain dengan nama yang sama di dalam lingkup fungsi. Nilai kembalian diinisialisasi dengan menetapkan hasil fungsi ke variabel internal.

  
  
	sum = a + b;

  

Memanggil fungsi

Panggilan fungsi adalah operan dengan ekspresi dan memiliki sintaks seperti yang ditunjukkan di bawah ini.

  
  
	reg [7:0] result;
	reg [7:0] a, b;
	
	initial begin
		a = 4;
		b = 5;
		#10 result = sum (a, b);
	end

  

Aturan fungsi

Fungsi Rekursif

Fungsi yang memanggil dirinya sendiri disebut fungsi rekursif. Pada contoh di bawah ini, fungsi rekursif ditulis untuk menghitung faktorial dari suatu bilangan.

  
  
module tb;
  initial begin
    integer result = factorial(4);
    $display("factorial(4) = %0d", result);
  end
  
	function automatic integer factorial(integer i);
      integer result = i;
      
      // This function is called within the body of this 
      // function with a different argument
      if (i) begin
      	result = i * factorial(i-1);
        $display("i=%0d result=%0d", i, result);
      end else
        result = 1;
        
      return result;
	endfunction
endmodule

  
Log Simulasi
xcelium> run
i=1 result=1
i=2 result=2
i=3 result=6
i=4 result=24
factorial(4) = 24
xmsim: *W,RNQUIE: Simulation is complete


Verilog

  1. 10 Fungsi Populer di Stratasys Insight
  2. Fungsi C++ dengan Contoh Program
  3. Fungsi Python Lambda dengan CONTOH
  4. Tutorial Verilog
  5. Rangkaian Verilog
  6. Tugas Verilog
  7. Pemblokiran &Non-Pemblokiran Verilog
  8. Fungsi Matematika Verilog
  9. C - Fungsi
  10. MATLAB - Fungsi