Pemrograman FPGA, mulai dari mana

29

Saya seorang pengembang perangkat lunak (C, C ++, objektif-c, java ...) dan saya tertarik untuk belajar memprogram FPGA. Sekarang pertanyaannya mungkin terlihat sederhana bagi Anda, tetapi mohon luangkan waktu untuk membantu saya dalam hal ini karena saya agak macet sekarang. Perusahaan saya telah meminta saya untuk mengenal teknologi dan mengerjakan produk kisi. Pertanyaan saya adalah dari mana harus memulai? Setelah beberapa penelitian saya menemukan bahwa saya dapat memilih antara VHDL dan Verilog, saya tidak pernah menggunakan satupun dari mereka. Adakah spesialis yang dapat menyarankan saya di mana saya harus mulai? Belajar bahasa, mempelajari komponen perangkat keras dan kemudian produk kisi? Atau langsung mulai dengan produk Lattice (ketika saya membaca bahwa metode pemrograman sangat berbeda antara vendor FPGA)?

Anila
sumber
3
Jika Anda terbiasa dengan pemrograman C / C ++, maka Anda harus memilih Verilog , daripada VHDL. Sintaks Verilog mirip dengan C.
m .lin
1
@ m.Alin Saya baru memulai dan saya tahu, bahwa itu tidak masalah, jika terlihat seperti C, karena saya menemukan bahwa bagian yang paling sulit bukanlah sintaksis, tetapi perbedaan konsep. Semantiknya bahkan tidak dekat dengan semantik C.
Edgar Klerks
Perubahan terbesar yang saya temukan dari C / C ++ / Java / etc. adalah bahwa modul yang Anda tulis (setara dengan unit terjemahan) murni didorong oleh peristiwa. Dalam C, disederhanakan menjadi prinsip dasar, sebuah program yang dikompilasi akan menjalankan baris 1 dari kode Anda, kemudian baris 2, kemudian 3, lalu 4, dll. Tidak ada yang seperti itu di Verilog / VHDL, ini seperti menggambar sebuah gambar. : pin input ini terhubung ke module1_input, module1_output beralih status setiap kali module1_input menjadi tinggi. Alih-alih if(condition)itu when(condition). Sebagian besar IDE FPGA bahkan memiliki input desain grafis, seolah-olah Anda menggambarnya di atas kertas.
CharlieHanson

Jawaban:

40

Desain digital tidak memiliki banyak kesamaan dengan pengembangan perangkat lunak (mungkin kecuali bahwa sintaks Verilog terlihat sedikit seperti bahasa C tetapi hanya terlihat). Dengan demikian sangat sulit untuk menjawab pertanyaan jenis ini dengan cukup. Tapi sebagai orang yang berjalan dari pengembangan perangkat lunak ke desain perangkat keras saya akan mencobanya. Melihat ke belakang pada diri saya sendiri, inilah cara saya akan menasihati diri saya dulu jika saya tahu apa yang saya ketahui sekarang:

Mulai dari awal

Lupakan segala hal tentang pengembangan perangkat lunak. Terutama bahasa pemrograman. Prinsip-prinsip itu tidak berlaku dalam desain digital. Mungkin akan mudah bagi orang yang mendesain CPU untuk memprogramnya di assembler atau bahkan C, tetapi programmer assembler tidak akan bisa mendesain CPU.

Di jalur pembelajaran Anda, jangan cenderung untuk memecahkan apa yang tampaknya menjadi masalah mudah dengan pengetahuan Anda yang ada dari perangkat lunak. Salah satu contoh klasik adalah "untuk loop". Meskipun Anda dapat menulis untuk loop di, katakanlah, Verilog - ini melayani tujuan yang berbeda. Ini terutama digunakan untuk pembuatan kode. Ini mungkin juga untuk loop seperti yang dilihat oleh pengembang perangkat lunak, tetapi itu tidak akan baik untuk apa pun kecuali simulasi (yaitu Anda tidak akan dapat memprogram FPGA seperti itu).

Jadi untuk setiap tugas yang ingin Anda selesaikan, jangan berpikir Anda tahu bagaimana melakukannya, lakukan penelitian sebagai gantinya - periksa buku, contoh, tanyakan orang yang lebih berpengalaman dll.

Pelajari perangkat keras dan bahasa HDL

Bahasa HDL paling populer adalah Verilog dan VHDL. Ada juga vendor-spesifik seperti AHDL (Altera HDL). Karena bahasa-bahasa tersebut digunakan untuk menggambarkan komponen perangkat keras, mereka semua cukup banyak digunakan untuk mengekspresikan hal yang sama dalam mode yang sama tetapi dengan sintaks yang berbeda.

Beberapa orang merekomendasikan untuk belajar Verilog karena sepertinya C. Ya, sintaksnya adalah campuran dari C dan Ada tetapi itu tidak membuatnya mudah bagi pengembang perangkat lunak untuk bersandar. Bahkan, saya pikir itu bahkan dapat membuatnya lebih buruk karena akan ada godaan untuk menulis C di Verilog. Itu resep yang bagus untuk bersenang-senang.

Mengingat hal itu, saya akan merekomendasikan menatap dari VHDL. Meskipun Verilog juga OK selama hal di atas diperhitungkan.

Satu hal penting yang perlu diingat adalah bahwa Anda harus memahami apa yang Anda ungkapkan dengan bahasa itu. Jenis perangkat keras apa yang sedang "dijelaskan" dan bagaimana cara kerjanya.

Untuk alasan itu, saya sarankan Anda membeli buku elektronik secara umum dan buku bagus seperti ini - Desain HDL Chip (alias sebagai buku biru).

Dapatkan simulator

Sebelum Anda mulai melakukan sesuatu dalam perangkat keras dan menggunakan fitur khusus Vendor dll., Dapatkan sendiri simulator. Saya mulai dengan Verilog, dan menggunakan Icarus Verilog bersama dengan GTK Wave. Itu adalah proyek open-source gratis. Jalankan contoh yang Anda lihat di buku, berlatih dengan merancang sirkuit Anda sendiri untuk merasakannya.

Dapatkan papan pengembangan

Ketika Anda merasa ingin maju, dapatkan papan pengembangan. Jika Anda tahu bahwa majikan Anda ingin pergi dengan Lattice, dapatkan papan Lattice.

Metode pemrogramannya sangat mirip, tetapi ada detail yang berbeda. Misalnya, alat yang berbeda, opsi berbeda, antarmuka berbeda. Biasanya, jika Anda memiliki pengalaman dengan satu vendor, tidak sulit untuk beralih. Tetapi Anda mungkin ingin menghindari kurva belajar ekstra ini.

Saya juga memastikan bahwa papan dilengkapi dengan komponen yang Anda rencanakan untuk digunakan atau dapat diperpanjang. Misalnya, jika Anda ingin mendesain perangkat jaringan seperti router, pastikan papan memiliki Ethernet PHY atau dapat diperpanjang melalui, katakanlah, konektor HSMC, dll.

Papan biasanya dilengkapi dengan referensi, panduan pengguna, dan contoh desain yang bagus. Pelajarilah mereka.

Membaca buku-buku

Anda harus membaca buku. Dalam kasus saya, saya tidak punya teman yang tahu desain digital, dan situs ini juga tidak terlalu membantu karena satu hal sederhana - saya bahkan tidak tahu bagaimana mengungkapkan pertanyaan saya. Yang bisa saya pikirkan hanyalah "Uhm, teman-teman, ada hal dcfifo dan saya mendengar sesuatu tentang tantangan lintas domain jam, apa itu dan mengapa desain saya tidak berfungsi?".

Saya pribadi mulai dengan ini:

Vendor FPGA memiliki banyak buku masak dengan praktik terbaik. Pelajari mereka bersama dengan desain referensi. Sini ada satu dari Altera, misalnya.

Kembali dengan pertanyaan yang lebih spesifik

Saat Anda membaca buku-buku Anda, mensimulasikan desain, mengedipkan beberapa LED pada papan pengembangan Anda, Anda kemungkinan besar akan memiliki banyak pertanyaan. Pastikan Anda tidak melihat jawaban untuk mereka yang ada di halaman buku atau daring (yaitu di forum khusus Lattice) sebelum bertanya di sini.

pengguna8459
sumber
Terima kasih banyak untuk jawaban terperinci ini, sangat membantu saya melihat bagaimana saya bisa melanjutkan. Sayangnya saya tidak punya teman yang bisa membantu saya juga. Tapi Anda baru saja menyelamatkan saya dari banyak masalah dan sekali lagi terima kasih banyak !!!!
Anila
5
Jawaban yang sangat bagus.
Assad Ebrahim
Kembali di sekolah, kami belajar C ++ sebelum kami belajar VHDL. Sedang mengalami banyak kesulitan memahaminya tetapi titik ketika semuanya diklik adalah ketika saya mengerti bahwa semuanya terjadi secara real-time dan paralel (paralel, tidak asinkron seperti simpuljs). Pengembangan perangkat lunak mengikuti aliran berurutan, tetapi dalam HDL, semuanya terjadi sekaligus (sebagian besar waktu). Jika Anda memiliki sesuatu seperti "x = 1; y = 2; y = x; x = y", di SW, pada akhirnya y akan sama dengan 1, di HDL, Anda memiliki kondisi balapan karena x dan y akan mencoba untuk berubah menjadi satu sama lain pada saat yang sama. Ingat saja ini dan hidup mungkin lebih mudah bagi Anda.
PGT
@ PPG Anda harus mengharapkan nilai y menjadi sesuatu selain 1 jika 'y' dapat diakses oleh beberapa proses yang berjalan pada satu inti atau beberapa inti, yang dapat memaksakan otoritasnya pada proses yang lebih lemah.
Adithya
1

Sebagai alternatif, Anda dapat menggunakan beberapa teknik sintesis tingkat tinggi seperti Xilinx's Vivado HLS dan solusi OpenCL Altera. Mungkin ini akan mengurangi kurva Anda untuk mempelajari bahasa deskripsi perangkat keras, mengingat latar belakang perangkat lunak Anda.

Troore
sumber
-1

Pertama-tama pelajari dasar-dasar desain digital. Mesin Mealy / Moore, logika kombinatorial, tabel kebenaran, peta karnaugh dan sebagainya. Mulai membuat desain sederhana dalam skema (penghitung 7-segmen) dan kemudian pelajari HDL. Di Eropa VHDL digunakan, di AS Verilog. Akhirnya pengaturan waktu itu penting, perlu diketahui bahwa sinyal memiliki penundaan yang tergantung komponen instan dan suhu dan setiap sinyal memiliki penundaan lain.

Buku untuk dibaca: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

Pengetahuan sintaksis Perfect Language adalah untuk nanti, pahami dulu desain digital dan masalahnya.

Robin
sumber
Di Eropa VHDL digunakan, di AS Verilog. Sama sekali tidak benar ...
Matt Young
Memang, saya belajar Verilog dan saya dari Inggris. Ini juga bahasa yang diajarkan di salah satu modul yang saya lakukan di uni (juga di Inggris).
Tom Carpenter