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

Tugas Verilog

Menempatkan nilai ke jaring dan variabel disebut penugasan. Ada tiga bentuk dasar:

Nilai LHS legal

Tugas memiliki dua bagian - sisi kanan (RHS) dan sisi kiri (LHS) dengan simbol sama dengan (=) atau simbol kurang dari sama (<=) di antaranya.

Jenis tugas Sisi kiri
Prosedur
  • Variabel (vektor/skalar)
  • Pilihan bit atau pemilihan sebagian dari vektor, bilangan bulat, atau variabel waktu
  • Kata memori
  • Penggabungan salah satu di atas
Berkelanjutan
  • Net (vektor/skalar)
  • Pilihan bit atau pemilihan sebagian jaring vektor
  • Penggabungan bit-select dan part-select
Prosedural Berkelanjutan
  • Net atau variabel (vektor/skalar)
  • Pilihan bit atau pemilihan sebagian jaring vektor

RHS dapat berisi ekspresi apa pun yang mengevaluasi ke nilai akhir sementara LHS menunjukkan net atau variabel yang nilai dalam RHS ditetapkan.

  
  
module tb;
	reg clk;
	wire a, b, c, d, e, f;
	reg  z, y;
	
	// clk is on the LHS and the not of clk forms RHS
	always #10 clk = ~clk;
	
	// y is the LHS and the constant 1 is RHS
	assign y = 1; 
	
	// f is the LHS, and the expression of a,b,d,e forms the RHS
	assign f = (a | b) ^ (d & e);

	always @ (posedge clk) begin
		// z is the LHS, and the expression of a,b,c,d forms the RHS
		z <= a + b + c + d;
	end
	
	initial begin
		// Variable names on the left form LHS while 0 is RHS
		a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
		clk <= 0;
	end
endmodule

  

Tugas Prosedur

Penugasan prosedural terjadi dalam prosedur seperti selalu, inisial, tugas dan fungsi dan digunakan untuk menempatkan nilai ke variabel. Variabel akan menyimpan nilai hingga penugasan berikutnya ke variabel yang sama.

Nilai akan ditempatkan ke variabel ketika simulasi mengeksekusi pernyataan ini di beberapa titik selama waktu simulasi. Ini dapat dikontrol dan dimodifikasi sesuai keinginan kita dengan menggunakan pernyataan aliran kontrol seperti if-else-if, pernyataan kasus, dan mekanisme perulangan.

  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

Penetapan deklarasi variabel

Nilai awal dapat ditempatkan ke variabel pada saat deklarasi seperti yang ditunjukkan berikutnya. Penugasan tidak memiliki durasi dan menyimpan nilai hingga penugasan berikutnya ke variabel yang sama terjadi. Perhatikan bahwa penetapan deklarasi variabel ke array tidak diperbolehkan.

  
  
	module my_block;
		reg [31:0] data = 32'hdead_cafe;
	
		initial begin
			#20  data = 32'h1234_5678;    // data will have dead_cafe from time 0 to time 20
			                              // At time 20, data will get 12345678
		end
	endmodule

  
  
  
	reg [3:0] a = 4'b4;
	
	// is equivalent to 
	
	reg [3:0] a;
	initial a = 4'b4;

  

Jika variabel diinisialisasi selama deklarasi dan pada waktu 0 di blok awal seperti yang ditunjukkan di bawah ini, urutan evaluasi tidak dijamin, dan karenanya dapat memiliki 8'h05 atau 8'hee.

  
  
	module my_block;
		reg [7:0]  addr = 8'h05;
		
		initial 
			addr = 8'hee;
	endmodule

  
  
  
	reg [3:0] array [3:0] = 0;           // illegal
	integer i = 0, j;                    // declares two integers i,j and i is assigned 0
	real r2 = 4.5, r3 = 8;               // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
	time startTime = 40;                 // declares time variable with initial value 40

  

Blok prosedural dan tugas akan dibahas lebih detail di bagian selanjutnya.

Tugas Berkelanjutan

Klik di sini untuk contoh simulasi langkah demi langkah !

Ini digunakan untuk menetapkan nilai ke skalar dan jaring vektor dan terjadi setiap kali ada perubahan dalam RHS. Ini menyediakan cara untuk memodelkan logika kombinasional tanpa menentukan interkoneksi gerbang dan membuatnya lebih mudah untuk mengarahkan jaring dengan ekspresi logis.

  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

Setiap kali b atau c mengubah nilainya, maka seluruh ekspresi dalam RHS akan dievaluasi dan a akan diperbarui dengan nilai baru.

Penetapan deklarasi bersih

Hal ini memungkinkan kita untuk menempatkan penugasan berkelanjutan pada pernyataan yang sama yang mendeklarasikan net. Perhatikan bahwa karena net hanya dapat dideklarasikan satu kali, hanya satu penetapan deklarasi yang mungkin untuk net.

  
  
	wire  penable = 1;

  

Penugasan Berkelanjutan Prosedural

Ini adalah pernyataan prosedural yang memungkinkan ekspresi untuk terus-menerus ditugaskan ke jaring atau variabel dan terdiri dari dua jenis.

menetapkan penugasan

Ini akan menimpa semua tugas prosedural ke variabel dan dinonaktifkan dengan menggunakan sinyal yang sama dengan deassign . Nilai variabel akan tetap sama sampai variabel tersebut mendapat nilai baru melalui penugasan yang prosedural atau prosedural terus menerus. LHS dari assign pernyataan tidak dapat berupa bit-select, part-select atau referensi array tetapi dapat berupa variabel atau gabungan variabel.

  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

melepas paksa

Ini mirip dengan assign - deassign pernyataan tetapi juga dapat diterapkan pada jaring dan variabel. LHS dapat berupa bit-select dari net, part-select dari net, variabel atau net tetapi tidak dapat menjadi referensi ke array dan bit/part select dari suatu variabel. force statment akan menimpa semua tugas lain yang dibuat ke variabel hingga dirilis menggunakan release kata kunci.

  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

Verilog

  1. Tutorial Verilog
  2. Rangkaian Verilog
  3. Fungsi Verilog
  4. Tugas Verilog
  5. Generator Jam Verilog
  6. Fungsi Matematika Verilog
  7. Format Waktu Verilog
  8. Lingkup Skala Waktu Verilog
  9. Operasi File IO Verilog
  10. Verilog Halo Dunia