Di tempat saya bekerja ada dua kubu desainer FPGA. Satu kubu yang saya sebut mensimulasikan, mensimulasikan, mensimulasikan atau potong dadu. Kamp lainnya adalah tentang desain.
Orang-orang yang dipotong dadu menggunakan simulator seperti modelsim, mereka akan datang dengan desain awal melalui metode pengkodean dan \ atau blok di suite desain. Kemudian mereka akan mensimulasikan dan menemukan hal-hal yang tidak berfungsi, kemudian mengubah kodenya. Proses ini diulang beberapa kali sampai mereka datang dengan desain yang berhasil.
Kamp desain (yang saya sukai) akan merancang bentuk gelombang di atas kertas (atau kertas digital seperti visio), persis apa yang diperlukan. Kemudian muncul dengan diagram logika. Ini adalah proses mendokumentasikan diri. Kemudian diagram diterjemahkan ke kode (kode dan diagram adalah 1: 1 jika ada sesuatu dalam diagram, ada proses untuk itu dalam kode). Kemudian disimulasikan, dan gelombang simulasi dibandingkan dengan bentuk gelombang yang dirancang di atas kertas, dan diharapkan akan sama.
Saya akhirnya melakukan keduanya, kadang-kadang saya akan masuk ke mode potong dadu, dan itu tidak terlalu menyenangkan. Saya menemukan bahwa saya kadang-kadang kehilangan tujuan. Sebagai contoh, saya akan mengubah keadaan di mesin negara, dan perubahan akan beriak ke keadaan berikutnya, maka saya harus memperbaikinya. Saya akhirnya menghabiskan lebih banyak waktu daripada memikirkannya.
Di kamp mana Anda lebih suka berada? Saya pikir perlu ada desain yang ketat, lakukan apa yang cocok untuk Anda, tapi saya pikir semakin rinci dan ketat Anda dalam mendesain, semakin sedikit masalah yang akan Anda miliki dalam jangka panjang. Saya memberikan beberapa contoh tentang apa yang mungkin, mereka mungkin tidak cocok dengan struktur organisasi tempat kerja Anda. Alasan mengapa detail desain dan perencanaan yang cermat sangat berguna, apakah itu memaksa Anda untuk memikirkan apa yang Anda lakukan. Itu membuatnya mudah untuk di-debug. Kembangkan alur kerja desain yang memungkinkan ini terjadi. Selain itu, biasakan diri Anda dengan alat simulasi dan tulis testbench yang baik yang akan menguji semua kondisi yang mungkin dialami oleh perangkat yang disimulasikan. Ini tentu saja perlu diseimbangkan dengan waktu. Misalnya, tulis kode ADC HDL yang akan mensimulasikan perangkat dalam simulasi Anda.
Alat yang paling berharga untuk dimiliki dalam desain FPGA (menurut saya) adalah prosedur pengujian yang baik yang akan memungkinkan Anda untuk sepenuhnya menguji desain Anda dan menjalankannya melalui langkah-langkahnya. Desain FPGA tidak dapat diharapkan "hanya berfungsi", dibutuhkan upaya untuk memastikan semua bagian bekerja. Jika Anda menemukan kesalahan, maka kembali ke simulasi dan desain dan pelajari perbedaan antara FPGA dan RTL yang disimulasikan. Itu terutama datang dengan pengalaman, tetapi jika desain bekerja dalam simulasi tetapi tidak dalam perangkat keras maka Anda perlu mencari tahu mengapa ada perbedaan.
Beberapa hal penting yang saya pelajari:
1) Bersihkan input Anda, jam dan rangkaian reset harus bersih atau Anda dapat menyebarkan metastablity melalui sistem Anda. Ketahui apa itu sinkronisasi peringkat ganda. Ada banyak topologi yang berbeda untuk rangkaian reset, tahu cara menggunakannya (ada artikel bagus di web, saya tidak memilikinya di tangan).
2) Dapatkan persyaratan desain di depan dan kemudian desain di sekitar itu. Jika orang-orang di sekitar Anda tidak memberi Anda persyaratan yang pasti, maka buat sendiri beberapa di antaranya.
3) Matlab fixed point toolbox sangat bagus untuk mensimulasikan sistem kontrol dan aplikasi DSP, tetapi Anda mungkin tidak memiliki akses ke sana. Ini cara yang bagus untuk membuktikan desain sebelum kode Anda.
4) Desain didahulukan, kemudian coding, lalu disimulasikan.
5) Sangat diketik, juga menjaga nama sinyal konsisten pada skematik pcb dan hdl. (ini juga mengapa saya lebih suka VHDL daripada Verilog.