Bộ điều khiển của CPU

Một phần của tài liệu Thiết kế CPU dùng ngôn ngữ VHDL (Trang 48 - 62)

VI. CÁC THÀNH PHẦN CỦA CPU

3. Bộ điều khiển của CPU

Bộ điều khiển controller gồm có một chuỗi trạng thái, mà mỗi trạng thái giữ một tín hiệu điều khiển kích hoạt chính xác xung clock.

Ngừ nhập của những khối luận lý từ những trạng thỏi của những flip- flops khỏc nhau và từ những ngừ nhập bờn ngoài, mà trạng thỏi đú ảnh hưởng bờn trong bộ điều khiển. Ngừ xuất của khối luận lý (logic block) là những tín hiệu điều khiển mà những tín hiệu điều khiển này trở thành những ngừ nhập của khối kế tiếp. Trạng thỏi của những flip-flops đưa ra những tớn hiệu điều khiển khác nhau.

Sơ đồ cấu trúc bộ điều khiển của CPU

I D i Q

V

l o g i c

b l o c k l o g i c

b l o c k

V j Q

I D Q

I D k V

c s x

c s y ba

c

c l o c k

d e

j i

Hình 30.

Như mô tả trong sơ đồ tất cả những trạng thái đồng bộ với xung clock và những ngừ xuất gúp phần đưa ra những tớn hiệu điều khiển hoặc kớch hoạt những flip-flop. Trong sơ đồ này trạng thái i có điều kiện kích hoạt bởi chính nó hoặc bởi trạng thái k. Trạng thái i có điều kiện kích hoạt trạng thái j và trạng thái k luôn luôn được kích hoạt sau thời gian xung clock mà trạng thái j đã kích hoạt. Tín hiệu điều khiển csx thì luôn luôn phát ra sau khi trạng thái k được kích hoạt hoặc khi trạng thái i được kích hoạt và điều kiện chắc chắn là đuợc chứa đựng trờn những ngừ nhập a, b và c. Tớn hiệu điều khiển csy trở thành kích hoạt khi tín hiệu ở trong trạng thái j và điều kiện chắc chắn được chứa trong ngừ nhập d và e.

Khai báo ENTITY của bộ điều khiển CPU

ENTITY control IS

PORT (clk: IN std_logic;

load_ac, zero_ac, load_ir, load_sr, load_page_mar,

load_offset_mar, increment_pc, load_page_pc, load_offset_pc, reset_pc, cm_carry_sr,

pc_on_mar_page_bus, ir_on_mar_page_bus, pc_on_mar_offset_bus, dbus_on_mar_offset_bus, pc_offset_on_dbus, obus_on_dbus, databus_on_dbus, mar_on_adbus, dbus_on_databus,

arith_shift_left, arith_shift_right, alu_and, alu_not, alu_a, alu_add, alu_b, alu_sub: OUT std_logic;

ir_lines: IN byte; status: IN nibble;

read_mem, write_mem: OUT std_logic; interrupt: IN std_logic);

END control;

Các trạng thái của bộ điều khiển Trạng thái s1

s1: PROCESS (s(1), clk) BEGIN

IF (clk='0' AND clk'EVENT) THEN IF s(1) = '1' THEN

pc_on_mar_page_bus <= '1';

pc_on_mar_offset_bus <= '1';

load_page_mar <= '1';

load_offset_mar <= '1';

IF interrupt= '1' THEN

reset_pc <= '1'; s(1) <= '1'; s(2) <= '0';

ELSE

reset_pc <= '0'; s(1) <= '0'; s(2) <= '1';

END IF;

END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S1

V

2

I D 1

...

VVV

Vp c _ o n _ m a r _ p a g e _ b u s p c _ o n _ m a r _ o f f s e t _ b u s l o a d _ p a g e _ m a r l o a d _ o f f s e t _ m a r

c l

r e s e t _ p c i n t e r r u p

Hình 31.

Trong trạng thái 1 bắt đầu đặt dữ liệu pc trên mar_bus và truyền dữ liệu này vào trong mar. Nếu ngừ nhập interrupt tớch cực thỡ ngừ nhập pc_reset được phát ra và trả về điều khiển đến trạng thái 1. Nếu CPU không ngắt thì trạng thái 2 tích cực ở cạnh xuống của xung clock. Ngoài ra trên cạnh này của xung clock, mar nhận giá trị mới. Trong mã thanh ghi dữ liệu và trạng thái điều khiển chúng ta có chắc chắn rằng chúng đồng bộ tất cả với cạnh xuống của xung clock.

Trạng thái 2

s2: ROCESS(s(2), clk) BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s(2) = '1' THEN

mar_on_adbus <= '1';

read_mem <= '1';

databus_on_dbus <= '1';

alu_a <= '1';

load_ir <= '1';

increment_pc <= '1';

s(3) <= '1';

END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S2

3 VVVVVV

m a r _ o n _ a d b u s r e a d _ m e m d a t a b u s _ o n _ d b u s a l u _ a

l o a d _ i r i n c r e m e n t _ p c

c l

. 2

..

V I D

Hình 32.

Khi ở trạng thái 2, mar đã nhận giá trị mới ở trong danh sách cho nó trong trạng thái 1. Nội dung của bộ nhớ đưa ra trong databus phải khởi tạo trong ir. Mục đích chủ yếu là tín hiệu điều khiển databus_on_dbus phát ra, tớn hiệu alu_a được tớch cực và cỏc ngừ nhập ir được cho phộp. Trờn cạnh của xung clock trạng thái 3 trở nên tích cực và ir sẽ có giá trị mới của nó.

Mặc dù trong trạng thái 2 hàm tăng của pc được chọn vì vậy giá trị của nó tăng lên trong cạnh xuống tiếp theo của xung clock

Trạng thái 3 s3: PROCESS(s(3), clk)

BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s(3) = '1' THEN

pc_on_mar_page_bus <= '1';

pc_on_mar_offset_bus <= '1';

load_page_mar <= '1';

load_offset_mar <= '1';

IF ir_lines (7 DOWNTO 4) /= "1110" THEN s(4) <= '1';

ELSE s (4) <= '0';

END IF;

END IF;

END IF;

IF (ir_lines (7 DOWNTO 4) /= "1110") THEN IF ir_lines (1) = '1' THEN

alu_not <= '1';

alu_b <= '0';

ELSE

alu_not <= '0';

alu_b <= '1';

END IF;

IF ir_lines (3 DOWNTO 0) = "1000" THEN arith_shift_left <= '1';

ELSE

arith_shift_left <= '0';

END IF;

IF ir_lines (3 DOWNTO 0) = "1001" THEN arith_shift_right <= '1';

ELSE

arith_shift_right <= '0';

END IF;

IF (ir_lines (3) = '1' OR ir_lines(1) = '1') THEN load_sr <= '1';

load_ac <= '1';

ELSE

load_sr <= '0';

load_ac <= '0';

END IF;

IF ir_lines (2) = '1' THEN cm_carry_sr <= '1';

ELSE cm_carry_sr <= '0';

END IF;

IF (ir_lines (3) = '0' AND ir_lines(0) = '1') THEN zero_ac <= '1';

ELSE zero_ac <= '0';

s(2) <= '1';

END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S3

I D 3 c l V

2

VVV

p c _ o n _ m a r _ p a g e _ b u s p c _ o n _ m a r _ o f f s e t _ b u s l o a d _ p a g e _ m a r l o a d _ o f f s e t _ m a r

I R 7 I R 6 I R 5 I R 4

I R 3 21 I R 30

21 0 I R 1

I R 1

I R 3

I R 3 1 I R 3

0 1

I R 2

a r i t h _ s h i f t _ l e f t a r i t h _ s h i f t _ r i g h t

a l u _ n o t

a l u _ b l o a d _ s r

c m _ c a r r y _ s r l o a d _ a c

z e r o _ a c 4

V

Hình 33.

Khi trạng thái 3 tích cực, trạng thái 3 bắt đầu xử lý đọc byte tiếp theo từ bộ nhớ, trong cùng thời gian đó nó kiểm tra số byte trong chỉ thị lệnh hiện hành. Nếu nó là lệnh hai byte thì byte kế tiếp trở thành byte địa chỉ của nó và trạng thái 4 được kích hoạt để tiếp tục thực hiện 2 byte lệnh. Trên quyền khác, nếu lệnh hiện hành là lệnh không địa chỉ và không đòi hỏi byte 2, thực hiện trạng thái 3 và kích hoạt trạng thái 2 để thực hiện lệnh tiếp theo.

Những lệnh không địa chỉ (một byte) thực hiện tính toán trên thanh ghi và những cờ.

- Tớn hiệu alu_b được kớch hoạt vỡ thế ngừ ra alu chứa nội dung của acc.

- Hàm arith_shift_right của alu được chọn nó dịch chuyển nội dung của acc sang bên phải.

- Ngừ nhập của thanh ghi trạng thỏi thỡ được cho phộp vỡ thế những giá trị mới của những cờ được phát ra bởi thanh ghi dịch và nạp vào trong thanh ghi trạng thái.

- Ngừ nhập của acc được cho phộp vỡ thế được nạp vào thanh ghi này với ngừ ra của thanh ghi dịch.

Trạng thái 4 s4: PROCESS(s (4), clk) BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s(4) = '1' THEN

mar_on_adbus <= '1';

databus_on_dbus <='1';

dbus_on_mar_offset_bus <= '1';

load_offset_mar <= '1';

IF (ir_lines (7 DOWNTO 6) /= "11") THEN ir_on_mar_page_bus <= '1';

load_page_mar <= '1';

IF (ir_lines (4) = '1') THEN s(5) <= '1'; s(6) <= '0';

ELSE

s(5) <= '0'; s(6) <= '1';

END IF;

IF (ir_line s(5) = '0') THEN s(7) <= '1'; s(9) <= '0';

ELSE

s(7) <= '0'; s(9) <= '1';

END IF;

END IF;

increment_pc <= '1';

END IF; --s (4) END IF; --clk END PROCESS;

Mô tả phần cứng của khối S4

I D 4 c l V

VVVV

d a ta b u s _ o n _ d b u s d b u s _ o n _ m a r _ o f f s e t _ b u s l o a d _ o f f s e t _ m a r

i n c r e m e n t _ p c

I R 7

VV VV

5

6

9

7

6 I R 5

I R 5

i r _ o n _ m a r _ p a g e _ b u s l o a d _ p a g e _ m a r m a r _ o n _ a d b u s

r e a d _ m e m

Hình 34.

Trạng thái 4 được kích hoạt khi địa chỉ đầy đủ hoặc địa chỉ trang được thực thi. Để chuẩn bị đọc byte thứ hai của lệnh trong trạng thái 3, load_offset_mar được kích hoạt, byte này sẽ phát xung clock trong mar trên cạnh xuống tiếp theo của xung clock. Nếu lệnh được thực thi là lệnh địa chỉ đầy đủ thỡ số trang ir chuyển sang trạng thỏi sẳn sàng ở ngừ nhập của trang mar trong thanh ghi với xung kế tiếp. Nếu lệnh được thực thi là jsr hoặc bra thì thanh ghi mar_page giữ lại giá trị hiện hành. Bởi vì đây là những lệnh địa chỉ duy nhất trong trang hiện hành.

Trạng thái 4 kích hoạt trạng thái 5 hoặc trạng thái 6 cho những cách trình bày địa chỉ trực tiếp hoặc gián tiếp của những lệnh địa chỉ đầy đủ và nó kích hoạt trạng thái 7 hoặc trạng thái 9 bởi những lệnh jsr hoặc bra.

Trạng thái 5

s5: PROCESS(s(5), clk) BEGIN

IF (clk='0' AND clk'EVENT) THEN IF s(5) = '1' THEN

mar_on_adbus <= '1';

read_mem <= '1';

databus_on_dbus <= '1';

dbus_on_mar_offset_bus <= '1';

load_offset_mar <= '1';

s(6) <= '1';

END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S5

I D c l

5

VVV

d b u s _ o n _ m a r _ o f f s e t _ b u s lo a d _ o f f s e t _ m a r

r e a d _ m e m

V

d a t a b u s _ o n _ d b u s

Vm a r _ o n _ a d b u s

6

V

Hình 35.

Cạnh xuống của xung clock kích hoạt trạng thái 5 ngoài ra nó cũng nạp địa chỉ đầy đủ vào mar. Trong trạng thái này vị trí con trỏ của bộ nhớ chuyển đến mar đọc dữ liệu trờn databus và tạo giỏ trị trờn ngừ nhập của thanh ghi mar_offset. Sự kích hoạt load_offset_mar là nguyên nhân để mar nạp những byte từ bộ nhớ trên cạnh đối của xung clock. Trạng thái 5 kích hoạt trạng thái 6 mà trạng thái này thì giống như được kích hoạt bởi trạng thái 4 nếu địa chỉ trực tiếp được sử dụng.

Trạng thái 6

Trạng thái 6 được kích hoạt khi những lệnh thực thi là jmp, sta, lda, and, add hoặc sub. Trong trạng thái này mar chứa những toán hạng địa chỉ đầy đủ.

s6: PROCESS (s(6), clk) BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s(6) = '1' THEN

IF (ir_lines (7 DOWNTO 5) = "100") THEN load_page_pc <= '1';

load_offset_pc <= '1';

s(2) <= '1';--goto 2 END IF;

IF (ir_lines (7 DOWNTO 5) = "101") THEN mar_on_adbus <= '1';

alu_b <= '1';

obus_on_dbus <= '1';

dbus_on_databus <= '1';

write_mem <= '1';

s(1) <= '1';

END IF;

IF (ir_lines (7) = '0') THEN mar_on_adbus <= '1';

read_mem <= '1';

databus_on_dbus <= '1';

IF ir_lines (6 DOWNTO 5) = "00" THEN alu_a <= '1';

ELSE alu_a <= '0';

END IF;

IF ir_lines (6 DOWNTO 5) = "01" THEN alu_and <= '1';

ELSE alu_and <= '0';

END IF;

IF ir_lines (6 DOWNTO 5) = "10" THEN alu_add <= '1';

ELSE alu_add <= '0';

END IF;

IF ir_lines (6 DOWNTO 5) = "11" THEN alu_sub <= '1';

ELSE alu_sub <= '0';

END IF;

load_sr <= '1';

load_ac <= '1'; s(1) <= '1';

END IF;

END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S6

c l I D 6

2

1

...

i r 7 56

i r 7 65

VV

i r 7 1

VVVVVVVVVV VVVV

a l u _ a a l u _ a n d

a l u _ a d d a l u _ s u b i r 5

i r 6

m a r _ o n _ a d b u s r e a d _ m e m d a t a b u s _ o n _ d b u s l o a d _ s r

l o a d _ a c a l u _ b

m a r _ o n _ a d b u s

d b u s _ o n _ d a t a b u s w r i t e _ m e m o b u s _ o n _ d b u s l o a d _ p a g e _ p c l o a d _ o f f s e t _ p c V

Hình 36.

Trạng thái 7 s7: PROCESS(s (7), clk) BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s (7) = '1' THEN

mar_on_adbus <= '1';

pc_offset_on_dbus <= '1';

dbus_on_databus <= '1';

write_mem <= '1';

load_offset_pc <= '1';

s (8) <= '1'; --goto 8 END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S7

l o a d _ o f f s e t _ p c

VV

w r i t e _ m e m

V

7

V

V

V

m a r _ o n _ a d b u s

I D 8

c l

d a t a b u s _ o n _ d a t a b u sp c _ o f f s e t _ o n _ d b u s

Hình 37.

Ở trạng thái 7 tiếp tục thực thi lệnh jsr. Trong trạng thái này ghi nội dung của pc vào thủ tục mar và trong cùng thời gian này địa chỉ đầu của thủ tục chuyển vào thanh ghi pc.

Trạng thái 8 s8: PROCESS(s(8), clk) BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s (8) = '1' THEN

increment_pc <= '1';

s(1) <= '1';

END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S8

8 c l V I D

V

9

i n c r e m e n t _ p c

Hình 38.

Sau trạng thái 7 trên cạnh xuống của xung clock thì trạng thái 8 tích cực để thực thi lệnh jsr. Trong trạng thái này pc chứa vị trí đầu tiên của thủ

tục. Trong trạng thái 8 nạp tín hiệu increment_pc và kích hoạt trạng thái 1 để nạp lệnh đầu tiên của thủ tục.

Trạng thái 9 s9: PROCESS(s (9), clk) BEGIN

IF (clk = '0' AND clk'EVENT) THEN IF s(9) = '1' THEN

IF (status AND ir_lines (3 DOWNTO 0)) /= "0000" THEN load_offset_pc <= '1';

ELSE

load_offset_pc <= '0';

END IF;

s(1) <= '1'; --goto 1 END IF;

END IF;

END PROCESS;

Mô tả phần cứng của khối S9

c l 9

V

I D 1

l o a d _ o f f s e t _ p c i r 3

s t a t u s 3 i r 2 s t a t u s 2 i r 1 s t a t u s 1 i r 0 s t a t u s 0

Hình 39.

Khi trạng thái 4 kích hoạt và một lệnh rẽ nhánh bắt đầu thực thi khi đó trạng thái 9 được kích hoạt, địa chỉ lệnh rẽ nhánh ở trong thanh ghi mar.

Trạng thái 9 nạp mar vào trong pc nếu phù hợp thì tìm giữa bit 3 và bit 0 của lệnh rẽ nhánh và những bit thanh ghi trạng thái. Nếu điều kiện rẽ nhánh không thoả mãn thì pc giữ lại giá trị của nó.Trong một số trường hợp bộ điều khiển trả về trạng thái 1 để thực hiện lệnh kế tiếp

Kết hợp các hình từ hình 28 đến 36 thành mô hình hoạt động của khối ủieàu khieồn nhử sau(xem theõm [2])

1 q

I D c l

...

V

2 q

I D c l

..

Vcl 3 q I D

I D 4 q

c l V I D 6 q

c l V Vcl

5 q I D

..

Vcl 7 q I D

..

Vcl 8 q I D

..

Vcl 9 q I D

..

.. ...

...

V .. ..

..

..

..

.

VV VV

VVVV VV VVVVVV

V

V

l g s 1 l g s 2

l g s 4 l g s 3

Hình 40.

Trong hình các khối hình vuông 1, 2, 3, 4, 5, 6, 7, 8, 9 là những khối điều khiển trạng thái từ 1 đến 9.

Những khối hình tròn lgs1, lgs2, lgs3, lgs4 là những khối luận lý làm nhiệm vụ chọn lựa điều kiện thực hiện trạng thái tiếp theo.

Một phần của tài liệu Thiết kế CPU dùng ngôn ngữ VHDL (Trang 48 - 62)

Tải bản đầy đủ (DOC)

(73 trang)
w