Bagaimana variabel VHDL disintesis oleh alat sintesis

9

Saya tahu dua cara di mana variabel VHDL disintesis oleh alat sintesis:

  • Variabel disintesis sebagai logika kombinasional
  • Variabel disintesis sebagai Latch secara tidak sengaja (ketika variabel yang tidak diinisialisasi ditugaskan ke sinyal atau variabel lain)

Apa cara lain di mana variabel VHDL dapat disintesis? (Contoh: dapatkah itu diartikan sebagai FF?)

nurabha
sumber

Jawaban:

8

Saya akan membedakan tiga kemungkinan:

  1. Variabel VHDL tidak memiliki representasi perangkat keras sama sekali. Asumsikan contoh berikut

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    Variabel vartidak benar-benar disintesis sebagai logika kombinatorial sama sekali (dengan asumsi inilah yang dimaksud dalam pertanyaan). Ini adalah sisi kanan dari tugas a + byang disintesis menjadi perangkat keras. Sebenarnya suatu variabel tidak pernah disintesis menjadi logika kombinatorial.

  2. Sebuah variabel hanya memegang hasil antara, yang dievaluasi dalam siklus clock yang sama -> tidak ada perangkat keras yang disintesis (ini adalah 1) lagi), atau dievaluasi dalam siklus clock berikut -> flipflop disintesis.

  3. Salah satu kait yang ditakuti disimpulkan dalam kasus-kasus seperti di mana cabang bersyarat ada di mana variabel tidak memberikan nilai baru (tergantung pada beberapa sinyal) atau nilai default. Biasanya kasus ini terjadi tanpa disengaja :-)

andrsmllr
sumber
"Dreaded latch" hanya dapat terjadi di luar proses yang telah ditentukan dan sebagian besar orang (menurut pengalaman saya) akhir-akhir ini tidak menggunakan proses yang tidak menggunakan waktu. Jadi kait latch bukan masalah lagi (IMHO) - itu berasal dari masa lalu ketika Anda harus menulis logika kombinatorial Anda dalam proses terpisah ke sandal jepit Anda
Martin Thompson
4

Jika Anda menggunakan nilai dalam variabel sebelum Anda menyimpannya, Anda mendapatkan nilai yang disimpan terakhir kali proses menyimpannya (dalam proses clocked, nilai dari siklus clock sebelumnya). Itu disintesis sebagai register atau FF.

Tentu saja, dalam siklus clock pertama Anda mendapatkan sampah, kecuali Anda menginisialisasi variabel dalam klausa reset.

Brian Drummond
sumber