THIẾT KẾ RISC MICROCONTROLLER SỬ DỤNG VHDL
Trang 1Trường Đại học Bách Khoa Tp HCM
Khoa Điện-Điện tử
ĐỒ ÁN MÔN HỌC ĐIỆN TỬ VIỄN THÔNG 1
ĐỀ TÀI: THIẾT KẾ RISC MICROCONTROLLER
GVHD: HỒ TRUNG MỸ SVTH : PHẠM HƯNG THỊNH MSSV : 40202563
Trang 2Lời mở đầu
Hiện nay, công nghệ vi mạch phát triển rất nhanh và tạo ra rất nhiều hướng phát triển mới cho tương lai Điển hình cho sự phát triển nay là xuất hiện của các IC logic lập trình được như PLA, FPGA, ASIC các IC nay có mức độ tích hợp ngày càng cao(có thể chứa trên 1 triệu Transitor đối với loại VLSI), các ứng dụng của nó cũng trở nên phổ biến hơn.Do mức độ tích hợp của các IC cao dẫn theo sự phức tạp trong cấu trúc của nó,chinh
vì vây yêu cầu đặt ra là cần có 1 công cụ vạn năng để hỗ trợ cho việc thiết kế số Từ đó dẫn đến sự ra đời của các ngôn ngữ mô tả phần cứng như VHDL,Verilog Nó giúp cho các nhà thiết kế dễ dàng hơn trong việc thiết kế hệ thống số dựa trên các IC lập trình được này
Em chọn đề tài “Thiết kế Risc Microcontroller dùng VHDL” với mục đích là tìm hiểu về các IC Logic lập trình được, cách thức lập trình mô tả phần cứng trên ngôn ngữ VHDL, và cấu trúc, họat động của 1 MCU dạng RISC
Em xin chân thành cảm ơn các thầy cô trong trường Đại học Bách khoa TPHCM nói chung và các thầy cô trong khoa Điện- Điện tử nói riêng đã truyền dạy những kinh nghiệm quý báu và giúp đở em trong suốt quá trình học tập
Đặc biệt, em xin gửi lời cảm ơn chân thành đến thầy HỒ TRUNG MỸ người đã tận tình giúp đở em hoàn thành đồ án này
Trang 3Mục lục
trang
VII> THIẾT KẾ ĐƠN VỊ ĐIỀU KHIỂN (CONTROL UNIT) 25 VIII> CHƯƠNG TRÌNH VHDL VÀ KẾT QUẢ MÔ PHỎNG 28
Trang 4I> GIỚI THIỆU ĐỀ TÀI
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
Do giới hạn của đề tài nên RISC MCU không hỗ trợ ngắt ngoài, Timer, Port
IO 2 chiều, analog comparator, điện trở kéo lên bên trong, watchdog reset như AVR AT90s1200
Thiết kế sử dụng phần mềm MAX + plus II để thực hiện và mô phỏng thiết
kế MAX + plus II là phần mềm do ALTERA phát triển Nó có một số Modul quan trọng
cho thiết kế, ví dụ như Compiler, Simulater, Wavefrom editor, và Programmer
Trang 5II> 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)
Trang 6III> 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
Trang 7
ARITHMETIC AND LOGIC INSTRUCTIONS
ADC Add with Carry 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
ANDI Logical AND Register and Constant S,Z,N,V
ORI Logical OR Register and Constant 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
CBR Clear Bit(s) in Register S,Z,N,V
RCALL Relative Subroutine Call None
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
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
Trang 8BRPL 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
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
BIT INSTRUCTIONS
CBI Clear Bit in I/O Register None
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
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
Trang 9Lệ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
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
Trang 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
Trang 11SBCI 0100 KKKK dddd KKKK SUB IMMEDIATE WITH CAR SUBI 0101 KKKK dddd KKKK
CBI 1001 1000 AAAA Abbb
SBI 1001 1010 AAAA Abbb
COMPLEMENT
ARITHMETIC SHIFT RIGHT
CLEAR BIT IO SET BIT IO
Trang 12IV > 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
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
Trang 13Clock Transition Reset T1 T2 T3
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
20 (Branch to 73) Fetch 20 Execute 20 Execute 21 Execute 73
Instruction 21 Fetch 21 Flushed
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
Trang 14V> 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
Trang 15- Đơn vị Giải mã và điều khiển lệnh (Control Unit): có các Modul giải mã lệnh và Modul điều khiển
- Đơn vị Đường dữ liệu: gồm có Program Couter, thanh ghi lệnh, ALU, RAM, Status Register, General Register, Data Mux, I/O
Program Counter chứa địa chỉ lệnh thực thi, nó gởi địa lệnh chỉ đến ROM chương trình Lệnh từ Rom chương trình sẽ được chốt vào thanh ghi lệnh (IR) Đơn vị điều khiển
sẽ nhận lệnh từ IR để giải mã và điều khiển các tín hiệu đồng bộ để thực thi lệnh
Do RISC hạn chế về truy xuất ô nhớ, nên RISC không có các lệnh truy xuất trực tiếp từ ô nhớ của RAM chỉ có lệnh LD và ST dùng truy xuất gián tiếp thông qua con trỏ Z là thanh ghi đa năng
Tập thanh ghi đa năng chứa 16 thanh ghi, cung cấp đồng thời 2 tóan hạng thanh ghi cho ALU, và địa chỉ là nội dung thanh ghi Z trỏ tới ô nhớ Ram ALU có nhiệm vụ thực thi các phép tính trên 2 toán hạng Data mux dùng để chọn dữ liệu để ghi vào tập thanh ghi đa năng hoặc làm toán hạng cho ALU Modul I/O gồm 3 thanh ghi mà các bít được đưa ra ngoài ở chân ngỏ ra.các thanh ghi I/O có thể được đọc và ghi thông qua các bus dữ liệu
RISC có 2 đơn vị Tìm nạp lệnh và thực thi họat song song nên đòi hỏi phải
có bộ nhớ Chương trình và bộ nhớ dữ liệu phải tách biệt Như trong hình 5.2 thi bộ nhớ Chương trình sẽ được lưu trong ROM và bộ nhớ dữ liệu được cất trong RAM RAM sẽ được khởi động với giá trị là 00H
Trang 16VI> THIẾT KẾ ĐƯỜNG DỮ LIỆU (DATAPATH)
Việc thiết kế một MCU được chia thành 2 phần chính là: thiết kế đường dữ liệu và thiết kế Đơn vị điều khiển
Đường dữ liệu chịu trách nhiệm về di chuyển và thao tác dữ liệu Nó thực hiện hiện tất cả các họat động chức năng của RISC nên nó phải có khả năng thực hiện tất cả các thao tác được yêu cầu từ tập lệnh Nó có các đường vào điều khiển cho phép chọn các chức năng thực thi
cụ thể ứng với các lệnh cụ thể Các đường điều khiển này sẽ do đơn vị giải mã và điều khiển sẽ điều khiển trong quá trình thực thi lệnh
Đường dữ liệu chứa các đơn vị chức năng: PC, IR, ROM, RAM, General Registers, ALU, SR(state Register), I/O
1 Program Counter (PC)
Hình 6.1 sơ đồ khối của Program Counter
Hình 6.2 Program Counter Symbol
PC
PC - 1 + Offset
+ 1 SPC
LD_C CLK
Program Counter
Offset(8 0) - SPC - Push - Pop - LD_C - CLKPP - CLK -
- PC(8 0)
CLR -
Trang 17Hình 6.1 cho thấy khối PC có các các đơn vị chức năng như:
- Thanh ghi PC chứa địa chỉ lệnh, có thể đếm lên để trỏ tới lệnh kế hoặc nạp
dữ liệu khi gặp yêu cầu rẽ nhánh
- Khối Stack có độ sâu là 4 mức để cất địa chỉ quay về PC khi gặp lệnh gọi hàm Khi gặp lệnh gọi hàm thì khối Stack sẽ thực hiện PUSH, và lưu giá trị PC vào đỉnh Stack, sau đó PC sẽ nạp địa chỉ lệnh mới Khi gặp lệnh RET thì PC sẽ nạp lại địa chỉ quay về từ đỉnh Stack, sau đó Stack sẽ thực hiện POP để đẩy địa chỉ quay về ra ngoài Do Stack chỉ có độ sâu là 4 mức nên khi gặp 5 lần gọi hàm liện tục thì địa chỉ quay về lần đầu sẽ bị mất
- Thanh ghi PC-1 và bộ cộng Offset được sử dụng trong lệnh rẽ nhánh và gọi hàm để tính địa chỉ lệnh kế khi rẽ nhánh Do đơn vị tìm nạp lệnh và thực thi lệnh thực hiện song song khi đơn vị thực thi lệnh gặp yêu cầu rẽ nhánh thì PC đã trỏ tới lệnh mới, vì vậy nên khi rẽ nhánh đến lệnh mới thì PC phải trừ đi 1 rồi mới cộng với Offset
Hình 6.1 và 6.2 chỉ ra các tín hiệu vào điều khiển cho PC như sau:
- Tín hiệu SPC: cho phép chọn giá trị (địa chỉ lệnh kế) nạp cho PC SPC =’0’ thì PC sẽ nạp giá trị của PC-1+Offset ngược lại PC sẽ nạp giá trị đỉnh Stack
- Tín hiệu LD_C dùng để điều khiển giá trị của PC Khi có cạnh xuống cùa xung CLK thì giá trị PC sẽ thay đổi nếu LD_C =’0’ thì PC sẽ nạp giá trị mới từ bộ mux, ngược lại
PC sẽ đếm lên
- Tín hiệu PUSH, POP tích cực thấp dùng để điều khiển khối Stack
- Tin hiệu CLK dùng để đồng bộ cho thanh ghi PC
- Tín hiệu CLKPP dùng để đồng bộ việc PUSH, POP của Stack
- Tín hiệu CLR dùng để xóa khối Stack và PC khi RESET
Trang 182 RAM, ROM
Hình 6.3 Program ROM Symbol
Hình 6.4 RAM symbol
ROM dùng để chứa chương trình Hình 6.3 cho thấy các tín hiệu vào và ra của ROM Tín hiệu vào của ROM có 9 bit địa chỉ được lấy từ PC nên ROM có 512 ô nhớ, Tín hiệu ra của ROM là dữ liệu 16 bit (2 Byte), đuợc gọi là từ lệnh Từ lệnh sẽ được đưa vào thanh ghi lệnh.Như vậy ROM chứa 1KB lệnh
Thết kế này sử dụng ROM không đồng bộ, không có các tín hiệu điều khiển vào ra, khi đưa địa chỉ vào đầu vào thì dữ liệu sẽ xuất ở ngỏ ra
RAM dùng để chứa dữ liệu, hình 6.4 mô tả tín hiệu vào và ra của RAM RAM có dụng lượng là 256 byte nên cần 8 bit địa chỉ là nội dung của thanh ghi Z trong tập thanh ghi đa dụng DATAWR là tín hiệu dữ liệu cần ghi vào RAM
RAM được đồng bộ dữ liệu vào nên có 2 tín hiệu WR_RAM và CLKW để điều khiển đồng bộ WR_RAM là tín hiệu cho phép ghi tích cực thấp, còn CLKW là tín hiệu đồng bộ ghi tác động cạnh xuống
Program ROM PC(8 0) - - INSTR(15 0)
Program ROM DATAWR(7 0) - - C(7 0)
ADDR(7 0) - WR_RAM - CLKW -
Trang 193 Tập thanh ghi đa dụng (General Pupose Registers)
Hình 6.5 General Purpose Registers Symbol
Tập thanh ghi đa dụng gồm 16 thanh ghi đa dụng Để xác định thanh ghi cụ thể trong tập thanh ghi cần 4 bít địa chỉ Tập thanh ghi có 2 đường dữ liệu ra RA, RB (8 bit) làm
2 toán hạng cho ALỤ Để định địa chỉ cho RA cần sử dụng 4bít AđA và 4 bit AđB định địa chỉ cho RB Ngoài ra tập thanh ghi đa dụng còn có một đường dữ liệu ra 8 bit, đó là nội dung của thanh ghi Z (R15) Nó được dùng để định địa chỉ ô nhớ trong RAM trong lệnh truy xuất ô nhớ gián tiếp qua thanh ghị Ví dụ như lệnh: LD, ST
Đối với các lệnh AĐ, LSL, AND Kết quả sau khi tính tóan lại được lưu lại vào tập thanh ghi đa dụng Để thực hiện việc này, dữ liệu cần ghi sẽ được đưa vào đường DATA và địa chỉ thanh ghi đích 4 bit sẽ được đưa vào AđW
Ngoài các đường dữ liệu vào, ra và các đường địa chỉ, tập thanh ghi đa dụng còn có các tín hiệu vào để điều khiển:
- Tín hiệu Inc_ZP, Dec_ZP là các tín hiệu tích cực thấp thực hiện việc tăng, giảm con trỏ Z (nội dung thanh ghi R15) khi truy xuất dữ liệu ô nhớ trong RAM Các tín hiệu này sử dụng trong các lệnh: LD Z+, ST Z-
- Tín hiệu WRE, CLK là các tín hiệu điều khiển động bộ việc ghi dữ liệu vào tập thanh ghi đa năng WRE là tín hiệu cho phép ghi tích cực thấp tín hiệu CLK là tín hiệu đồng bộ ghi tác động cạnh xuống khi xung CLK tác động cạnh xuống thì dữ liệu sẽ được ghi vào thanh ghi đích,
- Tín hiệu CLR dùng để xóa toàn bộ tập thanh ghi khi reset
Program Counter General Pupose Registers(16)
Dată7 0) - AđĂ3 0) - AđB(3 0) - AđW(3 0) - Inc_Zp -
CLK - CLRN -
- RĂ7 0) - RB(7 0) - ZP(7 0) Dec_Zp -
WRE -
Trang 204 Thanh ghi cờ Trạng thái (State Register)
Hình 6.6 Sơ đồ khối của Thanh ghi trạng thái
Hình 6.7 State Register symbol
Thanh ghi Trạng thái chứa các cờ trạng thái của lệnh thực thi, thanh ghi có thể được đọc và ghi dữ liệu từ data bus, thay đổi trang thái cờ theo trạng thái lệnh thực thi Có ngỏ ra được đưa về đơn vị điều khiển làm điều kiện cho lệnh rẽ nhánh
Các cờ trong thanh ghi trạng thái:
* bit 6, 7: Không sử dụng
* Bit 5 – H: Half Carry Flag
* Bit 4 – S: Sign Bit
* Bit 3 – V: Two’s Complement Overflow Flag
* Bit 2 – N: Negative Flag
* Bit 1 – Z: Zero Flag
* Bit 0 – C: Carry Flag
Condition Branch
Status Register LD_M
CLK -
- CB Data(7 0) -
Trang 21Các tín hiệu vào, ra của thanh ghi Trang thái được nêu ở hình 6.7:
- Tín hiệu FR_ALU(5 0) chứa các trang thái cờ trạng thái của lệnh đang thực thi, được đưa từ ALU tới, sẽ được cập nhật vào thanh ghi trạng thái
- Tín hiệu M_SR(5 0) là tín hiệu cho phép tích cực thấp để cập nhật cờ trạng thái, các tín hiệu này được đưa tới từ đơn vị giải mã lệnh
- Tín hiệu Sel_Bit(2 0) là tín hiệu chọn cờ để làm điều kiện rẽ nhánh Giá trị của Sel_bit là vi trí của cờ được chọn CB là tín hiệu ra được đưa về đơn vị điều khiển làm điều kiện rẽ nhánh
- Tín hiệu LD_M, CLK là tín hiệu điều khiển động bộ để thay đổi thay ghi trạng thái LD_M = ‘1’ Thanh ghi trạng thái sẽ nạp dữ liệu từ Data bus vào ngược lại thì thanh ghi trạng thái sẽ cập nhật cờ từ tín hiệu ALU gởi xuống CLK là tín hiệu đồng bộ tác động cạnh xuống để thay đổi Thanh ghi trang thái
Trang 22Tóan hạng B có thể nạp từ RB(thanh ghi đa dụng), Data bus, giá trị hằng số cho trong từ lệnh, giá trị 01H (được sử dụng trong lệnh INC, DEC) Tín hiệu BSEL có 2 bit để điều khiển chọn giá trị nạp cho tóan hạng B (xem bảng 6.1)
Như đã đề cập, ALU phải thực thi 5 nhóm lệnh(ADD, SUBCP, RIGHT, DIR, LOGIC) Nên đơn vị thao tác lệnh cũng được chia thành 4 khối chức năng nhỏ mỗi khối đảm nhiệm 1 thao tác riêng và có các đường điều khiển riêng: đơn vị tóan học, đơn vị logic, đơn vị dịch,đơn vị định hướng dữ liệu
Đơn vị tóan học thưc hiện phép cộng, trừ trên 2 tóan hạng, có tín hiệu điều khiển ADD nếu ADD = 1 thực hiện phép cộng, ngược lại thực hiện phép trừ, tín hiệu WCARRY cho phép có sử dụng cờ nhớ vào hay không(xem bảng 6.2)
RA NOT RA
0000 0001
ORB
BSEL (1 0)
Trang 23EXOR, và NOT ORA Được điều khiển bởi tín hiệu LOGICSEL (xem bảng 6.2)
Đơn vị dịch thực thi các lệnh dịch bit tác động lên tóan hạng ORA như: dich trái, xoay, dịch trái số học Được điều khiển bởi tín hiệu LOGICSEL (xem bảng 6.2)
Đơn vị định hướng dữ liệu (DIR) thực hiện việc kết nối dữ liệu vào và ra với bit điều khiển DIR Nếu DIR =’0’ thì kết quả là ORB, ngược lại kết quả là SWAP ORA
Kết quả thực thi của ALU sẽ được chọn từ kết quả của các đơn vị con này dựa trên tín hiệu điều khiển ALU_SEL
ALU_SEL Group Instruction Extra Signal WRE ORA ORB Flags
ORA,ORB mặc định là 2 thanh ghi tóan hạng RA, RB
Bảng 6.2 nhóm lệnh cơ bản của ALU
Trang 245.3 Đơn vị cập nhật cờ trạng thái
Đơn vị này có chức năng cập nhập cờ trạng thái theo kết quả lệnh đươc thực hiện ALU sẽ gửi giá trị của 5 cờ trạng thái tới cho SR Tuy nhiên việc cập nhật các cờ này còn phải phụ thuộc vào lệnh đang thực thi là lệnh nào nên SR cũng nhận các cho phép cập nhật cờ tương úng từ đon vị giải mã lệnh
Các giá trị cập nhật của cờ:
Cờ Z lên 1 khi kết qủa phép tính bằng 0
Cờ N (Negative) có giá trị trùng với bit MSB của kết quả phép tính
Cờ V được cập nhật khi thực hiện nhóm lệnh số học, và được xóa khi gặp lệnh LOGIC, hàm bool của cờ V = N-flag xor C-flag
Cờ C được cập nhật khi thực hiện nhóm lệnh số học, là cờ nhớ của lệnh cộng, trừ
Cờ H cập nhật khi gặp lệnh số học H= A3B3 + B3(C3’ ) + (C3)’A3 vói A là ORA, B là ORB và C là kết quà
Trang 25VII> THIẾT KẾ ĐƠN VỊ ĐIỀU KHIỂN (CONTROL UNIT)
Đơn vị điều khiển có nhiệm vụ nhận mã lệnh thực thi từ IR vào để giải mã, tạo ra các tín hiệu điều khiển cho các đơn vị của đường dữ liệu(datapath) để nó thực thi chính xác các chức năng của lệnh đang được thực thi Đơn vị Điều khiển được chia làm 2 đơn vị con: đơn vị giải mã lệnh và đơn vị điều khiển thực thi
Đơn vị giải mã lệnh sẽ tạo ra các tín hiệu điều khiển xác lập các chức năng cụ thể từng đơn vị của đương dữ liệu phù hợp với lệnh đang thực thi Đơn vị điều khiển thực thi sẽ tạo ra các tín hiệu điều khiển đồng bộ để điều khiển các đơn vị hoạt động theo đúng thứ tự
1 Đơn vị giải mã lệnh
Đơn vị giải mã lệnh là 1 hệ tổ hợp có đầu vào là mã máy và ra các tín hiệu điều khiển, dùng để xác lập các chức năng cụ thể từng đơn vị của đường dữ liệu phù hợp với lệnh đang thực thi Ứng với 1 giá trị mã máy đầu vào nó sẽ cho 1 tổ hợp các tín hiệu điều khiển ngỏ ra xác định Bảng 7.1 liệt kê các tín hiệu điều khiển ngỏ ra
ALU IMM_VALUE[7 0]; ASEL[1 0]; BSEL[1 0]; WCARRY
ADD; LOGICSEL[1 0]; RIGHTSEL[1 0]; DIRSEL ALU_SEL[1 0]
Thanh ghi đa dụng AddA[3 0]; AddB[3 0]; AddW[3 0]
WRE; INC_ZP; DEC_ZP Program Counter Offset[8 0]; SPC; PUSH; POP; LD_C
RAM WR_RAM Data mux DATAMUX[2 0]
State Register M_SR[5 0]; LD_M; SEL_BIT[2 0]
I/O Register IO_SEL[1 0]
Các chức năng của tín hiệu đã được nêu ở trên
Bảng 7.1 các tín hiệu điều khiển
2 Đơn vị điều khiển thực thi
Đơn vị điều khiển của RISC thường là hệ tuần tự sử dụng các cổng logic và
D flip-flop thay vì sử dụng đơn vị điều khiển vi chương trình, chứa trong ROM, như cấu trúc CISC CISC có tập lệnh với các chiều dài lệnh chu kỳ lệnh khác nhau nên đơn vị điều khiển sử dụng ROM vi chương trình để thực hiện thiết kế dễ dàng và mềm dẻo nhưng bất lợi của vi chương trình là làm chậm khả năng thục thi lệnh Đối với RISC, các lệnh có chiều dài cố định và thực thi
Trang 26trong 1 chu kỳ xung clock nên đơn vị điều khiển thường được thiết kế gồm các cổng logic và flop để tăng tốc độ thực thi lệnh
flip-Trong thiết kế này, Đơn vị điều khiển thực thi là hệ tuần tự đồng bộ dạng More nhận ngỏ vào là tín hiệu INS_ TYPE, kiểu lệnh, được đưa từ đơn vị giải mã lệnh, cho biết lệnh đang thực thi là lệnh gì để tạo các tổ hợp tín hiệu ngỏ ra theo đúng trình tự thực hiện lệnh Ngỏ ra của đơn vị điều khiển thực thi là các tín hiệu điều khiển việc đồng bộ của các đơn vị
đường dữ liệu như:clkpp, clkpc, clklatch, clkInstr, clkWr xem đồ hình trạng thái của đơn vị điều khiển thực thi ở hình 7.1
tín hiệu clkpp thực hiện đồng bộ việc Push Pop của vùng Stack
tín hiệu clkpc thực hiện đồng bộ việc đếm và nạp gia trị PC
tín hiệu clkinstr thực hiện đồng bộ việc chốt và giải mã lệnh
tín hiệu clklatch thực hiện đồng bộ việc chốt kết quả thực thi lệnh
tín hiệu clkwr thực hiện đồng bộ việc ghi kết quả thực thi
Hình 7.1 đồ hình trạng thái của đơn vị điều khiển thực thi
Một chu kỳ lệnh sẽ được chia thành 3 pha nhỏ, đơn vị điều khiển thực thi gồm 9 trạng thái, mỗi trạng thái có một tổ hợp ngỏ ra xác định Do quá trình xử lý theo đường ống nên tìm nạp lệnh và thực thi lệnh diễn ra song song vì vậy mỗi trạng thái đều thực hiện 2 quá trình này độc lập
Trang 27S1 trạng thái nạp và giải mã lệnh S2 trạng thái tìm nạp lệnh mới S3 trạng thái rãnh
S4 trạng thái chốt kết quả và tìm nạp lệnh mới S5 trạng thái ghi kết quả
S6 trạng thái ghi kết quả và tìm nạp lệnh mới S7 trạng thái cất và lấy địa chỉ quay về S8 trạng thái tìm nạp lệnh rẽ nhánh
Ví dụ:
khi RISC thực hiện nhóm lệnh ADD Tại pha đầu trạng thái S0 lệnh đã tìm nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, kết quả được tính toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”001”, tại pha thứ 2 trạng thái sẽ là S4 kết quả thực thi được chốt lại, PC tìm nạp lệnh mới Tại pha cuối kết quả được ghi vào thanh ghi đích
Khi RISC thực hiện lệnh NOP hoặc rẽ nhánh Tại pha đầu trạng thái S0 lệnh đã tìm nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, địa chỉ PC mới được tính toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”000” cho lệnh NOP và “110” cho lệnh rẽ nhánh, tại pha thứ 2 trạng thái sẽ là S2, PC tìm nạp lệnh mới Tại pha cuối là trạng thái rãnh
Khi RISC thực hiện lệnh gọi hàm RCALL Tại pha đầu trạng thái S0 lệnh đã tìm nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, địa chỉ PC mới được tính toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”100” , tại pha thứ 2 trạng thái sẽ là S7 địa chỉ quay về được cất vào Stack Tại pha cuối trạng thái S8 PC được nạp địa chỉ lệnh mới
Khi RISC thực hiện lệnh RET Tại pha đầu trạng thái S0 lệnh đã tìm nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, địa chỉ PC mới được tính toán, ngỏ vào của đơn vị điều khiển INS_TYPE= ”101”, tại pha thứ 2 trạng thái sẽ là S8 địa chỉ quay về được nạp vào PC để tìm nạp lệnh mới Tại pha cuối trạng thái S7 địa chỉ quay về được POP ra khỏi vùng Stack
Khi RISC thực hiện nhóm lệnh LD, ST tại pha đầu trạng thái S0 lệnh đã tìm nạp được đưa vào giải mã lệnh các chức năng đơn vị đường dữ liệu được xác lập, dữ liệu từ nguồn đưa đến đích, ngỏ vào của đơn vị điều khiển Ins_TYPE= ”010”, tại pha thứ 2 trạng thái sẽ là S6 thực hiện ghi dữ liệu và PC tìm nạp lệnh mới Tại pha cuối trạng thái S3 là trạng thái rãnh
Trang 28VIII> CHƯƠNG TRÌNH VHDL VÀ KẾT QUẢ MÔ PHỎNG
1 Chương trình VHDL mô tả thanh ghi
-//////////////////////////////////////////////////////////////////// -
-// DO AN DIEN TU - VIEN THONG II // -
-// THAY HUONG DAN: HO TRUNG MY // -
-// SINH VIEN: PHAM HUNG THINH // -
-// DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER // -
ARCHITECTURE BEV OF REG IS
SIGNAL DATA: STD_LOGIC_VECTOR(7 DOWNTO 0);
Trang 292 Chương trình VHDL mô tả bộ mux 8 1
-//////////////////////////////////////////////////////////////////// -
-// DO AN DIEN TU - VIEN THONG II // -
-// THAY HUONG DAN: HO TRUNG MY // -
-// SINH VIEN: PHAM HUNG THINH // -
-// DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER // -
IN0,IN1,IN2,IN3,IN4,IN5,IN6,IN7: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SEL :IN STD_LOGIC_VECTOR(2 DOWNTO 0);
OUTPUT: OUT STD_LOGIc_VECTOR(7 DOWNTO 0)
);
END MUX8T1V8;
ARCHITECTURE MULTIPLEX OF MUX8T1V8 IS
BEGIN
WITH SEL SELECT
OUTPUT<= IN0 WHEN "000",
Trang 30IN7 WHEN OTHERS;
-// DO AN DIEN TU - VIEN THONG II // -
-// THAY HUONG DAN: HO TRUNG MY // -
-// SINH VIEN: PHAM HUNG THINH // -
-// DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER // -
-//////////////////////////////////////////////////////////////////////////////////////////////// -
library ieee;
use ieee.std_logic_1164.all;
entity effrom is
port( pc : in std_logic_vector(8 downto 0);
instruction : out std_logic_vector(15 downto 0));
end effrom;
architecture rom of effrom is
Trang 31generic (
LPM_WIDTH: integer := 16;
LPM_WIDTHAD: integer := 9;
LPM_NUMWORDS: integer := 512;
LPM_FILE: string := "program.mif";
LPM_ADDRESS_CONTROL: string := "UNREGISTERED";
LPM_OUTDATA: string := "UNREGISTERED"
Trang 324 Chương trình VHDL mô tả RAM
-//////////////////////////////////////////////////////////////////// -
-// DO AN DIEN TU - VIEN THONG II // -
-// THAY HUONG DAN: HO TRUNG MY // -
-// SINH VIEN: PHAM HUNG THINH // -
-// DE TAI: THIET KE RISC 8 BIT MICROCONTROLLER // -
port( addr : in std_logic_vector(7 downto 0);
DATAWR: in std_logic_vector(7 downto 0);
lpm_file: string := "ram.mif";
lpm_indata: string := "registered";
lpm_address_control: string := "registered";
lpm_outdata: string := "unregistered"
);
port( data: in std_logic_vector(lpm_width-1 downto 0);
address: in std_logic_vector(lpm_widthad-1 downto 0);