Mengapa datapath dalam mikrokontroler selalu memiliki kekuatan 2 lebar?

8

Jalur data mikrokontroler selalu memiliki kekuatan 2 lebar: 4 bit, 8, 16, 32 bit, dll. Bahkan PIC yang menggunakan instruksi lebar 12-bit adalah pengendali 8-bit. Mengapa? Apakah ada keuntungan desain untuk ini? Apa yang salah dengan databus 12-bit, atau pengontrol 7-bit ?

sunting
7-bit tidak masuk akal, tapi itulah yang membuat saya memikirkan pertanyaan itu. Jawabannya merujuk pada tradisi 8-bit. Tetapi 16-bit bukan 8-bit, dan 24-bit dapat menangani data 8-bit dan juga 16-bit, bukan? Mengapa mereka melewatkan 24-bit untuk pergi ke 32-bit?

Federico Russo
sumber
7
penistaan ​​membakar dia di tiang pancang!
kenny
@kenny Ya, saya juga marah! :-)
m.Alin
@ m. Llin kengeriannya! Sebelum Anda menyadarinya, orang akan kembali ke desain bit slice dan menulis assembler mereka sendiri.
kenny
Dia harus dihukum 3 tahun hanya menggunakan teletip kode 5-bit lama (ini memiliki kode terpisah untuk "shift" untuk mengakses lebih banyak surat, di antara kesenangan lainnya).
Olin Lathrop
2
... karena sedikit dalam dirinya sendiri adalah kekuatan 2? :-P
shimofuri

Jawaban:

8

Tradisi memiliki daya tarik yang kuat. Tetapi juga interoperabilitas. Hampir setiap format file dan protokol komunikasi yang ada beroperasi pada byte. Bagaimana Anda menangani ini di mikrokontroler 7-bit Anda?

PIC lolos dengan memiliki ruang instruksi yang sepenuhnya terpisah dan diprogram terlebih dahulu dari luar. Ada beberapa nilai dalam mencukur set instruksi, karena itu satu-satunya hal yang bisa Anda kendalikan sebagai perancang mikroprosesor.

Jika Anda menginginkan arsitektur yang ekstrem, Anda bisa memberi kode pada Huffman set instruksi, memberi Anda bitness panjang variabel .

pjc50
sumber
7

4 bit minimum yang masuk akal:
0-9 Data numerik membutuhkan 4 bit
0-9 = 10 kata.
Kata biner tertinggi berikutnya ukuran = 4 bit = 16 kata yang mungkin.
Jadi data BCD (desimal berkode biner) = 4 bit

8 bit lompatan logis berikutnya
0-9, az, AZ = 10 + 26 + 26 = 62 kata.
Dapat menangani dengan 7 bit = 128 kata.
8 adalah semudah 7 dan memungkinkan 2 x 4 bit sehingga data numerik dapat dikemas 2 per 8 bit byte.

Kemudian 12 bit (bukan 16)
?: Berikutnya ukuran logis naik = 12 bit dan PDP-8 awal dan sangat sukses menggunakan 12 bit. 12 bit yang digunakan untuk data dan program memungkinkan 2 ^ 12 = 4096 lokasi alamat. Seperti yang mungkin pernah dikatakan Bill Gates, "Memori 4K sudah cukup untuk siapa pun".

Keluarga PDP-11 berikut menggunakan 16 bit.

Menggandakan untuk kompatibilitas.
Jika Anda ingin bekerja sama dengan sistem pada level yang lebih rendah dan lebih tinggi dan jika Anda ingin memiliki perangkat yang lebih mampu dalam keluarga yang sama, maka mampu menangani 2 kata dari sistem yang lebih kecil dalam kata sistem yang lebih besar masuk akal.


TAPI

Pengecualian yang membuktikan aturan:

"Selalu" adalah kata yang kuat :-)
Contoh 1-bit, 12-bit, 18-bit, 36-bit di bawah ini.
Mesin 18 & 36 bit tidak pernah mikrokontroler.
1 & 12 bit adalah.


Sistem satu-bit yang disebutkan di bawah ini adalah sistem "bit acak yang Anda inginkan". Kata data satu bit pada dasarnya adalah flag go / no-go yang dihasilkan oleh perhitungan dan digunakan untuk mengaktifkan atau menonaktifkan aktivitas program. Penghitung program adalah penghitung atas yang bergerak maju melalui memori secara siklis dengan kode yang diaktifkan atau dinonaktifkan sesuai kebutuhan. Memang sangat sangat sangat jahat. Pada saat itu tiba di pasar prosesor 8 bit hari itu cukup matang dan prosesor 1-bit tidak pernah benar-benar masuk akal. Saya tidak tahu berapa banyak menggunakannya.


1-bit !!!:

Motorola MC14500B Saya mendapat penghargaan terhormat dari Jack Gansell untuk deskripsi terbaik perangkat ini :-)

Lembar Data - klik halaman untuk mengunduh PDF.

masukkan deskripsi gambar di sini


12-bit:

Harris HM-6100 alias Intersil IM6100 - wannabee komputer mini 12 bit] ( http://www.classiccmp.org/dunfield/other/i6100cfs.pdf )

Didasarkan pada komputer mini DEC PDP-8 12 bit yang sangat sukses.

Gambaran

  • Memori program dan memori data menempati ruang memori yang sama. Ukuran total memori yang dapat dialamatkan secara langsung adalah 4 K kata. Ukuran kata adalah 12 bit. The 6100 tidak memiliki memori tumpukan.

    Ukuran memori program adalah 4 K kata. Semua instruksi bersyarat memungkinkan prosesor untuk melewatkan instruksi berikutnya saja. Untuk pergi secara kondisional ke alamat sewenang-wenang dalam memori ketika kondisi tertentu terpenuhi, kode harus menjalankan instruksi "lewati jika kondisi tidak terpenuhi" terlebih dahulu dan letakkan instruksi lompatan tanpa syarat langsung atau tidak langsung setelah instruksi lewati. Instruksi tanpa syarat dapat digunakan untuk melompat langsung dalam halaman saat ini (127 kata), atau melompat secara tidak langsung dalam seluruh ruang memori (4 kata K). The 6100 mendukung panggilan subrutin, tetapi, karena kurangnya memori stack, alamat kembali untuk subrutin disimpan dalam memori . Tidak ada instruksi "kembali dari subrutin" - subrutin harus menggunakan lompatan tidak langsung untuk kembali ke penelepon.

    Ukuran memori data adalah 4 K kata. Data dapat diakses langsung dalam halaman nol (0000h - 007Fh) atau dalam halaman 127 kata saat ini. Data dapat diakses secara tidak langsung di mana saja dalam 4 K kata memori.

Wikipedia - Intersil 6100

PDP-8 & Intersil 6100 memiliki 16 instruksi yang sangat kaya. Tidak ada instruksi pengurangan.
Instruksi ADD diberi nama TADD untuk mengingatkan Anda bahwa itu adalah 2's-melengkapi add sehingga kami tidak perlu ... kurangi instruksi.


18 bit, 36 bit lainnya - keluarga PDP:

Pengolah Data terprogram Wikipedia

PDP1 - 18 bit

PDP2 - 24 bit mati

PDP3, PDP6 - 36 bit


Buku Pegangan Pengguna PDP-12 (pendahuluan - Wow.
Meskipun ada penomoran, ini adalah pra pra PDP16 - PDP-8 tentang steroid dengan kemampuan I / O analog - dan mesin lab teknik. Saya bisa memiliki satu secara gratis jika saya mau, tetapi itu tidak akan cocok dipasang di mana saja masuk akal - atau tidak masuk akal.
Game komputer pertama yang pernah saya mainkan adalah di salah satu dari ini.
Space War.
Mesin berada di dua lemari berukuran kamar kecil.
Anda akan membuka pintu dan berjalan ke dalam untuk melakukan hal-hal untuk itu internal.

Russell McMahon
sumber
Jika Anda menginginkan bagian produksi 24bit, kartu AT300 R300 / 420 GPU (9500-X600, dan X700-850) sesuai dengan tagihan.
Dan Is Fiddling By Firelight
Gagasan mikro satu-bit tampaknya menarik, tetapi seberapa bermanfaatkah chip seperti MC14500B dalam praktiknya? Saya akan berpikir bahwa memiliki data input mengontrol bit alamat program (menggunakan kait dan multiplexer 2: 1) akan lebih efektif daripada mencoba menggunakan instruksi untuk mengelola keadaan. Saya menemukan lembar data era 1990-an untuk bagian itu, yang menunjukkan bahwa itu tinggal sebentar, tapi saya ingin tahu bagaimana chip seperti itu benar-benar akan digunakan.
supercat
@supercat - Saya menemukan satu referensi di mana seorang desainer mengatakan bahwa mereka memiliki desain wirewrap discrete lama yang diganti dengan yang didasarkan pada MC14500B dan selama beberapa tahun klien membeli sejumlah dari mereka. Yang mengatakan, perangkat yang lebih cacat dan tidak mampu akan sulit untuk dibayangkan.
Russell McMahon
Saya tidak bisa membayangkan psikologi desain tahun 1970-an, tetapi pengontrol floppy-drive Steve Wozniak (ditampilkan di Apple) [) menunjukkan bahwa tidak perlu banyak logika diskrit untuk membangun "komputer". Setelah melihat manual untuk MC14500B itu, saya berpikir tentang bagaimana saya bisa merancang sistem untuk menjalankan kode dari PROM menggunakan hanya logika diskrit (di luar PROM itu sendiri). Saya pikir nyali mesin saya akan menjadi kait transparan 8-bit, flip flop 8-bit, dan quad NAND, dan mungkin penundaan RC (tergantung pada persyaratan setup / tahan untuk I / O). Satu instruksi 16-bit per siklus.
supercat
Tujuh bit dari flip flop akan menggerakkan bit alamat atas PROM, dan bit yang lebih rendah akan digerakkan oleh jam. Selama paruh pertama setiap siklus, kait transparan akan mencicipi enam bit output teratas (alamat I / O), dan perangkat akan melakukan pembacaan I / O. Input I / O akan mendorong bit kait transparan ketujuh, dan 3 NAND akan bertindak sebagai multiplexer menggunakan input kait untuk memilih Q0 atau Q1 dari PROM untuk memberi makan bit kait transparan yang tersisa. Selama paruh kedua setiap siklus, lakukan penulisan I / O dengan alamat dan data yang terkunci.
supercat
7

Karena sebagian besar dunia telah berkumpul untuk menyimpan, berkomunikasi, dan menangani data komputer dalam potongan 8 bit. Ini bukan standar resmi, tetapi standar ad-hoc yang sangat kuat.

Di masa lalu ada mesin yang menangani kelipatan selain 8 bit di jalur data mereka. Contohnya termasuk CDC Cyber ​​6000 dan 7000 series dan PDP-8. Mesin CDC menggunakan byte 6-bit, dan PDP-8 memiliki kata lebar 12-bit tanpa cara khusus untuk berurusan dengan kuantitas hanya 8-bit. Pasti ada mesin lain dalam kategori ini juga. Alasan Anda tidak terlalu banyak mendengar tentang mereka saat ini adalah karena orang-orang telah memutuskan bahwa mereka menginginkan mesin yang dapat menangani byte 8-bit mereka dengan baik, dan itulah yang dibuat oleh pabrikan. Menurut Anda seberapa baik mikrokontroler 7-bit akan laku? Siapa pun yang membuatnya akan diejek dengan nyenyak dan kemudian menemukan beberapa pelanggan. Itu akan menjadi proposisi bisnis yang bodoh.

Anda dapat melihat beberapa bukti tambahan "byte" non-8-bit jika Anda melihat standar internet. Mereka sengaja menggunakan istilah "oktet" karena saat itu tidak ada kesepakatan universal bahwa byte selalu 8 bit. Saat ini makna byte telah konvergen berarti 8 bit biner dan Anda akan ditertawakan keluar kota jika Anda mencoba menggunakannya secara berbeda.

Olin Lathrop
sumber
2

Ada sedikit efisiensi yang tercampur dengan banyak kompatibilitas ke belakang sebagai alasan untuk pilihan desain umum ini.

Jika datapath saya adalah 7 bit lebar, saya perlu 3 bit untuk mewakili setiap garis yang diberikan jalur itu. Karena saya akan menyia-nyiakan tiga bit, maka saya mungkin juga menggunakannya sepenuhnya, baik untuk efisiensi maupun untuk menghilangkan jalan mati yang mungkin mengakibatkan bug menabrak.

Jenis data yang paling umum didasarkan pada gigitan 4 bit, dan sebagian besar didasarkan pada byte 8 bit. Dengan memilih untuk menggunakan basis alternatif, Anda mungkin harus menggunakan kode ganjil dan tidak efisien untuk menangani tipe data umum. Sebagai contoh, komputer 7 bit saya akan membutuhkan 5 ruang memori untuk menangani salah satu angka 32 bit, termasuk floating point, yang sangat umum di industri saat ini.

Jika mesin saya tidak tergantung pada data luar, saya mungkin bisa lolos begitu saja, tetapi pengontrol motor, encoder, sensor suhu, dan sebagian besar perangkat antarmuka dan sensor dunia nyata mendukung unit standar tersebut.

Bukannya tidak mungkin untuk menghubungkan komputer 7 bit ke port USB, tetapi Anda akan melakukan banyak pengujian tambahan dan menjalankan lebih banyak instruksi memproses semua transaksi 5 unit untuk tipe data 32 bit daripada yang akan Anda lakukan jika Anda menambahkan sedikit lebih banyak ke jalur data Anda dan jatuh sejalan dengan industri lainnya.

Ini sebagian besar dimulai dan bergabung dengan bentuk saat ini karena efisiensi pengalamatan bit, jadi itulah penyebab utamanya. Jika, misalnya, Anda membuat komputer trinary (3 status daripada 2 state per bit) maka Anda akan melihat ukuran bit paling efisien pada 3, 9, 27, 81, dll. Anda juga akan melihat upaya yang kurang efisien pada 18, 24, 33, dan 66 dalam upaya memberikan kompatibilitas yang lebih dekat dengan sistem biner.

Adam Davis
sumber
1
"Tipe data yang paling umum didasarkan pada gigitan 4 bit". Saya pikir itu tidak benar. Data teks (ada banyak itu) berbasis byte, dan data numerik (termasuk terkompresi / disandikan) seringkali berbasis 16-bit atau 32-bit. Satu-satunya penggunaan data 4-bit yang dapat saya pikirkan adalah BCD, tetapi IMO itu sangat terbatas.
stevenvh
@stevenvh Saya pikir dia merujuk pada penggunaan besar HEX untuk mengelompokkan data ... Saya akan mengatakan itu benar, dalam arsitektur Anda sering melihat dekomposisi ini
clabacchio
1

Lebih mudah karena memungkinkan Anda menentukan jumlah bit dalam jumlah bit. Ini mungkin tampak seperti trik ruang tamu, tetapi set instruksi selalu melakukannya. Pikirkan misalnya instruksi "bergeser ke kiri":

SHL R1,4

Jika Anda memiliki jumlah bit yang berkekuatan dua, Anda dapat menyandikan operan dalam jumlah bit yang tetap tanpa ada pemborosan.

drxzcl
sumber
1
Saya juga memikirkannya, tapi saya tidak yakin itu alasan yang cukup untuk mendasari arsitektur yang lengkap di atasnya.
stevenvh
1
Faktor yang lebih besar, saya pikir, adalah kemampuan untuk menyimpan dan mengakses data dalam bit array. Penggunaan array seperti itu tidak mewakili sebagian besar dari apa yang dilakukan komputer, tetapi mereka jarang. Pada mesin dengan misalnya byte 8-bit, elemen i dari array dapat dibaca melalui arr[i >> 3] >> (i & 7)atau dengan menguji apakah arr[i >> 3] & mask[i & 7]tidak nol (beberapa CPU lebih menyukai satu pendekatan dari yang lain). Melakukan hal seperti itu dengan ukuran non-kekuatan-dua kata akan jauh lebih sulit.
supercat
@supercat Tidak jauh lebih sulit, hanya jauh lebih lambat. Seseorang hanya mengganti shift dengan divisi. Yang saya yakin Anda sudah tahu, tetapi hanya berpikir itu layak menunjukkan.
Roman Starkov
0

Sejauh pengetahuan saya tentang elektronik digital, alasannya tampaknya cukup jelas. Masalahnya, untuk semua sistem digital kami menggunakan konsep sistem bilangan biner. Artinya, kami hanya memiliki dua level operasi, yaitu 0 atau 1. Jadi, kombinasi apa pun yang mungkin pada level perangkat keras harus merupakan kombinasi 0s dan 1s. Jadi jika kita perlu melakukan 4 tugas berbeda maka kita perlu 2 variabel, untuk 32 tugas kita perlu 5 variabel dan seterusnya (logikanya adalah 2 ^ n di mana n adalah jumlah variabel). Jadi, karena kita berurusan hanya dalam dua level, maka kita terikat untuk memiliki kombinasi sebagai kekuatan 2 saja, yang akibatnya memiliki 2,4,8,16,32,64,128,256 dan seterusnya ...... ..

naved
sumber
1
Ini tidak menjelaskan kekuatan 2 untuk panjang kata. Anda menyebutkan sendiri panjang 5 sebagai cukup untuk 32 kombinasi. OP bertanya mengapa tidak ada pengendali 5-bit.
stevenvh
@stevenvh: Tuan baik-baik saja. Saya mendapatkannya. Mungkin saya tidak fokus pada pertanyaan dengan benar. Terima kasih.
naved
Saya telah memindahkan jawaban Anda ke komentar, yang dapat Anda gunakan dari kotak di bawah ini. Jawaban ditargetkan untuk memberikan konten pada pertanyaan, sisanya untuk komentar.
clabacchio
0

Saya akui saya hanya membaca sekilas jawaban lain, tetapi satu detail kunci sepertinya hanya ditujukan secara tidak langsung: kecepatan dan kekompakan logika.

Jika Anda mengemas nilai 24-bit secara bersamaan, dan juga dapat mengaksesnya dengan cara byte yang dialamatkan, maka logika pemrosesan perlu dibagi dengan 3 untuk akses kata. Divisi agak mahal untuk dilakukan dalam logika (cukup periksa referensi prosesor favorit Anda - instruksi divisi lambat), kecuali jika secara khusus dengan kekuatan 2; dalam hal ini, Anda hanya mengabaikan bit terendah (perangkat lunak mana yang dilakukan dengan menggeser bit). Itulah alasan mendasar yang sama kami lebih suka akses selaras.

Tentu saja mungkin untuk merancang prosesor di sekitar batas-batas ini, bahkan mungkin pengkodean kata mengakses sebagai nilai alamat keempat (karena dua bit diperlukan untuk memilih di antara tiga byte), dan saya tidak akan sangat terkejut melihat seperti itu dalam DSP (seperti GPU); tapi itu bukan norma untuk CPU. Itu juga akan berakhir dengan aneh 4/3 melangkah untuk akses array byte, yang akan perlu penanganan mirip dengan angka BCD. Dengan demikian menjadi jauh lebih efisien untuk menangani array vektor 3x8bit daripada 8bit byte.

Yann Vernier
sumber