1. Trang chủ
  2. » Luận Văn - Báo Cáo

thiết kế CPU 8 Bit dùng vhdl

73 765 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

Định dạng
Số trang 73
Dung lượng 591,87 KB

Nội dung

Trong số những công cụ đó, ngôn ngữ mô tả phần cứng VHDL sẽ được sử dụng trong đề tài này Từ ngôn ngữ VHDL các nhà thiết kế phần cứng có thể thiết kế ra những thiết bị phần cứng như CPU,

Trang 1

LỜI NÓI ĐẦU

Một thành phần quan trọng của máy tính là bộ xử lý trung tâm (CPU) Có rất nhiều công sức được đầu tư vào việc chế tạo các CPU nhằm tạo ra các máy tính đáp ứng yêu cầu ngày càng cao của xã hội Đó cũng chính là nhiệm vụ mà đề tài này cần thực hiện Để thiết kế một CPU với đầy đủ chức năng cần một công cụ đủ mạnh Trong số những công cụ đó, ngôn ngữ mô tả phần cứng (VHDL) sẽ được sử dụng trong đề tài này

Từ ngôn ngữ VHDL các nhà thiết kế phần cứng có thể thiết kế ra những thiết bị phần cứng như CPU, bộ vi điều khiển… một cách nhanh chóng và cũng có thể thực hiện mô phỏng và kiểm tra khả năng hoạt động của thiết bị trước khi đưa vào sản xuất, nhờ vậy có thể giảm bớt thời gian, chi phí sản xuất Do khả năng và tính hiệu quả của ngôn ngữ VHDL là động

cơ chính để chúng em chọn đề tài “Thiết kế CPU dùng ngôn ngữ VHDL” làm đề tài cho luận văn tốt nghiệp của mình

Chúng em chân thành biết ơn toàn thể quý thầy cô trong Khoa Công Nghệ Thông Tin Trường Đại Học Kỹ Thuật Công Nghệ TPHCM, xin chân

thành cảm ơn thầy Lê Mạnh Hải đã tận tình hướng dẫn chúng em thực hiện

luận văn này

Trong thời gian ngắn, có lẽ chưa đủ để nghiên cứu sâu một đề tài tương đối lớn, nên chắc chắn không thể tránh khỏi thiếu sót Kính mong quý thầy cô góp ý để chúng em tiến bộ thêm

Huỳnh Thị Mộng Tuyền

Trang 2

GIỚI THIỆU

I MỤC ĐÍCH

Luận văn này thực hiện một số công việc như sau

- Thiết kế CPU bằng ngôn ngữ VHDL

- Thực hiện mô phỏng chương trình trên chíp FLEX10K của hãng Altera

II BỐ CỤC

- Tìm hiểu một số khái niệm của của ngôn ngữ VHDL và mối quan hệ

giữa VHDL với phần cứng

- Công nghệ FPGA: tìm hiểu một số thiết bị FPGAs

- Thiết kế CPU: thực hiện mô tả nhiệm vụ của CPU, tập lệnh của CPU, chế độ địa chỉ lệnh của CPU, hành vi của CPU, các thành phần của CPU và viết chương trình để thực hiện một số lệnh của CPU

Trang 3

MỤC LỤC

Trang

LỜI NÓI ĐẦU 1

GIỚI THIỆU 2

I MỤC ĐÍCH 2

II BỐ CỤC 2

MỤC LỤC 3

Phần 1 VHDL VÀ FPGA 6

I GIỚI THIỆU 6

1 Giới thiệu về VHDL 6

2 Các đặc điểm của VHDL 6

II CÁC KHÁI NIỆM CƠ BẢN 6

1 Các khối 6

2 Giới thiệu hai đơn vị thiết kế cơ bản của VHDL 7

2.1 Khai báo thực thể 8

2.2 Thực thể kiến trúc 8

3 Gói 9

III MỐI QUAN HỆ GIỮA NGÔN NGỮ VHDL VÀ PHẦN CỨNG 9

1 Các thành phần của VHDL để mô tả phần cứng 9

1.1 Các kiểu của VHDL 9

1.2 Các đối tượng của ngôn ngữ VHDL 10

1.3 Các toán tử số học 11

1.3.1 Các toán tử luận lý 11

1.3.2 Các toán tử quan hệ 11

1.3.3 Các toán tử cộng 11

1.3.4 Các toán tử dịch 11

1.3.5 Các toán tử một ngôi 12

1.3.6 Các toán tử nhân 12

1.4 Các lệnh tuần tự 12

1.4.1 Phép gán biến số 12

1.4.2 Phép gán tín hiệu 12

1.4.3 Lệnh điều kiện 12

1.4.4 Lệnh lặp 13

2 Sự thể hiện phần cứng bằng VHDL 13

2.1 Các mạch tổ hợp 13

Trang 4

2.1.1 Các cổng luận lý 13

2.1.2 Các toán tử số học 13

2.1.3 Các toán tử dịch và quay 14

2.1.4 Bộ dồn kênh 14

2.2 Các mạch đồng bộ .15

2.2.1 Mạch cài 15

2.2.2 Thanh ghi 16

IV CÔNG NGHỆ FPGA 16

1 Các loại FPGA 17

1.1 Các công nghệ lập trình chíp 18

1.1.1 Công nghệ lập trình dùng RAM tĩnh 18

1.1.2 Công nghệ lập trình dùng cầu chì nghịch 19

1.1.3 Công nghệ lập trình EPROM và EEPROM 20

1.2 Các loại FPGA trên thị trường 21

2 Một số ứng dụng của FPGA 22

3 Thiết bị Max, Flex .23

3.1 MAX 24

3.2 FLEX 24

Phần 2 THIẾT KẾ CPU 25

I NHIỆM VỤ 25

II TỔ CHỨC BỘ NHỚ CỦA CPU 25

III TẬP LỆNH CỦA CPU 26

IV CHẾ ĐỘ ĐỊA CHỈ CỦA LỆNH 27

V HÀNH VI CPU 29

1 Định thời và đồng hồ 29

1.1 Giản đồ định thời đáp ứng ngắt quãng 29

1.2 Giản đồ chu kỳ thực hiện lệnh 1 byte 30

1.3 Giản đồ định thời chu kỳ thực hiện các lệnh rẽ nhánh và lệnh jmp ở chế độ trực tiếp 30

1.4 Giản đồ định thời chu kỳ thực hiện lệnh lda, adc, sbc 31

1.5 Giản đồ định thời chu kỳ thực hiện lệnh jsr 31

1.6 Giản đồ định thời chu kỳ thực hiện lệnh sta 31

1.7 Giản đồ định thời chu kỳ thực hiện lệnh lda, and, adc, sbc 32

1.8 Giản đồ định thời chu kỳ thực hiện lệnh sta 32

2 Khối phục vụ chương trình 33

3 Mô tả hành vi cpu 36

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

1 Chức năng của các thành phần của CPU 39

Trang 5

2 Thực hiện lệnh 39

3 Mô tả các thành phần 41

3.1 Đơn vị luận lý số học 41

3.2 Đơn vị dịch chuyển 44

3.3 Thanh ghi trạng thái 45

3.4 Thanh ghi tích luy 46

3.5 Thanh ghi lệnh 47

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

Phần 3 MÔ PHỎNG 62

I MAX+PLUSII 62

1 Tổng Quát 62

2 Cách sử dụng Max+PlusII 62

2.1 Thực hiện soạn thảo và dịch một chương trình 63

2.2 Thực hiện kiểm tra kết quả sau khi đã tổng hợp mạch 64

2.3 Thoát khỏi Max+plusII 65

II MÀN HÌNH KHI MÔ PHỎNG 65

1 Khối luận lý số học ALU 65

2 Khối dịch chuyển SHU 66

3 Khối điều khiển .67

4 Sơ đồ chân CPU 69

5 Màn hình mô phỏng lệnh 70

Phần 4 KẾT LUẬN KIẾN NGHỊ 71

I NHẬN XÉT CHUNG 71

a Những mặt đạt được 71

b Những vấn đề tồn tại 71

II HƯỚNG PHÁT TRIỂN 71

III ĐÁNH GIÁ 71

IV KẾT LUẬN .71

Phần 5 TÀI LIỆU THAM KHẢO 73

Trang 6

Phần 1 VHDL VÀ FPGA

Phần I giới thiệu ngôn ngữ VHDL và một số đặc điểm chính của nó Phần II trình bày các khái niệm cơ bản về khối, thực thể, kiến trúc và gói của ngôn ngữ VHDL Phần III trình bày mối quan hệ mật thiết giữa ngôn ngữ VHDL và phần cứng Phần IV giới thiệu về công nghệ FPGA để xây dựng các mạch tích hợp

I GIỚI THIỆU

1 Giới thiệu về VHDL

VHDL (VHDL là từ viết tắt của Very Hight Speed Integrated Circuit Hardware Description Language) là một ngôn ngữ lập trình đã được thiết kế theo cách mô tả hành vi của hệ thống số.VHDL được phát triển vào những

1980

VHDL có nhiều đặc điểm thích hợp mô tả hành vi của các thành phần thiết bị điện tử từ những cổng luận lý đơn giản đến những bộ vi xử lý phức tạp Đặc điểm của VHDL là cho phép mô tả chính xác hành vi của những mạch điện tử

Cũng giống như ngôn ngữ Pascal, C và C++, VHDL bao gồm những đặc điểm hữu ích cho kỹ thuật thiết kế những cấu trúc và trình bày những đặc điểm dữ liệu Không giống như những ngôn ngữ lập trình khác, VHDL

cung cấp những đặc điểm cho phép để mô tả những sự kiện xảy ra (xem[1])

2 Các đặc điểm của VHDL

Một số đặc điểm chính của ngôn ngữ VHDL (xem[4])

* Đặc điểm tổng quát: VHDL có thể được sử dụng để lập tài liệu

thiết kế, thiết kế mức độ cao, mô phỏng tổng hợp và kiểm tra phần cứng VHDL cho phép mô tả phần cứng từ mức hệ thống đến mức cổng, hỗ trợ tính đồng thời nghĩa là từ các hợp phần nhỏ đến lớn hoạt động tại một thời điểm

* Hỗ trợ phân cấp thiết kế: Đây là đặc tính thiết yếu của ngôn ngữ

phần cứng đa cấp Thiết kế chứa một mô tả giao diện và một số phần độc lập để mô tả hoạt động Hoạt động của hệ thống có thể được đặc tả dựa trên chức năng hoặc dựa trên cấu trúc của những phần nhỏ hơn của chúng Đặc tả cấu trúc các hợp phần có thể được thực hiện ở tất cả các cấp thiết kế

* Có thư viện hỗ trợ: Ngôn ngữ cung cấp cơ chế để truy cập đến nhiều thư viện khác nhau Thư viện không chỉ chứa đặc tả giao diện của

Trang 7

thiết kế, mà còn chứa một số đặc tả của hệ thống Các đặc tả và các mẫu có thể dựa vào thư viện sau khi được dịch bởi chương trình dịch

* Có lệnh tuần tự: Khi người thiết kế phân chia hệ thống thành những hợp phần đồng thời hay phần con, tiếp đó người thiết kế có thể mô tả chi tiết hoạt động bên trong bằng những cấu trúc ngôn ngữ lập trình tuần tự như các lệnh case, if – then – else, loop,…Các lệnh tuần tự cung cấp phương pháp đơn giản để tạo ra các hợp phần phần cứng dựa trên chức năng của chúng

* Thiết kế tương thích chung: Để thiết kế tổng quát ngôn ngữ cho

phép người thiết kế đặt cấu hình mô tả hợp phần có thông số chung trong thiết kế Mô tả tương thích chung có thể thay đổi kích thước đặc tính vật lý, định thời đặc tính tải, và môi trường hoạt động của thiết kế

* Khai báo kiểu và cách dùng: Ngôn ngữ VHDL cho phép mô tả các kiểu bit, Boolean, integer, floating, kiểu liệt kê, kiểu dãy, bản ghi Ngoài ra còn hỗ trợ các kiểu do người sử dụng định nghĩa Ngôn ngữ VHDL cũng cho phép định nghĩa lại các toán tử của ngôn ngữ bởi người sử dụng

* Sử dụng các chương trình con: Ngôn ngữ VHDL cho phép định

nghĩa các hàm, thủ tục, các chuơng trình con có thể sử dụng để biến đổi các kiểu, định nghĩa đơn vị luận lý, định nghĩa lại toán hạng, định nghĩa toán tử mới, và các ứng dụng khác trong ngôn ngữ lập trình

* Điều khiển định thời: Ngôn ngữ VHDL là cho phép đặc tả định thời

ở tất cả các cấp như là: đặt giá trị của tín hiệu, thời gian trễ, định nghĩa tín hiệu đồng bộ, đặt độ rộng xung …

II CÁC KHÁI NIỆM CƠ BẢN (xem[1])

1 Các khối

VHDL được mô tả thành những khối, khối đầu tiên là đơn vị thiết kế Có 5 loại đơn vị thiết kế được phân thành hai phần là phần mô tả kiến trúc phần cứng và phần mềm

+Phần cứng gồm có: Thực thể (entity), cấu hình (configuration), kiến trúc (architecture)

+Phần mềm gồm có: gói (package) và thân gói (package body)

2 Giới thiệu hai đơn vị thiết kế cơ bản của VHDL

Hai đơn vị thiết kế cơ bản của VHDL là Entity declaration và Architecture body

Trang 8

Một Entity là một mô hình sử dụng một khai báo thực thể và ít nhất có

một thực thể kiến trúc Khai báo thực thể là mô tả tổng quát bên ngoài của một thực thể, ví dụ như: tên các tín hiệu input, output Thân của kiến trúc (Architecture body) là đi vào đặc tả bên trong của một thực thể, ví dụ thiết lập sự nối kết liên tục của các thành phần mà đại diện cho cấu trúc của một thực thể, hoặc tập hợp tất cả các phát biểu đồng thời hay liên tục mà đại diện cho sự xử lý của thực thể

-Mô hình của thực thể

Hình 1

Khai báo thực thể là chỉ ra tên của mô hình cần thiết kế và danh sách các cổng giao tiếp Cổng là những tín hiệu mà thực thể dùng để giao tiếp với những mô hình khác trong môi trường tổng quát của nó

-Mô tả chi tiết một thực thể được chỉ ra bởi kiến trúc của thực thể như sau

Ví dụ: mô hình cho thực thể mach_cong, ở dạng cấu trúc (structural):

Architecture arc_mach_cong of mach_cong is

Sự trừu tượng phần cứng

của một hệ thống số

Khai báo thực thể

Thân kiến trúc

Trang 9

End arc_mach_cong;

Thực thể kiến trúc có tên là “arc_mach_cong” Dùng những thành

phần có sẵn của ngôn ngữ VHDL như cổng And, Xor để nối kết chúng lại

với nhau tạo thành một cấu trúc cho thực thể

3 Gói

Trong môi trường thiết kế phần cứng cần phải nhóm các hợp phần hay các tiện ích dùng cho việc mô tả các hợp phần Những cấu trúc VHDL để mô tả các tiện ích và môi trường là các định nghĩa kiểu và chương trình con Những hợp phần và tiện ích như vậy có thể được nhóm lại bằng cách sử dụng khối Như ví dụ sau, cách khai báo khối chứa các hợp phần và tiện ích có thể tham khảo được từ các thực thể và các kiến trúc

Cú pháp: Package tên của gói is

Khai báo các thành phần của gói

End tên của gói ;

Trong phần thân khối chứa những định nghĩa chương trình con và các

tiện ích được dùng bởi chương trình con

Package body tên của gói is

Khai báo các thành phần trong thân của gói

End tên của gói ;

Ngôn ngữ VHDL cho phép sử dụng các thư viện và liên kết các hợp phần phụ của thiết kế với các phần tử của thư viện khác

III MỐI QUAN HỆ GIỮA NGÔN NGỮ VHDL VÀ PHẦN CỨNG

Trong phần này trình bày hai vấn đề là các thành phần của ngôn ngữ VHDL để thực hiện việc mô tả phần cứng và sự thể hiện phần cứng bằng ngôn ngữ VHDL

Phần 1 trình bày các kiểu của VHDL, các đối tượng của VHDL, các toán tử, các lệnh tuần tự

Phần 2 các vấn đề về mạch tổ hợp và mạch đồng bộ được trình bày

1 Các thành phần của VHDL để mô tả phần cứng

1.1 Các kiểu của VHDL (xem [2, 4])

Trong ngôn ngữ VHDL có các kiểu sau:

- Kiểu liệt kê được định nghĩa bằng cách liệt kê danh sách các giá trị, mỗi thành phần của danh sách là một tên dành riêng hoặc là một ký tự số

Trang 10

Ví dụ: Type STD_LOGIC is (‘U’,’X’,’0’,’1’,’H’,’-’);

Type STATE_TYPE is (HALT, READY, RUN, ERROR);

- Kiểu nguyên có hai loại:

+ Kiểu nguyên được định nghĩa như vùng con của kiểu tổng quát đã được cài sẵn và các giới hạn phải được khai báo

Type BYTE_INT is range -128 to 127;

+ Kiểu nguyên được định nghĩa bởi người sử dụng

Signal MY_INT: MY_INTEGER;

- Kiểu mảng dùng để định nghĩa một tập chỉ số

- Kiểu record dùng để định nghĩa tập các kiểu khác nhau

Type ITEM_TYPE is record

1.2 Các đối tượng của ngôn ngữ VHDL (xem[1])

Trong ngôn ngữ VDHL có một số đối tượng như hằng, biến, tín hiệu

- Hằng: là giá trị được xác định trong suốt thời gian khởi tạo, các giá trị này không đổi trong suốt quá trình thực thi

- Biến: Giá trị của biến được cập nhật tức thời khi được gán

Có 2 loại biến, biến cục bộ và biến toàn cục

+ Biến cục bộ có thể được khai báo trong các chương trình con hoặc trong các quá trình và quan trọng là trong quá trình tổng hợp nơi mà chúng có thể suy ra các phần tử nhớ

+ VHDL đồng thời ràng buộc thu hẹp sự sử dụng các biến toàn cục đối với sự miêu tả cấp hệ thống

-Tín hiệu:

Trang 11

Trên board mạch in hoặc các mạch tích hợp thông tin được lan truyền xuyên qua các dây dẫn Trong ngôn ngữ VHDL các dây dẫn này gọi là “tín

hiệu”

Các tín hiệu hiện hữu từ khi bắt đầu đến khi kết thúc của quá trình tái tạo Không tạo ra tín hiệu mới hoặc không nối kết vật lý với các tín hiệu được cho phép trong thời gian tái tạo

Các tín hiệu không có chứa đựng như các biến Các tín hiệu như là những đối tượng và có các kết nối được cố định với các tín hiệu khác

1.3.1 Các toán tử luận lý: or, and, nor, nand, xor, nor nhận các toán hạng kiểu: bit, boolean, vector

Ví dụ : Signal s, x,y: bit_vector(1 downto 0);

1.3.2 Các toán tử quan hệ: =, >, <, >=, < =

Toán tử quan hệ luôn luôn trả về giá trị boolean được mã hoá ‘0’ hoặc

‘1’ Kết quả là true nếu hai toán hạng có cùng giá trị

Ví dụ: ‘0’< ‘1’ .là true

‘A’ < ‘BC’ là true

‘10’ < ‘101’ là also true

1.3.3 Các toán tử cộng: +, -, &

Các toán tử cộng và trừ được định nghĩa cho các toán hạng số nguyên

Ví dụ: R < = a+b+c+1;

T<= [(a+b) +c) +1];

S< = (a+ b) + (c+2);

1.3.4 Các toán tử dịch: sll, srl, sla, sra, rol, ror

Ví dụ: Signal S, R1, R2, R3, R4, T1, T2, T3, T4: Bit_Vector (1 To 4);

BEGIN

R1 <= ’SLL’(S, 1);

Trang 12

T2 <= S (2 TO 4) & ‘0’;

R2 <= ‘ROL’(S, 2);

Ví dụ: SIGNAL R, A:INTEGER –4 TO 3;

R<=-A;

1.3.6 Các toán tử nhân: /, *, mod, rem

Phép chia “/”, phép nhân “*”, lấy phần nguyên “mod”, lấy số dư

“rem” được xem là trong nhóm toán tử nhân

Ví dụ: Signal MEM: NATURAL range 0 to 3;

MEM <= (MEM + 1) mod 4;

1.4.1 Phép gán biến số

Phép gán biến được thực hiện bởi toán tử “:=” và thao tác này xảy ra ngay lập tức khi tính toán Do đó giá trị của biến chỉ thay đổi bởi lệnh gán tiếp theo nếu giá trị mới khác với giá trị cũ

WORD (3 to 4):= “10”;

1.4.2 Phép gán tín hiệu

Phép gán tín hiệu tương tự như phép gán biến nhưng hiệu quả của lệnh chỉ xảy ra sau lệnh đồng bộ Phép gán tín hiệu được thực hiện bởi toán tử “<=”

Ví dụ: signal <= A and B;

1.4.3 Lệnh điều kiện

* Phát biểu if: một phát biểu if bao gồm cả các nhánh elsif và else

ELSIF biểu thức THEN câu lệnh;

ELSE câu lệnh;

END IF;

* Phát biểu case: phát biểu case có thể dùng để thay thế cho phát biểu

if và nhiều phát biểu elsif

Cú pháp: CASE Biểu thức IS

WHEN giá trị hằng=> câu lệnh;

Trang 13

WHEN giá trị hằng => câu lệnh;

WHEN OTHERS => câu lệnh;

END CASE;

1.4.4 Lệnh lặp

Phát biểu lặp: có 2 kiểu phát biểu lặp, đó là vòng lặp for và while

* Vòng lặp For

Cú pháp: For i in giá_trị to/downto giá_trị loop

End loop;

* Vòng lặp while

Cú pháp: loop_label:

WHILE boolean_expression LOOP

Câu lệnh ;

END LOOP loop_label;

2 Sự thể hiện phần cứng bằng VHDL (xem [4])

2.1.1 Các cổng luận ly ù : and, nand, or, xor, nor, not

Ví dụ mô tả cổng nor có 2 cổng vào như sau:

2.1.2 Các toán tử số học: Gồm 4 toán tử cơ bản cộng, trừ, nhân và chia

Các toán tử này thường thực hiện trên kiểu dữ liệu số nguyên (INTEGER). Trong ngôn ngữ VHDL các toán tử ‘+’, ‘-‘, ‘* ‘, ‘/’ đã được định nghĩa trước vì vậy có thể sử dụng mà không cần khai báo

Ví dụ: Signal l1, l2 SUM_l: INTEGER range –16 to 15;

SUM_l <= l1+l2;

Trang 14

2.1.3 Các toán tử dịch và quay

Các toán tử dịch và quay được thực hiện trên các đối tượng được biểu diễn theo kiểu bit_vector Toán tử dịch và quay có thể phân biệt tính luận lý và tính số học

Ví dụ: Giá trị ban đầu 10100110

Ví dụ: Giá trị ban đầu 10100101

2.1.4 Bộ dồn kênh

Chức năng cơ bản của bộ dồn kênh là để chọn lựa một đầu ra trong nhiều đầu vào, trong khi đó mạch phân kênh thực hiện thao tác ngược lại, một đầu vào được truyền đến một trong những đầu ra, các giá trị đầu ra khác giữ giá trị trước của chúng

Ví dụ: Entity MUX2 is

Port (A, B: in bit; Select_A: in bit; Z: out bit);

Trang 15

Sơ đồ phần cứng mô tả bộ dồn kênh

Các phần tử đồng bộ tạo thành một họ rất lớn, nó chứa các mạch cài và các thanh ghi là các phần tử nhớ

Các cấu trúc tương đương của các mạch đồng bộ

Hình 3

2.2.1 Mạch cài

Mạch cài là tài nguyên bộ nhớ đơn giản nhất, đầu vào D được truyền đến đầu ra Q khi tín hiệu điều khiển G tích cực nếu không thì giá trị trước đó của D giữ nguyên trên Q

Ví dụ: ENTITY LATCH IS

Port (G: in BIT; D: in BIT; Q: out BIT);

Architecture A of LATCH IS Begin

Trang 16

2.2.2 Thanh ghi

Thanh ghi cũng tương tự như mạch cài nhưng dữ liệu được nhớ tại sườn của lệnh thay vì mức của nó Sự mô tả mạch cài và thanh ghi gần giống nhau

IV CÔNG NGHỆ FPGA(xem [4, 9])

Công nghệ FPGA (FPGA là từ viết tắt của Field Programmable Gate Arrays) là công nghệ chế tạo mạch tích hợp mật độ cao FPGA là một thiết

bị cấu trúc luận lý có thể lập trình được bởi người sử dụng mà không cần đến một công cụ chế tạo mạch tích hợp

Người thiết kế muốn tạo ra FPGAs tốt phải sử dụng công cụ thiết kế được trợ giúp bởi máy tính gọi là CAD (computer -Aided - Design) Đầu tiên thiết kế mạch luận lý ban đầu đòi hỏi một sơ đồ biểu diễn mạch hay một mô tả VHDL hoặc đặc tả các biểu thức luận lý (Boolean) Từ các ngõ vào ban đầu mô tả mạch được chuyển thành dạng chuẩn như các biểu thức boolean sau đó được xử lý bằng công cụ tối ưu luận lý, chúng rút gọn các biểu thức, sau đó các biểu thức Boolean đã tối ưu được truyền tới các khối luận lý của FPGA thông qua chương trình ánh xạ công nghệ (technology mapping) Bộ ánh xạ thực hiện tối thiểu số khối được dùng, tiếp theo chương trình sắp xếp (Placement) thực hiện đặt mỗi khối vào trong dãy FPGAs Bước cuối cùng trong hệ thống CAD được thực hiện bằng phần mềm điều khiển luồng (routing) chúng ấn định các đoạn dây FPGA và chọn các chuyển mạch có thể lập trình phù hợp với các kết nối trong khối luận lý Sau khi thực hiện thành công các bước sắp xếp và tuyến ngõ ra của hệ thống CAD được nạp vào đơn vị lập trình tạo ra chíp FPGA

Trang 17

Mô hình hệ hống CAD của FPGA

Đơn vị lập trình Routing Placement Ánh xạ công nghệ Tối ưu logic

Mạch logic ban đầu V

V

V

V V

V Configured FPGA

Hình 4

1 Các loại FPGA

Các loại FPGA của nhiều công ty khác nhau có các đặc tính riêng chúng có thể được chia làm 4 loại chính:

Divice)

PLD phân cấp

Đa cổng

Nối kết

Nối kết PLD

Block

Logic Block

Logic Block

Logic Block

Nối kết

Kết nối phủ lên Logic Block

Hình 5

Trang 18

1.1 Các công nghệ lập trình chíp

Có nhiều cách hiện thực các phần tử lập trình, các công nghệ lập trình

đang sử dụng hiện nay là: RAM tĩnh, cầu chì nghịch (anti-fuse), EPROM transistor và EEPROM transistor Mặc dù các công nghệ lập trình khác

nhau nhưng chúng có chung tính chất là có thể cấu hình ở một trong hai

trạng thái làø: ON hoặc OFF Các phần tử lập trình dùng để hiện thực các kết

nối lập trình giữa các khối luận lý của FPGA, một FPGA thông thường có thể có hơn 100.000 phần tử lập trình Do đó các phần tử lập trình phải có các tính chất sau:

+ Chiếm càng ít diện tích của chíp càng tốt

+ Có kháng trở thấp khi ở trạng thái ON và kháng trở cao khi ở trạng thái OFF

+ Có điện dung ký sinh thấp khi kết nối các đoạn dây

+ Có thể chế tạo một cách tin cậy số lượng lớn phần tử lập trình trên một chíp

1.1.1 Công nghệ lập trình dùng RAM tĩnh

Công nghệ lập trình SRAM được sử dụng trong các FPGAs của nhiều

công ty như: Algotronix concurrent Logic, Plessey semiconductors, Xilinx Trong các FPGAs này, các kết nối lập trình được làm bằng transistor truyền (pass-transistor) các cổng cho phép truyền (pass-gates) hay các bộ dồn kênh (multiplexer), tất cả điều được điều khiển bằng ô nhớ (cell) SRAM

Ram cell

call inpu MultiplexerHình 6 Công nghệ lập trình ram tĩnh

Trong trường hợp pass-transistor và pass-gates ở hình 6 SRAM cell điều

khiển cổng truyền ON hoặc OFF Khi off giữa hai dây nối với pass-gates có

một trở kháng rất cao Khi ON nó sẽ tạo ra một trở kháng thấp kết nối giữa hai dây nối Đối với bộ dồn kênh, SRAM cell điều khiển ngõ nhập nào của các bộ dồn kênh sẽ được kết nối với ngõ ra của nó

Trang 19

1.1.2 Công nghệ lập trình dùng cầu chì nghịch (anti-fuse)

Công nghệ lập trình anti-fuse được sử dụng trong các FPGA của Actel Corp, QuickLogic và CrossPoint Solution Tuy anti-fuse được sử dụng trong các loại FPGA có cấu tạo khác nhau, nhưng chức năng là như nhau Một anti-fuse bình thường sẽ ở trạng thái trở kháng cao, nhưng có thể bị nóng chảy thành trạng thái trở kháng thấp khi được lập trình ở điện thế cao

a Cấu tạo anti-fuse của Actel

Anti-fuse của Actel được gọi là PLICE Nó có cấu trúc hình chữ nhật gồm 3 lớp: lớp dưới cùng chứa silic mang nhiều điện tích dương (n+diffusion), lớp giữa là lớp điện môi (Oxy-Nitơ-Oxy cách điện) và lớp trên cùng là Poly-Silic

metal 1 wire Poly-Si

metal 2 wire anti-fuse n+diffusion

Poly-Si dielectric oxide

silicon substrate n+diffusion

Hình 7 công nghệ lập trình cầu chì nghịch PLICE

Anti-fuse PLICE được lập trình bằng cách đặt một điện thế cao thích hợp (18v) giữa hai đầu của anti-fuse và dòng điều khiển khoảng 5mA qua thiết bị Dòng và áp này tạo ra một nhiệt lượng đủ nóng bên trong lớp điện môi làm nó nóng chảy và tạo ra một liên kết giữa poly-silic và n+diffusion Hai lớp dưới cùng và trên cùng của anti-fuse được nối với các dây kim loại để khi lập trình anti-fuse sẽ tạo ra một kết nối có trở kháng thấp (300 đến

500 ohm) giữa hai dây kim loại

b Cấu tạo anti-fuse của QuickLogic

Anti-fuse của QuickLogic gọi là ViaLink Nó tương tự như PLICE, cũng có 3 lớp kim loại Tuy nhiên Vialink sử dụng kim loại mức 1 cho lớp dưới cùng, một hợp kim vô định hình cho lớp giữa và kim loại mức hai cho lớp trên cùng Vialink được lập trình bằng cách đặt điện thế 10v giữa các đầu của nó Khi dòng được cấp đủ trạng thái của silic vô định hình sẽ thay đổi và tạo ra một liên kết dẫn điện giữa hai lớp kim loại

Trang 20

metal1 metal2 silic vô định hình

Hình 8 Công nghệ lập trình cầu chì nghịch ViaLink

1.1.3 Công nghệ lập trình EPROM và EEPROM

Công nghệ lập trình EPROM được sử dụng trong các FPGA của Altera Corp và Plus Logic Công nghệ này giống như sử dụng trong bộ nhớ EPROM Không giống MOS Transistor, một EPROM Transistor gồm hai cổng, một cổng treo (floating-gate) và một cổng chọn (select-gate) Cổng treo được đặt giữa cổng chọn và kênh của transistor

Điện trở lên nguồn +5V

GND word line

floaling gate

select gate bit line

EPROM transistor

Hình 9 Công nghệ lập trình EPROM

Ở trạng thái bình thường không có điện tích giữa cổng treo và transistor có thể chuyển sang trạng thái ON một cách bình thường bằng cổng chọn Khi transistor được lập trình bằng một dòng điện lớn chạy giữa nguồn và kênh thì một điện tích được giữ lại ở cổng treo Điện tích này làm cho

transistor chuyển sang trạng thái OFF Bằng cách này, EPROM transistor có

thể được tái lập trình bằng cách hủy bỏ lớp điện tích được giữ lại ở cổng treo

Trong hình 9 EPROM transistor được sử dụng trong FPGA theo cách khác với SRAM và anti-fuse Thay vì dùng cho lập trình kết nối hai dây EPROM transistor được sử dụng để kéo xuống các ngõ nhập của logic

block Như hình vẽ trên một đường dây gọi là word line được nối với cổng

chọn của EPROM transistor khi transistor chưa được lập trình ở trạng thái

block và bị kéo về mức logic 0 Nhiều EPROM transistor ứng với nhiều

Trang 21

word line khác nhau được nối với cùng một bit line , khi một điện trở kéo lên nguồn nối với bit line mô hình này không những cho EPROM transistor

hiện thực các kết nối mà còn hiện thực các chức năng luận lý AND nối dây

Nhược điểm của phương pháp này là các điện trở tiêu tốn năng lượng cố định

Một ưu điểm của EPROM transistor là chúng có thể tái lập trình mà không cần bộ nhớ bên ngoài Không giống như SRAM, EPROM transistor

không thể tái lập trình ngay trên bộ mạch

Phương pháp dùng EEPROM tương tự như EPROM nhược điểm của nó

là tốn gấp đôi diện tích chíp so với EPROM transistor và cần nhiều nguồn điện thế mà các loại khác không cần

Hiện nay trên thị trường có một số họ FPGA của các hãng như Xilinx,

Actel, Altera v.v trong phần này trình kiến trúc của hãng Altera

PLD trong cấu trúc này sử dụng mảng hai chiều và một cấu trúc routing lập trình được Kiến trúc cơ bản của Altera FPGA dựa trên công nghệ lập trình

EPROM nó gồm một mảng lớn các khối lập trình được gọi là những khối

mảng luận lý (logic array Blocks) được kết nối với nhau bởi các nguồn tài

nguyên routing gọi là mảng lập trình nối liền nhau (Programmable Interconnect Array) Có hai thế hệ Altera FPGA là FPM5000 và FPM7000

Kiến trúc tổng quát của Altera

I/O I/O

Array LAB= Logic Array Block

Hình 10 Kiến trúc tổng quát của Altera FPGAs

Altera FPGA có cấu trúc nhóm phân cấp gồm 2 mức một khối luận lý

là Macrocell mức này gọi là LAB và một block gọi là bộ mở rộng đường dây

Trang 22

tích (expander product terms), số lượng macrocell trong mỗi LAB thay đổi

tuỳ theo loại Altera FPGA, mỗi macrocell gồm 3 cổng AND nối vào cổng

macrocell Các ngõ nhập của macrocell xem như các cổng AND một ngõ nhập vì chúng được tạo ra như các cổng AND nối dây của các tín hiệu

Đường dây tích có thể là một tín hiệu trong PIA hay là từ bộ mở rộng đường

dây tích của LAB hoặc ngõ xuất của bất kỳ Macrocell nào, các tín hiệu ở

dạng thực hoặc bù nghĩa là phép đảo có thể lập trình được (programmable

inversion) với mô hình này thì chức năng của LAB giống chức năng của

này sẽ làm cho LAB hiệu quả hơn bởi vì hầu hết các hàm logic không cần

có số đường dây tích lớn như trong PLD và LAB hỗ trợ mở rộng chức năng

bằng bộ mở rộng đường dây tích

Cấu trúc của Altera LAB

Expander Product Tern Array

P I A

Hình 11 Altera LAB

2 Một số ứng dụng của FPGA

FPGA có thể được sử dụng trong hầu hết các ứng dụng mà hiện tại đang dùng trong các chíp MPGA, PLD và SSI (Small Scale Integrated) Các ứng dụng của FPGA có thể được liệt kê ra như sau:

Mạch tổ hợp là ứng dụng đặc biệt (Application-Specific Integrated

Circuit): FPGA là một công cụ có tính tổng quát, và hoàn toàn có thể hiện

thực được mạch logic số Nó đặc biệt thích hợp cho việc hiện thực ASIC

Một vài ứng dụng đã được ghi nhận như:1 megabit FIFO controller, kênh

giao tiếp IBM PS/2, DRAM controller, graphic engine, mạch nhận biết ký tự qua hình ảnh, …

Ứng dụng trong các máy tính dựa trên nền các FPGA: một loại máy

tính mới hoàn toàn được ra đời nhờ vào các FPGA có thể tái lập trình được ngay trên mạch của nó Những máy tính này bao gồm các mạch được thiết kế từ các FPGA Ý tưởng này xuất phát từ việc dùng một chương trình phần mềm để “dịch” vào phần cứng thay vì vào phần mềm theo cách thông

Trang 23

thường Phần cứng này sau đó được hiện thực bằng cách lập trình các board

mạch FPGA Phương pháp mới này có 2 thuận lợi cơ bản là:

Không yêu cầu quá trình lấy lệnh như là các bộ vi xử lý truyền thống bởi vì chính bản thân phần cứng là sự thể hiện của các lệnh đó Ưu thế này có thể giúp cho tốc độ của mạch tăng lên đến hàng trăm lần

Loại thiết bị mới này còn có thể hỗ trợ các quá trình xử lý song song ở mức độ rất cao, dẫn đến tốc độ xử lý tăng vọt

Ưùng dụng vào việc tái cấu hình phần cứng (On-Site Re- Configuration

đổi được cấu trúc các máy đã sản xuất hoàn chỉnh hay đã được sử dụng Ngay cả đối với các máy ở xa cũng có thể được thay đổi, bổ sung cho thích ứng hoặc ngay cả chỉnh sửa lại sự sai sót của công việc thiết kế mạch đó Loại FPGA thích hợp nhất cho việc tái cấu hình này là loại chứa những công tắc có thể tái lập trình được

3 Thiết bị Max, Flex

Công ty Altera là một nhà chế tạo hàng đầu về PLD, Altera tạo ra PLD trong phạm vi từ các thiết bị có thể được dùng để thay thế tương đương

300 cổng TTL đến các thiết bị có thể thay thế 250000 cổng

Một board mạch in lớn về các chíp có thể được thay thế bằng một PLD đơn, điều này sẽ làm giảm được kích thước của hệ thống số và cũng làm giảm được giá thành chế tạo và chạy thử PLDs cũng phổ biến vì chúng có thể xóa được Các PLD có thể xóa được cho phép nhà thiết kế lập trình một PLD, và chạy thử chúng trên một hệ thống thực, và làm thay đổi khi cần thiết Lập trình lại cho một con chíp thì nhanh hơn nhiều so với việc viết lại một bread-board hoặc làm lại một board với nhiều dây dẫn chằn chịt Cuối cùng một thiết kế được thực thi trong một PLD có thể dễ dàng được vận chuyển Thiết kế này có thể được thực thi trong nhiều PLD khác nhau Một PLD tiêu biểu chứa một dãy các tài nguyên logic như là các cổng,

các flipflop, các thanh ghi and/or, với các kết nối bên trong giữa các tài

nguyên logic có thể lập trình được Các kết nối bên trong này có thể được bổ sung với các đường fusible (nấu chảy được), mà trong trường hợp này thiết bị chỉ có thể được lập trình một lần Chế độ kết nối này thì phổ biến trong các PLD ban đầu như là 16L8 và 22L10 PAL's (chúng phổ biến trong nhiều năm) Trong các PLD, gần đây các kết nối bên trong có thể được bổ sung bằng các mạch chuyển đổi CMOS được điều khiển bằng RAM tĩnh, trong trường hợp này thiết bị có thể được lập trình lại bằng điện, mà không tách ra khỏi mạch, các PLD khác bao gồm các PLD mà bạn sẽ dùng trong

Trang 24

lớp (class) này sẽ có các kết nối bên trong mà có thể được lập trình bằng điện và xóa bằng đèn tử ngoại UV (UV là viết tắt của ultraviolet)

Có nhiều thiết bị lập trình được của các hãng khác nhau ở đây chỉ giới thiệu một vài thiết bị lập trình thông dụng của hãng Altera

Altera MAX gồm có MAX9000, MAX7000, MAX5000

- Họ MAX9000 là thế hệ thứ 3 của kiến trúc nhiều ma trận mảng (Multiple Array Matrix) bao gồm Max9000 và MAX9000A là những EEPROM cơ bản gồm những thiết bị có khả năng lập trình logic và xoá (EPLD) : EPM9320, EPM9320A, EPM9400, EPM9480, EPM9560A MAX9000 EPLDs phù hợp cho những kế hoạch đòi hỏi khả năng hiện thực giá trị xuất nhập ở mức cao, có mật độ từ 320 đến 560 Macrocells khoảng

6000 đến 12000 cổng, họ MAX9000 có thời gian trễ từ 10ns đến 20ns và hiệu xuất tiêu biểu là 145MHz, MAX9000 cho phép người thiết kế kết hợp những thiết bị có dung lượng nhỏ vào trong một thiết bị MAX900, điều này giúp tiết kiệm không gian quí giá trên board mạch làm giảm giá thành sản phẩm và giảm thời gian chậm trễ cho việc hoàn thành sản phẩm

-Họ MAX7000 là thế hệ thứ 2 của kiến trúc ma trận mảng gồm có MAX7000, MAX7000A, MAX7000B, MAX7000E, MAX7000S và MAX7000AE là những EEPROM được chế tạo theo công nghệ CMOS, MAX7000 có mật độ từ 32 đến 512 macrocells, có thời gian delay 3,5ns Thiết bị MAX7000 thường hoạt động với điện thế 5v, 3.3v, 2.5v

Altera FLEX gồm có FLEX10K, FLEX8000 và FLEX6000

-FLEX10K có kiến trúc cơ bản Flexible Logic Element Matrix Họ FLEX10K gồm có FLEX10K, FLEX10KA, FLEX10KB, FLEX10KE là những SRAM gồm có EPF10K10, EPF10K20, EPF10K30, EPF10K40, EPF10K50, EPF10K70, EPF10K100 Altera FLEX10K được nhúng vào trong họ lập trình logic nó mở ra tính linh động, tính mềm dẻo của lối lập trình luận lý theo kiểu lập trình truyền thống Nó là hai cấu trúc logic đầy đủ duy nhất nhúng vào mảng và mảng logic Nó có khoảng 10000 đến 250000 cổng tiêu biểu FLEX10K mở ra 3 quá trình, mỗi một thế hệ tiếp theo cung cấp sự thực thi cao hơn, hạ giá thành, làm giảm sự thiệt hại

Trang 25

Phần 2 THIẾT KẾ CPU

Các khái niệm về ngôn ngữ VHDL, cú pháp và ngữ nghĩa của nó đã được trình bày ở phần 1 Phần này sử dụng cấu trúc của phần 1 để mô tả CPU 8 bit

Phần I nêu nhiệm vụ của CPU, phần II mô tả tổ chức bộ nhớ của CPU, phần III trình bày tập lệnh CPU, phần IV trình bày chế độ địa chỉ của CPU, phần V mô tả hành vi của CPU, phần VI trình bày các thành phần của CPU

I NHIỆM VU Ï

Thiết kế một CPU 8 bit, CPU này có một thanh ghi tích luỹ, một bus

dữ liệu 8 bit và một bus địa chỉ 12 bit Nó thực hiện được một số phép tính luận lý và số học cơ bản CPU có một số lệnh nhảy và rẽ nhánh với các chế độ địa chỉ trực tiếp và gián tiếp CPU cũng có một số lệnh gọi chương trình con đơn giản, có một tín hiệu đồng hồ CLK, một tuyến ngõ ra 8 bit và hai

tuyến ngõ vào 8 bit có địa chỉ là FFEh, FFFh

II TỔ CHỨC BỘ NHỚ CỦA CPU

CPU có khả năng định vị địa chỉ 4096 byte nhớ thông qua bus địa chỉ

12 bit Bộ nhớ này phân chia thành 16 trang mỗi trang là 256 byte, trang đầu tiên nằm trong CPU, 4 bit có trọng số cao nhất của tuyến địa chỉ thiết lập địa chỉ trang (page), 8 bit có trọng số thấp nhất của nó chỉ độ dời (offset) Bộ nhớ được phân thành 16 trang (page0 ->page15), nhưng bộ nhớ của CPU vẫn được xử lý như bộ nhớ 4K liên tiếp nhau Để đơn giản cho việc thiết kế

ta lấy địa chỉ xuất nhập của CPU chính là địa chỉ của ô nhớ FFEh và FFFh

là 2 cổng nhập và xuất của CPU

Hình 12 mô tả trang và độ dời của CPU

1

0

Offset

0 5 Page

Trang 26

III TẬP LỆNH CỦA CPU

CPU có tổng cộng 23 lệnh CPU này có một thanh ghi tích luỹ để thực

hiện tất cả các lệnh Ngoài ra, CPU còn có các cờ overflow, carry, negative

và zero (v, c, n và z) Các cờ này có thể được thay đổi bởi các lệnh liên

quan đến cờ hoặc bởi các lệnh làm thay đổi nội dung của thanh ghi tích lũy

Lệnh lda nạp vào thanh ghi tích lũy với nội dung của bộ nhớ có địa chỉ trong hàng lệnh, còn lệnh and, adc và sbc truy cập bộ nhớ để lấy toán hạng

và thực hiện các tính toán (and, cộng và trừ) và lưu kết quả trong thanh ghi

tích lũy Các cờ z và n được thiết lập hoặc xoá dựa trên kết quả của lda,

and, adc và sbc Các lệnh adc và sbc cũng ảnh hưởng đến cờ v và cờ c phụ

thuộc vào kết quả tương ứng

- Bảng tóm tắt các lệnh của CPU

Lệnh gợi

nhớ

Mô tả chức năng tóm tắt Bit

địa chỉ

Chế độ địa chỉ

Định vị gián tiếp

Sử dụng cờ

Thiết lập cờ

Add AC với (loc)

Sub AC với (loc)

Nhảy tới adr

Cất AC vào loc

Gọi chương trình con tại loc

Rẽ nhánh tới adr nếu V

Rẽ nhánh tới adr nếu C

Rẽ nhánh tới adr nếu Z

Rẽ nhánh tới adr nếu N

Không làm gì

Xoá AC

Lấy bù 1 AC

Lấy bù

Dịch trái số học AC

Dịch phải số học AC

Có Có Có Có Có Có Không Không Không Không Không Không Không Không Không Không Không

-c -c v - -c z- -n -c

zn zn vczn vczn zn -c vczn zn Bảng 1

Lệnh sta cất nội dung của thanh ghi tích lũy vào vị trí nhớ được ghi trong hàng lệnh Việc thực hiện lệnh jmp là làm cho lệnh kế tiếp được thực hiện từ địa chỉ được chỉ ra trong hàng lệnh Các lệnh lda, and, adc, sbc, jmp và sta sử dụng địa chỉ 12 bit và có thể được dùng với chế độ địa chỉ gián

tiếp

Lược đồ địa chỉ của lệnh jsr và các lệnh rẽ nhánh là địa chỉ trang Các lệnh này chỉ ra trang mà chúng thực hiện lệnh Lệnh jsr với địa chỉ 8 bit chỉ

Trang 27

tới chương trình con (tos), những lệnh kế tiếp thực hiện từ vị trí độ dời tos +

1 của trang hiện hành Ở cuối chương trình con để quay lại chương trình

chính thì dùng lệnh nhảy gián tiếp đến địa chỉ tos Bốn lệnh rẽ nhánh jv, jc,

jz và jn làm cho lệnh kế tiếp được thực hiện tại địa chỉ của trang hiện hành

với độ dời do lệnh cung cấp nếu các cờ tương ứng v, c, z hoặc n được thiết

lập

Các lệnh nop, cla, cma, asl và asr là lệnh không cần địa chỉ và thực hiện các thao tác trên các thanh ghi bên trong CPU Lệnh nop không thực hiện thao tác chỉ tăng bộ đếm chương trình lên 1, cla để xoá thanh ghi acc về 0, cma lấy bù nội dung của acc, cmc bù nội dung cờ c, als và asl dùng để dịch chuyển số học trái hay phải thanh ghi acc Khi dịch trái, bit có trọng số cao nhất của acc được chuyển vào cờ carry, các bit có trọng số thấp hơn dịch sang trái 1 bit Lệnh asr giữ nguyên bit dấu của thanh ghi acc và dịch

chuyển các bit có trọng số thấp hơn sang bên phải Cả 2 lệnh dịch chuyển

đều ảnh hưởng đến các cờ zero và negative

IV CHẾ ĐỘ ĐỊA CHỈ CỦA LỆNH

Trong tập lệnh có 3 nhóm lệnh, nhóm thứ nhất có địa chỉ đầy đủ cần 2 byte và có thể truy cập tới địa chỉ bất kỳ của bộ nhớ của CPU và có thể dùng địa chỉ trực tiếp hay gián tiếp, nhóm thứ 2 là nhóm lệnh dùng định vị trang yêu cầu 2 byte có thể truy cập vùng nhớ ở trang hiện hành mà không thể sử dụng địa chỉ gián tiếp, nhóm thứ 3 là nhóm lệnh không địa chỉ vì không dùng bộ nhớ cho toán hạng

Các lệnh địa chỉ đầy đủ :

Mã tác vụ chỉ thao tác của lệnh địa chỉ đầy đủ được tạo ra bởi 3 bit có trọng số cao nhất của byte lệnh đầu tiên Bit 4 chỉ chế độ địa chỉ trực tiếp hoặc gián tiếp (0: trực tiếp, 1: gián tiếp) và 4 bit có trọng số thấp nhất chứa địa chỉ trang toán hạng của lệnh Byte thứ 2 của lệnh địa chỉ đầy đủ chỉ ra địa chỉ độ dời và cùng với địa chỉ trang để tạo ra địa chỉ 12 bit cho toán hạng

Mã tác vụ của lệnh

Lệnh gợi nhớ Các bit mã tác vụ

765

T/G Bit 4

Địa chỉ trang Địa chỉ trang Địa chỉ trang Địa chỉ trang Địa chỉ trang Địa chỉ trang

Trang 28

Các lệnh địa chỉ trang

Các lệnh này sử dụng địa chỉ trang nhớ mà lệnh đang ở đó Mã tác vụ của jsr là 110 và 5 bit còn lại của byte lệnh đầu tiên bị bỏ qua Vùng mã tác vụ của lệnh rẽ nhánh chứa 111, còn bit 4 luôn là 1 và các bit có trọng số

thấp hơn của nó chỉ ra điều kiện để rẽ nhánh Byte thứ 2 của jsr và các lệnh

rẽ nhánh xác định địa chỉ nhảy tới ở trang hiện hành

Định vị địa chỉ trong lệnh địa chỉ trang

.

33 Lệnh sau JSR

.

00000000 Mã lệnh chương trình con

.

JMP gián tiếp 33

.

lệnh JSR Trước khi thực hiện

PC->5:11

5:13 5:12

.

5:33 5:34 5:56 5:57

Trang 29

Lệnh jsr bắt đầu thực hiện tại vị trí 5:11, ở vị trí 5:12 chỉ ra chương trình con bắt đầu thực hiện tại vị trí 33 của trang 5:33, đây là vị trí đầu tiên của chương trình con dùng để lưu trữ địa chỉ trở về khi lập trình thì không được dùng nó cho chương trình, khi lập trình thì sử dụng một lệnh nhảy gián tiếp tại cuối chương trình con để trở về chương trình chính Như trong hình vẽ trên thì lệnh nhảy gián tiếp đặt tại vị trí 5:55 và 5:56, sau khi thực hiện lệnh jsr đặt ở vị trí đầu tiên của chương trình con (vị trí 5:33), lệnh nhảy gián tiếp ở vị trí 5:55 làm cho chương trình chạy trở về vị trí 5:33 sau khi thực hiện hoàn tất chương trình con

Lệnh không địa chỉ

Lệnh không địa chỉ là nhóm lệnh cuối cùng của tập lệnh Các lệnh này

chiếm 1 byte, trong đó 4 bit có trọng số cao nhất của chúng là 1110, 4 bit

còn lại để phân biệt các lệnh nop, cla, cma, cmc, asl và asr

Địa chỉ gián tiếp trong CPU

Nếu bit thứ 4 của byte đầu tiên của lệnh địa chỉ đầy đủ là ‘1’ thì địa chỉ

này là địa chỉ gián tiếp của toán hạng Địa chỉ gián tiếp sử dụng địa chỉ 12 bit gồm có 12 trang và độ dời Độ dời cùng với giá trị trang của địa chỉ gián tiếp tạo địa chỉ đầy đủ cho toán hạng thực của lệnh

V HÀNH VI CPU(xem [2, 4])

Trong phần này mô tả hành vi của CPU 8 bit phần mô tả giao diện của CPU ở mức phần cứng bằng việc sử dụng các bit cho những tín hiệu điều khiển bên ngoài, bộ nhớ và truyền dữ liệu

1.Định thời và đồng hồ

Giao diện mô tả hành vi gồm có một tín hiệu đồng hồ được dùng để đồng bộ Dựa trên tín hiệu đồng hồ, các giản đồ định thời được trình bày như sau:

1.1 Giản đồ định thời đáp ứng ngắt quãng

.

.

pc=066h

clk interrupt

Adbus (PC)

< - S1 ->< - S2 ->

Hình 15

Trang 30

Trong giản đồ định thời xử lý tín hiệu ngắt quãng với 2 nhịp đồng hồ S1 và S2 thì bộ đếm chương trình của CPU được gán giá trị 066 Chương trình bắt đầu thực hiện từ địa chỉ 066 trở đi

.

.

.

clk

< - S1 ->< - S2 ->

pc Adbus

.

databus read-mem

.

Hình 16

Tại sườn lên của xung clock S1, tuyến địa chỉ xuất hiện nội dung của

PC, tín hiệu đọc bộ nhớ cũng tích cực Tại sườn lên của xung S2, khi dữ liệu đã sẳn sàng trên tuyến dữ liệu, CPU đọc dữ liệu đưa vào thanh ghi lệnh (byte1) để thực hiện lệnh

ở chế độ trực tiếp

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Trang 31

1.4 Giản đồ định thời chu kỳ thực hiện lệnh lda, adc, sbc (chế độ trực

tiếp) và lệnh jmp (chế độ gián tiếp)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

< - S5 >< - S6 >

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

read-mem

.

.

.

.

.

.

.

.

.

.

.

.

byte 2

.

.

.

write-mem

pc(7-0) PC(3-0)&byte2

Hình 19

Giản đồ này từ trạng thái S1 đến S4 giống như mục 3, đến chu kỳ 5 tín hiệu write_mem tích cực cho phép CPU thực hiện thao tác ghi nội dung PC (7-0) vào ô nhớ địa chỉ PC (3-0) & byte2

.

.

.

.

.

.

.

.

.

.

.

< - S1 >

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Hình 20

Trang 32

Giản đồ này từ trạng thái S1 đến S4 giống như mục 3, tại chu kỳ S5 CPU thực hiện thao tác ghi nội dung ac vào ô nhớ địa chỉ byte1 (3-0) & byte2

gián tiếp)

.

.

< - S3 >

.

.

.

.

.

.

.

.

.

.

adbus

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

byte 2

< - S2 >

byte1(3-0)&byte2 pc

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

write-mem

Hinh 22

Từ chu kỳ S1 đến S6 thực hiện giống với giản đồ ở mục 7, đầu chu kỳ S7 phát địa chỉ trong byte1 (3-0) & byte2 để ghi nội dung acc vào bộ nhớ

Trang 33

Từ 8 giản đồ trạng thái trên vẽ được sơ đồ trạng thái mô tả hành vi của CPU như sau:

S8

S5

Reset = 0

Reset = 1 Lệnh 1 byte và đáp ứng int

interrupt

lệnh jn, jz, jc,jv và jmp (trực tiếp)

Lệnh lda, adc,and,sbc,

sta(gián tiếp)

lệnh lda,and,adc, sbc,sta(trực tiếp), jmp(gián tiếp),jsr.

Hình 23

2 Khối phục vụ chương trình(xem[ 2, 4] )

Khối utility này khai báo kiểu con byte độ dài 8 bit kiểu STD_LOGIC_VECTOR, kiểu con ten độ dài 10 bit kiểu STD_LOGIC_VECTOR Ngoài ra khai báo các hằng số có giá trị là các vector bit của các lệnh Tên của các lệnh được gán cho các mã tác vụ của lệnh đó Khối utilities trình bày hai hàm add_cv và sub_cv Hai hàm này thực hiện cộng và trừ hai toán hạng kiểu std_logic_vector có độ dài 8 bit Kết quả trả về là kiểu bit vector có chiều dài 8 + 2 Trong đó, bit có vị trí 8+1 chỉ thị cờ nhớ, bit có vị trí 8+2 chỉ thị cờ tràn Hai giá trị ADDR_WIDTH và DATA_WIDTH là chiều dài bit của hai tuyến địa chỉ và dữ liệu

PACKAGE UTILITY IS

CONSTANT ADDR_WIDTH: INTEGER := 2;

CONSTANT DATA_WIDTH: INTEGER :=8;

SUBTYPE byte IS std_logic_vector (7 DOWNTO 0);

Trang 34

SUBTYPE ten IS std_logic_vector (9 DOWNTO 0);

SUBTYPE nibble IS std_logic_vector (3 DOWNTO 0);

FUNCTION add_cv (a, b: byte; cin: std_logic) RETURN ten;

FUNCTION sub_cv (a, b: byte; cin: std_logic) RETURN ten;

FUNCTION set_if_zero (a: STD_LOGIC_VECTOR)

RETURN STD_LOGIC;

CONSTANT zero_8: byte := "00000000";

CONSTANT int_66: STD_LOGIC_VECTOR (11 DOWNTO 0):=

"000001100110";

CONSTANT zero_12: STD_LOGIC_VECTOR (11 DOWNTO 0):=

"000000000000";

CONSTANT cla: std_logic_vector (3 DOWNTO 0):="0001";

CONSTANT cma: std_logic_vector (3 DOWNTO 0):="0010";

CONSTANT cmc: std_logic_vector (3 DOWNTO 0):="0100";

CONSTANT asl: std_logic_vector (3 DOWNTO 0):="1000";

CONSTANT asr: std_logic_vector (3 DOWNTO 0):="1001";

CONSTANT jsr: std_logic_vector (2 DOWNTO 0):="110";

CONSTANT bra: std_logic_vector (3 DOWNTO 0):="1111";

CONSTANT indirect: std_logic:='1';

CONSTANT jmp: std_logic_vector (2 DOWNTO 0):="100";

CONSTANT sta: std_logic_vector (2 DOWNTO 0):="101";

CONSTANT lda: std_logic_vector (2 DOWNTO 0):="000";

CONSTANT ann: std_logic_vector (2 DOWNTO 0):="001";

CONSTANT adc: std_logic_vector (2 DOWNTO 0):="010";

CONSTANT sbc: std_logic_vector (2 DOWNTO 0):="011";

CONSTANT jsr_or_bra:std_logic_vector (1 DOWNTO 0):="11";

CONSTANT a_and_b: STD_LOGIC_VECTOR (5 DOWNTO 0):="000001"; CONSTANT b_compt: STD_LOGIC_VECTOR (5 DOWNTO 0):="000010"; CONSTANT a_input: STD_LOGIC_VECTOR (5 DOWNTO 0):="000100"; CONSTANT a_add_b: STD_LOGIC_VECTOR (5 DOWNTO 0):="001000"; CONSTANT b_input: STD_LOGIC_VECTOR (5 DOWNTO 0):="010000"; CONSTANT a_sub_b: STD_LOGIC_VECTOR (5 DOWNTO 0):="100000"; END UTILITY;

Trong thân khối utility trình bày hai giải thuật thực hiện hai phép toán cộng và trừ Trong hàm cộng, kết quả phép cộng bit và cờ nhớ của nó được tính như sau:

Sum := a XOR b XOR carry

Carry := ((a xor b) and carry) or ( a and b)

Trang 35

Vòng for thực hiện 8 phép cộng liên tiếp để tạo ra kết quả và cờ nhớ Để xác định bit tràn, kiểm tra hai ngõ vào cùng dấu và kết quả khác dấu thì phép tính đã bị tràn

Nếu dấu_a bằng dấu_b và kết quả khác dấu_a thì tràn ngược lại thì không tràn

Đối với phép trừ cũng tương tự như phép cộng chỉ khác là trước khi thực hiện thì lấy số bù của b và cờ tràn

PACKAGE BODY utility IS

FUNCTION add_cv (a, b: byte; cin: std_logic) RETURN ten IS

r(0) := a(0) XOR b(0) XOR cin;

c(0):=((a(0) XOR b(0)) AND cin) OR (a(0) AND b(0));

FOR i IN 1 TO (a'LEFT) LOOP

c(i) := ((a(i) XOR b(i)) AND c(i-1)) OR (a(i) AND b(i));

FUNCTION sub_cv (a, b: byte; cin: std_logic) RETURN ten IS

VARIABLE not_b: byte := zero_8;

VARIABLE not_c: std_logic;

r(0) := a(0) XOR not_b(0) XOR not_c;

c(0) := ((a(0) XOR not_b(0)) AND not_c) OR (a(0) AND not_b(0));

Trang 36

FOR i IN 1 TO (a'LEFT) LOOP

r(i) := a(i) XOR not_b(i) XOR c(i-1);

c(i) := ((a(i) XOR not_b(i)) AND c(i-1)) OR (a(i) AND not_b(i));

r(a'LEFT+1) := NOT c(a'LEFT);

IF a_sign = b_sign AND r(a'LEFT) = a_sign THEN r(a'LEFT+2) := '1'; ELSE r(a'LEFT+2) := '0';

END sub_cv;

END utility;

3 Mô tả hành vi cpu (xem[4] )

Mô tả hành vi của CPU bằng lệnh

cpu: PROCESS (clk_cpu)

Khai báo các biến cần thiết cho chương trình

BEGIN

Wait UNTIL clk_cpu = ‘0’;

IF reset =’0’ THEN Đặt các trạng thái ban đầu

ELSE

CASE state IS

WHEN S0 | S10 =>

IF interrup = ‘1’ THEN Xử lý ngắt quãng ELSE

END IF;

IF interrup =’1’ THEN Trở về trạng thái S10 ELSE

IF byte1 (7 downto 4) = lệnh một byte THEN

ELSE Đặt trạng thái S2;

Đọc dữ liệu vào byte 2, tăng PC + 1

IF byte1 (7 downto 4) = rẽ nhánh THEN

Ngày đăng: 25/01/2016, 15:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w