CPU FPGA, bagaimana menemukan kecepatan maks?


14

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?


12
@ KingDuken Saya ingin tahu tentang alternatif Verilog untuk merancang sesuatu seperti CPU yang ada dalam pikiran Anda (bukan VHDL saya kira :))?
Eugene Sh.

1
@ KingDuken Itu bukan masalah yang saya alami, saya sudah membuat CPU saya dan arsitekturnya di papan tempat memotong roti dan ingin port ke FPGA. Pertanyaan saya adalah, bagaimana saya bisa menghitung berapa frekuensi clock maksimum untuk CPU saya, berapa batasnya?

4
Anda mungkin ingin google "analisis waktu statis"
The Photon

14
@ KingDuken Sebagai seseorang yang telah merancang dua CPU, tidak terlalu memakan waktu. Anda dapat memiliki prosesor yang berfungsi dalam 1-2 bulan, jika Anda tahu apa yang Anda lakukan.
user110971

2
@KingDuken Fakta menyenangkan: Sun / Oracle telah merilis kode sumber Verilog ke prosesor UltraSPARC T1 dan T2 mereka. Saya kebetulan melihat beberapa orang secara langsung, dan mereka semua bekerja. FYI, mereka bahkan pergi untuk memenangkan SPECint_rate2006! : D Itu jelas menunjukkan betapa mustahilnya mendesain CPU di Verilog atau HDL lainnya. Saya telah melakukannya sendiri beberapa kali sebagai hobi, dan itu benar-benar bukan sesuatu yang mustahil (sekali Anda grok, seperti biasa)
Richard the Spacecat

Jawaban:


29

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.


22

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.


Apa yang menyebabkan kendala tidak terpenuhi? Apa yang membatasi periode jam? Apakah ini tergantung pada FPGA yang saya gunakan atau apakah itu sama untuk seluruh keluarga FPGA? (Atau mungkin untuk setiap FPGA yang ada?)

3
Itu tergantung pada kecepatan FPGA, dan seberapa banyak logika kombinatorial yang Anda tempatkan di antara FF dalam desain Anda.
Dave Tweed

9
@ appmaker1358, sudahkah Anda mencoba membaca datasheet untuk FPGA? Peringkat kecepatan adalah salah satu parameter terpenting yang dipanggil dalam lembar data.
The Photon

2
Kecepatan akan dibatasi oleh jalur waktu terlama, yang akan menjadi penundaan propagasi terpanjang melalui logika dan routing antara dua elemen stateful (sandal jepit, RAM, dll). FPGA yang berbeda akan memiliki parameter pengaturan waktu yang berbeda dan karenanya desain akan mencapai kecepatan yang berbeda pada FPGA yang berbeda. Ada beberapa bagian dari FPGA yang dibatasi frekuensinya - komponen distribusi jam dan PLL biasanya memiliki batasan, tetapi sulit untuk menulis HDL yang mendekati mereka untuk desain non-sepele.
alex.forencich

3
Selain itu, Anda selalu perlu menambahkan batasan waktu. Penempatan dan perutean mempertimbangkan kendala dan berupaya untuk memenuhinya. Jika Anda tidak menambahkan kendala, alat tidak akan berusaha sangat keras dan Anda tidak akan mendapatkan angka yang sangat optimis.
alex.forencich

13

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.


-2

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.