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)?
sumber
if(condition)
ituwhen(condition)
. Sebagian besar IDE FPGA bahkan memiliki input desain grafis, seolah-olah Anda menggambarnya di atas kertas.Jawaban:
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.
sumber
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.
sumber
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.
sumber