Bagaimana prosesor mengontrol kecepatan jam mereka?

12

Saya baru-baru ini menemukan prosesor STM dengan 2 osilator di sirkuit - saya kira satu untuk operasi kecepatan tinggi dan yang lainnya untuk daya rendah.

Untuk sesuatu seperti prosesor desktop di mana kecepatan jam dapat diubah ke frekuensi yang diinginkan (sesuai alasan) - bagaimana cara melakukannya secara fisik ?

alex.forencich
sumber
1
Sebagai jawaban alex menunjukkan, frekuensi CPU desktop modern tidak terus-menerus variabel. Biasanya berjalan dalam langkah 100 atau 133 MHz. (Terkait: bagaimana CPU x86 modern memutuskan kapan harus mengubah frekuensi, untuk "turbo" di atas kecepatan nilai maksimal, atau jika OS melepaskan kontrol penuh manajemen daya ke CPU (Intel Skylake): SKL memiliki on-die mikrokontroler dengan transistor sebanyak yang dilakukan oleh 486, hanya untuk membuat keputusan frekuensi: Mengapa loop penundaan ini mulai berjalan lebih cepat setelah beberapa iterasi tanpa tidur?
Peter Cordes

Jawaban:

21

Ini dilakukan dengan menggunakan perangkat yang disebut loop fase-terkunci , atau PLL. Berikut ini adalah diagram blok dari PLL dasar:

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Osilator pada motherboard tidak berjalan pada frekuensi clock CPU, melainkan berjalan pada frekuensi pada urutan 100 MHz. Osilator ini hanya berfungsi sebagai frekuensi referensi stabil yang diketahui. Di dalam CPU, frekuensi clock aktual akan dihasilkan oleh osilator yang dikendalikan tegangan , atau VCO. VCO dapat disetel untuk menghasilkan frekuensi pada rentang yang relatif luas, tetapi dengan sendirinya tidak stabil atau akurat - untuk tegangan kontrol yang diberikan, frekuensi akan bervariasi dari bagian ke bagian dan dengan tegangan dan suhu suplai. Loop yang dikunci fase kemudian berfungsi untuk mengunci frekuensi output VCO ke dalam hubungan spesifik dengan frekuensi referensi.

fPFD=fref/D=fHaikamut/M.fHaikamut=frefM./D

Sebagai contoh, anggap frekuensi referensi adalah 100 MHz, referensi dibagi dengan 1 (D) dan VCO dibagi 30 (M). Ini akan menghasilkan frekuensi output 100 MHz * 30/1 = 3 GHz. Hubungan ini dapat diubah dengan hanya mengubah pengaturan pembagi, yang dapat dilakukan dalam perangkat lunak melalui register kontrol. Perhatikan bahwa mengubah frekuensi dengan cepat mungkin tidak sesederhana hanya dengan mengubah nilai pembagi, frekuensi harus diubah sedemikian rupa untuk memastikan bahwa CPU tidak melihat 'gangguan' atau pulsa clock yang terlalu pendek. Mungkin perlu menggunakan 2 PLL dan beralih di antara keduanya, atau untuk sementara menghentikan jam atau beralih ke sumber jam lain hingga PLL stabil pada frekuensi baru.

PLL digunakan di semua tempat untuk menghasilkan frekuensi yang tepat dan mudah diatur dari referensi yang stabil dan stabil. Kartu Wi-Fi dan router Wi-Fi Anda menggunakannya untuk memilih saluran yang sesuai dengan menghasilkan apa yang disebut frekuensi osilator lokal, sinyal yang digunakan internal ke radio untuk mengkonversi dan menurunkan konversi data yang dimodulasi. Radio FM Anda kemungkinan besar menggunakan radio untuk mengaktifkan kontrol perangkat lunak atas frekuensi penerimaan, memungkinkan penarikan stasiun yang berbeda dengan mudah. PLL juga digunakan untuk menghasilkan sinyal clock frekuensi tinggi yang digunakan untuk menggerakkan serializers dan deserializers untuk Ethernet, PCI express, serial ATA, Firewire, USB, DVI, HDMI, DisplayPort, dan banyak protokol serial modern lainnya.

alex.forencich
sumber
7

Selain jawaban sebelumnya ...

Mikro STM Anda hampir pasti memiliki osilator kedua untuk jam waktu-nyata. Ini memungkinkan jam tetap berjalan (mengkonsumsi daya minimal) sementara sisa chip dan sisa sirkuit dimatikan. Perangkat kemudian dapat menjalankan jam dan kalendernya, dan biasanya juga dapat memulai kembali prosesor utama pada timer - semua hal yang berguna untuk perangkat tertanam.

Graham
sumber
Jam real-time biasanya jauh lebih lambat daripada jam utama (32kHz khas), dan karena ini, osilator jam waktu nyata dan sirkit yang terpasang dapat memiliki konsumsi arus yang sangat rendah.
mkeith
@keith Kecepatan clock rendah penting, tentu saja, tetapi terutama karena hampir semua prosesor dimatikan.
Graham
Graham, pertanyaan awal adalah tentang mengapa ada dua osilator. Pada prinsipnya, Anda dapat mematikan sebagian hanya dengan satu osilator dan Anda akan menghemat banyak daya dengan cara itu. Alasan ada osilator kecepatan kedua yang lebih rendah adalah karena konsumsi daya dinamis berkorelasi linear dengan frekuensi clock. Jadi konsumsi daya dinamis dari sirkuit 32kHz akan menjadi sekitar 300x kurang dari konsumsi daya dinamis dari sirkuit 10 MHz. Berkurangnya kecepatan clock merupakan bagian penting dari jawaban, menurut saya.
Nyonya
@keith Ini bukan "pokok" - itulah cara kerjanya pada setiap chip dengan RTC. Tentu saja bagian RTC menggunakan osilator kecepatan rendah untuk menghemat kecepatan. Tetapi bagian RTC tidak pernah menggunakan jam osilator yang lebih cepat - ini merupakan sirkuit yang sepenuhnya terpisah pada bagian silikon yang sama; dan juga sisa chip tidak pernah menggunakan jam osilator lebih lambat. RTC sendiri menggunakan lebih sedikit daya dengan berjalan pada laju jam yang lebih lambat, tentu saja, tetapi keseluruhan sisa chip 100% dimatikan dan mengambil arus nol (well, nanoamps arus bocor, tapi hanya itu).
Graham
1
@keith Tentu, dan saya setuju (meskipun frekuensi kristal RTC secara historis berasal dari gerakan elektro-mekanikal kuarsa di jam dan arloji, bukan dari penghematan daya dalam elektronik). Saya hanya ingin mengklarifikasi untuk OP bahwa jam yang lebih lambat bukan untuk mode "daya rendah" pada prosesor utama - ini untuk periferal yang sepenuhnya terpisah.
Graham
0

dengan sangat hati-hati !

masukkan deskripsi gambar di sini

CPU memiliki prescalar programmble biner dan PLL dengan VCO untuk menggerakkan konter sehingga memperbanyak bus sisi-depan, jam FSB (katakanlah 100MHz).
Mode hemat daya dinamis ini dipilih secara otomatis ketika penggunaan CPU rendah dengan driver CPU, CPU, OS dan BIOS yang tepat.

I7 (8cpu) saya beralih dari 3101 MHz ke 800 MHz dan langsung langkah 1100, 1300,1500 ... dll

Jika Bios memilih x31 seperti dalam kasus saya, maka CPU berjalan pada 100MHz x 3100MHz dan dengan penghitung biner di CPU memilih dari x8 ke x15 untuk mengurangi daya CPU pada saat yang sama karena mengatur tegangan chip CPU pada 0.9V wilayah semua untuk menghemat daya.

Saya dapat menampilkan dengan kursor saya di sudut kanan atas pada Win8.1 bersama dengan% CPU dan% memori

masukkan deskripsi gambar di sini

Tony Stewart Sunnyskyguy EE75
sumber