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

Modul Verilog

Sebuah module adalah blok kode Verilog yang mengimplementasikan fungsi tertentu. Modul dapat disematkan di dalam modul lain dan modul tingkat yang lebih tinggi dapat berkomunikasi dengan modul tingkat yang lebih rendah menggunakan port input dan outputnya.

Sintaks

Sebuah modul harus diapit dalam module dan endmodule kata kunci. Nama modul harus diberikan tepat setelah module kata kunci dan daftar port opsional dapat dideklarasikan juga. Perhatikan bahwa port yang dideklarasikan dalam daftar deklarasi port tidak dapat dideklarasikan ulang di dalam isi modul.

  
  
	module <name> ([port_list]);
		// Contents of the module
	endmodule
	
	// A module can have an empty portlist
	module name;
		// Contents of the module
	endmodule

  

Semua deklarasi variabel, pernyataan aliran data, fungsi atau tugas, dan instance modul yang lebih rendah jika ada, harus didefinisikan dalam module dan endmodule kata kunci. Mungkin ada beberapa modul dengan nama berbeda dalam file yang sama dan dapat ditentukan dalam urutan apa pun.

Contoh

dff ports

Modul dff mewakili flip flop D yang memiliki tiga port input d, clk, rstn dan satu port output q. Isi modul menjelaskan bagaimana sebuah flip flop D harus berperilaku untuk kombinasi input yang berbeda. Di sini, input d selalu ditetapkan ke output q pada tepi positif jam jika rstn tinggi karena merupakan reset rendah aktif.

  
  
// Module called "dff" has 3 inputs and 1 output port
module dff ( 	input 			d,
							input 			clk,
							input 			rstn,
							output reg	q);
			
	// Contents of the module	
	always @ (posedge clk) begin
		if (!rstn)
			q <= 0;
		else 
			q <= d;
	end
endmodule

  

Skema Perangkat Keras

Modul ini akan diubah menjadi rangkaian digital berikut selama sintesis.

Perhatikan bahwa Anda tidak boleh memiliki kode apa pun yang ditulis di luar modul !

Apa tujuan dari sebuah modul?

Modul mewakili unit desain yang menerapkan karakteristik perilaku tertentu dan akan diubah menjadi sirkuit digital selama sintesis. Kombinasi input apa pun dapat diberikan ke modul dan itu akan memberikan output yang sesuai. Ini memungkinkan modul yang sama untuk digunakan kembali untuk membentuk modul yang lebih besar yang mengimplementasikan perangkat keras yang lebih kompleks.

Misalnya, DFF yang ditunjukkan di atas dapat dirantai untuk membentuk register geser.

  
  
module shift_reg ( 	input 	d,
										input  	clk,
										input 	rstn,
										output 	q);
			
	wire [2:0] q_net;
	dff u0 (.d(d), 				.clk(clk), .rstn(rstn), .q(q_net[0]));
	dff u1 (.d(q_net[0]), .clk(clk), .rstn(rstn), .q(q_net[1]));
	dff u2 (.d(q_net[1]), .clk(clk), .rstn(rstn), .q(q_net[2]));
	dff u3 (.d(q_net[2]), .clk(clk), .rstn(rstn), .q(q));
	
endmodule

  

Skema Perangkat Keras

Perhatikan bahwa instans dff terhubung bersama dengan kabel seperti yang dijelaskan oleh modul Verilog RTL.

Alih-alih membangun dari blok yang lebih kecil untuk membentuk blok desain yang lebih besar, kebalikannya juga bisa dilakukan. Pertimbangkan pemecahan mesin GPU sederhana menjadi komponen yang lebih kecil sehingga masing-masing dapat direpresentasikan sebagai modul yang mengimplementasikan fitur tertentu. Mesin GPU yang ditunjukkan di bawah ini dapat dibagi menjadi lima sub-blok yang berbeda di mana masing-masing melakukan fungsi tertentu. Unit antarmuka bus mendapatkan data dari luar ke dalam desain, yang diproses oleh unit lain untuk mengekstrak instruksi. Unit lain memproses data yang disediakan oleh unit sebelumnya.

gpu modules

Setiap sub-blok dapat direpresentasikan sebagai module dengan serangkaian sinyal input dan output tertentu untuk komunikasi dengan modul lain dan setiap sub-blok dapat dibagi lagi menjadi blok yang lebih halus sesuai kebutuhan.

Apa itu modul tingkat atas?

Sebuah tingkat atas modul adalah salah satu yang berisi semua modul lainnya. Modul tingkat atas tidak dipakai dalam modul lain.

Misalnya, modul desain biasanya dipakai dalam modul testbench tingkat atas sehingga simulasi dapat dijalankan dengan memberikan stimulus input. Tapi, testbench tidak dipakai dalam modul lain karena merupakan blok yang merangkum segala sesuatu yang lain dan karenanya adalah modul tingkat atas .

Desain Tingkat Atas

Kode desain yang ditunjukkan di bawah ini memiliki modul tingkat atas yang disebut desain. Ini karena berisi semua sub-modul lain yang diperlukan untuk membuat desain lengkap. Submodul dapat memiliki lebih banyak sub-modul bersarang seperti mod3 di dalam mod1 dan mod4 di dalam mod2. Bagaimanapun, semua ini termasuk ke dalam modul tingkat atas ketika mod1 dan mod2 dipakai. Jadi ini membuat desain lengkap dan merupakan modul tingkat atas untuk desain.

  
  
	//---------------------------------
	//  Design code
	//---------------------------------
	module mod3 ( [port_list] );
		reg c;
		// Design code
	endmodule
	
	module mod4 ( [port_list] );
		wire a;
		// Design code
	endmodule
	
	module mod1 ( [port_list] );	 	// This module called "mod1" contains two instances
		wire 	y;
	
		mod3 	mod_inst1 ( ... ); 	 		// First instance is of module called "mod3" with name "mod_inst1"
		mod3 	mod_inst2 ( ... );	 		// Second instance is also of module "mod3" with name "mod_inst2"
	endmodule

	module mod2 ( [port_list] ); 		// This module called "mod2" contains two instances
		mod4 	mod_inst1 ( ... );			// First instance is of module called "mod4" with name "mod_inst1"
		mod4 	mod_inst2 ( ... );			// Second instance is also of module "mod4" with name "mod_inst2"
	endmodule
	
	// Top-level module
	module design ( [port_list]); 		// From design perspective, this is the top-level module
		wire 	_net;
		mod1 	mod_inst1 	( ... ); 			// since it contains all other modules and sub-modules
		mod2 	mod_inst2 	( ... );
	endmodule

  

Tingkat Teratas Testbench

Modul testbench berisi stimulus untuk memeriksa fungsionalitas desain dan terutama digunakan untuk verifikasi fungsional menggunakan alat simulasi. Oleh karena itu desain dipakai dan disebut d0 di dalam modul testbench. Dari perspektif simulator, testbench adalah modul tingkat atas.

  
  
	//-----------------------------------------------------------
	// Testbench code
	// From simulation perspective, this is the top-level module
	// because 'design' is instantiated within this module
	//-----------------------------------------------------------
	module testbench; 												
		design d0 ( [port_list_connections] ); 	
		
		// Rest of the testbench code
	endmodule

  

Nama Hirarki

Struktur hierarkis terbentuk ketika modul dapat dipakai di dalam satu sama lain, dan karenanya modul tingkat atas disebut root . Karena setiap instansiasi modul yang lebih rendah dalam modul yang diberikan diharuskan memiliki nama pengenal yang berbeda, tidak akan ada ambiguitas dalam mengakses sinyal. Nama hierarki dibuat oleh daftar pengidentifikasi ini yang dipisahkan oleh titik . untuk setiap tingkat hierarki. Sinyal apa pun dapat diakses dalam modul apa pun menggunakan jalur hierarkis ke sinyal tertentu.

  
  
	// Take the example shown above in top level modules
	design.mod_inst1 					// Access to module instance mod_inst1
	design.mod_inst1.y 					// Access signal "y" inside mod_inst1
	design.mod_inst2.mod_inst2.a		// Access signal "a" within mod4 module
	
	testbench.d0._net; 					// Top level signal _net within design module accessed from testbench

  

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. Fungsi Matematika Verilog