Engelleme ve engellemesiz atama arasındaki fark


15

Aşağıdakilerle karşılaştığımda http://www.asic-world.com/verilog/verilog_one_day3.html bu sayfayı okuyordum :

Normalde flip-flopları sıfırlamamız gerekir, bu nedenle saat 0'dan 1'e (poz) her geçişte, sıfırlamanın iddia edilip edilmediğini (senkronize sıfırlama) kontrol ederiz, sonra normal mantıkla devam ederiz. Eğer yakından bakarsak, kombinasyonel mantık söz konusu olduğunda atama için "=" ve ardışık blok için "<=" operatörüne sahip olduğumuzu görürüz. Peki, "=" atamayı engelliyor ve "<=" engellemesiz atama. "=" kodu bir başlangıç ​​/ bitiş içinde sırayla yürütürken bloklama yapmayan "<=" paralel olarak yürütür.

Engelleme atamalarının paralel olduğu sırada engelleme olmayan atamaların sıralı olduğundan oldukça emindim. Sonuçta, her zaman blokların dışında ata deyimleri ile engelleme atamaları yapabilirsiniz ve hepsi paralel olarak çalışır. Bu bir hata mıdır yoksa her zamanki blok içindeki davranış farklı mıdır? Ve, davranış her zaman blok içinde farklıysa, engelleme olmayan atamalar her zaman blok dışında yapılabilir mi?

Yanıtlar:


21

engelleme atamalarının paralel olduğu sırada engellemeyen atamaların sıralı olduğundan oldukça emindi.

Engelleme ataması "seri halinde" yürütülür, çünkü engelleme ataması tamamlanıncaya kadar bir sonraki ifadenin yürütülmesini engeller . Bu nedenle, bir sonraki ifadenin sonuçları tamamlanan ilk ifadeye bağlı olabilir.

Engellemeyen atama, tümü aynı anda gerçekleşen atamaları tanımladığından paralel olarak yürütülür. 2. satırdaki bir ifadenin sonucu, 1. satırdaki ifadenin sonuçlarına bağlı olmayacaktır. Bunun yerine, 2. satır henüz 1. satır gerçekleşmemiş gibi yürütülür.


Peki ifadeleri atamaya ne dersiniz? Sadece kendi sınıfında mı?
Boşluk Yıldızı

4
Evet, assignifadeler her zaman blokların dışında gerçekleşir ve genellikle birleştirici (mandalsız) mantığı tanımlamak için kullanılır (her zaman bazı istisnalar hariç, sıralı mantığı tanımlarken). AFAIK, assignLHS'lerinde değer değişikliği olduğunda ifadeler her zaman "paralel" olarak yürütülür.
Foton

Tamam ... Verilog'un en zarif tasarımlı dil olmadığı izlenimini edinmeye başladım. Bu C'nin öğrenmesi gibi olacak.
Boşluk Yıldızı

1
Verilog zaten var olan donanımı "tanımlamak" için tasarlanmıştır. Donanımı tasarlamak (sentezlemek) için bir dil olarak kullanmak bir hack'tir.
Foton

4
Verilog "C öğrenmek gibi" bir sorunsa, VHDL'ye bakın. Bazı insanlar biri veya diğeri için oldukça güçlü tercihlere sahiptir. Bazıları için VHDL çok fazla ayrıntılıdır. Bana göre, daha iyi düşünülmüş. (sinyal / değişken atama semantiği, engelleme / örneklemeden çok daha açıktır). stackoverflow.com/questions/13954193/… ve sigasi.com/content/vhdls-crown-jewel Bunu tercih edebilir veya nefret edebilirsiniz. Ama bir göz atmaya değer.
Brian Drummond

6

Atama ifadeleri "engelleme" veya "engelleme kaldırma" değildir, "sürekli" dir. Bir atama ifadesinin çıktısı her zaman girdilerinin belirtilen işlevine eşittir. "engelleme" ve "engellememe" atamaları yalnızca her zaman bloklar içinde bulunur.

Bir engelleme ataması işlendikten hemen sonra geçerli olur. Geçerli "zaman deltasının" işlenmesi sonunda engelleme olmayan bir atama gerçekleşir.

her zaman bloklar kombinatoryal veya sıralı mantığı modellemek için kullanılabilir (systemverilog bunu açık yapmak için always_comb ve always_ff). Kombinatoryal mantığı modellerken = kullanmak genellikle daha etkilidir, ancak genellikle önemli değildir.

Sıralı mantığı modellerken (örn. Her zaman @ (pozedge clk)) normalde engellemesiz değerlendirmeler kullanırsınız. Bu, "saat kenarından sonraki durumu" "saat kenarından önceki durumu" olarak belirlemenizi sağlar.

Engelleme atamalarının ardışık olarak her zaman "değişken" olarak bloklarda kullanılması yararlı olabilir. Bunu yaparsanız, akılda tutulması gereken iki temel kural vardır.

  1. Bir ardışık blok içerisindeki engelleme atamalarıyla ayarlanan bir reg'e her zaman atanmış olduğu her zaman bloğun dışından engellenmeyin.
  2. Aynı reg ile engelleme ve engelleme olmayan görevleri karıştırmayın.

Bu kurallara uyulmaması, simülasyon ve sentez arasında sentez hatalarına ve / veya davranış farklılıklarına neden olabilir.


Msgstr "" "Bir ardışık düzen içinde engelleme atamalarıyla ayarlanan bir reg'e her zaman atanmış olduğu her zaman bloğun dışından engelleme yapmayın." "Lütfen açıklayabilir misiniz?
user125575

Farklı ardışık bloklar her zaman tanımlanmış bir sıraya sahip değildir. Bu nedenle, her zaman başka bir bloktan her zaman bir blokta engelleme değerlendirmesiyle bir "reg" kümesi okumak, öngörülemeyen davranışlara yol açacaktır.
Peter Green

Ve simülasyonda çalışıyor gibi görünse bile, bir sentez aracı buna bakmalı ve "hayır" demelidir. Bu ara değişkenler için yerel reglar kullanıyorum ve okunmadan önce her saatte her zaman atandıklarından emin olun, böylece 'depolama' ima edilmez.
greggo

IIRC en azından kuartusta sadece hata değil uyarı olarak kabul edilir.
Peter Green

5

Engelleme ataması terimi insanları karıştırır, çünkü engelleme sözcüğü zaman-ardışık mantık önermektedir. Fakat sentezlenmiş mantıkta bu demek değildir , çünkü her şey paralel çalışır .

Belki de daha az kafa karıştırıcı bir terim olabilir. atamanın geciktirilmiş olabilen kombinasyonel mantığın ara sonuçlarını girdilerden şeffaf olmayan bellek elemanlarına (örneğin saat kayıtları) aralamayı ayıracak acil atama olacaktır .

Yasal bir bakış açısından, her şey çok iyi çalışıyor. Aslında, diziler içinde bile =bir engelleme (zaman-sıralı) işlemi olduğunu düşünebilirsiniz always_comb. Ancak, zaman-sıralı ve paralel arasındaki ayrım , bu durumda kesinlikle hiçbir farkalways_comb yaratmaz, çünkü komut, komut dizisi kararlı bir duruma yaklaşana kadar tekrarlanacak şekilde tanımlanır - tam olarak donanım devresinin yapacağı şeydir (zamanlamayı karşılıyorsa) Gereksinimler).

Verilog'un sentezlenebilir alt kümesi (ve özellikle SystemVerilog) son derece basit ve kullanımı kolaydır - gerekli deyimleri öğrendikten sonra. Sadece dilde sözde davranışsal unsurlarla ilişkili terminolojinin akıllıca kullanımını geçmiş olmalısınız .


Olarak davranışsal kodlama stilleri ( şekilde RTL karşılaştırıldığında ), engelleme ve uygun olabilir engellenmeyen arasındaki fark. Bazı durumlarda, sentez aracı, davranışsal bileşen tasarımlarından işlevsel olarak eşdeğer RTL çıkarabilir.
nobar

Elbette , özellikle bloklar içindeki ifadeler için geçerli olan SystemVerilog'un prosedürel modu sadece (zaman-sıralı) engelleme atamasını kullanır . Bu testbench tasarımı için yararlıdır , ancak genellikle RTL spesifikasyonu için kullanılmaz. initialprogram
nobar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.