Menggunakan kedua ujung jam


10

Saya memprogram Altera Cyclone IV menggunakan Verilog dan Quartus II. Dalam desain saya, saya ingin menggunakan kedua ujung jam sehingga saya bisa melakukan pembagian jam dengan faktor aneh dengan siklus tugas 50%. Berikut ini cuplikan kode saya:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Sekarang ketika saya mengkompilasi ini, Quartus II melempar kesalahan berikut:

Verilog HDL Selalu Membangun kesalahan di adc_clocking.v (83): kontrol acara tidak dapat menguji baik sisi positif dan negatif dari variabel "low_jitter_clock_i"

Bagaimana saya bisa menggunakan tepi positif dan negatif dari jam tertentu dalam desain saya?

Jawaban:


7

Saat Anda menetapkan register di blok selalu peka terhadap tepi, Anda menentukan flip-flop. FPGA tidak memiliki sandal jepit yang dapat memicu pada kedua sisi jam.

Untuk melakukan apa yang Anda inginkan, Anda harus memiliki dua blok selalu terpisah, satu untuk setiap tepi jam, dan kemudian mencari cara untuk menggabungkan output dari dua blok tanpa membuat gangguan.

Misalnya, satu blok selalu dapat berisi pembagi yang dapat diprogram. Desainlah sehingga siklus tugas keluaran kurang dari 50% saat diberi nomor ganjil. Gunakan selalu blok kedua (di tepi jam lainnya) untuk menunda output dari blok pertama dengan 1/2 jam, lalu ATAU kedua output bersama-sama. Nonaktifkan output dari blok kedua untuk nilai pembagi genap.


Alasan saya ingin menggunakan tepi positif dan negatif dari jam adalah memiliki siklus tugas 50%.
Randomblue

Ya, saya mengerti. Jawaban saya langsung membahasnya. Saya berasumsi Anda sudah tahu cara mendapatkan siklus tugas 50% ketika nilai pembagi genap. Apa yang tidak jelas?
Dave Tweed

Tidak ada sandal jepit dua sisi? Tidak ada alasan yang melekat untuk ini. Ternyata tidak ada yang membuat mereka (atau setidaknya tidak ada yang kita tahu). Seperti yang Martin tunjukkan, ada CPLD yang mendukung sandal jepit dua sisi: xilinx.com/products/silicon-devices/cpld/coolrunner-ii/…
Philippe

3

Jika ini untuk logika internal, Anda mungkin harus menulis lebih dekat dengan flipflops yang tersedia. Kecuali untuk Coolrunner-II, saya tidak mengetahui adanya logika yang dapat diprogram dengan register dua sisi.

Oleh karena itu, Anda harus membuat dua alwaysblok, satu untuk negedge dan satu untuk posedge dan menggabungkan outputnya dengan beberapa logika kombinatorial.

Atau gunakan PLL untuk menggandakan jam dan kemudian Anda dapat menggunakan logika bermata tunggal konvensional.



1

Seperti yang dicatat Dave Tweed, kecuali FPGA menyertakan perangkat flip flop yang dapat beroperasi pada kedua sisi jam, Anda perlu menulis logika Anda sendiri untuk menerapkan perilaku yang diinginkan menggunakan sandal jepit satu sisi konvensional. Walaupun ada sejumlah cara berbeda yang dapat diterapkan oleh suatu rangkaian yang berperilaku seperti flip-edge flip-edge, sirkuit-sirkuit tersebut umumnya menambahkan beberapa batasan waktu yang berbeda dari yang terkait dengan flip flop.

Sebagai contoh, pendekatan sederhana adalah dengan memiliki modul yang menggabungkan dua xors 2-input dan sepasang sandal jepit "T" (di mana keadaan input ketika pulsa clock tiba menunjukkan apakah tepi jam harus beralih output), satu dipicu oleh sisi naik dan satu dipicu oleh sisi jatuh. Output dari modul akan menjadi xor dari output sandal jepit, dan input untuk kedua sandal jepit akan menjadi xor dari output modul dan inputnya.

Sirkuit yang dirancang dengan cara ini pada dasarnya akan bekerja seperti flip flop dua sisi, meskipun dengan pengaturan dan waktu propagasi yang lebih lama, tetapi dengan batasan waktu tambahan. Flip flop normal yang tidak pada jalur umpan balik tidak akan keberatan jika awal dari tepi jam memiliki banyak pulsa runtuh asalkan jam menstabilkan pada tingkat yang valid, dan asalkan kendala pengaturan waktu, diukur dari sebelum runtuh pulsa pertama dan waktu tahan dan batasan waktu aktif-jam, diukur dari waktu pulsa stabil, terpenuhi. Perilaku output flip flop akan ditentukan selama jam tidak stabil, tetapi akan ditentukan setelah jam stabil. Modul double-xor-double-flop akan menambah batasan waktu tambahan bahwa setiap edge clock yang akan mengubah output harus jarak yang aman dari edge clock lainnya yang mungkin melakukannya. Gagal memenuhi batasan itu, misalnya dengan memiliki tiga edge clock dalam suksesi yang sangat dekat sementara input tidak sesuai dengan output, dapat meninggalkan output dalam keadaan tak tentu atau metastabil (perhatikan bahwa skenario yang melibatkan jumlah genap genap tidak menjadi perhatian. , karena skenario seperti itu hanya akan melibatkan runt pulsa, kasus tiga-tepi (atau kasus ganjil lainnya lebih dari satu) menjadi perhatian karena akan ada pulsa yang valid mengikuti pulsa runtuh.

Desain sirkuit alternatif adalah memiliki dua sandal jepit seperti di atas, tetapi memasukkan outputnya ke dalam multiplexer. Sirkuit ini tidak akan dilemparkan ke keadaan buruk oleh runtutan pulsa, dan batasan clockingnya akan sama dengan kait yang mendasarinya, tetapi akan memiliki kerugian bahwa output yang tinggi dan harus tetap (atau rendah dan harus tetap rendah) ) jadi bisa kesalahan sebentar di tepi jam. Di beberapa sirkuit itu tidak masalah, tetapi di sirkuit lain, itu akan jadi masalah.

Mungkin akan memungkinkan bagi alat sintesis logika untuk menerapkan sandal jepit dua sisi secara otomatis dengan menganalisis batasan waktu apa yang telah ditetapkan sebagai penting, tetapi melakukan hal itu akan agak sulit. Ini juga akan meningkatkan risiko bahwa perubahan kecil pada suatu desain dapat menyebabkan perubahan besar dalam implementasi dan dengan demikian menghasilkan perubahan perilaku yang signifikan dan tidak terduga.

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.