Tại sao một datapath trong vi điều khiển luôn có sức mạnh bằng 2 chiều rộng?


8

Đường dẫn dữ liệu của vi điều khiển luôn có sức mạnh 2 chiều rộng: 4 bit, 8, 16, 32 bit, v.v ... Ngay cả các PIC sử dụng các lệnh rộng 12 bit là các bộ điều khiển 8 bit. Tại sao? Có bất kỳ lợi thế thiết kế cho điều này? Có gì sai với cơ sở dữ liệu 12 bit hoặc bộ điều khiển 7 bit ?

chỉnh sửa
7 bit không có nhiều ý nghĩa, nhưng đó là điều khiến tôi nghĩ về câu hỏi. Các câu trả lời đề cập đến truyền thống 8 bit. Nhưng 16 bit không phải là 8 bit và 24 bit có thể xử lý dữ liệu 8 bit cũng như 16 bit, phải không? Tại sao họ bỏ qua 24 bit để chuyển sang 32 bit?


7
bất khả xâm phạm anh ta tại cọc!
kenny

@kenny Vâng, tôi cũng bị xúc phạm! :-)
m.Alin

@ m.Alin kinh dị! Trước khi bạn biết điều đó, mọi người sẽ quay trở lại với các thiết kế lát và viết các trình biên dịch riêng của họ.
kenny

Anh ta nên bị kết án 3 năm chỉ sử dụng các loại điện báo mã 5 bit cũ (những mã này có các mã riêng để "dịch chuyển" để truy cập nhiều chữ cái hơn, trong số những niềm vui khác).
Olin Lathrop

2
... bởi vì một chút trong chính nó là sức mạnh của 2? :-P
shimofuri

Câu trả lời:


8

Truyền thống có một sức hút mạnh mẽ. Nhưng khả năng tương tác cũng vậy. Khá nhiều định dạng tệp và giao thức truyền thông hiện có hoạt động trên byte. Làm thế nào để bạn xử lý những điều này trong vi điều khiển 7 bit của bạn?

PIC thoát khỏi nó bằng cách có không gian hướng dẫn hoàn toàn tách biệt và được lập trình trước từ bên ngoài. Có một số giá trị trong việc cạo bit của tập lệnh, vì đó là điều bạn có thể tự kiểm soát mình như một nhà thiết kế vi xử lý.

Nếu bạn muốn một kiến ​​trúc cực đoan, bạn có thể Huffman mã hóa tập lệnh, cung cấp cho bạn độ bit có độ dài thay đổi .


7

Tối thiểu 4 bit hợp lý:
0-9 Dữ liệu số cần 4 bit
0-9 = 10 từ.
Kích thước từ nhị phân cao nhất tiếp theo = 4 bit = 16 từ có thể.
Vậy dữ liệu BCD (mã thập phân nhị phân) = 4 bit

8 bit logic nhảy tiếp theo
0-9, az, AZ = 10 + 26 + 26 = 62 từ.
Có thể xử lý với 7 bit = 128 từ.
8 dễ như 7 và cho phép 2 x 4 bit để dữ liệu số có thể được đóng gói 2 trên mỗi byte 8 bit.

Sau đó 12 bit (không phải 16) ?:
Kích thước logic tiếp theo tăng = 12 bit và PDP-8 đầu tiên và rất thành công đã sử dụng 12 bit. 12 bit được sử dụng cho dữ liệu và chương trình cho phép 2 ^ 12 = 4096 vị trí địa chỉ. Như Bill Gates có thể đã từng nói "4K bộ nhớ là đủ cho bất cứ ai".

Họ PDP-11 sau đây đã sử dụng 16 bit.

Nhân đôi cho khả năng tương thích.
Nếu bạn muốn tương tác với các hệ thống ở cấp thấp hơn và cao hơn và nếu bạn muốn có nhiều thiết bị có khả năng hơn trong cùng một gia đình, thì việc có thể xử lý 2 từ của hệ thống nhỏ hơn trong từ hệ thống lớn hơn có ý nghĩa nhiều.


NHƯNG

Các ngoại lệ chứng minh quy tắc:

"Luôn luôn" là một từ mạnh như vậy :-) ví dụ
1 bit, 12 bit, 18 bit, 36 bit bên dưới.
Máy 18 & 36 bit không bao giờ là vi điều khiển.
1 & 12 bit là.


Hệ thống một bit được đề cập dưới đây thực sự là một hệ thống "bit ngẫu nhiên khi bạn thấy phù hợp". Từ dữ liệu một bit về cơ bản là cờ đi / không đi được tạo ra bởi tính toán và được sử dụng để bật hoặc tắt hoạt động của chương trình. Bộ đếm chương trình là bộ đếm lên tiến qua bộ nhớ theo chu kỳ với mã được bật hoặc tắt theo yêu cầu. Thực sự rất rất rất khó chịu. Vào thời điểm nó xuất hiện trên thị trường, bộ xử lý 8 bit trong ngày đã khá hoàn thiện và bộ xử lý 1 bit không bao giờ thực sự có ý nghĩa nhiều. Tôi không biết bao nhiêu sử dụng nó từng có.


1 chút !!!:

Motorola MC14500B Tôi đã nhận được một đề cập đáng trân trọng của Jack Gansell về mô tả tốt nhất về thiết bị này :-)

Bảng dữ liệu - nhấp vào trang để tải xuống PDF.

nhập mô tả hình ảnh ở đây


12-bit:

Harris HM-6100 aka Intersil IM6100 - Wannabee máy tính mini 12 bit] ( http: // www. Classiccmp.org/dunfield/other/i6100cfs.pdf )

Dựa trên máy tính siêu nhỏ DEC PDP-8 12 bit rất thành công.

Tổng quat

  • Bộ nhớ chương trình và bộ nhớ dữ liệu chiếm cùng một không gian bộ nhớ. Tổng kích thước của bộ nhớ có thể định địa chỉ trực tiếp là 4 K từ. Kích thước từ là 12 bit. 6100 không có bộ nhớ ngăn xếp.

    Kích thước bộ nhớ chương trình là 4 K từ. Tất cả các hướng dẫn có điều kiện cho phép bộ xử lý chỉ bỏ qua hướng dẫn tiếp theo. Để có điều kiện đến địa chỉ tùy ý trong bộ nhớ khi đáp ứng điều kiện nhất định, mã phải thực hiện lệnh "bỏ qua nếu điều kiện không được đáp ứng" trước và đặt lệnh nhảy vô điều kiện trực tiếp hoặc gián tiếp sau lệnh bỏ qua. Hướng dẫn vô điều kiện có thể được sử dụng để nhảy trực tiếp trong trang hiện tại (127 từ) hoặc nhảy gián tiếp trong toàn bộ không gian bộ nhớ (4 K từ). 6100 hỗ trợ các cuộc gọi chương trình con, nhưng do thiếu bộ nhớ ngăn xếp, địa chỉ trả về cho chương trình con được lưu trữ trong bộ nhớ . Không có hướng dẫn "trở về từ chương trình con" - chương trình con nên sử dụng bước nhảy gián tiếp để quay lại người gọi.

    Kích thước bộ nhớ dữ liệu là 4 K từ. Dữ liệu có thể được truy cập trực tiếp trong trang 0 (0000h - 007Fh) hoặc trong trang 127 từ hiện tại. Dữ liệu có thể được truy cập gián tiếp ở bất cứ đâu trong 4 K từ bộ nhớ.

Wikipedia - Intersil 6100

PDP-8 & Intersil 6100 có 16 hướng dẫn rất phong phú. Không có hướng dẫn trừ.
Hướng dẫn ADD được đặt tên là TADD để nhắc nhở bạn rằng đó là phần bổ sung 2 vì vậy chúng tôi không cần ... trừ hướng dẫn.


18 bit, 36 bit khác - họ PDP:

Bộ xử lý dữ liệu được lập trình Wikipedia

PDP1 - 18 bit

PDP2 - 24 bit đã chết

PDP3, PDP6 - 36 bit


Sổ tay người dùng PDP-12 (sơ bộ - Wow.
Mặc dù đánh số này là tiền PDP16 - PDP-8 trên steroid có khả năng I / O tương tự - và máy thí nghiệm kỹ thuật. Tôi có thể có một cái miễn phí nếu tôi muốn, nhưng tôi muốn Nó sẽ không phù hợp với bất cứ nơi nào hợp lý - hoặc không thể cảm nhận được.
Trò chơi máy tính đầu tiên tôi từng chơi là trên một trong số đó.
Chiến tranh không gian.
Máy nằm trong hai tủ có kích thước phòng nhỏ.
Bạn sẽ mở một cánh cửa và bước vào trong để làm công việc với nó nội bộ.


Nếu bạn muốn một phần sản xuất 24 bit, GPU R300 / 420 của ATI (thẻ 9500-X600 và X700-850) phù hợp với hóa đơn.
Dan đang loay hoay bởi Firelight

Ý tưởng về micro một bit có vẻ thú vị, nhưng một con chip như MC14500B hữu ích như thế nào trong thực tế? Tôi nghĩ rằng việc có dữ liệu đầu vào kiểm soát một bit địa chỉ chương trình (sử dụng chốt và bộ ghép kênh 2: 1) sẽ hiệu quả hơn so với cố gắng sử dụng các hướng dẫn để quản lý trạng thái. Tôi đã tìm thấy một bảng dữ liệu từ thời 1990 cho phần này, điều đó cho thấy rằng nó tồn tại trong một thời gian, nhưng tôi tò mò không biết một con chip như vậy sẽ thực sự được sử dụng như thế nào.
supercat

@supercat - Tôi đã tìm thấy một tài liệu tham khảo trong đó một nhà thiết kế cho biết họ có một thiết kế rời rạc dây cũ mà thay thế bằng một cái dựa trên MC14500B và trong vài năm, khách hàng đã mua một số trong số họ. Điều đó nói rằng, một thiết bị tê liệt hơn và không có khả năng sẽ khó tưởng tượng.
Russell McMahon

Tôi thực sự không thể tưởng tượng được tâm lý thiết kế của những năm 1970, nhưng bộ điều khiển ổ đĩa mềm của Steve Wozniak (đặc trưng trong Apple] [) chứng tỏ rằng nó không cần nhiều logic rời rạc để xây dựng một "máy tính". Sau khi xem hướng dẫn sử dụng cho MC14500B đó, tôi đã nghĩ về cách tôi có thể thiết kế một hệ thống để chạy mã từ một PROM bằng cách sử dụng logic rời rạc (bên ngoài chính PROM). Tôi nghĩ rằng sự can đảm trong máy của tôi sẽ là một chốt trong suốt 8 bit, một cú lật 8 bit và một NAND quad, và có thể là độ trễ RC (tùy thuộc vào yêu cầu thiết lập / giữ cho I / O). Một lệnh 16 bit mỗi chu kỳ.
supercat

Bảy bit từ flip flop sẽ điều khiển các bit địa chỉ trên của PROM và bit dưới sẽ được điều khiển bởi đồng hồ. Trong nửa đầu của mỗi chu kỳ, chốt trong suốt sẽ lấy mẫu sáu bit đầu ra hàng đầu (địa chỉ I / O) và thiết bị sẽ thực hiện đọc I / O. Đầu vào I / O sẽ điều khiển bit chốt trong suốt thứ bảy và 3 NAND sẽ hoạt động như một bộ ghép kênh sử dụng đầu vào chốt để chọn Q0 hoặc Q1 từ PROM để cung cấp bit chốt trong suốt còn lại. Trong nửa sau của mỗi chu kỳ, thực hiện ghi I / O với địa chỉ và dữ liệu được chốt.
supercat

7

Bởi vì hầu hết thế giới đã hội tụ về lưu trữ, giao tiếp và xử lý dữ liệu máy tính theo từng khối 8 bit. Nó không phải là một tiêu chuẩn chính thức, nhưng nó là một tiêu chuẩn rất mạnh mẽ.

Trong quá khứ đã có những máy xử lý bội số khác 8 bit trong đường dẫn dữ liệu của chúng. Ví dụ bao gồm loạt CDC Cyber ​​6000 và 7000 và PDP-8. Các máy CDC đã sử dụng byte 6 bit và PDP-8 có từ rộng 12 bit mà không có cách xử lý đặc biệt nào với số lượng chỉ 8 bit. Chắc chắn có các máy khác trong thể loại này quá. Lý do bạn không nghe về chúng nhiều hôm nay là vì mọi người đã quyết định họ muốn các máy có thể xử lý các byte 8 bit của họ một cách độc đáo và đó là những gì các nhà sản xuất tạo ra. Bạn nghĩ vi điều khiển 7 bit sẽ bán tốt đến mức nào? Bất cứ ai làm một người sẽ bị chế nhạo một cách rõ ràng và sau đó tìm thấy một vài khách hàng. Nó sẽ là một đề xuất kinh doanh ngu ngốc.

Bạn có thể thấy một số bằng chứng bổ sung về "byte" không 8 bit nếu bạn xem các tiêu chuẩn internet. Họ cố tình sử dụng thuật ngữ "octet" bởi vì hồi đó không có thỏa thuận chung rằng một byte luôn là 8 bit. Ngày nay, ý nghĩa của byte đã hội tụ thành 8 bit nhị phân và bạn sẽ bị cười ra khỏi thị trấn nếu bạn cố gắng sử dụng nó theo cách khác.


2

Có một chút hiệu quả pha trộn với rất nhiều khả năng tương thích ngược là lý do cho sự lựa chọn thiết kế chung này.

Nếu datapath của tôi rộng 7 bit, tôi cần 3 bit để biểu diễn bất kỳ dòng nào cho đường dẫn đó. Vì tôi sẽ lãng phí ba bit, sau đó tôi cũng có thể sử dụng chúng đầy đủ, cả về hiệu quả và để loại bỏ một con đường chết có thể dẫn đến một lỗi sự cố.

Hầu hết các loại dữ liệu phổ biến dựa trên nibble 4 bit và hầu hết các loại dữ liệu này dựa trên byte 8 bit. Bằng cách chọn sử dụng một cơ sở thay thế, bạn có thể phải sử dụng mã lẻ và không hiệu quả để xử lý các loại dữ liệu phổ biến. Chẳng hạn, máy tính 7 bit của tôi sẽ cần 5 không gian bộ nhớ để xử lý bất kỳ số 32 bit nào, bao gồm cả dấu phẩy động, rất phổ biến trong ngành công nghiệp ngày nay.

Nếu máy của tôi không phụ thuộc vào dữ liệu bên ngoài, tôi có thể thoát khỏi nó, nhưng bộ điều khiển động cơ, bộ mã hóa, cảm biến nhiệt độ và hầu hết các thiết bị và cảm biến giao diện trong thế giới thực đều hỗ trợ các đơn vị tiêu chuẩn như vậy.

Không phải là không thể giao tiếp máy tính 7 bit với cổng USB, nhưng bạn sẽ thực hiện nhiều thử nghiệm bổ sung và chạy nhiều hướng dẫn xử lý tất cả các giao dịch 5 đơn vị đó cho các loại dữ liệu 32 bit nếu bạn muốn đã thêm một chút nữa vào đường dẫn dữ liệu của bạn và phù hợp với phần còn lại của ngành công nghiệp.

Nó phần lớn đã bắt đầu và kết hợp với hình thức hiện tại do hiệu quả của việc đánh địa chỉ bit, tuy nhiên, đó là nguyên nhân gốc rễ. Ví dụ: nếu bạn tạo một máy tính ba (3 trạng thái thay vì 2 trạng thái mỗi bit) thì bạn sẽ thấy kích thước bit hiệu quả nhất ở 3, 9, 27, 81, v.v. Bạn cũng sẽ thấy các nỗ lực kém hiệu quả hơn tại 18, 24, 33 và 66 trong nỗ lực cung cấp khả năng tương thích gần hơn với các hệ thống nhị phân.


1
"Hầu hết các loại dữ liệu phổ biến đều dựa trên nibble 4 bit". Tôi không nghĩ đó là sự thật. Dữ liệu văn bản (có rất nhiều dữ liệu ) dựa trên byte và dữ liệu số (bao gồm nén / mã hóa) thường dựa trên 16 bit hoặc 32 bit. Việc sử dụng dữ liệu 4 bit duy nhất tôi có thể nghĩ đến là BCD, nhưng IMO rất hạn chế.
stevenvh

@stevenvh Tôi nghĩ rằng anh ấy đề cập đến việc sử dụng lớn HEX để nhóm dữ liệu ... Tôi nói điều đó là sự thật, trong các kiến ​​trúc bạn thường thấy sự phân tách này
clabacchio

1

Nó dễ dàng hơn vì nó cho phép bạn chỉ định một số bit trong một số bit. Điều này có vẻ giống như một mẹo vặt, nhưng các bộ hướng dẫn làm điều đó mọi lúc. Hãy suy nghĩ ví dụ về một hướng dẫn "dịch chuyển trái":

SHL R1,4

Nếu bạn có một số bit có sức mạnh bằng hai, bạn có thể mã hóa toán hạng trong một số bit cố định mà không lãng phí.


1
Tôi cũng nghĩ về điều đó, nhưng tôi không chắc đó là lý do đủ để xây dựng một kiến ​​trúc hoàn chỉnh cho nó.
stevenvh

1
Một yếu tố lớn hơn, tôi nghĩ, là khả năng lưu trữ và truy cập dữ liệu trong các mảng bit. Việc sử dụng các mảng như vậy không đại diện cho một phần lớn những gì máy tính làm, nhưng chúng hầu như không phổ biến. Trên một máy có byte 8 bit, phần tử i của một mảng có thể được đọc qua arr[i >> 3] >> (i & 7)hoặc bằng cách kiểm tra xem có arr[i >> 3] & mask[i & 7]khác không (một số CPU ủng hộ một cách tiếp cận so với cách tiếp cận khác). Làm một việc như vậy với kích thước từ không có hai từ sẽ khó hơn nhiều.
supercat

@supercat Không khó hơn nhiều, chỉ chậm hơn nhiều. Một chỉ thay thế một sự thay đổi với một bộ phận. Mà tôi chắc chắn bạn đã biết, nhưng chỉ nghĩ rằng nó đáng để chỉ ra.
Roman Starkov

0

Theo như kiến ​​thức của tôi về điện tử kỹ thuật số có liên quan, lý do dường như khá rõ ràng. Vấn đề là, đối với tất cả các hệ thống kỹ thuật số, chúng tôi sử dụng khái niệm hệ thống số nhị phân. Điều đó có nghĩa là, chúng tôi chỉ có hai cấp độ hoạt động tức là 0 hoặc 1. Vì vậy, bất kỳ sự kết hợp nào có thể có ở cấp độ phần cứng phải là sự kết hợp của 0 và 1. Vì vậy, nếu chúng ta cần thực hiện 4 nhiệm vụ khác nhau thì chúng ta cần 2 biến, đối với 32 nhiệm vụ chúng ta cần 5 biến và cứ thế (logic là 2 ^ n trong đó n là số lượng biến). Vì vậy, vì chúng tôi chỉ giao dịch ở hai cấp độ nên chúng tôi buộc phải có sự kết hợp chỉ có sức mạnh là 2, do đó chiếm tới 2,4,8,16,32,64,128,256, v.v. ..


1
Điều này không giải thích sức mạnh của 2 cho độ dài từ. Bạn đề cập đến độ dài 5 bản thân là đủ cho 32 kết hợp. OP hỏi tại sao không có bộ điều khiển 5 bit.
stevenvh

@stevenvh: Điều đó hoàn toàn tốt thưa ngài. Tôi hiểu rồi. Có lẽ tôi đã không tập trung vào câu hỏi đúng. Cảm ơn bạn.
naved

Tôi đã chuyển câu trả lời của bạn sang một nhận xét mà bạn có thể sử dụng từ hộp bên dưới. Câu trả lời được nhắm mục tiêu để cung cấp nội dung về câu hỏi, phần còn lại là cho ý kiến.
clabacchio

0

Tôi sẽ thừa nhận tôi chỉ đọc lướt qua các câu trả lời khác, nhưng một chi tiết chính dường như chỉ được đề cập gián tiếp: tốc độ logic và sự gọn nhẹ.

Nếu bạn đóng gói các giá trị 24 bit liên tục và cũng có thể truy cập chúng theo kiểu địa chỉ byte, thì logic xử lý sẽ cần chia cho 3 để truy cập từ. Việc phân chia khá tốn kém để thực hiện theo logic (chỉ cần kiểm tra tham chiếu bộ xử lý yêu thích của bạn - hướng dẫn phân chia chậm), trừ khi cụ thể bằng công suất 2; trong trường hợp đó, bạn chỉ cần bỏ qua các bit thấp nhất (phần mềm nào thực hiện bằng cách dịch chuyển bit). Đó là cùng một lý do cơ bản chúng tôi thích truy cập phù hợp.

Tất nhiên có thể thiết kế bộ xử lý xung quanh các giới hạn này, thậm chí có thể mã hóa các truy cập từ làm giá trị địa chỉ thứ tư (vì cần hai bit để chọn trong số ba byte) và tôi sẽ không ngạc nhiên khi thấy điều đó trong một DSP (như GPU); nhưng nó không phải là tiêu chuẩn cho CPU. Nó cũng sẽ kết thúc với một bước 3/4 kỳ lạ cho truy cập mảng byte, cần xử lý tương tự như số BCD. Do đó, nó trở nên hiệu quả hơn nhiều để xử lý một mảng các vectơ 3x8 bit thay vì các byte 8 bit.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.