Mengapa penundaan tidak dapat disintesis di Verilog?


8

Saya selalu membaca bahwa penundaan yang dinyatakan dalam kode RTL tidak pernah dapat disintesis. Mereka dimaksudkan hanya untuk tujuan simulasi dan alat sintesis modern hanya akan mengabaikan keterlambatan deklarasi dalam kode.

Misalnya: x = #10 y;akan dianggap sebagai x = y;oleh alat sintesis.

Apa alasan keterlambatan deklarasi dalam bahasa deskripsi perangkat keras (misalnya, VHDL, Verilog atau Sytem-Verilog) tidak dapat disintesis?


1
Ini adalah pertanyaan lintas diposting karena jatuh di antara tumpang tindih SO dan ElectronicsSE.
pre_randomize

Jawaban:


14

Mensintesis berarti mengubah apa yang telah Anda deskripsikan (di Verilog di sini) menjadi perangkat keras nyata .

Sekarang di Verilog Anda, Anda mengatakan bahwa Anda memiliki penundaan 50ns. Ok, tapi sekarang, dalam hal perangkat keras, bagaimana Anda mengubahnya menjadi perangkat keras yang sebenarnya?

Jika Anda menggunakan FPGA, bagaimana Anda benar-benar membangun penundaan 50ns Anda menggunakan sumber daya FPGA yang tersedia (LUT, Register, elemen Ram, ...)? Dengan menambahkan penundaan perutean tambahan? bayangkan Anda menentukan penundaan 1s! Mustahil tanpa menggunakan SEMUA kemampuan perutean chip Anda (mungkin tidak cukup). Desain Anda tidak dapat dipasang. Sama untuk ASIC. Anda akan menggunakan 80% permukaan silikon untuk menambahkan penundaan ke SATU baris.

Cara itu seharusnya bekerja adalah bahwa Anda menggunakan desain sinkron dan Anda menerapkan penundaan sendiri menggunakan penghitung atau teknik lainnya. Tetapi penundaan harus merupakan kelipatan dari jam elemen itu.

Biasanya Anda menemukan hal-hal seperti "setelah 10 ns" tesis adalah penundaan propagasi. Saat melakukan simulasi ideal pada simulator Verilog, output terjadi tepat saat input berubah. Ini tidak realistis dan tidak menggambarkan cara kerja perangkat keras yang sebenarnya. Untuk memperhitungkan itu, Anda dapat menentukan setelah berapa lama output Anda akan diubah: menggunakan deklarasi keterlambatan.


2
Saya akan mencatat bahwa "karena akan mengambil seluruh chip" bukan benar-benar alasan mengapa sesuatu tidak dapat disintesis, itu adalah alasan mengapa sesuatu tidak dapat dipasang atau ditempatkan dalam batas yang ditentukan.
W5VO

@ W5VO Anda benar. Itu dimaksudkan untuk menunjukkan sesuatu yang tidak masuk akal yang akan membenarkan untuk menemukan cara lain. Dikoreksi.
Blup1980

5

Porting jawaban saya dari SO . Yang berfokus pada mengapa tidak praktis untuk mensintesis penundaan mutlak

Saat mensintesis pohon jam, alat sintesis menyeimbangkannya dengan menambahkan penundaan sehingga semua node menerima jam pada saat yang sama, sehingga alat sintesis tampaknya memiliki kemampuan untuk menambahkan penundaan.

Namun ketika ASIC diproduksi ada perbedaan dalam kecepatan, pada tingkat tinggi ini dapat dilihat sebagai Lambat, Khas dan Cepat. Dalam praktiknya ada ratusan variasi sudut ini di mana jenis perangkat tertentu dalam silikon berjalan cepat dan lainnya lambat.

Sudut-sudut silikon ini juga memiliki peringkat suhu, kasus terburuk mungkin + 140C Silikon cepat dan -40C Silikon lambat. Variasi dari penundaan melalui buffer dalam hal ini bisa dari 1ns hingga 30ns.

Untuk mengembalikan ini ke Verilog jika #10dapat disintesis, Anda akan benar-benar mendapatkan 155 + -145 yaitu 10ns hingga 300ns, jika Anda juga mendesain sesuatu dengan #20menjadi bagian dari antarmuka atau struktur kontrol yang sama, ia akan memiliki kisaran 20ns hingga 600ns . Karena itu semuanya tidak benar-benar valid terhadap desain Anda. Anda tidak mendapatkan yang tepat #10dan #20yang ditentukan.

Pohon jam dirancang dengan cara membatasi batas maksimum dan minimum, sehingga semua simpul pada pohon jam akan berskala relatif satu sama lain. Mereka tidak pernah diberikan aturan ketat yang harus # 10ns karena ini secara fisik tidak mungkin untuk dijamin dalam sirkuit kombinatorial.


3

Satu-satunya satuan waktu absolut adalah dari jam eksternal. Di mana penundaan sewenang-wenang akan datang - seperti apa logika digital yang setara yang akan menghasilkannya dari jam?

Jika Anda ingin penundaan yang dapat disintesis maka Anda harus menggunakan input jam eksternal dan mesin / penghitung keadaan yang sesuai yang akan menghitung jumlah siklus jam tertentu.


Pikiran ini baru saja terlintas di benak saya. Mengapa kita harus mengandalkan jam untuk menghasilkan penundaan? Mengapa penundaan tidak dapat disintesis ke sirkuit RC sederhana dengan Vdd?
Anand

1
Sintesis sebagian besar mengisi nilai ke dalam tabel pencarian dan elemen routing. Saya kira itu jauh lebih sulit untuk membuat sirkuit RC bidang-programmable, terutama yang tidak terlalu terpengaruh oleh suhu. Jauh lebih mudah untuk menyinkronkan semuanya pada clock edge yang sama daripada berharap untuk waktu propagasi yang tepat.
maksimal
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.