Bagaimana cara kerja sinyal High High dan Active Low di Sistem Tertanam?

8

Ini tentang bagaimana pengontrol mikro bekerja secara umum ..

Pemrograman yang kita lakukan dikonversi menjadi 1 dan 0 oleh kompiler dan kode mesin yang dimengerti ini kemudian dimuat ke mikrokontroler ..

Bagaimana mikrokontroler merespons ini .. Maksud saya 1 dan 0 ini dikonversi menjadi tegangan logika yang sesuai (5v dan 0) oleh DAC? Jika seperti itu, bagaimana sepotong kecil silikon ini memutuskan apa yang harus dilakukan dengan berbagai kombinasi 5v dan 0v ini?

Saya mengerti bahwa setiap IC terbuat dari gerbang logika dan gerbang ini terdiri dari transistor .. Jadi bagaimana transistor ini merespon berbagai kombinasi 5v dan 0v?

Apa yang membuat mereka mencari logika ini .. Maksud saya bagaimana mereka memonitor instruksi ini ketika mereka dinyalakan?

Jadi tentu saja harus ada Sistem Operasi yang dimuat ke MCU yang memerintahkannya untuk memproses dan bagaimana memproses instruksi ini, bukan? ..

Selanjutnya adalah .. pertimbangkan timer .. itu hanyalah register yang bertambah satu setelah setiap siklus clock .. Bukankah OS lagi yang memerintahkan MCU untuk menambah setelah setiap jam? Apakah saya benar? Dalam hal itu, dalam bahasa apa, semua kode untuk sistem operasi ditulis?

Saya hanya dapat melanjutkan pekerjaan saya dengan pemrograman MCU untuk tugas yang berbeda tetapi hari ini saya tertarik untuk mengetahui bagaimana kode saya dipahami oleh mesin ini ..

Maaf pertanyaan saya panjang untuk dibaca .. tolong bantu saya mempelajari hal-hal dasar ini ..

Terima kasih sebelumnya..

VV Rao
sumber
Saya kira orang-orang akan memiliki pertanyaan semacam ini selama awal karir mereka ..
VV Rao
pesan yang dihapus terasa buruk
Rick_2047

Jawaban:

6

Tidak perlu menggunakan DAC. Tegangan digunakan untuk mewakili 1 dan 0 dengan konvensi bahwa apa pun di bawah 0.8V (AKA 'rendah') adalah nol, dan apa pun lebih dari 2.4V (AKA 'tinggi') adalah satu. Ini relatif sederhana untuk membangun sirkuit yang melakukan logika pada tegangan representatif ini.

Sebagai contoh, sebuah sirkuit dapat mengeluarkan sesuatu dalam rentang 2.4V ke 5V untuk mewakili '1' jika salah satu input lebih dari 2.4V, atau sesuatu yang kurang dari 0.8V sebaliknya, dan Anda memiliki gerbang OR. Jika membutuhkan kedua input yang mewakili 1 untuk menghasilkan 2.4V, Anda memiliki gerbang AND. Inverter hanya mengeluarkan output tinggi ketika input rendah, dan sebaliknya. Anda dapat membangun gerbang sederhana seperti ini hanya dengan sedikit transistor, dan melakukan logika boolean kombinatorial. Dengan menggunakan kelompok bit untuk mewakili angka, Anda bahkan dapat membangun sirkuit untuk menambahkan angka dengan logika kombinatorial, tidak diperlukan perangkat lunak.

Setelah Anda bekerja dengan gerbang, Anda dapat membuat sandal jepit, dan dari mereka, register dan penghitung. Flip-flop memungkinkan Anda untuk menyimpan 1 dan 0 dari satu titik waktu dan menggunakannya nanti. Register dan penghitung adalah sirkuit yang menjalankan fungsi pada kelompok bit yang mewakili angka. Register menyimpan nomor sampai Anda memuat nomor baru ke dalamnya. Penghitung seperti register, tetapi memiliki input lain yang menyebabkan peningkatan nomor yang disimpan. (Penurunan juga dimungkinkan). Ini menempatkan Anda di ranah mesin negara dan logika berurutan, tetap saja, tidak diperlukan perangkat lunak.

Sistem memori adalah cara untuk menyimpan sejumlah besar bit. Pada tingkat komponen, beberapa memori dibangun seperti kumpulan besar flip-flop, tetapi lebih umum lagi ada teknologi lain (DRAM) yang, meskipun bukan flip flop, melakukan hal yang sama.

Sebagai langkah selanjutnya, Anda dapat membangun sistem logika sekuensial dan kombinatorial yang dapat melakukan operasi tergantung pada bit yang disimpan dalam sistem memori, termasuk menulis kembali nilai-nilai baru ke sistem memori tersebut. Sekarang Anda telah sampai pada level prosesor, dan semua yang dilakukan prosesor, hanyalah perangkat keras yang menjalankan banyak tugas sederhana. (Core mikroprogram meskipun). Pada titik ini, kombinasi bit tertentu yang Anda masukkan ke dalam sistem memori dapat dianggap sebagai perangkat lunak bahasa mesin.

JustJeff
sumber
Sekarang saya telah mengerti bahwa Transistor adalah basis di mana prosesor dibuat yaitu dengan gerbang seperti nand, kita dapat membuat flipflop, register, counter, alu dan semuanya bersama-sama membuat sistem komputasi. Input transistor dapat tinggi atau rendah (over2.4v 0r under0.8v) .. Pertanyaan saya adalah, perangkat apa yang mengartikan 1 dan 0 dari Compiler sebagai logika yang sesuai dengan transistor ini jika tidak ada DAC yang digunakan?
VV Rao
@Vicky Rao - Saya pikir yang membingungkan Anda adalah bahwa Anda mencampur tingkat abstraksi. Tidak ada yang diperlukan untuk mengubah output kompilator ke level logika untuk transistor, karena perangkat lunak 1 dan 0, dan perangkat keras 1 dan 0, hanyalah pandangan yang berbeda dari realitas fisik yang sama. Apa yang pada satu tingkat terlihat seperti jutaan transistor yang mengubah status, di tingkat lain terlihat seperti prosesor yang menjalankan perangkat lunak.
JustJeff
6

Dapatkan buku "Kode: Bahasa Tersembunyi dari Perangkat Keras dan Perangkat Lunak Komputer" oleh Charles Petzold . Ini mengagumkan, mudah dibaca, dan akan menjawab banyak pertanyaan itu.

Jika Anda tidak mampu membeli buku Petzold, maka periksa "Bagaimana Komputer Bekerja" oleh Roger Young . Ini mencakup banyak hal yang sama, dan versi HTML dan PDF gratis.

Shawn J. Goff
sumber
Juga buku yang bagus adalah The Elements of Computing systems.
Rick_2047
5

Pertimbangkan NPN BJT; sebuah transistor. Salah satu yang pertama kali ditemukan.

Sekarang Anda menghubungkannya sedemikian rupa sehingga kolektor terhubung ke input logika variabel, dan emitor terhubung ke input logika lain, dengan resistor secara seri. Kemudian, sebuah resistor dari emitor ke ground.

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

Anda baru saja membangun gerbang AND. Output hanya tinggi ketika kedua input tinggi. Itu tidak sempurna dengan cara apa pun karena tergantung pada input ke kolektor, dan karena itu tidak menyebar dengan baik, tetapi memberi Anda ide tentang bagaimana transistor dapat digunakan untuk menghitung suatu fungsi.

Kemudian, Anda juga dapat membangun gerbang NOT;

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

Menambahkan ini ke output dari gerbang AND yang baru saja dibangun memberi kita gerbang NAND, dan Anda mungkin tahu bahwa dengan gerbang NAND Anda dapat membangun segala bentuk logika. Ini juga memiliki keuntungan bahwa sinyal buffer, meningkatkan kipas keluar dan kemampuan chaining.

Prosesor nyata jarang menggunakan BJT, melainkan logika CMOS, tetapi prinsip yang sama berlaku.

Thomas O
sumber
Anda bisa menggunakan FET bukannya NPN :)
endolith
Itu sebabnya saya menambahkan ini: "Prosesor nyata jarang menggunakan BJT, tetapi logika CMOS, tetapi prinsip yang sama berlaku." n-JFET dan n-MOSFET mungkin akan bekerja sebaik bentuk yang lebih estetis seperti katup.
Thomas O
Anda juga bisa menggunakan PNP untuk melakukan TIDAK dengan cara yang sama seperti DAN dengan NPN
Matt Williamson
3

Mungkin Anda harus mencari beberapa referensi sistem digital atau melihat hal-hal seperti VHDL. MCU pada dasarnya dirancang dengan blok bangunan, yang bisa berupa berbagai gerbang logika dan blok bangunan (lebih kecil). Pada akhirnya semuanya menuju gerbang logika yang memang disusun dengan transistor. MCU sederhana yang khas seperti PIC18F atau sesuatu tidak menjalankan sistem operasi. Program yang Anda masukkan ke dalamnya adalah banyak instruksi mesin yang dijalankan PIC secara terus menerus. Semua proses dilakukan oleh perangkat keras.

Prosesor umum biasanya memiliki ALU (menghitung hasil dari instruksi tertentu) dan lebih banyak blok di sekitarnya yang memuat instruksi, mengelola tumpukan dan mengelola memori. Proccesor memiliki beberapa register untuk bekerja dengan itu sendiri, terutama untuk memuat input dan menyimpan hasil. Anda mungkin tidak melihat banyak dari ini dalam bahasa C atau bahasa lain tetapi banyak dalam perakitan.

ALU menangani instruksi dengan kode operasi dan input tertentu. Sebagai contoh, instruksi tipikal adalah ADD 12 1, yang berarti 12 + 1 = 13. Hasilnya disimpan dalam register pada proccesor itu sendiri.

Bergantung pada arsitektur, ALU misalnya lebar 8 bit. Adder 8 bit sederhana dapat dibuat dari 8x 1-bit adders yang diikat menjadi satu (menggunakan blok untuk membangun blok yang lebih besar). Penambah 1-bit dapat dengan mudah dituliskan ke gerbang logika menggunakan aljabar boolean. Menuliskan seluruh penambah 8-bit secara manual dengan hanya menggunakan gerbang logika akan menjadi jumlah pekerjaan yang gila. Itu seperti menulis sebuah program tanpa memiliki kemampuan untuk menggunakan fungsi atau subrutin sama sekali.

Agar sistem digital berfungsi dengan benar, sebagian besar blok dirancang berdasarkan jam. Setiap sistem digital memiliki jumlah waktu tertentu yang diperlukan untuk mencapai kondisi akhirnya. Hal ini disebabkan oleh beralihnya penundaan pada transistor dan kondisi yang memengaruhi status lainnya. Sinyal jam adalah sesuatu yang harus Anda ketahui, kecepatan prosesor berjalan. Pengatur waktu bisa menjadi perangkat yang sangat sederhana yang memiliki blok penambah kecil dan peningkatan sebesar 1 setiap kali mendapat centang jam.

Hans
sumber
3

Ini adalah topik besar dan saya tidak bisa memberikan jawaban yang sederhana tetapi ...

Anda dapat sedikit lebih dekat dengan jawaban ini dengan melakukan beberapa pemecahan dan penaklukan, dan karena jawaban yang lain mencoba untuk menyerang masalah ini dari sudut pandang hw, saya akan mencoba dari sudut pandang SW tingkat tinggi.

Jika Anda menulis beberapa perangkat lunak dalam misalkan kode c (tingkat abstraksi yang sangat tinggi), Anda tidak benar-benar melihat apa yang terjadi tidak benar-benar memahami semua hal kekasih yang Anda tanyakan.

Tapi mari kita mulai dari sana.

Program sederhana yang hanya menyertakan variabel.

int main(void)
{
    int i=0;
    while(1) {
        i++;
    }
}

Maka kita perlu mendapatkan kode assembler sehingga kita bisa mengerti apa yang sedang terjadi. Langkah ini dapat dilakukan pada platform apa pun yang Anda gunakan, tetapi untuk membuatnya lebih sederhana, saya menggunakan gcc pada pc (tetapi tidak masalah ...)

gcc -O0 -S main.c -o main.lst

Lalu kita berakhir dengan sesuatu seperti ini:

    .file   "main.c"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp
    movl    $0, -4(%ebp)
.L2:
    addl    $1, -4(%ebp)
    jmp .L2
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section    .note.GNU-stack,"",@progbits

Kemudian Anda mencoba memahami setiap baris kode dan apa fungsinya.

Dan kemudian Anda mulai melihat ke dalam bagaimana setiap instruksi dilaksanakan ... Misalnya subl

    subl    $16, %esp

Pada titik ini berbeda pada arsitektur yang berbeda dan x86, lengan, pic agak berbeda ... Tapi karena contoh saya adalah x86.

Dan pada tingkat ini ketika Anda membaca salinan sebagian besar tindakan akan terlihat seperti Anda hanya bergerak angka, dan dalam beberapa hal inilah yang terjadi. Kami memiliki program standar yang kami lewati, program ini menyimpan dalam beberapa jenis memori flash yang biasanya semacam logika elektronik yang akan menjebak satu tingkat logika.

Jika Anda melihat semacam " Flip-flop " untuk setiap bit maka Anda agak dekat, dan kemudian kami membutuhkan banyak dari itu. Di sini kita mulai menemukan yang dan nol.

Kemudian agar beberapa tindakan terjadi, kami menambahkan beberapa logika keren yang dapat mengubah satu angka menjadi angka lain (CPU itu sendiri).

Dan kemudian kita mengikuti program satu langkah pada satu waktu, dan untuk mengetahui di mana kita berada kita memiliki penghitung program (PC). Dan memindahkan angka ke belakang dan keempat dan menyimpannya di memori lain yang juga merupakan jenis grid dengan sandal jepit.

Tapi mari kita kembali ke beberapa contoh spesifik lagi, untuk memahami CPU sedikit lebih baik kita bisa melihat ALU dan gambar yang disederhanakan ini . Di mana Anda dapat melihat bahwa ketika kami memindahkan data ke blok logika ini dan memilih beberapa operasi dengan pin OP, kami akan mendapatkan hasil baru pada output. Bahwa kita pada gilirannya dapat pindah kembali ke suatu tempat di memori.

Dan mengutuk ALU Anda di bagian CPU MCU Anda jauh lebih kompleks daripada yang ini, tetapi beroperasi dengan prinsip dasar yang sama.

Pada titik ini kita dapat melihat beberapa rangkaian logika yang melakukan "pekerjaan" di satu sisi, dan beberapa penyimpanan di sisi lain. Dan penyimpanan memiliki dua bagian, satu untuk program dan satu untuk data. Tapi bagaimana kita sebenarnya "bergerak" kalau begitu, mereka harus terhubung dengan beberapa cara ...

Dan di sinilah kita menghubungkan bagian-bagian itu dengan bus.

Bus hanyalah beberapa kabel yang menghubungkan bagian-bagian yang berbeda bersama-sama, dan kemudian logika kontrol memberi tahu memori data apa yang akan dikirim ke bus ini, dan bagian mana dari CPU yang harus mendengarkan data ini yang dikirim. Dan ini dilakukan dengan beberapa garis kontrol paralel yang akan mengaktifkan / menonaktifkan bagian yang berbeda.

...


Jadi, jika Anda memilih MCU pilihan Anda dan membedah program yang sangat kecil, dan selama Anda tidak mengerti apa yang terjadi, Anda membedahnya lebih banyak lagi sampai Anda memiliki puzzle kecil yang bagus yang dapat digunakan untuk membuat "MCU".

Dan jangan lupa untuk membaca lembar data untuk MCU Anda dan lihatlah bagian apa yang dibuatnya, seperti jenis memori, alu, bus dll.

Semoga ini bisa membantu sedikit ???

Semoga berhasil

Johan
sumber
strategi Anda menjelaskannya dengan membagi instruksi membuatnya sangat mudah .. terima kasih ..
VV Rao
2

Anda tidak benar-benar perlu mengetahui hal-hal ini kecuali jika Anda akan mendesain CPU sendiri, tetapi semuanya bermuara pada mesin negara besar yang diimplementasikan dalam perangkat keras.

Masalah terbesar dengan pertanyaan semacam ini adalah bahwa jawabannya sangat besar dan memakan waktu beberapa tahun dari program Universitas, jadi jawaban apa pun yang Anda dapatkan di sini hanya akan menggores permukaan.

Jika Anda benar-benar ingin tahu apa yang masuk ke CPU lihat kode sumber vhdl / Verilog di: http://opencores.org/projects

Hanya belajar vhdl dan Verilog akan menjadi tugas besar sendiri, jadi Anda harus membaca lama :)

dren.dk
sumber
"mesin panggung besar" - yang terdengar seperti produksi Broadway.
OIO
Untungnya, jawaban yang diberikan orang-orang ini tidak membuat saya menggaruk permukaan seperti yang Anda sebutkan, malah membuatnya jernih .. Ngomong-ngomong, terima kasih sobat ..
VV Rao
2

Maksud saya apakah 1 dan 0 ini diubah menjadi tegangan logika yang sesuai (5v dan 0) oleh DAC?

Tidak, bukan DAC. Angka 1 dan 0 tidak pernah benar-benar ada. Itu hanya abstraksi matematis yang kita gunakan untuk mempermudah pemrograman. Tegangan digital sebenarnya mungkin 5 V, atau 3,3 V, atau 1 V, tergantung pada perangkat kerasnya. Pada akhirnya komputer hanyalah logika digital. Memori menyimpan 1s dan 0s sebagai logika digital, sirkuit logika digital mentransfernya dari memori ke prosesor, prosesor adalah sirkuit logika digital yang dapat menambah, mengurangi, atau membandingkan angka biner, dll.

bagaimana sepotong kecil silika ini

Silic sebuah kaca, campuran silikon dan oksigen. Chips terbuat dari silic murni pada , dengan kotoran ditambahkan di tempat-tempat tertentu untuk membuat semua transistor.

Saya mengerti bahwa setiap IC terbuat dari gerbang logika

IC digital dibuat dari gerbang logika, bukan IC analog.

Jadi, bagaimana transistor ini merespons berbagai kombinasi 5v dan 0v?

Baca pada contoh paling sederhana, inverter CMOS .

endolit
sumber
Anda telah menjelaskan bahwa DAC tidak digunakan, 1 dan 0 hanyalah abstraksi matematis yang kami gunakan untuk mempermudah pemrograman. Bisakah Anda menambahkan sedikit lebih detail tentang ini dengan mengacu pada "Kompiler"? kompiler mengubah bahasa tingkat tinggi ke 1 dan 0. Anda mengatakan bahwa 1 dan 0 ini disimpan dalam memori sebagai logika digital, rangkaian logika digital mentransfernya dari memori ke prosesor .. Apa nama perangkat yang melakukan fungsi ini ? Dan lagi, input prosesor akan 5v atau 0v. Jadi perangkat apa yang mengubah angka 1 dan 0 dari memori (sebenarnya dari kompiler) menjadi 5v dan 0v?
VV Rao
1
@Vicky: Tidak ada konversi dari "1" ke 5 V. "1" dan "0" hanyalah label yang kami berikan untuk voltase tinggi dan rendah ketika melakukan matematika dengan angka biner. Untuk logika tingkat rendah sederhana yang tidak beroperasi pada angka biner, itu lebih umum untuk memanggilnya "H" (tinggi) dan "L" (rendah).
Endolith