waktu proses pada FPGA

10

Saya baru mengenal fpgas, dan ada beberapa perbedaan waktu yang saya tidak yakin saya mengerti: jika semua proses sinkron saya dipicu pada tepi yang sama, maka itu berarti input saya 'ditangkap' pada satu sisi yang naik, dan saya output berubah .. tepi yang sama? tepi naik berikutnya?

jika saya memiliki dua modul, di mana output dari satu mengalir ke input berikutnya, di sana dapat muncul situasi di mana input ke modul saya (output dari modul sebelumnya) berubah pada saat yang sama ketika mereka ditangkap.

Tangkapan Layar ISim

Marker di 205ns menunjukkan apa yang saya bicarakan, op dan data_write menjadi input saya. Semuanya tampak "hanya bekerja" dalam kasus uji ini, tetapi dalam simulasi itu tidak jelas kapan ditangkap. Apakah data_write = "0001 ..." ditangkap pada 205ns atau (205ns + 1 siklus clock)? Apakah ada cara untuk mendapatkan bentuk gelombang yang lebih rinci di ISim yang menunjukkan waktu penahanan dan penahanan?

Terima kasih.

Casaubon
sumber

Jawaban:

12

Selalu ada beberapa penundaan propagasi melalui flip-flop. Ini sering disebut penundaan "clock-to-Q".

Itu berarti input Anda ditangkap di tepi, dan output Anda berubah di tepi yang sama, tetapi hanya beberapa nanodetik kemudian. Penundaan beberapa nanodetik ini sudah cukup (jika sandal jepit Anda dirancang dengan "waktu tahan nol" seperti pada kebanyakan FPGA) bahwa perubahan tidak memengaruhi sandal jepit hilir apa pun sampai jam tepi berikutnya.

Dalam simulasi fungsional atau RTL (yang mungkin adalah apa yang Anda lakukan untuk menghasilkan hasil Anda) penundaan tidak akan disimulasikan sebagai nanodetik abadi. Dalam VHDL, itu akan menjadi siklus delta tunggal dari jam simulator, yang secara teknis tidak ada waktu sama sekali. Ini membuatnya tidak mungkin untuk melihat keterlambatan dalam output simulator. Meskipun demikian untuk sandal jepit disimulasikan-sebagai-ideal, cukup bahwa perubahan output tidak mempengaruhi sandal jepit hilir.

Jika Anda melakukan simulasi pasca-tempat-dan-rute, itu harus dapat menyertakan penundaan yang sesuai sehingga Anda melihat efek ini dengan jelas, dengan biaya peningkatan upaya simulasi.

Foton
sumber
1
Dalam simulasi VHDL RTL, penundaan adalah siklus delta tunggal. Ini membutuhkan waktu nol, tetapi memungkinkan simulasi untuk melanjutkan secara teratur karena semua pembaruan dalam siklus delta saat ini selesai sebelum siklus delta berikutnya dimulai. Ketika tidak ada lagi siklus delta yang dijadwalkan, maka waktu dapat bergerak.
Martin Thompson
1

Pada tepi jam yang diinginkan (naik atau turun) input pada D muncul pada output Q. Ini membutuhkan waktu yang terbatas (Clock to Q delay) dan dengan asumsi tidak ada pelanggaran waktu, D hanya akan melewati satu FF pada suatu waktu (yaitu jika ada input FF lain yang terhubung ke Q, FF kedua akan melewati nilai Q FF1 sebelum berubah.

Untuk memasukkan pewaktuan dalam simulasi Anda, Anda perlu mensintesis dan menempatkan dan merutekan desain Anda, kemudian jalankan simulasi tempat pos dan rute. Ini akan mencakup semua kombinasional, jam ke Q, dll. Simulasi HDL tidak memiliki timing ini, sehingga hanya berguna untuk menguji operasi dasar, bukan batas waktu. Anda juga akan mendapatkan laporan pewaktuan, yang akan memberi tahu Anda batas kecepatan domain jam tertentu, memberi tahu Anda jika ada pelanggaran waktu, dan menunjukkan kepada Anda waktu kendur untuk berbagai jalur. Anda dapat menggunakan info ini untuk mencari tahu di mana chnage mungkin perlu dibuat, atau aturan ditambahkan untuk memberi tahu perangkat lunak pelanggaran itu tidak menjadi masalah (misalnya untuk hal-hal seperti jalur multi-siklus atau jalur lintas jam)

Oli Glaser
sumber
1

Ini dimaksudkan sebagai tambahan untuk jawaban sebelumnya, dari whcih saya yakin Anda mendapatkan ide.

Hal-hal ini memang bisa sedikit rumit di awal ketika simulasi desain RTL karena orang dapat menemukan kesulitan untuk melihat apa penyebabnya dan apa efeknya dalam simulasi ideal / fungsional / RTL (= tidak ada penundaan propagasi).

Dengan simulator yang tepat, penundaan delta dapat benar-benar divisualisasikan. ISim tidak melakukannya, tetapi di ei ModelSim, Anda dapat mengaktifkan ekspansi delta di sekitar tepi jam. Di bawah ini adalah contoh tangkapan layar dari IP pihak ke-3 yang bermasalah dan saya pecahkan.

Delta menunda ekspansi di ModelSim

cadalah sinyal jam, dan +1lain-lain adalah siklus delta, divisualisasikan sebagai waktu.

Jika desain disimulasikan di mana simulasi dan desainnya benar - benar ideal dan sinkron , tanpa penundaan simulasi, Anda dapat, pada prinsipnya, melihat semua perubahan sinyal pada sisi jam tertentu seperti yang terjadi sedikit setelah sisi jam itu. Dalam contoh Anda, oleh karena itu, pada 205 ns, data_write= 0000...adalah apa yang ditangkap. Beberapa logika lain dalam unit pertama adalah mengubah sinyal data_writeke 0001...pada sisi yang sama, dan sinyal itu muncul data_writesedikit setelah sisi jam. Ini "sedikit setelah" akan menjadi satu atau beberapa delta simulasi dalam simulasi ideal (contoh Anda) (tidak terlihat dalam ISim, tetapi dalam misalnya ModelSim dengan ekspansi delta), atau beberapa ps / ns kemudian di dunia nyata.

Di samping catatan: Satu hal penting dengan desain RTL adalah untuk memastikan bahwa input selalu sampel pada sisi jam - bahkan satu siklus delta kemudian terlambat. Input mungkin tidak valid satu delta nanti. Atau dengan kata lain: "jangan main-main dengan jalur jam".

Carl
sumber