SDC üzerinden ASIC zamanlama kısıtlamaları: Çoklanmış bir saat nasıl doğru şekilde belirtilir?


10

Giriş

İnternette ve bazı eğitim sınıflarında SDC formatında zamanlama kısıtlamalarının nasıl oluşturulacağı hakkında birden fazla, bazen çelişen veya eksik bilgi bulduktan sonra , EE topluluğundan karşılaştığım bazı genel saat üreten yapılarla ilgili yardım istemek istiyorum.

Bir ASIC veya FPGA üzerinde belirli bir işlevselliğin nasıl uygulanacağı konusunda farklılıklar olduğunu biliyorum (her ikisiyle de çalıştım), ancak belirli bir yapının zamanlamasını kısıtlamak için genel, doğru bir yol olması gerektiğini düşünüyorum . altında yatan teknoloji - lütfen bu konuda yanlış olup olmadığımı bana bildirin.

Ayrıca farklı sağlayıcıların uygulama ve zamanlama analizi için farklı araçlar arasında bazı farklılıklar vardır (bir SDC ayrıştırıcı kaynak kodu sunan Synopsys'e rağmen), ancak bunların temel olarak belgelerde aranabilecek bir sözdizimi sorunu olduğunu umuyorum.

Soru

Bu, yine daha büyük bir tasarımın parçası olan clkgen modülünün bir parçası olan aşağıdaki saat çoklayıcı yapısıyla ilgilidir : Saat çoklayıcı şeması

İken ext_clkgirişi dışarıdan (bir giriş pimi üzerinden gelen) tasarımına üretilecek varsayılır, clk0ve clk4sinyaller de üretilir ve kullandığı clkgen (benim ilişkili bkz modülü dalgalanma saat soruyu detayları için) ve saat kısıtlamaları adlı ilişkilendirmiş baseclkve div4clk, sırasıyla.

Soru, zamanlama analizörünün kısıtlamaları nasıl belirleyeceğidir.

  1. Farklı AND ve OR kapıları arasındaki gecikmeleri dikkate alarak cpu_clkkaynak saatlerinden ( fast_clkveya slow_clkveya ext_clk) biri olabilen çoğullamalı bir saat gibi davranır .
  2. Aynı zamanda tasarımın başka bir yerinde kullanılan kaynak saatler arasındaki yolları kesmiyor.

Bir yonga üstü saat çoklayıcısının en basit örneği sadece set_clock_groupsSDC bildirimini gerektiriyor gibi görünüyor :

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

... verilen yapıda, bu, sadece iddia edildiğinde olacak şekilde yapılandırılmış olsa bile, tasarımda ( çıkış clk0yoluyla fast_clk) ve clk4(üzerinden slow_clk) hala kullanılmasından dolayı karmaşıktır .cpu_clkext_clkuse_ext

Açıklandığı gibi burada , set_clock_groupsyukarıdaki gibi komut aşağıdaki neden olur:

Bu komut, her gruptaki her saatten diğer her gruptaki her saat için set_false_path çağrılmasına eşdeğerdir veya bunun tersi de geçerlidir.

... diğer saatler hala başka yerlerde kullanıldığı için bu yanlış olur.

ek bilgi

use_clk0, use_clk4Ve use_extgirişleri sadece bir tanesi herhangi bir zamanda yüksek bir şekilde oluşturulur. Bu, tüm use_*girişler düşükse tüm saatleri durdurmak için kullanılabilirken , bu sorunun odağı bu yapının saat çoğullama özelliğidir.

X2, şematik olarak, örneğin (basit bir tampon) sadece otomatik yeri ve yol araçlar (örneğin, arasında olduğu gibi her yerde yer tampon genellikle serbest olma sorunu vurgulamak için bir yer tutucu olduğunu and_cpu_1/zve or_cpu1/in2pimler). İdeal olarak, zamanlama kısıtlamaları bundan etkilenmemelidir.


Çok özel, çok dar bir soruya daraltarak bunu daha özlü yapmaya çalışabilir misiniz? Önemli bilginin ne olduğunu ve gerçekten neyin peşinde olduğunu anlamak benim için zor.
travisbartley

@ trav1s: Soruyu yeniden yapılandırdım. Herhangi bir açıklamaya ihtiyacınız varsa lütfen bana bildirin.
FriendFX

Yanıtlar:


3

And_ * ağlarında 1 saat ile bölmeyi tanımlayın ve fiziksel olarak münhasır olduklarını beyan edin. Cadence RTL derleyicisi, cpu_clk tarafından saatlendirilen kayıtlar için 3 zamanlama yolu oluşturarak durumu doğru şekilde işler (bir saat için bir yol). Doğrudan clk0, clk4 ve clk_ext tarafından yönlendirilen kayıtların kendi zamanlama yayları vardır.

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

Önerin için teşekkürler. Maalesef şu anda bunu doğrulayamıyorum, ancak konseptiniz bana oldukça umut verici görünüyor. Eğer arasındaki yollar olup olmadığını kontrol eder misiniz cast_clk, cpu_clkve slow_clkaynı zamanda kendilerine ait giriş saatler ile kısıtlı olurken, yine (özel dolayı saat gruplarına yani değil bir istisna) kontrol edilir? Nihayetinde, bu soruya yetkili bir cevap arıyorum.
FriendFX

@FriendFX RTL derleyici kodu test ettik ve yollar doğru çıkarılır.
Revanth Kamaraj

Sadece size bildirmek için, tek hücreli saat çoklayıcıları ve bir çözüm hakkında en azından bazı bilgiler ekledim (en azından bazı araçlar için).
FriendFX

1

Bu eski bir iş parçacığı yanıtsız olmasına rağmen ... senkronizasyon ve asenkron saatler gibi bazı temel bilgileri kapsar

  • Temel olarak, Senkron saatler, Mux'ing'in bir aksaklık yaratmaması için minimum gecikmeler eklenmiş olarak senkronize halde kalmalıdır.
    • Bu genellikle tüm geçitli saat kaynaklarını tam hız saatinde yeniden örnekleyerek gerçekleştirilir.
  • Asenkron saatler zamanlama için kritik değildir, bu nedenle gecikmelere izin verilir. Dalgalanma Sayaçları gibi.

resim açıklamasını buraya girin


Bu eski soruyu incelediğiniz için teşekkürler. Benim durumumda, devrede gösterildiği gibi, saatleri tam hızlı saatle yeniden senkronize etmek istemiyorum. Yine bununla birlikte eksik sorumu, yani doğru SDC dikkate kaynak saatlerinin synchronicity alarak bu devreyi sınırlamak için tabloların ana parçasıdır yanı sıra bahsedilen beri, onları aynı senkron tasarımında kullanılan set_clock_groupsyanlış kesim için örnek bağlantı iddiaları bu saatler arasındaki yollar.
FriendFX
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.