Saatin her iki kenarını kullanma


10

Verilog ve Quartus II kullanarak bir Altera Cyclone IV programlıyorum. Tasarımımda, saatin her iki kenarını da kullanmak istiyorum, böylece% 50 görev döngüsüne sahip garip bir faktörle saat bölünmesi yapabilirim. İşte benim kod snippet'i:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Şimdi bunu derlediğimde, Quartus II aşağıdaki hatayı atar:

Adlog_clocking.v (83) adresindeki Verilog HDL Always Construct hatası: olay denetimi "low_jitter_clock_i" değişkeninin hem pozitif hem de negatif kenarlarını test edemiyor

Tasarımımda belirli bir saatin hem pozitif hem de negatif kenarını nasıl kullanabilirim?

Yanıtlar:


7

Kenara duyarlı her zaman blokta bir kayda atandığınızda, bir flip-flop tanımlarsınız. FPGA'larda saatin her iki kenarında tetiklenebilen parmak arası terlik yoktur.

İstediğinizi yapmak için, saatin her kenarı için bir tane olmak üzere iki ayrı her zaman bloğa sahip olmanız ve ardından iki blokun çıktılarını aksaklık oluşturmadan birleştirmenin bir yolunu bulmanız gerekir.

Örneğin, her zaman bir blok programlanabilir bölücünüzü içerebilir. Tek bir sayı verildiğinde çıktı görev döngüsü% 50'den az olacak şekilde tasarlayın. İlk bloğun çıkışını 1/2 saat geciktirmek için her zaman ikinci bloğu (diğer saat kenarında) kullanın, ardından iki çıkışı birlikte kullanın. Eşit bölücü değerleri için ikinci bloğun çıktısını devre dışı bırakın.


Saatin hem pozitif hem de negatif kenarlarını kullanmak istememin nedeni,% 50'lik bir görev döngüsüne sahip olmaktır.
Randomblue

Evet, anladım. Cevabım doğrudan buna değiniyor. Bölücü değeri eşit olduğunda% 50'lik bir görev döngüsünü nasıl alacağınızı zaten varsaymıştım. Net olmayan ne?
Dave Tweed

Çift kenarlı parmak arası terlik yok mu? Bunun doğal bir nedeni yok. Sadece kimsenin onları (ya da en azından bildiğimiz kimseyi) yapmadığı ortaya çıkıyor. Martin'in işaret ettiği gibi, çift kenarlı parmak arası terlikleri destekleyen bir CPLD vardır: xilinx.com/products/silicon-devices/cpld/coolrunner-ii/…
Philippe

3

Bu dahili mantık içinse, muhtemelen mevcut olan parmak arası terliklere çok daha yakın yazmanız gerekir. Coolrunner-II dışında, kendiliğinden çift kenarlı kayıtlara sahip herhangi bir programlanabilir mantığın farkında değilim.

Bu nedenle, alwaysbiri blok ve diğeri poz için iki blok oluşturmanız ve çıktılarını bazı birleştirici mantıkla birleştirmeniz gerekir.

Veya saati iki katına çıkarmak için bir PLL kullanın ve daha sonra geleneksel tek kenarlı mantık kullanabilirsiniz.



1

Dave Tweed'in belirttiği gibi, bir FPGA bir saatin her iki kenarında da çalışabilen flip flop donanımı içermiyorsa, geleneksel tek kenarlı flip flopları kullanarak istenen davranışı uygulamak için kendi mantığınızı yazmanız gerekecektir. Bir kişinin, çift kenarlı bir flip flop gibi davranan bir devre uygulayabilmesi için birkaç farklı yol olsa da, bu devreler genellikle flip floplarla ilişkili olanlardan farklı bazı zamanlama kısıtlamaları ekler.

Örneğin, basit bir yaklaşım, iki adet 2 girişli xors ve bir çift "T" flip flop'u (saat darbesi geldiğinde girişin durumu, saat kenarının çıktıyı değiştirip değiştirmeyeceğini gösterir) birleştiren bir modüle sahip olmaktır. yükselen bir kenar tarafından tetiklenir ve bir düşen kenar tarafından tetiklenir. Modülün çıkışı, flip flop'ların çıkışlarının xor'u olacaktır ve her iki flip flopun girişi, modül çıkışının ve girişinin xoru olacaktır.

Bu şekilde tasarlanmış bir devre, daha uzun kurulum ve yayılma süreleriyle birlikte, ancak ek bir zamanlama kısıtlamasıyla, esasen çift kenarlı bir flip flop gibi çalışacaktır. Geri besleme yolunda olmayan normal bir flip flop, saatin başlangıcında, saatin geçerli bir seviyede dengelenmesi ve kurulum süresi kısıtlamasının, ilk çalışma süresi darbesi ve saat darbesinin sabit olarak etkin olduğu zamandan ölçülen tutma süresi ve saat etkin zaman kısıtlamaları karşılanır. Flip flop çıkışının davranışı, saatin kararsız olduğu süre içinde tanımlanamayacak, ancak saat stabilize olduktan sonra tanımlanacaktır. Çift-xor-çift-flop modülü, çıkışı değiştirecek herhangi bir saat kenarının bunu yapabilen diğer herhangi bir saat kenarından güvenli bir mesafe olması gerektiği ek zamanlama kısıtlaması ekleyecektir. Bu kısıtlamayı karşılayamama, örneğin, giriş çıktıyla eşleşmiyorken üç saat kenarını arka arkaya çok yakın tutmak, çıktıyı belirsiz veya metastabil durumda bırakabilir (çift sayıda kenar içeren senaryoların endişe yaratmadığına dikkat edin) çünkü bu tür senaryolar runt darbelerinden başka bir şey içermeyeceğinden, üç kenarlı kasa (veya birden fazla diğer tek sayı vakaları) endişe kaynağıdır çünkü runt darbelerinin ardından geçerli bir darbe olacaktır.

Alternatif bir devre tasarımı, yukarıdaki gibi iki flip-flose sahip olmak, ancak çıkışlarını bir çoklayıcıya beslemek olacaktır. Bu devre, runt darbeleri ile kötü bir duruma atılmayacak ve saat kısıtlamaları alttaki mandallarla aynı olacaktır, ancak yüksek ve yüksek kalması (veya düşük olması ve düşük kalması gerektiği) dezavantajı olacaktır. ) böylece bir saat kenarında kısa bir süre aksak olabilir. Bazı devrelerde bu önemli değil, bazılarında da olur.

Mantık sentezi araçlarının, hangi zamanlama kısıtlamalarının önemli olarak belirtildiğini analiz ederek otomatik olarak çift kenarlı flip floplar uygulaması mümkün olabilir, ancak bunu yapmak biraz zor olacaktır. Ayrıca, bir tasarımda yapılan küçük bir değişikliğin uygulamada büyük bir değişikliğe neden olması ve dolayısıyla davranışta önemli ve beklenmedik bir değişiklik getirmesi riskini artıracaktır.

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.