Kapan menggunakan kait lebih baik daripada sandal jepit dalam FPGA yang mendukung keduanya?


20

Pertanyaan:

Kapan menggunakan kait lebih baik daripada sandal jepit dalam FPGA yang mendukung keduanya?

Latar Belakang:

Merupakan prinsip yang sudah dikenal luas bahwa kait transparan level-sensitif harus dihindari dalam FPGA, dan sandal jepit peka tepi harus digunakan secara eksklusif. Kebanyakan arsitektur FPGA secara alami mendukung kait dan sandal jepit.

Saran umum - bahkan dari vendor FPGA - adalah untuk berhati-hati terhadap kait, atau tidak pernah menggunakan kait, dll. Ada alasan yang sangat baik untuk saran ini, detailnya semuanya sudah terkenal. Namun, sebagian besar saran diutarakan, "jangan gunakan kait kecuali Anda tahu Anda membutuhkannya".

Saya seorang desainer FPGA yang berpengalaman, dan selama bertahun-tahun setiap kali saya pikir saya tahu bahwa saya memerlukan kait, seorang cepat menyadari bahwa ada cara yang lebih baik untuk melakukannya dengan sandal jepit. Saya tertarik mendengar contoh-contoh ketika menggunakan kait jelas lebih baik.

Catatan penting:

Kait vs. sandal jepit sering membuat orang gusar. Saya hanya tertarik dengan jawaban pertanyaan itu. Respons yang menjelaskan perbedaan antara kait dan sandal jepit, menguraikan alasan untuk tidak menggunakan kait, merinci mengapa sandal jepit lebih baik daripada kait, berbicara tentang bagaimana kait lebih baik dalam target non-FPGA, dll, akan benar-benar di luar topik.


Ketika Anda menggunakan FPGA persis meniru sirkuit yang ada yang menggunakan kait?
Majenko

Jawaban:


11

Pertanyaan Anda pada dasarnya adalah, "kapan Anda tahu Anda perlu kait?" Yang, seperti yang Anda maksudkan, adalah pertanyaan subyektif. Harapkan lebih banyak opini daripada fakta sebagai jawaban. Yang sedang berkata, inilah pendapat saya:

Saya, seperti Anda, sering menemukan cara yang lebih baik untuk menggunakan sandal jepit sehingga menghindari kait. Logika yang dihasilkan seringkali lebih elegan dan kuat. Tetapi ada saat-saat di mana saya tidak memiliki cukup kontrol atas logika untuk menghindari kait. Misalnya, saya mungkin berinteraksi dengan bus prosesor yang memerlukan kait untuk memenuhi spesifikasi yang diinginkan. Karena saya tidak bisa mendesain ulang CPU atau bus, saya terjebak dengan kaitnya.

Dalam 13+ tahun terakhir, itu adalah satu-satunya waktu saya membutuhkan kait.


2
Terima kasih atas jawabannya. Saya secara mental mengajukan tanggapan Anda di bawah "kompatibilitas mundur wajib", yang tampaknya benar-benar masuk akal. =)
wjl

8

Sandal jepit sering lebih disukai daripada kait karena mereka hanya memiliki empat kondisi / kendala balapan:

  1. pengaturan waktu antara perubahan ke input data dan tepi jam aktif berikut, dan
  2. tahan waktu antara tepi jam dan perubahan berikutnya pada input data;
  3. minimum durasi pulsa aktif;
  4. durasi pulsa minimum tidak aktif.

Jika kendala tersebut terpenuhi, output dari kegagalan akan sepenuhnya "bersih" dan bebas dari ketampanan. Selanjutnya, waktu flip flop dalam arti "digital": asalkan batasan waktu terpenuhi, output hanya akan berubah dalam jendela yang dapat diprediksi setelah tepi jam aktif, terlepas dari waktu input. Efek dari sandal jepit kaskade dengan demikian dapat diprediksi, terlepas dari kedalamannya. Sebaliknya, waktu keluaran latch jauh lebih "analog". Keterlambatan sinyal yang masuk ke kait dapat menyebabkan penundaan sinyal yang keluar. Bahkan jika kendala kait terpenuhi, keterlambatan ini dapat menyebabkan masalah di hilir.

Saya akan merekomendasikan menggunakan kait dalam kasus-kasus di mana perilaku yang diperlukan dari keluaran chip mungkin paling masuk akal dimodelkan oleh satu. Sebagai contoh, perangkat keras seseorang seharusnya berperilaku sebagai konverter serial-to-parallel di mana, antara tepi naik dan turun dari jam pertama setelah sinkronisasi bingkai, output pertama melacak input; antara naik dan turunnya tepi jam kedua, output kedua melacak input, dll. Seseorang dapat merancang sirkuit menggunakan sandal jepit dan logika kombinatorial murni yang akan menghasilkan perilaku seperti itu asalkan kendala waktu terpenuhi, tetapi sirkuit seperti itu akan lebih rumit daripada yang menggunakan kait, dan akan lebih cenderung berperilaku aneh jika kendala waktu tidak terpenuhi.


3
"Respons yang menjelaskan perbedaan antara kait dan sandal jepit, menguraikan alasan untuk tidak menggunakan kait, merinci mengapa sandal jepit lebih baik daripada kait, berbicara tentang bagaimana kait lebih baik dalam target non-FPGA, dll, akan benar-benar di luar topik . "
Majenko

@supercat Ya setidaknya bagian kedua dari jawaban Anda memang memiliki jawaban yang relevan dengan pertanyaan tersebut. =) Terima kasih.
wjl

1
@Majenko: Mungkin saya seharusnya mengatakan "lebih mudah digunakan" daripada "disukai"; maksud saya bukan untuk berdebat bahwa seseorang harus menghindari kait kapan pun memungkinkan, tetapi untuk menyarankan bahwa seseorang yang menggunakan kait perlu menyadari kompleksitasnya.
supercat

@supercat, bisakah Anda menjelaskan contoh Anda dengan wavetrace singkat?
Philippe

1

Dalam pekerjaan saya kadang-kadang saya harus menerapkan kait di FPGA, tetapi selalu merupakan solusi "jalan terakhir". Aplikasi umum termasuk koneksi dengan antarmuka asinkron atau bus, jika saya tidak dapat memastikan jam dengan kecepatan yang cukup untuk memastikan pengambilan sampel yang tepat dan sinkronisasi bus dan sinyal kontrol.

Masalah utama adalah bahwa kait adalah blok asinkron. Karena itu Anda harus memastikan, bahwa fungsi kombinasional yang menghasilkan sinyal input untuk kait bebas perlombaan . Kalau tidak, mereka dapat menghasilkan gangguan , yang mungkin terkunci, menyebabkan bahaya di sistem Anda.

Untuk menghindari balapan, Anda harus mengimplementasikan fungsi kombinasional ini dengan cara redundant khusus. Sayangnya (dalam kasus khusus ini ;-), jika tidak itu adalah properti yang sangat bagus) alat sintesis FPGA mengoptimalkan desain Anda menghapus semua redundansi. Oleh karena itu jika Anda ingin menerapkan kait di FPGA, Anda harus mengimplementasikannya "dengan tangan", dan melindungi terhadap optimasi (misalnya dalam VHDL Anda mungkin perlu mengatur atribut "keep" menjadi "true" untuk sinyal yang digunakan secara internal di kait Anda) .


-1 OP secara khusus bertanya tentang kapan Anda harus menggunakan kait, dan secara khusus meminta pembaca untuk tidak memberikan lebih banyak alasan bahwa kait tidak boleh digunakan.
Joe Hass

-1

Dalam hal waktu:

Jika kita menggunakan sandal jepit dalam desain maka kinerjanya tergantung pada penundaan jalur kombinasional terpanjang.

jika kita menggunakan kait sebagai pengganti sandal jepit kita dapat mengkompensasi keterlambatan jalur kombo terpanjang dengan meminjam waktu dari keterlambatan jalur yang lebih pendek di tahap berikutnya. Dengan ini kita dapat mengurangi penundaan dan meningkatkan kinerja desain.


3
-1. Lebih baik menganalisanya dengan benar dengan kendala multiseluncur dan memungkinkan bagian "async" untuk menjalankan dua siklus. Lihat misalnya halaman 7-30 dari altera.co.uk/literature/hb/qts/qts_qii53018.pdf
shuckc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.