1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Thiết kế MCU 8 bit bằng ngôn ngữ VHDL

38 101 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết kế MCU 8 bit bằng ngôn ngữ VHDL
Tác giả Nhóm 15
Trường học Trường Đại Học Kỹ Thuật
Chuyên ngành FPGA và Ứng Dụng
Thể loại Báo cáo bài tập lớn
Định dạng
Số trang 38
Dung lượng 3,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề tài: Thiết kế MCU bằng ngôn ngữ VHDL và mô phỏng kết quả với Modelsim. Thiết kế một MCU với vi xử lý 8 bit, 16 cổng vào 8 bit, 16 cổng ra 8 bit, ROM 128 byte và RAM 96 byte. Có 3 loại lệnh chính: nạp và lưu trữ (loads and stores), thao tác dữ liệu (data manipulations), và rẽ nhánh (branhces).

Trang 1

BÁO CÁO BÀI TẬP LỚN MÔN FPGA VÀ ỨNG DỤNG

Đề tài: Thiết kế MCU bằng ngôn ngữ VHDL và mô phỏng kết quả với Modelsim Nhóm sinh viên thực hiện: Nhóm 15

Trang 2

Hình 2: Các vùng địa chỉ của bộ nhớ 256 byte

1.1 Bộ nhớ chương trình (Program Memory) là nơi chứa các mã lệnh sẽ được

thực thi bởi MCU Program Memory được xem là bộ nhớ chỉ đọc trong quá trìnhthực hiện lệnh để tránh trường hợp lệnh bị viết đè lên Vì vậy, Program Memory sẽđược chế tạo trên một thiết bị ROM để không làm mất chương trình khi mất điện

1.2 Bộ nhớ dữ liệu (Data Memory) là nơi chứa các biến tạm thời cho phép truy

xuất đọc ghi tạo ra bởi các chương trình phần mềm, nhằm phục vụ lưu trữ thông tincho quá trình thực hiện lệnh Data Memory sẽ được thực hiện như một bộ nhớRAM

1.3 Cổng vào ra (I/O Ports) dùng để trao đổi thông tin giữa thế giới bên ngoài

(thiết bị ngoại vi) và MCU

2 Đơn vị xử lý trung tâm (Central Processing Unit - CPU)

CPU được xem là bộ não của MCU Công việc của CPU bao gồm đọc lệnh từ bộnhớ, giải mã lệnh để hiểu xem lệnh đó dùng để làm gì và thực hiện các bước cầnthiết để hoàn thành lệnh đó CPU bao gồm đơn vị điều khiển (Control Unit - CU),đơn vị logic số học (Arithmetic Logic Unit - ALU), một tập hợp các thanh ghi có

Trang 3

nhiệm vụ chứa dữ liệu, thông tin trạng thái của hệ thống và hệ thống mạch điệndùng cho việc thực hiện các phép logic số học của dữ liệu.

Hình 3: Tổ chức CPU

2.1 Đơn vị điều khiển (Control Unit - CU) là một máy trạng thái hữu hạn (FSM)

điều khiển sự vận hành của MCU CU có các trạng thái thực hiện các công việc làtruy xuất lệnh (fetch), giải mã lệnh (decode) và thực hiện các bước cần thiết đểhoàn thành lệnh (execute) Trong quá trình chuyển giữa các trạng thái, CU gửi cáctín hiệu điều khiển để di chuyển và thao tác dữ liệu nhằm đạt yêu cầu của lệnh

2.2 Đường dữ liệu (Data Path) là một subsystem bao gồm các thanh ghi và ALU,

là nơi lưu trữ nhanh và thực hiện thao tác với dữ liệu bên trong CPU

2.2.1 Thanh ghi (Registers)

- Thanh ghi lệnh (Instruction Register – IR): lưu mã lệnh hiện tại đang được

thực hiện IR được sử dụng bởi CU để quyết định xem trạng thái nào cần chuyểntới để hoàn thành lệnh

- Thanh ghi địa chỉ bộ nhớ (Memory Address Register – MAR): lưu địa chỉ

hiện tại đang được sử dụng để truy cập bộ nhớ để biết cần truy xuất lệnh từ ROMhay truy xuất dữ liệu từ RAM hoặc I/O

Trang 4

- Bộ đếm chương trình (Program Counter – PC): lưu địa chỉ của lệnh đang

được thực hiện PC sẽ tự động tăng lên qua mỗi lần đọc lệnh từ bộ nhớ, trừ khi cómột chương trình phần mềm thực hiện lệnh chuyển nó tới vị trí địa chỉ khác

- Thanh ghi phục vụ mục đích chung (General-Purpose Registers: A & B): lưu

trữ tạm thời dữ liệu phục vụ cho các mục đích tính toán hay di chuyển giữa CPU

và bộ nhớ

- Thanh ghi trạng thái (Condition Code Register – CCR): chứa các cờ trạng

thái để cung cấp thêm thông tin cho việc tính toán số học và logic của CPU Các cờđược thiết kế bao gồm: âm (Negative – N), không (Zero – Z), tràn (Overflow – V),nhớ (Carry – C)

2.2.2 Đơn vị logic số học (Arithmetic Logic Unit - ALU)

ALU thực hiện các phép tính số học ( cộng, trừ, nhân, chia,…) và logic (and, or,not,…) Trong bài này, ALU sẽ được thiết kế với các chức năng là cộng, trừ, and,

or, tăng và giảm

II Thiết kế

1 Lệnh

Có 3 loại lệnh chính: nạp và lưu trữ (loads and stores), thao tác dữ liệu (datamanipulations), và rẽ nhánh (branhces)

1.1 Loads and Stores

Load là lệnh di chuyển dữ liệu từ bộ nhớ vào trong một thanh ghi của CPU Có 2kiểu Load chính sẽ được thiết kế là Load tức thời (nạp giá trị operand trong ô nhớ)

và Load trực tiếp (nạp giá trị trong ô nhớ có địa chỉ là operand) cho 2 thanh ghi A

và B

Store là lệnh di chuyển dữ liệu từ thanh ghi của CPU vào trong bộ nhớ Kiểu Store

sẽ được thiết kế là Store trực tiếp cho 2 thanh ghi A và B (lưu dữ liệu trong thanhghi vào địa chỉ ô nhớ cho bởi operand)

1.2 Data Manipulations

Trang 5

Các lệnh loại này liên quan đến sự vận hành của ALU, thao tác với những dữ liệuchứa trong các thanh ghi Các lệnh sẽ được thiết kế bao gồm: cộng (A=A+B), trừ(A=A-B), AND (A=AandB), OR (A=AorB), tăng 1 (A=A+1, B=B+1), giảm 1(A=A-1, B=B-1).

1.3 Branches

Branch là lệnh giúp đưa thanh ghi PC tới địa chỉ mong muốn, thay vì tự động tănglên sau mỗi lệnh Có 2 loại Branch sẽ được thiết kế là Branch Always (PC sẽ đượcnạp với giá trị cho bởi operand) và Branch có điều kiện (PC chỉ được cập nhật khi

có một điều kiện cụ thể là đúng, và những điều kiện đến từ cờ trạng thái của thanhghi CCR)

Hình 4: Bảng tổng hợp các lệnh sẽ được thiết kế

Trang 6

2 Thiết kế bộ nhớ

File memory.vhd sẽ chứa 3 component là rom.vhd, ram.vhd và outports.vhd Cáccổng input không có chức năng store nên chỉ cần khai báo là đầu vào trong chươngtrình Một bộ dồn kênh Multiplexer được sử dụng để chọn tuyến tín hiệu đi vềCPU dựa vào địa chỉ

Hình 5: Sơ đồ khối cho bộ nhớ của MCU

2.1 Thiết kế ROM

ROM sẽ được khai báo như là một mảng gồm 128 phần tử (0-127) với những giátrị cho trước (Hình 4) để định nghĩa chương trình Việc truy xuất dữ liệu từ các ônhớ của ROM chính là gán giá trị trong mảng cho đầu ra của ROM khi có sườn lêncủa xung clock Ngoài ra, một tín hiệu enable (EN) cũng được khởi tạo để chophép truy xuất dữ liệu từ đúng địa chỉ của ROM

Code : rom.vhd

Trang 8

2.2 Thiết kế RAM

Ram được triển khai tương tự như ROM, là một mảng có 96 phần tử (0-95) Vì vậy

có thể truy xuất dữ liệu từ các ô nhớ của RAM khi có sườn lên xung clock Thêmvào đó, RAM không chỉ cho phép read mà cả write nên có thể ghi giá trị đầu vàocủa RAM vào ô nhớ khi có sườn lên của xung clock và có tín hiệu write

Code : ram.vhd

Trang 9

2.3 Thiết kế các cổng Output

Các cổng output có khả năng store nên CPU có thể cập nhật một cổng output bằngcách ghi vào địa chỉ của nó Vì vậy có thể khai báo các cổng output như là mộtmảng có 16 phần tử (0-15) và có thể truy xuất và ghi với cơ chế giống của RAM.Tuy nhiên, các cổng này sẽ có thêm chân reset để xóa hết dữ liệu

Code : outport.vhd

Trang 10

2.4 Thiết kế toàn bộ bộ nhớ Code : memory.vhd

Trang 12

3 Thiết kế CPU

CPU bao gồm 2 component là Control Unit (cu.vhd) và Data Path (data_path.vhd)

- Data Path bao gồm các thanh ghi và một Sub-component là ALU (alu.vhd) DataPath còn bao gồm một hệ thống đường Bus để di chuyển dữ liệu giữa bộ nhớ và

Trang 13

các thanh ghi Hệ thống Bus được triển khai với hai Multiplexer được điều khiểnbởi Control Unit.

- Control Unit chứa FSM tạo ra tất cả tín hiệu điều khiển cho Data Path khi CPUthực hiện các bước fetch-decode-execute cho mỗi lệnh

Hình 6: Sơ đồ khối cho CPU

3.1 Thiết kế Data Path

3.1.1 Thiết kế ALU

Trang 14

ALU là một bộ mạch tổ hợp logic để thực hiện phép toán số học và logic với dữliệu đầu vào từ các thanh ghi A và B Đầu ra của ALU gọi là Result ALU còn chođầu ra là 4 cờ trạng thái tương ứng với 4 bit NZVC

Hành vi của ALU được xây dựng bằng cách sử dụng mệnh đề case-when để quyếtđịnh xem nên thực hiện phép tính nào dựa trên tín hiệu điều khiển ALU_sel Mỗiphép tính sẽ đều cập nhật cho các cờ N, Z, V, C:

- Cờ N sẽ được gán bằng bit vị trí 7 của ALU_Result bởi vì đây là bit dấu

- Cờ Z sẽ được gán bằng cách dùng mệnh đề when-else để kiểm tra xem kết quảphép tính có bằng x“00” hay không

- Cờ V sẽ được gán tùy vào phép tính Với phép cộng, cờ V sẽ được gán là 1 nếunhư một số dương cộng một số dương bằng số âm, hoặc số âm cộng số âm bằng sốdương Với phép trừ, cờ V sẽ được gán là 1 nếu như một số dương trừ một số âmbằng số âm, hoặc số âm trừ số dương bằng số dương Những điều kiện này sẽ đượckiểm tra với bit dấu của hai số và kết quả

- Cờ C sẽ được gán bằng bit vị trí 8 của biến temp

Code : alu.vhd

Trang 15

3.1.2 Thiết kế toàn bộ Data Path

Hệ thống bao gồm hai đường bus 8 bit (BUS1 và BUS2) và hai Multiplexer

Trang 16

- BUS1 được dùng để vận chuyển dữ liệu đầu ra của thanh ghi PC, A và B; cònBUS2 được dùng để vận chuyển dữ liệu đầu vào cho thanh ghi IR, MAR, PC, A và

B BUS1 được nối trực tiếp với cổng to_memory của CPU để cho phép các thanhghi ghi dữ liệu vào bộ nhớ BUS2 có thể được nạp từ cổng from_memory của CPU

để cho phép bộ nhớ gửi dữ liệu cho các thanh ghi của CPU

- Hai Multiplexer đảm nhận nhiệm vụ định tuyến tín hiệu và chọn kênh thông quahai tín hiệu Bus1_Sel và Bus2_Sel điều khiển bởi Control Unit

Mỗi thanh ghi của Data Path được thiết kế bằng process với tín hiệu clock và reset.Mỗi thanh ghi đều có một tín hiệu cho phép cập nhật dữ liệu chứa trong đó, kí hiệu

là (tên thanh ghi)_Load Thanh ghi chỉ được cập nhật dữ liệu nếu tín hiệu cho phépbằng 1 và có sườn lên của xung clock Thanh ghi PC thì đặc biệt hơn là có tínhnăng tự tăng lên 1 nên sẽ có thêm một tín hiệu điều khiển PC_Inc

Code : data_path.vhd

Trang 18

3.2 Thiết kế Control Unit

Control Unit gửi tín hiệu đến Data Path để di chuyển dữ liệu vào hoặc ra khỏi cácthanh ghi và đưa vào khối ALU phục vụ cho việc tính toán FSM được xây dựng làmột kiểu dữ liệu tự định nghĩa dành cho tín hiệu trạng thái hiện tại (current_state)

và trạng thái tiếp theo (next_state) trong quá trình thực hiện lệnh Kiểu dữ liệu nàybao gồm các trạng thái liên quan đến fetch (S_FETCH_0, S_FETCH_1,S_FETCH_2), decode (S_DECODE_3) và execute Sau trạng thái S_DECODE_3thì sẽ có đường rẽ tới những trạng thái bổ trợ giúp execute những lệnh khác nhau.Bài thiết kế này sẽ có những trạng thái bổ trợ được tạo ra cho 3 loại lệnh như sau:

- Loads and Stores: S_LOAD_AND_STORE_4

S_LOAD_AND_STORE_5

S_LOAD_AND_STORE_6

Trang 19

Hình 7: Graph trạng thái trước trạng thái 4 để execute lệnh cụ thể

Hình 7 có 3 tín hiệu LOAD_STORE_OP, DATA_MAN_OP và BRANCH_OPdùng để xác định trạng thái sau S_DECODE_3 là gì:

- LOAD_STORE_OP được gán là 1 khi thanh ghi IR chứa các opcode sau: x”86”,x”87”, x”88”, x”89”, x”96”, x”97”

Trang 20

- DATA_MAN_OP được gán là 1 khi thanh ghi IR chứa các opcode từ x”42” đếnx”49”.

- BRANCH_OP được gán là 1 khi thanh ghi IR chứa các opcode từ x”20” đếnx”28”

Graph trạng thái cho lệnh Loads and Stores:

Hình 8: Graph trạng thái cho lệnh Loads and Stores

Graph trạng thái cho lệnh Data Manipulations:

Trang 21

Hình 9: Graph trạng thái cho lệnh Data Manipulations

Graph trạng thái cho lệnh Branches:

Trang 22

Hình 10: Graph trạng thái cho lệnh Branches

Code : cu.vhd

Trang 27

3.3 Thiết kế toàn bộ CPU Code : cpu.vhd

Trang 28

4 Thiết kế toàn bộ MCU

Trang 29

Hình 11: Sơ đồ khối toàn bộ MCU

Code : MCU.vhd

Trang 32

III Mô phỏng với Modelsim

1 Testbench

Xung clock được thiết lập với tần số 50MHz, tức chu kỳ là 20ns

Code: MCU_TB.vhd

Trang 35

2 Kết quả mô phỏng

Bài báo cáo sẽ thực hiện trình tự những lệnh sau:

Hình 12: Chương trình chứa trong ROM để mô phỏng

1 Load tức thời vào thanh ghi A giá trị A0h

Trang 36

2 Load trực tiếp vào thanh ghi B giá trị 80h trong ô nhớ 19h.

3 Thực hiện phép cộng số học A+B rồi nạp lại vào A

Trang 37

4 Branch tới địa chỉ 20h khi cờ tràn V=1.

5 Store dữ liệu từ trong A ra port_out00

Ngày đăng: 08/06/2021, 21:22

TỪ KHÓA LIÊN QUAN

w