Baru-baru ini saya melakukan perjalanan panjang desain logika otodidak. Produk akhir dari ini adalah CPU 16 bit fungsional yang bekerja persis seperti yang dirancang dalam simulator . Sekarang saya baru saja mulai melihat kemungkinan memasukkannya ke silikon dengan FPGA. Saya tahu bahwa saya harus membuat banyak penyesuaian di arena input / output (dunia nyata berbeda dengan lingkungan simulasi) dan telah menemukan bahwa saya melakukan desain sepenuhnya dalam program yang tidak mengekspor netlist atau kode HDL jadi semua yang saya miliki adalah skema.
Tapi, dengan asumsi saya entah bagaimana sampai ke titik di mana saya memiliki netlist atau kode HDL dari desain saya, apa langkah saya selanjutnya untuk membuatnya menjadi silikon? Sejauh ini dari yang saya baca, sepertinya FPGA adalah solusi saya, tetapi melihat situs web Xilinx dan Altera membuat kepala saya berputar. Apakah saya menggonggong pohon yang salah? Pada dasarnya, saya mencari deskripsi bahasa Inggris yang sederhana tentang apa langkah selanjutnya untuk seorang pria dengan skema fungsional CPU. Begitu saya tahu ke mana harus pergi, saya bisa memecahkan buku-buku dan mencari tahu semua yang saya perlu tahu tentang bagaimana menuju ke sana. Juga catatan, saya menggunakan Mac OS X tetapi saya memiliki kotak XP Window yang bisa saya pasang jika saya benar-benar harus.
Jawaban:
Selamat atas desain CPU Anda. Ya, FPGA jelas merupakan langkah Anda selanjutnya. Tetapi Anda tidak begitu jelas apa yang membuat kepala Anda berputar. Saya kira itu adalah sejumlah besar perangkat yang berbeda yang ditawarkan. Anda juga tidak mengatakan simulator apa yang Anda gunakan.
Ketika Anda mensintesis desain, synthesizer harus memberi Anda laporan tentang sumber daya yang digunakan , seperti jumlah gerbang dan RAM. Ini akan memberi Anda gambaran bagian apa yang cocok untuk desain Anda. Pastikan Anda memiliki ruang kepala yang cukup . Pilih bagian yang memiliki beberapa RAM tambahan , yang Anda perlukan untuk menjalankan program pada CPU Anda.
sunting (berikan komentar
Anda ) Anda memerlukan sistem pengembangan untuk pabrikan tertentu. Altera dan Xilinx adalah pemain besar, dan keduanya memiliki orang percaya mereka. Yang mana yang Anda pilih tidak begitu penting, keduanya memiliki bagian yang cukup berbeda untuk memenuhi kebutuhan Anda.
Jika Anda memilih untuk Xilinx, ia memiliki Perangkat Lunak Desain ISE WebPACK , yang gratis (unduhan besar pada 3,4GB). Keterbatasan dibandingkan dengan versi yang lebih maju dari perangkat lunak seharusnya tidak mengganggu Anda saat ini.
Selanjutnya Anda membutuhkan papan pengembangan. Anda harus memiliki gagasan tentang FPGA apa yang harus Anda pilih. Jika Anda memilih Xilinx, saya akan memilih Spartan, mungkin Spartan-6, Virtex sudah IMO terlalu high-end. Masih banyak pilihan juga, terutama berbeda dalam tambahan di papan tulis. Anda akan menginginkan papan dengan sedikit lebih dari beberapa sakelar dan LED. Saya akan mencari konektor keyboard, dan modul tampilan.
Xilinx memiliki sejumlah papan, dan untuk Xilinx FPGA ada juga Digilent , Avnet , Xess dan banyak lainnya.
Jadi, bandingkan sejumlah papan (harga juga akan berperan, saya kira) dan unduh perangkat lunak pengembangan untuk FPGA yang Anda rencanakan untuk digunakan. Sintesis desain Anda untuk memverifikasi bahwa itu akan cocok dengan FPGA yang dipilih, dan kemudian Anda siap untuk membeli papan di sekitar FPGA ini.
Saya lupa memberi tahu sedikit tentang FPGA. FPGA pada dasarnya adalah kumpulan besar gerbang dengan koneksi yang dapat diprogram di antara mereka, sehingga Anda dapat membuat hampir semua fungsi / sistem logika dengannya. Selama beberapa generasi, FPGA menjadi lebih maju dan sekarang telah mengoptimalkan blok untuk menciptakan fungsi yang efisien seperti RAM. Synthesizer perangkat lunak pengembangan Anda menciptakan diagram koneksi antara gerbang. Ini tidak disimpan secara permanen di FPGA, tetapi harus dimuat saat power-up dari memori Flash konfigurasi eksternal. Di situlah desain Anda akan disimpan. Seperti memori Flash lainnya, memori ini dapat dihapus dan ditulis ulang berkali-kali.
sumber
Saya tidak terbiasa dengan alat-alat Xilinx, tapi saya dengan alat Altera, jadi saya akan memberi tahu Anda tentang alat-alat itu. Xilinx dan yang lainnya seharusnya tidak terlalu berbeda.
Verilog
Hal pertama yang perlu Anda lakukan adalah mempelajari Verilog . Ini akan membuat kepala Anda sakit karena Verilog (dan VHDL yang agak mirip) pertama kali dirancang sebagai bahasa simulasi , dan banyak konstruksi (seperti
#5
yang berarti "tunggu 5 langkah waktu", langkah waktu biasanya menjadi nanodetik). Jadi ada banyak batasan yang harus Anda ingat untuk membuat kode Verilog Anda dapat disintesis , yaitu dikompilasi ke dalam bitstream untuk FPGA.Namun, kejutan terbesar adalah apa yang Anda tulis di Verilog (dan VHDL) adalah perilaku yang Anda harapkan dari sistem , dan kompiler menyimpulkan logika yang tepat dari deskripsi Anda. Jika Anda tidak hati-hati, Anda bisa mendapatkan banyak bug jahat dari ini.
Misalnya, D flip-flop terlihat seperti:
Ini menjelaskan cara kerja DFF, dan kompiler harus menganalisisnya dan mencari tahu Anda menginginkan DFF. Ini
@(...)
disebut daftar sensitivitas , yang merupakan daftar sinyal yang memicu evaluasi ulang blok kode; dengan demikian, di blok ini,Q
hanya berubah jika ada sisi yang naik padaRESET
atauCLK
(ini untuk reset aktif-tinggi). Jika Anda lupa sesuatu dalam daftar sensitivitas (yang harus berisi semua variabel sisi kanan tanpaposedge
ataunegedge
pengubah untuk blok logika kombinasional) kompiler akan mensintesis kait yang diperlukan daripada memanggil kesalahan. Gila, tapi begitulah, karena Verilog awalnya adalah bahasa simulasi yang menyembunyikan (dan karenanya tidak memerlukan) detail implementasi. VHDL adalah sama tetapi jauh lebih bertele-tele.Akhirnya, versi baru Verilog bernama SystemVerilog dirilis beberapa tahun yang lalu yang membuat penulisan kode yang dapat disintesis jauh lebih mudah . Jika memungkinkan, pelajari bahasa ini, karena Xilinx ISE dan Altera Quartus II mendukungnya. Masalah utama adalah kurangnya bahan referensi yang baik.
Versi SystemVerilog dari DFF membersihkan beberapa hal kecil:
Perhatikan bahwa sinyal dalam daftar sensitivitas dipisahkan oleh koma. Ini karena
or
membingungkan karenaand
tidak bisa bekerja di sana. Perhatikan juga penggantian1'b0
(0
bit tunggal ) dengan'0
(simbol yang meluas namun banyak0
bit diperlukan berdasarkan apa yang ditugaskan; jauh lebih fleksibel dengan modul parameter). Akhirnya, perhatikan penggantianalways
(yang dapat digunakan untuk apa pun; logika kombinasional, kait, dan sandal jepit)always_ff
yang memerlukan konten untuk disintesis ke sandal jepit. Ada jugaalways_comb
yang menghilangkan daftar sensitivitas, karena itu hanya bekerja dengan sensitivitas dari input ke blok.Perangkat lunak desain Altera disebut Quartus II, dan Anda akan mencari Edisi Web . (Edisi berlangganan agak mahal dan hanya diperlukan untuk model FPGA tercepat atau terbaru.)
Bagian yang menyedihkan adalah bahwa saya belum menemukan buku yang bagus tentang masalah ini. Apa yang saya pelajari saya dapatkan dengan menyatukan berbagai hal dari berbagai sumber, seperti buku Verilog yang tidak berhasil memberi tahu Anda apa yang dapat disintesis dan mana yang tidak, dan contoh kode. Quartus II memiliki perintah "sisipkan templat" yang menyisipkan kode templat untuk beberapa struktur umum, dari D flip-flop ke mesin negara.
Perangkat Keras Demo
Setelah Anda mengimplementasikan prosesor Anda di Verilog, Anda harus membuatnya. Untuk saat ini, biarkan Quartus memilih chip (Anda harus memilih keluarga; Saya akan merekomendasikan Cyclone IV) dan pinouts. Setelah biuld, Anda akan tahu berapa banyak chip yang Anda butuhkan. Ini akan memberi tahu Anda berapa banyak elemen logika, sandal jepit, bit RAM, dll yang Anda gunakan. Pastikan Anda tidak lebih dari 50% di salah satu dari mereka; Jika ya, lihat chip yang dipilih kompiler dan pilih secara manual chip yang lebih besar (dalam elemen logika) yang memiliki pin paling sedikit, dan ulangi sampai Anda mendapatkan utilisasi di bawah 50%.
Kemudian pergi berbelanja untuk papan demo yang memiliki chip setidaknya sebesar yang Anda akhirnya buat. Periksa untuk melihat bahwa ia memiliki periferal dan / atau konektor I / O yang Anda perlukan. Bukan hal yang aneh untuk membuat kartu anak yang dihubungkan ke konektor ekspansi untuk menyediakan perangkat keras yang hilang.
Sekarang setelah Anda memilih perangkat keras Anda, cari pinout yang sebenarnya dan gunakan Pin Planner untuk menaruh sinyal yang tepat pada pin yang tepat. Papan demo akan memiliki panduan pengguna yang memberi tahu Anda pin mana yang disambungkan ke perangkat atau pin konektor apa di papan demo.
Setelah Anda mengatur pinout, bangun kembali sehingga menggunakan pin yang Anda inginkan. Ingatlah bahwa beberapa sinyal seperti jam sistem akan memerlukan pin input khusus (sehingga mereka mengarahkan langsung ke PLL internal).
Gunakan programmer untuk mengunduh desain Anda langsung ke FPGA (register geser yang saya sebutkan beberapa waktu lalu). Sekarang Anda berada dalam siklus debug-edit-kompilasi-lari akrab. Kocok sampai berhasil.
Setelah berfungsi, Anda dapat menggunakan programmer untuk mengunduh kode ke perangkat konfigurasi onboard, sehingga program Anda akan memuat dan berjalan saat dihidupkan.
Ini cukup lama, dan saya harap ini membantu. Ada banyak yang harus dipelajari; tidak seperti mempelajari bahasa pemrograman baru seperti halnya mempelajari paradigma pemrograman baru, misalnya beralih dari bahasa prosedural ke bahasa fungsional. Verilog adalah bahasa simultan; sebagian besar kode selalu dieksekusi.
Semoga berhasil!
sumber
Z:= A & (B # C); Z.ar = C & D;
tanpa harus khawatir tentang daftar sensitivitas dan semacamnya).Ya, FPGA hampir pasti merupakan solusi Anda!
Anda hampir pasti akan perlu menggunakan salah satu bahasa deskripsi perangkat keras, atau masukkan kembali skema Anda menjadi alat yang berbeda. Saya akan merekomendasikan terhadap pendekatan skematis sebagai
Setelah Anda menulis HDL, selama Anda tidak secara langsung memasukkan hal-hal dari perpustakaan vendor menggunakan berbagai "penyihir IP" mereka atau dengan langsung menempelkan komponen dari pustaka mereka, Anda akan memiliki kode yang dapat Anda porting ke chip lain secara adil mudah (lebih dari itu misalnya porting C IME tertanam)
Selain itu, Anda memiliki lingkungan pengujian dan validasi yang jauh lebih baik karena Anda dapat menulis tes yang "memahami" fungsi Anda dan dapat memeriksa hasilnya untuk Anda, daripada menatap bentuk gelombang untuk melihat apakah semuanya terlihat OK.
2 HDL besar adalah VHDL dan Verilog. Anda mungkin ingin membaca jawaban ini tentang bagaimana mereka berbeda ...
VHDL atau Verilog?
Saya juga akan mengatakan bahwa MyHDL juga patut dilihat jika Anda sudah tahu Python - memberi Anda kemampuan verifikasi yang sangat besar, tetapi masih sebagian besar kontrol level rendah yang diberikan oleh HDL "normal".
Setelah Anda memilih HDL, dan kemudian membuatnya bekerja (lagi, maaf!) Dalam simulasi Anda kemudian akan berada dalam keadaan di mana Anda dapat mendorongnya melalui alat vendor dan mempelajari potongan besar tugas berikutnya - setelah itu mensimulasikan benar, selalu ada lebih banyak usaha daripada yang Anda pikirkan untuk disintesis :)
Jika Anda terikat dengan skema dan bisa mendapatkan lisensi, LabviewFPGA mungkin cocok untuk Anda.
sumber
Dapatkan salinan Rapid Prototyping of Digital Systems oleh Hamblen et al:
http://users.ece.gatech.edu/~hamblen/book/bookte.htm
Ini terutama menggunakan VHDL, yang saya lebih suka Verilog.
Ini termasuk CPU 8-bit yang sangat sederhana, uP3, yang saya implementasikan pada perangkat keras Altera FLEX 10K saya sendiri beberapa tahun yang lalu, menggunakan edisi buku sebelumnya. Saya akan port ke papan $ 25 Cyclone II ini ketika saya mendapatkan "panel depan" PCB saya dibuat. Ini juga termasuk prosesor MIPS dan Altera NIOS II. Anda dapat mengerjakan latihan uP3 dalam buku ini dengan alat Altera Quartus II gratis, menulis ulang kode CPU Anda dalam VHDL, dan membuatnya bekerja pada papan Cyclone II. Sebagai alternatif, Quartus II memiliki entri skematis, dan Anda harus dapat memasukkan skematis Anda secara langsung, mensimulasikannya, dan menjalankannya di Cyclone II.
sumber
Jika kesulitannya adalah kurva belajar yang curam dengan keterampilan alat, maka ikuti jalur termudah. Actel (sekarang Microsemi) memiliki Libero , paket alat FPGA yang membutuhkan nol pembacaan dan mudah untuk mulai menggunakan: segera setelah Anda menginstalnya. Anda benar-benar dapat membuat skema di sana dengan tangan dan dengan beberapa klik memilikinya diunggah ke FPGA fisik, layar pada cara melakukannya sangat jelas.
sumber
Jika Anda memilih untuk belajar HDL, di mana Anda berada dapat mempengaruhi mana bahasa yang lebih baik. Di Eropa, VHDL lebih populer. Di AS, Verilog lebih populer, kecuali untuk industri pertahanan yang VHDL. (Departemen Pertahanan AS awalnya menciptakan VHDL) Itu hanya berarti bahwa orang-orang di dekat Anda mungkin lebih mampu membantu dalam satu bahasa atau lainnya. Tetapi jika Anda mencari bantuan online, maka itu mungkin tidak relevan.
Buku lain yang perlu dipertimbangkan adalah Rapid Prototyping of Digital Systems: SOPC Edition yang mengacu pada papan DE1 dan DE2 Altera . Sudah ada beberapa komputer yang berbeda porting ke DE1 dan DE2, untuk memberi Anda ide bagaimana mereka bekerja. Minimigtg68 (Amiga), FpgaGen (Sega Genesis), dll. Porting ke papan ini untuk melihat contoh.
Jika Anda menggunakan Xilinx, ada dua buku yang saya masuki sekarang. FPGA Prototyping Dengan Verilog Contoh: Versi Xilinx Spartan-3 FPGA Prototyping oleh VHDL Contoh: Versi Xilinx Spartan-3 Meskipun saya tidak tahu papan khusus untuk merekomendasikan ini. Saya senang dengan papan mudah-mudahan segera hadir, FPGA Arcade tapi saya lupa apakah itu akan memiliki Xilinx atau sesuatu yang lain.
sumber
Menemukan varian ini yang mengembangkan Logisim lebih jauh, yang sekarang disebut Logisim Evolution. Mereka mengimplementasikan fitur untuk mengekspor ke VHDL dari skema rangkaian logika yang dibangun dalam logisim.
Itu dapat ditemukan di sini: https://github.com/reds-heig/logisim-evolution
Mengetahui pertanyaan ini sudah lama, tetapi membantu saya, dan berharap itu membantu orang lain.
sumber