Apa yang terjadi ketika FPGA "diprogram"?

13

Dari apa yang saya mengerti, proses pemrograman FPGA terdiri dari dua bagian:

  1. Encode deskripsi perangkat keras ke dalam bit yang dapat dimengerti oleh FPGA (mis. Tulis beberapa HDL dan kompilasi)
  2. Muat HDL yang dikompilasi ke dalam FPGA.

Pertanyaan saya adalah: "Apa yang dilakukan FPGA dengan HDL yang dikompilasi?". Saat ini, saya menganggap FPGA sebagai "perangkat keras yang dapat dicetak", di mana kabel dan gerbang logika dapat dibentuk untuk apa pun yang Anda inginkan. Salah satu hal yang menyenangkan adalah bahwa kemampuan cetaknya permanen: FPGA dapat diprogram ulang.

Bagaimana cara FPGA menafsirkan HDL yang dikompilasi? Bagaimana mouldabilitas permanen dapat tercapai?

Randomblue
sumber
4
Ini sebenarnya tidak permanen - bitstream FPGA harus dimuat ulang dari EEPROM setiap kali daya diterapkan. CPLD tidak memiliki masalah ini, dan beberapa FPGA memiliki EEPROM bawaan yang memuat bitstream mereka di setiap powerup.
AngryEE
2
Saya pikir maksudnya "kelapalan adalah permanen" yaitu bahwa program itu sendiri tidak permanen.
ajs410

Jawaban:

23

Menilai dengan pertanyaan Anda yang lain, Anda adalah seorang pria Xilinx. Jadi saya sangat menyarankan untuk mendapatkan lembar data untuk chip Xilinx Anda dan pergi ke bab Deskripsi Fungsional. Untuk chip Spartan 3 yang saya gunakan, membaca 42 halaman itu menyenangkan. Ini merinci komponen apa yang ada di dalam FPGA - IOB, CLBs, slice, LUTs, Block RAM, Multipliers, Digital Clock Manager, Clock Network, Interconnect, dan beberapa informasi konfigurasi yang sangat mendasar. Anda perlu memahami informasi ini jika Anda ingin tahu seperti apa "HDL yang dikompilasi".

Setelah Anda terbiasa dengan arsitektur FPGA Anda, maka Anda dapat memahami proses ini. Pertama, desain HDL Anda dijalankan melalui mesin sintesis, yang mengubah HDL Anda menjadi RTL. Kemudian Mapper memproses hasil dari Sintesis, "memetakan" mereka ke potongan-potongan arsitektur FPGA yang tersedia. Kemudian Router melakukan Place and Route (PAR), yang mencari tahu kemana potongan-potongan itu pergi dan bagaimana menghubungkannya. Akhirnya, hasil dari PAR diubah menjadi file BIT. Biasanya file BIT ini kemudian ditransformasikan dalam beberapa cara sehingga dapat dimuat ke dalam chip Flash, sehingga FPGA dapat diprogram secara otomatis saat dinyalakan.

File bit ini menjelaskan seluruh program FPGA. Sebagai contoh, CLBs dalam Spartan 3 terdiri dari irisan, yang terdiri dari LUT, yang hanya 16-address SRAM 1-bit. Jadi satu hal yang akan berisi file BIT adalah data apa yang masuk ke setiap alamat SRAM. Hal lain yang terdapat pada file BIT adalah bagaimana setiap input LUT ditransfer ke matriks koneksi. File BIT juga akan berisi nilai awal yang masuk ke dalam blok RAM. Ini akan menjelaskan apa yang terhubung ke pin set dan reset dari setiap flip flop di setiap slice. Ini akan menjelaskan bagaimana rantai pembawa terhubung. Ini akan menjelaskan antarmuka logika untuk setiap IOB (LVTTL, LVCMOS, LVDS, dll). Ini akan menjelaskan resistor pull-up atau pull-down terintegrasi. Pada dasarnya semuanya.

Untuk Xilinx, memori FPGA dihapus ketika konfigurasi dimulai (yaitu PROG_B dinyatakan). Setelah memori jelas, INIT_B menjadi tinggi untuk menunjukkan bahwa fase telah selesai. File BIT kemudian dimuat, baik melalui JTAG atau antarmuka chip Flash. Setelah program dimuat, Global Set / Reset (GSR) berdenyut, mengatur ulang semua sandal jepit ke kondisi awal. Pin DONE kemudian menjadi tinggi, untuk menunjukkan bahwa konfigurasi telah selesai. Tepat satu siklus jam kemudian, sinyal Global Three-State (GTS) dilepaskan, yang memungkinkan keluaran didorong. Tepat satu siklus jam kemudian, Global Write Enable (GWE) dilepaskan, memungkinkan sandal jepit untuk mulai mengubah keadaan sebagai respons terhadap input mereka. Perhatikan bahwa bahkan proses konfigurasi akhir ini dapat sedikit disusun ulang tergantung pada flag yang diatur dalam file BIT.

EDIT:

Saya juga harus menambahkan bahwa alasan program FPGA tidak permanen adalah karena struktur logika terdiri dari memori volatile (misalnya SRAM). Jadi ketika FPGA kehilangan daya, program itu dilupakan. Itu sebabnya mereka membutuhkan chip Flash misalnya sebagai penyimpanan non-volatile untuk program FPGA, sehingga dapat dimuat setiap kali perangkat dinyalakan.

ajs410
sumber
6

Mengkompilasi hasil HDL dalam pola bit yang menunjukkan koneksi mana di dalam FPGA yang harus diaktifkan. FPGA tidak perlu menafsirkan HDL lagi. Pola bit diprogram ke dalam pemuat serial Flash / EEPROM, dan saat booting pola ini digeser ke dalam FPGA, membuat koneksi yang diperlukan.

stevenvh
sumber
1
SINTESIS berarti tiga frasa 1. Generasi netlist 2. Optimasi Level Gerbang 3. Pemetaan teknologi.
Standard Sandun
4

Hasil kompilasi adalah bitstream (secara harfiah merupakan aliran bit) yang dimuat setelah dinyalakan. Ini bergeser melalui FPGA yang disimpan di beberapa sel memori (kait). Sel-sel ini terhubung ke berbagai entitas logika, multiplexer, tabel pencarian, blok RAM, matrik perutean dan membentuk apa yang disebut "konfigurasi". Setelah bitstream di-load, FPGA mulai beroperasi - bit-bit dalam konfigurasi-kait "memberi tahu" setiap bagian kecil dari FPGA cara mengoperasikannya.

EDIT 24 April 2012: Flip-flop yang saya sebutkan bukan untuk tabel pencarian atau konfigurasi mereka. Seperti @ ajs410 katakan itu dalam RAM yang bahkan lebih sedikit transistor. Sandal jepit adalah untuk penyimpanan data keluar dari LUT, jika penyimpanan itu diaktifkan.

Martin Thompson
sumber
Seberapa banyak sirkuit dalam FPGA tipikal adalah logika dan perutean aktual, dan berapa banyak dukungan pemrograman?
supercat
Secara teknis "sel memori" adalah sandal jepit, bukan selot. Yaitu mereka dipicu ujung.
Brian Carlton
@BrianCarlton: Apakah sandal jepit benar-benar digunakan untuk semua sel penyimpan program? Menurut pemahaman saya, sandal jepit membutuhkan sesuatu dengan urutan 12-16 MOSFET per bit; sebaliknya, teknik sepenuhnya-statis lainnya untuk mengunci data hanya memerlukan 5-8.
supercat
1
LUT biasanya terbuat dari SRAM. Sandal jepit melekat pada output SRAM.
ajs410
1
@supercat: Saya pernah mendengar bahwa 90% dari FPGA merutekan ... sisanya adalah logika dan konfigurasi - tidak dapat menemukan referensi dengan cepat :(
Martin Thompson
1

Istilah standar adalah "konfigurasi" dan bukan "pemrograman" untuk FPGA. FPGA biasanya merupakan perangkat berbasis SRAM. SRAM menyimpan bit yang menunjukkan koneksi mana yang terbentuk dan rusak di dalam "logika" perangkat. Ketika konfigurasi terjadi, aliran bit dikirim ke FPGA yang menulis ke SRAM ini. Ketika FPGA berbasis SRAM diaktifkan, off data SRAM dihapus dan ketika FPGA dihidupkan, itu harus dikonfigurasi lagi.

Sekarang ketahui ini, mereka adalah berbagai metode untuk "mengkonfigurasi" dan FPGA dan dengan demikian berbagai format file yang ada mengandung "bit stream" ini. Pada akhirnya, struktur file-file ini dan perincian tentang bagaimana tepatnya FPGA dikonfigurasikan adalah hak milik untuk pembuatan dan informasi ini tidak pernah dibagikan. Tetapi prinsip umum tetap sama di seluruh FPGA.

quantum231
sumber