Catatan: Saya menggunakan ISE Xilinx dan memiliki papan FPGA untuk bekerja (dengan sakelar dan lampu dan sebagainya), dan saya telah meretas beberapa proyek sederhana sejauh ini. Pada saat yang sama saya membaca beberapa tutorial untuk membangun fondasi untuk apa yang saya lakukan.
Saya telah melihat berbagai entitas dan arsitektur mereka yang disebutkan dalam bahan referensi yang saya lalui, tetapi penamaannya sering membingungkan. Seringkali alih-alih "arsitektur rtl .." atau "arsitektur struktural ..." Saya akan melihat "arsitektur foo of ..." atau bahkan "arsitektur arch of ..."
Saya menyadari (terlambat) bahwa nama arsitektur sama sewenang-wenangnya dengan penamaan entitas, meskipun ada panduan gaya yang menyarankan konvensi penamaan yang lebih konsisten dapat digunakan untuk menghindari masalah ini. Ini membawa saya ke beberapa pertanyaan:
Melihat suatu entitas, bagaimana seseorang dapat menentukan model arsitektur yang sebenarnya digunakan tanpa petunjuk dari nama arsitektur? RTL, perilaku, struktural ... mereka tampaknya sangat mirip dengan mata pelajar saya (dengan asumsi contoh yang saya lihat sebenarnya diberi nama dengan benar). Contoh sederhana namun jelas akan sangat membantu di sini (atau pointer ke satu).
Jika menentukan beberapa arsitektur untuk satu entitas (yang saya pahami adalah mungkin), apakah Anda cukup memberi nama arsitektur yang berbeda dalam file yang sama atau ...?
Apakah nama arsitektur terbatas pada entitas tertentu (yaitu, apakah ada masalah dengan "ruang nama" dengan menggunakan nama arsitektur yang sama pada beberapa entitas)?
Edit: dan satu lagi:
- Tampaknya ada perbedaan antara RTL dan perilaku, tetapi seperti yang disebutkan di atas saya tidak benar-benar melihatnya dalam contoh yang saya lihat (seringkali saya hanya melihat satu arsitektur didefinisikan). Apakah satu arsitektur lebih umum daripada yang lain?
Apa yang saya cari adalah proyek multi-komponen yang komprehensif namun sederhana (komponen kecil), ditulis menggunakan praktik terbaik (penamaan yang tepat, tidak semua dijejalkan ke dalam satu file, dll.) Tetapi saya belum menemukannya. Saya menemukan proyek sampel yang dibuat dengan benar sangat berguna untuk menerangi prinsip-prinsip dasar dan praktik terbaik. Jika Anda tahu contoh proyek seperti itu, saya akan berterima kasih atas petunjuknya juga. (Jika tidak ada yang lain, mungkin begitu saya mengetahui hal ini saya dapat membagikan salah satu dari saya sendiri ...)
sumber
arch
, dan sebaliknya fokus pada memberikan entitas nama yang masuk akal. Untuk kasus yang jarang saya memiliki lebih dari satu arsitektur untuk suatu entitas, saya hanya memberi mereka nama lain. Namun, bagi saya,behavioural
benar-benar menyiratkan kode yang tidak mungkin atau tidak dimaksudkan untuk disintesis. Juga, saya selalu punya idertl
nama yang cocok untuk semua HDL yang dimaksudkan untuk sintesis, terlepas dari tingkat abstraksi. (Saya mungkin, seperti biasanya, salah pada poin-poin ini, tetapi itu adalah pemahaman saya tentang penggunaan kata-kata itu.)Berikut adalah tipe arsitekturnya:
Perilaku:
Catatan umum:
Catatan khusus Xilinx
Struktural:
Definisi umum
Xilinx catatan spesifik x
Di atas pada dasarnya adalah dua binatang utama arsitektur tradisional. Sangat umum definisi "campuran" digunakan, yang berisi properti keduanya.
RTL:
RTL apa yang sebenarnya diletakkan di FPGA pada akhir hari. Jadi ini adalah kode yang dapat disintesis yang mendefinisikan perilaku sistem dan terdiri dari hierarki kode:
Lapisan bawah akan menjadi perilaku yang dapat disintesis, di mana seluk beluk perilaku sinyal ditentukan, dan tingkat atas akan menjadi struktural, di mana komponen perilaku diikat bersama untuk membuat "diagram blok" tingkat atas yang besar jika Anda mau.
Aktif ke beberapa arsitektur:
Arsitektur dapat semuanya dalam satu file atau beberapa file. Satu-satunya hal yang penting adalah bahwa entitas dikompilasi terlebih dahulu, dan arsitektur yang digunakan ditentukan.
Buku ini sangat berguna dan merinci hal semacam ini dengan cukup baik.
Tidak ada aturan yang keras dan cepat tentang bagaimana hal-hal harus dilakukan dalam hal memiliki model perilaku dan struktural yang berbeda atau hanya mencampurkannya. Biasanya dalam desain firmware besar (atau di perusahaan besar di mana kode dibagikan dan digunakan kembali) ada baiknya untuk membedakan antara keduanya untuk menyederhanakan masalah, namun pada akhirnya itu tergantung pada apa pun yang bekerja untuk Anda.
sumber
Pertama-tama, desain arsitektur dunia nyata tidak dapat dikategorikan secara ketat seperti itu. Kenapa membatasi diri? Anda mungkin ingin membuat instantiate entitas lain dan menghubungkannya "secara struktural", tetapi tambahkan proses atau tugas bersamaan di sana-sini untuk menambahkan beberapa logika "rtl", dan mungkin menggunakan beberapa pola pengkodean "perilaku" sehingga synthesizer menemukan beberapa perincian yang tidak Anda pedulikan (seperti menambahkan tanpa secara khusus membuat penambah dengan parameter area / pipelining / kinerja), semuanya dalam arsitektur yang sama.
Lebih penting lagi, Anda harus memahami apa yang dapat disintesis dalam teknologi asic / fpga saat ini dan apa yang tidak, dan ini terlepas dari model arsitekturnya.
Suatu entitas dapat diimplementasikan dalam berbagai cara, bahkan memungkinkan perilaku yang sedikit berbeda, sehingga Anda mungkin memiliki beberapa arsitektur untuk entitas yang sama. Selain itu, Anda mungkin memiliki arsitektur untuk simulasi saja (biasanya tidak dapat disintesis) yang dapat mensimulasikan lebih cepat daripada versi "nyata", yang mungkin berguna ketika menguji desain besar secara keseluruhan. Anda akan memberikan nama-nama arsitektur ini yang membantu Anda mengingat apa yang membuatnya berbeda dari yang lain, dan bhv / str / rtl biasanya tidak cukup atau akurat, mengingat sifat hibrida dari desain dunia nyata.
Mengenai pertanyaan spesifik Anda, deklarasi arsitektur terkait dengan nama entitas, sehingga tidak ada masalah namespace dengan arsitektur dengan nama yang sama untuk entitas yang berbeda. Cukup gunakan nama yang berbeda untuk arsitektur untuk entitas yang sama.
Arsitektur dapat berada di file yang berbeda, Anda hanya perlu memastikan bahwa deklarasi entitas dikompilasi terlebih dahulu.
Anda dapat memilih arsitektur mana yang akan digunakan saat membuat entitas, atau menggunakan pernyataan konfigurasi. Jika tidak, defaultnya adalah 'biasanya' arsitektur terakhir yang dilihat kompilator untuk pernyataan entitas yang diberikan.
sumber