Cara mendapatkan desain prosesor ke FPGA

20

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.

Rory O'Hare
sumber
Program apa yang tidak Anda lakukan desain Anda dalam? Mungkin ada konverter pihak ke-3 di luar sana.
Connor Wolf

Jawaban:

17

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.

stevenvh
sumber
Saya menggunakan Logisim, yang fantastis untuk skema, tetapi tidak memiliki metode menghasilkan apa pun selain gambar (png, jpeg, dll.). Pada kebingungan FPGA yang saya miliki, sebagiannya adalah masalah sejumlah besar perangkat, tetapi juga saya tidak menemukan sumber daya yang menjelaskan dasar-dasar dan dasar-dasar. Jika saya meletakkan CPU saya di sana, bagaimana cara berinteraksi dengan dunia luar? Peralatan apa yang saya butuhkan? Bisakah saya memprogram ulang FPGA berulang kali? dll. dll. Ini benar-benar hanya kurangnya pengetahuan tentang subjek. Saya kira saya perlu panduan pemula, tetapi tidak menemukannya di mana pun.
Rory O'Hare
2
Pertanyaan Anda, dalam urutan: 1) Antarmuka FPGA dengan dunia luar melalui pin I / O. Perbedaannya adalah Anda dapat memilih pin, tidak seperti chip khusus. 2) Anda bisa mulai dengan starter kit, development kit, atau sejenisnya. Ini akan memiliki FPGA, beberapa konektor untuk I / O, dan catu daya on board. Sebagian besar juga termasuk programmer; jika seseorang tidak lupa untuk mendapatkannya. 3) Ya, Anda dapat memprogram ulang FPGA. Program ini disimpan dalam chip yang pada dasarnya adalah register geser raksasa. Saat startup, mesin keadaan khusus atau sumber eksternal memuatnya ke dalam chip.
Mike DeSimone
9

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 #5yang 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:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

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, Qhanya berubah jika ada sisi yang naik pada RESETatau CLK(ini untuk reset aktif-tinggi). Jika Anda lupa sesuatu dalam daftar sensitivitas (yang harus berisi semua variabel sisi kanan tanpa posedgeatau negedgepengubah 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:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Perhatikan bahwa sinyal dalam daftar sensitivitas dipisahkan oleh koma. Ini karena ormembingungkan karena andtidak bisa bekerja di sana. Perhatikan juga penggantian 1'b0( 0bit tunggal ) dengan '0(simbol yang meluas namun banyak 0bit diperlukan berdasarkan apa yang ditugaskan; jauh lebih fleksibel dengan modul parameter). Akhirnya, perhatikan penggantian always(yang dapat digunakan untuk apa pun; logika kombinasional, kait, dan sandal jepit) always_ffyang memerlukan konten untuk disintesis ke sandal jepit. Ada juga always_combyang 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!

Mike DeSimone
sumber
Hebat, ini sangat membantu. Hanya untuk memeriksa satu hal, saya sudah mendengar tentang penangkapan skematis. Apakah itu alternatif yang layak untuk belajar Verilog? Saya akan mempelajarinya jika saya harus, tetapi jika itu tidak 100% diperlukan saya lebih suka tidak menambahkannya ke daftar besar hal-hal yang sudah saya butuhkan untuk mencari tahu. Terimakasih banyak.
Rory O'Hare
Jujur saja, tidak juga. Satu masalah besar adalah bahwa Anda berada di bawah kekuasaan program tangkap skematis: jika itu mengambil skema Anda dan menghasilkan Verilog yang salah, apa yang dapat Anda lakukan? Sedangkan menulis Verilog akan memberi Anda otoritas yang diperlukan untuk memperbaiki semua bug. Namun, alasan besarnya adalah bahwa ada hal-hal yang tidak akan pernah dapat ditangkap oleh skematik seperti halnya Verilog: Modul yang diparameterisasi dan penggabungan dan penggabungan bus adalah hal-hal yang langsung terlintas dalam pikiran.
Mike DeSimone
1
Apakah ada alat yang dapat mengubah bahasa "perangkat keras deskriptif" menjadi Verilog atau VHDL (misalnya jika saya ingin net Z menjadi flip flop yang input datanya merupakan kombinasi dari A, B, dan C, yang secara asinkron diatur ulang sementara C dan D benar, alangkah baiknya bisa mengatakan sesuatu seperti Z:= A & (B # C); Z.ar = C & D;tanpa harus khawatir tentang daftar sensitivitas dan semacamnya).
supercat
Altera Quartus memungkinkan Anda memasukkan desain Anda sebagai skema atau AHDL (VHDL versi Altera), atau kombinasi apa pun daripadanya, mungkin termasuk HDL lain. (menjadi kuno, saya terutama menggunakan entri skematis untuk proyek CPLD dan FPGA saya, dengan sedikit AHDL.)
Peter Bennett
Untuk lebih jelasnya, AHDL bukan versi VHDL. Baik VHDL dan Verilog adalah bahasa inferensi , di mana kode Anda menjelaskan perilaku rangkaian yang diinginkan, dan kompiler harus menyimpulkan implementasi dari deskripsi perilaku itu. Ini adalah warisan fakta bahwa keduanya dimulai sebagai bahasa simulasi dan digunakan kembali untuk sintesis. AHDL adalah bahasa deklaratif , di mana Anda menyatakan primitif (misalnya flip-flop, tabel kebenaran), dan bagaimana mereka terhubung, sehingga kompiler tidak perlu menebak. AHDL tanggal kembali ke 80-an dan jauh lebih dekat dengan ABEL.
Mike DeSimone
5

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

  1. vendor alat FPGA tidak benar-benar mendukung mereka dengan baik
  2. Ini non-portabel

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.

Martin Thompson
sumber
3

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.

Leon Heller
sumber
1

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.

dext0rb
sumber
0

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.

billt
sumber
0

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.

LaptonSpark
sumber