Dapatkah seseorang memberi tahu saya apa perbedaan antara RTL dan kode Verilog perilaku? Apakah ada batas demarkasi yang jelas antara desain pada kedua level ini?
Dapatkah seseorang memberi tahu saya apa perbedaan antara RTL dan kode Verilog perilaku? Apakah ada batas demarkasi yang jelas antara desain pada kedua level ini?
Jawaban:
Kode perilaku adalah tingkat yang lebih tinggi dan biasanya tidak dapat disintesis. Konstruk seperti loop, penundaan, dan pernyataan "awal" adalah perilaku.
Kode RTL adalah level yang lebih rendah dan dimaksudkan untuk disintesis. Ini mendefinisikan sirkuit sebagai kombinasi register yang saling berhubungan dan operasi yang dilakukan pada sinyal antara register tersebut.
Diambil dari Yahoo Answers dan ditemukan langsung dengan Google!
Kode "Register transfer level" adalah kode yang dijelaskan dalam hal register dan logika kombinatorial yang berada di antara mereka dan dimaksudkan untuk digunakan sebagai input ke alat sintesis. Kode menempel pada subset [1] bahasa yang dapat disintesis. Tidak ada penundaan eksplisit, semua waktu dalam hal tepi jam. Struktur yang mewakili kait yang dipicu level umumnya dihindari. Register biasanya mencatat sejumlah kecil jam yang detailnya dapat diberikan kepada penganalisa waktu. Logika kombinatorial biasanya diharapkan [2] untuk menetap dalam satu siklus clock tunggal yang membatasi kompleksitasnya. Level ini lebih tinggi daripada model level gerbang tetapi masih menentukan nilai apa yang dimiliki setiap register pada setiap siklus clock.
Kode "behavioral" umumnya adalah kode yang menjelaskan perilaku pada level yang lebih tinggi untuk digunakan dalam simulasi tetapi tidak dimaksudkan untuk dapat disintesis. Ini dapat digunakan untuk menggambarkan lingkungan di sekitar desain Anda dalam simulasi. Ini dapat digunakan sebagai langkah awal dalam desain untuk mendapatkan desain keseluruhan di tempat sebelum desain RTL rinci dari masing-masing modul diambil alih.
[1] Subset persis yang diizinkan bervariasi antara alat sintesis.
[2] Jika tidak diselesaikan dalam satu siklus dari simulasi dan synthisis dapat memberikan hasil yang berbeda dan penganalisa waktu akan menunjukkan pelanggaran kecuali secara eksplisit disuruh tidak melakukannya.
Definisi yang lebih umum.
Kode Perilaku: Menurut definisi, kode ini mendefinisikan perilaku komponen digital. Itu tidak memberikan informasi bagaimana itu akan diimplementasikan ke dalam HW aktual (sintesis). Itu tidak akan memberikan informasi bagaimana register dan gerbang akan dilaksanakan untuk melakukan operasi yang diperlukan. Ini lebih seperti menulis sebuah algoritma atau FSM dalam C.
RTL: Ini adalah bentuk yang lebih tepat dari komponen digital. Ini memberi informasi, bagaimana kode akan diimplementasikan sebagai HW yang sebenarnya (setelah sintesis). Juga memberikan informasi bagaimana data akan ditransfer antara register dan gerbang.
Ini bahasa yang sama, tetapi gaya yang berbeda digunakan. Dengan pengalaman Anda dapat membedakan mereka dengan cepat, berikut adalah beberapa ciri masing-masing:
Kode Verilog perilaku biasanya lebih mirip program komputer berurutan yang berjalan dari atas ke bawah dalam satu initial begin
blok. Anda mungkin menemukan tidak ada port input / output yang didefinisikan dalam modul perilaku level atas, karena output mungkin untuk fasilitas simulator, seperti konsol $display()
atau sistem file dengan $open
atau waveform dumper dengan $dumpfile
dan $dumpvars
. Perhatikan keterlambatan antara pernyataan yang diimplementasikan menggunakan waktu simulasi yang lama, misalnya, #4000
dan menjalankan tugas wishbone_master.checked_read(addr, value)
. Untuk konstruksi tingkat yang lebih tinggi ini, tidak jelas apa yang ekuivalen dengan teknologi yang disintesis / bisa.
Verilog untuk sintesis selalu memiliki port input / output, karena tanpa port yang terhubung modul tidak memiliki efek samping dan dapat dihilangkan [1]. Penundaan mungkin dilaksanakan dengan menghitung siklus beberapa jam tertentu. Perhatikan beberapa fungsi sistem Verilog misalnya, $clog2(PARAMETER)
mungkin diizinkan dalam kode untuk sintesis, jadi keberadaannya $function
bukan merupakan jaminan. Kode untuk sintesis cenderung terdiri dari banyak 'proses' independen masing-masing dengan daftar sensitivitas. Beberapa teknologi mengizinkan initial begin
blok untuk inisialisasi memori sehingga sekali lagi itu bukan jaminan.
Pada akhirnya perancang tahu tujuan kode yang mereka tulis dan akan memakainya dengan tepat dengan perangkat sintesis atau dalam simulator.
[1] kecuali untuk blok IP tertentu yang dapat membuat koneksi pintu belakang ke fasilitas chip internal, misalnya JTAG