Bài tập lớn môn học Kiến trúc máy tính
LỜI MỞ ĐẦU
Ngày nay với tốc độ phát triển mạnh mẽ của điện tử và công nghệ thông tin, hàng
loạt các sản phẩm công nghệ cao đã ra đời. Những sản phẩm này đã góp phần nâng
cao đời sống con người và đẩy mạnh cuộc cách mạng công nghệ thông tin.Máy tính
điện tử ra đời vào đầu thập kỷ thứ tư của thế kỷ 20 và phát triển nhanh chóng, làm nên
một cuộc cách mạng trong lĩnh vực tính toán và xử lý thông tin, mở ra một kỷ nguyên
mới trong lịch sử nhân loại - Kỷ nguyên máy tính điện tử.Với những công việc mà con
người không thể làm được nhưng chiếc máy tính lại xử lí một cách rất đơn giản và
nhanh chóng.Có thể nói máy tính là những siêu công cụ,do con người chế tạo ra và để
phục vụ cho chính cuộc sống của con người.
Công nghệ tính toán cũng đã phát triển mạnh mẽ lên một tầm cao mới.Nó được
sử dụng trong mọi ngành nghề mọi lĩnh vực và trở thành một phần không thể thiếu
trong đời sống con người.Nhưng dù phát triển mạnh mẽ tới mức nào đi nữa thì nó vẫn
dựa trên những phép toán cơ bản trong quá trình xử lý,thực thi các công việc…Vì vậy
nghiên cứu tính toán thì phải nghiên cứu từ những phép xử lý cơ bản này.
Ở bài tập lớn này nhóm 05 sẽ trình bày về phương pháp thiết kế một bộ nhân và
bộ chia hai số 8bit được xây dựng bằng các cổng logic cơ bản như:AND,OR,XOR…
Nội dung bài thảo luận bao gồm 03 phần chính:
PHẦN 1: GIỚI THIỆU CHUNG VỀ KIẾN TRÚC MÁY TÍNH
PHẦN 2:CƠ BẢN VỀ LÝ THUYẾT TÍNH TOÁN
PHẦN 3: THIẾT KẾ BỘ NHÂN CHIA 8 BIT
PHẦN 4:CHƯƠNG TRÌNH VÀ THỬ NGHIỆM
PHẦN 1: GIỚI THIỆU CHUNG VỀ KIẾN TRÚC MÁY TÍNH
Nhóm 05
1
Lớp K44KMT
PHẦN 2:CƠ BẢN VỀ LÝ THUYẾT TÍNH TOÁN
Nhóm 05
2
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
2.1: Cơ bản về lý thuyết tính toán
2.1.1 Các đối tượng trong xử lý tin học
Là những phần tử thuộc vào những tập hợp vô hạn đếm được và luôn được biểu
diễn dưới một dạng nào đó.VD:số nguyên,số thập phân…
2.1.2 Chức năng của tính toán
Một tính toán được biểu diễn một cách hệ thông như sau:
Dữ liệu vào
Dữ liệu ra
Tính toán
Cung cấp một hoặc nhiều dữ liệu ở đầu vào bộ tính toán thì ở đầu ra ta nhận được một
hoặc nhiều dữ liệu tương ứng.
2.1.3 Cấu trúc phép toán
Thực hiện các phép toán sơ cấp (elementary operation) trong một khoảng thời
gian hữu hạn.Mỗi phép toán,giả thiết không chia cắt nhỏ hơn được,được chọn trong
một tập hợp hữu hạn các phép toán là một phần mô tả cấu trúc máy.
Lần lượt thực hiện phép toán sơ cấp theo một thứ tự xác định trước,tạo thành một
chương trình(program) là một phần mô tả cấu trúc này.
đầu.Trên mỗi cặp bit tương ứng nhau của hai toán hạng,phép toán OR sẽ trả về 1
nếu một trong hai toán hạng là 1,còn tất cả các trường hợp khác OR sẽ tạo ra bit
0
VD :Thực hiện phép toán OR với hai số nhị phân 1001 và 1100
1001
OR 1100
=
1101
c, Phép XOR
Là một toán tử hai ngôi,có nhiệm vụ tính toán trên từng bit với hai chuỗi có cùng
độ dài để tạo ra một chuỗi bit mới có cùng độ dài với hai chuỗi ban đầu.Tuy nhiên trên
mỗi cặp bit tương ứng nhau của hai toán hạng,phép toán XOR sẽ trả về 1 nếu chỉ một
trong hai toán hạng là 1,còn tất cả các trường hợp khác XOR sẽ tạo ra bit 0
VD :Thực hiện phép toán XOR với hai số nhị phân 1001 và 1100
1001
XOR 1100
=
0101
d, Phép NOT
Phép toán NOT còn được gọi là toán tử lấy phần bù(complement) là một
toán tử một ngôi có nhiệm vụ phủ định luận lí từng bit của toán hạng nó.Tức là
đảo 1 thành 0 và 0 thành 1
VD :Thực hiện phép toán XOR với hai số nhị phân 1001
NOT 1001
=
0110
2.2.2 Dịch chuyển và quay bit
a, Dịch chuyển không nhớ
Gồm có dịch trái và dịch phải,khi dịch chuyển các bit vượt qua phạm vi lưu trữ
sẽ mất và tự động thêm bit 0 vào cuối dãy bit
0+0=0
0+1=1
1+0=1
1+1=10 (Nhớ 1 để cộng vào hàng trước đó,tương tự
như phép cộng số thập phân)
Bây giờ ta tiến hành cộng hai số nhị phân 1000111(số 71 trong hệ thập phân)và
số 11110(số 30 trong hệ thập phân)
Cột
71=
30=
+
101=
1
1
2
0
3
0
1
4
0
1
5
1
1
6
Nhóm 05
Tại cột
7
6
5
4
3
2
Thực hiện phép tính
1+0=1
1+1=10(viết 0,nhớ 1)
1+1=10,cộng thêm 1(nhớ ở bước 2)là 11, viết 1 nhớ 1
0+1=1,cộng thêm 1(nhớ ở bước 3)là 10,viết 0 nhớ 1
0+1=1,cộng thêm 1 (nhớ ở bước 4)là 10 viết 0 nhớ 1
0+1(nhớ ở bước 5)=1
5
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
7
1
Lấy 1 ở trên xuống
2
1
0
1
1
0
0
1
0
1
1
1
Ta tiến hành trừ từ phải sang trái như sau
Bước
1
2
3
4
5
6
6
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
Số bù 2 :Số bù 2 có được là do đảo tất cả các bit có trong số nhị phân(đổi 1 thành
0 và 0 thành 1)rồi cộng thêm 1 vào kết quả.Hay nói cách khác số bù 2 là số bù 1 công
thêm 1.số bù 2 cũng được dùng để biểu diễn số âm.Khi đó bit cực trái(bit đầu tiên ở
bên trái) là bit đánh dấu với quy ước:Nếu bit dấu là 0 thì số là số dương,nếu bit dấu là
1 thì là số âm.
Ví dụ thực hiên phép trừ 2-5=-3
Ta có 210=0000 00102
510=0000 01012.Số bù 1 của 5 là 1111 1010,số bù 2 của 5 là:1111 1011
Vậy 2-5=0000 0010 + 1111 1011
Cột
8
7
6
5
4
3
1
1
0
1
1
1
1
1
1
1
1
0
1
+
-3=
5
5
0+1=1
6
6
0+1=1
7
7
0+1=1
8
8
0+1=1
Ta được kết quả 1111 1101,là số bù 2 của -3
2.3.3 Phép nhân
Phép tính nhân trong hệ nhị phân cũng tương tự như phương pháp làm trong hệ
thập phân.Hai số A và B được nhân với nhau bởi tích số các kí số 0 và 1 của A và
B.Với mỗi con số ở B,tích của nó với 1 số trong A được tính và viết xuống một hàng
PHẦN 3 : THIẾT KẾ BỘ NHÂN CHIA 8 BIT
3.1 Thiết kế bộ cộng
3.1.1 Mạch cộng nửa
Gọi A là số được cộng
B là số cộng
Nhóm 05
8
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
S là tổng của A và B
C là số nhớ ra từ phép cộng
Trước hết để đơn giản, xét mạch cộng nhị phân 1 bit
Với tổ hợp 4 trạng thái logic của A và B thì trạng thái logic ngõ ra S và C như sau
Hình .3.1 Cộng nửa
Rút gọn biểu thức logic ta có:
S=AB+AB
C=AB
Nhận thấy S là ngõ ra của cổng EXOR 2 ngõ vào A và B; còn C là ngõ ra của cổng
AND
Từ đây vẽ được cấu trúc logic của mạch
Hình 3.2 Mạch cộng nửa
Đây là mạch cộng nửa hay cộng chưa đủ (haft adder : HA) vì chưa có số nhớ ban đầu
cộng 2 bit LSB để cho bit tổng (LSB). Số nhớ được đưa tới để cộng chung với 2 bit kế
tiếp bit LSB để cho bit tổng ở hàng kế tiếp cho đến phép cộng cuối cùng giữa 2 bit
MSB để được bit tổng ở hàng đó, số nhớ khi này trở thành bit LSB của tổng
Hình sau sẽ minh hoạ rõ ràng hơn mạch cộng nhiều bit (4 bit)
Nhóm 05
10
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
Hình .3.5 Cộng 4 bit
Đây là một mạch cộng song song vì các hàng được cộng cùng một lúc tuy nhiên như
cấu trúc mạch ở trên thì các bit ra của tổng không phải là đồng thời bởi vì các phép
cộng ở các bit cao thì chậm hơn do phải chờ bit nhớ ở phép cộng trước đưa tới. Tức là
đã có trì hoãn làm giảm tính đồng bộ của mạch. Nếu thêm vào mạch cho phép cung
cấp sẵn các bit nhớ để phục vụ cho các phép cộng ở các hàng được cùng lúc thì sẽ
khắc phục được điểm này. Với công nghệ tích hợp cao, việc thêm mạch cung cấp sẵn
các bit nhớ trở nên dễ dàng hơn khi đó mạch trở thành mạch cộng có số nhớ nhìn
trước.
b Cộng nối tiếp
Ngoài cách cộng song song như đã thấy ở trên, còn một dạng mạch cộng số
nhiều bit nữa gọi là mạch cộng nối tiếp. Khi này 2 bit LSB của các số được cộng
trước, bit LSB của tầng được đưa ra 1 ghi dịch còn số nhớ sẽ quay trở về cộng chung
với 2 bit kế tiếp bit LSB và cứ vậy cho đến 2 bit cuối cùng được cộng. Mạch ghi dịch
ngõ ra dịch chuyển sang phải qua mỗi lần cộng sẽ cho ra kết quả cộng số nhớ cuối
cùng trở thành bit MSB của tổng ra. Rõ ràng mạch thực hiện phép tính chậm hơn so
3.2.2 Mạch trừ nhiều bit
Nhóm 05
12
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
Với mạch trừ nhị phân nhiều bit, cũng có thể thực hiện song song các mạch cộng
FS từng bit nhưng các bit của số bị trừ cần được đảo, số nhớ của tầng cuối cần đem về
bit nhớ ban đầu của tầng đầu. Hình minh hoạ cho mạch trừ nhị phân 4 bit
Hình .3.10a Mạch trừ 4 bit song song
Hình .3.10b Trừ 4 bit nối tiếp
3.3 Mạch cộng trừ kết hợp
Bây giờ nếu thêm vào một số cổng
logic cần thiết ta đã có 1 mạch có thể
cộng hay trừ tuỳ theo ngõ vào điều
khiển CT
Khi CT = 0, các cổng EXOR có 1 ngõ
ở thấp nên cho số B qua không bị đảo,
tức là mạch thực hiện phép cộng
Khi CT = 1, các cổng EXOR có 1 ngõ
ở cao nên hoạt động như 1 cổng NOT,
số B bị đảo, khi này mạch thực hiện
phép cộng A + (-B) tức là phép trừ.
Số BCD thực ra cũng là số nhị phân n bit nhưng chỉ có 10 tổ hợp trạng thái từ
0000 đến 1001 (biểu thị số thập phân tương ứng là từ 0 đến 9) nên cách cộng cũng
tương tự như cổng số nhị phân nhiều bit. Tuy nhiên khi tổng vượt quá 1001 thì tức là
tổng đó không còn là số BCD nữa, do đó ta phải cộng tổng với 0110 (số 610) để cho
tổng mới là số BCD đồng thời số nhớ chính là hàng cao hơn của tổng.
Ví dụ như cộng 2 số BCD sau:
Hình .3.13 Mạch cộng 2 số BCD 1 bit
Nhóm 05
14
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
2 số cần cộng là A3A2A1A0 và B3B2B1B0 cho tổng là C3S4S3S2S1 (C3 là hàng
chục nếu có).
Nếu tổng đầu vượt quá 9 ( từ 10 đến 18) thì các cổng logic sẽ cho phép xác định hàng
chục đồng thời tổng này phải được cộng thêm 6 ở tầng 74LS83 thứ 2 để cho tổng cuối
cùng ở dạng BCD.
Nếu tổng không vượt quá 9 (vẫn là số BCD) thì tổng hàng chục không có nên 74LS83
thứ 2 sẽ cộng tổng này với 0, tổng ra không có gì thay đổi.
Ta có thể ghép nhiều mạch cộng ở trên để có mạch cộng 2 số BCD nhiều bit, khi đó
chỉ việc nối ngõ ra hàng chục của tầng đầu tới ngõ vào số nhớ Ci của tầng sau là được.
3.4.2 Trừ 2 số BCD
Với phép trừ BCD, ta phải lấy bù 9 của số trừ rồi mới làm phép cộng lại với số bị
trừ. Lấy bù 9 của 1 số tức là lấy 9 trừ đi số đó. Ở chương 1 có nói rõ hơn về phép trừ
H3.16: Sơ đồ phép nhân
Nhóm 05
16
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
H3.17: Giải thuật Booth
3.5.2 Mạch nhân cơ bản
Việc thực hiện bài toán nhân có thể xem như gồm hai bước:
-Tính các tích từng phần: thực hiện bởi các cổng AND
- Tính tổng của các tích từng phần: Áp dụng bài toán tổng chuỗi số(Hình )
Nhóm 05
17
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
Y8 Y7 Y6 Y5 Y4 Y3 Y2 Y1
.
.
FA
FA
.
.
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA
S12
FA
FA
S11
FA
S10
FA
FA
S9
FA
S8
FA
FA
Số bị nhân đưa nối tiếp vào mạch theo thứ tự từ bit LSB. Các FF D có tác dụng
dịch kết quả của phép nhân (là các tích từng phần) trước khi đưa vào mạch cộng
để cộng các tích từng phần này.
Thí dụ 15 : Xem bài toán nhân 10x14. Số nhân là 1010 (1010) và số bị nhân là
1110 (1410). Quá trình nhân giải thích như sau:
A
B
C
D
Output
P8
0
0
0
0
1
P7
0
0
0
1
0
P6
0
0
0
P1
0
0
0
0
0
100011002=14010
Có thể thấy rằng ngã ra A luôn luôn bằng 0 vì bit LSB của số nhân = 0. Ngã ra B có
giá trị của số bị nhân được làm trễ 1 bit (1 xung đồng hồ). Ngã ra C được làm trễ 2 bit
và luôn bằng 0 (Giống như A). Ngã ra D giống như B nhưng trễ 3 bit. Điều này có thể
so sánh với bài toán trên giấy
Số bị nhân
1110
Số nhân
1010
A
0000
B
+
11100
C
+
000000
D
+
1110000
Tích
10001100
tuy nhiên mạch này chưa quan tâm tới số nhớ.
Mạch (H 3.21) cho kết quả với số nhớ .
H3.21) cho kết quả với số nhớ
Và (H 3.22) là một mạch thực tế dùng ghi dịch 4 bit có ngã vào/ra song song,
một mạch cộng 4 bit và một chip 4 cổng AND 2 ngã vào để thực hiện bài toán nhân.
Nhóm 05
20
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
H3.22 mạch thực tế dùng ghi dịch 4 bit có ngã vào/ra song song
Từ các mạch nhân hai số 4bit trên ta xây dựng được mạch nhân 8bit bằng cách ghép 2
mạch nhân 4bit lại với nhau.
3.6 Mạch chia
Nguyên tắc của phép chia số nhị phân là thực hiện phép so sánh một phần của số
bị chia (số bit đầu tiên bằng với số bit của số chia) với số chia, nếu số bị chia lớn hơn
số chia thì thương số =1, thực hiện phép trừ, ngược lại thì thương số =0, sau đó dịch
trái phần còn lại của số bị chia một bit (hoặc dịch phải số chia 1 bit) rồi tiếp tục thực
hiện bài toán so sánh giống như trên. Công việc được lặp lại cho đến khi chấm dứt.
Sơ đồ (H 3.23) tóm tắt giải thuật thực hiện bài toán chia
H 3.23 giải thuật thực hiện bài toán chia
3.6.1 Phép chia có phục hồi số bị chia
Thay vì phải thực hiện việc so sánh, người ta làm phép tính trừ một phần số bị
Sau khi lấy kết quả =1, lệnh kế tiếp thực hiện là trừ số chia đã dịch phải. Từ các
kết quả nhận xét trên có thể thay sơ đồ (H 3.24) bởi sơ đồ giải thuật thực hiện phép
chia không cần phục hồi số bị chia (H 3.25)
Nhóm 05
22
Lớp K44KMT
Bài tập lớn môn học Kiến trúc máy tính
H3.25 giải thuật thực hiện phép chia không cần phục hồi số bị chia
Dựa vào sơ đồ (H 6.25), các bước thực hiện bài toán chia như sau:
- Số chia (SC) lớn hơn số bị chia (SBC) (SBC - SC < 0), thương số là 0, dịch
phải số chia 1 bit (thực tế ta mang thêm 1 bit của số bị chia xuống), thực hiện bài toán
cộng số chia và số bị chia
- Số chia nhỏ hơn số bị chia (SBC - SC > 0), thương số là 1, dịch phải số chia 1
bit, thực hiện bài toán trừ (cộng số bù 2) số bị chia cho số chia
Để đơn giản, giả sử số chia và bị chia đều dương (MSB = 0), số bị chia gồm 6 bit
và số chia gồm 4 bit.
Thí dụ 1: Thực hiện bài toán chia 2110 = 0101012 cho 710 = 01112.
Số bù 2 của 0111 là (0111)2 = 1001
Ghi chú:
Nhóm 05
23
dư ta phải cộng số chia vào và bỏ qua số tràn.
(1) Cộng số chia vào để điều chỉnh số dư
Mạch thực hiện các bài toán này cho ở (H 6.26).
Trong (H 6.26) bước đầu tiên được thực hiện bởi các cổng EX-OR trên cùng có
ngã điều khiển = 1 để thực hiện bài toán trừ. Sau bước thứ nhất, bit thứ tư của mạch
cộng (S4) sẽ quyết định phép toán sau đó là cộng (S4=1) hay trừ (S4=0) số bị chia với
số chia. Số nhớ của bài toán cuối cùng (bước 6) là bit LSB của thương số. Và mạch
cộng cuối cùng được thiết kế kết hợp với các cổng AND để xử lý kết quả của số dư
như trong hai thí dụ 2 và 3. Nếu kết quả của bài toán ở bước 6 có S4 = 1 thì cổng AND
mở để thực hiện bài toán cộng với số chia để điều chỉnh số dư.
Nhóm 05
25
Lớp K44KMT