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

Verilog selalu memblokir

Sebuah always blok adalah salah satu prosedur blok di Verilog. Pernyataan di dalam blok selalu dieksekusi secara berurutan.

Sintaks

  
  
always @ (event)
	[statement]
	
always @ (event) begin
	[multiple statements]
end

  

always blok dieksekusi pada beberapa acara tertentu. Acara ditentukan oleh daftar sensitivitas.

Apa daftar sensitivitasnya?

Sensitivitas list adalah ekspresi yang menentukan kapan blok selalu harus dieksekusi dan ditentukan setelah @ operator dalam tanda kurung ( ) . Daftar ini mungkin berisi satu atau sekelompok sinyal yang perubahan nilainya akan mengeksekusi blok always.

Pada kode di bawah ini, semua pernyataan di dalam always blok dieksekusi setiap kali nilai sinyal a atau b berubah.

  
  
// Execute always block whenever value of "a" or "b" change
always @ (a or b) begin
	[statements]
end

  

Untuk apa blok selalu digunakan?

Sebuah always blok dapat digunakan untuk mewujudkan elemen kombinasional atau berurutan. Elemen sekuensial seperti flip flop menjadi aktif ketika dilengkapi dengan jam dan reset. Demikian pula, blok kombinasional menjadi aktif ketika salah satu nilai inputnya berubah. Semua blok perangkat keras ini bekerja secara bersamaan secara independen satu sama lain. Hubungan antara masing-masing inilah yang menentukan aliran data. Untuk memodelkan perilaku ini, sebuah always blok dibuat sebagai proses berkelanjutan yang dipicu dan melakukan beberapa tindakan saat sinyal dalam daftar sensitivitas menjadi aktif.

Dalam contoh berikut, semua pernyataan dalam blok selalu dieksekusi di setiap sisi positif dari sinyal clk.

  
  
// Execute always block at positive edge of signal "clk"
always @ (posedge clk) begin
	[statements]
end

  

Apa yang terjadi jika tidak ada daftar sensitivitas?

always blok berulang terus menerus sepanjang durasi simulasi. Daftar sensitivitas membawa rasa waktu tertentu yaitu setiap kali ada sinyal dalam daftar sensitivitas berubah, blok selalu dipicu. Jika tidak ada pernyataan kontrol waktu dalam blok always, simulasi akan hang karena loop tak terbatas tanpa penundaan !

Contoh

Contoh yang ditunjukkan di bawah ini adalah selalu blok yang mencoba untuk membalikkan nilai clk sinyal. Pernyataan dijalankan setelah setiap 0 unit waktu. Oleh karena itu, ia dieksekusi selamanya karena tidak adanya penundaan dalam pernyataan tersebut.

  
  
// always block is started at time 0 units
// But when is it supposed to be repeated ?
// There is no time control, and hence it will stay and
// be repeated at 0 time units only. This continues
// in a loop and simulation will hang !
always clk = ~clk;

  

Bahkan jika daftar sensitivitas kosong, harus ada beberapa bentuk lain dari penundaan waktu. Waktu simulasi dimajukan oleh pernyataan penundaan dalam always membangun seperti yang ditunjukkan di bawah ini. Sekarang, pembalikan jam dilakukan setelah setiap 10 satuan waktu.

  
  
	always #10 clk = ~clk;

  

Catatan: Penundaan eksplisit tidak dapat disintesis menjadi gerbang logika !

Karenanya kode desain Verilog yang asli selalu memerlukan daftar sensitivitas.

Contoh Desain Elemen Sekuensial

Kode yang ditunjukkan di bawah ini mendefinisikan modul yang disebut tff yang menerima input data, jam, dan reset aktif-rendah. Output akan terbalik setiap kali d ditemukan menjadi 1 di tepi positif jam. Di sini, always blok dipicu baik di tepi positif clk atau tepi negatif rstn.

Apa yang terjadi pada sisi positif jam ?

Peristiwa berikut terjadi di tepi positif jam dan diulang untuk semua tepi positif jam.

  1. if pertama blokir cek nilai reset aktif-rendah rstn
    1. Jika rstn adalah nol, maka output q harus direset ke nilai default 0
    2. Jika yang pertama adalah satu, berarti reset tidak diterapkan dan harus mengikuti perilaku default
  2. Jika langkah sebelumnya salah:
    1. Periksa nilai d dan jika ditemukan satu, maka balikkan nilai q
    2. Jika d adalah 0, maka pertahankan nilai q

  
  
module tff (input  		d,
						clk,
						rstn,
			output reg 	q);
			
	always @ (posedge clk or negedge rstn) begin
		if (!rstn)
			q <= 0;
		else
			if (d)
				q <= ~q;
			else
				q <= q;
	end
endmodule

  

Apa yang terjadi pada sisi negatif dari reset ?

Peristiwa berikut terjadi pada tepi negatif pertama dan terjadi pada semua kejadian tersebut.

  1. if pertama blok memeriksa nilai rstn reset aktif-rendah. Di tepi negatif sinyal, nilainya adalah 0.
    1. Jika nilai rstn adalah 0, maka itu berarti reset diterapkan dan output harus direset ke nilai default 0
    2. Kasus di mana nilai rstn adalah 1 tidak dipertimbangkan karena kejadian saat ini adalah tepi negatif yang pertama

Contoh Desain Elemen Kombinasi

Sebuah always blok juga dapat digunakan dalam desain blok kombinasional. Misalnya rangkaian digital berikut mewakili kombinasi dari tiga gerbang logika berbeda yang memberikan keluaran tertentu pada sinyal o.

combinational-gates

Kode di bawah ini adalah module dengan empat port input dan satu port output yang disebut o. always blok dipicu setiap kali salah satu sinyal dalam daftar sensitivitas berubah nilainya. Sinyal keluaran dideklarasikan sebagai tipe reg dalam daftar port modul karena digunakan dalam blok prosedural. Semua sinyal yang digunakan dalam blok prosedural harus dideklarasikan sebagai tipe reg .

  
  
module combo (	input 	a,
      			input	b,
              	input	c,
              	input	d,
  	            output reg o);
  
  always @ (a or b or c or d) begin
    o <= ~((a & b) | (c^d));
  end
  
endmodule

  

Lihat bahwa sinyal o menjadi 1 setiap kali ekspresi kombinasional pada RHS menjadi benar. Demikian pula o menjadi 0 ketika RHS salah.

Keluaran Simulasi

Klik di sini untuk slideshow dengan contoh simulasi !


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. Generator Jam Verilog
  9. Fungsi Matematika Verilog
  10. Format Waktu Verilog