Luồng dữ liệu

Một phần của tài liệu Bài giảng: Cấu trúc máy tính và ghép nối pot (Trang 90 - 96)

c, Liên kết thông qua stack

6.2.1. Luồng dữ liệu

Hình 6.3. Cấu trúc luồng chương trình

Cấu trúc luồng dữ liệu được thể hiện trên hình 6.3. Cấu trúc vi chương trình bao gồm 32 thanh ghi mà người dùng nhìn thấy được (%r0 đến %r31), thanh ghi

đếm chương trình (%pc), thanh ghi con trỏ lệnh (%ir), khối ALU, 4 thanh ghi

đệm mà người dùng không nhìn thấy được (%temp0 đến %temp3), và các kết nối giữa các thành phần trên

Các thanh ghi %r0 đến %r31 là các thanh ghi cho phép truy cập bởi người dùng. Thanh ghi %r0 luôn có giá trị bằng 0 và không thể thay đổi được. Thanh

ghi %pc là thanh ghi đếm chương trình được sử dụng để theo dõi các lệnh đọc từ bộ nhớ. Người dùng có thể truy cập trực tiếp thanh ghi %pc thông qua các lệnh call và jmpl. Các thanh ghi đệm temp được sử dụng trong quá trình biên dịch và không được truy cập bởi người dùng. Thanh ghi %ir luôn chứa lệnh đang được thực thi và cũng không được truy cập bởi người dùng

Khi ALU

Khối ALU thực hiện 1 trong 16 lệnh với 2 toán hạng được lấy từ 2 hệ thống bus A và B. 16 lệnh này được thể hiện trên hình 6.4. Kết quả của phép toán được lưu trữ trên hệ thống bus C nếu tín hiệu điều khiển bộ dồn kênh MUX không chứa dữ liệu từ bộ nhớ

Hình 6.4. 16 lệnh của ALU

Lệnh ANDCC và lệnh AND đều có tác động là thực hiện phép toán AND từng bit lên 2 toán hạng trên bus A và B. Tuy nhiên ta lưu ý rằng các lệnh kết thúc bởi “CC” sẽ có tác động đến điều kiện dành cho lệnh nhảy. Do đó lệnh ANDCC

sẽ tác động đến điều kiện nhảy còn lệnh AND thì không. Tương tự như vậy là lệnh ORCC và OR, lệnh NORCC và NOR, lệnh ADDCC và lệnh ADD.

Lệnh SRL (lệnh dịch phải) sẽ dịch nội dung của bus A sang phải với số bit tương ứng nằm trong bus B (từ 0 đến 31 bit). Các số 0 sẽ được nhồi vào tận cùng bên trái khi tiến hành dịch phải. Lệnh LSHIFT2 và LSHIFT10 sẽ dịch nội dung bus A sang trái 2 hoặc 10 bit tương ứng. Các số 0 sẽ được nhồi vào bên phải

Lệnh SIMM13 sẽ lấy 13 bit có trọng số nhỏ nhất của dữ liệu trên bus A và thêm 19 số 0 vào các bit có trọng số lớn nhất. Lệnh SEXT13 thực hiện việc mở rộng 13 bit có trong số nhỏ nhất trên bus A thành một từ 32 bit. Tức là nếu bit tận cùng bên trái của 13 bit là 1 thì 19 số 1 sẽ được thêm vào phần có trọng số lớn nhất để tạo thành kết quả. Lệnh INC sẽ tăng giá trị trên bus A lên 1 đơn vị. Trong khi đó lệnh INCPC sẽ tăng giá trị trên bus A lên 4. Lệnh INCPC thường

được sử dụng để làm tăng thanh ghi con trỏ lệnh %pc. Lệnh INCPC có thể tác

động đến tất cả các thanh ghi có kết nối với bus A

Lệnh RSHIFT5 dịch toán hạng trên bus A sang phải 5 bit, chép bit có trọng số

lớn nhất (bit dấu) vào vị trí 5 bit phía bên trái. Lệnh này có hiệu ứng là tạo ra 5 bit mở rộng để làm bit dấu. Khi thực hiện lệnh này 3 lần với toán hạng 32 bit sẽ

tạo ra hiệu ứng chuyển bit có trọng số lớn nhất của trường COND trong cấu trúc Branch sang vị trí bít số 13

Tất cả các lệnh toán học và logic đều có thể được thực hiện bằng các lệnh trong ALU. Ví dụ như phép trừ A – B có thể được thực hiện bởi tổng của A với số -B là số bù 2 của B. Chú ý rằng trong lệnh ALU của máy tính ARC không hề có phép toán đảo. Để thực hiện phép toán đảo, ta có thể sử dụng phép toán NOR tác động với tất cả các bit của B.

ALU tạo ra các tín hiệu cờ c, n, z, và v. Các tín hiệu này tích cực nếu xảy ra các hiện tượng tương ứng

ALU có thể được cấu tạo theo nhiều cách. Một cách đơn giản nhất được gọi là phương pháp lookup table (LUT). Khối ALU có các đường dữ liệu vào A và B và 1 đường dữ liệu ra C. Các đường dữ liệu này có độ rộng 32 bit. Ngoài ra,ALU còn có 4 bit điều khiển F, 4 bit đưa ra các tín hiệu trạng thái và tín hiệu SCC được sử dụng để thiết lập các tín hiệu cờ trong thanh ghi %psr. Chúng ta có thể phân tích ALU thành 32 khối LUT, mỗi khối thực hiện các phép toán và

logic riêng biệt. Kết quả được đưa vào khối barrel shifter có tác dụng như bộ

dịch trái phải. Sơđồ khối của ALU được thể hiện trong hình 6.5.

Khối barrel shifter sẽ dịch các dữ liệu đầu vào từ 0 đến 31 bit phụ thuộc vào các tính hiệu điều khiển đầu vào. Cấu tạo của bộ dịch barrel shifter được thể hiện trong hình 6.6.

Hình 6.5. Sơđồ khối của ALU

Trên hình 6.6. chúng ta sẽ bắt đầu với phía dưới của mạch, ta sẽ thấy đầu ra của mạch sẽ tương ứng với đầu vào phía trên. Nếu tín hiệu SA0 bằng 0 thì toàn bộ

tín hiệu ở trên sẽ được chuyển xuống dưới mà không tiến hành dịch trái hay phải. Khi tín hiệu SA0 bằng 1 thì hành động dịch mới xảy ra. Khi tín hiệu SA0 bằng 1, tín hiệu Shift Right cũng bằng 1 thì đầu ra sẽ dịch sang phải, ngược lại sẽ dịch sang trái. Ở cụm mạch phía trên, hành động dịch cũng được tiến hành tương tự. Với nguyên lý đó, để thực hiện dịch từ 0 đến 31 bit thì chúng ta cũng có hệ thống mạch gồm 31 tầng. Số bit dịch chuyển sẽ được kích hoạt tương ứng khi hoạt động

Mỗi một khối LUT hoạt động độc lập với nhau. Chúng có cấu tạo nói chung là giống nhau ngoại trừ một số khác biệt khi thực hiện lệnh INC và INCPC. Về

Hình 6.6. Cấu tạo bộ dịch barrel shifter

Các tín hiệu điều khiển n, z, v và c hoạt động trực tiếp trong đó n và c được lấy ra trực tiếp từ c31 của bộ dịch barrel shifter và tín hiệu c từ LUT số 31

Lưu ý rằng chỉ có các lệnh kết thúc bởi “CC” mới tác động đến các điều kiện nhảy. Tín hiệu này được tạo ra và được đánh dấu bởi nhãn SCC (Set Condition Codes). Tín hiệu này là TRUE khi cả 2 tín hiệu F3 và F2 là FALSE

Các thanh ghi

Tất cả các thanh ghi trong ALU đều là các thanh ghi có tác động sườn xuống loại D. Điều đó có nghĩa là đầu ra của các thanh ghi không thay đổi khi tín hiệu xung nhịp chuyển trạng thái từ cao xuống thấp. Tất cả các thanh ghi đều có chung một dạng. Hình 6.8 dưới đây thể hiện thanh ghi %r1, các thanh ghi còn lại cũng có cấu tạo hoàn toàn như vậy

Hình 6.8. Cấu tạo của thanh ghi %r1

Tín hiệu xung nhịp CLK đưa vào thanh ghi %r1 thông qua cổng AND với tín hiệu chọn thanh ghi c1 từ bộ giải mã C decoder. Với cấu tạo của các thanh ghi %ri khác, ta sẽ đưa tín hiệu ci tương ứng từ bộ giải mã. Tín hiệu vào các thanh ghi được lấy trực tiếp từ các đường dây trên hệ thống bus C. Đầu ra của thanh ghi được ghi vào hệ thống bus A hoặc bus B thông qua bộđệm 3 trạng thái. Đầu ra của bộđệm sẽ đưa vào bus A hoặc bus B bởi các tín hiệu điều khiển a1 và b1 của các bộ giải mã A decoder và B decoder, hai tín hiệu này sẽ chỉ có 1 tín hiệu

Các thanh ghi còn lại có cấu tạo hoàn toàn tương tự. Tuy nhiên thanh ghi %r0 luôn luôn mang giá trị là 0, không thay đổi được. Do đó thanh ghi %r0 không có đầu vào từ bus C cũng như không có đầu vào từ bộ giải mã C decoder, và cũng không cần có các flip-flop. Thanh ghi %ir có các đầu ra đặc biệt tương

ứng với các trường rd, rs1, rs2, op, op2, op3 và trường bit 13, như

hình 6.9. Các đầu ra được sử dụng bởi bộđiều khiển trong quá trình chuyển mã.

Điều này sẽđược thể hiện kỹ hơn trong mục 6.2.4.

Các bộ giải mã A, B, C đơn giản là các bộ lựa chọn các tín hiệu. Mỗi bộ giải mã này có 6 bit tín hiệu vào có thể giải mã 64 tín hiệu khác nhau. Tuy nhiên chúng ta chỉ cần giải mã 38 thanh ghi, trong đó thanh ghi %r0 không cần giải mã. Do

đó, ta sẽ sử dụng tất cả 37 tín hiệu giải mã

Một phần của tài liệu Bài giảng: Cấu trúc máy tính và ghép nối pot (Trang 90 - 96)