Thứ Năm, 27 tháng 2, 2014

THIẾT KẾ RISC MICROCONTROLLER SỬ DỤNG VHDL

ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
5


II> KHÁI QUÁT VỀ RISC VÀ CISC


1. Comples Instruction Set Computer (CISC)

Những năm trước đây, Tập lệnh của máy tính có số lượng lệnh ít và đơn giản.
Với sự phát triển của kỹ thuật và yêu cầu của các ứng dụng khác nhau, tập lệnh của máy tính ngày
càng tăng về số lượng lẫn độ phức tạp( sử dụng nhiều loại dữ liệu và nhiều mode định địa chỉ).
Một máy tính có tập lệnh lớn và phức t
ạp được gọi là CISC(Complex Intrucstion Set Computer).

Đặc tính cơ bản của cấu trúc CISC:
- Có số lượng lệnh rất nhiều, thông thường từ 100 tới 250 lệnh.
- Một số lệnh thực hiện các chức năng đặc biệt và thường không được sử dụng.
- Rất nhiều chế độ định địa chỉ, thường có khoảng từ 5->20 chế độ định địa chỉ.
- Cấu trúc lệnh không cố
định và dài, thường từ 2 tới 6 bytes.
- Lệnh có tóan hạng chứa trong ô nhớ.



2. Reduce Instruction Set Computer (RISC)

Vào đầu năm 1980, trong các thống kế của hệ thống máy tính, người ta thấy
hầu hết 80% số lệnh trong tập lệnh ít được sử dụng. Vì vậy để tăng hiệu quả cho ứng dụng và việc
thiết kế, người ta đặt ra vấn đề về một máy tính có tập lệnh được rút gọn và đơn giản được gọi là
RISC (Reduce Intruction Set Computer).

Đặc tính cơ bản của cấu trúc RISC:
- Chu kỳ l
ệnh được chia thành 2 chu kỳ: tìm nạp lệnh và thực thi lệnh.
- Lệnh được thực thi trong 1 chu kỳ xung clock.
- Lệnh có chiều dài cố định(16 bit hay 32 bit), và có định dạng dễ giải mã.
- Tập lệnh có số lượng lệnh ít.
- Ít chế độ định địa chỉ.
- Hạn chế lệnh truy xuất bộ nhớ, chỉ truy xuất thông qua con trỏ dữ liệu.
- Tất cả các lệnh được thự hiện thông qua các thanh ghi của CPU.
- Th
ường sử dụng mạch logic để điều khiển thực thi lệnh hơn là sử dụng vi chương
trình (microprogram) như CISC.
- Số lượng thanh ghi đa năng khá nhiều (ít nhất là 32 Register).
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
6

III> TẬP LỆNH:



1. Tóm tắt Tập lệnh

Thiết kế dựa trên tập lệnh của Atmel AVR AT90S1200. Bằng cách này,
Thiết kế có thể sử dụng các công cụ assempler, simulater do Atmel cung cấp.
Tập lệnh được chia thành 4 nhóm lệnh:(xem bảng 3.1)

- Nhóm lệnh số học và logic: gồm các lệnh tính tóan số học và logic
- Nhóm lệnh rẽ nhánh: gồm các lệnh nhảy không điều kiện, nhảy có điều
kiện theo các cờ trạng thái, lệnh gọi hàm và Return.
- Nhóm lệnh truyền dữ liệu: gồ
m các lệnh di chuyển dữ liệu giữa các thanh
ghi,

ô nhớ RAM và Port IO bên ngoài.
- Nhóm lệnh về bit: gồm các lệnh bit như xóa, đặt bit, lệnh dịch xoay


2. Chế độ định Địa chỉ (Addressing Modes):


Theo thiết kế thì RISC có 6 chế độ định địa chỉ. RA, RB được xem như là
tóan hạng đích và toán hạng nguồn.

2.1 Định địa chỉ trực tiếp thanh ghi đơn:
Lệnh có một toán hạng là RA: vừa là thanh ghi nguồn vừa là thanh ghi đích.
Ví dụ như lệnh: dịch, xoay, set bit

2.2 Định địa chỉ trực tiếp thanh ghi đôi:
Lệnh có hai toán hạng là RA và RB. Sau khi tính tóan kết quả được ghi vào
RA.Ví dụ như lệnh tóan học và logic…

2.3 Định địa chỉ I/O trực tiếp :
Toán hạng là I/O register. Địa chỉ được chứa trong 6 bit trong từ lệnh. Cách
định địa chỉ này được sử dụng trong lệnh IN và OUT.

2.4 Định địa chỉ dữ liệu gián tiếp:
Tóan hạng là ô nhớ Ram có địa chỉ chứa trong thanh ghi Z. Cách định địa chỉ
được sử dụng trong lệnh LD và St.

2.5 Định địa chỉ tương đối bộ nhớ chương trình:
Cách định địa ch
ỉ này được sử dụng trong lệnh RJMP, RCALL. Địa chỉ lệnh
kế được tính bằng PC + Offset. Offset được chứa trong từ lệnh.

2.6 Định địa chỉ tức thời:
Tóan hạng là hằng số 8 bit đựơc cho trong từ lệnh
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
7
Bảng 3.1 Tóm tắt Tập lệnh

Mnemonic Operation Flags
ARITHMETIC AND LOGIC INSTRUCTIONS
ADD Add Two Registers S,Z,C,N,V,H
ADC Add with Carry Two Registers S,Z,C,N,V,H
SUB Subtract Two Registers S,Z,C,N,V,H
SUBI Subtract Constant from Register S,Z,C,N,V,H
SBC Subtract with Carry Two Registers S,Z,C,N,V,H
SBCI Subtract with Carry Constant from Register S,Z,C,N,V,H
AND Logical AND Registers S,Z,N,V
ANDI Logical AND Register and Constant S,Z,N,V
OR Logical OR Registers S,Z,N,V
ORI Logical OR Register and Constant S,Z,N,V
EOR Exclusive OR Registers S,Z,N,V
COM One’s Complement Register S,C,Z,N,V
NEG Negate (2’s Complement) Register S,C,Z,N,V,H
SBR Set Bit(s) in Register S,Z,N,V
CBR Clear Bit(s) in Register S,Z,N,V
INC Increment S,Z,N,V
DEC Decrement S,Z,N,V
TST Test for Zero or Minus S,Z,N,V
CLR Clear Register S,Z,N,V
SER Set Register None
BRANCH INSTRUCTIONS
RJMP Relative Jump None
RCALL Relative Subroutine Call None
RET Subroutine Return None
CP Compare (Rd - Rr) S,C,Z,N,V,H
CPC Compare with Carry (Rd - Rr - C) S,C,Z,N,V,H
CPI Compare Register with Immediate (Rd – K) S,C,Z,N,V,H
BRBS Branch if Status Flag Set None
BRBC Branch if Status Flag Cleared None
BREQ Branch if Equal (Z = 1) None
BRNE Branch if Not Equal (Z = 0) None
BRCS Branch if Carry Set (C = 1) None
BRCC Branch if Carry Cleared (C = 0) None
BRSH Branch if Same or Higher (C = 0) None
BRLO Branch if Lower (C = 1 None
BRMI Branch if Minus (N = 1) None
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
8
BRPL Branch if Plus (N = 0) None
BRGE Branch if Greater of Equal, Signed (S = 1) None
BRLT Branch if Less than Zero, Signed (S = 0) None
BRHS Branch if Half Carry Set (H = 1) None
BRHC Branch if Half Carry Cleared (H = 0) None
BRVS Branch if Overflow Flag is Set (V = 1) None
BRVC Branch if Overflow Flag is Cleared (V = 0) None
DATA TRANSFER INSTRUCTIONS
MOV Move Between Registers None
LDI Load Immediate to Register None
LD Z Load Indirect with Z-Pointer None
LD Z+ Load Indirect and Post-Increment with Z-Pointer None
LD –Z Load Indirect and Pre-Decrement with Z-Pointer None
ST Z Store Indirect with Z-Pointer None
ST Z+ Store Indirect and Post-Increment with Z-Pointer None
ST -Z Store Indirect and Pre-Decrement with Z-Pointer None
IN In Port to Register None
OUT Out Register to Port None
BIT INSTRUCTIONS
SBI Set Bit in I/O Register None
CBI Clear Bit in I/O Register None
LSL Logical Shift Left S,C,Z,N,V
LSR Logical Shift Right S,C,Z,N,V
ROL Rotate Left through Carry S,C,Z,N,V
ROR Rotate Right through Carry S,C,Z,N,V
ASR Arithmetic Shift Right S,C,Z,N,V
SWAP Swap Nibbles None
BSET Flag Set Any
BCLR Flag Clear Any
SEC Set Carry C
CLC Clear Carry C
SEN Set Negative Flag N
CLN Clear Negative Flag N
SEZ Set Zero Flag Z
CLZ Clear Zero Flag Z
SES Set Signed Test Flag S
CLS Clear Signed Test Flag S
SEV Set Two’s Complement Overflow V
CLV Clear Two’s Complement Overflow V
SHE Set Half-carry Flag in SREG H
CLH Clear Half-carry Flag in SREG H
NOP No Operation None
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
9

3. Các Định dạng Lệnh:

Lệnh của RISC có chiều dài cố định và dễ giải mã. Trong Thiết kế này, lệnh
có chiều dài là 16 bit và có những định dạng sau đây để tiện cho việc giải mã.

Đối với lệnh có 2 toán hạng là thanh ghi đa dụng, mỗi toán hạng cần 4 bit
d(destination) và r(soure) ,ứng với địa chỉ 32 thanh ghi đa năng, để định địa chỉ thanh ghi. Ví dụ
như lệnh ADD, AND




Đối với các lệnh có 1 toán hạng là thanh ghi, cầ
n 4 bit
d
để định địa chì cho
tóan hạng đích và nguồn. ví dụ như các lệnh NEG, CMP




Đối với các lệnh có tóan hạng là hằng số (định địa chỉ tức thời), thì từ lệnh
phải chứa 8 bit K của hằng số và 4 bit
d
địa chỉ của thanh ghi nguồn. Ví dụ như các lệnh ANDI,
ADDI




Đối với các lệnh rẽ nhánh không điều kiện như lệnh RJMP,RCALL thì cần 9
bit K làm giá trị bù 2 của Offset.




Đối với các lệnh rẽ nhánh có điều kiện như lệnh BRBS, BRBC thì cần 7 bit
K làm giá trị bù 2 của Offset và thêm 3
s
bit để chọn điều kiện nhảy, chọn 1 trong 8 cờ trạng thái




Đối với các lệnh có toán hạng là Port I/O thì từ lệnh có chứa 4 bit A để xác
định địa chỉ I/O, và 4 bit
d
để xác định tóan hạng đích, ví dụ như lệnh IN, OUT , hoặc 3 bit
b
để
xác định 1 trong 8 bit I/O cần tác động, ví dụ như lệnh SBI,SBI.


d d d d r r r r


15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
d d d d


15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
d d d d K K K K

K K K K
15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
K K K K K K K K

K
15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
K K K K K s s s

K K
15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
10








Đối với các lệnh tác động đến bit của thanh ghi trạng thái ví dụ như lệnh
BCLR, BSET thì cần 3 bit
s
để chọn 1 trong 8 bit của thanh ghi.





4, Mã máy:

Trong tập lệnh có thể ghép các lệnh tương đương để có thể sử dụng chung
mã máy. Chính vì vậy mà tập mã máy sẽ được rút gọn hơn giúp cho việc giải mã đơn giản hơn.
bảng 3.2 chỉ ra các lệnh tương đương sử dụng chung mã máy và bảng 3.3 là bảng tập mã máy

ADD LSL
ADC ROL
AND TST
EOR CLR
ORI SBR
ANDI CBR
LDI SER
BCLR CLI, CLT, CLH, CLS, CLV, CLN, CLZ, CLC
BSET SEI, SET, SEH, SES, SEV, SEN, SEZ, SEC
BRBC BRID, BRTC, BRHS, BRGE, BRVC, BRPL, BRNE, BRCC,
BRSH
BRBS BRIE, BRTS, BRHS, BRLT, BRVS, BRMI, BREQ, BRCS,
BRLO
Bảng 3.2 Các lệnh tương đương

Ví dụ: lệnh ADD và lệnh LSL. Ta thấy lệnh LSL là lệnh dịch trái tương ứng với
việc nhân 1 số với 2. Nếu lệnh ADD thực hiện cộng 2 số hạng giống nhau sẽ tương đương với
việc nhân 1 số với 2. Như vậy 2 lệnh này tương đương nhau có thể sử dụng chung mã máy.
d d d d A A A A


15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
A A A A b b b


15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
s s s


15 14 13 12 | 11 10 9 8 | 7 6 5 4 | 3 2 1 0
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
11
Bảng 3.3 Tập mã máy

NOP 0000 0000 0000 0000
CPC 0000 01rd dddd rrrr
SBC 0000 10rd dddd rrrr
ADD 0000 11rd dddd rrrr (LSL)
NO OPERATION
COMPARE WITH CARRY
SUBTRAC WITH CARRY

CP 0001 01rd dddd rrrr
SUB 0001 10rd dddd rrrr
ADC 0001 11rd dddd rrrr (ROL)
COMPARE


AND 0010 00rd dddd rrrr (TST)
EOR 0010 01rd dddd rrrr (CLR)
OR 0010 10rd dddd rrrr
MOV 0010 11rd dddd rrrr

XOR
CPI 0011 KKKK dddd KKKK
COMPARE IMMEDIATE
SBCI 0100 KKKK dddd KKKK
SUB IMMEDIATE WITH CAR.
SUBI 0101 KKKK dddd KKKK

ORI 0110 KKKK dddd KKKK (SBR)

ANDI 0111 KKKK dddd KKKK (CBR)

LD 1000 000d dddd 0000
ST 1000 001r rrrr 0000
( Z ) <= (ddddd)
(ddddd) <= ( Z )
LD Z+ 1001 000d dddd 0001
LD –Z 1001 000d dddd 0010
ST Z+ 1001 001r rrrr 0001
ST –Z 1001 001r rrrr 0010
COM 1001 010d dddd 0000
NEG 1001 010d dddd 0001
SWAP 1001 010d dddd 0010
INC 1001 010d dddd 0011
ASR 1001 010d dddd 0101
LSR 1001 010d dddd 0110
ROR 1001 010d dddd 0111
DEC 1001 010d dddd 1010
RET 1001 0101 0000 1000
CBI 1001 1000 AAAA Abbb
SBI 1001 1010 AAAA Abbb





COMPLEMENT



ARITHMETIC SHIFT RIGHT





CLEAR BIT IO
SET BIT IO
IN 1011 0AAd dddd AAAA
OUT 1011 1AAr rrrr AAAA

RJMP 1100 kkkk kkkk kkkk

RCALL 1101 kkkk kkkk kkkk

LDI 1110 KKKK dddd KKKK
LOAD IMMEDIATE
BRBS 1111 00kk kkkk ksss
BRBC 1111 01kk kkkk ksss
BRANCH BIT SET
BRANCH BIT CLEAR
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
12


IV > PIPELINE PROCESSING


1. Chu kỳ Lệnh:

Khác với CISC, trong cấu trúc của RISC chu kỳ lệnh được chia thành 2 chu
kỳ nhỏ: chu kỳ tìm nạp lệnh (Fetch) và Chu kỳ thực thi lệnh (Execute) đươc thể hiện ở hình 4.1.

FETCH EXECUTE
Instruction Fetch PC count Push Pop Decode & operate Latch Write
Hình 4.1 Chu kỳ lệnh của RISC

Trong chu kỳ tìm nạp lệnh, mã máy của 1 lệnh được nạp vào thanh ghi lệnh, PC bắt
đầu nạp lệnh mới.Tại chu kỳ thực thi lệnh đơn vị điều khiển sẽ giải mã biết lệnh cần thực hiện và
tóan hạng cần tác động , tính tóan kết quả, chốt kết quả, và ghi lại kết quả tại pha cuối cùng của
chu kỳ thực thi lệnh.

Ví dụ như
lệnh ADD R1,R2;
Tại chu kỳ tìm nạp lệnh, mã máy lệnh ADD đươc đưa vào thanh ghi lệnh và PC tiếp
tục tìm nạp lệnh mới. Tại chu kỳ thực thi lệnh, Đơn vị điều khiển sẽ giải mã lệnh và thưc hiện
Cộng R1 và R2 sau đó kết quả được chốt lại, tới pha cuối của chu kỳ thực thi lệnh thi kết quả sẽ
được ghi trở lại vào R1. Chu kỳ lệ
nh ADD đã hoàn thành.


2. Sử dụng Đường ống (PipeLine)

Như đã đề cập, chu kỳ lệnh của RISC sẽ được chia thành 2 chu kỳ Fetch và
Execute. Nếu 2 chu kỳ này họat động nối tiếp nhau, chu kỳ đầu tìm nạp lệnh chu kỳ 2 thực thi
lệnh như hình 4.2, thì 1 chu kỳ lệnh sẽ phải mất 2 chu kỳ xung clock.


Hình 4.2: Chu kỳ lệnh của MCU không sử dụng PipeLine



Ý tưởng của việc sử dụng đường ống ở đây là cho 2 chu kỳ Fetch và Execute
cùng họat động song song, có nghĩa là trong 1 chu kỳ xung clock MCU sẽ tìm nạp lệnh mới và
thực thi lệnh củ xem hình 4.3, vì vậy để thực hiện một chu kỳ lệnh chỉ tốn 1 xung clock, do đó
RISC sẽ hoạt động nhanh hơn.
Fetch0  Execute0  Fetch1  Execute1  Fetch 2  Execute2
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
13

Clock Transition Reset T1 T2 T3
PC(Program Counter) 0 1 2 3
Instruction 0 Fetch 0 Execute 0

Instruction 1

Fetch 1 Execute 1

Instruction 2

Fetch 2 Execute 2
Hình 4.3:chu kỳ lệnh sử dụng Pipeline

Tại chu kỳ Reset = 0 lệnh 0 được tìm nạp, sau đó tại chu kỳ 1 lệnh 0 sẽ được
thực hiện đồng thời PC sẽ tìm nạp lệnh 1. Và tại chu kỳ 2, lệnh 1 sẽ được thực thi đồng thời PC
sẽ tìm nạp lệnh 2 cứ như thế MCU sẽ tìm nạp và thực thi chương trình song song với nhau, PC
sẽ trỏ đến lệnh đang được tìm nạp và sẽ được thực thi ở
chu kỳ kế.


3. Nghẽn đường ống

Khi gặp lệnh rẽ nhánh đường ống sẽ bị nghẽn. Do trong khi lệnh rẽ nhánh
được thực thi thì lệnh kế đó đã được đưa vào đường ống, nhưng trong trường hợp lệnh rẽ nhánh
nhảy đến thực thi 1 lệnh khác với lệnh đã nạp trong đường ống thì hiện tượng nghẽn đường ống sẽ
xảy ra xem hình 4.4.



Clock Transition T1 T2 T3 T4 T5
PC 20 21 73 74 75
20 (Branch to 73) Fetch 20 Execute 20 Execute 21 Execute 73

Instruction 21

Fetch 21 Flushed

Instruction 22

Fetch 73

Instruction 23

Fetch 74 Execute 75

Hình 4.4 hiện tượng nghẽn đường ống


Để giải quyết việc nghẽn đường ống thì: Do đường ống chỉ có 2 đơn vị hoạt
động song song. Khi lệnh kế tiếp thực thi đang vào đường ống thì lệnh rẽ nhánh cũng đang thực
thi, nếu lệnh rẽ nhánh có yêu cầu rẽ nhánh thì PC sẽ phải nạp giá trị mới và tìm nạp lệnh tại điểm
nhảy đến thay vì nạp lệnh kế để đưa vào
đường ống. như vậy việc nghẽn đường ống đã được khắc
phục.
ĐAMH Điện Tử Viễn Thông II ___________________________________ GVHD: Hồ Trung Mỹ
_____________________________________*******______________________________________
Thiết kế RISC microcontroller _________________________________ SVTH: Phạm Hưng Thịnh
_____________________________________*******______________________________________
14


V> SƠ ĐỒ KHỐI CỦA THIẾT KẾ RISC

1. SƠ ĐỒ CHÂN









Hình 5.1 sơ đồ chân của RISC


Vi điều khiển có 3 port I/O Port B, Port C, Port D, và có 2 chân input
là clock và Reset(tích cực thấp). Mỗi Port có 8 bit (theo thiết kế port này chỉ là port xuất).


2. Sơ đồ khối của RISC


Hình 5.2 Top-level Block of Risc






















PC
Instruction Register

Control Unit

ROM

General Register
ALU
Status Register

RAM
Port A
Port B
Port C
Instruction Decoder
. . . . . . . . . . .
D
A
T
A
M
U
X
Latch

Không có nhận xét nào:

Đăng nhận xét