Saya baru saja masuk ke FPGA, dan jika saya mengerti dengan benar, Anda menghubungkan gerbang logika bersama menggunakan kode. Jadi jika saya mendesain CPU di Verilog, itu harus menghubungkan beberapa gerbang logika bersama dan bekerja, tetapi bagaimana saya tahu seberapa cepat CPU DIY saya dapat berjalan? Apa itu tergantung?
fpga
cpu
homebrew-cpu
Uwe Keim
sumber
sumber
Jawaban:
Kecepatan desain dibatasi oleh beberapa hal. Yang terbesar kemungkinan besar adalah penundaan propagasi melalui logika kombinatorial dalam desain Anda, yang disebut jalur kritis . Jika Anda menggunakan FPGA cepat dan menulis HDL Anda dengan sangat hati-hati, Anda mungkin bisa menekan 700 MHz pada sesuatu seperti Virtex Ultrascale +. Pada FPGA ujung bawah, misalnya Spartan 6, angka yang masuk akal mungkin lebih seperti 250 MHz. Ini membutuhkan pipelining di mana-mana sehingga Anda memiliki jumlah minimum absolut dari logika kombinatorial antara komponen stateful (meminimalkan level logika), fan-out rendah (meminimalkan pemuatan pada elemen logika), dan tidak ada sarang tikus (jalur rute yang efisien).
Logika pabrikan dari FPGA yang berbeda akan memiliki parameter timing yang berbeda. FPGA yang lebih cepat dan lebih mahal akan memiliki penundaan yang lebih kecil dan sebagai hasilnya dapat mencapai frekuensi clock yang lebih tinggi dengan desain yang sama, atau menjalankan desain atau desain yang lebih kompleks dengan pipelining yang lebih sedikit pada frekuensi yang sama. Kinerja dalam proses tertentu dapat serupa - misalnya, Kintex Ultrascale dan Virtex Ultrascale dibuat pada proses yang sama dan memiliki penundaan sel dan perutean yang serupa. Tidak mungkin untuk mengatakan seberapa cepat desain yang diberikan tanpa menjalankannya melalui rantai alat dan melihat laporan waktu dari analisis waktu statis.
Ketika melakukan menjalankan toolchain untuk menentukan kecepatan jam maksimum, ingatlah bahwa alat tersebut digerakkan oleh pengaturan waktu: mereka akan berusaha memenuhi batasan waktu yang ditentukan. Jika tidak ada batasan waktu yang ditentukan, hasilnya bisa sangat buruk karena alat tidak akan mencoba untuk mengoptimalkan desain untuk kecepatan. Secara umum, alat harus dijalankan beberapa kali dengan batasan periode jam yang berbeda untuk menemukan berapa frekuensi clock maksimum yang dapat dicapai.
Jika Anda dapat mengoptimalkan desain Anda sehingga jalur kritis bukan batas, maka Anda akan menjalankan batasan dalam pembuatan dan distribusi jam (PLL, DCM, buffer jam, dan jaring jam global). Batas-batas ini dapat ditemukan di lembar data sebagian, tetapi mendekatinya dengan desain non-sepele sulit. Saya telah menjalankan barang-barang pada Virtex Ultrascale pada 500 MHz, tetapi ini hanya segelintir penghitung untuk memberikan sinyal pemicu ke komponen lain.
sumber
Anda mensintesis desain Anda dalam teknologi target (FPGA tertentu) dan membiarkan alat analisis pewaktuan statis memberi tahu Anda berapa periode jam minimum.
Atau, Anda menambahkan kendala pada desain di tempat pertama, dan kemudian alat akan memberi tahu Anda apakah mereka bertemu atau tidak.
sumber
Kecepatan yang akan dijalankan CPU Anda akan didasarkan pada penundaan flop-to-flop terpanjang dalam desain disintesis Anda. Flop-to-flop delay akan mencakup clock-to-Q, routing, logic / LUT, dan waktu setup flop. Ini ditambahkan bersama membentuk jalur kritis waktu Anda, yang dapat Anda periksa dalam output laporan waktu oleh alat tempat-dan-rute.
Ada seluruh disiplin ilmu desain yang dikhususkan untuk membuat arsitektur yang meminimalkan keterlambatan ini untuk mendapatkan hasil maksimal dari proses yang diberikan - perpipaan, eksekusi paralel, eksekusi spekulatif, dan sebagainya. Ini adalah tugas yang menarik dan melibatkan, memeras kinerja terakhir dari FPGA (atau dalam hal ini, ASIC.)
Yang mengatakan, vendor FPGA akan memberikan nilai kecepatan yang berbeda untuk bagian mereka, yang sesuai dengan tingkat MHz maks. Misalnya a -2 Xilinx Artix adalah bagian '250 MHz' yang secara kasar berbicara walaupun itu mampu menghasilkan kecepatan clock yang lebih tinggi untuk desain dengan jaringan pipa yang tinggi.
Saat Anda berinteraksi dengan sintesis FPGA dan alat place-and-route, Anda perlu memberikan batasan untuk desain Anda. Ini memberi tahu alat untuk mengalirkan penundaan flop-to-flop target yang ingin Anda capai. Dalam Quartus (Altera) dan Vivado (Xilinx) kendala ini menggunakan sintaks yang disebut SDC, yang merupakan singkatan dari Synopsys Design Constraints. SDC awalnya berasal dari dunia ASIC dan telah diadopsi oleh industri FPGA juga. Mengenal SDC - ini akan membantu Anda mendapatkan hasil yang Anda inginkan.
Altera dan Xilinx memiliki komunitas online untuk membantu dengan cara menggunakan sintaks SDC dan banyak topik lainnya.
Itu semua mengatakan, jika Anda peduli tentang kecepatan Anda harus mempertimbangkan FPGA yang memiliki makro keras CPU di dalamnya, seperti Zynq.
sumber
CPU tidak akan berjalan lebih cepat daripada jam global, sehingga akan menempatkan batas atas pada seberapa cepat itu bisa berjalan. Biasanya informasi tentang laju jam maks tercantum dalam lembar data FGPA.
sumber