You are on page 1of 15

1.

kiến trúc harvard và kiến trúc von neumann

Cụm từ kiến trúc Harvard được dùng để chỉ những kiến trúc
máy tính mà trong đó phân biệt rõ ràng bộ nhớ dữ liệu và bộ
nhớ chương trình, chúng có những đường truyền (bus) riêng để
truy cập vào bộ nhớ dữ liệu và bộ nhớ chương trình (ngược lại,
kiến trúc von Neumann có bộ nhớ và bộ nhớ chương trình
chung). Kiến trúc Harvard bắt đầu với máy tính Harvard Mark I,
nó cho phép các lệnh được đặt trong các tape đục lỗ (với 24 bit)
và dữ liệu thì được chứa trong các thẻ (với 23 ký tự). Những
máy tính đầu tiên này rất giới hạn dung lượng dữ liệu, nó được
chứa hoàn toàn trong bộ xử lý trung tâm (CPU), và không cho
phép truy cập vào khu vực chứa lệnh (chương trình) như với dữ
liệu (làm cho việc tạo, load, sửa chữa, v.v. toàn bộ chương trình
phải được thực hiện offline).

Trong một máy tính sử dụng kiến trúc von Neumann, CPU có
thể đọc một lệnh, hoặc đọc/ghi dữ liệu từ bộ nhớ. Tuy vậy, cả
hai quá trình tương tác với lệnh hoặc với dữ liệu, không thể thực
hiện cùng lúc, vì nó sử dụng chung một đường truyền và bộ nhớ.
Trong một máy tính kiến trúc Harvard, CPU có thể vừa đọc một
lệnh, vừa truy cập dữ liệu từ bộ nhớ cùng lúc. Một máy tính kiến
trúc Harvard có thể chạy nhanh hơn, bởi vì nó có thể thực hiện
ngay lệnh tiếp theo khi vừa kết thúc lệnh trước đó. Tốc độ được
tăng lên nhưng phải trả giá bằng sự thiết kế phần cứng phức tạp
hơn (cụ thể nhất mà chúng ta thấy, đó là việc phải thiết kế 2 bus
khác nhau cho dữ liệu và chương trình).

Những năm gần đây, tốc độ CPU tăng lên rất nhiều lần so với
tốc độ truy cập vào bộ nhớ chính. Người ta cần quan tâm đến
việc giảm số lần truy cập vào bộ nhớ để đảm bảo tốc độ hoạt
động của CPU. Nếu, trong cùng một lúc, mỗi lệnh của CPU cần
phải truy cập vào bộ nhớ 1 lần, vậy thì việc tăng tốc độ CPU
chẳng còn ý nghĩa gì nữa, bởi vì nó luôn luôn bị giới hạn bởi
việc truy cập vào bộ nhớ.

Bộ nhớ có thể được thiết kế để có tốc độ truy cập cao, nhưng nó


đồng nghĩa với việc giá sản xuất sẽ cao. Giải pháp là cung cấp
một dung lượng nhỏ bộ nhớ đệm, với tốc độ truy cập rất cao, và
chúng ta gọi đó là cache (bộ nhớ đệm). Khi bộ nhớ CPU cần
tương tác đang nằm trong cache, vì việc tương tác vào đó tốn ít
thời gian hơn rất nhiều lần so với khi cache phải thay đổi và lấy
dữ liệu từ bộ nhớ chính đưa vào. Việc điều chỉnh cache là một
vấn đề quan trọng trong việc thiết kế máy tính.

Những thiết kế chip CPU tốc độ cao ngày này thường kết hợp
hai kiến trúc Harvard và von Neumann. Bộ nhớ cache trên chip
được phân thành cache chương trình và cache dữ liệu. Kiến trúc
Harvard được dùng khi CPU truy cập vào cache. Tuy nhiên,
trong trường hợp không có cache, dữ liệu được lấy từ bộ nhớ
chính, mà bộ nhớ chính không được chia thành vùng nhớ
chương trình và vùng nhớ dữ liệu. Như vậy, kiến trúc von
Neumann được dùng ở tầm vực truy cập bộ nhớ chính.

Kiến trúc Harvard cũng thường được dùng trong một số DSP
chuyên dụng, thường dùng trong các sản phẩm xử lý âm thanh,
hình ảnh. Ví dụ như vi xử lý Blackfin của Analog Devices Inc.
dùng kiến trúc Harvard.

Thêm vào đó, hầu hết các vi điều khiển thông dụng được dùng
trong các ứng dụng điện tử như là PIC được sản xuất bởi
Microchip Technology Inc và AVR của hãng Atmel
Corporation, được phát triển dựa trên kiến trúc Harvard. Những
vi xử lý này có đặc tính là có lượng bộ nhớ dữ liệu và bộ nhớ
chương trình nhỏ, rất phù hợp với kiến trúc Harvard và tập lệnh
RISC để đảm bảo hầu hết các lệnh được thực hiện trong 1 chu
kỳ máy. Việc phân chia bộ nhớ ra thành bộ nhớ chương trình và
bộ nhớ dữ liệu có thể làm cho bus dữ liệu và bus chương trình
có kích thước băng truyền khác nhau. Ví dụ như các vi điều
khiển PIC có bus dữ liệu 8-bit (phụ thuộc vào dòng PIC), nhưng
bus chương trình có thể là 12-bit, 14-bit hoặc 16-bit word. Điều
này cho phép mỗi một lệnh đơn có đủ chỗ chứa cho một giá trị
hằng. Những CPU RISC khác, ví dụ như ARM, thường cần ít
nhất 2 lệnh để load một hằng số đủ kích thước..

2. Timer là gì?
time là thời gian.
Vậy timer là bộ tạo thời gian
đầu vào của timer là một xung nhịp chuẩn (về tần số) còn đầu ra nó là một số đếm
xung nhịp đó. Hiện nay trong vi xử lý chúng ta thấy khái niệm timer. theo cách hiểu
của mình thì đặc điểm của nó vẫn như vậy. Đầu vào là xung clock và đầu ra là số
đếm.
Tuy nhiên trong timer của vi xử lý nó còn được kết hợp thêm nhiều các tính năng
khác. như ngắt, so sánh, các thanh ghi chức năng... Muốn biết chức năng của timer là
gì thì cần phải đặt nó vào trong 1 con vi xử lý nhất định và với một chức năng nào đó.
______________

Có lẽ lần sau bạn (và các bạn khác) không nên dùng cụm từ này. Biết lên diễn đàn
để đặt câu hỏi thì không ... tý nào. OK!
Về Timer, bạn nbb3i đã nói đúng rồi. Mình chỉ có thêm ý kiến:
- Timer: mình đọc là "Bộ định thời".
- Bản chất: là một bộ đếm xung (cho nên trong VDK có cụm từ Timer/Counter là
thế). Chỉ có điều khi làm việc ở chế độ định thời thì xung kích (có tần số ổn định)
được tạo ra ngay bên trong VDK (còn ở chế độ Counter thì xung kích lấy ở bên
ngoài qua chân VDK). Giả sử tần số xung kích là F (Hz) => chu kỳ xung là 1/F (s)
=> sau N chu kỳ thì thời gian mà Timer cho biết là (1/F)*N (s). Nhưng lưu ý là
thanh ghi của Timer chỉ lưu giá trị N chứ không lưu giá trị thời gian (1/F)*N. Giá
trị này phải do người lập trình tính toán. GL!

timer(tieng Anh) tam dich la thi-gio hay thoi-gian.


Thuong dung de an-dinh ngay gio kich hoat cho chay hoac ngung mot bo phan.
Thi du: muon den hoac 1 dong- co khoi dong chay luc 1gio trua va ngung o 3 gio trua
thi phai dung timer de an- dinh thoi gian.Chuc vui

3. pwm

PWM là cái gì mà sao nó được ứng dụng nhiều trong điều khiển. Lấy điển hình nhất
mà chúng ta thường hay gặp là điều khiển động cơ và các bộ băm xung áp, điều áp...
Sử dụng PWM điều khiển nhanh chậm của động cơ hay cao hơn nữa nó còn được
dùng để điều khiển ổn định tốc độ động cơ.

Ngoài lĩnh vực điều khiển hay ổn định tải thì PWM nó còn tham gia và điều chế các
mạch nguồn như là : boot, buck, nghịch lưu 1 pha và 3 pha...PWM chúng ta còn gặp
nhiều trong thực tế và các mạch điện điều khiển. Điều đặc biệt là PWM chuyên dùng
để điều khiển các phần tử điện tử công suất có đường đặc tính là tuyến tính khi có sẵn
1 nguồn 1 chiều cố định .Như vậy PWM nó được ứng dụng rất nhiều trong các thiết bị
điện điện tử. Điều mà dân điện điện tử dễ dàng nhận ra là PWM chính nhân tố mà các
đội Robocon sử dụng để điều khiển động cơ hay ổn định tốc độ động cơ.Bài viết này
sẽ nói lên phương pháp điều khiển PWM và các thông số cơ bản của PWM.

1 ) PWM là gì?
Trước khi tìm hiểu sâu chúng ta hãy tìm hiểu định nghĩa của PWM là gì? Như vậy
Phương pháp điều chế PWM có tên tiếng anh là Pulse Width Modulation là phương
pháp điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự
thay đổi độ rộng của chuỗi xung vuông dẫm đếm sự thay đổi điện áp ra
Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng của sườn dương
hay hoặc là sườn âm

Sơ đồ nguyên tắc điều khiển tải dùng PWM

Trên là đồ thị dạng xung khi điều khiển bằng PWM. Với độ rộng xung đầu ra tương
ứng và được tính bằng %. Tùy thích do chúng ta điều khiển.

2 ) Nguyên lý của PWM.


Đây là phương pháp được thực hiện theo nguyên tắc đóng ngắt nguồn cới tải và một
cách có chu kì theo luật điều chỉnh thời gian đóng cắt. Phần tử thực hiện nhiện vụ đó
trong mạch các van bán dẫn.
Xét hoạt động đóng cắt của một van bán dẫn. DÙng van đóng cắt bằng Mosfet

Giản đồ xung
Trên là mạch nguyên lý điều khiển tải bằng PWM và giản đồ xung của chân điều
khiển và dạng điện áp đầu ra khi dùng PWM.

* Nguyên lý : Trong khoảng thời gian 0 - to ta cho van G mỏ toàn bộ điện áp nguồn
Ud được đưa ra tải. Còn trong khoảng thời gian to - T cho van G khóa, cắt nguồn
cung cấp cho tải. Vì vậy với to thay đổi từ 0 cho đến T ta sẽ cung cấp toàn bộ , một
phần hay khóa hoàn toàn điện áp cung cấp cho tải.
+ Công thức tính giá trị trung bình của điện áp ra tải :
Gọi t1 là thời gian xung ở sườn dương (khóa mở ) còn T là thời gian của cả sườn âm
và dương, Umax là điện áp nguồn cung cấp cho tải.

==> Ud = Umax.( t1/T) (V)


hay Ud = Umax.

với D = t1/T là hệ số điều chỉnh và được tính bằng % tức là PWM


Như vậy ta nhìn trên hình đồ thị dạng điều chế xung thì ta có : Điện áp trùng bình trên
tải sẽ là :
+ Ud = 12.20% = 2.4V ( với D = 20%)
+ Ud = 12.40% = 4.8V (Vói D = 40%)
+ Ud = 12.90% = 10.8V (Với D = 90%)

4. RISC VÀ CISC

RISC (viết tắt của Reduced Instructions Set Computer - Máy tính với tập lệnh đơn
giản hóa) là một phương pháp thiết kế vi xử lý (VXL) theo hướng đơn giản hóa tập
lệnh, trong đó thời gian thực thi tất cả các lênh đều như nhau. Hiện nay các vi xử lý
RISC phổ biến là PIC, ARM, DEC Alpha, PA-RISC, SPARC, MIPS, và PowerPC
của IBM.

Ý tưởng bắt đầu khi người ta nhận thấy rất nhiều tính năng trong các VXL vốn được
thiết kế nhằm giúp công việc lập trình trở nên dễ dàng hơn lại thường bị các phần
mềm bỏ sót. Những tính năng này thông thường cần vài chu kỳ máy để thực hiện.
Cộng thêm sự cách biệt về hiệu suất giữa các CPU và bộ nhớ chính đã dẫn đến nhiều
kỹ thuật hoặc nhằm tổ chức lại quá trình thực thi trong bộ xử lý hoặc nhằm giảm bớt
số lần truy xuất bộ nhớ.
Định hướng thiết kế RISC

Những năm cuối của thập kỷ 70, những nhà nghiên cứu của IBM (và cả một số dự án
khác) nhận thấy rằng các phương pháp đánh địa chỉ trực giao thường bị các phần
mềm bỏ qua. Đây chính là kết quả không mong đợi do sử dụng các trình biên dịch cấp
cao thay vì sử dụng hợp ngữ. Các trình dịch tại thời điểm đó không đủ khả năng để
tận dụng hết những lệnh phức của các VXL CISC; chủ yếu là do sự khó khăn trong
thiết kế trình dịch. Trình biên dịch càng trở nên phổ biến thì những lệnh này càng bị
bỏ quên.

Mặt khác những lệnh phức này ít được dùng vì thực ra chúng được thực thi chậm hơn
một nhóm vi lệnh cùng thực hiện chức năng đó. Đây giống như 1 nghịch lý của quá
trình thiết kế VXL, vì người thiết kế không có đủ thời gian để tối ưu cho tất cả các
lệnh, do đó họ chỉ chú trọng đến những lênh thường được sử dụng nhiều nhất. Và tất
nhiên những lệnh phức là những lệnh ít được sử dụng nhất. Ví dụ cụ thể nhất có lẽ là
lệnh INDEX của VAX, sẽ nhanh hơn từ 45% đến 60% nếu lệnh này được thay bởi 1
nhóm các lệnh VAX đơn giản khác
(http://www.sasktelwebsite.net/jbayko/cpuAppendA.html)

Cũng trong thời gian này, CPU bắt đầu hoạt động nhanh hơn bộ nhớ. Thậm chí trong
những năm 70, người ta cho rằng điều này sẽ còn tiếp tục không dưới 1 thập kỷ nữa,
đến lúc đó CPU sẽ nhanh hơn bộ nhớ hàng chục tới hàng trăm lần. Dường như đã đến
lúc CPU cần thêm nhiều thanh ghi (sau này gọi là caches) để có thể hoạt động ở tốc
độ cao hơn. Những thanh ghi và bộ nhớ đệm mới sẽ cần những khoảng trống trên
board hoặc trên chip được tạo ra khi giảm sự phức tạp của CPU.

Lúc này, một phần đóng góp cho kiến trúc RISC đến từ thực tế đo đạc những chương
trình trong thế giới thực. Andrew Tanenbaum từ tổng kết rất nhiều đo đạc này chỉ ra
rằng hầu hết những CPU lúc bấy giờ đều được thiết kế thừa quá mức. Ví dụ, ông cho
rằng 98% các hằng số hoàn toàn có thể biểu diễn bằng 13 bit, trong khi các CPU được
thiết kế theo bội số của 8 thường là 8, 16 hoặc 32. Do đó nếu CPU cho phép các hằng
được lưu trong những bit dư của mã lệnh sẽ bớt đi rất nhiều lần phải truy xuất bộ nhớ.
Thay vì phải đọc từ bộ nhớ hay từ thanh ghi, các hằng đã ở ngay đó khi CPU cần, vì
thế quá trình thực thi sẽ nhanh hơn. Tất nhiên điều này lại yêu cầu mã lệnh phải thật
nhỏ để những lệnh 32 bit có thể chứa được những hằng tương đối lớn.

Những chương trình trong thực tế thường dành phần lớn thời gian để thực hiện một số
tác vụ đơn giản, do đó một số nhà nghiên cứu hướng tới việc tối ưu hóa những tác vụ
này. Do xung nhịp của CPU bị giới hạn bởi thời gian thực hiện lệnh chậm nhất, nên
nếu tối ưu lệnh này (có thể bằng cách giảm số phương pháp đánh địa chỉ mà nó hỗ
trợ) sẽ khiến cho toàn bộ tập lệnh được thực thi nhanh hơn. Mục tiêu của RISC là đơn
giản hóa các lệnh, để mỗi lệnh có thể được thực thi chỉ trong 1 chu kỳ máy. Việc tập
trung đơn giản hóa các lệnh đã cho ra đời các loại “Máy tính với tập lệnh được giảm
thiểu - RISC” .

Rất tiếc cụm từ “Máy tính với tập lệnh được giảm thiểu” thường bị hiểu sai là máy
tính với tập lệnh ít hơn các máy tính khác. Thực ra RISC lại thường có tập lệnh rất
lớn. Cũng từ khuynh hướng đơn giản hóa đó, một số thiết kế thú vị ra đời như
Minimal Instruction Set Computer (MISC) hay One Instruction Set Computer (OISC)
với những máy tính như Transport Triggered Architectures, trong khi các thiết kế
khác đi sâu vấn đề Turing tarpit.

Điểm khác biệt thực sự giữa RISC so với CISC là nguyên tắc thực hiện mọi thứ trong
các thanh ghi, đọc và lưu dữ liệu vào các thanh ghi. Do đó để tránh hiểu lầm nhiều
nhà nghiên cứu thích dùng thuật ngữ load-store.

Qua thời gian, các kỹ thuật thiết kế cũ được gọi là Complex Instruction Set Computer
–CISC. dù rằng thuật ngữ này thường chỉ được dùng với mục đích so sánh.

Giờ đây để thực hiện cùng một công việc, chương trình được viết với những lệnh đơn
giản thay vì với 1 lệnh phức tạp, tổng số các lệnh phải đọc từ bộ nhớ nhiều hơn do đó
cũng mất nhiều thời gian hơn. Tại thời điểm đó người ta chưa biết khuyết điểm này có
còn đảm bảo sự ưu việt hơn về hiệu suất của RISC hay không, và hầu như đó đã là 1
cuộc chiến dai dẳng về khái niệm RISC.

Định hướng thiết kế trước thời RISC

Những ngày đầu của ngành công nghiệp máy tính, trình biên dịch chưa xuất hiện.
Công việc lập trình được thực hiện hoặc bằng ngôn ngữ máy (mã nhị phân) hoặc bằng
hợp ngữ. Để việc lập trình đơn giản, các VXL được thêm những lệnh có thể biểu diễn
trực tiếp những cấu trúc của ngôn ngữ lập trình cấp cao. Lúc đó thiết kế phần cứng dễ
hơn nhiều so với thiết kế trình dịch, vì thế mọi phức tạp đều dồn vào phần cứng.

Một nguyên nhân khác thúc đẩy sự ra đời của những lệnh phức là sự thiếu thốn bộ
nhớ. Do bộ nhớ quá nhỏ, do đó sẽ có lợi hơn nhiều nếu tăng mật độ tập trung thông
tin trong mã lệnh. Khi mà mỗi byte bộ nhớ còn quá đắt, bộ nhớ chính của toàn bộ hệ
thống ở thời kỳ này chỉ vài KB, ngành công nghiệp VXL bị thúc đẩy phải mã hóa thật
cao mã lệnh, mã lệnh có thể có kích thước thay đổi, 1 lệnh có thể thực hiện nhiều
phép toán hoặc một lệnh có thể vừa chuyển dữ liệu vừa xử lý dữ liệu. Lúc đó việc đưa
ra một lệnh nén thật tốt được ưu tiên hơn là đưa ra một lệnh dễ giải mã.

Lúc này bộ nhớ được sản xuất bằng công nghệ từ do đó nó không những đã ít mà còn
chậm. Đây cũng là 1 lý do để tăng mật độ thông tin trong một mã lệnh. Một mã lệnh
với nhiều thông tin sẽ giảm được rất nhiều lần phải truy xuất nguồn bộ nhớ chậm chạp
này.
Những CPU thời kỳ này chứa ít thanh ghi vì những lý do sau:
1. Một bit trong CPU bao giờ cũng mắc hơn rất nhiều so với 1 bit ở bộ nhớ ngoài.
Với công nghệ tích hợp ở thời kỳ này muốn có thêm thanh ghi bắt buộc phải có
thêm vùng trống trên board hoặc trên chip.
2. Một lượng lớn thanh ghi cũng sẽ cần 1 lượng lớn các bit trong mã lệnh để xác
định các thanh ghi đó.

Vì những lý do trên, những nhà thiết kế VXL cố gắng để mỗi lệnh có thể thực
hiện càng nhiều chức năng càng tốt. Điều này dẫn đến một lệnh sẽ làm tất cả công
việc như nạp 2 số cần cộng, cộng chúng lại, và cuối cùng lưu trở lại vào bộ nhớ.
Cũng lệnh đó lại có thể đọc 1 số từ thanh ghi và số còn lại từ bộ nhớ sau đó lưu
kết quả vào bộ nhớ. Khuynh hướng thiết kế VXL này được gọi là Complex
Instruction Set Computer – CISC

Mục đích chung của thời kỳ này là mỗi lệnh hỗ trợ càng nhiều phương pháp đánh
địa chỉ càng tôt, đây chính là lý thuyết trực giao. Điều này dẫn đến một số phức
tạp cho CPU, mặc dù theo lý thuyết mỗi lệnh có thể được tối ưu riêng rẽ, làm quá
trình thiết kế nhanh hơn nếu người lập trình sử dụng các lệnh đơn giản.

Sự tương phản rõ ràng nhất đến từ 2 VXL: 6502 và VAX. Chip 6502 có giá $25
với 1 thanh ghi duy nhất, và bằng cách tối ưu giao tiếp bộ nhớ nó có thể hoạt động
ở tốc độ cao hơn so với thiết kế ban đầu. VAX vốn là 1 máy tính nhỏ, nó cần tới 1
tá các thiết bị phụ và được đặc biệt chú ý bởi một lượng rất lớn các kiểu đánh địa
chỉ mà nó hỗ trợ, cũng như lệnh nào của nó cũng đều hỗ trợ các kiểu đánh địa chỉ
đó.

Cùng lúc đó...

Trong khi những khái niệm về RISC đang dần được hoàn thiện thì những ý tưởng
nhằm cải tiến hiệu suất cho các CPU cũng bắt đầu ra đời.

Những năm đầu thập kỷ 80, người ta sợ rằng, về lý thuyết, công nghệ thiết kế
VXL đã đạt đến giới hạn. Sự cải tiến chỉ còn có thể thực hiện với công nghệ bán
dẫn, như giảm kích thước của transistor hoặc của dây nối trên chip. Dù độ phức
tạp của chip không đổi nhưng với kích thước nhỏ hơn nó vẫn có thể hoạt động ở
tốc độ cao hơn. Cũng có nhiều cố gắng để thiết kế các chip xử lý song song. Thay
vì làm cho chip nhanh hơn người ta làm cho nhiều chip có khả năng cùng chia xẻ
các tác vụ. Tuy nhiên lịch sử đã chứng minh rằng nhận định lúc đầu là sai lầm, rất
nhiều ý tưởng ra đời cuối thập kỷ 80 đã cải tiến một cách toàn diện hiệu suất của
các VXL thời kỳ này.

Ý tưởng đầu tiên có lẽ là “kênh dẫn” (pipeline). Đây là một kỹ thuật nhằm chia
nhỏ quá trình thực thi 1 lệnh thành nhiều bước, và các bước khác nhau của các
lệnh khác nhau có thể được thực thi đồng thời. Một bộ xử lý thông thường đọc
một lệnh, giải mã nó, đọc những vùng nhớ lệnh đó cần, thực thi lệnh, trả kết quả
về. Với kỹ thuật “kênh dẫn”, bộ xử lý có thể đọc một lệnh ngay sau khi nó đọc
xong lệnh trước đó, tức là nó vừa giải mã 1 lệnh vừa đọc lệnh kế tiếp, tới chu kỳ
tiếp theo bộ xử lý sẽ làm việc với 3 lệnh cùng lúc, và cứ thế tiếp tục. Dù thực tế
không có lệnh nào được thực thi nhanh hơn, nhưng do lệnh theo sau sẽ hoàn thành
ngay sau khi lệnh trước hoàn tất nên đây là một giải pháp rất hiệu quả nhằm tận
dụng tối đa tài nguyên của các VXL.

Một phương án khác là dùng nhiều đơn vị xử lý song song trong cùng một bộ xử
lý. Thay vì thực thi 1 lệnh bộ xử lý sẽ tìm cách thực thi đồng thời lệnh kế tiếp
trong một đơn vị xử lý khác. Tuy nhiên đây là 1 phương án khó vì nhiều lệnh đôi
khi lại phụ thuộc vào kết quả của lệnh trước nó.

Cả 2 phương pháp trên hướng tới việc cải tiến bằng cách tăng độ phức tạp của
CPU. Vì không gian trên chip là có hạn do đó để thêm những tính năng mới này
người ta cần bỏ đi những tính năng khác. Vì thế RISC là kẻ được hưởng lợi trước
tiên do về cấu trúc nó đơn giản hơn CISC rất nhiều. Những thiết kế RISC đầu tiên
nhanh chóng được thêm những tính năng mới giúp chúng vuợt qua những chip
CISC tương ứng. Lúc này người ta bắt đầu tính đến việc thêm những tính năng
này vào những chip CISC trong khi vẫn đảm bảo kích thước của chúng, công việc
này kéo dài suốt những năm cuối thâp kỷ 80 và đầu 90.

Dù ở bất kỳ cấp độ nào, đơn vị logic của 1 chip RISC bao giờ cũng cần ít
transistor hơn so với của 1 chip CISC. Điều này giúp người thiết kế có rất nhiều
sự linh hoạt, ví dụ họ có thể:
1. Tăng số lượng thanh ghi.
2. implement measures to increase internal parallelism
3. Tăng kích thước cache
4. Thêm các tính năng như I/O, timer v.v…
5. Thêm các bộ xử lý vector.
6. build the chips on older fabrication lines, which would otherwise go unused
7. Cung cấp những chip cho những ứng dụng có yêu cầu cao về thời gian sử dụng
pin hoặc về kích thước chip.

Những đặc điểm thường thấy trong 1 chip RISC:


1. Định dạng chuẩn mã lệnh (ví dụ lệnh có chiều dài cố định, các bit của mã lệnh
luôn nằm ở vị trí cố định trong mã lệnh) sẽ làm quá trình giải mã lệnh đơn giản
hơn.
2. Các thanh ghi đồng nhất, do đó chúng có thể được sử dụng thay thế nhau trong
mọi tình huống (tuy nhiên các thanh ghi dành cho số nguyên và số thực dấu chấm
động vẫn phân biệt nhau).
3. Cách đánh địa chỉ đơn giản. Để có những phương pháp đánh địa chỉ phức tạp
cần kết hợp với các phép toán số học.
4. Hỗ trợ rất ít kiểu dữ liệu (một số chip CISC có thể có cả các lệnh thao tác với
chuỗi, xử lý số phức hoặc ma trận. Những lệnh như thế chẳng bao giờ tồn tại trong
1 chip RISC).

VXL RISC được xây dựng dựa kiến trúc Harvard, trong đó bus dữ liệu và bus
chương trình tách rời nhau. Điều này giúp cho quá trình đọc dữ liệu và mã lệnh có
thể xảy ra đồng thời do đó có khả năng nâng cao hiệu suất của VXL.

Một trong những điểm yếu của các VXL RISC thế hệ đầu tiên là hiệu ứng branch
delay slot. Hiệu ứng này xảy ra khi có 1 lệnh nhảy có điều kiện, lúc đó dù có thực
hiện nhảy hay không thì một hoặc một số lệnh theo sau vẫn được thực thi do các
lệnh này đã được đưa vào pipeline trong lúc lệnh nhảy đang được xử lý. Điều này
gây ra một khoảng thời gian trễ khi thực thi lệnh nhảy có điều kiện. branch delay
slot không những xuất hiện trong những VXL RISC như MIPS, PA-RISC và
SPARC mà còn cả trong các DSP như µPD77230 hoặc TMS320C3x. Tuy nhiên
ngày nay trong các thiết kế RISC hiện đại người ta đã có thể loại bỏ được hiệu
ứng này.

Những RISC đầu tiên...

VXL RISC đựoc biết đến đầu tiên là siêu máy tính CDC 6600 được Jim Thornton
và Seymour Cray thiết kế năm 1964, nó có 74 mã lệnh (8086 có 400 mã lệnh)
cộng với 12 máy tính đơn giản được gọi là “bộ xử lý ngoại vi” để xử lý I/O. CDC
6600 sử dụng kiến trúc load-store, nó hỗ trợ 2 phương pháp đánh địa chỉ, có 11
đơn vị đuợc “kênh dẫn hóa”, năm đơn vị đọc dữ liệu và 2 đơn vị để lưu dữ liệu
(bộ nhớ của nó được tổ chức theo bank do đó các đơn vị đọc ghi có thể hoạt động
đồng thời). Tốc độ xung đồng hồ/lệnh nhanh hơn 10 lần so với tốc độ truy xuất bộ
nhớ.

Một máy tính khác được thiết kế trên với kiến trúc load-store là Data General
Nova. Đây là một máy tính nhỏ 16 bit được thiết kế năm 1968 bởi 1 công ty Mỹ
tên là Data General.

Tuy nhiên VXL RISC được biết nhiều nhất lai đến từ một dự án được tài trợ bởi
chương trình VLSI (Very Large-Scale Integration) của DARPA (Defense
Advanced Research Projects Agency). Chương trình trên đã cho ra đời rất nhiều
cải tiến liên quan đến thiết kế, sản xuất chip và cả đồ họa máy tính.

Dự án RISC của Đại học Caifornia, Berkeley bắt đầu năm 1980 dưới sự hướng
dẫn của David Patterson với mục đích nâng cao hiệu suất của các VXL dựa trên
kỹ thuật pipeline và register windows. Một VXL thông thường có khá ít thanh ghi,
các chương trình có thể tùy ý sử dụng các thanh ghi đó bất cứ lúc nào. Còn đối với
các VXL sử dụng kỹ thuật register windows, có rất nhiều thanh ghi trong VXL
nhưng chương trình chỉ sử dụng cùng lúc một tập hợp nhỏ các thanh ghi. Vì thông
thường mỗi lần gọi 1 chương trình con, VXL cần lưu lại giá trị một số thanh ghi
và sau đó hồi phục lại các thanh ghi đó khi thực hiện lệnh return. Vì vậy bằng
cách chuyển từ tập thanh ghi này sang tập thanh ghi khác (chuyển cửa sổ) chương
trình có thể thực hiện các lệnh gọi hàm hoặc lệnh trả về một cách nhanh chóng.

Dự án RISC cho ra đời VXL RISC-I năm 1982. VXL này chứa 44.420 transistor
(so với 100.000 transistor cho 1 VXL CISC), với 32 lệnh nhưng hoàn toàn vượt xa
các VXL đơn chip cùng thời. VXL RISC-II ra đời năm 1983 với 39 lệnh, chứa
40.760 transistor và nhanh gấp 3 lần RISC-I.

Cũng khoảng thời gian đó John L. Hennessy thực hiện dự án MIPS ở Đại học
Stanford năm 1981. MIPS hầu như chỉ tập trung vào kỹ thuật pipeline nhằm tận
dụng tối đa khả năng của các VXL. Cho dù đã được sử dụng trước đó, nhưng với
MIPS, kỹ thuật này đã thực sự được cải tiến vượt bậc. Nhưng vấn đề quan trọng
nhất ở đây, và có lẽ cũng phiền toái nhất, là nó đòi hỏi tất cả các lệnh bắt buộc
phải được thực thi trong 1 chu kỳ máy. Nếu đáp ứng được yêu cầu này, pipeline
có thể hoạt động ở tốc độ rất cao và đây hầu như là yếu tố quyết định đến tốc độ
của VXL. Tuy nhiên nó cũng có mặt trái là phải bỏ đi rất nhiều lệnh có ích như
nhân, chia.

Hầu hết các dự án kể trên đều nhằm mục đích cải tiến các kỹ thuật hiện có, phải
chờ tới năm 1975, dự án đầu tiên nhằm cho ra đời 1 chip RISC hoàn chỉnh mới
được thực hiện ở IBM. Được đặt tên theo số của ngôi nhà nơi dự án được thực
hiên, dự án này đã cho ra đời họ VXL IBM 801 vốn được sử dụng rộng rãi trong
các phần cứng của IBM.

Trong những năm đầu, các dự án chủ yếu chỉ được biết đến trong các trường đại
học. Đến năm 1986, tất cả các dự án về RISC bắt đầu cho ra đời sản phẩm. Ngày
nay hầu hết các chip RISC, đều được thiết kế dựa trên kiến trúc RISC-II của
Berkeley.

Những RISC hiện đại

Berkerley không thương mại hóa dự án của mình, tuy nhiên hầu hết các công ty
sau này đều sử dụng kiến trúc RISC – II như Sun Microsystems với SPARC, hoặc
Pyramid Technology. Chính Sun là công ty đầu tiên chứng minh sức mạnh của
RISC là có thật trong những hệ thống mới của mình, và cũng nhờ đó họ nhanh
chóng chiếm lĩnh thị trường workstation lúc bấy giờ.

John Hennessy tạm thời rời Standford để thành lập MIPS Computer Systems
nhằm thương mại hóa dự án MIPS. Thiết kế đầu tiên của họ là chip R2000, đây là
thế hệ tiếp theo của chip MIPS. MIPS nhanh chóng trở thành chip phổ biến nhất
khi nó được sử dụng trong PlayStation và Nintendo 64 game consoles. Ngày nay
chúng là một trong những chip được sử dụng phổ biến trong các ứng dụng nhúng
high-end.

Rút kinh nghiệm từ thất bại của RT-PC, IBM thiết kế RS/6000 dựa trên kiến trúc
POWER mới. Họ chuyển họ chip AS/400 thành các chip có kiến trúc POWER, và
nhận thấy ngay cả 1 lệnh phức tạp nhất cũng được thực thi nhanh hơn một cách
đáng kể. Kết quả đó là sự ra đời của họ iSeries. Kiến trúc POWER cũng được sử
dụng trong các chip PowerPC nhưng ở cấp độ thấp hơn. Ngày nay PowerPC là 1
trong những họ VXL được sử dụng phổ biến trong xe hơi (một số xe có thể sử
dụng trên 10 chip loại này). Đây cũng là họ VXL được sử dụng trong máy tính
Apple Macintosh cho tới năm 2006 (từ 2-2006 Apple chuyển qua sử dụng VXL
của Intel).

Những nghiên cứu ở Anh cũng cho ra đời các dòng VXL như INMOS Transputer,
Acorn Archimedes và Advanced RISC Machine. Những công ty vốn sản xuất
CISC trước đây cũng nhanh chóng tham gia. Intel với i860 và i960 vào cuối
những năm 1980, nhưng không đạt được thành công như mong muốn. Motorola
với chip 88000 nhưng cũng ko thành công và họ nhanh chóng từ bỏ để hợp tác
cùng IBM sản xuất PowerPC. AMD cho ra đời VXL 29000, và trở thành VXL
phổ biến nhất những năm đầu thập kỷ 90.

Ngày nay CPU RISC (và microcontrollers) chiếm 1 lượng lớn CPU được sử dụng.
Kỹ thuật thiết kế RISC đem đến sức mạnh ngay cả ở những kích thước nhỏ, do đó
nó nhanh chóng chiếm lĩnh hoàn toàn thị trường CPU nhúng công suất thấp. Đây
là một thị trường cực kỳ lớn của CPU, có thể tìm thấy chúng trong xe hơi, điện
thoại di động, thậm chí một số thiết bị khác có thể chứa hàng tá CPU loại này.
RISC cũng chiếm lĩnh thị trường workstation trong hầu hết những năm 90. Sau
khi Sun cho ra đời SPARCstation, các hãng khác cũng vội vã hoàn thành các hệ
thống dựa trên RISC của mình. Thậm chí ngày nay thế giới của các mainframe
cũng hoàn toàn dựa trên RISC.

Dù vậy thị trường PC và server lại không phải là nơi dành cho RISC, đây là nơi họ
x86 của Intel chiếm ưu thế tuyệt đối (đối thủ chính của Intel là AMD, nhưng chip
của AMD lại cũng được xây dựng dựa trên nền x86). Có 3 nguyên nhân chính như
sau. Thứ nhất, nền tảng rất lớn của các ứng dụng của PC đều được viết cho x86,
trong khi đó chưa hề nền tảng tương tự cho RISC, điều đó đồng nghĩa với việc
người dùng chỉ có 1 lựa chọn là x86. Thứ hai, cho dù kiến trúc RISC có thể mở
rộng nhanh và rẻ, nhưng Intel, với thị trường khổng lồ của mình, lại có thể đầu tư
hàng đống tiền vào công nghệ phát triển chip. Intel cũng đã bỏ thời gian để cải
tiến các quá trình thiết kế, sản xuất như bất kỳ các nhà sản xuất VXL RISC khác.
Thứ ba, những người thiết kế x86 nhận ra rằng họ hoàn toàn có thể vận dụng
RISC trong các VXL của mình. Ví dụ lõi P6 của bộ xử lý PentiumPro, và những
VXL kế tiếp, có những đơn vị đặc biệt nhằm bẻ hầu hết các lệnh CISC thành
nhiều quá trình RISC. Như vậy bản thân các bộ xử lý sử dụng lõi P6 là các CPU
RISC mô phỏng kiến trúc CISC.

Người dùng thật ra chỉ quan tâm đến tốc độ, giá cả, và tính tương thích với các
phần mềm có sẵn hơn là chi phí để phát triển những chip mới. Cùng với sự phức
tạp của CPU tăng lên, chi phí thiết kế và sản xuất cũng tăng lên nhanh chóng. Lợi
nhuận thu được từ RISC trở nên quá nhỏ bé so với chi phí đầu tư để phát triển các
CPU mới, do đó ngày nay chỉ có những nhà sản xuất lớn mới có đủ khả năng phát
triển những CPU mạnh. Kết quả là hầu hết những nền tảng RISC (ngoại trừ IBM
POWER/PowerPC) đều thu hẹp quy mô (SPARC và MIPS) hoặc thậm chí từ bỏ
(Alpha và PA-RISC) phát triển các CPU mạnh. Năm 2004 CPU nhanh nhất trong
các tác vụ với số nguyên là x86 (benchmark với SPECint), và với số thực dấu
chấm động là IBM Power 5 (benchmark với SPECfp).

Các hệ thống và các RISC phổ biến:

• Họ MIPS , trong các máy tính SGI, PlayStation và Nintendo 64 game consoles
• Họ POWER tong các SuperComputers/mainframes của IBM
• Freescale (trước đây là Motorola SPS) và IBM's PowerPC trong Nintendo
Gamecube, Microsoft Xbox 360, Nintendo Wii and Sony PlayStation 3 game
consoles, và cho tới gần đây là Apple Macintosh
• SPARC và UltraSPARC, trong tất cả các hệ thống của Sun
• Hewlett-Packard PA-RISC
• DEC Alpha
• ARM — Palm, Inc. Ban đầu sử dụng (CISC) Motorola 680x0 trong những PDA
đầu tiên, nhưng hiện tại là (RISC) ARM; Nintendo sử dụng 1 chip ARM7 trong
Game Boy Advance và Nintendo DS. Nhiều nhà sản xuất điện thoại di động, như
Nokia cũng dựa trên kiến trúc của ARM.

Thuật ngữ thay thế

Trải qua 1 thời gian dài, tập lệnh của các RISC ngày càng tăng. Vì thế nhiều
người bắt đầu sử dụng thuật ngữ “load-store” để mô tả RISC CPU, vì đây là mấu
chốt của kiến trúc RISC. Thay vì CPU xử lý rất nhiều phương pháp đánh địa chỉ,
kiến trúc load-store sử dụng những đơn vị chuyên biệt để thực hiện những dạng
rất đơn giản của các quá trình load và store. CISC CPU vì thế được gọi là
"register-memory" hoặc "memory-memory".

Thanh ghi
Bách khoa toàn thư mở Wikipedia
Bước tới: menu, tìm kiếm

Trong kiến trúc máy tính, một thanh ghi là một bộ nhớ dung lượng nhỏ và rất nhanh
được sử dụng để tăng tốc độ xử lý của các chương trình máy tính bằng cách cung cấp
các truy cập trực tiếp đến các giá trị cần dùng. Hầu hết, nhưng không phải tất cả, các
máy tính hiện đại hoạt động theo nguyên lý chuyển dữ liệu từ bộ nhớ chính vào các
thanh ghi, tính toán trên chúng, sau đó chuyển kết quả vào bộ nhớ chính.

Các thanh ghi xử lý là phần đầu tiên của phân cấp bộ nhớ, và cung cấp nhanh nhất
vào hệ thống để xử lý dữ liệu. Thuật ngữ này thường được dùng để nói đến một tập
các thanh ghi có thể được chỉ trực tiếp cho việc nhập hay xuất các câu lệnh, xem thêm
ở tập lệnh. Chúng được gọi là " kiến trúc thanh ghi". Ví dụ,
Đưa các biến số thường dùng vào thanh ghi là một hoạt động then chốt làm tăng hiệu
ứng của chương trình. Việc này có tên là register allocation và thường được thực hiện
bởi một trình biên dịch trong giai đoạn phát sinh mã hoá.

[sửa] Các loại thanh ghi


Thanh ghi thường được đo bằng các bit nó có thể chứa, ví dụ, một thanh ghi "8-bit"
hay thanh ghi "32-bit". Các thanh ghi hiện nay thường được xem như file thanh ghi -
register file, nhưng chúng cũng được dùng riêng rẽ flip-flops, tốc độ cao core
memory, thin film memory, và các cách khác trong nhiều máy móc.

Có một số phân lớp các thanh ghi tùy theo nội dung:

• Thanh ghi khả hiện - Có hai loại. Thanh ghi dữ liệu và thanh ghi địa chỉ.
• Thanh ghi dữ liệu được dùng để lưu số nguyên (xem thanh ghi số thực dưới
đây). Trong một số bộ CPU hiện nay và trước đây, có một thanh ghi đặc biệt
là thanh ghi tích lũy tích lũy, được dùng cho nhiều tính toán.
• Thanh ghi địa chỉ chứa địa chỉ bộ nhớ và được dùng để truy cập bộ nhớ.
Trong một số CPU, có một thanh ghi địa chỉ đặc biệt thanh ghi chỉ mục, dù
chúng thường được dùng để sửa đổi địa chỉ hơn là chứa địa chỉ.
• Thanh ghi điều kiện chứa giá trị thực thường dùng để quyết định hoật động
thực thi lệnh
• Thanh ghi đa năng (GPRs) có thể chứa cả dữ liệu lẫn địa chỉ., là kết hợp giữa
thanh ghi dữ liệu và thanh ghi địa chỉ
• Thanh ghi dấu phẩy động(FPRs) dùng để chứa các kiểu số
• Thanh ghi hằng số chứa các giá trị đọc được (Ví dụ: 0, 1, pi, ...).
• Thanh ghi định hướng chứa dữ liệu cho việc xử lý định hướng đối tượng, thực
hiện bởi lệnh SIMD (lệnh đơn, bội dữ kiện)
• Thanh ghi chuyên biệt chứa trạng thái chương trình; thường bao gồm con trỏ
chỉ lệnh, con trỏ ngăn xếp, và thanh ghi trạng thái.
• Thanh ghi chỉ lệnh chứa lệnh tạm huỷ
• Thanh ghi chỉ mục dùng cho sửa đổi địa chỉ tác tử trong quá trình thực hiện 1
chương trình
• Trong một số cấu trúc, thanh ghi kiểu mẫu (còn được gọi là thanh ghi thiết bị
riêng biệt) chứa dữ liệu và thiết lập liên quan đến bộ xử lý. Vì các thanh ghi
này được thiết kế gắn liền với bộ xử lý đặc trưng nên chúng không thể giữ
nguyên chuẩn qua các thế hệ của bộ xử lý.
• Thanh ghi điều khiển và trạng thái – Có 3 loại: chương trình phản hồi, thanh
ghi chỉ lệnh, chương trình trạng thái từ.
• Thanh ghi liên quan đến tìm nạp thông tin từ bộ nhớ truy cập ngẫu nhiên
(RAM), 1 tập hợp lưu giữ các thanh ghi được định vị trên các chip riêng biệt
từ CPU (không giống đa số các loại trên, đây thông thường là những thanh ghi
không có cấu trúc):
o Thanh ghi bộ nhớ trung gian
o Thanh ghi bộ nhớ địa chỉ
o Thanh ghi bộ nhớ kiểu miền

Thanh ghi ổ cứng cũng tương tự nhưng ở ngoài CPU


[sửa] Một vài ví dụ
Bảng dưới đây hiển thị số lượng thanh ghi của vài bộ vi xử lý chính hiện nay:

Processors Integer registers Double FP registers


Pentium 4 8 8
Athlon MP 8 8
Opteron 240 16 16
Itanium 2 128 128
UltraSPARC IIIi 32 32
Power 3 32 32

You might also like