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:
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, Q
hanya berubah jika ada sisi yang naik pada RESET
atau CLK
(ini untuk reset aktif-tinggi). Jika Anda lupa sesuatu dalam daftar sensitivitas (yang harus berisi semua variabel sisi kanan tanpa posedge
atau negedge
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:
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 or
membingungkan karena and
tidak bisa bekerja di sana. Perhatikan juga penggantian 1'b0
( 0
bit tunggal ) dengan '0
(simbol yang meluas namun banyak 0
bit 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_ff
yang memerlukan konten untuk disintesis ke sandal jepit. Ada juga always_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!