stanford-oval/wikipedia huggingface dataset:
Arabellek aşımı
Koruyucu karşı önlemler > Güvenli Kütüphanelerin Kullanımı

Arabellek aşımı sorunu, arabelleklerin düşük düzeyli temsilsel ayrıntılarını veri türleri için kapsayıcı olarak ortaya koyduğu için C ve C ++ dillerinde yaygındır. Dolayısıyla, arabellek aşımı gerçekleştiren kodda yüksek doğruluk derecesini koruyarak arabellek aşımlar önlenmelidir. Ayrıca, gets, scanf ve strcpy gibi sınırlamaları kontrol edilmeyen standart kitaplık işlevlerinden kaçınmak da önerilir. The Morris worm, fingerd'deki bir çağrı istismarını kullandı.
Sınır kontrolü de dahil olmak üzere arabellek yönetimini merkezi ve otomatik olarak gerçekleştiren iyi yazılmış ve test edilmiş soyut veri türü kitaplıkları, arabellek aşımlarının oluşumunu ve etkisini azaltabilir. Arabellek aşımlarının yaygın olarak gerçekleştiği bu dillerdeki iki ana yapı bloğu veri türü dizeler ve dizilerdir. Bu nedenle, bu veri türlerinde arabellek aşımlarını önleyen kütüphaneler gerekli kapsama alanının büyük çoğunluğunu sağlayabilir. Yine de, bu güvenli kütüphaneleri doğru bir şekilde kullanmamak, arabellek aşımlarına ve diğer güvenlik açıklarına neden olabilir ve doğal olarak, kütüphanedeki herhangi bir hata olası bir zayıflıktır. "The Better String Library" , Vstr  ve Erwin  güvenli kütüphane uygulamalarıdır. OpenBSD işletim sisteminin C kütüphanesi, strlcpy ve strlcat işlevlerini sağlar, ancak bunlar tam kasa kitaplığı uygulamalardan daha sınırlıdır.
Koruyucu karşı önlemler > Arabellek Aşımından Korunma

Arabellek aşımı koruması, bir işlev geri döndüğünde yığının değiştirilmediğini kontrol ederek en yaygın arabellek aşımlarını saptamak için kullanılır. Değiştirilmişse, program segmentasyon hatasıyla çıkar. Bu tür üç sistem Libsafe  StackGuard  ve ProPolice  gcc yamalarıdır.
Microsoft'un Data Execution Prevention (DEP) modunun uygulanması, pointer'ı Structured Exception Handler (SEH) için üzerine yazılmasını açıkça korur.
Yığın, biri veri için, diğeri işlev iadesi için iki kata bölünerek daha güçlü bir yığın koruması mümkündür. Bu bölünme, Forth languagede mevcuttur, ancak güvenlik temelli bir tasarım kararı değildir. Ne olursa olsun, geri gönderme adresi dışındaki hassas veriler üzerine yazılabiliyorsa bu, arabellek aşımları için tam bir çözüm değildir.
Koruyucu karşı önlemler > İşaretçi Koruması

Arabellek aşımları işleçleri (depolanan adresler dahil) kullanarak işler. PointGuard, saldırganların işaretçiler ve adresleri güvenilir bir şekilde kullanmalarını önlemek için bir derleyici uzantısı olarak önerildi. Yaklaşım, işaretçileri kullanmadan önce ve sonra otomatik olarak XOR kodlamak için derleyici ekleyerek çalışır. Saldırgan (teorik olarak) işaretçiyi kodlamak / kod çözmek için hangi değeri kullanılacağını bilmediğinden yeni bir değer üzerine yazarsa nereyi işaret edeceğini bilemez. PointGuard hiç yayınlanmadı, ancak Microsoft, Windows XP SP2 ve Windows Server 2003 SP1'de başlayan benzer bir yaklaşım uyguladı. İşaretçi korumasını otomatik bir özellik olarak uygulamak yerine Microsoft, programcının takdirine bağlı olarak çağrılabilecek bir API yordamı ekledi. Bu, daha iyi performans sağlar (çünkü her zaman kullanılmaz), ancak yükü programcıya yükler, çünkü ne zaman kullanması gerektiğini bilmesi gerekir.
XOR doğrusal olduğu için, bir saldırgan, kodlanmış bir işaretçiyi yalnızca bir adresin alt baytlarının üzerine yazarak değiştirebilir. Bu, saldırganın birden fazla kere exploit girişiminde bulunması veya bir imlecin birkaç konumdan birine (bir NOP kızağı içindeki herhangi bir konuma) işaret etmesine neden olarak saldırıyı tamamlayabilmesi durumunda bir saldırının başarılı olmasına izin verebilir.
Koruyucu karşı önlemler > Yürütülebilir Alan Koruması

Yürütülebilir alan koruması, yığının veya yığının kod yürütülmesini önleyen arabellek aşımı korumasına bir yaklaşımdır. Bir saldırgan, bir programın belleğine rastgele kod eklemek için arabellek aşımlarını kullanabilir, ancak yürütülebilir alan koruması ile bu kodu yürütmeye yönelik herhangi bir girişim bir istisna yaratacaktır.
Bazı CPU'lar, yazılımla birlikte verilerin sayfalarını (yığın ve öbek içerenler gibi) okunabilir ve yazılabilir ancak yürütülebilir değil olarak işaretlemek için NX veya XD bitini destekler.
Bazı Unix işletim sistemleri (örneğin OpenBSD, macOS) yürütülebilir alan korumasına sahiptir (ör. W^X). Bazı isteğe bağlı paketler şunları içerir:
PaX
Exec Shield
Openwall
Microsoft Windows'un daha yeni sürümleri, Data Execution Prevention adlı yürütülebilir alan korumasını da desteklemektedir. Tescilli eklentiler şunları içerir:
BufferShield
StackDefender
Yürütülebilir alan koruması genellikle return-to-libc saldırılarına veya saldırgan kodunun yürütülmesine dayanmayan diğer saldırılara karşı koruma sağlamaz. Bununla birlikte, ASLR'yi kullanan  64-bit sistemlerde, aşağıda açıklandığı gibi, yürütülebilir alan koruması, bu tür saldırıların uygulanmasını çok daha zor hale getirir.
Koruyucu karşı önlemler > Adres alanı düzenini rastgele seçme

Adres alanı düzenini rastgele seçme (ASLR), genellikle çalıştırılabilir tabanı ve kütüphanelerin konumu, öbek ve istifin konumunu rastgele bir işlemin adres alanına dahil anahtar veri alanlarının konumlarını düzenlemeyi içeren bir bilgisayar güvenlik özelliğidir.
Fonksiyonların ve değişkenlerin bulunabileceği sanal bellek adreslerinin rastgele oluşturulması, bir arabellek aşımının istismarını daha zor hale getirebilir ancak imkânsız hale getirmez. Benzer ancak daha az etkili bir yöntem, sanal adres alanındaki işlemleri ve kitaplıkları yeniden yapılandırmaktır.
Koruyucu karşı önlemler > Derin Paket Kontrolü

Derin paket denetimi (DPI) kullanımı, ağ çevresine saldırı imzaları ve sezgisel yöntemler kullanarak arabellek aşımlarından faydalanmak için yapılan çok basit uzaktan girişimler tespit edebilir. Bunlar, paketler bilinen bir saldırı imzası taşırsa veya uzun bir No-Operation talimatları serisi (NOP-kızak olarak bilinir) algılanırsa paketleri engeller, bunlar, bir zamanlar, istismarın yükünün(exploit's payload) konumu hafifçe değişken olduğunda kullanılmıştır.
Paket tarama, bilinen saldırıları engelleyebileceğinden etkili bir yöntem değildir ve bir NOP-kızağının kodlanabilmesi için birçok yol vardır. Saldırganlar tarafından kullanılan kabuk kodu, algılamalı paket tarayıcılar ve saldırı tespit sistemlerinden kaçınmak için alphanumeric, metamorphic ya da self-modifying olabilir.
Koruyucu karşı önlemler > Test etme/deneme

Arabellek aşımlarına sebep olan arabellek aşımlarını denetleme ve hataları düzeltme doğal bir biçimde aşımları önlemeye yardımcı olur. Bunları (arabellek aşımlarını) ortaya çıkarmak için kullanılan ortak bir otomatik teknik fuzzing'dir. Statik analizin yapabildiği gibi en iyi durum testi de arabellek aşımlarını ortaya çıkarabilir. Potansiyel bir arabellek aşımı saptandığında düzeltilmelidir. Bu, gelişmede olan test etme yaklaşımını yazılım için yararlı hale getirir ama artık devam ettirilmeyen veya desteklenmeyen eski yazılım için daha az yararlıdır.
Tarih

Arabellek aşımları 1972'nin başlarında, Bilgisayar Güvenlik Teknolojisi Planlama Çalışmasının, "bu işlevi yerine getiren kod, kullanıcı tarafından yer paylaşımı için monitörün bölümlerine izin veren kaynağı ve varış adreslerini düzgün bir şekilde denetlememektedir. Bu durum kodu, kullanıcının makinenin kontrolünü ele almasına izin veren monitörün içine enjekte etmesinde kullanılabilir" tekniğini tasarladığında anlaşılmış ve kısmen kamuya açık olarak belgelendirilmiştir. Günümüzde monitör, çekirdek(kernel) olarak anılabilir.
Arabellek aşımının düşmanca kötüye kullanımının belgelenmiş en eski hali 1988'de olmuştur. Bu, Morris solucanının Internet üzerinden kendini çoğaltmak için kullandığı çeşitli kötüye kullanımlardan biriydi. Finger adındaki kötüye kullanılan bu program Unix üzerinden bir servisti. Daha sonra 1995'te, Thomas Lopatic arabellek aşımını bağımsız olarak yeniden keşfetti ve bulgularını Bugtraq güvenlik posta listesinde yayımladı.  Bir yıl sonra 1996' da, Elias Levy (Aleph One olarak da bilinen) Phrack dergisinde yığın tabanlı arabellek aşımı zafiyetlerini kötüye kullanmanın adım adım tanıtımı olan “Eğlence ve Kar için Yığını Parçalamak” raporunu yayımladı.
O zamandan beri, en az iki önemli internet solucanı, çok sayıda sistemin güvenliğini aşmak için arabellek aşımlarından yararlandı. 2001'de, Code Red worm bir arabellek aşımını, Microsoft'un Internet Information Services (IIS) 5.0  ' lerinde kötüye kullanmıştır ve 2003'te, SQL Slammer solucanı, Microsoft SQL Server 2000 çalıştıran makinelerde kötüye kullanım göstermiştir.
2003'te, lisanslı Xbox oyunlarında ortaya çıkmış olan arabellek aşımları, konsolu donanım değişiklikleri gerekmeden çalıştırmak amacıyla, modchips olarak bilinen lisanssız yazılımlara (homebrew oyunları içeren) izin vererek kötüye kullanılmışlardır. The PS2 Independence Exploit'de aynı şeyi PlayStation 2 için elde etmede bir arabellek aşımını kullanmıştır. Twilight hack aynısını The Legend of Zelda: Twilight Princess'da bir arabellek aşımı kullanan Wii ile başarmıştır.
Bir NOP örnek yığında yük kızağı
Solingen

| Solingen |
| --- | --- |
Şehir

  Bayrak Arma 
Ülke:  Almanya
Eyalet: Kuzey Ren-Vestfalya
Yüzölçümü
 • Toplam: 89.45 km²
Nüfus (31 Aralık 2020)
 • Toplam: 159.193
 • Yoğunluk: 1.800/km²
Zaman dilimi: UTC+01.00 (OAS)
 • Yaz (YSU): UTC+02.00 (OAYS)
Solingen, Almanya'nın kuzeybatı kesiminde, Kuzey Ren-Vestfalya eyaletinde (Land) bir kent.
Konum

Ruhr bölgesinin ve Wuppertal şehrinin güneyindedir. Wupper ırmağı kıyısında yer alır. Nüfusu 162.174'tür (2016).
Tarihçe

Tarihsel kayıtlarda ilk kez 965'te Solagon adıyla geçer. 1374'te berat aldı. Aynı ölçüde eski olan Ohligs, Wald, Grafrath ve Hohscheid kasabaları 1929'daki düzenlemeyle sınırları içine alındı.
Tarihçe > Solingen katliamı

Ana madde: Solingen Faciası
Solingen'in adı, 29 Mayıs 1993'te düzenlenen bir saldırıyla tüm dünyada duyuldu. Hülya Genç (9), Gülüstan Öztürk (12) ve Hatice Genç (18) olay yerinde, Gürsün İnce (27) ile Saime Genç (4) ise kaldırıldıkları hastanede yaşamını yitirdi. Mevlüde Genç, olay sırasında 2 kızını, 1 yeğenini ve 2 torununu kaybetti. Oğlu Bekir'in vücudunun yüzde 36'sı yandı.
Genç ailesinin evini kundaklayan ve çeşitli hapis cezalarına çarptırılan dört aşırı sağcıdan Christian B. ve Felix K. adlı sanıklar, "iyi halden" serbest bırakıldı. Aşırı sağcılar, Bekir Genç'e 250 bin mark acı parası ödemeye mahkûm edildi. Ancak iki aşırı sağcının hala hapiste bulunmaları, Christian B'nin parasının olmaması, Felix K'nın da nerede olduğunun bilinmemesinden dolayı karar uygulanamadı.
Ekonomi

Orta Çağ'da kılıç imalatıyla tanınan Solingen; çatal-bıçak yapımında Thiers (Fransa) ve Sheffield (İngiltere) ile birlikte uluslararası üne sahip bir merkezdir. II. Dünya Savaşı sırasında büyük hasar gören kent merkezi yeniden inşa edilmiştir. Deutsches Klingenmuseum (Kılıç Müzesi), kesici âletlerin tarihî gelişimini sergiler. Kentte metalürji, kimyevî madde üretimi, şekerleme imalatı gibi sanayi dalları da gelişmiştir.
Kardeş şehirler

Gouda, Hollanda
Chalon-sur-Saône, Fransa
Cramlington, Birleşik Krallık
Jinotega, Nikaragua
Ness Ziona, İsrail
Thiès, Senegal
Aue, Almanya
Verilog

Verilog elektronik sistemleri modellemek için kullanılan bir donanım tanımlama dilidir. Verilog (bazen “Verilog HDL” olarak da adlandırılır) analog, sayısal ve karışık işaretli devrelerin tasarımını, doğrulanmasını ve yürütülmesini değişik düzeylerde desteklemektedir.
Verilog dilinin tasarımcıları dilin C programlama diline yakın bir söz dizimine sahip olmasını istemişlerdir. Böylece bu dile yatkın olan mühendislerin dili kolayca kullanmasını amaçlamışlardır. Dil küçük/büyük harf duyarlılığına sahiptir ve temel denetim akışının “if” ve “while” gibi anahtar kelimeleri, C'ye benzemektedir.
Verilog birkaç temel yönde C'den farklıdır. Verilog bir blok kodu tanımlamak için kıvrık parantezler yerine Begin/End kullanmaktadır. Verilog 95 ve 2001 işaretçi veya yinelemeli alt yordamlar yapılarına sahip değildir fakat SystemVerilog bu özelliklere sahiptir. Son olarak Donanım Tanımlama Dilleri için çok önemli olan zaman kavramı C dilinde bulunmamaktadır.
Verilog geleneksel programlama dilleri gibi basamaklarını tam olarak ardışık bir şekilde yürütmez. Verilog tasarımı modüller arasında bir hiyerarşi bulundurur. Modüller bir takım giriş, çıkış ve çift yönlü portlar şeklinde tanımlanır. Bir modül içinde yazmaç ve kablo listesi bulunur. Eşzamanlı ve ardışık ifadeler modülün davranışını; portların, kabloların ve yazmaçların arasındaki ilişki ile tanımlar. Ardışık ifadeler bir begin/end bloğuna konur ve blokla beraber ardışık olarak yürütülür. Tüm eşzamanlı ifadeler ve begin/end blokları koşut olarak yürütülür. Bir modül aynı zamanda diğer bir modülün bir veya daha çok örneğini içererek bir alt-davranışı belirtebilir.
Eğer tasarımdaki modüller sadece sentezlenebilir ifadeler içeriyorsa bu tasarımın donanımda gerçekleştirilecek temel bileşenlerini ve bağlantılarını içeren netlist, yazılım sayesinde sentezlenebilir. Elde edilen bu netlist bir tümleşik devreyi (örn. ASIC veya FPGA) tanımlamak amacıyla kullanılabilir.
Tarihçe > Başlangıç

Verilog 1983/1984 yıllarında Automated Integrated Design Systems (daha sonraları “ Gateway Design Automation” olarak ismi değiştirildi) Phil Moorby ve Prabhu Goel tarafından icat edilmiştir.1985 yılında ise donanım modelleme dili olarak değiştirilmiştir. Gateway Design Automation firması daha sonra Cadence tarafından 1990 yılında satın alınmıştır. Cadence şu anda Gateway firmasının Verilog diline ve Verilog-XL simülatörünün haklarına tamamen sahiptir.
Tarihçe > Verilog-95

VHDL'in o zamanlarki yükselen başarısı karşısında Cadence, dili standardlaştırmaya açmaya karar vermiştir. Cadence Verilog'u genel bir alan adresine taşımıştır Open Verilog International19 Haziran 2020 tarihinde Wayback Machine sitesinde arşivlendi. (OVI) (Accellera olarak biliniyor).Verilog daha sonraları IEEE’ye verilmiştir. IEEE Standard 1364-1995, Verilog-95 olarak referans gösterilir.
Tarihçe > Verilog 2001

Orijinal Verilog-95 standardında kullanıcılar tarafından bulunan eksikler kapatılarak IEEE’ye tekrar gönderilen standarttır. Bu eklemeler sonrasında Verilog-2001 IEEE Standard 1364-2001 şeklinde referans gösterilir.
Verilog-2001, Verilog-95’ten sonra önemli bir geliştirmedir. Öncelikle ikiye tümleyen ve işaretli değişkenlerle ilgili önemli bir destek eklenmiştir. Daha önceleri kod yazıcılar işaretli işlemleri garip bit işlemleri yaparak gerçekleştiriyorlardı. Dosya giriş/çıkış işlemleri birkaç yeni sistem görevi ile geliştirildi. Son olarak kodun okunabilirliğini artıran birkaç söz dizimi eklentisi yapıldı.(örneğin: always@* ve C dilindekine benzer fonksiyon/görev/modül başlık bildirimi gibi.)
Verilog-2001 ticari elektronik tasarım otomasyonu yazılımlarının temel olarak desteklediği Verilog dilidir.
Tarihçe > Verilog 2005

Verilog 2005 (IEEE Standard 1364-2005) SystemVerilog ile karıştırılmamalıdır. Verilog’un bu sürümü birkaç küçük düzeltme, özellik açıklaması ve birkaç yeni dil özelliği içermektedir. 
Verilog standardının ayrı bir parçası olan Verilog-AMS analog ve karışık işaret işlemleri ile geleneksel Verilog’u birleştirme çabasındadır.
Tarihçe > SystemVerilog

Systemverilog, Verillog 2005’in bir üst kümesi olarak tasarım doğrulama, tasarım modelleme gibi özellikleri olan bir dildir.
Örnekler

Bir “Merhaba Dünya” programı şu şekildedir.
module main;
  initial 
    begin
      $display("Merhaba Dunya!");
      $finish;
    end
endmodule
Basit şekilde iki Flip-flop şu şekildedir:
module toplevel(clock,reset);
 input clock;
 input reset;

 reg flop1;
 reg flop2;

 always @ (posedge reset or posedge clock)
 if (reset)
   begin
     flop1 <= 0;
     flop2 <= 1;
   end
 else
   begin
     flop1 <= flop2;
     flop2 <= flop1;
   end
endmodule
Tüm benzetim yürütülürken, “<=” işleci ile atanmış bütün sinyaller, işlemlerini aynı anda gerçekleşen tüm ifadeler yürütüldükten sonra yapılacak şekilde sıraya sokarlar. Bu işlece tıkanmasız (non-blocking) işleç denmektedir. Bir olaydaki tüm ifadeler yürütüldükten sonra, sıralanmış atanmalar yapılır. Bu olay eşzamanlı davranan kodların daha kolay çalıştırılmasını sağlar.
Yukarıdaki örnekte, flop1 değeri, flop2'ye atanmıştır. Benzer şekilde flop2 değeri, flop1'e atanmıştır. Bu ifadeler aynı zaman olayında yürütülmektedir. İfadeler “<=” tıkanmasız işleç ile kodlandığından, işlemler olayın sonunda yapılacak şekilde sıralanmıştır. O zamana kadar, flop1 ve flop2 için ihtiyaç duyulan değerler zaman olayının başındaki değerlerdir. Bu demektir ki atamalar alakasız bir şekilde sıralansa dahi aynı sonuç elde edilecektir. Flop1 ve flop2 her saat vuruşunda (clock olayında) değerlerini takas edeceklerdir.
Bu atama için bir diğer seçenek ise tıkanmalı (blocking) olarak bilinen “=” işlecidir. Bu işleç kullanıldığında olaylar diğer dillerdeki gibi bir sıra halinde meydana gelir. 
Eğer yukarıdaki örnekte “<=” işleç yerine “=” tıkamalı işleci kullanılsaydı, ifadeler sırası davranışı etkilerdi. Reset flop2'yi 1 e, flop1 de 0 a değiştirirdi. Clock olayı daha sonra flop1 i flop2'ye atardı(reset'ten sonra bu değer 1'dir).Sonraki ifade flop2'yi flop1'e atardı. Değerleri takaslamak yerine clock,flop1,flop2 1 olurdu ve değişmezdi.
Gecikme Örneği:
...
reg a, b, c, d;
wire e;
...
always @(b or e)
 begin
   a = b & e;
   b = a | b;
   #5 c = b;
   d = #6 c ^ e;
 end
Yukarıdaki “always” tümcesinin kullanımı diğerlerinden farklıdır. Örnek olarak, “always” tümcesindeki “b or e” koşulu b veya e parametrelerinin değişmesi koşulunda aşağıdaki ifadelerin yürütülmesi gerektiğini belirtir.5 birim zamanlık bir gecikmeden sonra b'nin değeri c'ye atanır ve c^e değeri görünmeyen bir yere atanır. 6 birim zaman sonra bu yerden d yazmacına atanır.
Bir işlem içinde (initial veya always bloğunun içinde) yürütülen işaretlerin her zaman “reg (yazmaç)” türünde olmalıdır. Dışarıdan yürütülen işlemlerde işaretler “wire(tel)” tipinde olmalıdır.”Reg” anahtar sözcüğü donanımsal bir yazmacı belirtmemektedir.
Sabitlerin Tanımlanması

Temel söz dizimi şu şekildedir.
<Genişlik (bit cinsinden)>'<taban harfi><sayı>
Örnekler:
12'h123 – 16'lık tabanda 123 (12 bit kullanarak)
20'd44 – Ondalık tabanda 44 (20 bit kullanarak - 0 ile otomatik olarak genişletilir.)
4'b1010 – ikilik tabanda 1010 (4 bit kullanarak)
6'o77 – Sekizlik tabanda 77 (6 bit kullanarak)
Sentezlenebilir Yapılar

Daha önce de belirtildiği gibi, donanımı tanımlamak için birkaç temel taslak kullanılabilir.
// Çoklayıcı Örnekleri –Aynı işlemi yapmanın 3 farklı yolu
// İlk örnek sürekli atamayı kullanmaktadır.
wire out ;
assign out = sel ? a : b;

// İkinci örnek aynı işlemi gerçekleştirmek için izlek(prosedür)  
// kullanmaktadır.

reg out;
always @(a or b or sel)
 begin
  case(sel)
   1'b0: out = b;
   1'b1: out = a;
  endcase
 end
 
// İzlek yapısında If/else  
// kullanılabilir.
reg out;
always @(a or b or sel)
  if (sel)
    out = a;
  else
    out = b;
Sonraki ilginç yapı ise saydam mandaldır (transparent latch).Kapı işareti “geç” olarak ayarlandığında girişi çıkışa gönderecektir. Eğer kapı işareti “tut” olarak ayarlamışsa, çıkış işareti girişten bağımsız olarak aynı durumda kalacaktır.
// Saydam Mandal Örneği

reg out;
always @(gate or din)
 if(gate)
   out = din; // İlet durumu
   // Burada “else” ifadesine gerek yoktur. “Gate” “high” durumdayken “out” 
   // “din” değişkenini takip edecektir.
   // “Gate” “LOW” olduğu zaman “out” durumunu koruyacaktır.
D Flip-Flop en basit yapılardan biridir.
reg q;
always @(posedge clk)
  q <= d;
Örnekte tıkanmasız atama kullanıldığına dikkat edilmelidir. Temel kurallardan biri “always” yapısı içerisinde “posedge” (pozitif kenar) veya “negedge” (negatif kenar) ifadeleri kullanıldığında “<=” işlecini kullanmaktır.
D flip-flop'un bir değişik türü, zamanuyumsuz sıfırlama (asynchronous reset) ile gerçekleştirilendir. Reset ifadesi geleneksel olarak yapı içerisindeki ilk “if” ifadesi olarak tanımlanmaktadır.
reg q;
always @(posedge clk or posedge reset)
  if(reset)
    q <= 0;
  else
    q <= d;
Bir sonraki değişik yapıda, hem zaman uyumsuz sıfırlama hem de zaman uyumsuz değer ataması kullanmaktadır. Geleneksel olarak “reset” terimi “set” terimi (değer ataması) ile takip edilmektedir.
reg q;
always @(posedge clk or posedge reset or posedge set)
 if(reset)
   q <= 0;
 else if(set)
   q <= 1;
 else
   q <= d;
Son değişik D flip-flop tipi ise girişini bir çoklayıcıdan alan tiptir.
// Temel yapı geri besleme ile yapılmaktadır.
always @(posedge clk)
  if(gate)
    q <= d;
  else
    q <= q; // açık geri besleme yolu
always @(posedge clk)
  if(gate)
    q <= d; // “else” çoklayıcı gerçekleştirildi.
Initial ve Always

Verilog işlemini belirtmek için iki tane farklı anahtar kelime bulunmaktadır. Bunlar “always” ve “initial” anahtar kelimeleridir. “Always” sözcüğü durum kontrolü (@) ifadesiyle tetiklenen serbest çalışan işlemleri ifade eder.”Initial” anahtar sözcüğü sadece bir kere yürütülen işlemler için kullanılır. Her ikisi de benzetimlik zamanının 0 anında “begin” yapısını kurar ve blok sonuna kadar yürütülür. Blok sona ulaştığında tekrar sıraya alınır. Genel düşünce “initial” bloğunun, “always’den” önce yürütüleceğinin varsayılmasıdır fakat “initial” bloğunun “always” bloğunun sadece bir kere çalıştıktan sonra duran özel bir durumu olarak düşünülmesi daha doğrudur.
//Örnekler:
initial
  begin
    a = 1; // zaman 0 anında reg tipi değişkene değer ata 
    #1; // 1 birim zaman bekle
    b = a; // reg a’yı reg b’ye ata
  end

always @(a or b) // a veya b değiştiğinde aşağıdaki ifadeleri gerçekleştir. 
begin
  if (a)
    c = b;
  else
    d = ~b;
end // Bu blokla işlem bittiğinde tekrar yukarı dön (@ durum kontrolü)

always @(posedge a)// reg a pozitif kenar değeri aldığında çalıştır
  a <= b;
Bunlar iki anahtar kelimenin klasik kullanımıdır. Bunun dışında iki tane ek kullanım özelliği bulunmaktadır.”Always” anahtar sözcüğünü @() duyarlılık listesini eklemeden de kullanabiliriz. Örneğin:
always
 begin // 0 zamanında yürütmeye başla ve hiçbir zaman durma
   clk = 0; 
   #1; // 1 birim zaman bekle
   clk = 1; 
   #1; 
 end // Yürütmeye devam ediyor – yukarıdan tekrar başlar.
“Initial” kullanımının bir diğer kullanımı ise “forever” anahtar sözcüğü ile kullanımdır.
Aşağıdaki örnek işlemsel olarak yukarıdaki “always” örneği ile aynıdır.
initial forever // 0 zamanında başla ve begin/end’i sürekli tekrarla.
 begin
   clk = 0; 
   #1; 
   clk = 1; 
   #1; 
 end
Fork/Join

Verilog'da “Fork/Join” yapısı koşut işlemler yaratmak amacıyla kullanılır. Fork/join çiftinin içindeki tüm ifadeler (veya bloklar) “fork” ile eşzamanlı olarak yürütülmeye başlanır. Yürütme “join” ile yürütmenin en uzun süren elemanın tamamlanmasıyla sona erer.
initial
 fork
   $write("A"); // A karakterini yaz
   $write("B"); // B karakterini yaz
   begin
     #1; // 1 birim zaman bekle
     $write("C");// C karakterini yaz
   end
 join
Yukarıdaki yazılan şekilde “ABC” veya “BAC” şeklinde bir sonuç almak mümkündür. Benzetimin sırası (ilk $write ve ikinci $write ifadelerinin sırası) simülatöre bağlıdır. Bu olay Verilog'daki en önemli durumlardan birini açığa çıkarmaktadır. Yarış koşulu adı verilen bu durumda yürütüm sırası sonuçların tutarlığını gölgeye düşürebilir.
Yarış Koşulları

Verilog'ta yürütüm sırası her zaman aynı olmayabilir. Bu durum iki sonucun çıkışa yarışması gibi düşünülebilir. Bu durum klasik bir örnekle açıklanmaktadır.
initial
  a = 0;

initial
  b = a;
 
initial
  begin
    #1;
    $display("Value a=%a Value of b=%b",a,b);
  end
A ve b değerleri için ne çıktı verilecek? Cevap 0 ve 0 olabileceği gibi, 0 ve herhangi değer olabilir. Bu olay tamamen “initial” bloklarının yürütüm sırasına bağlıdır. Eğer benzetim programının sıralayıcısı dosyayı yukarıdan aşağıya ele alıyorsa 0 ve 0 sonucu alınır. Eğer aşağıdan yukarıya ele alıyorsa, b benzetimin başındaki 0'a çekilemeyen “a” değerini alacaktır. 3. “initial” bloğunda böyle bir problem yaşanmayacaktır çünkü #1 ifadesi ile küçük bir gecikme eklenmiştir.