VHDL: Penamaan dan interpretasi arsitektur

14

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 ...)

MartyMacGyver
sumber

Jawaban:

6

Melihat suatu entitas, bagaimana seseorang dapat menentukan model arsitektur yang sebenarnya digunakan tanpa petunjuk dari nama arsitektur?

Anda tidak dapat - ketika instantiated atau dikonfigurasi , arsitektur dapat ditentukan (jika ada lebih dari satu untuk dipilih) atau default akan dipilih untuk Anda.

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 ...?

Anda memberi mereka nama yang berbeda. Itu tidak harus berada dalam file yang sama (pada kenyataannya VHDL peduli jauh lebih sedikit daripada yang Anda pikirkan tentang apa yang ada di file apa)

Apakah nama arsitektur terbatas pada entitas tertentu (yaitu, apakah ada masalah dengan "ruang nama" dengan menggunakan nama arsitektur yang sama pada beberapa entitas)?

Mereka "melekat" pada suatu entitas, sehingga dapat digunakan kembali.

Saya sering menggunakan a1arsitektur saya untuk semua yang dapat disintesis

  • rtl menyiratkan level yang lebih rendah (untuk banyak pembaca) daripada yang saya tulis di.
  • behavioural sering menyiratkan non-sintesis (untuk beberapa pembaca)
  • synth digunakan oleh synthesizer untuk model itu (kalau tidak saya akan menggunakan itu)

a1 sejauh ini tidak berkonflik dan tidak menimbulkan kebingungan;)

Jika saya benar-benar memiliki lebih dari satu arsitektur, saya cenderung memberi nama mereka secara lisan (misalnya hard_multipliersdan lut_multipliersuntuk filter yang instantiate - atau tidak - blok MUL18).

Sangat sering Anda hanya memiliki satu arsitektur, jadi itu tidak masalah. Nama entitas yang baik jauh lebih penting.

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?

Itu historis - Anda tidak terbiasa untuk mensintesis kode "perilaku" (yang pada satu titik termasuk hal-hal seperti menambahkan!) - jadi Anda membuat versi RTL yang instantiated adders dan sejenisnya. (Seperti yang saya mengerti - saya sudah menulis kode perilaku (namun masih dapat disintesis) sejak saya mulai VHDLing sekitar tahun 1999!)

Martin Thompson
sumber
Saya menghargai jawaban poin demi poin!
MartyMacGyver
Saya melakukan hal yang sama - saya memberi nama semua arsitektur saya 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, behaviouralbenar-benar menyiratkan kode yang tidak mungkin atau tidak dimaksudkan untuk disintesis. Juga, saya selalu punya ide rtlnama 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.)
Carl
8

Berikut adalah tipe arsitekturnya:

Perilaku:

Catatan umum:

  • Secara tradisional tidak ada hirarki (hanya satu file, tidak ada komponen yang dipakai) meskipun ini bervariasi di antara alat-alat.
  • Sangat cepat disimulasikan.
  • Sinyal perilaku didefinisikan.
  • Ketika perilaku digunakan untuk simulasi hanya itu mungkin mengandung kode yang tidak dapat disintesis. Perilaku yang dimaksudkan untuk sintesis secara alami harus dapat disintesis.

Catatan khusus Xilinx

  • Umumnya model generator inti adalah file .vhd pra-sintesis

Struktural:

Definisi umum

  • Hanya instantiate komponen dan kabel mereka bersama-sama (hierarkis).
  • Lebih lambat untuk mensimulasikan daripada perilaku.
  • Tidak ada definisi perilaku sinyal nyata di tingkat atas.
  • Hanya kode yang dapat disintesis.

Xilinx catatan spesifik x

  • Model generator inti tidak memperhitungkan waktu.
  • Model generator inti umumnya instantiate netlist pasca-sintesis

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.

stanri
sumber
Terima kasih atas jawaban dan tipnya di buku ini (meskipun jelas ini barang yang sulit didapat).
MartyMacGyver
@ MartyMacGyver: yeah, saya biasanya hanya membaca versi google docs: P
stanri
Saya akan tetapi halaman itu sengaja hilang ...
MartyMacGyver
1

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.

apalopohapa
sumber
1
Terima kasih atas jawaban anda! Tema yang umum adalah bahwa desain pada umumnya tidak cocok dengan lubang arsitektur yang telah saya baca. Mudah-mudahan saya dapat menemukan contoh kanonik untuk memuaskan keingintahuan saya (agak pedantic) tentang masalah ini ... Jika saya akan menyimpang dari "ideal" Saya ingin setidaknya tahu seperti apa bentuk ideal.
MartyMacGyver